• Swiftkey Copies Pixel 11’s Awesome Rambler Feature

    With the arrival of the Pixel 11 series, it’s clear now that the star of the launch is the new Rambler voice-to-text feature. We’ve talked about it a number of times now, but other new Pixel 11 owners are talking about it just as much. Unfortunately, this is currently a Pixel 11 series feature and…

    Read More

  • Dates and Data Models

    Just use NSDate, right? The obvious choice for handling dates in iOS and OS X apps is NSDate. It’s obvious, right? It’s got “date” right in its name, doesn’t it? And that’s the thing about NSDate. It’s mis-named. It almost says so right in the docs: NSDate objects encapsulate a single point in time, independent…

    Read More

  • File Coordination Fixed!

    I wrote a post a few months ago about sharing data between iOS apps and app extensions in which I recommended using NSFileCoordinator and NSFilePresenter. But I had to update the post to remove that portion when some helpful people pointed me to Apple Tech Note 2408, which read in part: When you create a…

    Read More

  • Swift Generators and Sequences

    A large part of the Swift Standard Library is concerned with Generators, Sequences and Collections and functions that operate on them, so it’s pretty important to have a good understanding of them. I was going to write a blog post about how to create and use Swift generators and sequences. But while I was trying…

    Read More

  • Using Core Data with Swift

    Over the past month or so I’ve been diving into Swift, after many years of working with Objective-C on Macs and iOS. It’s been a change but, gradually, I’m learning the Swift way of doing things. On the way I’ve run into a few bumps in the road when dealing with Core Data, and I…

    Read More

  • iOS 8 App Extension Demo

    iOSDevCamp Colorado was a couple of weeks ago and I did a presentation/demo on iOS app extensions. I wanted to focus on how to actually do things, so mostly I worked in Xcode rather than present from slides. But rather than paste code in as I went or (gasp!) try to do it live, I…

    Read More