Corregir los textos de privacidad: App Store, app y web #52

Closed
opened 2026-09-18 13:44:41 +00:00 by alexandrev · 2 comments
Owner

Decisión de Alexandre (auditoría 2026-09-18): "Portfolio Journal sin AdMob ni Google: es la única forma de que «sin rastreo» sea verdad, y el ingreso por anuncios es despreciable" (695 impresiones en 90 días).

La ficha dice literalmente «Sin analíticas, sin rastreo, sin venta de datos — nunca» y «la sincronización con iCloud … está cifrada de extremo a extremo». Lo primero era falso; lo segundo sigue siendo impreciso: es la base privada de CloudKit, cifrado gestionado por Apple, no cifrado extremo a extremo propio.

  • fastlane/metadata/*/description.txt (13 localizaciones): decir la verdad — sin cuentas, sin servidores propios, datos en el dispositivo, sincronización opcional por iCloud cifrada por Apple, sin anuncios, sin analítica de terceros.
  • Paywall: isPremium desbloqueaba «sin anuncios»; al no haber anuncios ya, quitar esa promesa.
  • Backups: son JSON legible, no cifrado. El pie en Ajustes debe decirlo.
  • Web (portfolioJournalWeb): security.html, manual-portfolio-tracker.html y privacy.html afirman E2E y hablan de socios publicitarios.
  • Crear PrivacyInfo.xcprivacy, que Apple exige y la app no tiene.

No subir nada a ASC: los textos quedan en el repo.

Decisión de Alexandre (auditoría 2026-09-18): *"Portfolio Journal sin AdMob ni Google: es la única forma de que «sin rastreo» sea verdad, y el ingreso por anuncios es despreciable"* (695 impresiones en 90 días). La ficha dice literalmente *«Sin analíticas, sin rastreo, sin venta de datos — nunca»* y *«la sincronización con iCloud … está cifrada de extremo a extremo»*. Lo primero era falso; lo segundo sigue siendo impreciso: es la base privada de CloudKit, cifrado gestionado por Apple, no cifrado extremo a extremo propio. - `fastlane/metadata/*/description.txt` (13 localizaciones): decir la verdad — sin cuentas, sin servidores propios, datos en el dispositivo, sincronización opcional por iCloud cifrada por Apple, sin anuncios, sin analítica de terceros. - Paywall: `isPremium` desbloqueaba «sin anuncios»; al no haber anuncios ya, quitar esa promesa. - Backups: son JSON legible, no cifrado. El pie en Ajustes debe decirlo. - Web (portfolioJournalWeb): `security.html`, `manual-portfolio-tracker.html` y `privacy.html` afirman E2E y hablan de socios publicitarios. - Crear `PrivacyInfo.xcprivacy`, que Apple exige y la app no tiene. No subir nada a ASC: los textos quedan en el repo.
Author
Owner

Implementado en 1238667 (app) y c573c36 en el repo portfolioJournalWeb.

fastlane/metadata/*/description.txt: bloque de privacidad reescrito en las 13 localizaciones. Lo de «sin analíticas, sin rastreo» ya es verdad; lo de «cifrada de extremo a extremo» se corrige, porque es la base privada de CloudKit con cifrado gestionado por Apple, no cifrado nuestro. No subido a ASC, queda en el repo.

Backups: se elige decir la verdad en vez de cifrarlos. Son JSON legible que el usuario controla; cifrarlos obligaría a gestionar una clave y convertiría una copia recuperable a mano en una que se pierde con la clave. El pie de Ajustes ahora avisa de que no están cifrados (clave backups_footer, 7 idiomas).

PortfolioJournal/Resources/PrivacyInfo.xcprivacy creado: NSPrivacyTracking false, sin dominios de rastreo, sin tipos de datos recogidos, y solo las API de motivo requerido que se usan de verdad — FileTimestamp (C617.1) y UserDefaults (CA92.1). Verificado que acaba dentro del .app.

Web (sin desplegar): privacy.html ya no habla de socios publicitarios ni de identificadores; security.html pierde el «end-to-end» de las tres metadescripciones y gana una sección «No tracking, no advertising»; manual-portfolio-tracker.html deja de decir «nadie, ni nosotros, puede ver tus saldos» junto a «end-to-end»; index.html distingue la app (nada) del sitio (Plausible).

Queda pendiente y solo lo puede hacer Alexandre: cambiar la etiqueta de privacidad en App Store Connect a «Data Not Collected» (hoy declara Identifiers y Usage Data, incluido «used to track you»). Tarea Vikunja 549 con los pasos.

Implementado en `1238667` (app) y `c573c36` en el repo `portfolioJournalWeb`. `fastlane/metadata/*/description.txt`: bloque de privacidad reescrito en las 13 localizaciones. Lo de «sin analíticas, sin rastreo» ya es verdad; lo de «cifrada de extremo a extremo» se corrige, porque es la base privada de CloudKit con cifrado gestionado por Apple, no cifrado nuestro. **No subido a ASC**, queda en el repo. Backups: se elige decir la verdad en vez de cifrarlos. Son JSON legible que el usuario controla; cifrarlos obligaría a gestionar una clave y convertiría una copia recuperable a mano en una que se pierde con la clave. El pie de Ajustes ahora avisa de que no están cifrados (clave `backups_footer`, 7 idiomas). `PortfolioJournal/Resources/PrivacyInfo.xcprivacy` creado: `NSPrivacyTracking` false, sin dominios de rastreo, sin tipos de datos recogidos, y solo las API de motivo requerido que se usan de verdad — FileTimestamp (C617.1) y UserDefaults (CA92.1). Verificado que acaba dentro del `.app`. Web (**sin desplegar**): `privacy.html` ya no habla de socios publicitarios ni de identificadores; `security.html` pierde el «end-to-end» de las tres metadescripciones y gana una sección «No tracking, no advertising»; `manual-portfolio-tracker.html` deja de decir «nadie, ni nosotros, puede ver tus saldos» junto a «end-to-end»; `index.html` distingue la app (nada) del sitio (Plausible). Queda pendiente y **solo lo puede hacer Alexandre**: cambiar la etiqueta de privacidad en App Store Connect a «Data Not Collected» (hoy declara Identifiers y Usage Data, incluido «used to track you»). Tarea Vikunja 549 con los pasos.
Author
Owner

La build 89 (1.7.0) está en TestFlight desde hoy: subida con altool tras --validate-app sin errores, procesada por App Store Connect (processingState: VALID) y ya en pruebas internas (internalBuildState: IN_BETA_TESTING). Notas de beta publicadas en es-ES y en-US.

Incluye los textos de privacidad corregidos y el PrivacyInfo.xcprivacy nuevo (1238667); confirmado que el manifiesto viaja dentro del bundle de la app en el IPA.

Recordatorio de lo que queda fuera de esta build y no he tocado, porque va con la versión de App Store y lo coordina Alexandre: subir los textos de fastlane/metadata/, desplegar la web y cambiar la etiqueta de privacidad de la ficha a "Data Not Collected".

La **build 89 (1.7.0)** está en TestFlight desde hoy: subida con `altool` tras `--validate-app` sin errores, procesada por App Store Connect (`processingState: VALID`) y ya en pruebas internas (`internalBuildState: IN_BETA_TESTING`). Notas de beta publicadas en es-ES y en-US. Incluye los textos de privacidad corregidos y el `PrivacyInfo.xcprivacy` nuevo (`1238667`); confirmado que el manifiesto viaja dentro del bundle de la app en el IPA. Recordatorio de lo que queda fuera de esta build y **no** he tocado, porque va con la versión de App Store y lo coordina Alexandre: subir los textos de `fastlane/metadata/`, desplegar la web y cambiar la etiqueta de privacidad de la ficha a "Data Not Collected".
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alexandrev/InvestmentTrackerApp#52