CFA Reference: Starter Apps
Formal CFA AI Toolkit for iOS Documentation · Reference 22 of 26
Starter Apps are working Xcode projects you can open immediately. No template installation is needed. They are customisable starting points, not a guarantee of AppStore readiness.
Definitions
- Habit Tracker: Today, Habits, Day Streak and Settings tabs; completion and count habits; daily streaks; seven colour themes plus Automatic; SwiftData persistence; Swift Testing suites for every screen ViewModel and Feature. Open HabitTrackerTemplate.xcodeproj.
- Habit Tracker Pro: Habit Tracker plus a Trends tab with Swift Charts, a one-time StoreKit unlock and local purchase tests.
- Todays Twenty: Daily multiplication practice with 20 correct first attempts per session, saved sessions and a reusable DayStreakFeature. Its project keeps the internal name TimesThirty.
- Shared owner: In Habit Tracker, TodayFeature and DayStreakFeature receive the same HabitsFeature instance from AppModel instead of keeping a second habit collection.
Rules
- Open the project in Xcode 26 or later and choose an iPhone simulator. Habit Tracker targets iOS 18.
- Choose your own signing team for a physical device; none is included.
- Configure your own product identity, artwork and any live services before distribution.
- Maintain one source: Habit Tracker and Todays Twenty are the editable sources of their templates.
- Keep each tab's ViewModel paired with its Feature, as in Habit Tracker's table: Today → todayFeature, Habits → habitsFeature, Day Streak → dayStreakFeature, Settings → settingsFeature.
Decision rules
- When you want to study a complete SwiftData app, open Habit Tracker.
- When you need a Charts or StoreKit pattern, open Habit Tracker Pro.
- When you want a non-database daily-activity example, open Todays Twenty.
- When you want a fresh project with your own name, use the matching template instead.
Example
The compiled HabitsFeature in Reference 5 is a simplified form of Habit Tracker's real HabitsFeature, which uses @ObservationIgnored private var startupTask, isLoading, loadError: String?, startLoading() and reload() async. Habit Tracker's ViewModels default their Feature from AppModel:
Repository excerpt from Habit Tracker's AddHabitViewModel.swift
init(habitsFeature: HabitsFeature = AppModel.shared.habitsFeature) {
self.habitsFeature = habitsFeature
}
Common mistakes
- Shipping a Starter App with its placeholder identity and icon.
- Adding a second habit collection for a new tab instead of reading HabitsFeature.
- Renaming Todays Twenty's targets and expecting storage paths to move with them.
