Field Track 360

Known limitations

01 Sept 2026 · Field Track 360

  • changePace is iOS-only; feedIngestor on getCurrentLocation is ignored on Android.
  • HeartbeatEvent is declared on both but historically only iOS emits it - its absence is not a liveness signal.
  • Geofencing and getCurrentLocation landed on Android in v0.1.1-alpha03; with an older AAR they fail as NOT_IMPLEMENTED_ON_PLATFORM.
  • iOS getCurrentLocation collapses every failure into FIX_TIMEOUT - timeout, missing authorization and a concurrent call share one code. Only the message distinguishes them, so do not treat it as "retry later".
  • iOS track exports carry less than Android's: point src and mock are absent, and maxSpeedMps, avgMovingSpeedMps, pointCount and stopCount read 0 on iOS-built tracks.
  • A Dart-implemented RoadSnapProvider is impossible - the native interface is called inside buildTrack. OSRM or nothing, on both platforms.
  • offerFix and fixture replay are not bridged.
  • No hosted iOS dist exists yet, so the XCFrameworks are built from a local SDK checkout by the fetch script.

Geofence differences the bridge does not paper over

notifyOnEntry and notifyOnExit are honoured on iOS and ignored on Android, where both crossings always fire. dwellAfterMs is synthesised on iOS and has no equivalent on Android. onEnterEvent labels are carried on Android and ignored on iOS. Neither is emulated, because a faked difference is worse than a documented one.

Read stored history rather than only the stream: a crossing can be delivered to a process with no Dart listener, and the stream has no replay on either platform. getGeofenceEvents() is complete; stream events are a foreground convenience.