ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
連携・プラグイン/2026-05-28上級

Antigravity Background Agent で iOS dSYM 欠落を 6 アプリ分まとめて自動回復した運用記録

Firebase の CocoaPods から SPM への移行後、6 本の iOS 壁紙アプリで Crashlytics の解析率が 0% まで落ちた問題を、Antigravity Background Agent で 4 週間かけて自動回復させた実運用記録です。dSYM の所在追跡から Crashlytics への再アップロードまでを並列処理にまとめた設計を共有します。

antigravity435background-agent8ios35firebase11crashlytics5dsymspm個人開発90AdMob13

プレミアム記事

2026 年 3 月、Firebase iOS SDK を CocoaPods から Swift Package Manager に移行した直後から、私の運営している壁紙アプリ 6 本の Crashlytics 解析率がじわじわと下がり始めました。最終的に 4 月初旬には 6 アプリ平均で 4.2% という値を見て、はじめて「これは dSYM が Crashlytics に届いていない」と気づきました。

アーティスト・クリエイターの廣川政樹です。2014 年から iOS / Android の壁紙アプリを個人開発しており、累計ダウンロードは現在 5,000 万を超えています。AdMob からの広告収益が月次の運営費を支える構造のため、Crashlytics でクラッシュ箇所が読めない状態が続くと、不具合修正の優先度を組み立てる土台が崩れます。

私が Antigravity の Background Agent に dSYM の捜索・アップロード・検証を任せ、4 週間で 6 アプリすべての Crashlytics 解析率を 96% 以上まで戻した運用記録を共有します。SPM 移行後の dSYM 欠落は同じパスを通る個人開発者の間でも頻発しているため、再現可能な手順としてまとめました。

なぜ SPM 移行で dSYM が欠落するのか

CocoaPods 時代は Pods.xcodeproj 配下のフレームワーク dSYM がアプリの dSYM と同じ Xcode Archive ディレクトリに収まっていました。Archive を Organizer から App Store Connect に上げると、フレームワーク dSYM も一緒に同梱され、Crashlytics 用の upload-symbols${DWARF_DSYM_FOLDER_PATH} を見るだけで全てを拾えました。

SPM に移行すると挙動が一段階複雑になります。Swift Package Manager 配下の .framework には DEBUG_INFORMATION_FORMAT=dwarf-with-dsym が指定されていても、リリースビルドで bitcode が無効化されている場合は dSYM 自体は生成されるものの、アーカイブの dSYMs/ ディレクトリには 必ずしも 全て揃いません。私が観測した 6 アプリでは、FirebaseCrashlytics / FirebaseRemoteConfig / FirebaseAnalytics / GoogleUtilities / nanopb の 5 つは入りましたが、FirebaseCore, FirebaseInstallations, GoogleAppMeasurementIdentitySupport の 3 つが消えていました。

この差を引き起こしているのは Xcode 16.1 以降の dSYM 生成タイミングと SPM のキャッシュ仕様です。アーカイブ時点で Swift Package のキャッシュが新鮮な場合、Xcode は再ビルドを省略し、その結果 dSYM ファイルも新規生成されません。古いビルドフォルダの dSYM が DerivedData/{project}/Build/Products/... に残ったまま、xcodebuild archive がそこから参照しないため、Crashlytics の upload-symbols も拾えないという連鎖が起きます。

4.2% という数字を信用していい理由

問題発覚のきっかけは Firebase コンソールではなく、Antigravity の Background Agent に毎朝 6 時に流している「クラッシュ要約レポート生成タスク」でした。このエージェントは 6 アプリの Crashlytics API(v1)に対して直近 7 日のクラッシュ件数と解析率を集計し、Slack に投稿します。3 月 22 日のレポートに以下のような行が混ざっていました。

[App: Coloring Wallpapers] crashes(7d)=312 symbolicated=39 (12.5%)
[App: Zen Wallpapers]      crashes(7d)=187 symbolicated=8  (4.2%)
[App: Sumi-e Wallpapers]   crashes(7d)=98  symbolicated=2  (2.0%)

通常はどのアプリも 95% 以上の解析率で安定していたため、この急落は明確な異常でした。Background Agent には「解析率が前週比で 30% 以上下がった場合は赤マークと根本原因の仮説を添えること」という指示を入れてあり、3 月 22 日のレポートには「FirebaseCrashlytics SDK の SPM 移行(3 月 14 日)以降に観測される」という仮説まで一緒に提示されました。

仮説が正しい場合に取るべき行動と、間違っていた場合のリスクを比較するため、まず実機 1 台で再現を確認しました。xcrun dwarfdump --uuid で TestFlight ビルドの dSYM 内 UUID を抽出し、Crashlytics に登録されている UUID と突き合わせると、6 アプリ平均で 41% の UUID が欠落していました。Crashlytics の解析率(4.2%)と UUID 欠落率(41%)の差は、UUID が欠落していても部分的にシンボル解決できるクラッシュが含まれるためですが、いずれにせよ dSYM 不足が原因であることは確定しました。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
SPM 移行後に発生する dSYM 断片化と Crashlytics 解析率 0% の根本原因を、6 アプリ分の Build Settings 実測から特定する
Antigravity Background Agent に xcrun dwarfdump と upload-symbols を並列実行させ、4 週間で 1,847 個の dSYM を 6 リポジトリに横断回収する具体的手順
Apple Silicon × Xcode 16 の TestFlight 配信における dSYM 取得待ち時間(実測 8〜36 時間)を考慮した監視ジョブ設計と AdMob 月次レポートとの照合方法
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

連携・プラグイン2026-05-30
Antigravity に Crashlytics のスタックトレースを渡して直す — 4本のアプリで3週間運用した所感
Crashlytics に上がってくるクラッシュを、Antigravity にスタックトレースごと渡して原因を絞り、修正まで回す。壁紙アプリ4本で3週間続けてみて見えてきた、任せられる範囲と握っておくべき判断を実装に沿って書きました。
Agents & Manager2026-05-20
リリース後72時間を Antigravity Background Agent に見張らせる:6アプリ並行アップデートで固まった指標監視ワークフロー
壁紙アプリ6本を並行リリースしてきた経験から、リリース直後72時間の指標崩れを Antigravity Background Agent に見張らせる運用設計を共有します。Firebase Analytics・Crashlytics・AdMob を統合した1通のMarkdownレポートに収束させる組み立て方を、実際のクエリと閾値ごと残しました。
Agents & Manager2026-05-18
Crashlyticsの毎朝トリアージを5つのAntigravityサブエージェントに分担させた話
個人で6本のアプリを運営している中で毎朝のクラッシュトリアージが負担になり、Antigravityのサブエージェント5つに責務を分割しました。Fetcher/Classifier/Repro/Patch/PRの各段で人間レビューの境界線をどこに置いたかを、二週間の実運用データと合わせて記録します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →