| Language |
Swift 6.3 (strict concurrency, default MainActor isolation in Xcode 26) |
Kotlin 2.4+ (K2 compiler default) |
| UI |
SwiftUI + Liquid Glass (iOS 26 target — applied by default when built with iOS 26 SDK) / standard SwiftUI (iOS 17-18 target). UIKit interop only when required |
Jetpack Compose + Material 3 Expressive (rolled out 2025-09 via Android 16 QPR1; material3:1.4.0 stable 2025-09-24, 1.5.0-alpha in flight 2026; Compose BOM 2026.05.00 maps Compose to 1.11.1); Strong Skipping Mode default |
| Architecture |
MV / MVVM / MVVM-C / TCA selected per scope (see native-architecture-mapping.md). @Observable (Swift 5.9+) is the default Model wrapper |
MVVM (Now-in-Android style) for standard screens; MVI / Reducer for complex-state screens (form-heavy, real-time editor) |
| Async |
async/await, AsyncSequence, structured concurrency, Swift 6.3 Approachable Concurrency (default MainActor isolation, @concurrent for explicit background) |
Coroutines + Flow; UI: collectAsStateWithLifecycle() mandatory |
| DI |
swift-dependencies / Factory / manual composition root |
Hilt (large / enterprise) or Koin (small-mid / KMP-friendly) |
| Navigation |
NavigationStack, NavigationSplitView, Coordinator pattern. Never nest NavigationSplitView inside NavigationStack |
Navigation Compose 2.8+ type-safe (Kotlin Serialization, @Serializable data class routes). String routes are legacy |
| Networking |
URLSession + async/await (Alamofire optional); Apollo iOS for GraphQL with Persisted Queries |
Ktor (KMP-friendly) or Retrofit + OkHttp; Apollo Kotlin for GraphQL with Persisted Queries |
| Persistence |
SwiftData (iOS 17+, default for new) or Core Data (iOS 16- / advanced predicates / FRC); Keychain (kSecAttrAccessControl with biometry) for secrets |
Room 3.0 (alpha 2026-03; androidx.room3:room3-runtime, Kotlin-only codegen, coroutines-first, SQLiteDriver-backed, KMP across Android/iOS/JVM/JS/Wasm) or Room 2.7+ (KMP stable, 2025-04) + DataStore Preferences; EncryptedSharedPreferences for secrets (legacy fallback); Tink for encryption |
| Auth |
Passkeys (FIDO2) first via ASAuthorizationController + Secure Enclave + Keychain; ASWebAuthenticationSession for OAuth/OIDC fallback; Sign in with Apple required when any third-party social login is offered |
Credential Manager (Passkey + Password + Sign in with Google) first; AppAuth + Custom Tabs as OAuth/OIDC fallback for non-supported IdPs |
| Push |
APNs (UNUserNotificationCenter) + Live Activities (ActivityKit) |
FCM (Firebase Cloud Messaging) + Notification Channels (mandatory) |
| Deep links |
Universal Links (AASA) + custom scheme fallback |
App Links (assetlinks.json) + intent filters. Firebase Dynamic Links retired — use AASA/assetlinks directly |
| Biometrics |
LocalAuthentication (Face ID / Touch ID) — for re-auth, not initial login |
BiometricPrompt — for re-auth, not initial login |
| Widgets |
WidgetKit + iOS 18 Control Center API (ControlWidgetToggle) |
Jetpack Glance (Compose-runtime-based) recommended for new widgets |
| AI (on-device) |
Foundation Models framework (~3B quantized + Private Cloud Compute fallback); App Intents + Apple Intelligence |
ML Kit GenAI APIs + Gemini Nano (AICore-managed) |
| Adaptive |
NavigationSplitView (iPad), Trifold/foldable; respect Window Size Classes |
Compose Adaptive Layouts 1.2+; Window Size Classes (compact / medium / expanded / large / extra-large); foldable + trifold |
| Privacy |
PrivacyInfo.xcprivacy with Required Reasons API declarations (mandatory since 2024-05; 3rd-party SDKs since 2025-02-12) |
Data Safety form in Play Console (covers all tracks, including Internal Testing) |
| Analytics |
Configurable (Firebase / Amplitude / Segment) — verify Privacy Manifest provided |
Configurable (same) — verify 16KB and Privacy Sandbox SDK Runtime status |
| Build |
Xcode 26 + xcodebuild + Swift Package Manager (Xcode 26 + iOS 26 SDK required for all App Store Connect uploads from 2026-04-28, no exceptions / no extensions) |
Gradle + Kotlin DSL + AGP; 16KB native libs required since 2025-11-01 (extension auto-grants until 2026-05-31) |
| CI |
Xcode Cloud / Fastlane / GitHub Actions |
Gradle + Fastlane / GitHub Actions |
| Min-OS default |
iOS 17+ (recommended); iOS 16+ (acceptable) |
API 28 (Android 9)+ default; API 31+ if Material You / SplashScreen / Photo Picker mandatory |
| targetSdk (Android) |
— |
Currently 35 (mandatory since 2025-08-31); 36 mandatory from 2026-08-31 for new apps + updates (edge-to-edge enforced, predictive back default ON, large-screen forced sw 600dp+) |