Documentation

Release Notes

Version 2.2.0

September 17, 2024

The focus of this release is monitoring.

It’s been on the back burner for a while now, but we’re finally releasing integrations for error reporting and analytics! (via BugSnag and Mixpanel, respectively). Here’s the full changelog:

Added

  • AnalyticsLogging: A Swift protocol for modeling an analytics reporting service.
  • ErrorLogging: A Swift protocol for modeling an error reporting service.
  • Shareable.Video: An object that encapsulates video metadata to be shared using UIActivityItemSource. This enables sharing videos to external apps.
  • Shareable.Image: An object that encapsulates Image metadata to be shared using UIActivityItemSource. This enables sharing images to external apps.
  • AnalyticsLogController: A controller that handles analytics logging. Through this single interface, log to both console and Mixpanel (or other providers) simultaneously.
  • ConsoleLogController: Consumes the AnalyticsLogging and ErrorLogging protocols, ensuring that all errors and analytics are logged to console.
  • MixpanelLogController: Integrates logging to Mixpanel using the AnalyticsLogging protocol. Prefer using AnalyticsLogController instead for unified reporting.
  • ErrorLogController: A controller that handles error logging. Through this single interface, log to both console and Bugsnag (or other providers) simultaneously.
  • BugsnagLogController: A controller that wraps the BugSnag SDK using the ErrorLogging protocol. Prefer using ErrorLogController instead for unified error monitoring.
  • UserReviewController: A controller that streamlines prompting users for reviews.
  • MusicController: A controller that streamlines MusicKit interaction and permissions.
  • TrackingController: A controller that streamlines App Tracking Transparency permissions.
  • MotionController: A controller that streamlines the Core Motion SDK.
  • ShareView: A SwiftUI wrapper for UIActivityViewController. This exposes sharing a UIActivityItemSource to external apps through SwiftUI.
  • TrackingPermissionsView: A SwiftUI View for acquiring tracking permissions.
  • MusicLibraryPermissionsView: A SwiftUI View for acquiring Apple Music Library permissions.
  • MotionPermissionsView: A SwiftUI View for acquiring Core Motion data access permissions.

Updated

  • Updated Info.plist to include default privacy usage strings when retrieving user permissions (to avoid defaulting to a runtime crash).

Version 2.1.0

July 24, 2024

The theme of this release is consolidation.

Over the past 2 years Swift Starter Kits has released iterations of several kits, each with a different focus. What we’ve learned is that there are just too many types of apps – and providing premium support for all of them just isn’t feasible. Instead, our future strategy is to expand upon a single kit to include all the essential tools for the majority of mobile apps, with sane defaults, and support for opt-in components/integrations depending on what you need for your app.

With that out of the way, this release also adds a TON of new SwiftUI View’s, two new modules, with added project support for iOS 17 and Xcode 15.4.

New Modules

  • Authentication: This new module contains views, components, models and controllers for handling user authentication with an email and password. This system is generic, and includes all the primitives that you need to support authentication with any backend service provider.
  • System Services: This new module contains views and controllers for handling a variety of iOS system integrations and permissions.

New Views

  • AuthenticationContainer: A SwiftUI View for handling user sign in and account creation. Included as part of the Authentication module.
  • ChangeEmailView: A SwiftUI View for changing an account email. Included as part of the Authentication module.
  • ChangePasswordView: A SwiftUI View for changing an account password. Included as part of the Authentication module.
  • CreateAccountView: A SwiftUI View for creating an account. Included as part of the Authentication module.
  • EmailVerificationView: A SwiftUI View for email verification. Included as part of the Authentication module.
  • SignInView: A SwiftUI View for user sign in. Included as part of the Authentication module.
  • VerifyPasswordView: A SwiftUI View for handling password verification. Included as part of the Authentication module.
  • CalendarPermissionsView: A SwiftUI View for acquiring calender permissions from the operating system.
  • ContactPermissionsView: A SwiftUI View for acquiring contact/address book permissions from the operating system.
  • LocationPermissionsView: A SwiftUI View for acquiring location permissions from the operating system.
  • CameraPermissionsView: A SwiftUI View for acquiring camera permissions from the operating system.
  • MicrophonePermissionsView: A SwiftUI View for acquiring microphone permissions from the operating system.
  • NotificationPermissionsView: A SwiftUI View for acquiring local/push notification permissions from the operating system.
  • PhotoPermissionsView: A SwiftUI View for acquiring photo library permissions from the operating system.
  • OnboardingView: A SwiftUI View implementation providing an interface for introducing the application and its features to the user. Includes a scrolling view carousel, and externalized button actions for composing sign-in and sign-up navigation contexts.
  • SafariView: A SwiftUI View wrapper for SFSafariViewController.
  • WebView: A SwiftUI View wrapper for WKWebView that allows embedding websites within a SwiftUI view context.

New Modifiers

  • SafariViewSheet: A SwiftUI ViewModifier for modally presenting SafariView.
  • WebViewSheet: A SwiftUI ViewModifier for modally presenting a WebView.

New Controllers

  • UserController: A controller class for handling user authentication, re-authentication, and self-service account changes. Included as part of the Authentication module.
  • CalendarController: A controller class that encapsulates EKEventStore, and manages system permissions.
  • ContactController: A controller class that encapsulates the Contacts library, manages system permissions, and works with CNContactStore.
  • LocationController: A controller class that encapsulates CoreLocation, manages system permissions and works with CLLocationManager.
  • MediaCaptureController: A controller class that encapsulates AVFoundation, and manages system permissions for camera and microphone access.
  • NotificationController: A controller class that encapsulates the UserNotifications library and manages system notification permissions.
  • PhotoController: A controller class that encapsulates the Photos library and manages read/write permissions.

