Swift Scripting: Automatic Version Increments in Xcode

July 20, 2017 | Swift, Scripting

In this tutorial we'll increment the version number of a Xcode single view application using a Swift script. We'll cover how to make the script executable, accept command line input, and execute shell commands from our Swift file.

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 . . .