I have switched to using the coordinator pattern with any new work I do. I was resistant to break away from Storyboards using segues at first. But over the years I’ve learned any app of medium to large complexity breaks down under the weight of segues after a certain point.

I’ve been playing around with the new iOS 13 APIs a bit, and I was trying to create a new UIKit app using the coordinator pattern. The new UIKit template assumes the use of scenes instead of a single window. The single view app template breaks away from the standard app delegate and uses the new scene APIs. File ➤ New Project now creates a UISceneDelegate and wires everything up for you.

We have been expanding our use of universal links lately. While links are complicated and difficult to set up, once they are configured properly, making incremental updates to them is pretty trivial, and they are a great feature. We have implemented a few deep links so far. We also use the site association file to validate site ownership for password autofill. We will soon be using the site association file for implementing the Shared Web Credentials feature as well.

Here are a few lessons learned along the way:

Always plan on testing against a domain hosted over SSL with an official signed certificate (self-signed will not work)

Typing a URL directly into Mobile Safari will not trigger the universal link. You’ll need to get it into an external source and select it from there.

I’ve recently started trying to identify bottlenecks in my workflow and take a little bit of time to see if I can make things a little easier with automation. It’s always a tradeoff between the time spent automating something and actually getting work done. In this case, I can say the balance tipped way over to the side of saving me a great amount of time.

In the last post, I went over a very simple way to use generics when parsing a small object that had a value type determined at runtime. Today, I’d like to expand on that concept a bit and show how I implemented that concept into a parent struct that contained arrays of this object.

I have been working a lot in model layers lately. One benefit of this has been converting our older JSON parsing code over to using Swift 4’s enhanced JSON parsing capabilities. Using the Codable protocol has allowed me to delete hundreds of lines of boilerplate and streamline a lot of repetitive and error-prone code.

A lot of this work is pretty straightforward, where we are mapping properties to types, and sometimes including a CodingKey protocol object to ensure property names are mapped to JSON keys correctly. However, I ran across one interesting scenario and I wanted to share my solution to it.

I’ll present a simple generic object and its associated json in this post, and then show how that expanded out to a pretty nice solution once that smaller object became part of the full service in a future post.