top of page

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

  1. Open the project in Xcode 26 or later and choose an iPhone simulator. Habit Tracker targets iOS 18.
  2. Choose your own signing team for a physical device; none is included.
  3. Configure your own product identity, artwork and any live services before distribution.
  4. Maintain one source: Habit Tracker and Todays Twenty are the editable sources of their templates.
  5. 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.

Links

bottom of page