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
|
|
|
// swift-tools-version: 6.0
|
|
|
|
|
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
|
|
|
|
|
|
|
|
|
import PackageDescription
|
|
|
|
|
|
|
|
|
|
let package = Package(
|
|
|
|
|
name: "Closer",
|
|
|
|
|
platforms: [
|
|
|
|
|
.iOS(.v17)
|
|
|
|
|
],
|
|
|
|
|
dependencies: [
|
|
|
|
|
// Firebase
|
|
|
|
|
.package(url: "https://github.com/firebase/firebase-ios-sdk.git", from: "11.0.0"),
|
|
|
|
|
|
|
|
|
|
// RevenueCat
|
|
|
|
|
.package(url: "https://github.com/RevenueCat/purchases-ios.git", from: "5.0.0"),
|
|
|
|
|
|
|
|
|
|
// Google Sign-In
|
|
|
|
|
.package(url: "https://github.com/google/GoogleSignIn-iOS.git", from: "8.0.0"),
|
2026-06-28 16:56:51 -05:00
|
|
|
|
|
|
|
|
// swift-sodium — audited libsodium wrapper for Argon2id (KDF) and other primitives.
|
|
|
|
|
// Pinned to 0.11.0: current stable as of Batch 2, bundles libsodium 1.0.20, supports Swift 6 / iOS 13+.
|
|
|
|
|
// Chosen over pure-Swift Argon2 ports because libsodium is audited and provides the RFC 9106 / Argon2 v1.3
|
|
|
|
|
// implementation we need for byte-identical KEK derivation with Android BouncyCastle.
|
|
|
|
|
.package(url: "https://github.com/jedisct1/swift-sodium.git", from: "0.11.0"),
|
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
|
|
|
],
|
|
|
|
|
targets: [
|
|
|
|
|
.target(
|
|
|
|
|
name: "Closer",
|
|
|
|
|
dependencies: [
|
|
|
|
|
.product(name: "FirebaseAuth", package: "firebase-ios-sdk"),
|
|
|
|
|
.product(name: "FirebaseFirestore", package: "firebase-ios-sdk"),
|
|
|
|
|
.product(name: "FirebaseFunctions", package: "firebase-ios-sdk"),
|
|
|
|
|
.product(name: "FirebaseMessaging", package: "firebase-ios-sdk"),
|
|
|
|
|
.product(name: "FirebaseStorage", package: "firebase-ios-sdk"),
|
|
|
|
|
.product(name: "RevenueCat", package: "purchases-ios"),
|
2026-06-20 22:54:21 -05:00
|
|
|
.product(name: "RevenueCatUI", package: "purchases-ios"),
|
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
|
|
|
.product(name: "GoogleSignIn", package: "GoogleSignIn-iOS"),
|
2026-06-28 16:56:51 -05:00
|
|
|
.product(name: "Sodium", package: "swift-sodium"),
|
2026-06-20 23:05:43 -05:00
|
|
|
],
|
|
|
|
|
path: "Closer",
|
2026-06-28 16:56:51 -05:00
|
|
|
exclude: ["Info.plist", "Closer.entitlements", "Crypto/SPEC.md"],
|
2026-06-21 11:20:48 -05:00
|
|
|
resources: [
|
2026-06-28 16:56:51 -05:00
|
|
|
.process("Resources"),
|
|
|
|
|
.process("Crypto/Resources"),
|
2026-06-21 11:20:48 -05:00
|
|
|
]
|
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
|
|
|
),
|
|
|
|
|
.testTarget(
|
|
|
|
|
name: "CloserTests",
|
2026-06-20 23:05:43 -05:00
|
|
|
dependencies: ["Closer"],
|
|
|
|
|
path: "CloserTests"
|
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
|
|
|
),
|
|
|
|
|
.testTarget(
|
|
|
|
|
name: "CloserUITests",
|
2026-06-20 23:05:43 -05:00
|
|
|
dependencies: ["Closer"],
|
|
|
|
|
path: "CloserUITests"
|
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
|
|
|
),
|
|
|
|
|
]
|
2026-06-21 11:20:48 -05:00
|
|
|
)
|