All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
5.9.1 - 2024-12-05
- Fixes and improvements to SDK runtime efficiency
5.9.0 - 2024-11-22
HyperTrack.location
returns the latest location (previously distance filtered)
5.8.1 - 2024-10-18
- Data batching configuration changes now take effect immediately.
- Fixed a rare issue that could cause location events to be dropped under certain conditions.
5.8.0 - 2024-09-05
- Support for Motion & Activity detection
- If your app asks for permission and the user grants it, you will have better activity detection in polylines
5.7.0 - 2024-08-21
- Support for on-device geofencing via new
HyperTrack.orders["my_order"].isInsideGeofence
property- To learn more about how to best use this new feature see our guide here: https://developer.hypertrack.com/docs/clock-in-out-tagging#verify-shift-presence-before-starting-work
Example use for worker clock in:
func handlePresence(
_ isInsideResult: Result<Bool, HyperTrackLocationError>
) {
switch isInsideResult {
case .success(let isInside):
if isInside {
// allow worker to clock in for the shift
} else {
// "to clock in you must be at order destination"
}
case .failure(let error):
// resolve any tracking errors to obtain geofence presence
}
// check if a worker is inside an order's geofence
handlePresence(HyperTrack.orders["my_order"].isInsideGeofence)
// or, listen to order.isInsideGeofence changes
HyperTrack.subscribeToOrders { orders in
handlePresence(orders["my_order"].isInsideGeofence)
}
- Added partial support for Motion Activity
- Our SDK doesn’t ask for motion permission
- For SDK 5.7.0 and above,
NSMotionUsageDescription
in yourInfo.plist
is required (even if permission is not asked).
- Changed the
OrderStatus
enum to a struct to support future cases without introducing API breaking changes
5.6.0 - 2024-06-05
-
🆕 New
HyperTrack.workerHandle
property can be used to identify workers- We observed our customers identify worker devices via
HyperTrack.metadata
, so we decided to make it a first class citizen in our API! - If you previously used
metadata
to identify workers, we suggest usingworkerHandle
for this purpose instead. 👈
- We observed our customers identify worker devices via
-
Exposed a new
HyperTrackSwizzlingDidReceiveRemoteNotificationEnabled
Info.plist key that can be used to specifically disable swizzling of theUIApplicationDelegate.application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
method.
5.5.4 - 2024-05-13
- Improved documentation for
addGeotag()
methods
- Protect against calling push completion handler multiple times
- Fixes and improvements for internal error reporting
- Fixed a bug that led to a small event loss
5.5.3 - 2024-04-26
- Added missing
NSPrivacyCollectedDataType
s toPrivacyInfo.xcprivacy
manifest file- CrashData, DiagnosticData, PerformanceData, DeviceID, UserID, CoarseLocation, PreciseLocation
5.5.2 - 2024-04-23
- Fixed an edge case when a battery update would be skipped
5.5.1 - 2024-04-16
- iOS: Bundle the Apple Privacy Manifest file as part of the SDK xcframework
- This change is required for all apps that depend on our SDK to pass AppStore review.
- More info in the announcement and Apple docs about Privacy manifest files
- iOS: Background Location Indicator (Blue Pill)
- Default behaviour has been changed to hidden on devices with "Always" location permission
- Previously the indicator would always show, now only for devices with "While Using" permission
- As part of this change we had to lower the location distance filter
5.5.0 - 2024-04-06
- Support for tracking orders with geotags.
- New
addGeotag(orderHandle, orderStatus, metadata)
function OrderStatus
can be.clockIn
|.clockOut
|.custom("your_status")
- Use this when users clock in/out of work in your app to honor their work time (see Clock in/out Tagging guide for more info)
- New
- New
HyperTrackAllowMockLocation
Info.plist flag to support mock locations in development testing.
- Better data batching to optimize battery usage
5.4.1 - 2024-02-12
- Reduced instances where memory and network spikes could cause crashes or excessive battery drain.
5.4.0 - 2024-01-26
- Improved reporting of battery status and percentage changes.
- Fixed over-reporting of location_unavailable outage.
5.3.0 - 2024-01-20
- Reports drivers who change the time on the phone. Changing time doesn't affect the data.
- Prevents data corruption by forcing OS to write the data to disk on every write.
5.2.0 - 2024-01-16
- Uses NTP servers to synchronize time independantly from the OS. Avoids sending data with wrong time information for users who override phone's settings with incorrect values.
- Optimized querying the Location Manager to reduce impact on battery life and main thread performance.
- Mitigates SDK cache file corruption that led to some Android devices loading to device_id values with all zeroes.
- Reduced network traffic.
5.1.0 - 2023-12-29
- New dynamicPublishableKey API allows to set the publishable key later in the app lifecycle. Should only be used when there is no other way around it and it's impossible to know the publishable key in advance. Please contact us if this matches your use case.
- Improved the speed of tracking intent synchronization.
5.0.8 - 2023-12-06
- Fixed cancelling a subscription multiple times hanging a thread. Including cancelling and assigning to nil after.
5.0.7 - 2023-11-20
- Fixed a crash that happened randomly when reconnecting to a web socket.
5.0.6 - 2023-11-10
- This version of the SDK now automatically migrates device_id, name and metadata from versions before 5. After the user updates the app, those values stay the same, no additional steps required.
5.0.5 - 2023-11-07
- Fixed the SDK not sending device information when push notifications capability is not set in Xcode.
- Reduced a chance of generating a null (all zeroes) device_id.
5.0.4 - 2023-10-12
- Fixed location indicator displaying when not tracking.
5.0.3 - 2023-10-10
- Fixed sending more network packets than needed when locate() API is used.
5.0.2 - 2023-09-26
- Fixed
addGeotag()
andlocation
returning Errors when there is no intent to track. - Fixed rare cases when starting tracking remotely when the app is not running resulted in the SDK not updating locations until the user opens the app.
5.0.1 - 2023-09-13
- Resolved an issue that could lead to data corruption if the app crashed during a write operation.
- Ensured that absence of disk storage does not hinder caching of location data when available.
- Enhanced resilience during outages, especially when the OS suspends the app.
- Optimized app longevity after receiving a push notification while it's not in the foreground.
5.0.0 - 2023-09-01
We are excited to announce the release of HyperTrack iOS SDK 5.0.0, a major update to our location tracking SDK. This release ensures highest tracking performance, reduces deployed app sizes and comes with an improved API to simplify the integrations. We highly recommend upgrading, but please note this is a breaking change from the previous major version.
- WARNING
⚠️ : The device ID will be changed after the update to this version. - The SDK API was fully redesigned to be more ergonomic and to require less code to use.
- All the API methods can be accessible at any time from any place in the app by calling them on the static HyperTrack class.
- No need to initialize the SDK by setting publishable key. Now set the key in
Info.plist
asHyperTrackPublishableKey
. HyperTrackError
enum is renamed toHyperTrack.Error
and now has nested structure.availability
renamed toisAvailable
subscribeToAvailability
renamed tosubscribeToIsAvailable
- Minimum deployment target was increased to iOS 12.
- New
locate()
API. Allows to get a one-time location and sends it to the cloud even when the device is not tracking or available. - The SDK is always in sync with our cloud (if internet connection is present), there is no need to call
syncDeviceSettings()
anymore. name
variable to set the user name associated with the device.- The SDK now works in Simulator.
HyperTrack.init()
,HyperTrack.makeSDK()
(you can useInfo.plist
params to configure the SDK instead)automaticallyRequestPermissions
init param is always false now (usesubscribeToErrors
to trigger permission requests)mockLocationsAllowed
init param is always true now (but the device will sendLocation.Mocked
error)
start()
,stop()
(useisTracking
variable setter instead)setDeviceMetadata()
(usemetadata
variable setter instead)setDeviceName()
(usename
variable setter instead)HyperTrackError
types:motionActivityPermissionsDenied
motionActivityServicesDisabled
motionActivityServicesUnavailable
motionActivityPermissionsRestricted
syncDeviceSettings()
mockLocationsAllowed
isLoggingEnabled
isRunning
addGeotag(Metadata)
(useaddGeotag(JSON.Object)
instead)addTripMarker()
(useaddGeotag()
instead)HyperTrack.startedTrackingNotification
,HyperTrack.stoppedTrackingNotification
(usesubscribeToIsTracking
instead)HyperTrack.becameAvailableNotification
,HyperTrack.becameUnavailableNotification
(usesubscribeToIsAvailable
instead)HyperTrack.didEncounterRestorableErrorNotification
,HyperTrack.didEncounterUnrestorableErrorNotification
(usesubscribeToErrors
instead)- Activity permissions are no longer required.
- Objective-C API.
4.16.1 - 2023-06-16
- Stops significant location updates started by previous (pre 4.16.0) versions. This makes sure that the issue discovered in 4.16.0 is fixed even if the user kills the app while the SDK was tracking and updates to a 4.16.x.
4.16.0 - 2023-06-01
- Fixed location not being collected in background on iOS 16.4 and upwards. Removed significant location change monitoring to comply with new requirements (https://developer.apple.com/forums/thread/726945?answerId=749230022#749230022).
- Changed automatic permission request from Always to When In Use to avoid Provisional Always Authorization (https://hypertrack.com/blog/2020/06/24/impact-of-ios13-ios14-location-permissions-on-background-location-access/).
4.15.0 - 2023-05-19
- New geotag with expected location API. When you know where the driver is supposed to make an action, attach a location to a geotag. This will calculate the deviation between the real position where it happened and the expected position. This information will also be available on dashboards and APIs.
- Geotag API now captures the precise position of the driver at the moment the geotag API was triggered.
4.14.0 - 2023-02-16
- Automatic silent push notification integration using Swizzling. You no longer need to connect the methods manually in AppDelegate. At the same time there is no need to change anything in existing integrations.
- New errors API that allow you to check if there is anything that can prevent the SDK from tracking at any point in time. This API returns all the errors that are currently affecting tracking, so you won't be able to miss any of them, like with the previous Notifications based APIs. This API can be invoked at any point in time, not just during tracking.
- New subscription APIs, that allow you to subscribe to errors, isTracking, and availability. The current value will be delivered right after subscribing and all subsequent changes will be delivered as they happen.
- New metadata API that allows you to set and get the current metadata for the driver in a type-safe JSON form. The JSON form supports all the convenient Representable family of Swift protocols that allows you to use the API as if specifying a native Dictinary value.
4.13.0 - 2022-09-23
- If the user simulates locations when it's prohibited, the SDK still passes real locations through if there are any.
4.12.4 - 2022-07-08
- Setting availability now immediately reflects in availability getter
4.12.3 - 2022-06-13
- Notifications sending only when tracking and availability values change.
4.12.2 - 2022-06-10
- A race where the tracking and availability notifications were sent before they observable variables were changed.
4.12.1 - 2022-06-10
- Regression in posting tracking notifications
4.12.0 - 2022-06-09
- SDK now reports simulated locations as an outage
- Developers can simulate locations in development using the new
mockLocationsAllowed
property.
- Logs are disabled by default now. Can be enabled using the new
isLoggingEnabled
type property.
4.11.1 - 2022-04-29
- Fixed Objective-C interface not having an error case for location getter.
4.11.0 - 2022-04-29
- Current location getter allows to synchronously get the current location of the user or a reason for why it's not available.
4.10.1 - 2022-04-14
- The default tracking config is in line with the cloud config. This fixes the device appearing disconnected in dashboard when GPS signal is low.
4.10.0 - 2022-04-11
- New availability API allows the user to mark the device as available for Nearby API.
4.9.1 - 2022-01-10
- The SDK now builds on Xcode 12
4.9.0 - 2022-01-05
- Battery instrumentation support. You can see the current battery level in our REST APIs.
- Automatic sync is now active even after integrating the SDK without push notifications. Please be advised, push notification integration is mandatory for SDK operation.
- Start tracking notification is now being called correctly when the app restarts after being killed while tracking. This should also fix any other cases where start/stop tracking notifications are missed or called multiple times in a row.
4.8.0 - 2021-04-22
- SDK gets an additional fresh location fix every time the user brings the app to the foreground, improving geotag accuracy and trip destination triggers.
- SDK no longer tries to wake up the app in the background to check if it should start tracking. As a result, the iOS dialog "... has used your location _ times in background over the past 3 days..." will appear only when the SDK was explicitly tracking.
4.7.0 - 2020-12-23
- Improved health event generation.
- Events that are stored in the SDK database and are older than 24 hours will be deleted automatically.
- Fixed issue with runtime error notifications.
4.6.0 - 2020-11-09
- Tracking intent sync with the platform to improve tracking control.
- Geotags can be sent regardless of tracking status.
- Changed reachability implementation.
4.5.1 - 2020-10-07
- Fix for Xcode 11 integration, replaced Swift 5.2 feature to another one compatible with Swift 5.1
4.5.0 - 2020-09-24
- iOS 14 support. If the user denies precise location access, an outage appears on the dashboard and is available through APIs.
- Swift Package Manager support. Available on Xcode 12 and up. Use this URL
https://github.com/hypertrack/sdk-ios
when adding a package dependency.
- GRDB dependency. Now SDK has no external dependencies.
4.4.0 - 2020-09-09
- SDK automatically syncs up with the cloud. Improves tracking rates when silent push notifications fail or are disabled by the user.
- Reduced battery consumption.
- Reduced mobile data usage.
- Configurability for automatic sync and tracking frequency. Configuration is server side, contact our support if you need non-standard tracking frequency.
- Improved first location accuracy (important for trips, client side UX and distance calculations).
- Support for the latest iPad model names in dashboard.
- Motion denied error upon SDK initialization. If motion permissions were denied before first SDK initialization, SDK will still give you an instance with deviceID and will report lack of motion permissions in dashboard and APIs/web-hooks.
- SDK now correctly reports when tracking was interrupted due to device shutdown because of low battery.
4.3.0 - 2020-08-13
- iPad support for all "WiFi + Cellular" iPad models from this list (iPad column) .
- Reduced network data usage.
- Added workaround for iOS 13.3+ bug that causes the app to only receive low accuracy locations.
- Improved app restart detection, by adding OS updates and app updates.
4.2.3 - 2020-07-28
- Improved internal SDK to cloud API efficiency. Results in less number of requests and battery drain.
4.2.2 - 2020-07-20
- Fixed battery state not updating immediately
4.2.1 - 2020-07-13
- Makes the new
automaticallyRequestPermissions
initialization property backwards compatible in Objective-C
4.2.0 - 2020-07-10
- Initializers now have a new property
automaticallyRequestPermissions
that can be used to disable automatic permissions dialogs - Improved energy efficiency and location frequency on stops
4.1.0 - 2020-07-09
- If anything blocks the SDK from tracking, this reason is reported and can be seen in the dashboard. Reasons include denied permissions, disabled services, loss of GPS signal, app terminations by OS or user and more
- Asks for permissions automatically if the host app did not ask them. This includes some tricky situations when permissions are reset globally from settings or were asked when the app was in the background
- Automatically recovers from tracking blockers and continues tracking. Tracking rate is greatly improved
- Adaptively changes the frequency of location events based on current motion activity and distance traveled. Results in smooth tracking data without gaps
- Device name and metadata changes now reflect immediately in APIs and dashboard
- Geotags are now sent without any delay
- Improved energy consumption
addTripMarker
was renamed toaddGeotag
- Fixed incorrect steps data reported when SDK was tracking for more than 24 hours
4.0.1 - 2019-12-21
- Fixed an issue of SDK stopping tracking when a new trip creation interrupted background tracking.
4.0.0 - 2019-12-12
- Support for iOS 9 and Xcode 10.1
syncDeviceSettings()
method forces the SDK to check if it needs to track. Helpful when silent push notifications fail, which can happen on fresh installs. Call it whenever app is in foreground and when your app expects tracking to start or stop.
- SDK has a new interface with strong typing.
3.7.4 - 2019-10-17
- Fix for the usage of different versioning strategies between Xcode 10 and 11
3.7.3 - 2019-10-17
- 3.7.1 and 3.7.2 were compiled with iOS 13 SDK, that can cause conflicts on older Xcode versions. This is fixed and should work on Xcode 10.2 till 11.1+
3.7.2 - 2019-10-10
- Fixed a crash when multiple HyperTrack SDK interface calls done sequentially could lead to access of the variable on the wrong thread.
3.7.1 - 2019-09-18
- Updated GRDB dependency to 4.4.0. This allows our SDK to work around React Native bug in 0.60+
3.7.0 - 2019-09-02
- SDK informs HyperTrack platform about tracking outages that happened when SDK was offline (permissions change)
- Multiple push notifications received in the background now can't lead to app being suspended (because of tracking being restarted)
3.6.0 - 2019-08-30
- When SDK starts tracking it sends the last known activity event. This can help visually understand in what state the device is currently in immediately after tracking has started.
- Added more debug logging
- Improved location filtering. This increases the number of location events during unknown activities. Should improve overall tracking polyline.
3.5.0 - 2019-08-23
- SDK now restarts tracking if it was tracking before the app restart
- Ignores all repeated commands (startTracking, stopTracking, name, metadata etc.) if new state is the same as the old one
- SDK sends silent push notification acknowledgments to backend. This results in more stable Trips experience
- Added error messages when static SDK methods are used before publishable key was set
- Increased robustness across all usage scenarios and states
3.4.0 - 2019-08-14
- SDK sports new interface that should be easier to use, more functional
- Old interface is still there, but it's deprecated for now
- Fixed an issue where activity permissions were asked manually by the host app, but didn't propagate to the SDK
3.3.6 - 2019-07-31
- SDK now consumes less network data