nohmo 0.4.1
nohmo: ^0.4.1 copied to clipboard
Official Nohmo analytics SDK for Flutter — device tracking, session journeys, install attribution, deep linking, crash reporting and event batching for iOS and Android.
0.4.1 #
Initial release of the Nohmo Flutter SDK — feature parity with the React Native SDK at the same version.
- Device identity, sessions and batched event delivery with a queue that survives the process being killed.
- Automatic screen tracking via
NohmoNavigatorObserver(SCREEN_VIEW,TIME_SPENT), plusNohmoScreenfor apps that do not route through aNavigator. - Tap autocapture via
NohmoAutocapture(PRESS,LONG_PRESS,RAGE_CLICK) — no build-time codegen required. - App lifecycle events (
APP_INSTALL,APP_OPEN,APP_BACKGROUND). - Install attribution: Play Install Referrer on Android, pasteboard click token on iOS, probabilistic fallback on both.
- Smart Links: direct and deferred deep linking through
Nohmo.deepLinks. - Crash reporting: Flutter framework and uncaught Dart errors as
JS_ERROR; native Android/iOS crashes (including SwiftfatalErrorand signals) asAPP_CRASH, attributed to the session they happened in. - Invite links (
buildInviteLink), conversions, user linking, push-token registration for uninstall detection. - Injectable
httpClientso apps can assert on exactly what the SDK sends. - Swift Package Manager support alongside CocoaPods — both read the same
sources under
ios/nohmo/Sources/nohmo, so CocoaPods users and older Flutter versions are unaffected.
Verified on Flutter stable 3.47.1 (Dart 3.13.1) and beta 3.48.0
(Dart 3.14.0): flutter analyze clean, 29 tests passing, and a real
flutter build apk on both the KGP and Built-in Kotlin Gradle paths
(AGP 9.1 / Kotlin 2.4) with the plugin's classes asserted present in the dex.
iOS sources compile against the iOS 26 SDK for device and simulator, and a real
flutter build ios links NohmoPlugin/NohmoCrash into the app through both
CocoaPods and Swift Package Manager.
Additionally run on a physical Android device (Android 16 / API 36, arm64), confirming install attribution, autocapture, rage clicks, session lifecycle, crash-surviving queue persistence, and native crash capture at runtime.
Fixed during that device testing: Android crash records were written correctly
but never drained. The crash store resolved its directory from a Context that
was only captured when the crash handler was installed, while Dart drains the
previous run's crashes before installing this run's handler — so the read always
returned empty and records accumulated on disk, never reported. readAndClear
now takes the Context directly, removing the ordering dependency.
tool/verify.sh re-runs all of that in one command, and
.github/workflows/flutter.yml runs it against stable and beta on every push
and weekly on a schedule.