1.1.5: fix activation analytics blind spots + purchase environment tagging
- dish_added now carries a `source` param; onboarding-created dishes fire it with source="onboarding" (previously untracked, undercounting activation) - onboarding_completed now reports dish_count - premium_purchased tagged with StoreKit environment (production/sandbox/xcode) so test purchases can be excluded from conversion metrics - add .gitignore to keep signing secrets (.p12/.cer/.mobileprovision) and build artifacts out of the repo - document branch↔MARKETING_VERSION naming convention Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UtWT52pAE91D7mbDda1cAM
This commit is contained in:
@@ -81,7 +81,7 @@ final class StoreManager: ObservableObject {
|
||||
if case .verified(let transaction) = verification {
|
||||
await transaction.finish()
|
||||
isPremium = true
|
||||
AnalyticsService.logPremiumPurchased()
|
||||
AnalyticsService.logPremiumPurchased(environment: Self.environmentName(for: transaction))
|
||||
return .success
|
||||
}
|
||||
return .failed
|
||||
@@ -181,6 +181,17 @@ final class StoreManager: ObservableObject {
|
||||
return false
|
||||
}
|
||||
|
||||
/// Maps a transaction's StoreKit environment to an analytics-friendly string
|
||||
/// so sandbox/Xcode test purchases can be excluded from real conversion metrics.
|
||||
static func environmentName(for transaction: StoreKit.Transaction) -> String {
|
||||
switch transaction.environment {
|
||||
case .production: return "production"
|
||||
case .sandbox: return "sandbox"
|
||||
case .xcode: return "xcode"
|
||||
default: return "unknown"
|
||||
}
|
||||
}
|
||||
|
||||
private struct TimeoutError: Error {}
|
||||
|
||||
private func loadProductsWithRetries(maxAttempts: Int = 3) async throws -> [Product] {
|
||||
|
||||
Reference in New Issue
Block a user