Updated

  • Renamed the project from SubscriptionStarterKit to StarterKit.
  • Updated the project to support iOS 17 and Xcode 15.4.

Removed

  • Deprecated ComponentStarterKit. All relevent components have been migrated to StarterKit.
  • Removed Boutique as the default database client.

Version 2.0.0

June 15, 2023

This release is a major overhaul of Swift Starter Kits and its component library. After receving a lot of feedback, we’ve decided to work towards making the kit framework agnostic. As such, we’ve removed Firebase and RevenueCat dependencies, and are instead providing offline implementations of all components and templates.

In the interim, we’ve temporarily removed FirebaseKit as we work to rebrand it to AuthenticationStarterKit. The kit is being streamlined and will be re-released in the next release.

Additionally, we’ve released a new kit!

Added

  • SubscriptionStarterKit. This is a production ready SwiftUI Starter Kit that provides a foundation for managing in-app subscriptions. Includes stateful onboarding, version changelogs, subscription UI, light and dark mode, dynamic app icons, themeable color system, haptics.

Removed

  • Removed FirebaseKit as it undergoes changes towards being backend agnostic. This will vastly improve the developer experience, and make the system more flexible, extensible, and remove Firebase as a default dependency.

Version 1.2.0

March 24, 2023

This is the largest Swift Starter Kits update ever. We’ve completely reorganized the bundled Xcode project, pulled our component library into a companion Swift Package (that ships alongside the Xcode project), and added user interfaces for major iOS system permission libraries.

Added

  • Created a SwiftUI Component Library. Reusable interfaces, components and language extensions have been pulled into a separate project.

  • DemoKit. This new kit acts as an interactive introduction to the complete library of components offered by SwiftStarterKits.

Changed

  • FirebaseTemplate has been renamed to FirebaseKit. Shared components have been pulled into the StarterKit component library.

  • Updated SwiftUI Environment Variables.

Version 1.1.0

February 16, 2023

This Swift Starter Kits update includes new button styles, SwiftUI components, SwiftUI modules, and lots of internal project cleanup.

Added

  • SwiftUI Button Style System. This adds Primary, Secondary and Tertiary button styles, in addition to Rounded and Rectangle style customizations.

  • SubscriptionView. A SwiftUI view module for building a subscription or in-app purchase paywall.

Version 1.0.0

December 2, 2022

This is the first major product release for SwiftStarterKits! A complete end-to-end integration for Firebase is included, which is composed with a complete set of fully networked user authentication SwiftUI components. The user experience works in both an offline debug environment and in an online environment backed by Firebase.

Added

  • HomeView. This is a SwiftUI View implementation with navigation to a Settings or Profile View. The existing implementation also includes SwiftStarterKits blog links for setup, but is intended for removal and customization.

  • SettingsView. This is a SwiftUI View implementation for handling user and application settings. Includes an account section containing fields for triggering navigation to email and password change flows and user logout, but can be extended as needed (Purchase restoration, subscription updates, push notification settings, app icon configuration, etc).

  • AvatarView. This is a SwiftUI View component that mimics popular “avatar” icons, which by default displays a single letter which scales to fit it’s bounds. Can be extended to show a rounded clipped image.

  • CircularGaugeStyleDesignerView. A debug SwiftUI View component that implements a progress view styled with ‘CircularGaugeProgressViewStyle’ and hooks it up into a designable preview for tweaking the width, length and size of the display. Allows easy experimentation for configuring new ProgressView styles.

  • LoadingIndicatorView. A SwiftUI View component that is a concrete implementation of CircularGaugeProgressViewStyle and SwiftUI.ProgressView, providing a custom styled loading indicator alongside network operations or temporarily blocking user input.

  • CircularGaugeProgressViewStyle. A SwiftUI ProgressView style, which draws a circle arc, fills it with a provided color gradient, and spins it at a provided speed. Can be applied to any SwiftUI.ProgressView implementation.

  • SystemFontSizedToFit. A SwiftUI.ViewModifier that manipulates a SwiftUI.Text view and scales it’s string contents to fit the enclosing bounds.

  • UserControlling. A protocol for managing the complete User lifecycle.

  • UserController. A concrete implementation of the UserControlling protocol. Abstracts away the underlying FirebaseService implementation and acts as the bridge between the User Interface and the Data layer of the application.

  • User. A structure for modeling a user entity , used by the UserController system.

  • AuthenticationError. A Swift Error and Swift LocalizedError enum implementation. This provides an extendable interface for categorizing runtime errors related to authentication.

  • StringValidating. An abstract protocol for string validation.

  • FormValidating. An abstract protocol for form validation, which collects an array of StringValidation rules.

  • FormValidator. A concrete implementation of the FormValidating protocol. Provides an object that receives a Sequence of string validation rules, and flattens them into a single boolean indicating validity.

  • PasswordValidator. A concrete implementation of the StringValidating protocol, for validating password input, coupled with a localized error message for failure cases.

  • PasswordConfirmationValidator. A concrete implementation of the StringValidating protocol, for validating password confirmation input, coupled with a localized error message for failure cases.

  • EmptyFieldValidator. A concrete implementation of the StringValidating protocol, for validating whether a Sequence of strings aren’t empty, coupled with a localized error message for failure cases.

  • EmailValidator. A concrete implementation of the StringValidating protocol, for validating email string input, coupled with a localized error message for failure cases.