Conferences Condensed: 360iDev 2022
The final year 😢
In August, we attended 360iDev, a long running iOS and macOS developer conference based in Denver, CO. Regrettably, this was the last 360iDev conference after over a decade. Here’s a look back at some of our favorite talks from the conference and what we learned from them!
Ellen started off by giving us an overview of how we got here. How did plugins become part of the package manager, rather than the IDE? In 2013, there was Alcatraz; in 2016, with Xcode 8, there were source extensions; and finally, in 2022, we now have command plugins and build tool plugins with Xcode 14.
Command plugins are the simpler of the two. They can be invoked either by the command line or from the Xcode menu. When using command plugins, be sure you know what they’re doing, because they can change your code in a way you may not have intended!
Build tool plugins are designed to be run automatically on every build—it’s a package embedded into
.xcodeproj, and the plugin is then added to the Package.swift. This is what people are generally referring to when they talk about “Xcode plugins.”
Don’t build your plugin and the package you’re testing it against in the same repo!
There are still quite a few limitations with plugins. First, as a user, always make sure you know what plugins are doing—don’t just click “Enable All” when running them. And when developing them, keep in mind that there’s no UI for your users, you can’t make network calls, and you can’t share data between plugins.
Surprise: we sponsored part of 360iDev by contributing this talk, from myself!
In my talk, I reviewed what a database is, and the big decisions that need to be made when choosing which one to use as an indie iOS developer. I compared three different cloud databases: Firebase, AWS Amplify, and Vapor with PostgreSQL. The question “how to choose the right database” is based on three main considerations: pricing, data, and authentication.
After evaluating each of the cloud databases with those considerations, we still have that question—“which database do we use?” To better understand when to choose which database, I reviewed different scenarios an indie app developer might face, and what the best cloud database option for each scenario might be.
Wrapping up the talk, the question remains—“which one is the best for an indie dev?” Personally, I chose Firebase, because AWS Amplify’s pricing is confusing and Vapor requires more backend knowledge and maintenance that may not be the best use of your time.
In the end though, it doesn’t really matter—as Justin (the keynote speaker) said, “all of the code is ephemeral, you can choose whichever you want,” and you’re probably going to change it later.
It’s hard to believe SwiftUI is already three years old, and now has relatively mature APIs that can be shipped in production. SwiftUI is highly performant with the right architecture in place!
Aviel’s talk was about how we can shift our mindset from imperative to declarative thinking. He also elaborated on how existing UIKit apps are structured, along with how to leverage some of the best features of SwiftUI—from publishing changes with
ObservableObject for state management to avoiding redundant view updates. This talk is chock full of good SwiftUI resources and patterns!
Josh is truly an inspiration for anyone that has a fear of public speaking. As a person with a disability—a bad case of migraines—I so appreciated his candidness when he mentioned his speech impediment. His talk was incredibly well done!
If you’re an iOS or Android developer, you’ve probably heard of Fastlane at some point. Josh went over the basics of Fastlane and how to use it within Xcode and the CLI. The most notable part of this talk is the Fastfile, a Ruby file that takes care of things like incrementing build numbers, archiving an app, capturing screenshots, and uploading to TestFlight and the App Store. Josh gave us some nifty tips on how to make the Fastfile more reusable and composable, all in a live demo that syncs all the necessary code signing certificates and provisioning profiles.