programming-ios · diff
git:20260428.53308d1 to git:20260503.f77bcc0
0 added, 11 removed. Audit A to A.
---
name: programming-ios
title: "iOS Development"
description: "iOS platform patterns, SwiftUI, SwiftData, App Intents, WidgetKit, StoreKit 2, and modern iOS SDK practices. Auto-activates for iPhone and iPad projects."
license: Apache-2.0
compatibility: "Requires Xcode 16+ and iOS 18+ SDK."
capabilities: programming-swift
domains: developer
rules:
- content(ios)
- content(iphone)
- content(ipad)
- content(uikit)
- match(iphone.+app|ios.+app|ipad.+app)
- file(*.xcodeproj)
---
# iOS Development
## Conventions
- SwiftUI first — UIKit only for components without SwiftUI equivalent
- SwiftData for persistence — prefer over Core Data for new projects (iOS 17+)
- NavigationStack for navigation — NavigationView is deprecated
- App Intents for Siri, Shortcuts, and Apple Intelligence integration
- Privacy manifests (PrivacyInfo.xcprivacy) required — declare all API usage reasons
- Target current and previous major iOS version as minimum deployment target
- Human Interface Guidelines compliance — platform-native look and feel
## SwiftUI Patterns
- NavigationStack with value-based NavigationLink for type-safe programmatic navigation
- NavigationPath for heterogeneous navigation state management
- NavigationSplitView for iPad multi-column layouts — collapses to stack on iPhone
- @Observable model classes — not ObservableObject/@StateObject for new code (iOS 17+)
- @Bindable for creating bindings to @Observable model properties in views
- @Environment for dependency injection — custom EnvironmentKey for app services
- .task modifier for async work tied to view lifecycle — cancels automatically on disappear
- ViewThatFits and AnyLayout for adaptive layouts across size classes
- Custom containers with ForEach(subviewOf:) API (iOS 18+)
- onScrollGeometryChange for tracking scroll position and reacting to scroll state (iOS 18+)
- MeshGradient for multi-directional color transitions with control point grids (iOS 18+)
## Data & Persistence
- SwiftData with @Model macro — automatic schema generation and lightweight migration
- @Query in SwiftUI views for filtered, sorted, animated data fetching
- ModelContainer configured at app entry point — inject via .modelContainer modifier
- CloudKit sync via SwiftData for seamless iCloud persistence
- @Attribute(.unique) for single-property deduplication, #Unique for compound constraints (iOS 18+)
- @Relationship for object graphs with cascade/nullify delete rules
- #Predicate macro for type-safe, compile-checked queries
- VersionedSchema + SchemaMigrationPlan for non-trivial schema migrations
## App Intents & Intelligence
- AppIntent protocol for actions exposed to Shortcuts, Siri, and Spotlight
- AppEntity for domain objects discoverable by the system
- @Parameter with type-safe validation for intent inputs
- AppShortcutsProvider for suggested shortcuts surfaced proactively
- @AssistantIntent(schema:) within App Intent Domains for Apple Intelligence integration (iOS 18+)
## WidgetKit & Live Activities
- TimelineProvider with TimelineEntry for widget content scheduling
- Live Activities via ActivityKit — real-time updates on lock screen and Dynamic Island
- Dynamic Island presentations: compact, expanded, minimal — design for all three
- Interactive widgets with AppIntent-backed Button and Toggle (iOS 17+)
- Push-based widget updates via APNs for server-driven content refresh
## StoreKit 2
- Product.products(for:) async API — no delegate callbacks
- Transaction.currentEntitlements for checking active purchases and subscriptions
- SubscriptionStoreView and ProductView for system-provided purchase UI
- StoreKit Testing in Xcode for local purchase simulation without sandbox accounts
- Transaction.updates AsyncSequence for real-time purchase monitoring
## Testing
- Swift Testing (@Test, #expect, #require) for unit and integration tests
- @Suite for test grouping, @Test(arguments:) for parameterized tests
- XCTest for UI automation — XCUIApplication, XCUIElement accessibility queries
- #Preview macro as living documentation — verify layout across devices and data states
- Test plans in Xcode for organizing configurations (language, region, arguments)
- Simulator testing via xcodebuild — target specific device and OS combinations
- ## Tooling
-
- | Command | Purpose |
- |---------|---------|
- | `xcodebuild -scheme App build` | Build the project |
- | `xcodebuild test -scheme App -destination 'platform=iOS Simulator,name=iPhone 16'` | Run tests on simulator |
- | `xcrun simctl list devices` | List available simulators |
- | `xcrun simctl boot <UDID>` | Boot a simulator |
- | `xcrun simctl install booted App.app` | Install app on booted simulator |
- | `xcodebuild -showBuildSettings` | Inspect build configuration |
-