sustituir Crashlytics por un recolector MetricKit que no sale del dispositivo

FirebaseCrashlytics se llevaba los informes de fallo a Google. Los crashes
ya llegan a Xcode Organizer por la vía de Apple, así que el sustituto no
tiene que enviar nada: DiagnosticsCollector se suscribe a MXMetricManager,
guarda los payloads de crash, cuelgue y escritura en disco como JSON en
Application Support/Diagnostics y ahí se quedan.

- Sin código de red. Retención de 5 informes, los ficheros se marcan como
  excluidos de backup (son ayuda de depuración, no datos del usuario).
- Arranque: AppDelegate llama a DiagnosticsCollector.shared.start() en
  lugar de FirebaseApp.configure() + MobileAds.shared.start().
- Ajustes → Acerca de: "Compartir diagnósticos", visible solo cuando hay
  algo recogido. Compartir es la única forma de que un informe salga del
  iPhone, y la decide el usuario. Cadenas nuevas en los 7 idiomas.

Un recolector que guarda y no enseña sería código muerto, y uno que sube
sería el problema de antes con otro nombre; por eso guarda en local y deja
el envío como acción explícita.

Closes #51

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn
This commit is contained in:
alexandrev-tibco
2026-09-18 16:09:45 +02:00
parent 7d2f605c16
commit 2380d37a9e
10 changed files with 178 additions and 0 deletions
@@ -703,3 +703,7 @@
"whats_new_170_inspector_body" = "広い画面では月次のクイック更新がサイドパネルで開き、値を入力している間もダッシュボードが見えたままです。";
"whats_new_170_biometrics_title" = "Face ID、Touch ID、Optic ID";
"whats_new_170_biometrics_body" = "アプリロックと残高のプライバシーが、デバイスの生体認証の種類に合わせて動作します。";
/* 1.7.0 privacy cleanup: on-device diagnostics + honest backup wording */
"Share Diagnostics" = "診断情報を共有";
"diagnostics_footer" = "iOS がこの端末で収集したクラッシュとハングのレポートです。どこにも送信されません。共有した場合だけ iPhone の外に出ます。";