iOS Developer Competency Matrix
Use this skill as a review + implementation checklist when building features in this repo.
1) Quick triage questions (pick the right lane)
Answer these before coding:
- •Is this mostly UI (SwiftUI/UIKit), domain logic, data/network, or platform integration?
- •Do we need async work? If yes: can we use structured concurrency end-to-end?
- •What are the states (loading/empty/error/success) and how are they represented?
- •What must be testable (unit/UI/snapshot) and what is the acceptance criteria?
2) Swift language & concurrency rules
- •Prefer Swift concurrency (
async/await) over nested completion handlers. - •UI mutations on the main actor (
@MainActor/await MainActor.run). - •Use actors or isolated types for shared mutable state.
- •Watch for ARC traps: closures capturing
self→ use[weak self]when needed.
3) UI (SwiftUI + UIKit)
- •SwiftUI: choose the right state tool (
@State,@Binding,@StateObject,@ObservedObject,@Environment). - •UIKit: respect lifecycle, safe areas, and Auto Layout anchors.
- •Interop:
- •SwiftUI in UIKit:
UIHostingController - •UIKit in SwiftUI:
UIViewRepresentable/UIViewControllerRepresentable
- •SwiftUI in UIKit:
4) Architecture & patterns
Default opinionated picks (override only with reason):
- •SwiftUI screens: MVVM (View + ViewModel + injected services)
- •Navigation complexity: add a Coordinator (or a routing layer)
- •Scale/enterprise modules: consider Clean boundaries (domain/use-cases, repositories)
- •Dependency injection: start with initializer injection; add a container only when it pays off.
5) Networking & data
- •Prefer
URLSession+Codablewith explicit domain errors. - •Model API errors → map to user-facing messages at the edge.
- •Persistence: SwiftData/Core Data for relational graphs; Keychain for secrets; UserDefaults for prefs.
6) Platform integration
- •Understand scene lifecycle vs app delegate responsibilities.
- •For background work, pick the correct API (and keep expectations realistic).
- •Device features (camera/location/push/biometrics): treat permission flows + failure paths as first-class.
7) Quality: tests, debugging, performance
- •Unit tests for logic; UI tests for key flows; snapshot tests for UI regressions (if used here).
- •Use Instruments for leaks/time/energy when performance matters.
8) Release readiness
- •HIG alignment + accessibility basics.
- •Review Guideline landmines: privacy disclosures, permissions strings, incomplete flows.
- •CI/CD: prefer SPM; automate build/test; keep signing/provisioning sane.
References
- •Deep checklists + snippets:
references/checklists.md