# App Store Connect — Setup para 1.1.5 Esta guía cubre los 3 cambios manuales que hay que hacer en App Store Connect antes de subir la build 51 a TestFlight / App Store. Todo está alineado con `MealMood.storekit` local, así que puedes probar el flujo en simulador antes de tocar producción. Resumen: 1. **Crear yearly subscription** ($19.99 / 7-day trial) 2. **Añadir 7-day trial al monthly existente** 3. **Actualizar el lifetime existente** (precio $39.99, renaming opcional) --- ## 1. Crear yearly subscription **Path:** App Store Connect → MealMood → Subscriptions → Subscription Group "MealMood Premium" → **+** Create Subscription ### Datos principales | Campo | Valor | |---|---| | Reference Name | `MealMood Premium Yearly` | | Product ID | `com.alexandrevazquez.mealmood.premium.yearly.sub` | | Subscription Group | MealMood Premium *(mismo grupo que el monthly)* | | Subscription Duration | 1 year | | Price (USD) | **$19.99** | | Family Sharing | ✅ Enabled | | Available Countries | Mismas que el monthly (All Countries/Regions recomendado) | | Cleared for Sale | ✅ | > ℹ️ Al guardar, App Store Connect te asignará automáticamente el tier de precio equivalente en cada divisa. ### Localizations (6 idiomas) **Subscription Display Name** + **Description** por idioma: #### English (U.S.) — Primary - **Display Name:** `MealMood Premium Yearly` - **Description:** `Unlimited dishes, advanced rotation rules, ad-free and stats — billed yearly. Best value, save vs monthly.` #### Spanish (Spain) - **Display Name:** `MealMood Premium Anual` - **Description:** `Platos ilimitados, reglas avanzadas de rotación, sin anuncios y estadísticas — facturación anual. La mejor oferta, ahorra frente al plan mensual.` #### French (France) - **Display Name:** `MealMood Premium Annuel` - **Description:** `Plats illimités, règles avancées de rotation, sans publicité et statistiques — facturation annuelle. Meilleur prix, économisez par rapport au mensuel.` #### German - **Display Name:** `MealMood Premium Jährlich` - **Description:** `Unbegrenzte Gerichte, erweiterte Rotationsregeln, werbefrei und Statistiken — jährliche Abrechnung. Bestes Angebot, sparen Sie gegenüber dem Monatsplan.` #### Italian - **Display Name:** `MealMood Premium Annuale` - **Description:** `Piatti illimitati, regole avanzate di rotazione, senza pubblicità e statistiche — fatturazione annuale. Miglior prezzo, risparmia rispetto al piano mensile.` #### Portuguese (Brazil) - **Display Name:** `MealMood Premium Anual` - **Description:** `Pratos ilimitados, regras avançadas de rotação, sem anúncios e estatísticas — cobrança anual. Melhor oferta, economize em relação ao plano mensal.` ### Subscription Introductory Offer (free trial) **Path:** En el detalle del yearly → **Subscription Prices** → **Introductory Offers** → **+** Create Introductory Offer | Campo | Valor | |---|---| | Countries | All Countries (where the subscription is available) | | Offer Type | **Free** | | Duration | **1 Week** | | Available to | New Subscribers only | | Start Date | Today | | End Date | (none — open-ended) | > ⚠️ Esto es lo que activa el "7-day free trial" en la app. Sin esto, el `introductoryOffer` será null en el StoreKit response. ### Review Information (lo verá Apple Review) - **Screenshot:** sube una captura del paywall mostrando el plan anual seleccionado con el badge "BEST VALUE" y el botón "Start free trial" - **Review Notes:** ``` Yearly subscription unlocking Premium features: unlimited dishes, advanced tag rotation rules, ad removal, statistics dashboard, unlimited future weeks planning, and meal plan export. Includes a 7-day free trial for new subscribers. To test: launch app → Settings → Premium, or trigger any paywall from dish limit / share button. ``` --- ## 2. Añadir 7-day free trial al monthly existente **Path:** App Store Connect → MealMood → Subscriptions → `com.alexandrevazquez.mealmood.premium.monthly.sub` → **Subscription Prices** → **Introductory Offers** → **+** Create Introductory Offer | Campo | Valor | |---|---| | Countries | All Countries (where the subscription is available) | | Offer Type | **Free** | | Duration | **1 Week** | | Available to | New Subscribers only | | Start Date | Today | | End Date | (none) | > ℹ️ No hace falta tocar nada más del monthly. El precio se queda en $2.99, sólo se le añade el trial. --- ## 3. Actualizar el lifetime existente **Path:** App Store Connect → MealMood → In-App Purchases → `com.mealmood.premium.monthly` (es Non-Consumable, no toques el ID — sí, el nombre es engañoso pero es el legacy lifetime) ### Cambios | Campo | Valor actual | Valor nuevo | |---|---|---| | Reference Name | MealMood Premium Legacy | `MealMood Premium Lifetime` | | Price (USD) | $2.99 | **$39.99** | | Family Sharing | Disabled | ✅ **Enabled** | | Cleared for Sale | ✅ | ✅ (mantener) | > ⚠️ El **Product ID NO se puede cambiar** una vez creado. Por eso aunque diga `monthly` en el nombre, sigue siendo nuestro lifetime. El código ya lo trata como tal (`StoreManager.legacyOneTimeProductId`). ### Localizations (6 idiomas) Actualiza los display names y descriptions: #### English (U.S.) — Primary - **Display Name:** `MealMood Premium Lifetime` - **Description:** `Unlock everything forever with a single one-time payment. No subscription, no renewals — yours to keep.` #### Spanish (Spain) - **Display Name:** `MealMood Premium De Por Vida` - **Description:** `Desbloquea todo para siempre con un único pago. Sin suscripción, sin renovaciones — tuyo para siempre.` #### French (France) - **Display Name:** `MealMood Premium À Vie` - **Description:** `Débloquez tout pour toujours avec un seul paiement unique. Sans abonnement, sans renouvellement — c'est à vous pour toujours.` #### German - **Display Name:** `MealMood Premium Lebenslang` - **Description:** `Schalte alles dauerhaft mit einer einmaligen Zahlung frei. Kein Abo, keine Verlängerung — gehört dir für immer.` #### Italian - **Display Name:** `MealMood Premium A Vita` - **Description:** `Sblocca tutto per sempre con un unico pagamento. Niente abbonamento, niente rinnovi — è tuo per sempre.` #### Portuguese (Brazil) - **Display Name:** `MealMood Premium Vitalício` - **Description:** `Desbloqueie tudo para sempre com um único pagamento. Sem assinatura, sem renovações — é seu para sempre.` ### Review Information (si Apple lo pide) - **Screenshot:** captura del paywall con el lifetime visible debajo de los planes mensual/anual con el badge "PAY ONCE" - **Review Notes:** ``` One-time purchase unlocking all Premium features permanently: unlimited dishes, advanced tag rules, ad removal, statistics, unlimited future weeks, meal plan export. Family Sharing enabled. Acts as an alternative to the monthly/yearly subscriptions for users who prefer a single payment. ``` --- ## 4. Verificación post-setup Antes de subir la build: ### Comprobaciones rápidas - [ ] El yearly aparece en el subscription group **MealMood Premium** - [ ] Yearly tiene el introductory offer activo (debe aparecer "Free for 1 week" en la sección Prices) - [ ] Monthly tiene el introductory offer activo igual - [ ] El lifetime está en $39.99 y Family Sharing está enabled - [ ] Todos los productos están **"Ready to Submit"** o **"Approved"** *(no "Missing Metadata")* ### Estado esperado en App Store Connect ``` Subscriptions: Group: MealMood Premium ├─ com.alexandrevazquez.mealmood.premium.monthly.sub $2.99 Ready [Intro: Free 1 week] └─ com.alexandrevazquez.mealmood.premium.yearly.sub $19.99 Ready [Intro: Free 1 week] In-App Purchases: └─ com.mealmood.premium.monthly (Non-Consumable Lifetime) $39.99 Ready ``` --- ## 5. Test en simulator (sin tocar producción) El `.storekit` local ya tiene los 3 productos con sus precios y trial. Para probar: 1. Abre `MealMood.xcworkspace` (o el `.xcodeproj`) 2. Edit Scheme → Run → Options → **StoreKit Configuration:** `MealMood.storekit` 3. Run en simulator → abre paywall (Settings → Premium) 4. Deberías ver los 3 planes con el yearly preseleccionado, badge SAVE, lifetime debajo 5. Tap "Start free trial" → sandbox dialog → success → la app marca `isPremium = true` Para resetear el estado del sandbox: - En simulator: Debug → StoreKit → Manage Transactions → Delete All --- ## 6. Submit a TestFlight Una vez los 3 productos estén "Ready to Submit": ```bash fastlane beta ``` > ℹ️ Apple necesita revisar las suscripciones nuevas + el intro offer junto con la app cuando subas a App Store (no a TestFlight). Para TestFlight no requiere review de IAP. Cuando submitas a App Store con `fastlane release`, los 3 productos van **incluidos automáticamente** en el submission. Apple los revisa en paralelo con el binario.