comprobar el esquema de CloudKit antes de publicar
Un campo que esta en el @Model pero no en el esquema desplegado no sincroniza, y no falla nada: los datos se quedan en el dispositivo que los escribio. Asi se colaron nueve campos fuera de Production entre la 2.0 y la 2.1.2 sin que nadie lo notara, incluidas las reglas de dia de las etiquetas y el desayuno/merienda activados. scripts/check_cloudkit_schema.py compara las propiedades almacenadas de cada @Model con los CD_<campo> del esquema real (exportado con cktool), saltando relaciones, computadas y el sufijo _ckAsset de los binarios. fastlane submit y release abortan si falta algo; beta solo avisa, porque en TestFlight es normal que el deploy a Production aun no se haya hecho. La lane check_schema lo ejecuta suelto. El deploy a Production sigue siendo manual: cktool no tiene subcomando y Apple bloquea el endpoint de esquema en ese entorno. Refs #38 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013su1ttRiMeMYxkZJ1Y3246
This commit is contained in:
@@ -52,6 +52,43 @@ pass show admob/mealmood/app-id
|
||||
pass show admob/mealmood/banner-home-unit-id
|
||||
```
|
||||
|
||||
### Antes de mandar una versión a la App Store: comprobar el esquema de CloudKit
|
||||
|
||||
Un campo que está en el `@Model` pero no en el esquema de CloudKit **no
|
||||
sincroniza**, y no falla nada: los datos se quedan en el dispositivo que los
|
||||
escribió. Así se colaron nueve campos fuera de Production entre la 2.0 y la
|
||||
2.1.2 (issue #38) — desayuno/merienda activados, sus horas, el recordatorio,
|
||||
las fotos del planificador y las reglas de día de las etiquetas no viajaban
|
||||
entre dispositivos.
|
||||
|
||||
```bash
|
||||
fastlane check_schema # o directamente:
|
||||
python3 scripts/check_cloudkit_schema.py --environment production
|
||||
```
|
||||
|
||||
`fastlane submit` y `fastlane release` ya lo ejecutan y **abortan** si falta
|
||||
algo; `fastlane beta` solo avisa (en TestFlight aún puede faltar el deploy).
|
||||
|
||||
Si faltan campos: el esquema de development solo se actualiza al ejecutar la
|
||||
app contra ese entorno con iCloud activo, o importándolo a mano:
|
||||
|
||||
```bash
|
||||
TOKEN=$(pass show apple/mealmood/cloudkit-token)
|
||||
TEAM=$(pass show apple/mealmood/developer-team-id)
|
||||
xcrun cktool export-schema --token "$TOKEN" --team-id "$TEAM" \
|
||||
--container-id iCloud.com.alexandrev.mealmood --environment development \
|
||||
--output-file /tmp/schema.ckdb
|
||||
# añadir los CD_<campo> que falten (Bool/Int → INT64, String → STRING,
|
||||
# Date → TIMESTAMP, Data → CD_<campo>_ckAsset ASSET) y:
|
||||
xcrun cktool import-schema --token "$TOKEN" --team-id "$TEAM" \
|
||||
--container-id iCloud.com.alexandrev.mealmood --environment development \
|
||||
--file /tmp/schema.ckdb
|
||||
```
|
||||
|
||||
El paso a Production **no se puede automatizar**: `cktool` no tiene deploy y
|
||||
Apple bloquea el endpoint de esquema en ese entorno. Lo hace Alexandre en
|
||||
CloudKit Console → Schema → *Deploy Schema Changes* → Deploy to Production.
|
||||
|
||||
### TestFlight upload
|
||||
```bash
|
||||
export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=$(pass show apple/mealmood/app-specific-password-fastlane)
|
||||
|
||||
Reference in New Issue
Block a user