PackageTrack
Sign in Get early access

asalyze

Apple Search Ads ROAS tracking for iOS Flutter apps — first-party AdServices attribution + StoreKit 2 revenue. No IDFA.

2.1.0 CodematicsInc-MD/asalyze-sdk-Swift-Flutter-

What this package is like to depend on

Last release 2 days ago

21 Aug 2026

Ships on a steady schedule

a new release about every 2 weeks

Nearly every release is documented

notes for 14 of 14 stable releases

Nothing withdrawn

no release was ever pulled

1 months old

14 releases · first in 2026

14 releases in the last 12 months

see the full history below

Release timeline

14 releases · Jul 2026 to Aug 2026
Release Pre-release

Releases

latest 14
  1. 2.1.0 21 Aug 2026
    Release notes

    2.1.0 — iOS 15 install dates, ad impression country, OS version

    Open source →
    Release notes

    Installs on iOS 15 now report an install date. AppTransaction is iOS 16+, and below it StoreKit 2 offers no app-level record at all — so those users arrived with no date and stayed permanently unclassified. Measured 2026-08-21 in production: a flat ~1.8% of installs, 539 of the last 620 undated ones, every single one on a current build. It was never a device failure; the SDK simply never asked in a way an older OS could answer.

    It now falls back to the legacy App Store receipt, which is what Apple's own documentation points to for this case: use the receipt when the app "needs the receipt to validate the app download because it can't use AppTransaction". The receipt is sent as Apple signed it and read on the server — a date the app could have retyped is worth less than one Apple issued. The fallback runs only below iOS 16, so its deprecation is irrelevant: those devices can never reach an OS where it might be removed.

    Ad revenue now carries the country the ad was served in. eCPM is set by the viewer's country, so ad revenue without geography cannot really be read — $100 from Pakistan and $100 from the US are completely different performances. The region is read at the impression rather than taken from the install, because a user who has travelled since installing would otherwise have every impression priced against the country they signed up in.

    Also sent at registration: the device OS version, and — on iOS 16+ — the whole signed AppTransaction record rather than one field pulled out of it. That record carries originalApplicationVersion, which separates a long-standing user from a new one without needing a usable date, and it exists nowhere but on the device: no server API can be asked for it afterwards.

    No API changes. Nothing to update in your integration.

    Open source →
  2. 2.0.1 20 Aug 2026
    Release notes

    Apple returns countryOrRegion only for installs it attributed. Measured 2026-08-20:
    7,850 of 7,906 paid installs carried a country, against 14 of 66,200 organic — so
    89% of users had no geography and any geo view was a paid-only view.

    Locale.current.region on iOS 16+, regionCode below it, which also covers the older
    devices that cannot provide an AppTransaction.

    It is the device's own setting, not the App Store storefront, and disagrees for
    someone travelling or living abroad. The backend keeps it in its own column rather
    than merging it into Apple's country, so a weaker signal never overwrites a stronger.

    No API change.

    Open source →
    Release notes

    The SDK now reports the device's region. Apple returns a country only for installs it attributed, so organic users — the large majority — arrived with no geography at all: measured 2026-08-20, 7,850 of 7,906 paid installs carried a country against 14 of 66,200 organic.

    Locale.current.region on iOS 16+, regionCode below it, so it also covers the older devices that cannot provide an AppTransaction. It is the device's own setting, not the App Store storefront, and the backend keeps it separate from Apple's answer rather than merging the two.

    No API change. Nothing to do but update.

    Open source →
  3. 2.0.0 13 Aug 2026
    Release notes

    The C# still called AsalyzeTrackPurchase, whose ObjC bridge symbol was removed in
    this release, so the package would have failed to link. Both are gone now, which
    means a project still calling it fails to BUILD rather than silently sending data
    that cannot be deduped.

    Asalyze-2.0.0.unitypackage is rebuilt from the same GUIDs as 1.3.1, so importing
    it upgrades the existing assets in place instead of duplicating every script.

    TrackAdRevenue, TrackEvent, SetUserId and InstallId are unchanged.

    Open source →
    Release notes

    Breaking: Asalyze.trackPurchase is removed (Swift, Dart and the Objective-C/Unity bridge).

    Purchases are never reported by hand. The SDK requires iOS 15, so StoreKit 2 observation always runs and every App Store purchase already arrives with Apple's own transaction id, price, currency, offer type and dates — the authoritative values. A manual call could only ever disagree with them, and did:

    • no transaction id, so nothing downstream could dedupe the manual copy against Apple's;
    • offer defaulted to .none, so a free trial reported this way booked at full price.

    In production one app reported roughly double its real revenue, with 52 free trials counted as paid purchases. Removing the method removes the whole class of error.

    Also breaking: offer is now required on trackSubscription (and on SubscriptionEvent.init).

    It defaulted to .none, which is the same trap: forget the argument and a free trial is recorded as a paid purchase. .none is still correct for events where no offer applies — expiry, cancellation — it simply has to be stated rather than assumed. The Flutter channel now rejects an unrecognised offer instead of quietly falling back to .none.

    Migrating: delete your trackPurchase calls — nothing is lost, the SDK already has those purchases with better data than the call supplied — and pass offer: explicitly to trackSubscription. trackAdRevenue and trackEvent are unchanged; ad revenue genuinely does need reporting, since Apple knows nothing about it.

    Open source →
  4. 1.3.0 29 Jul 2026
    Release notes

    1.3.0 — @objc AsalyzeBridge + Unity package (iOS)

    Open source →
    Release notes
    • Add an Objective-C–visible AsalyzeBridge façade so non-Swift hosts can drive the SDK through a C-callable surface. Powers the new Unity package (native iOS bridge). No change for Swift/Flutter apps.
    Open source →
  5. 1.2.2 28 Jul 2026
    Release notes

    1.2.2 — re-publish of 1.2.1 (identical code) to repair CocoaPods trun…

    Open source →
    Release notes
    • Re-publish of 1.2.1 (identical code) to repair a half-completed CocoaPods trunk push whose version index never updated. No functional changes over 1.2.1.
    Open source →
  6. 1.2.1 28 Jul 2026
    Release notes

    1.2.1 — reliable subscription reporting (mark-sent after 2xx) + Asaly…

    Open source →
    Release notes
    • Reliable subscription reporting. A StoreKit transaction is now marked "sent" only after the report reaches the backend (2xx). Previously it was marked before the network call, so a transient failure (bad network at purchase, app killed mid-flight) permanently orphaned the purchase. Now a failed report is automatically retried from Transaction.all on the next launch — no purchase is lost just because one network call failed. No integration changes required.
    • New Asalyze.purchase(product) — a drop-in for product.purchase(options:) that attaches appAccountToken = installId automatically, so Apple echoes the install id in every server notification. This attributes a purchase (and all its renewals) even when the buyer never reopens the app — the one case on-launch retry can't recover. Optional one-line swap at your purchase call site.
    Open source →
  7. 1.2.0 28 Jul 2026
    Release notes

    1.2.0: capture exact app version + build + true install date (AppTran…

    Open source →
    Release notes
    • Capture the exact app version (CFBundleShortVersionString) + build, and the true install date (AppTransaction.originalPurchaseDate) at install registration. The marketing version only exists on-device — Apple never sends it server-side — so this resolves the build-number ambiguity for version-based analysis.
    Open source →
  8. 1.1.4 15 Jul 2026
    Release notes

    v1.1.4 — non-App-Store (ad-hoc/dev) builds classified sandbox

    Open source →
    Release notes
    • Environment detection now also treats any build carrying an embedded provisioning profile (development / ad-hoc / enterprise) as sandbox — so a Release-configured build installed directly on a device no longer leaks into production reports. App Store builds (profile stripped) stay production.
    Open source →
  9. 1.1.3 15 Jul 2026
    Release notes

    v1.1.3 — AsalyzeAdMob.report accepts NSDecimalNumber directly

    Open source →
    Release notes
    • AdMob helper: AsalyzeAdMob.report(_:currencyCode:precision:format:) now takes AdMob's GADAdValue.value (an NSDecimalNumber, in currency units) directly — pass it straight through, no micro-unit conversion. A labelled report(micros:…) overload remains for micro-unit callers.
    Open source →
  10. 1.1.2 15 Jul 2026
    Release notes
    • Redownload tracking: the SDK now detects a reinstall (the Keychain install id survived but the app's local first-run marker was wiped) and flags it, so the dashboard can distinguish first installs from returning-user reinstalls and show the reinstall date.
    Open source →
  11. 1.1.1 15 Jul 2026
    Release notes
    • Environment detection now uses StoreKit 2's AppTransaction (and each transaction's own .environment) instead of the receipt-name heuristic — so TestFlight / ad-hoc / Release-configured test builds are reliably tagged sandbox and never leak into production reports.
    Open source →
  12. 1.1.0 14 Jul 2026
    Release notes
    • Every StoreKit transaction now reports Apple's transactionId — the backend deduplicates it against the App Store Server API, so purchases/renewals are never double-counted across sources.
    • On launch the SDK sweeps Transaction.all to backfill a user's full purchase history with real dates (so subscribers who bought before the SDK shipped still show a complete timeline).
    Open source →
  13. 1.0.1 13 Jul 2026
    Release notes
    • Default backend endpoint is now https://asalyze.com (production).
    Open source →
  14. 1.0.0 13 Jul 2026
    Release notes
    • Initial release.
    • Apple Search Ads first-party attribution via AdServices (no IDFA, no ATT prompt).
    • StoreKit 2 revenue observation (purchases, renewals, refunds) — captured natively.
    • Ad revenue, custom events, and subscription lifecycle reporting.
    • Self-contained: the native Asalyze iOS SDK is vendored into the plugin. iOS 15+.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive