Sustituir Crashlytics por un recolector propio con MetricKit que no envíe nada a terceros #51

Closed
opened 2026-09-18 13:44:40 +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).

FirebaseCrashlytics se lleva los informes de fallo a Google. Los crashes ya llegan a Xcode Organizer por la vía de Apple, así que basta con un recolector local basado en MXMetricManager que guarde los diagnósticos en el dispositivo y no los suba a ningún sitio.

Quitar también la fase de build «Upload dSYMs to Crashlytics» y el script Scripts/analyze_crashlytics.py.

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). `FirebaseCrashlytics` se lleva los informes de fallo a Google. Los crashes ya llegan a Xcode Organizer por la vía de Apple, así que basta con un recolector local basado en `MXMetricManager` que guarde los diagnósticos en el dispositivo y no los suba a ningún sitio. Quitar también la fase de build «Upload dSYMs to Crashlytics» y el script `Scripts/analyze_crashlytics.py`.
Author
Owner

Implementado en 2380d37 (rama 1.7.0).

FirebaseCrashlytics y la fase de build «Upload dSYMs to Crashlytics» fuera del proyecto. Sustituto: Services/DiagnosticsCollector.swift, un MXMetricManagerSubscriber que guarda los payloads de crash, cuelgue y escritura en disco como JSON en Application Support/Diagnostics. Cero código de red, retención de 5 informes, ficheros marcados como excluidos de backup. Se arranca desde AppDelegate. En Ajustes → Acerca de aparece «Compartir diagnósticos» solo cuando hay algo recogido: compartir es la única forma de que un informe salga del dispositivo, y la decide el usuario. Cadenas en los 7 idiomas. Borrado Scripts/analyze_crashlytics.py.

Efecto lateral: al irse la fase de script, ENABLE_USER_SCRIPT_SANDBOXING vuelve a YES en el target app (estaba en NO solo por Crashlytics).

Verificado: build y tests en verde; otool -L confirma que el binario enlaza MetricKit.framework y nada de Firebase.

Implementado en `2380d37` (rama 1.7.0). `FirebaseCrashlytics` y la fase de build «Upload dSYMs to Crashlytics» fuera del proyecto. Sustituto: `Services/DiagnosticsCollector.swift`, un `MXMetricManagerSubscriber` que guarda los payloads de crash, cuelgue y escritura en disco como JSON en `Application Support/Diagnostics`. Cero código de red, retención de 5 informes, ficheros marcados como excluidos de backup. Se arranca desde `AppDelegate`. En Ajustes → Acerca de aparece «Compartir diagnósticos» solo cuando hay algo recogido: compartir es la única forma de que un informe salga del dispositivo, y la decide el usuario. Cadenas en los 7 idiomas. Borrado `Scripts/analyze_crashlytics.py`. Efecto lateral: al irse la fase de script, `ENABLE_USER_SCRIPT_SANDBOXING` vuelve a `YES` en el target app (estaba en `NO` solo por Crashlytics). Verificado: build y tests en verde; `otool -L` confirma que el binario enlaza `MetricKit.framework` y nada de Firebase.
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 la sustitución de Crashlytics por DiagnosticsCollector con MetricKit (2380d37), que guarda los informes en el dispositivo y no hace ninguna llamada de red. El issue ya estaba cerrado; esto es solo el registro de que va en la build que están probando los testers.

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 la sustitución de Crashlytics por `DiagnosticsCollector` con MetricKit (`2380d37`), que guarda los informes en el dispositivo y no hace ninguna llamada de red. El issue ya estaba cerrado; esto es solo el registro de que va en la build que están probando los testers.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alexandrev/InvestmentTrackerApp#51