Swift Starter Kits Version 1.2
Published on March 27, 2023
We've been thinking hard about the future of Swift Starter Kits, and planning on how we get there.
Ultimately, our goal is to provide the largest set of pre-packaged tools for Swift developers on Earth, while also keeping the quality bar extremely high. To make way for future starter kits, we've spent a lot of time this month reworking (and embracing) our monorepo approach. With Swift Starter Kits Version 1.2 , we now have the extendable foundation needed to build more kits under a single project umbrella.
An added bonus to this improved architecture is that we've released a demo application (aptly dubbed "DemoKit"), which enables testing of our entire component library and end-to-end starter kits through a single set of entry points. Being able to interact with Swift Starter Kits prior to purchase has been our most requested improvement, and we've finally made this a reality through a public TestFlight beta.
With the big stuff out of the way, lets look at what else is new in Version 1.2:
# New SwiftUI Components
When building for iOS, it's common to want a deeper level of integration with the operating system. After all, if we are going to build natively, we better take advantage of everything the iPhone and iPad have to offer. However, to ensure the end user's data is protected and privacy is ensured, these uber-powerful OS level features require express user consent.
With this in mind, we've built boilerplate solutions for requesting user permissions in a wide variety of use-cases. Our new suite of "permission" interfaces cover the majority of iOS libraries that require user consent, including:
- Photo Library
- Camera
- Microphone
- Geolocation
- Calender and Events
- Push Notifications
These interfaces also come with paired data controllers, which provide an encapsulation of the system libraries exposing the required authorization. These modules are cohesively designed, and give direction for extending system integrations further depending on the needs of your app.
# New Starter Kits
We've built two new kits this month, which are foundational and provide more ways to utilize our growing set of tools:
StarterKit
This is our new fully modularized SwiftUI component library. StarterKit contains all the reusable components, language extensions, and interfaces that come with Swift Starter Kits. We separated this library into a local Swift Package to ensure all of these tools can be used immediately in existing projects, in addition to providing a modular foundation for new projects. All of our current and future kits will lean heavily on StarterKit, and will grow alongside the number of use-cases we support.
DemoKit
All the kits and SwiftUI components built so far are now accessible through DemoKit, a new kit that provides a debug environment for playing with everything Swift Starter Kits has to offer. Our updated project architecture launches into DemoKit by default, and provides example implementations for bundled flows and screens.
# Redesigned Xcode Project
Initially, Swift Starter Kits was a single Firebase integrated Xcode project, with end-to-end authentication flows providing the foundation for "user focused" applications. Our longer-term vision is to provide starter kits for many types of apps: social media, photo editing, generative A.I., e-commerce just to name a few.
With this future in mind, we moved shared components into a separate Swift package (still in the same Xcode project). What was previously "FirebaseTemplate" we've renamed to "FirebaseKit", to fit our intended naming conventions, and we've moved all of our kits under a shared application directory.
We hope this makes first time usage easier, and provides a more cohesive design for future kits and components.
# What's Next
Looking towards version 1.3, we're actively working on improving a number of things:
- Reduce the reliance on UIKit for core app navigation, making our implementation more portable towards other Apple platforms.
- Adding in-app purchase and subscription support out of the box, using RevenueCat.
- Improving documentation, and working towards a hosted doc library using DocC.