MetricKit in, answers out.

See what your last release did to hangs, launch time and memory.

Apple's MetricKit already collects this from your users' devices: hangs, slow launches, memory kills, CPU and disk-write exceptions, crashes. It arrives as raw addresses, one device at a time, and stops. MetricLens collects the reports, turns your app's frames into function names, groups them into issues, and compares each release with the one before.

Not released yet. It runs end to end on our own test app and device today; nothing is hosted for outside apps yet. One email when there is something to try, nothing else.
Release health · 1.3compared with 1.2
Launch, median
854 ms
▲ 29%
Hang rate
311
▲ 133%
Disk-write exceptions
27
▼ 73%
FeedStore.requireCover(named:)new in 1.3 · crash
ImagePipeline.decodeSync(_:)regressed · hang
SyncEngine.flush()improving · disk
Illustration with sample data.

The part MetricKit leaves to you

Every report arrives as addresses, not function names, one device at a time. Making that useful means a backend, a symbolicator, grouping, and release comparison. Most teams never build it.

Symbolicated

Upload dSYMs from CI. Frames from your app and its frameworks become functions, files and lines, including inlined frames. Apple system frames are shown as library and offset for now. A frame with no matching symbols is marked missing, never guessed. Symbols that arrive late are applied to reports already received.

Grouped

Reports with the same cause become one issue, with counts, the releases it appears in, and (if you leave the optional install number on) affected installs. Each issue shows exactly what it was grouped on.

Release by release

New, regressed and resolved issues for each version, and launch time, hang time, memory and exits compared with the one before.

Symbolication is checked against Apple's own atos on every instruction of a test binary: 99.93% of functions match. · The SDK is MIT-licensed, has no dependencies, and installs no crash handler. · Raw reports are stored unmodified and you can download them.

If you already use…

MetricLens sits beside what you have. It does not replace your crash reporter.

You useWhat you haveWhat MetricLens adds
Xcode OrganizerApple's aggregate view, free. No alerts, no export, no history of your own.Your own history, per-issue call trees, and release-by-release changes you can link to in a pull request.
CrashlyticsCrashes and non-fatals. Nothing from MetricKit: no hang call stacks, no launch or memory histograms, no CPU or disk-write exceptions.All of those, next to Crashlytics. No second crash handler is installed, so the two cannot conflict.
SentryCrashes, plus MetricKit hang, CPU and disk-write diagnostics as individual events. No daily metric histograms and no release comparison built on them today.Histograms merged correctly across devices, and one release compared with the last.
Your own MetricKit codeJSON in a bucket.The symbolicator, grouping and dashboard you did not want to build.

Checked October 2026. These tools change; tell us if a row is out of date.

More than crashes

MetricKit reports hangs, CPU and disk-write exceptions, slow launches and memory terminations, plus daily histograms. MetricLens takes all of it.

  • Flame graph and call tree for sampled diagnostics, merged across reports
  • Histograms merged bucket by bucket; percentiles are never averaged
  • Both the original API and the one rebuilt for iOS 27
  • Works alongside Crashlytics or Sentry; it does not replace them
Hang · ImagePipeline.decodeSync(_:)share of samples
UIApplicationMain
FeedViewController.collectionView(_:cellForItemAt:)
FeedCell.configure(with:)
ImagePipeline.decodeSync(_:)
ImageIO + 0x1a2c4
1.31.2Illustration

Three steps

No swizzling, no dependencies, no crash handler.

1 · ADD THE PACKAGE

An open-source Swift package, MIT licensed.

MetricLens.start(key: "ml_ingest_…", endpoint: …)
2 · ADD A BUILD PHASE

Uploads debug symbols after each build, the way Crashlytics does. It never fails your build.

"${BUILD_DIR%/Build/*}/…/metriclens-ios/run"
3 · SHIP

Reports arrive within a day of use. Open the dashboard and compare the release with the last one.

What leaves the device

Only what MetricKit itself reports. The package is open source, so you can read exactly what is sent.

Sent

  • MetricKit's reports, unmodified: call stacks as addresses, histograms, counts
  • App version, OS version, device model
  • Optionally a random per-install number, to count affected installs. It can be turned off.

Not sent

  • Names, emails, account or advertising identifiers
  • Screen contents, network requests, logs
  • Anything from outside your app

Questions

Does it replace my crash reporter?

No. MetricKit delivers reports up to a day late and without your logs or breadcrumbs. Keep your crash reporter for crashes; use MetricLens for what it cannot see.

What does the SDK do in my app?

It subscribes to MetricKit, writes each report to disk, and uploads it in the background. No swizzling, no crash handler.

Who can see my dSYMs?

Only members of your project. They are stored privately and are never shared between customers.

What if MetricLens shuts down?

The SDK is open source and the payloads are Apple's own format. Each report's raw payload can be downloaded as received.

Which apps does it suit?

Native iOS apps with at least a few hundred daily users. Below that, MetricKit sends too few reports for trends to mean much.

Who makes it?

An independent developer. It is not affiliated with Apple or with any crash-reporting vendor.

Pricing

Not available yet. There is no beta to join today; the waitlist is how you hear when there is. These are the prices we are testing, and they will change based on what the waitlist tells us.

PlanPer monthForIncludes
Free$0Trying it on one app1 app, 14 days of history
Indie$19Solo developers3 apps, 90 days, alerts (planned)
Team$79Small teams10 apps, 1 year, Slack alerts (planned), members
Business$249CompaniesUnlimited apps, single sign-on, API and export

Help decide what gets built first

A two-minute survey about how you track performance today. No account, and every question but one is optional.