ANTIGRAVITY LABJP
Articles/Integrations
Integrations/2026-05-28Advanced

Recovering Missing iOS dSYMs Across Six Apps with Antigravity's Background Agent — A Four-Week Operations Log

After migrating Firebase iOS SDK from CocoaPods to SPM, six wallpaper apps saw their Crashlytics symbolication rate collapse to as low as 4.2%. This is a four-week operations log of letting Antigravity's Background Agent track, upload, and verify 1,847 missing dSYMs across six repositories — including App Store Connect dSYM polling and AdMob revenue reconciliation.

antigravity436background-agent8ios36firebase11crashlytics5dsymspmindie-developer5admob17

Premium Article

In March 2026 I migrated the Firebase iOS SDK in my six wallpaper apps from CocoaPods to Swift Package Manager. Within two weeks the Crashlytics symbolication rate had slid from a steady 95%+ down to 4.2% on average. It took me longer than it should have to realize the dSYMs themselves were not making it to Crashlytics anymore.

I'm Masaki Hirokawa — an artist and indie developer at Dolice. I have been shipping iOS and Android wallpaper apps independently since 2014, and the cumulative downloads recently passed 50 million. AdMob revenue covers my monthly operating costs, so a dark Crashlytics dashboard means I can't prioritize the bug fixes that actually move that number.

This article is a four-week operations log of how I let Antigravity's Background Agent locate, upload, and verify 1,847 dSYMs across six repositories until the symbolication rate was back above 96% for every app. The SPM-migration dSYM gap is a problem several solo developers I know have hit, so I've tried to write the recovery pipeline in a way you can copy and adjust.

Why SPM Migration Drops dSYMs

In the CocoaPods era, framework dSYMs lived inside Pods.xcodeproj and ended up in the same Xcode Archive directory as the app's own dSYM. Uploading the archive to App Store Connect from Organizer dragged framework dSYMs along for the ride, and Crashlytics' upload-symbols script only needed to look at ${DWARF_DSYM_FOLDER_PATH} to find everything.

SPM changes the shape of this. Frameworks resolved through Swift Package Manager respect DEBUG_INFORMATION_FORMAT=dwarf-with-dsym, but in release builds with bitcode disabled the resulting dSYMs do not consistently land inside the archive's dSYMs/ folder. Across the six apps I inspected, FirebaseCrashlytics, FirebaseRemoteConfig, FirebaseAnalytics, GoogleUtilities, and nanopb were present, but FirebaseCore, FirebaseInstallations, and GoogleAppMeasurementIdentitySupport were missing.

The culprit is the combination of Xcode 16.1's dSYM generation timing and SPM's package cache. When the cache is fresh at archive time, Xcode skips a rebuild and therefore does not regenerate the dSYMs either. The older dSYMs sit in DerivedData/{project}/Build/Products/... but xcodebuild archive does not pull them in, so upload-symbols never sees them either.

Why I Trust the 4.2% Number

The trigger was not the Firebase console — it was a 6 AM JST report that Antigravity's Background Agent had been emitting for me for months. That agent queries Crashlytics API v1 for the past seven days of crashes and symbolication rate across the six apps and drops a summary into Slack. The 22 March report contained the following lines:

[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%)

Because every app had been stable around 95%+ symbolication for as long as I can remember, the drop stood out. The Background Agent is configured with a rule: any 30% week-over-week drop should get a red flag plus a root-cause hypothesis. The 22 March report duly attached the hypothesis "drop coincides with FirebaseCrashlytics SDK migration to SPM on 14 March."

To weigh acting on the hypothesis against the risk of being wrong, I reproduced the failure on a single device first. Running xcrun dwarfdump --uuid against the TestFlight build's dSYMs and diffing against the UUIDs Crashlytics already knew about, the six apps averaged 41% missing UUIDs. The gap between 4.2% symbolication and 41% missing UUIDs comes from partially-symbolicated crashes, but either way the dSYM gap was clearly the cause.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Root-cause the SPM migration's dSYM fragmentation by inspecting Build Settings across six iOS apps, then reproduce the 4.2% Crashlytics symbolication failure deterministically
Have Antigravity's Background Agent run xcrun dwarfdump and upload-symbols in parallel to recover 1,847 dSYMs across six repositories in four weeks
Design monitoring jobs that respect Apple Silicon plus Xcode 16's 8-to-36-hour TestFlight dSYM availability window, and reconcile recovery against AdMob monthly revenue
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Antigravity Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Integrations2026-05-30
Handing Crashlytics Stack Traces to Antigravity — Three Weeks Across Four Apps
Paste a Crashlytics stack trace into Antigravity, let it narrow the cause, and drive the fix to the finish. After three weeks across four wallpaper apps, here is what I learned to delegate and what I kept for myself.
Agents & Manager2026-05-20
Letting Antigravity Background Agent Watch the First 72 Hours After Release: A Monitoring Pipeline Forged Across Six Wallpaper Apps
Drawing on twelve years of indie iOS and Android development and six wallpaper apps released in parallel, this article shares a release-monitoring workflow built on Antigravity Background Agent. It covers how to collapse Firebase Analytics, Crashlytics, and AdMob into one Markdown report, with the actual queries and thresholds used in production.
Integrations2026-05-23
Three Weeks of Running Antigravity Browser Agent and Claude in Chrome Side by Side
Notes from three weeks of running Antigravity's Browser Agent and Claude in Chrome in parallel while tuning AdMob and pre-release checks for my wallpaper apps.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →