Swift / SwiftUI — Checklist¶
OWNER: martijn, valentin ALSO_USED_BY: alexander (design integration) LAST_VERIFIED: 2026-03-26 GE_STACK_VERSION: Xcode 26 / iOS 26 SDK
Overview¶
Machine-parseable checklists for iOS development and App Store submission.
Items grow organically — agents add items when they discover pitfalls.
Items are NEVER removed — only marked DEPRECATED: {reason} if no longer applicable.
PRE-DEVELOPMENT CHECKLIST (project setup)¶
- [ ] CHECK: Xcode version is 26 or later IF_SKIPPED: App Store rejection after April 28, 2026
- [ ] CHECK: Swift strict concurrency is enabled (
-strict-concurrency=complete) IF_SKIPPED: Data races go undetected until production crash - [ ] CHECK: Minimum deployment target is iOS 17 IF_SKIPPED: SwiftData unavailable, Liquid Glass degraded
- [ ] CHECK: Dependencies use Swift Package Manager only — no CocoaPods, no Carthage IF_SKIPPED: Build system conflicts, CI pipeline breaks
- [ ] CHECK: SwiftLint is configured with
.swiftlint.ymlat project root IF_SKIPPED: Inconsistent code style across agents - [ ] CHECK: Fastlane Match is configured for code signing IF_SKIPPED: Manual signing creates certificate conflicts
- [ ] CHECK: GitHub Actions workflow exists for test + build + deploy IF_SKIPPED: No automated quality gate, manual uploads
- [ ] CHECK: Project structure follows GE convention (App/, Features/, Core/, Resources/, Tests/) IF_SKIPPED: Files scattered, hard to navigate for other agents
PRE-COMMIT CHECKLIST (every code change)¶
- [ ] CHECK: No
ObservableObjector@Publishedin new code — use@ObservableIF_SKIPPED: Legacy patterns, inconsistent state management - [ ] CHECK: All escaping closures use
[weak self]IF_SKIPPED: Memory leaks and retain cycles - [ ] CHECK: All network calls go through
APIClient— no directURLSessionin ViewModels IF_SKIPPED: Duplicated error handling, no retry logic, no auth injection - [ ] CHECK: No secrets (tokens, keys, passwords) in source code or UserDefaults IF_SKIPPED: Security breach, App Store rejection
- [ ] CHECK: Every interactive UI element has an accessibility label IF_SKIPPED: VoiceOver broken, HIG non-compliant
- [ ] CHECK: No fixed font sizes — use semantic text styles (
.headline,.body, etc.) IF_SKIPPED: Dynamic Type broken for vision-impaired users - [ ] CHECK:
.glassEffect()only on navigation/control elements, never on content IF_SKIPPED: Visual noise, violates Apple HIG for Liquid Glass - [ ] CHECK: No
@unchecked Sendable— fix the actual concurrency issue IF_SKIPPED: Data race hidden from compiler, crashes in production - [ ] CHECK: No
NavigationView— useNavigationStackIF_SKIPPED: Deprecated API, broken iPad navigation - [ ] CHECK: Services injected via protocol — not concrete types IF_SKIPPED: Untestable ViewModels
- [ ] CHECK: Previews render without crashes for all new/modified views IF_SKIPPED: Development velocity drop, preview canvas unusable
PRE-TESTFLIGHT CHECKLIST (beta release)¶
- [ ] CHECK: All unit tests pass IF_SKIPPED: Regressions shipped to testers
- [ ] CHECK: Build number incremented (GitHub Actions run number) IF_SKIPPED: TestFlight rejects duplicate build numbers
- [ ] CHECK: Tested on physical device (not just Simulator) IF_SKIPPED: Performance issues, Liquid Glass rendering differences, camera/AR bugs
- [ ] CHECK: Memory Graph Debugger shows no leaks on main flows IF_SKIPPED: Memory climbs over time, OS kills the app
- [ ] CHECK: Dark mode renders correctly IF_SKIPPED: Unreadable text, invisible elements
- [ ] CHECK: Landscape orientation handled or locked to portrait IF_SKIPPED: Broken layouts on rotation
- [ ] CHECK: Network error states tested (airplane mode, slow connection) IF_SKIPPED: App hangs or shows blank screens offline
- [ ] CHECK: VoiceOver walkthrough of all primary flows IF_SKIPPED: Accessibility failures, HIG non-compliance
PRE-APP-STORE CHECKLIST (production submission)¶
- [ ] CHECK: App name, subtitle, description, keywords complete in App Store Connect IF_SKIPPED: Metadata rejection
- [ ] CHECK: Screenshots provided for required device sizes (6.5"/6.9" iPhone, 13" iPad) IF_SKIPPED: Submission blocked
- [ ] CHECK: Privacy policy URL is publicly accessible and accurate IF_SKIPPED: Automatic rejection
- [ ] CHECK: Support URL is live and reachable IF_SKIPPED: Rejection
- [ ] CHECK: App Review notes include test account credentials (if auth required) IF_SKIPPED: Reviewer cannot test, rejection
- [ ] CHECK: Age rating questionnaire completed IF_SKIPPED: Submission blocked
- [ ] CHECK: All Info.plist privacy usage descriptions present (camera, photos, location, etc.) IF_SKIPPED: Automatic rejection during validation
- [ ] CHECK: No private API usage IF_SKIPPED: Rejection during automated scan
- [ ] CHECK: App does not crash on launch IF_SKIPPED: Immediate rejection
- [ ] CHECK:
automatic_releaseset tofalse— client approves release timing IF_SKIPPED: App goes live before client is ready - [ ] CHECK: Version number follows semantic versioning (X.Y.Z) IF_SKIPPED: Confusing version history
- [ ] CHECK: Built with iOS 26 SDK (required from April 28, 2026) IF_SKIPPED: Submission rejected ADDED_FROM: apple-requirements-2026-04, SDK minimum bump
HIG COMPLIANCE CHECKLIST (Apple Human Interface Guidelines)¶
- [ ] CHECK: Navigation follows iOS conventions (back button, swipe-to-go-back) IF_SKIPPED: Rejection for "non-standard UI"
- [ ] CHECK: No custom alert/action sheet implementations that mimic system dialogs IF_SKIPPED: HIG violation, confuses users
- [ ] CHECK: Tab bar has 3-5 items maximum IF_SKIPPED: Crowded navigation, HIG violation
- [ ] CHECK: Icons use SF Symbols where possible IF_SKIPPED: Inconsistent visual language
- [ ] CHECK: Launch screen matches initial app state (no blank white screen) IF_SKIPPED: Perceived slow launch
- [ ] CHECK: Haptic feedback used sparingly and appropriately IF_SKIPPED: Annoying or missing tactile cues
- [ ] CHECK: Liquid Glass usage follows Apple guidelines — navigation layer only IF_SKIPPED: Visual clutter, HIG non-compliance
Cross-References¶
READ_ALSO: wiki/docs/stack/swift-swiftui/index.md READ_ALSO: wiki/docs/stack/swift-swiftui/pitfalls.md READ_ALSO: wiki/docs/stack/swift-swiftui/distribution.md READ_ALSO: wiki/docs/stack/swift-swiftui/ui-patterns.md