feat(ios): add native SwiftUI iOS app scaffold under /iphone/ (batch 1-6)
- ARCHITECTURE_AUDIT.md: full audit covering 49 screens, Firestore schema,
35 domain models, 17 Cloud Functions, RevenueCat integration, auth flow,
E2EE skip-for-MVP decision
- Project config: project.yml (XcodeGen), Info.plist, Closer.entitlements, Package.swift (SPM)
- Core: AuthService (rate limiter), FirestoreService (callable wrappers),
BillingService (RevenueCat), NotificationService (FCM)
- Models: AuthState (ObservableObject), FirestoreModels (20+ codable types),
DomainModels (35 structs)
- Theme: CloserTheme (50+ colors, typography, spacing), CommonViews
- Screens: Onboarding, pairing, home, daily questions, play hub + games
(ThisOrThat, HowWell, DesireSync, ConnectionChallenges), spin wheel
(animated 8-slice), dates (swipe cards, bucket list), settings + paywall
(RevenueCatUI)
2026-06-20 17:15:25 -05:00
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
|
|
|
<plist version="1.0">
|
|
|
|
|
<dict>
|
|
|
|
|
<key>CFBundleDevelopmentRegion</key>
|
|
|
|
|
<string>en</string>
|
|
|
|
|
<key>CFBundleDisplayName</key>
|
|
|
|
|
<string>Closer</string>
|
|
|
|
|
<key>CFBundleExecutable</key>
|
|
|
|
|
<string>$(EXECUTABLE_NAME)</string>
|
2026-06-22 18:19:07 -05:00
|
|
|
<key>CFBundleIcons</key>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>CFBundlePrimaryIcon</key>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>CFBundleIconFiles</key>
|
|
|
|
|
<array>
|
|
|
|
|
<string>AppIcon</string>
|
|
|
|
|
</array>
|
|
|
|
|
<key>CFBundleIconName</key>
|
|
|
|
|
<string>AppIcon</string>
|
|
|
|
|
</dict>
|
|
|
|
|
</dict>
|
|
|
|
|
<key>CFBundleIcons~ipad</key>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>CFBundlePrimaryIcon</key>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>CFBundleIconFiles</key>
|
|
|
|
|
<array>
|
|
|
|
|
<string>AppIcon</string>
|
|
|
|
|
</array>
|
|
|
|
|
<key>CFBundleIconName</key>
|
|
|
|
|
<string>AppIcon</string>
|
|
|
|
|
</dict>
|
|
|
|
|
</dict>
|
feat(ios): add native SwiftUI iOS app scaffold under /iphone/ (batch 1-6)
- ARCHITECTURE_AUDIT.md: full audit covering 49 screens, Firestore schema,
35 domain models, 17 Cloud Functions, RevenueCat integration, auth flow,
E2EE skip-for-MVP decision
- Project config: project.yml (XcodeGen), Info.plist, Closer.entitlements, Package.swift (SPM)
- Core: AuthService (rate limiter), FirestoreService (callable wrappers),
BillingService (RevenueCat), NotificationService (FCM)
- Models: AuthState (ObservableObject), FirestoreModels (20+ codable types),
DomainModels (35 structs)
- Theme: CloserTheme (50+ colors, typography, spacing), CommonViews
- Screens: Onboarding, pairing, home, daily questions, play hub + games
(ThisOrThat, HowWell, DesireSync, ConnectionChallenges), spin wheel
(animated 8-slice), dates (swipe cards, bucket list), settings + paywall
(RevenueCatUI)
2026-06-20 17:15:25 -05:00
|
|
|
<key>CFBundleIdentifier</key>
|
|
|
|
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
|
|
|
<key>CFBundleInfoDictionaryVersion</key>
|
|
|
|
|
<string>6.0</string>
|
|
|
|
|
<key>CFBundleName</key>
|
|
|
|
|
<string>$(PRODUCT_NAME)</string>
|
|
|
|
|
<key>CFBundlePackageType</key>
|
|
|
|
|
<string>APPL</string>
|
|
|
|
|
<key>CFBundleShortVersionString</key>
|
|
|
|
|
<string>0.2.0</string>
|
|
|
|
|
<key>CFBundleURLTypes</key>
|
|
|
|
|
<array>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>CFBundleURLName</key>
|
|
|
|
|
<string>com.google.ReversedClientID</string>
|
|
|
|
|
<key>CFBundleURLSchemes</key>
|
|
|
|
|
<array>
|
|
|
|
|
<string>$(GOOGLE_REVERSED_CLIENT_ID)</string>
|
|
|
|
|
</array>
|
|
|
|
|
</dict>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>CFBundleURLName</key>
|
|
|
|
|
<string>app.closer.iphone</string>
|
|
|
|
|
<key>CFBundleURLSchemes</key>
|
|
|
|
|
<array>
|
|
|
|
|
<string>closer</string>
|
|
|
|
|
</array>
|
|
|
|
|
</dict>
|
|
|
|
|
</array>
|
|
|
|
|
<key>CFBundleVersion</key>
|
|
|
|
|
<string>1</string>
|
|
|
|
|
<key>FirebaseAppDelegateProxyEnabled</key>
|
|
|
|
|
<false/>
|
|
|
|
|
<key>LSRequiresIPhoneOS</key>
|
|
|
|
|
<true/>
|
|
|
|
|
<key>NSCameraUsageDescription</key>
|
|
|
|
|
<string>Take a profile photo or add photos to memory capsules.</string>
|
|
|
|
|
<key>NSPhotoLibraryUsageDescription</key>
|
|
|
|
|
<string>Choose photos for your profile or memory capsules.</string>
|
|
|
|
|
<key>UIApplicationSceneManifest</key>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>UIApplicationSupportsMultipleScenes</key>
|
|
|
|
|
<false/>
|
|
|
|
|
</dict>
|
|
|
|
|
<key>UIBackgroundModes</key>
|
|
|
|
|
<array>
|
|
|
|
|
<string>fetch</string>
|
|
|
|
|
<string>remote-notification</string>
|
|
|
|
|
</array>
|
|
|
|
|
<key>UILaunchScreen</key>
|
|
|
|
|
<dict>
|
|
|
|
|
<key>UIColorName</key>
|
|
|
|
|
<string>LaunchBackground</string>
|
|
|
|
|
</dict>
|
|
|
|
|
<key>UIRequiredDeviceCapabilities</key>
|
|
|
|
|
<array>
|
|
|
|
|
<string>armv7</string>
|
|
|
|
|
</array>
|
|
|
|
|
<key>UISupportedInterfaceOrientations</key>
|
|
|
|
|
<array>
|
|
|
|
|
<string>UIInterfaceOrientationPortrait</string>
|
|
|
|
|
</array>
|
|
|
|
|
<key>UIUserInterfaceStyle</key>
|
|
|
|
|
<string>Light</string>
|
|
|
|
|
</dict>
|
2026-06-22 18:19:07 -05:00
|
|
|
</plist>
|