Downloading, Caching & Decoding Images Asynchronously with Alamofire: Part 2

December 18, 2016 | Swift, Alamofire, Networking, iOS, macOS

In Part 1 of this tutorial, I explained how to use the Alamofire and AlamofireImage libraries to asynchronously download and cache images to be displayed in a UICollectionView. At the end of that project, we still had a performance problem. UIImage by default waits until right before display to decode . . .

Serializing & Archiving Structs in Swift with Archiver

October 26, 2016 | Swift, Serialization, iOS, macOS

There are many options for persisting data between launches in Cocoa apps, including NSUserDefaults, NSKeyedArchiver / NSKeyedUnarchiver, Core Data, and a range of third-party frameworks. NSKeyedArchiver is a popular choice for projects that require more than the basic key-value storage . . .

Downloading, Caching & Decoding Images Asynchronously with Alamofire: Part 1

September 18, 2016 | Swift, Alamofire, Networking, iOS, macOS

Downloading and caching images are common tasks in iOS development, especially when using collection and table views. In this tutorial, we're going to use the popular Swift networking library Alamofire and its companion image library AlamofireImage to build an app that displays images of Glacier National Park.

Automating Xcode Project Version Increments With Shell Scripts

August 23, 2016 | Swift, Scripting

I've made several frameworks and found myself going through the same process every time I wanted to update one of them to a new version. After finishing the code updates, I would increment the version number for each target (iOS, macOS, tvOS), update the version in the corresponding Podspec file, commit the version update . . .

Making Private, Cross-Platform Swift Frameworks With CocoaPods

July 10, 2016 | Swift, Dependency Management, CocoaPods, iOS, macOS, tvOS, watchOS

With technologies like handoff and continuity, a unified developer program, and many of the same system frameworks available on all four of its platforms, Apple has been moving over the past few years to more seamlessly integrate its ecosystem of devices. This presents a great opportunity for us to bring our apps to . . .