The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
## What's Changed
* [VIT-2912] Support BP BLE devices with RACP unimplemented by @andersio in https://github.com/tryVital/vital-ios/pull/61
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.9.5...0.9.6
## What's Changed
* [VIT-2889] Filter out unsolicited sample types from HKObserverQuery by @andersio in https://github.com/tryVital/vital-ios/pull/57
* [VIT-2890] Mitigate Range<Date> precondition failure by @andersio in https://github.com/tryVital/vital-ios/pull/59
* [VIT-2888] Fix a setUserId crash in automaticConfiguration(_:) by @andersio in https://github.com/tryVital/vital-ios/pull/60
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.9.4...0.9.5
## What's Changed
* [VIT-2799] Disconnect peripheral on read completion by @andersio in https://github.com/tryVital/vital-ios/pull/52
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.9.3...0.9.4
Vital iOS SDK 0.9.3 is a recommended update.
Release 0.9.3 addressed a Swift Concurrency usage issue, and optimised a HealthKit query usage.
Release 0.9.1 includes various improvements — [details are available in the 0.9.1 release note](https://github.com/tryVital/vital-ios/releases/tag/0.9.1). Here is a quick recap:
* NEW: Device-comptued Daily Activity Summary
* NEW: Performance improvements
* RECAP: Support for new data types
* FIXED: Discrepancies in Steps timeseries data
* FIXED: Excessive profile resource updates
* FIXED: Miscellanous fixes
---
## What's Changed
* [VIT-2715] Use HKStatQuery for first & last sample time by @andersio in https://github.com/tryVital/vital-ios/pull/49
* [VIT-2714] Check for cancellation only before starting an HKQuery by @andersio in https://github.com/tryVital/vital-ios/pull/50
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.9.2...0.9.3
Vital iOS SDK 0.9.2 is a recommended update.
Release 0.9.2 addressed two runtime exceptions caught by our monitoring of the Vital Connect iOS app.
Release 0.9.1 includes various improvements — [details are available in the 0.9.1 release note](https://github.com/tryVital/vital-ios/releases/tag/0.9.1). Here is a quick recap:
* NEW: Device-comptued Daily Activity Summary
* NEW: Performance improvements
* RECAP: Support for new data types
* FIXED: Discrepancies in Steps timeseries data
* FIXED: Excessive profile resource updates
* FIXED: Miscellanous fixes
---
## What's Changed
* [VIT-2715] Downgrade a precondition to a debug-build-only assertion. by @andersio in https://github.com/tryVital/vital-ios/pull/47
* [VIT-2714] Check task cancellation before submitting HKQuery by @andersio in https://github.com/tryVital/vital-ios/pull/46
* Bump to 0.9.2 by @andersio in https://github.com/tryVital/vital-ios/pull/48
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.9.1...0.9.2
Vital iOS SDK 0.9.1 is a recommended update.
# NEW: Device-comptued Daily Activity Summary
The Vital SDK now computes daily activity summary on the end device.
This helps reduce load on Vital's databases, while ensuring that aggregates in every activity summary are exactly matching day-by-day numbers in the week views of the Apple Health app in any named time zone, by using the same Apple-maintained aggregation API.
### Summary time zone handling
Daily activity summary uses the device time zone at sync time <sup>[1]</sup>.
While the time zone could potentially change over the course of a day, and you *might* receive webhooks that reflect the time zone changes accordingly, the general rule of thumb is that the last observed device time zone eventually “wins”. In other words, given a specific calendar date, Vital API always reports activity summary for it in the time zone where the final update for it was sent.
<sup>[1] Recap: Sync is automatically triggered when the SDK is configured during app launch, or in response to Apple HealthKit change notifications in foreground and background.</sup>
# NEW: Performance improvements
We have optimized our HealthKit usage — a 7x reduction in execution time for 120-day historical backfill has been observed on iPhone 13 mini during our testing.
We expect this improvement to be proportional to the number of backfill days, and the device CPU power.
# RECAP: Support for new data types
- Mindful Minutes as a standalone resource (since 0.7.13)
- Heart Rate Variability as a standalone resource (since 0.7.14)
- Sleep resources now include Apple Watch wrist temperature (since 0.7.17)
# FIXED: Discrepancies in Steps timeseries data
Any new dailly and historical steps timeseries data sent post SDK upgrade should now exactly match the hour-by-hour numbers in the day view of the Apple Health app.
# FIXED: Excessive profile resource updates
The SDK now sends updates for profile resources only when value changes are observed, instead of sending one unconditionally every time the SDK is configured (i.e., practically every app launch).
# FIXED: Miscellanous fixes
We have fixed a race condition that may cause multiple SDK instances being created, resulting in undefined behaviour.
We have addressed several issues that might cause the SDK to fail to comply with the tight timing requirements for HealthKit background delivery as imposed by Apple.
Incompliance to the tight timings can result in the app being deregistered from background delivery, until the app is relaunched by the user (where the SDK auto-renews the registration for background deliveries).
It is recommended to adopt the following APIs, if you haven’t done so already:
- [Flutter & iOS Native]
* Make sure `VitalHealthKitClient.automaticConfiguration()` is called before your AppDelegate’s `application(_:didFinishLaunchingWithOptions:)` method returns in your Swift-based Xcode project.
- [React Native]
* Make sure `[VitalHealthKitConfiguration automaticConfiguration]` is called before your native FlutterAppDelegate subclass' `application:didFinishLaunchingWithOptions:` method returns in your ObjC-based app project.
- [iOS Native]
* If you are using any of the async `VitalHealthKitClient.configure*` methods, consider adopting `automaticConfiguration()` as mentioned above.
Note that what `automaticConfiguration()` does is to use last-known SDK configuration to get ready for HealthKit background delivery reception. Your app is still expected to call the proper SDK `configure(...)` and `setUserId(_:)` methods (from Dart, JS/TS or Swift) eventually, with the most up-to-date configuration and user ID.
### Example snippets
Swift app projects:
```swift
import VitalHealthKit
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// ... <snipped>
VitalHealthKitClient.automaticConfiguration()
// ... <snipped>
}
}
```
React Native ObjC app projects:
```objc
#import "VitalHealthKitConfiguration.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ... <snipped>
[VitalHealthKitConfiguration automaticConfiguration];
// ... <snipped>
}
```
ObjC app projects:
```objc
@import VitalHealthKit;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ... <snipped>
[VitalHealthKitClient automaticConfigurationWithCompletion:nil];
// ... <snipped>
}
```
---
## What's Changed
* Use endDate DESC to lookup last sample by @andersio in https://github.com/tryVital/vital-ios/pull/39
* [VIT-2677] Group summaries and samples by floating date by @andersio in https://github.com/tryVital/vital-ios/pull/38
* [VIT-2680] Mark log interpolations with privacy: public by @andersio in https://github.com/tryVital/vital-ios/pull/40
* [VIT-2682] Always call HealthKit completion handlers. by @andersio in https://github.com/tryVital/vital-ios/pull/42
* [VIT-2687] Serialize SDK singleton accessors. by @andersio in https://github.com/tryVital/vital-ios/pull/43
* Use HKStatCollectionQuery for day summaries by @andersio in https://github.com/tryVital/vital-ios/pull/44
* VO2max should use queryQuantities by @andersio in https://github.com/tryVital/vital-ios/pull/45
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.9.0...0.9.1
## What's Changed
* [VIT-2665] Use the new query in iOS 15 by @RuiAAPeres in https://github.com/tryVital/vital-ios/pull/30
* Statistics with HealthKit source merging by @andersio in https://github.com/tryVital/vital-ios/pull/31
* [WIP] Optimize VitalStatistics enrichment by @andersio in https://github.com/tryVital/vital-ios/pull/33
* [VIT-2666] Workaround a HKStatCollectionQuery quirk by @andersio in https://github.com/tryVital/vital-ios/pull/34
* [VIT-2638] Activity day summaries. by @andersio in https://github.com/tryVital/vital-ios/pull/32
* [VIT-2671] Merge Provider and FullProvider types by @andersio in https://github.com/tryVital/vital-ios/pull/36
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.8.0...0.9.0
## What's Changed
* [VIT-2629] Synchronous SDK Configuration by @andersio in https://github.com/tryVital/vital-ios/pull/28
* [VIT-2607] BLE binary data parsing fixes by @andersio in https://github.com/tryVital/vital-ios/pull/27
**Full Changelog**: https://github.com/tryVital/vital-ios/compare/0.7.18...0.8.0
- Expose `automaticConfiguration` in objc
1. Improvements to the BLE Blood Pressure and Glucose service reader.
* The `read(device:)` publisher is now guaranteed to complete upon all samples having been received from the BLE device, or fail with any error encountered.
* The `read(device:)` publisher now delivers all samples in one single batch, instead of chunks over time.
* Fixed various issues in BLE glucose measurement binary record decoding.
2. VitalDevices now supports listing currently connected BLE devices: `DeviceManager.connected(DeviceModel)`.
3. VitalHealthKit now supports reporting wrist temperature recorded by Apple Watch sleep sessions.