29/08/2023 Version 1.6.0
This is an important release that improves SDK startup speed and offline functionality. It also includes bug fixes and improvements that make integration significantly more robust.
It does not introduce any interface or dependency changes, so it's a drop-in update that should require only a version number bump.
- Make the SDK public methods thread-safe (can be called from background threads as well)
- Improve the internal authentication process to make it faster and more robust
- Allow AWS Cognito to safely be used in the app and SDK simultaneously
- Improve SDK location provider start-up time for first and secondary sessions
- Improve SDK location provider for secondary launches in no-network conditions
27/07/2023 Version 1.5.2
Version 1.5.2 has no changes other than some additional remote logging for debugging, and upgrading to 1.5.2 is not recommended.
26/07/2023 Version 1.5.1
iOS version 16.4 introduced changes to the way location updates continue while the app is in the background. This means that for certain iPhone model, iOS version and location permission combinations, previous versions of our SDK were unable to get continual location updates in the background.
This release improves background data collection so that for iOS >= 16.4 all phones (with sufficient location permission) will provide background location updates.
A consequence of this update is that configuring lower update frequencies will only slightly reduce battery usage. Most apps will therefore want to avoid using lower update frequencies over very large areas, and instead just use normal smaller 'on site' collection areas with high frequency updates.
03/07/2023 Version 1.5.0
- Bug fixes preventing the app from crashing on misused background refresh
- Improving the SDK's efficiency over multiple tracking sessions
- Removed Bitcode as it is deprecated
25/10/2022 Version 1.4.0
There are no API changes in version 1.4.0, but there are some dependency changes. So no code changes should be necessary in updating, but dependency management may need small changes. This version contains significant improvements to performance and stability, but does not introduce any new features.
Bug fixes and improvements
- Data persistence has been improved, migrating from SQLite to flat file storage to improve efficiency.
- Data is sent to the cloud in a more efficient way, which should improve network and battery usage.
- Fix a bug which caused indoor positioning to stop too quickly when no beacons were seen for a period.
- Reduction in the number of configuration API requests made by the SDK when it's not active to reduce network and battery usage.
- Add concurrency safety in the handling of positioning observation to reduce the possibility of relatively rare concurrency crashes that have been reported.
20/05/2022 Version 1.3.0
Version 1.3.0 contains multiple fixes and improvements, and we recommend all apps upgrade to 1.3.0
SDK status methods
This feature has been requested by mobile developers integrating our SDK. Rather than relying solely on the start up callback to determine when the SDK has been successfully started, there are now methods that can be used to synchronously check whether the SDK is running ('isSuccessfullyRunning') and whether navigation mode is enable ('isNavigationRunning').
Data from Terminated Apps
Collecting location data while apps are in the terminated state is now supported (for both IPS and GEO modules). Of course data is only available if the user has granted the 'Always' runtime permission.
Bitcode Enabled
XCode 13 issues have now been resolved, bitcode is supported and can now be enabled for apps using the SDK.
Bug fixes and improvements
- Fix bug that meant the 'Location' object could have the incorrect floor number
- Fix bug that meant the blue bar could appear on non-notch phones with the app running in background, but with 'While in Use' permission
- Fix bug that meant the SDK could crash if the phone had no WiFi connection, had a SIM for a cellular connection, but had no cellular data available.
- Fix bug that meant the logging system very occasionally caused crashes.
- Shorter internal setup time for the SDK when it is started
- Interval between API calls is dynamically configured to improve battery and network efficiency.
- Duplicate aliases are filtered if the app sets the same alias repeatedly, improving efficiency.
Refactoring
In release 1.3.0 there are some changes to method and variable naming to improve consistency.
- Rename 'activateLibraryBackgroundRefresh' to 'activateSDKBackgroundRefresh'
- Rename 'scheduleLibraryRefresh' to 'scheduleRefresh'
- Change possible values for 'type' property of the 'Location' object to 'IPS' and 'GEO'
07/02/2022 Version 1.2.1
Version 1.2.1 is a special backward compatible build using Swift 5.4. It is otherwise identical to version 1.2.0
All future releases of the library will require XCode 13 and Swift 5.5
Version 1.2.1 should only be used if you require support for older toolchains, and cannot update your toolchain at this point.
07/02/2022 Version 1.2.0
Version 1.2.0 is a major release, and we recommend all apps to upgrade to 1.2.0
Bitcode Disabled
Due to an Xcode13 known issue causing apps to crash on iOS 14 and earlier versions, this version of the SDK was built without enabling Bitcode. This may translate as a slightly bigger dimension on the SDK and it is possible that apps integrating it may not be able to enable Bitcode. Functionality and efficiency are not affected by this build setting. This should be a temporary issue and we will reenable the setting in a future release once Xcode is updated to fix the issue
SPM availability
This release is not available via SPM. If you use SPM to integrate the library, you can use version 1.2.1, which is available via SPM. The only difference is that 1.2.1 is built against Swift 5.4 using XCode 12. The versions are otherwise identical.
Geo and IPS in a single app
From version 1.2.0 the geo module and IPS module can be included in a single app. The library intelligently switches between the positioning technologies.
The location object returned via the callback now has any additional type property which has the values 'cart' (for IPS) for 'Geo' (for GPS positioning).
Changes to location permission
From version 1.2.0 the library listens for changes to the app's location permission status.
This relaxes the previous requirement that the library should be started whenever the app starts, but only if location permission has been granted, and also after permission has been granted.
This version can simply be started once, whenever the app starts.
Multiple geo data collection zones.
Previously only one location for background data collection could be specified. From version 1.2.0, multiple locations can be specified, and background data collection will start when the app is opened inside any one of the zones, and will stop once the user has exited all zones.
Bug fixes and improvements
- If the library is configured not to gather data (eg it is outside the time period specified for data collection), then the Location Manger is not instanciated at all, meaning that the location icon does not come on.
- A bug that could stop data from being sent to the cloud backend until the app was restarted is fixed.
- A bug that could cause the geo module (when used without the IPS module) to stop gathering data when the app was in background has been fixed.
- Numerous small performance and reliability enhancements.
17/12/2021 Version 1.1.0
Bitcode Disabled
Due to an Xcode13 known issue causing apps to crash on iOS 14 and earlier versions, this version of the SDK was built without enabling Bitcode. This may translate as a slightly bigger dimension on the SDK and it is possible that apps integrating it may not be able to enable Bitcode. Functionality and efficiency are not affected by this build setting. This should be a temporary issue and we will reenable the setting in a future release once Xcode is updated to fix the issue
Location updates provide X and Y in display units (pixels)
For floors using built-in floorplans, or ExpoFP imported floorplans, the Location object provided via `didUpdateLocation(_ locations: [Location])` now has a `PixelCoordinates` property containing x and y coordinates in display units. These values can be passed straight to the map with no transform necessary.
Navigation Sessions
Now navigation sessions can be started and ended when the app is in the foreground, providing navigation services.
This can be done by calling `CrowdConnected.shared.startNavigation()` and `CrowdConnected.shared.stopNavigation()`.
Navigation mode provides a higher refresh update for GPS locations.
Background App Refresh
In order to accurately maintain the library in the right state, depending on the device location, Background App Refresh can be used.
For activating this feature, in `AppDelegate`’s `application(_ application:, didFinishLaunchingWithOptions:)` call `CrowdConnected.shared.activateLibraryBackgroundRefresh()`. Also, in `SceneDelegate`’s `sceneDidEnterBackground(_ scene:)` call `CrowdConnected.shared.scheduleLibraryRefresh()`.
Bug Fixes
Various bug fixes improving stability.