Commit Graph

22 Commits

Author SHA1 Message Date
alexandrev-tibco 954a6b94d5 fastlane: submit deduce la version del Info.plist en vez de hardcodearla
Estaba fijada a 2.0.1, asi que en la siguiente release habria subido metadata a
la version equivocada.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ks8uUcMA9mjypVK7F2Pkt
2026-08-13 14:07:12 +02:00
alexandrev-tibco 87e8735621 2.0.2: bump de version y release notes
Version en los tres sitios (Info.plist de app y widget + MARKETING_VERSION) y
widget adelantado a build 67, que es el que generara fastlane.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ks8uUcMA9mjypVK7F2Pkt
2026-08-13 14:03:14 +02:00
alexandrev-tibco 95a1e3a133 fastlane: lanes submit y status
submit envia a review una build ya subida: la 2.0.1 build 66 ya estaba en
TestFlight, y release habria reconstruido mientras publish nunca envia.
Distribucion automatica (AFTER_APPROVAL) y sin tocar screenshots, que se heredan.

status lista el estado de cada version en App Store Connect. Sirvio para
confirmar que la 2.0.1 quedo en AFTER_APPROVAL y no en MANUAL como la 2.0.
Ojo: asc_api_key devuelve el hash de opciones de fastlane, no un token de
spaceship; hay que construir el token aparte.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ks8uUcMA9mjypVK7F2Pkt
2026-08-07 11:10:22 +02:00
alexandrev-tibco 55739c8f89 2.0.1: release notes en los 6 idiomas
Nota centrada en lo que el usuario nota de verdad: el resumen de la primera
semana planificada vuelve a mostrarse al terminar la configuracion inicial.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ks8uUcMA9mjypVK7F2Pkt
2026-08-06 17:45:26 +02:00
alexandrev-tibco 9f5db245a9 fastlane: lane refresh_dsyms para subir dSYMs a Crashlytics
La build phase de Xcode solo sube el dSYM de la compilacion local. No habia red
de seguridad, asi que un fallo del script deja los crashes sin simbolizar.

refresh_dsyms baja los dSYM de App Store Connect y los manda a Crashlytics. Se
ejecuta aparte de beta a proposito: beta usa skip_waiting_for_build_processing,
asi que justo tras el upload los dSYM aun no existen en ASC.

Dos detalles que salieron al ejecutarla de verdad:

- upload_symbols_to_crashlytics busca el binario en ./Pods, pero Firebase entra
  por SPM y vive en DerivedData. Se resuelve con un glob.
- ASC no tiene dSYMs para la build 64 (normal sin bitcode: Apple no recompila
  nada). Sin fallback la lane seria un no-op permanente, asi que tira de los
  dSYM del ultimo archive local (app + widget).

Verificado ejecutandola: sube los dos dSYM de la 64 correctamente.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ks8uUcMA9mjypVK7F2Pkt
2026-08-05 20:57:50 +02:00
alexandrev-tibco 19bf3178d8 2.0: actualizar review notes (sin login, dictado, IA ingredientes, premium)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3HaWmmtTQ1vdTERtSYU6p
2026-07-24 15:03:14 +02:00
alexandrev-tibco 9a898be7cf 2.0: release notes "What's New" en los 6 idiomas
Lista de compra, ingredientes IA on-device, dictado, fotos de platos,
desayuno/merienda, sync CloudKit, editar plato desde la lista.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3HaWmmtTQ1vdTERtSYU6p
2026-07-24 14:59:59 +02:00
alexandrev-tibco 619d5f921d 1.2.0: localized App Store screenshots (es/de/fr/it/pt-BR) + 1.2.0 release notes
- Caption-localized the 5 iPhone 6.7" + 5 iPad 12.9" screenshots into the 5
  non-English locales, reusing the en-US framed captures (in-frame UI stays EN).
  Tooling in fastlane/screenshot_localize/ (Pillow: repaints the pastel caption
  band, re-renders headline/subtitle in SF Pro; auto-fits + wraps per language).
- Rewrote release_notes 1.2.0 in all 6 languages: since 1.1.5 never shipped
  publicly (last public = 1.1.4), the notes consolidate 1.1.5 + 1.2.0 features.
- Fastfile: new `publish` lane — uploads metadata + screenshots for an existing
  TestFlight build (skip_binary_upload, no submit) so offer codes can be set up
  before submission.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkanrydYtrme8wipTzWssG
2026-07-09 10:42:44 +02:00
alexandrev-tibco b45cb2a530 1.1.5: conversion funnel overhaul
Paywall:
- Redesigned PremiumView with yearly/monthly/lifetime side by side
- 7-day free trial badge with savings % vs monthly
- Social proof line, BEST VALUE highlight on yearly
- StoreManager: new yearlyProduct, lifetimeProduct, yearlySavingsPercent, hasTrialAvailable

Funnel:
- Paywall step added to onboarding (PaywallStepView)
- Contextual modal at dish limit (replaces silent block)
- Visible "X/15 dishes" counter in DishListView
- BottomPromoBanner rotates AdMob with internal "Remove ads" CTA (1 in 4)
- Free dish limit lowered 20 → 15
- Review prompt earlier: 2 weeks → 1 week

