AcornKit — the agent-ready SwiftUI starter kit. The only kit your AI coding
agent already understands: it ships
CLAUDE.md, AGENTS.md, TOKENS.md, and a
scaffold skill, so you can tell Claude Code or Cursor “add a settings screen” and
it follows the kit’s conventions instead of guessing.What’s in the box
AcornCore— the dependency-free engine: design system (AcornTheme+ tokens), StoreKit 2 subscriptions, onboarding→paywall→home gate, analytics protocol, account/data-deletion, an auth seam, an AI-chat seam, and composable UI.acorn-ios-template— a runnable app shell that composes AcornCore: 2 onboarding styles, 2 paywall styles, a tabbed home + settings, and an example AI Assistant tab.- Optional modules — swap a vendor in one line:
AcornCoreRevenueCat,AcornCoreSupabase(auth),AcornCorePostHog(analytics),AcornCoreAI(OpenAI/Claude),AcornCoreFirebase. - Agent files + scaffold skill —
CLAUDE.md/AGENTS.md/CONTEXT.md/TOKENS.md, aMakefile, SwiftLint + token-lint, andscaffold-ios-app. - Real proof — built by the studio behind shipped apps (Focus0, Habit0, OnePushMan, …).
Requirements
- macOS + Xcode 16+, iOS 17+ target. Swift 6.
- A paid Apple Developer account (to ship; not needed to build/run locally).
- Optional, only if you use them: a Supabase project (auth), RevenueCat account, an LLM key.
1. Scaffold your app
The template ships with{{PLACEHOLDER}} tokens ({{APP_DISPLAY_NAME}},
{{APP_TAGLINE}}, {{APP_SLUG}}, {{BUNDLE_ID}}, {{SIMULATOR_ID}}). Use the
scaffold-ios-app skill to stamp a fresh app from the template — it replaces the
placeholders and lays out the workspace + feature package. Keep AcornCore beside your
app (the package references it at ../../AcornCore).
2. Make it yours
Everything app-specific lives in one file —AppConfig.swift (the composition root):
- Brand: override only the colors that differ from the premium-dark default in
BrandConfig/BrandColors; set the app name. ReadTOKENS.mdbefore touching UI — raw colors/fonts/padding failmake lint. - Pick screen styles:
AppConfig.onboardingStyle(.valueStack/.story) andpaywallStyle(.planList/.singleCTA). - Product IDs: set
productIDPrefix→<prefix>.{weekly,monthly,yearly,lifetime}.
3. Run it
From the app directory (never callxcodebuild directly — use the Makefile):
| Task | Command |
|---|---|
| Build & run on the simulator | make build |
| Unit tests | make test |
| Token + SwiftLint | make lint |
| Full verification (build/test/screens/a11y) | make verify |
| Print the design-token reference | make tokens |
The architecture in 60 seconds
AcornKit’s rule: your app talks to protocols, never to vendors. Each capability is a swappable seam with a dependency-free default and an optional vendor module:| Capability | Seam (protocol) | Default (no deps) | Optional swap |
|---|---|---|---|
| Subscriptions | SubscriptionProviding | StoreKitSubscriptionProvider | RevenueCatSubscriptionProvider → RevenueCat setup |
| Auth | AuthProviding | AnonymousAuthProvider (guest) | SupabaseAuthProvider → Auth setup |
| Analytics | AnalyticsProviding | ConsoleAnalytics | PostHogAnalytics |
| AI chat | ChatProviding | EchoChatProvider / ProxyChatProvider | OpenAIChatProvider / AnthropicChatProvider → AI chat setup |
| Data deletion | DataResetting | LocalDataResetter | FirebaseDataResetter / Composite |
AppConfig — the screens never change.
Add features the agent-ready way
This is the kit’s edge. In Claude Code / Cursor, ask for a feature in plain English — “add a journal feature with a list and a detail screen” — and the agent readsCLAUDE.md / AGENTS.md / TOKENS.md and produces code that uses your tokens, your
@Observable pattern, and your folder structure. No re-teaching conventions every time.
Ship checklist
Subscriptions
StoreKit products in App Store Connect (or swap to RevenueCat — see RevenueCat setup).
Auth (if used)
Supabase + Sign in with Apple configured — see Auth setup.
AI (if used)
Proxy deployed, key server-side — see AI chat setup.
Next
Auth setup
Add accounts in 3 steps with Supabase + Sign in with Apple.
RevenueCat in one line
Swap StoreKit for RevenueCat without touching a screen.
Add an AI chat
Stream completions with the key kept server-side.
TOKENS.md; architecture & conventions in AGENTS.md / CLAUDE.md (shipped in the kit).