diff --git a/MealMood/Resources/de.lproj/Localizable.strings b/MealMood/Resources/de.lproj/Localizable.strings index fd411db..3c2d4d9 100644 --- a/MealMood/Resources/de.lproj/Localizable.strings +++ b/MealMood/Resources/de.lproj/Localizable.strings @@ -380,3 +380,7 @@ /* Widget promo (1.2.0) */ "widget_promo_title" = "Die heutigen Mahlzeiten auf deinem Home-Bildschirm"; "widget_promo_body" = "Halte den Home-Bildschirm gedrückt, tippe auf + und suche nach MealMood, um das Widget hinzuzufügen."; + +/* Offer codes + share link (1.2.0) */ +"premium_redeem_code" = "Promo-Code einlösen"; +"share_link_text" = "Unsere Woche, geplant mit MealMood → https://mealmood.app"; diff --git a/MealMood/Resources/en.lproj/Localizable.strings b/MealMood/Resources/en.lproj/Localizable.strings index 96b3f26..470f59d 100644 --- a/MealMood/Resources/en.lproj/Localizable.strings +++ b/MealMood/Resources/en.lproj/Localizable.strings @@ -380,3 +380,7 @@ /* Widget promo (1.2.0) */ "widget_promo_title" = "Today's meals on your Home Screen"; "widget_promo_body" = "Long-press your Home Screen, tap +, and search for MealMood to add the widget."; + +/* Offer codes + share link (1.2.0) */ +"premium_redeem_code" = "Redeem promo code"; +"share_link_text" = "Our week, planned with MealMood → https://mealmood.app"; diff --git a/MealMood/Resources/es.lproj/Localizable.strings b/MealMood/Resources/es.lproj/Localizable.strings index 18b8a53..670b1eb 100644 --- a/MealMood/Resources/es.lproj/Localizable.strings +++ b/MealMood/Resources/es.lproj/Localizable.strings @@ -380,3 +380,7 @@ /* Widget promo (1.2.0) */ "widget_promo_title" = "Las comidas de hoy en tu pantalla de inicio"; "widget_promo_body" = "Mantén pulsada la pantalla de inicio, toca + y busca MealMood para añadir el widget."; + +/* Offer codes + share link (1.2.0) */ +"premium_redeem_code" = "Canjear código promocional"; +"share_link_text" = "Nuestra semana, planificada con MealMood → https://mealmood.app"; diff --git a/MealMood/Resources/fr.lproj/Localizable.strings b/MealMood/Resources/fr.lproj/Localizable.strings index 381ca0a..6aef1fe 100644 --- a/MealMood/Resources/fr.lproj/Localizable.strings +++ b/MealMood/Resources/fr.lproj/Localizable.strings @@ -380,3 +380,7 @@ /* Widget promo (1.2.0) */ "widget_promo_title" = "Les repas du jour sur votre écran d'accueil"; "widget_promo_body" = "Appuyez longuement sur l'écran d'accueil, touchez + et cherchez MealMood pour ajouter le widget."; + +/* Offer codes + share link (1.2.0) */ +"premium_redeem_code" = "Utiliser un code promo"; +"share_link_text" = "Notre semaine, planifiée avec MealMood → https://mealmood.app"; diff --git a/MealMood/Resources/it.lproj/Localizable.strings b/MealMood/Resources/it.lproj/Localizable.strings index 349db56..099493d 100644 --- a/MealMood/Resources/it.lproj/Localizable.strings +++ b/MealMood/Resources/it.lproj/Localizable.strings @@ -380,3 +380,7 @@ /* Widget promo (1.2.0) */ "widget_promo_title" = "I pasti di oggi sulla schermata Home"; "widget_promo_body" = "Tieni premuta la schermata Home, tocca + e cerca MealMood per aggiungere il widget."; + +/* Offer codes + share link (1.2.0) */ +"premium_redeem_code" = "Riscatta codice promo"; +"share_link_text" = "La nostra settimana, pianificata con MealMood → https://mealmood.app"; diff --git a/MealMood/Resources/pt-BR.lproj/Localizable.strings b/MealMood/Resources/pt-BR.lproj/Localizable.strings index 1449a81..5adbb8b 100644 --- a/MealMood/Resources/pt-BR.lproj/Localizable.strings +++ b/MealMood/Resources/pt-BR.lproj/Localizable.strings @@ -380,3 +380,7 @@ /* Widget promo (1.2.0) */ "widget_promo_title" = "As refeições de hoje na sua tela de início"; "widget_promo_body" = "Pressione a tela de início, toque em + e procure MealMood para adicionar o widget."; + +/* Offer codes + share link (1.2.0) */ +"premium_redeem_code" = "Resgatar código promocional"; +"share_link_text" = "Nossa semana, planejada com MealMood → https://mealmood.app"; diff --git a/MealMood/Views/Home/SocialShareSheet.swift b/MealMood/Views/Home/SocialShareSheet.swift index 49520a2..fc3bb2b 100644 --- a/MealMood/Views/Home/SocialShareSheet.swift +++ b/MealMood/Views/Home/SocialShareSheet.swift @@ -62,7 +62,9 @@ struct SocialShareSheet: View { } .toast(isShowing: $showCopiedToast, message: String(localized: "share_copied")) .sheet(isPresented: $showSystemShare) { - SystemShareSheet(activityItems: [imageURL]) + // Ship the link as text alongside the image so the viral loop isn't + // limited to the QR baked into the rendered export. + SystemShareSheet(activityItems: [imageURL, String(localized: "share_link_text")]) } } diff --git a/MealMood/Views/Premium/PremiumView.swift b/MealMood/Views/Premium/PremiumView.swift index 8a3a0cb..9d8b03d 100644 --- a/MealMood/Views/Premium/PremiumView.swift +++ b/MealMood/Views/Premium/PremiumView.swift @@ -8,6 +8,7 @@ struct PremiumView: View { @State private var appearedAt: Date = Date() @State private var didConvert: Bool = false @State private var selectedPlan: PlanChoice = .yearly + @State private var showOfferCodeRedemption: Bool = false let settings: AppSettings var source: String = "unknown" @@ -112,6 +113,17 @@ struct PremiumView: View { } .padding(.top, 4) + if !ProcessInfo.processInfo.isiOSAppOnMac { + Button { + showOfferCodeRedemption = true + } label: { + Text("premium_redeem_code") + .font(.mealMoodSmall) + .foregroundColor(.mealMoodCoral) + } + .padding(.top, 2) + } + Text("premium_terms_note") .font(.mealMoodCaption) .foregroundColor(.mealMoodTextSecondary) @@ -129,6 +141,13 @@ struct PremiumView: View { .task { await storeManager.loadProducts() } + .offerCodeRedemption(isPresented: $showOfferCodeRedemption) { result in + if case .success = result { + // Entitlement propagates via Transaction.updates; force a re-check + // so premium unlocks immediately after redeeming. + Task { await storeManager.restorePurchases() } + } + } .onAppear { appearedAt = Date() AnalyticsService.logPaywallViewed(source: source)