Analytics:
- paywall_viewed/dismissed with source + seconds_on_screen
- dish_limit_hit, week_limit_hit, free_trial_started events
- Every PremiumView call site now passes its source

StoreKit:
- MealMood.storekit: added yearly $19.99 + 7d trial, monthly trial, lifetime $39.99
- AppStoreConnect-1.1.5-setup.md with full manual setup instructions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 22:21:36 +02:00
alexandrev-tibco 946c788ef6 Fastfile: enable automatic_release by default in release lane
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 17:07:09 +02:00
alexandrev-tibco 790c412329 1.1.4: release notes — remove emoji (App Store API restriction)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 14:16:47 +02:00
alexandrev-tibco bd9ecab64d 1.1.4: App Store release notes in 6 languages
Stats, smarter auto-assign, and feedback loop (implicit rejection
+ weekly 👍/👎 rating).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 13:45:23 +02:00
alexandrev-tibco f4e1aef8d5 1.1.4 (50): TestFlight upload — switch to ASC API key auth
Build 50 uploaded to TestFlight. Also migrates Fastfile from
Apple ID + app-specific-password to App Store Connect API key
(via pass) to avoid session expiry on future uploads.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-27 19:36:49 +02:00
alexandrev-tibco 0103ee98c6 1.1.2: add EULA link to app descriptions (6 languages)
Required by App Store for apps with auto-renewable subscriptions.
Uses standard Apple EULA: https://www.apple.com/legal/internet-services/itunes/dev/stdeula/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 23:00:36 +02:00
alexandrev-tibco d09e8a7bee 1.1.2 (47): fix subscription purchase button fallback
Remove legacy CONSUMABLE fallback from monthlyProduct — when the
subscription fails to load, the UI now shows the retry state instead
of silently offering the legacy one-time product for purchase.
Legacy purchasers retain access via hasActiveSubscription() as before.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 19:58:57 +02:00
alexandrev-tibco 89b35dc4ae 1.1.1 (46): subscription IAP, export compliance, metadata
- Switch premium to AutoRenewable subscription (com.mealmood.premium.monthly.sub);
  legacy one-time purchasers retain lifetime access via StoreManager fallback
- Add ITSAppUsesNonExemptEncryption=false to Info.plist (no custom encryption)
- Update storekit config with both legacy NonConsumable and new subscription
- Bump version 1.1.1 build 46; update fastlane metadata and release notes (6 langs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:28:14 +02:00
alexandrev-tibco 4ac81d6223 1.0.6: Fix widget version, bump to build 41, fix Fastfile signing
- MealMoodWidget CFBundleShortVersionString: 1.0.3 → 1.0.6 (fixes ITMS-90473)
- App + Widget build number: 40 → 41 (App Store release build)
- Fastfile: add manageAppVersionAndBuildNumber: false to EXPORT_OPTIONS
  to prevent xcodebuild from requiring App Store Connect during export

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 08:36:31 +02:00
alexandrev-tibco 237394c7d5 1.0.6: App Store metadata — release notes and promotional texts in 6 languages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 00:02:13 +02:00
alexandrev-tibco 92f97f855d Fix: trim promotional_text to ≤170 chars for App Store Connect
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 23:30:32 +02:00
alexandrev-tibco 797b5cfa24 1.0.5: Update App Store metadata in 6 languages with Eating Out and Rule Violations features
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 18:35:31 +02:00
alexandrev-tibco 110807d239 1.0.5: Eating out slots, rule violations panel, Crashlytics, search bar fix
- Eating out: tap any empty slot → "Mark as eating out"; shows teal indicator,
  skipped by auto-assign, counts as complete, tap again to unmark
- Rule violations panel: access via wand long-press context menu when conflicts exist;
  shows all isRuleOverridden slots with Fix (clear) or Ignore (acknowledge) actions
- Firebase Crashlytics integrated: CrashlyticsService + dSYM upload build phase,
  isPremium property tracked per session
- PremiumSyncService: extracted premium state machine, StoreKit Transaction.updates
  listener, isPremium no longer synced via iCloud to avoid stale state
- StoreManager: analytics on purchase/restore, bundle ID fallback for product ID lookup
- Search bar contrast bug fixed: TextField now has explicit foreground color for dark mode
- WelcomeStepView: redesigned onboarding welcome screen with week preview
- Version bump: 1.0.5 build 22

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 09:48:20 +02:00
alexandrev-tibco 6c7e12b41f 1.0.4: Smarter auto-assign, quick dish entry, calendar fix, frictionless onboarding
- AutocompleteEngine: no-repeat rule now applies to all dishes (not just tagless ones); fallback still allows repeats when no alternative exists
- CalendarService: update existing events instead of delete+create to prevent duplicates; fix weekStartDate using plan date instead of currentWeekStart
- DishFormView: form stays open after saving in create mode for quick multi-dish entry; Done button to close; saved feedback banner
- OnboardingViewModel/FirstDishesStepView: dishes are now optional during onboarding; Finish button always enabled
- AnalyticsService: new events — onboarding_step_viewed(step) and auto_assign_used(filled, unfilled)
- Localization: dish_done and first_dishes_optional_hint added in 6 languages; release notes updated in all 6 languages
- Version bump: 1.0.3 → 1.0.4 (build 19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 11:35:50 +02:00