Skip to main content

Type-safe analytics,
built for Swift.

Scan your Swift codebase for every analytics call, define events as a typed schema, and generate strongly-typed structs. Ship with Xcode-level confidence and block tracking drift before it reaches TestFlight.

From string-typed to Swift-typed

Delete the magic strings. Let the compiler check.

BeforeHandwritten · no guarantees
Analytics.track("purchase_completed", [
"amount": 9.99,
"currency": "USD",
// ⚠️ typo? missing required? enum wrong?
])
AfterGenerated · checked at compile time
Analytics.purchaseCompleted(
amount: 9.99,
currency: .usd
)
// ✓ compiler catches renamed props
Static source analysis

Scans every .swift file in seconds.

One command walks your Xcode project, matches every analytics call against your tracking plan, and reports coverage per screen, per SDK, per module. No runtime overhead. No SDK to install. Nothing ships to your users.

  • • Detects Segment, Amplitude, Mixpanel, Firebase, PostHog patterns
  • • Works on UIKit, SwiftUI, AppKit, and watchOS source
  • • Runs locally or in CI — same command, same output
  • • Honest about its limits: indirect calls get flagged, not missed
~/projects/checkout-ios
$ ordaze scan --platform ios
Scanning Sources/ (1,283 .swift files)…
 
34 analytics calls found
28 matched to tracking plan
3 unknown events
2 missing required properties
 
Coverage: 82%
Full report: ordaze.com/r/xy3k9
CI that respects your release train

One workflow file. Zero bad events in TestFlight.

Mobile apps ship on a release train — bad analytics can't be hot-fixed. Ordaze runs on every PR and fails the build before a broken event reaches users.

.github/workflows/analytics.ymlCI
name: Analytics Coverage
on: [pull_request]

jobs:
  scan:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ordaze/ordaze-scanner@v1
        with:
          token: ${{ secrets.ORDAZE_TOKEN }}
          platform: ios
          strict: true
          min-coverage: 80
iOS FAQ

Common questions from iOS teams

Ordaze is a static source-code scanner — it reads your .swift files directly and doesn't install anything into your app. You don't need to add it as a Swift package or Pod. The scanner runs on your repo (locally or in CI) and reports matched / unmatched events. Generated Swift event files can drop into any iOS project regardless of its dependency manager.
Ordaze recognizes Segment, Amplitude, Mixpanel, Firebase Analytics, PostHog, Braze, Snowplow, and CleverTap call patterns out of the box. The generated Swift code is provider-agnostic — you pick which SDK it ultimately calls. Ordaze never locks you into a specific vendor.
Ordaze generates a typed wrapper namespace (for example `Analytics.purchaseCompleted(amount: 9.99, currency: "USD")`). Required properties are non-optional Swift types, enums become `enum` cases, and optional fields use `Optional<T>`. You ship the generated file alongside your own code; it has zero runtime dependencies beyond whichever analytics SDK you call through.
Yes — the scanner is pattern-based (regex across Swift source), so it finds analytics calls regardless of whether they're in UIKit controllers, SwiftUI views, or Combine pipelines. What it cannot detect are events fired with dynamic names like `track(eventNameFromViewModel)` — those get flagged for manual review. That's an honest limit of static analysis and it's the same tradeoff every source-code scanner makes.
Avo is an established tracking-plan platform with strong enterprise governance. Ordaze is leaner and cheaper, with a static source scanner that runs in CI (no Avo Inspector runtime required), default Swift + Kotlin code generation, and transparent pricing starting at a \$0 free tier with 100 events and unlimited team members. See the full comparison at /compare/ordaze-vs-avo.

Ready to fix your analytics?

Free plan. No credit card required.

Get Started Free