diff --git a/PolarBleSdk.podspec b/PolarBleSdk.podspec
index ae78deab..cbc49540 100644
--- a/PolarBleSdk.podspec
+++ b/PolarBleSdk.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'PolarBleSdk'
- s.version = '4.0.0'
+ s.version = '5.0.0-beta4'
s.summary = 'SDK for Polar sensors'
s.homepage = 'https://github.com/polarofficial/polar-ble-sdk'
s.license = { :type => 'Custom', :file => 'Polar_SDK_License.txt' }
diff --git a/README.md b/README.md
index 70c6e163..8e3d3f86 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,28 @@
# SDK for Polar sensors
-This is the official repository of Polar's software development kit. With this SDK you are able to develop your own applications for sensors made by Polar.
+This is the official repository of Polar's software development kit. With this SDK you are able to develop your own Android and iOS applications for sensors made by Polar.
-This SDK uses ReactiveX. You can read more about ReactiveX from their website [reactivex](http://reactivex.io)
+The SDK API uses ReactiveX. You can read more about ReactiveX from their website [reactivex](http://reactivex.io)
-3rd party software license listing [ThirdPartySoftwareListing](ThirdPartySoftwareListing.txt)
-
-By exploiting the SDK, you indicate your acceptance of [License](Polar_SDK_License.txt).
-
-If you wish to collaborate with Polar commercially, [click here](https://www.polar.com/en/developers)
-
-### Quick License Summary / Your rights to use the SDK
-You may use, copy and modify the SDK as long as you
-include the original copyright and license notice in any copy of the
-software/source and you comply with the license terms. You are
-allowed to use the SDK for the development of software for your
-private as well as for commercial use for as long as you use the SDK
-in compliance with the license terms.
+- [Features](#features)
+- [Project structure](#project-structure)
+- [Android getting started](#android-getting-started)
+- [iOS getting started](#ios-getting-started)
+- [Migration Guides](#migration-guides)
+- [Collaboration](#collaboration)
+- [License](#license)
+- [Third-party code and licenses](#third-party-code-and-licenses)
+## Features
### H10 Heart rate sensor
Most accurate Heart rate sensor in the markets. The H10 is used in the Getting started section of this page.
[Store page](https://www.polar.com/en/sensors/h10-heart-rate-sensor)
-#### H10 heart rate sensor available data types
-* From version 3.0.35 onwards.
-* Heart rate as beats per minute. RR Interval in ms and 1/1024 format.
+#### H10 features available by the SDK
+* Heart rate as beats per minute and RR Interval in ms.
* Heart rate broadcast.
-* Electrocardiography (ECG) data in µV with sample rate 130Hz. Default epoch for timestamp is 1.1.2000
-* Accelerometer data with sample rates of 25Hz, 50Hz, 100Hz and 200Hz and range of 2G, 4G and 8G. Axis specific acceleration data in mG. Default epoch for timestamp is 1.1.2000
+* Electrocardiography (ECG) data in µV with sample rate 130Hz.
+* Accelerometer data with sample rates of 25Hz, 50Hz, 100Hz and 200Hz and range of 2G, 4G and 8G. Axis specific acceleration data in mG.
* Start and stop of internal recording and request for internal recording status. Recording supports RR, HR with one second sampletime or HR with five second sampletime.
* List, read and remove for stored internal recording (sensor supports only one recording at the time).
@@ -35,15 +30,15 @@ Most accurate Heart rate sensor in the markets. The H10 is used in the Getting s
Reliable high quality heart rate chest strap.
[Store page](https://www.polar.com/en/sensors/h9-heart-rate-sensor)
-#### H9 heart rate sensor available data types
-* Heart rate as beats per minute. RR Interval in ms and 1/1024 format.
+#### H9 features available by the SDK
+* Heart rate as beats per minute and RR Interval in ms.
* Heart rate broadcast.
### Polar Verity Sense Optical heart rate sensor
Optical heart rate sensor is a rechargeable device that measures user’s heart rate with LED technology.
[Store page](https://www.polar.com/en/products/accessories/polar-verity-sense)
-#### Polar Verity Sense Optical heart rate sensor available data types
+#### Polar Verity Sense features available by the SDK
* Heart rate as beats per minute.
* Heart rate broadcast.
* Photoplethysmograpy (PPG) values.
@@ -51,32 +46,30 @@ Optical heart rate sensor is a rechargeable device that measures user’s heart
* Accelerometer data with sample rate of 52Hz and range of 8G. Axis specific acceleration data in mG.
* Gyroscope data with sample rate of 52Hz and ranges of 250dps, 500dps, 1000dps and 2000dps. Axis specific gyroscope data in dps.
* Magnetometer data with sample rates of 10Hz, 20Hz, 50HZ and 100Hz and range of +/-50 Gauss. Axis specific magnetometer data in Gauss.
-* List, read and remove stored exercise. Recording of exercise requires that sensor is registered to Polar Flow account. Stored sample data contains HR with one second sampletime.
-* [SDK mode](technical_documentation/SdkModeExplained.md) (from version 1.1.5 onwards)
+* [SDK mode](documentation/SdkModeExplained.md) (from version 1.1.5 onwards)
+* [Offline recording](documentation/OfflineRecordingExplained.md) (from version 2.1.0 onwards)
### OH1 Optical heart rate sensor
Optical heart rate sensor is a rechargeable device that measures user’s heart rate with LED technology.
[Store page](https://www.polar.com/us-en/products/accessories/oh1-optical-heart-rate-sensor)
-#### OH1 Optical heart rate sensor available data types
-* From version 2.0.8 onwards.
+#### OH1 features available by the SDK
* Heart rate as beats per minute.
* Heart rate broadcast.
* Photoplethysmograpy (PPG) values.
* PP interval (milliseconds) representing cardiac pulse-to-pulse interval extracted from PPG signal.
* Accelerometer data with samplerate of 50Hz and range of 8G. Axis specific acceleration data in mG.
-* List, read and remove stored exercise. Recording of exercise requires that sensor is registered to Polar Flow account. Stored sample data contains HR with one second sampletime.
-### Project structure
-* [polar-sdk-ios](polar-sdk-ios/) contains documentation for the iOS SDK source
-* [polar-sdk-android](polar-sdk-android/) contains documentation for the Android SDK source
+## Project structure
+* [polar-sdk-ios](polar-sdk-ios/) contains source documentation for the iOS SDK source
+* [polar-sdk-android](polar-sdk-android/) contains source documentation for the Android SDK source
* [demos](demos/) contains Android ecg demo application
* [examples](examples/) contains both android and ios example app utilizing most of the features from sdk
-* [technical_documentation](technical_documentation/) contains documentation related to SDK
+* [documentation](documentation/) contains documentation related to SDK
-# Android: Getting started
-Detailed documentation: [Documentation]((polar-sdk-android/docs/html/)
-## Installation
+## Android getting started
+Detailed documentation: [Documentation](polar-sdk-android/docs/)
+### Installation
1. In `build.gradle` make sure the __minSdk__ is set to __24__ or higher.
```gradle
@@ -101,12 +94,12 @@ android {
}
```
-3. Add the dependency Polar BLE SDK library. Also you will need the dependencies to [RxJava](https://github.com/ReactiveX/RxJava) to use the Polar BLE SDK Library
+3. Add the dependency to Polar BLE SDK library. Also you will need the dependencies to [RxJava](https://github.com/ReactiveX/RxJava) to use the Polar BLE SDK Library
```gradle
dependencies {
implementation 'com.github.polarofficial:polar-ble-sdk:${sdk_version}'
- implementation 'io.reactivex.rxjava3:rxjava:3.1.3'
- implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
+ implementation 'io.reactivex.rxjava3:rxjava:3.1.6'
+ implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
}
```
@@ -117,7 +110,8 @@ dependencies {
to decide the location so "neverForLocation" permission flag can be used.-->
+ android:usesPermissionFlags="neverForLocation"
+ tools:targetApi="s" />
@@ -165,19 +159,27 @@ On your application you must request for the [permissions](https://developer.and
```
-## Code example: Heart rate
+### Code example: Heart rate
See the [example](examples/example-android) folder for the full project.
#### Key things
1. Load the default api implementation and add callback.
```kt
-// NOTICE in this code snippet all the features are enabled, if only interested on particular feature(s) like Heart rate and Battery info then
-// PolarBleApiDefaultImpl.defaultImplementation(this, PolarBleApi.FEATURE_HR or PolarBleApi.FEATURE_BATTERY_INFO)
-// batteryLevelReceived callback is invoked after connection
-
-val api: PolarBleApi = PolarBleApiDefaultImpl.defaultImplementation(applicationContext, PolarBleApi.ALL_FEATURES)
-
+// NOTICE in this code snippet all the features are enabled.
+// You may enable only the features you are interested
+val api: PolarBleApi = PolarBleApiDefaultImpl.defaultImplementation(applicationContext,
+ setOf(PolarBleApi.PolarBleSdkFeature.FEATURE_HR,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_SDK_MODE,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_BATTERY_INFO,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_H10_EXERCISE_RECORDING,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_OFFLINE_RECORDING,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_ONLINE_STREAMING,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_DEVICE_TIME_SETUP,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_DEVICE_INFO)
+ )
+ )
+
api.setApiCallback(object : PolarBleApiCallback() {
override fun blePowerStateChanged(powered: Boolean) {
@@ -196,16 +198,10 @@ api.setApiCallback(object : PolarBleApiCallback() {
Log.d("MyApp", "DISCONNECTED: ${polarDeviceInfo.deviceId}")
}
- override fun streamingFeaturesReady(identifier: String, features: Set) {
- for (feature in features) {
- Log.d("MyApp", "Streaming feature $feature is ready")
- }
+ override fun bleSdkFeatureReady(identifier: String, feature: PolarBleApi.PolarBleSdkFeature) {
+ Log.d(TAG, "Polar BLE SDK feature $feature is ready")
}
-
- override fun hrFeatureReady(identifier: String) {
- Log.d("MyApp", "HR READY: $identifier")
- }
-
+
override fun disInformationReceived(identifier: String, uuid: UUID, value: String) {
Log.d("MyApp", "DIS INFO uuid: $uuid value: $value")
}
@@ -213,14 +209,6 @@ api.setApiCallback(object : PolarBleApiCallback() {
override fun batteryLevelReceived(identifier: String, level: Int) {
Log.d("MyApp", "BATTERY LEVEL: $level")
}
-
- override fun hrNotificationReceived(identifier: String, data: PolarHrData) {
- Log.d("MyApp", "HR value: ${data.hr} rrsMs: ${data.rrsMs} rr: ${data.rrs} contact: ${data.contactStatus} , ${data.contactStatusSupported}")
- }
-
- override fun polarFtpFeatureReady(s: String) {
- Log.d("MyApp", "FTP ready")
- }
})
```
2. Request permissions
@@ -241,13 +229,8 @@ override fun onRequestPermissionsResult(requestCode: Int, permissions: Array)` where is the deviceID printed to your sensor, using `api.autoConnectToDevice(-50, null, null).subscribe()` to connect nearby device or `api.searchForDevice()` to scan and then select the device
-# iOS: Getting started
-Detailed documentation: [Documentation](polar-sdk-ios/docs/). Minimum iOS version is 13.
-## Requirements
+## iOS getting started
+Detailed documentation: [Documentation](polar-sdk-ios/docs/). Minimum iOS version is 14.
+### Requirements
* Xcode 12.x
* Swift 5.x
-## Dependencies
+### Dependencies
* [RxSwift 6.0](https://github.com/ReactiveX/RxSwift) or above
* [Swift Protobuf 1.18.0](https://github.com/apple/swift-protobuf) or above
-## Installation
+### Installation
#### CocoaPods
If you use [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html) to manage your dependencies, add PolarBleSdk to your `Podfile`:
@@ -275,7 +258,7 @@ If you use [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html)
use_frameworks!
target 'YOUR_TARGET_NAME' do
- pod 'PolarBleSdk', '~> 3.3'
+ pod 'PolarBleSdk', '~> 5.0'
end
```
@@ -285,7 +268,7 @@ Add PolarBleSdk as a dependency to your `Package.swift` manifest
```swift
dependencies: [
- .package(name: "PolarBleSdk", url: "https://github.com/polarofficial/polar-ble-sdk.git", .upToNextMajor(from: "3.3.0"))
+ .package(name: "PolarBleSdk", url: "https://github.com/polarofficial/polar-ble-sdk.git", .upToNextMajor(from: "5.0.0"))
]
```
or alternatively use [XCode package manager](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app) to add Swift package to your project.
@@ -294,21 +277,21 @@ or alternatively use [XCode package manager](https://developer.apple.com/documen
If you use [Cathage](https://github.com/Carthage/Carthage) to manage your dependencies, add PolarBleSdk to your `Cartfile`
```
-github "polarofficial/polar-ble-sdk" ~> 3.3
+github "polarofficial/polar-ble-sdk" ~> 5.0
```
```bash
$ carthage update --use-xcframeworks
```
-## Setup your application
+### Setup your application
* In your project target settings enable __Background Modes__, add __Uses Bluetooth LE accessories__
* In your project target property list add the key [NSBluetoothAlwaysUsageDescription](https://developer.apple.com/documentation/bundleresources/information_property_list/nsbluetoothalwaysusagedescription)
-## Code example: Heart rate
+### Code example: Heart rate
See the [example](examples/example-ios) folder for the full project
-### Key things
+#### Key things
`deviceId` is your Polar device's id.
This is not required if you are using automatic connection.
@@ -393,3 +376,24 @@ class MyController: UIViewController,
```
3. Connect to a Polar device using `api.connectToDevice(id)` , `api.startAutoConnectToDevice(_ rssi: Int, service: CBUUID?, polarDeviceType: String?)` to connect nearby device or `api.searchForDevice()` to scan and select the device
+
+## Migration guides
+- [Polar BLE SDK 5.0.0 Migration Guide](documentation/MigrationGuide5.0.0.md)
+
+## Collaboration
+If you wish to collaborate with Polar commercially, [click here](https://www.polar.com/en/business/developers)
+
+## License
+
+### Quick License Summary / Your rights to use the SDK
+You may use, copy and modify the SDK as long as you
+include the original copyright and license notice in any copy of the
+software/source and you comply with the license terms. You are
+allowed to use the SDK for the development of software for your
+private as well as for commercial use for as long as you use the SDK
+in compliance with the license terms.
+
+By exploiting the SDK, you indicate your acceptance of [License](Polar_SDK_License.txt).
+
+## Third-party code and licenses
+Third-party code and licenses used in Polar BLE SDK see license listing [ThirdPartySoftwareListing](ThirdPartySoftwareListing.txt)
diff --git a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/build.gradle b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/build.gradle
index 9e1484bd..1f54ba8c 100644
--- a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/build.gradle
+++ b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/build.gradle
@@ -29,12 +29,12 @@ android {
dependencies {
implementation 'com.github.polarofficial:polar-ble-sdk:4.0.0'
implementation 'com.androidplot:androidplot-core:1.5.10'
- implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
- implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
- implementation 'androidx.appcompat:appcompat:1.6.0'
+ implementation 'io.reactivex.rxjava3:rxjava:3.1.6'
+ implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation "androidx.core:core-ktx:1.9.0"
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20"
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10"
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
diff --git a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/ECGActivity.kt b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/ECGActivity.kt
index 5b7053b8..ed0cb1f9 100755
--- a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/ECGActivity.kt
+++ b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/ECGActivity.kt
@@ -9,7 +9,6 @@ import com.androidplot.xy.BoundaryMode
import com.androidplot.xy.StepMode
import com.androidplot.xy.XYPlot
import com.polar.sdk.api.PolarBleApi
-import com.polar.sdk.api.PolarBleApi.DeviceStreamingFeature
import com.polar.sdk.api.PolarBleApiCallback
import com.polar.sdk.api.PolarBleApiDefaultImpl.defaultImplementation
import com.polar.sdk.api.errors.PolarInvalidArgument
@@ -35,6 +34,8 @@ class ECGActivity : AppCompatActivity(), PlotterListener {
private lateinit var plot: XYPlot
private lateinit var ecgPlotter: EcgPlotter
private var ecgDisposable: Disposable? = null
+ private var hrDisposable: Disposable? = null
+
private lateinit var deviceId: String
override fun onCreate(savedInstanceState: Bundle?) {
@@ -50,10 +51,11 @@ class ECGActivity : AppCompatActivity(), PlotterListener {
api = defaultImplementation(
applicationContext,
- PolarBleApi.FEATURE_POLAR_SENSOR_STREAMING or
- PolarBleApi.FEATURE_BATTERY_INFO or
- PolarBleApi.FEATURE_DEVICE_INFO or
- PolarBleApi.FEATURE_HR
+ setOf(
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_ONLINE_STREAMING,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_BATTERY_INFO,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_DEVICE_INFO
+ )
)
api.setApiCallback(object : PolarBleApiCallback() {
override fun blePowerStateChanged(powered: Boolean) {
@@ -73,20 +75,18 @@ class ECGActivity : AppCompatActivity(), PlotterListener {
Log.d(TAG, "Device disconnected ${polarDeviceInfo.deviceId}")
}
- override fun streamingFeaturesReady(identifier: String, features: Set) {
- for (feature in features) {
- Log.d(TAG, "Streaming feature is ready: $feature")
- when (feature) {
- DeviceStreamingFeature.ECG -> streamECG()
- else -> {}
+ override fun bleSdkFeatureReady(identifier: String, feature: PolarBleApi.PolarBleSdkFeature) {
+ Log.d(TAG, "feature ready $feature")
+
+ when (feature) {
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_ONLINE_STREAMING -> {
+ streamECG()
+ streamHR()
}
+ else -> {}
}
}
- override fun hrFeatureReady(identifier: String) {
- Log.d(TAG, "HR Feature ready $identifier")
- }
-
override fun disInformationReceived(identifier: String, uuid: UUID, value: String) {
if (uuid == UUID.fromString("00002a28-0000-1000-8000-00805f9b34fb")) {
val msg = "Firmware: " + value.trim { it <= ' ' }
@@ -101,19 +101,22 @@ class ECGActivity : AppCompatActivity(), PlotterListener {
textViewBattery.append(batteryLevelText)
}
- override fun hrNotificationReceived(identifier: String, data: PolarHrData) {
- Log.d(TAG, "HR " + data.hr)
- if (data.rrsMs.isNotEmpty()) {
- val rrText = "(${data.rrsMs.joinToString(separator = "ms, ")}ms)"
- textViewRR.text = rrText
- }
-
- textViewHR.text = data.hr.toString()
+ override fun hrNotificationReceived(identifier: String, data: PolarHrData.PolarHrSample) {
+ // deprecated
}
override fun polarFtpFeatureReady(identifier: String) {
- Log.d(TAG, "Polar FTP ready $identifier")
+ // deprecated
}
+
+ override fun streamingFeaturesReady(identifier: String, features: Set) {
+ // deprecated
+ }
+
+ override fun hrFeatureReady(identifier: String) {
+ // deprecated
+ }
+
})
try {
api.connectToDevice(deviceId)
@@ -143,8 +146,9 @@ class ECGActivity : AppCompatActivity(), PlotterListener {
}
fun streamECG() {
- if (ecgDisposable == null) {
- ecgDisposable = api.requestStreamSettings(deviceId, DeviceStreamingFeature.ECG)
+ val isDisposed = ecgDisposable?.isDisposed ?: true
+ if (isDisposed) {
+ ecgDisposable = api.requestStreamSettings(deviceId, PolarBleApi.PolarDeviceDataType.ECG)
.toFlowable()
.flatMap { sensorSetting: PolarSensorSetting -> api.startEcgStreaming(deviceId, sensorSetting.maxSettings()) }
.observeOn(AndroidSchedulers.mainThread())
@@ -170,6 +174,37 @@ class ECGActivity : AppCompatActivity(), PlotterListener {
}
}
+ fun streamHR() {
+ val isDisposed = hrDisposable?.isDisposed ?: true
+ if (isDisposed) {
+ hrDisposable = api.startHrStreaming(deviceId)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ { hrData: PolarHrData ->
+ for (sample in hrData.samples) {
+ Log.d(TAG, "HR " + sample.hr)
+ if (sample.rrsMs.isNotEmpty()) {
+ val rrText = "(${sample.rrsMs.joinToString(separator = "ms, ")}ms)"
+ textViewRR.text = rrText
+ }
+
+ textViewHR.text = sample.hr.toString()
+
+ }
+ },
+ { error: Throwable ->
+ Log.e(TAG, "HR stream failed. Reason $error")
+ hrDisposable = null
+ },
+ { Log.d(TAG, "HR stream complete") }
+ )
+ } else {
+ // NOTE stops streaming if it is "running"
+ hrDisposable?.dispose()
+ hrDisposable = null
+ }
+ }
+
override fun update() {
runOnUiThread { plot.redraw() }
}
diff --git a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HRActivity.kt b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HRActivity.kt
index 95de8fe8..0e0fd715 100755
--- a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HRActivity.kt
+++ b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HRActivity.kt
@@ -10,12 +10,13 @@ import com.androidplot.xy.StepMode
import com.androidplot.xy.XYGraphWidget
import com.androidplot.xy.XYPlot
import com.polar.sdk.api.PolarBleApi
-import com.polar.sdk.api.PolarBleApi.DeviceStreamingFeature
import com.polar.sdk.api.PolarBleApiCallback
import com.polar.sdk.api.PolarBleApiDefaultImpl.defaultImplementation
import com.polar.sdk.api.errors.PolarInvalidArgument
import com.polar.sdk.api.model.PolarDeviceInfo
import com.polar.sdk.api.model.PolarHrData
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.disposables.Disposable
import java.text.DecimalFormat
import java.util.*
@@ -32,11 +33,14 @@ class HRActivity : AppCompatActivity(), PlotterListener {
private lateinit var textViewBattery: TextView
private lateinit var textViewFwVersion: TextView
private lateinit var plot: XYPlot
+ private var hrDisposable: Disposable? = null
+
+ private lateinit var deviceId: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_hr)
- val deviceId = intent.getStringExtra("id") ?: throw Exception("HRActivity couldn't be created, no deviceId given")
+ deviceId = intent.getStringExtra("id") ?: throw Exception("HRActivity couldn't be created, no deviceId given")
textViewHR = findViewById(R.id.hr_view_hr)
textViewRR = findViewById(R.id.hr_view_rr)
textViewDeviceId = findViewById(R.id.hr_view_deviceId)
@@ -46,9 +50,11 @@ class HRActivity : AppCompatActivity(), PlotterListener {
api = defaultImplementation(
applicationContext,
- PolarBleApi.FEATURE_BATTERY_INFO or
- PolarBleApi.FEATURE_DEVICE_INFO or
- PolarBleApi.FEATURE_HR
+ setOf(
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_ONLINE_STREAMING,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_BATTERY_INFO,
+ PolarBleApi.PolarBleSdkFeature.FEATURE_DEVICE_INFO
+ )
)
api.setApiLogger { str: String -> Log.d("SDK", str) }
api.setApiCallback(object : PolarBleApiCallback() {
@@ -69,14 +75,15 @@ class HRActivity : AppCompatActivity(), PlotterListener {
Log.d(TAG, "Device disconnected ${polarDeviceInfo.deviceId}")
}
- override fun streamingFeaturesReady(identifier: String, features: Set) {
- for (feature in features) {
- Log.d(TAG, "Streaming feature is ready: $feature")
- }
- }
+ override fun bleSdkFeatureReady(identifier: String, feature: PolarBleApi.PolarBleSdkFeature) {
+ Log.d(TAG, "feature ready $feature")
- override fun hrFeatureReady(identifier: String) {
- Log.d(TAG, "HR Feature ready $identifier")
+ when (feature) {
+ PolarBleApi.PolarBleSdkFeature.FEATURE_POLAR_ONLINE_STREAMING -> {
+ streamHR()
+ }
+ else -> {}
+ }
}
override fun disInformationReceived(identifier: String, uuid: UUID, value: String) {
@@ -93,19 +100,20 @@ class HRActivity : AppCompatActivity(), PlotterListener {
textViewBattery.append(batteryLevelText)
}
- override fun hrNotificationReceived(identifier: String, data: PolarHrData) {
- Log.d(TAG, "HR ${data.hr} RR ${data.rrsMs}")
-
- if (data.rrsMs.isNotEmpty()) {
- val rrText = "(${data.rrsMs.joinToString(separator = "ms, ")}ms)"
- textViewRR.text = rrText
- }
- textViewHR.text = data.hr.toString()
- plotter.addValues(data)
+ override fun hrNotificationReceived(identifier: String, data: PolarHrData.PolarHrSample) {
+ //deprecated
}
override fun polarFtpFeatureReady(identifier: String) {
- Log.d(TAG, "Polar FTP ready $identifier")
+ //deprecated
+ }
+
+ override fun streamingFeaturesReady(identifier: String, features: Set) {
+ //deprecated
+ }
+
+ override fun hrFeatureReady(identifier: String) {
+ //deprecated
}
})
@@ -141,4 +149,36 @@ class HRActivity : AppCompatActivity(), PlotterListener {
override fun update() {
runOnUiThread { plot.redraw() }
}
+
+ fun streamHR() {
+ val isDisposed = hrDisposable?.isDisposed ?: true
+ if (isDisposed) {
+ hrDisposable = api.startHrStreaming(deviceId)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ { hrData: PolarHrData ->
+ for (sample in hrData.samples) {
+ Log.d(TAG, "HR ${sample.hr} RR ${sample.rrsMs}")
+
+ if (sample.rrsMs.isNotEmpty()) {
+ val rrText = "(${sample.rrsMs.joinToString(separator = "ms, ")}ms)"
+ textViewRR.text = rrText
+ }
+ textViewHR.text = sample.hr.toString()
+ plotter.addValues(sample)
+
+ }
+ },
+ { error: Throwable ->
+ Log.e(TAG, "HR stream failed. Reason $error")
+ hrDisposable = null
+ },
+ { Log.d(TAG, "HR stream complete") }
+ )
+ } else {
+ // NOTE stops streaming if it is "running"
+ hrDisposable?.dispose()
+ hrDisposable = null
+ }
+ }
}
\ No newline at end of file
diff --git a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HrAndRrPlotter.kt b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HrAndRrPlotter.kt
index 6aed7536..af5ab2b4 100755
--- a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HrAndRrPlotter.kt
+++ b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/HrAndRrPlotter.kt
@@ -54,7 +54,7 @@ class HrAndRrPlotter {
*
* @param polarHrData The HR data that came in.
*/
- fun addValues(polarHrData: PolarHrData) {
+ fun addValues(polarHrData: PolarHrData.PolarHrSample) {
val now = Date()
val time = now.time
for (i in 0 until NVALS - 1) {
@@ -103,6 +103,4 @@ class HrAndRrPlotter {
fun setListener(listener: PlotterListener?) {
this.listener = listener
}
-
-
}
\ No newline at end of file
diff --git a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/MainActivity.kt b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/MainActivity.kt
index 786b3214..f0435c77 100755
--- a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/MainActivity.kt
+++ b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/app/src/main/java/com/polar/polarsdkecghrdemo/MainActivity.kt
@@ -115,16 +115,14 @@ class MainActivity : AppCompatActivity() {
bluetoothOnActivityResultLauncher.launch(enableBtIntent)
}
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
- requestPermissions(arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_CODE)
- } else {
- requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), PERMISSION_REQUEST_CODE)
- }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ requestPermissions(arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT), PERMISSION_REQUEST_CODE)
} else {
- requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), PERMISSION_REQUEST_CODE)
+ requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), PERMISSION_REQUEST_CODE)
}
+ } else {
+ requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), PERMISSION_REQUEST_CODE)
}
}
diff --git a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/build.gradle b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/build.gradle
index eca69ada..e5500dcd 100644
--- a/demos/Android-Demos/PolarSDK-ECG-HR-Demo/build.gradle
+++ b/demos/Android-Demos/PolarSDK-ECG-HR-Demo/build.gradle
@@ -1,6 +1,6 @@
plugins {
- id 'com.android.application' version '7.4.0' apply false
- id 'org.jetbrains.kotlin.android' version '1.7.21' apply false
+ id 'com.android.application' version '7.4.2' apply false
+ id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
}
task clean(type: Delete) {
diff --git a/technical_documentation/KnownIssues.md b/documentation/KnownIssues.md
similarity index 98%
rename from technical_documentation/KnownIssues.md
rename to documentation/KnownIssues.md
index bbd4f26b..0b8a912b 100644
--- a/technical_documentation/KnownIssues.md
+++ b/documentation/KnownIssues.md
@@ -7,6 +7,7 @@
- **Workaround:**
- The PPG stream is working even the `startOhrStreaming` request is made using the 135Hz as sampleRate parameter in `PolarSensorSetting`. However, the received PPG stream is sampled with 55Hz.
- If [SDK mode](SdkModeExplained.md) is enabled then PPG settings is read correctly.
+- **FIX:** FIXED IN VERITY SENSE FIRMWARE 2.1.0
#### Issue 2
- **Firmware:** all firmwares
diff --git a/documentation/MigrationGuide5.0.0.md b/documentation/MigrationGuide5.0.0.md
new file mode 100644
index 00000000..68be0fe4
--- /dev/null
+++ b/documentation/MigrationGuide5.0.0.md
@@ -0,0 +1,54 @@
+# PolarBleSDK 5.0.0 Migration Guide
+
+PolarBleSDK 5.0.0 is a major release that includes API-breaking changes. This guide aims to make the transition easier for developers who are updating their existing applications from PolarBleSDK 4.x.x to the latest APIs
+
+## New Features
+PolarBleSDK 5.0.0 introduces a new feature that enables offline recording functionality in VeritySense. To learn more about offline recording, please see the [documentation](OfflineRecordingExplained.md)
+
+## Terminology update
+In previous versions of the Polar BLE SDK, the core functionality provided online data streams over the BLE connection. This functionality was typically referred to as "streaming" in the PolarBleSdk vocabulary and APIs. With the introduction of new features for recording data to device storage in PolarBleSDK 5.0.0, the terminology has been updated.
+
+The updated terminology now distinguishes between "online streaming" and "offline recording". "Online streaming" refers to the functionality for streaming data in real time over the BLE connection. "Offline recording" refers to the new feature that allows data to be saved directly to the device storage. This change in terminology reflects the new capabilities of the Polar BLE SDK, and helps to clarify the distinction between the two modes of data handling.
+
+## Breaking API Changes Android
+- The Polar BLE SDK previously defined feature names such as `FEATURE_HR`, `FEATURE_DEVICE_INFO`, `FEATURE_BATTERY_INFO`, `FEATURE_POLAR_SENSOR_STREAMING`, `FEATURE_POLAR_FILE_TRANSFER`, and `ALL_FEATURES` as constants. In the new version of the SDK, the features are defined in an enum class called `PolarBleSdkFeature`, with feature names that better describe their functionality. This change allows the Polar BLE SDK to optimize resource usage by only enabling features that are needed by the API user. Additionally, the new feature names are not tied to the BLE service names that provide the feature functionality, making them more understandable to the API user. Overall, this change simplifies the use of the Polar BLE SDK for developers who may not have a deep understanding of BLE service names and the related features they provide.
+
+- In the previous version of the Polar BLE SDK, the available data types for online streaming were defined in an enum class called `DeviceStreamingFeature`. In the new version of the SDK this enum is renamed to `PolarDeviceDataType`, as it now includes data types for both online streaming and offline recording. This change simplifies the naming convention for developers, and makes it easier to understand the different types of data available from the Polar device, both when streaming live data and when recording data for later analysis.
+
+- In the previous version of the Polar BLE SDK, the `backgroundEntered` function was deprecated, and it has now been removed from the API. This function was previously used to detect when the app was sent to the background, but the information is not needed by SDK anymore.
+
+- In previous versions of the Polar BLE SDK, the callbacks `polarFtpFeatureReady`, `hrFeatureReady`, and `sdkModeFeatureAvailable` were used to determine when certain features were ready for use. In the latest version of the SDK, these callbacks have been deprecated and replaced with a new callback called `bleSdkFeatureReady`. The `bleSdkFeatureReady` callback is now used to indicate when any feature of the Polar BLE SDK is ready for use. When a feature becomes ready, the `bleSdkFeatureReady` callback is called with the `PolarBleSdkFeature` parameter, which indicates the specific feature that is ready for use. nThis change allows for a more efficient and consistent way of handling feature readiness, as all features can now be managed through a single callback. Developers who are updating their apps to the latest version of the Polar BLE SDK should ensure that they are using the new `bleSdkFeatureReady` callback to manage feature readiness.
+
+- In the latest version of the Polar BLE SDK, the `streamingFeaturesReady` callback in `PolarBleApiCallback` has been deprecated. Instead, the new `bleSdkFeatureReady` callback can be used to determine whether a Polar device supports online streaming and if the online streaming feature is ready for use. When the `bleSdkFeatureReady` callback is called with the feature parameter set to `FEATURE_POLAR_ONLINE_STREAMING`, it indicates that the device is ready to stream online data, and the `PolarOnlineStreamingApi` can be used to access the data. The `getAvailableOnlineStreamDataTypes` function in `PolarOnlineStreamingApi` can be used to retrieve a list of available data types that can be streamed from the connected device.
+
+- `PolarHrSample` no longer has a `rrs` property. Instead, it has a `rrsMs` property that represents the R-wave to R-wave intervals in milliseconds. Update any code that uses `rrs` to use `rrsMs` instead. `PolarHrSample` also has a new `rrAvailable` property that indicates whether RR data is available for the sample.
+
+## Deprecated APIs on Android
+
+- `hrNotificationReceived` is deprecated in `PolarBleApiCallback`. The recommended way to receive heart rate is the `startHrStreaming` API, similar to streaming of other data types.
+
+- the `startOhrStreaming` API has been renamed to `startPpgStreaming`. This change was made to better describe the type of data that will be streamed using the API.
+
+- the `startOhrPPIStreaming` API has been renamed to `startPpiStreaming`. This change was made to better describe the type of data that will be streamed using the API.
+
+- the `PolarOhrPPIData` data class has been renamed to `PolarPpiData` in order to provide a more accurate description of the type of data it represents.
+
+
+## Breaking API Changes iOS
+- The SDK features in the Polar BLE SDK were previously defined in an enum class called `Features`. The new version of the SDK defines the features in an enum class called `PolarBleSdkFeature`, with feature names that better describe their functionality. This change allows the Polar BLE SDK to optimize resource usage by only enabling features that are needed by the API user. Additionally, the new feature names are not tied to the BLE service names that provide the feature functionality, making them more understandable to the API user. Overall, this change simplifies the use of the Polar BLE SDK for developers who may not have a deep understanding of BLE service names and the related features they provide.
+
+- In the previous version of the Polar BLE SDK, the available data types for online streaming were defined in an enum class called `DeviceStreamingFeature`. In the new version of the SDK this enum is renamed to `PolarDeviceDataType`, as it now includes data types for both online streaming and offline recording. This change simplifies the naming convention for developers, and makes it easier to understand the different types of data available from the Polar device, both when streaming live data and when recording data for later analysis.
+
+- In previous versions of the Polar BLE SDK, the callbacks `polarFtpFeatureReady`, `hrFeatureReady`, and `sdkModeFeatureAvailable` were used to determine when certain features were ready for use. In the latest version of the SDK, these callbacks have been deprecated and replaced with a new callback called `bleSdkFeatureReady`. The `bleSdkFeatureReady` callback is now used to indicate when any feature of the Polar BLE SDK is ready for use. When a feature becomes ready, the `bleSdkFeatureReady` callback is called with the `PolarBleSdkFeature` parameter, which indicates the specific feature that is ready for use. nThis change allows for a more efficient and consistent way of handling feature readiness, as all features can now be managed through a single callback. Developers who are updating their apps to the latest version of the Polar BLE SDK should ensure that they are using the new `bleSdkFeatureReady` callback to manage feature readiness.
+
+- In the latest version of the Polar BLE SDK, the `streamingFeaturesReady` callback in `PolarBleApiCallback` has been deprecated. Instead, the new `bleSdkFeatureReady` callback can be used to determine whether a Polar device supports online streaming and if the online streaming feature is ready for use. When the `bleSdkFeatureReady` callback is called with the feature parameter set to `FEATURE_POLAR_ONLINE_STREAMING`, it indicates that the device is ready to stream online data, and the `PolarOnlineStreamingApi` can be used to access the data. The `getAvailableOnlineStreamDataTypes` function in `PolarOnlineStreamingApi` can be used to retrieve a list of available data types that can be streamed from the connected device.
+
+- The `PolarHrData` type has been changed from a tuple to an array of tuples. Update any code that uses this type to reflect this change. `PolarHrData` no longer has a `rrs` property. Instead, it has a `rrsMs` property that represents the R-wave to R-wave intervals in milliseconds. The `rrAvailable` property have been added.
+
+## Deprecated APIs on iOS
+
+- `hrValueReceived` is deprecated in `PolarBleApiDeviceHrObserver`. The recommended way to receive heart rate is the `startHrStreaming` API, similar to streaming of other data types.
+
+- the `startOhrStreaming` API has been renamed to `startPpgStreaming`. This change was made to better describe the type of data that will be streamed using the API.
+
+- the `startOhrPPIStreaming` API has been renamed to `startPpiStreaming`. This change was made to better describe the type of data that will be streamed using the API.
diff --git a/documentation/OfflineRecordingExplained.md b/documentation/OfflineRecordingExplained.md
new file mode 100644
index 00000000..017abc7c
--- /dev/null
+++ b/documentation/OfflineRecordingExplained.md
@@ -0,0 +1,58 @@
+# Offline Recording
+
+The offline recording makes it possible to record data into Polar device internal memory. The recording continues even though the BLE connection is lost while recording.
+
+- [Basic usage](#features)
+- [Advanced usage](#advanced-usage)
+- [Memory management](#memory-management)
+- [Security](#security)
+- [Availability](#availability)
+- [Considerations](#considerations)
+
+## Basic usage
+
+To enable the offline recording the feature `FEATURE_POLAR_OFFLINE_RECORDING` must be opted in at the time of Polar BLE SDK instantiation. Once the BLE connection is created to the Polar device the `bleSdkFeatureReady` callback is called by the SDK with feature `FEATURE_POLAR_OFFLINE_RECORDING` indicating the offline recording functionality is available in Polar device and it is ready to be used. From this point onwards the offline recording API functions, exposed in the `PolarOfflineRecordingApi` interface, are available and usable.
+
+To know which data types are supported in the particular Polar device, the `getAvailableOfflineRecordingDataTypes` function can used to check the availability.
+
+The API `PolarOfflineRecordingApi` has the basic functions to start `startOfflineRecording` and stop `stopOfflineRecording` offline recording. Status query of API function `getOfflineRecordingStatus` indicates if device is already having active recordings on going.
+
+The listing of recordings saved in device memory can be done with `listOfflineRecordings`. The listing returns all the entries (`PolarOfflineRecordingEntry`) in the device or empty list if no recordings found. Using the `PolarOfflineRecordingEntry` it is possible to read the record with the `getOfflineRecord` and delete it with `removeOfflineRecord`.
+
+To know what are the capabilities of each `PolarDeviceDataType` in offline recording, the settings shall be queried by the `requestOfflineRecordingSettings`. The wanted settings are then provided as parameter for `startOfflineRecording`.
+
+## Advanced usage
+
+**SDK Mode**
+
+The offline recording can be used in [SDK mode](SdkModeExplained.md). The SDK mode provides wider range of settings to be used, to know the available settings in SDK mode for offline recording the settings can be queried by the `requestFullOfflineRecordingSettings`. Please note that in SDK Mode, it is not possible to perform operations such as listing offline recordings (`listOfflineRecordings`), reading specific offline recording (`getOfflineRecord`), or deleting offline recordings (`removeOfflineRecord`).
+
+**Offline recording triggers**
+
+Triggers are the way to automatically start the offline recording. The options are `TRIGGER_SYSTEM_START` and `TRIGGER_EXERCISE_START`. In case the trigger is set to `TRIGGER_SYSTEM_START` the offline recording is started every time the Polar device is switched on, e.g. when VeritySense device power button is pressed by the user to turn device on. In case the trigger is set to `TRIGER_EXERCISE_START` the offline recording is started every time exercise is started in Polar device. With the VeritySense `TRIGER_EXERCISE_START` will trigger offline recording if either the [exercise](https://support.polar.com/en/how-to-use-polar-verity-sense-in-recording-mode) or [swimming](https://support.polar.com/en/how-to-use-polar-verity-sense-in-swimming-mode) mode is started by the user of VeritySense.
+
+The API `setOfflineRecordingTrigger` is used to setup the trigger. When the offline recording is automatically started by the trigger the recording will end in two conditions, either recording is stopped by `stopOfflineRecording` or user switch off the device. To disable the trigger the `setOfflineRecordingTrigger` function is called with the option `TRIGGER_DISABLED`
+
+## Memory management
+
+The device does not automatically erase offline recordings to make space for new ones. If there is less than 2 MB of memory left when a new recording is started, the device will respond with the `DISK_FULL` error when `startOfflineRecording` is subscribed. Similarly, the same 2 MB memory limit prevents the setting of new triggers with `setOfflineRecordingTrigger`.
+
+In addition, please note that the device will automatically stop the offline recording when there is less than 300 kB of free space remaining. At this point, all offline recording triggers will also be disabled.
+
+
+## Security
+
+The offline record saved in device memory can be encrypted by providing the 128bit AES key as parameter for `startOfflineRecording` request. If providing the key with the `startOfflineRecording` request, the exact same key must be provided in `getOfflineRecord` to be able to read out the offline record. Each of the started recoding may be started with different key. The key management is not provided by the SDK, but the application developer shall implement the key management. It is recommended the security option is used, otherwise it might be possible by others to read out recordings in VeritySense.
+
+## Availability
+
+| Device | Version onwards |
+|:-------------------|:---------------:|
+| Polar Verity Sense |2.1.0 |
+
+
+## Considerations
+
+The online streaming and offline recording do not work same time for the same data type. For example if either accelerometer offline recording or the accelerometer online streaming is started, the attempt to start the online streaming or offline recording at this state will return the error ERROR_ALREADY_IN_STATE.
+
+The offline recording read `getOfflineRecord` and delete `removeOfflineRecord` can be called while the offline recording is recording, but that is not recommended. It is recommended to stop the offline recording by `stopOfflineRecording` before trying to access the recording with `getOfflineRecord` or `removeOfflineRecord` functions.
diff --git a/documentation/SdkModeExplained.md b/documentation/SdkModeExplained.md
new file mode 100644
index 00000000..8e3b84a0
--- /dev/null
+++ b/documentation/SdkModeExplained.md
@@ -0,0 +1,30 @@
+# SDK Mode
+
+The SDK mode is the mode of the sensor in which the wider range of stream capabilities are offered, i.e higher sampling rates, wider (or narrow) ranges etc. For example, in the SDK mode the accelerometer sampling rate can be chosen from values 26Hz, 52Hz, 104Hz, 208Hz or 416Hz compared to 52Hz available in normal operation mode.
+
+[Polar Verity Sense](https://www.polar.com/en/products/accessories/polar-verity-sense) (starting from firmware 1.1.5) is the first sensor to support the SDK Mode.
+
+***How to use SDK Mode in Polar Verity Sense***
+- first of all you need to update the Polar Verity Sense sensor to firmware [1.1.5](https://support.polar.com/en/updates/polar-verity-sense-11-firmware-update). Which can be done by registering the sensor to Polar Flow, see the [help](https://support.polar.com/e_manuals/verity-sense/polar-verity-sense-user-manual-english/firmware-update.htm)
+- secondly you will enable or disable SDK Mode using API's provided in Polar BLE SDK library
+- once the SDK mode is enabled you may start the data online stream or offline recording as in normal operation mode
+
+***Good to know about SDK Mode in Polar Verity Sense***
+- you may read the capabilities available in SDK from the device with the `requestFullStreamSettings` or `requestFullOfflineRecordingSettings` function in any operation mode.
+- if starting many online streams on high frequency at the same time, it cannot be guaranteed that all the data is sent over the Bluetooth as traffic may get too high
+- if the online stream or offline recording is currently running on the device, the SDK Mode cannot be changed. Attempting to change the SDK Mode in will result in an "INVALID STATE" error.
+- sample code on how to use SDK mode can seen from [Android](../examples/example-android) and [iOS](../examples/example-ios) examples
+
+***SDK Mode capabilities in Polar Verity Sense***
+
+| Data |Operation mode | Sampling Rate | Range (+-) | Resolution |
+|:-----------:|:-----------------:|:-------------------------------:|:----------------------------------------------------:|:----------:|
+| Acc | Online streaming | 26Hz, 52Hz, 104Hz, 208Hz, 416Hz | 2g, 4g, 8g, 16g |16 |
+| Acc | Offline recording | 26Hz, 52Hz | 2g, 4g, 8g, 16g |16 |
+| Gyro | Online streaming | 26Hz, 52Hz, 104Hz, 208Hz, 416Hz | 250 deg/sec, 500 deg/sec, 1000 deg/sec, 2000 deg/sec |16 |
+| Gyro | Offline recording | 26Hz, 52Hz | 250 deg/sec, 500 deg/sec, 1000 deg/sec, 2000 deg/sec |16 |
+| Magnetometer| Online streaming | 10Hz, 20Hz, 50Hz, 100Hz | 50 Gauss |16 |
+| Magnetometer| Offline recording | 10Hz, 20Hz, 50Hz | 50 Gauss |16 |
+| PPG | Online streaming | 28Hz, 44Hz, 55Hz, 135Hz, 176Hz | - |22 |
+| PPG | Offline recording | 28Hz, 44Hz, 55Hz | - |22 |
+| PPI | PPI online stream or offline recording is not supported in SDK MODE |
diff --git a/technical_documentation/TimeSystemExplained.md b/documentation/TimeSystemExplained.md
similarity index 100%
rename from technical_documentation/TimeSystemExplained.md
rename to documentation/TimeSystemExplained.md
diff --git a/examples/example-android/androidBleSdkTestApp/app/build.gradle b/examples/example-android/androidBleSdkTestApp/app/build.gradle
index 2743c6fa..7e51ba5f 100644
--- a/examples/example-android/androidBleSdkTestApp/app/build.gradle
+++ b/examples/example-android/androidBleSdkTestApp/app/build.gradle
@@ -11,6 +11,7 @@ android {
versionCode 1
versionName "1.0"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
+ multiDexEnabled true
}
buildTypes {
release {
@@ -19,10 +20,6 @@ android {
}
}
- defaultConfig {
- multiDexEnabled true
- }
-
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
@@ -30,13 +27,13 @@ android {
}
dependencies {
- implementation 'com.github.polarofficial:polar-ble-sdk:4.0.0'
- implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
- implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
- implementation 'androidx.appcompat:appcompat:1.6.0'
+ implementation 'com.github.polarofficial:polar-ble-sdk:5.0.0-beta4'
+ implementation 'io.reactivex.rxjava3:rxjava:3.1.6'
+ implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation "androidx.core:core-ktx:1.9.0"
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20"
- implementation 'com.google.android.material:material:1.7.0'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10"
+ implementation 'com.google.android.material:material:1.8.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/AndroidManifest.xml b/examples/example-android/androidBleSdkTestApp/app/src/main/AndroidManifest.xml
index b96efcb7..07461b4e 100644
--- a/examples/example-android/androidBleSdkTestApp/app/src/main/AndroidManifest.xml
+++ b/examples/example-android/androidBleSdkTestApp/app/src/main/AndroidManifest.xml
@@ -1,10 +1,12 @@
-
+
+ android:usesPermissionFlags="neverForLocation"
+ tools:targetApi="s" />
@@ -36,8 +38,8 @@
> = mutableMapOf()
+
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
@@ -89,6 +112,7 @@ class MainActivity : AppCompatActivity() {
connectButton = findViewById(R.id.connect_button)
autoConnectButton = findViewById(R.id.auto_connect_button)
scanButton = findViewById(R.id.scan_button)
+ hrButton = findViewById(R.id.hr_button)
ecgButton = findViewById(R.id.ecg_button)
accButton = findViewById(R.id.acc_button)
gyrButton = findViewById(R.id.gyr_button)
@@ -104,9 +128,21 @@ class MainActivity : AppCompatActivity() {
setTimeButton = findViewById(R.id.set_time)
getTimeButton = findViewById(R.id.get_time)
toggleSdkModeButton = findViewById(R.id.toggle_SDK_mode)
+ //Verity Sense recording buttons
+ listRecordingsButton = findViewById(R.id.list_recordings)
+ startRecordingButton = findViewById(R.id.start_recording)
+ stopRecordingButton = findViewById(R.id.stop_recording)
+ downloadRecordingButton = findViewById(R.id.download_recording)
+ deleteRecordingButton = findViewById(R.id.delete_recording)
api.setPolarFilter(false)
- api.setApiLogger { s: String -> Log.d(API_LOGGER_TAG, s) }
+
+ // If there is need to log what is happening inside the SDK, it can be enabled like this:
+ val enableSdkLogs = false
+ if(enableSdkLogs) {
+ api.setApiLogger { s: String -> Log.d(API_LOGGER_TAG, s) }
+ }
+
api.setApiCallback(object : PolarBleApiCallback() {
override fun blePowerStateChanged(powered: Boolean) {
Log.d(TAG, "BLE power: $powered")
@@ -140,17 +176,6 @@ class MainActivity : AppCompatActivity() {
toggleButtonUp(toggleSdkModeButton, R.string.enable_sdk_mode)
}
- override fun streamingFeaturesReady(identifier: String, features: Set) {
- for (feature in features) {
- Log.d(TAG, "Streaming feature $feature is ready")
- }
- }
-
- override fun hrFeatureReady(identifier: String) {
- Log.d(TAG, "HR READY: $identifier")
- // hr notifications are about to start
- }
-
override fun disInformationReceived(identifier: String, uuid: UUID, value: String) {
Log.d(TAG, "DIS INFO uuid: $uuid value: $value")
}
@@ -159,12 +184,8 @@ class MainActivity : AppCompatActivity() {
Log.d(TAG, "BATTERY LEVEL: $level")
}
- override fun hrNotificationReceived(identifier: String, data: PolarHrData) {
- Log.d(TAG, "HR value: ${data.hr} rrsMs: ${data.rrsMs} rr: ${data.rrs} contact: ${data.contactStatus} , ${data.contactStatusSupported}")
- }
-
- override fun polarFtpFeatureReady(identifier: String) {
- Log.d(TAG, "FTP ready")
+ override fun hrNotificationReceived(identifier: String, data: PolarHrData.PolarHrSample) {
+ // deprecated
}
})
@@ -242,11 +263,36 @@ class MainActivity : AppCompatActivity() {
}
}
+ hrButton.setOnClickListener {
+ val isDisposed = hrDisposable?.isDisposed ?: true
+ if (isDisposed) {
+ toggleButtonDown(hrButton, R.string.stop_hr_stream)
+ hrDisposable = api.startHrStreaming(deviceId)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ { hrData: PolarHrData ->
+ for (sample in hrData.samples) {
+ Log.d(TAG, "HR bpm: ${sample.hr} rrs: ${sample.rrsMs} rrAvailable: ${sample.rrAvailable} contactStatus: ${sample.contactStatus} contactStatusSupported: ${sample.contactStatusSupported}")
+ }
+ },
+ { error: Throwable ->
+ toggleButtonUp(hrButton, R.string.start_hr_stream)
+ Log.e(TAG, "HR stream failed. Reason $error")
+ },
+ { Log.d(TAG, "HR stream complete") }
+ )
+ } else {
+ toggleButtonUp(hrButton, R.string.start_hr_stream)
+ // NOTE dispose will stop streaming if it is "running"
+ hrDisposable?.dispose()
+ }
+ }
+
ecgButton.setOnClickListener {
val isDisposed = ecgDisposable?.isDisposed ?: true
if (isDisposed) {
toggleButtonDown(ecgButton, R.string.stop_ecg_stream)
- ecgDisposable = requestStreamSettings(deviceId, PolarBleApi.DeviceStreamingFeature.ECG)
+ ecgDisposable = requestStreamSettings(deviceId, PolarBleApi.PolarDeviceDataType.ECG)
.flatMap { settings: PolarSensorSetting ->
api.startEcgStreaming(deviceId, settings)
}
@@ -273,7 +319,7 @@ class MainActivity : AppCompatActivity() {
val isDisposed = accDisposable?.isDisposed ?: true
if (isDisposed) {
toggleButtonDown(accButton, R.string.stop_acc_stream)
- accDisposable = requestStreamSettings(deviceId, PolarBleApi.DeviceStreamingFeature.ACC)
+ accDisposable = requestStreamSettings(deviceId, PolarBleApi.PolarDeviceDataType.ACC)
.flatMap { settings: PolarSensorSetting ->
api.startAccStreaming(deviceId, settings)
}
@@ -305,7 +351,7 @@ class MainActivity : AppCompatActivity() {
if (isDisposed) {
toggleButtonDown(gyrButton, R.string.stop_gyro_stream)
gyrDisposable =
- requestStreamSettings(deviceId, PolarBleApi.DeviceStreamingFeature.GYRO)
+ requestStreamSettings(deviceId, PolarBleApi.PolarDeviceDataType.GYRO)
.flatMap { settings: PolarSensorSetting ->
api.startGyroStreaming(deviceId, settings)
}
@@ -334,7 +380,7 @@ class MainActivity : AppCompatActivity() {
if (isDisposed) {
toggleButtonDown(magButton, R.string.stop_mag_stream)
magDisposable =
- requestStreamSettings(deviceId, PolarBleApi.DeviceStreamingFeature.MAGNETOMETER)
+ requestStreamSettings(deviceId, PolarBleApi.PolarDeviceDataType.MAGNETOMETER)
.flatMap { settings: PolarSensorSetting ->
api.startMagnetometerStreaming(deviceId, settings)
}
@@ -363,14 +409,14 @@ class MainActivity : AppCompatActivity() {
if (isDisposed) {
toggleButtonDown(ppgButton, R.string.stop_ppg_stream)
ppgDisposable =
- requestStreamSettings(deviceId, PolarBleApi.DeviceStreamingFeature.PPG)
+ requestStreamSettings(deviceId, PolarBleApi.PolarDeviceDataType.PPG)
.flatMap { settings: PolarSensorSetting ->
- api.startOhrStreaming(deviceId, settings)
+ api.startPpgStreaming(deviceId, settings)
}
.subscribe(
- { polarOhrPPGData: PolarOhrData ->
- if (polarOhrPPGData.type == PolarOhrData.OhrDataType.PPG3_AMBIENT1) {
- for (data in polarOhrPPGData.samples) {
+ { polarPpgData: PolarPpgData ->
+ if (polarPpgData.type == PolarPpgData.PpgDataType.PPG3_AMBIENT1) {
+ for (data in polarPpgData.samples) {
Log.d(TAG, "PPG ppg0: ${data.channelSamples[0]} ppg1: ${data.channelSamples[1]} ppg2: ${data.channelSamples[2]} ambient: ${data.channelSamples[3]} timeStamp: ${data.timeStamp}")
}
}
@@ -392,10 +438,10 @@ class MainActivity : AppCompatActivity() {
val isDisposed = ppiDisposable?.isDisposed ?: true
if (isDisposed) {
toggleButtonDown(ppiButton, R.string.stop_ppi_stream)
- ppiDisposable = api.startOhrPPIStreaming(deviceId)
+ ppiDisposable = api.startPpiStreaming(deviceId)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
- { ppiData: PolarOhrPPIData ->
+ { ppiData: PolarPpiData ->
for (sample in ppiData.samples) {
Log.d(TAG, "PPI ppi: ${sample.ppi} blocker: ${sample.blockerBit} errorEstimate: ${sample.errorEstimate}")
}
@@ -511,7 +557,7 @@ class MainActivity : AppCompatActivity() {
val isDisposed = recordingStartStopDisposable?.isDisposed ?: true
if (isDisposed) {
val recordIdentifier = "TEST_APP_ID"
- recordingStartStopDisposable = api.startRecording(deviceId, recordIdentifier, PolarBleApi.RecordingInterval.INTERVAL_1S, PolarBleApi.SampleType.HR)
+ recordingStartStopDisposable = api.startRecording(deviceId, recordIdentifier, PolarH10OfflineExerciseApi.RecordingInterval.INTERVAL_1S, PolarH10OfflineExerciseApi.SampleType.HR)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
@@ -623,6 +669,138 @@ class MainActivity : AppCompatActivity() {
)
}
+
+ listRecordingsButton.setOnClickListener {
+ api.listOfflineRecordings(deviceId)
+ .observeOn(AndroidSchedulers.mainThread())
+ .doOnSubscribe {
+ entryCache[deviceId] = mutableListOf()
+ }
+ .map {
+ entryCache[deviceId]?.add(it)
+ it
+ }
+ .subscribe(
+ { polarOfflineRecordingEntry: PolarOfflineRecordingEntry ->
+ Log.d(
+ TAG,
+ "next: ${polarOfflineRecordingEntry.date} path: ${polarOfflineRecordingEntry.path} size: ${polarOfflineRecordingEntry.size}"
+ )
+ },
+ { error: Throwable -> Log.e(TAG, "Failed to list recordings: $error") },
+ { Log.d(TAG, "list recordings complete") }
+ )
+ }
+
+ startRecordingButton.setOnClickListener {
+ //Example of starting ACC offline recording
+ Log.d(TAG, "Starts ACC recording")
+ val settings: MutableMap = mutableMapOf()
+ settings[PolarSensorSetting.SettingType.SAMPLE_RATE] = 52
+ settings[PolarSensorSetting.SettingType.RESOLUTION] = 16
+ settings[PolarSensorSetting.SettingType.RANGE] = 8
+ settings[PolarSensorSetting.SettingType.CHANNELS] = 3
+ //Using a secret key managed by your own.
+ // You can use a different key to each start recording calls.
+ // When using key at start recording, it is also needed for the recording download, otherwise could not be decrypted
+ val yourSecret = PolarRecordingSecret(
+ byteArrayOf(
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+ )
+ )
+ api.startOfflineRecording(deviceId, PolarBleApi.PolarDeviceDataType.ACC, PolarSensorSetting(settings.toMap()), yourSecret)
+ //Without a secret key
+ //api.startOfflineRecording(deviceId, PolarBleApi.PolarDeviceDataType.ACC, PolarSensorSetting(settings.toMap()))
+ .subscribe(
+ { Log.d(TAG, "start offline recording completed") },
+ { throwable: Throwable -> Log.e(TAG, "" + throwable.toString()) }
+ )
+ }
+
+ stopRecordingButton.setOnClickListener {
+ //Example of stopping ACC offline recording
+ Log.d(TAG, "Stops ACC recording")
+ api.stopOfflineRecording(deviceId, PolarBleApi.PolarDeviceDataType.ACC)
+ .subscribe(
+ { Log.d(TAG, "stop offline recording completed") },
+ { throwable: Throwable -> Log.e(TAG, "" + throwable.toString()) }
+ )
+ }
+
+ downloadRecordingButton.setOnClickListener {
+ //Example of one offline recording download
+ //NOTE: For this example you need to click on listRecordingsButton to have files entry (entryCache) up to date
+ Log.d(TAG, "Searching to recording to download... ")
+ //Get first entry for testing download
+ val offlineRecEntry = entryCache[deviceId]?.firstOrNull()
+ offlineRecEntry?.let { offlineEntry ->
+ try {
+ //Using a secret key managed by your own.
+ // You can use a different key to each start recording calls.
+ // When using key at start recording, it is also needed for the recording download, otherwise could not be decrypted
+ val yourSecret = PolarRecordingSecret(
+ byteArrayOf(
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
+ )
+ )
+ api.getOfflineRecord(deviceId, offlineEntry, yourSecret)
+ //Not using a secret key
+ //api.getOfflineRecord(deviceId, offlineEntry)
+ .subscribe(
+ {
+ Log.d(TAG, "Recording ${offlineEntry.path} downloaded. Size: ${offlineEntry.size}")
+ when (it) {
+ is PolarOfflineRecordingData.AccOfflineRecording -> {
+ Log.d(TAG, "ACC Recording started at ${it.startTime}")
+ for (sample in it.data.samples) {
+ Log.d(TAG, "ACC data: time: ${sample.timeStamp} X: ${sample.x} Y: ${sample.y} Z: ${sample.z}")
+ }
+ }
+// is PolarOfflineRecordingData.GyroOfflineRecording -> { }
+// is PolarOfflineRecordingData.MagOfflineRecording -> { }
+// ...
+ else -> {
+ Log.d(TAG, "Recording type is not yet implemented")
+ }
+ }
+ },
+ { throwable: Throwable -> Log.e(TAG, "" + throwable.toString()) }
+ )
+ } catch (e: Exception) {
+ Log.e(TAG, "Get offline recording fetch failed on entry ...", e)
+ }
+ }
+ }
+
+ deleteRecordingButton.setOnClickListener {
+ //Example of one offline recording deletion
+ //NOTE: For this example you need to click on listRecordingsButton to have files entry (entryCache) up to date
+ Log.d(TAG, "Searching to recording to delete... ")
+ //Get first entry for testing deletion
+ val offlineRecEntry = entryCache[deviceId]?.firstOrNull()
+ offlineRecEntry?.let { offlineEntry ->
+ try {
+ api.removeOfflineRecord(deviceId, offlineEntry)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ {
+ Log.d(TAG, "Recording file deleted")
+ },
+ { error ->
+ val errorString = "Recording file deletion failed: $error"
+ showToast(errorString)
+ Log.e(TAG, errorString)
+ }
+ )
+
+ } catch (e: Exception) {
+ Log.e(TAG, "Delete offline recording failed on entry ...", e)
+ }
+ }
+ }
+
toggleSdkModeButton.setOnClickListener {
toggleSdkModeButton.isEnabled = false
if (!sdkModeEnabledStatus) {
@@ -736,7 +914,7 @@ class MainActivity : AppCompatActivity() {
button.background = buttonDrawable
}
- private fun requestStreamSettings(identifier: String, feature: PolarBleApi.DeviceStreamingFeature): Flowable {
+ private fun requestStreamSettings(identifier: String, feature: PolarBleApi.PolarDeviceDataType): Flowable {
val availableSettings = api.requestStreamSettings(identifier, feature)
val allSettings = api.requestFullStreamSettings(identifier, feature)
.onErrorReturn { error: Throwable ->
@@ -754,15 +932,13 @@ class MainActivity : AppCompatActivity() {
}
.observeOn(AndroidSchedulers.mainThread())
.toFlowable()
- .flatMap(
- Function { sensorSettings: android.util.Pair ->
- DialogUtility.showAllSettingsDialog(
- this@MainActivity,
- sensorSettings.first.settings,
- sensorSettings.second.settings
- ).toFlowable()
- } as Function, Flowable>
- )
+ .flatMap { sensorSettings: android.util.Pair ->
+ DialogUtility.showAllSettingsDialog(
+ this@MainActivity,
+ sensorSettings.first.settings,
+ sensorSettings.second.settings
+ ).toFlowable()
+ }
}
private fun showToast(message: String) {
@@ -806,6 +982,12 @@ class MainActivity : AppCompatActivity() {
setTimeButton.isEnabled = false
getTimeButton.isEnabled = false
toggleSdkModeButton.isEnabled = false
+ //Verity Sense recording buttons
+ listRecordingsButton.isEnabled = false
+ startRecordingButton.isEnabled = false
+ stopRecordingButton.isEnabled = false
+ downloadRecordingButton.isEnabled = false
+ deleteRecordingButton.isEnabled = false
}
private fun enableAllButtons() {
@@ -828,6 +1010,12 @@ class MainActivity : AppCompatActivity() {
setTimeButton.isEnabled = true
getTimeButton.isEnabled = true
toggleSdkModeButton.isEnabled = true
+ //Verity Sense recording buttons
+ listRecordingsButton.isEnabled = true
+ startRecordingButton.isEnabled = true
+ stopRecordingButton.isEnabled = true
+ downloadRecordingButton.isEnabled = true
+ deleteRecordingButton.isEnabled = true
}
private fun disposeAllStreams() {
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/examples/example-android/androidBleSdkTestApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index c7bd21db..00000000
--- a/examples/example-android/androidBleSdkTestApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/drawable/ic_launcher_background.xml b/examples/example-android/androidBleSdkTestApp/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index d5fccc53..00000000
--- a/examples/example-android/androidBleSdkTestApp/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/layout/activity_main.xml b/examples/example-android/androidBleSdkTestApp/app/src/main/res/layout/activity_main.xml
index f7dc07b9..fb0e58cd 100644
--- a/examples/example-android/androidBleSdkTestApp/app/src/main/res/layout/activity_main.xml
+++ b/examples/example-android/androidBleSdkTestApp/app/src/main/res/layout/activity_main.xml
@@ -53,6 +53,12 @@
android:layout_marginBottom="2dp"
android:background="@android:color/white" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index eca70cfe..4ae7d123 100644
--- a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index eca70cfe..4ae7d123 100644
--- a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index a2f59082..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
new file mode 100644
index 00000000..2f09c3b5
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_background.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..463f3f88
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 1b523998..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index ff10afd6..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
new file mode 100644
index 00000000..741a3d4d
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_background.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..3ae9d9c8
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 115a4c76..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index dcd3cd80..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
new file mode 100644
index 00000000..9228713f
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..8c2e6204
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 459ca609..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 8ca12fe0..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
new file mode 100644
index 00000000..fd8a963e
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..f4e3464f
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 8e19b410..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index b824ebdd..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
new file mode 100644
index 00000000..735c316c
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..c243b0ae
Binary files /dev/null and b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 4c19a13c..00000000
Binary files a/examples/example-android/androidBleSdkTestApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/examples/example-android/androidBleSdkTestApp/app/src/main/res/values/strings.xml b/examples/example-android/androidBleSdkTestApp/app/src/main/res/values/strings.xml
index 1f605b1f..6380950d 100644
--- a/examples/example-android/androidBleSdkTestApp/app/src/main/res/values/strings.xml
+++ b/examples/example-android/androidBleSdkTestApp/app/src/main/res/values/strings.xml
@@ -1,5 +1,7 @@
Polar BLE SDK Example
+ Start Hr Stream
+ Stop Hr Stream
Start ECG Stream
Stop ECG Stream
Start ACC Stream
@@ -35,4 +37,9 @@
Range
Channels
OK
+ list verity sense recordings
+ start verity sense recording
+ stop verity sense recording
+ download one verity sense recording
+ delete one verity sense recording
diff --git a/examples/example-android/androidBleSdkTestApp/build.gradle b/examples/example-android/androidBleSdkTestApp/build.gradle
index 2611937a..e2968845 100644
--- a/examples/example-android/androidBleSdkTestApp/build.gradle
+++ b/examples/example-android/androidBleSdkTestApp/build.gradle
@@ -1,6 +1,6 @@
plugins {
- id 'com.android.application' version '7.4.0' apply false
- id 'org.jetbrains.kotlin.android' version '1.7.21' apply false
+ id 'com.android.application' version '7.4.2' apply false
+ id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
}
task clean(type: Delete) {
diff --git a/examples/example-android/androidBleSdkTestApp/gradle.properties b/examples/example-android/androidBleSdkTestApp/gradle.properties
index 2d8d1e4d..5bac8ac5 100644
--- a/examples/example-android/androidBleSdkTestApp/gradle.properties
+++ b/examples/example-android/androidBleSdkTestApp/gradle.properties
@@ -1 +1 @@
-android.useAndroidX=true
\ No newline at end of file
+android.useAndroidX=true
diff --git a/examples/example-android/androidBleSdkTestApp/settings.gradle b/examples/example-android/androidBleSdkTestApp/settings.gradle
index dad15052..24ee95e3 100644
--- a/examples/example-android/androidBleSdkTestApp/settings.gradle
+++ b/examples/example-android/androidBleSdkTestApp/settings.gradle
@@ -14,4 +14,4 @@ dependencyResolutionManagement {
}
}
rootProject.name = "AndroidBleSdkTestApp"
-include ':app'
\ No newline at end of file
+include ':app'
diff --git a/examples/example-ios/iosBleSdkTestApp/Podfile b/examples/example-ios/iosBleSdkTestApp/Podfile
index df71efc1..9494c36d 100644
--- a/examples/example-ios/iosBleSdkTestApp/Podfile
+++ b/examples/example-ios/iosBleSdkTestApp/Podfile
@@ -1,8 +1,8 @@
source 'https://github.com/CocoaPods/Specs.git'
-platform :ios, '13.0'
+platform :ios, '15.0'
use_frameworks!
target 'iosBleSdkTestApp' do
- pod 'PolarBleSdk', '4.0.0'
+ pod 'PolarBleSdk', '5.0.0-beta4'
end
diff --git a/examples/example-ios/iosBleSdkTestApp/Podfile.lock b/examples/example-ios/iosBleSdkTestApp/Podfile.lock
index feaeb872..b71125da 100644
--- a/examples/example-ios/iosBleSdkTestApp/Podfile.lock
+++ b/examples/example-ios/iosBleSdkTestApp/Podfile.lock
@@ -1,12 +1,12 @@
PODS:
- - PolarBleSdk (4.0.0):
+ - PolarBleSdk (5.0.0-beta4):
- RxSwift (~> 6.5.0)
- SwiftProtobuf (~> 1.0)
- RxSwift (6.5.0)
- - SwiftProtobuf (1.20.3)
+ - SwiftProtobuf (1.21.0)
DEPENDENCIES:
- - PolarBleSdk (= 4.0.0)
+ - PolarBleSdk (= 5.0.0-beta4)
SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
@@ -15,10 +15,10 @@ SPEC REPOS:
- SwiftProtobuf
SPEC CHECKSUMS:
- PolarBleSdk: 0611235ce501ae3a51dc0088453850e78b66c92c
+ PolarBleSdk: 8fd348f4d70a8a9d162a3e39dce866c29b8b3444
RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8
- SwiftProtobuf: b02b5075dcf60c9f5f403000b3b0c202a11b6ae1
+ SwiftProtobuf: afced68785854575756db965e9da52bbf3dc45e7
-PODFILE CHECKSUM: 90b4ff8ca36e8e7f0c8a449cf5cbd4fdba89b2bd
+PODFILE CHECKSUM: f4fc318e1fe3081230adf4b78258968041a93209
COCOAPODS: 1.11.3
diff --git a/examples/example-ios/iosBleSdkTestApp/Pods/Manifest.lock b/examples/example-ios/iosBleSdkTestApp/Pods/Manifest.lock
index feaeb872..b71125da 100644
--- a/examples/example-ios/iosBleSdkTestApp/Pods/Manifest.lock
+++ b/examples/example-ios/iosBleSdkTestApp/Pods/Manifest.lock
@@ -1,12 +1,12 @@
PODS:
- - PolarBleSdk (4.0.0):
+ - PolarBleSdk (5.0.0-beta4):
- RxSwift (~> 6.5.0)
- SwiftProtobuf (~> 1.0)
- RxSwift (6.5.0)
- - SwiftProtobuf (1.20.3)
+ - SwiftProtobuf (1.21.0)
DEPENDENCIES:
- - PolarBleSdk (= 4.0.0)
+ - PolarBleSdk (= 5.0.0-beta4)
SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
@@ -15,10 +15,10 @@ SPEC REPOS:
- SwiftProtobuf
SPEC CHECKSUMS:
- PolarBleSdk: 0611235ce501ae3a51dc0088453850e78b66c92c
+ PolarBleSdk: 8fd348f4d70a8a9d162a3e39dce866c29b8b3444
RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8
- SwiftProtobuf: b02b5075dcf60c9f5f403000b3b0c202a11b6ae1
+ SwiftProtobuf: afced68785854575756db965e9da52bbf3dc45e7
-PODFILE CHECKSUM: 90b4ff8ca36e8e7f0c8a449cf5cbd4fdba89b2bd
+PODFILE CHECKSUM: f4fc318e1fe3081230adf4b78258968041a93209
COCOAPODS: 1.11.3
diff --git a/examples/example-ios/iosBleSdkTestApp/Pods/Pods.xcodeproj/project.pbxproj b/examples/example-ios/iosBleSdkTestApp/Pods/Pods.xcodeproj/project.pbxproj
index 53949bbd..73acb64d 100644
--- a/examples/example-ios/iosBleSdkTestApp/Pods/Pods.xcodeproj/project.pbxproj
+++ b/examples/example-ios/iosBleSdkTestApp/Pods/Pods.xcodeproj/project.pbxproj
@@ -7,715 +7,753 @@
objects = {
/* Begin PBXBuildFile section */
- 008C774980611FBB4AE34EE48E5D3D53 /* StringUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C2D63AD17934C4D15F57BD4E3D153A /* StringUtils.swift */; };
- 0143F9DC6D999CAA66D9CA5781BB326B /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B0E0B209E14443062A6629E244AB8F3 /* Disposables.swift */; };
- 015388A1297D4B7788AE45BB4DF8A0DA /* PolarBleApiDefaultImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD1A4BF8EB8C322BB03A2D3BC876DFF /* PolarBleApiDefaultImpl.swift */; };
- 026DBA88E2C19C58DBDEC2448E1AF0E4 /* CBDeviceListenerImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650A7559858967FAD90E63B324EF83A7 /* CBDeviceListenerImpl.swift */; };
- 02DA5D251E48CB5357ADE6E2E9EADF43 /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5372C4BC0C51DAF90F2B4AFB8DE40C /* Switch.swift */; };
- 075AF616B7E207E1A788908C5721F2E3 /* BleAttributeTransportProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC9EBAF93F83195E8E03A2DF02D64E2 /* BleAttributeTransportProtocol.swift */; };
- 07B8BD38C6D49561D3D649F76A24F1EA /* source_context.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE1852FC171A1C1DEBAC0E58CA5A8F80 /* source_context.pb.swift */; };
- 0986AAC12AE87667B08B3D59D8429ABC /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6E028EFA9BD2E9A07CD3CFCEC33AB0 /* ConcurrentMainScheduler.swift */; };
- 0A32463F30CFE9DB41B9FD02D0C453CE /* BlePsFtpUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBFA6609B5F7CF147CB93F9EBE81C0E /* BlePsFtpUtility.swift */; };
- 0A9F800BBDF7BEA7E176818D1AC7DC5C /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E293DB1A40C5F133F275637CFAF55075 /* ReplaySubject.swift */; };
- 0B68B1EE44E9FFB27BCAF1FA8812F8E4 /* api.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62EDAA82BF460615F86EBE1FF0A571BB /* api.pb.swift */; };
- 0C185804E065929BF7F06EA6927B1D7A /* FieldTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C0AF9BBFFE1D81E2765D39023D10A7 /* FieldTag.swift */; };
- 0F3513ACC5F31BC17C3CA91746E5E5D6 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E7CA51BD09B9285D0A17D9DD3342027 /* InvocableScheduledItem.swift */; };
- 0F56329BFCDA6CA3BFC2DAEFBC238948 /* duration.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5584D6A4F824CC6AA864EA7CD1794C7E /* duration.pb.swift */; };
- 0FFC1DF59AD746F99759A16A09E986DF /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74438E10CA675939BFABE8357189C22F /* AsyncSubject.swift */; };
- 1007606FCEBFD900CEBA8DB9551101D0 /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E221D49125AB2CC959F8C7FBB16771C1 /* Zip+Collection.swift */; };
- 1157FD0FAB8BA2EF6C579BAC65AE1BB0 /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31CAA6585B2CEF360D895B4D9CC3A310 /* SkipWhile.swift */; };
- 125028EECB27A363053366E7D00EB3CE /* TextFormatEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0C0DB0E5F3A69F6103025C46E51F72 /* TextFormatEncoder.swift */; };
- 12EB5F2E16FA3C8A070F932AB649025C /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = C22FE81F2974F31A18CB8EAEA32A346F /* Platform.Linux.swift */; };
- 135DB8410915EC98762283AFF04EEB79 /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F9065494FEF8134DA31E985F439602C /* CombineLatest.swift */; };
- 166ED23F25CE1EFFC36E9093A677ED52 /* AtomicList.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD1F27A191B2888C5DAF9EB4283BA83 /* AtomicList.swift */; };
- 16E13B186B60CC29897DF0A4377F59FF /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = D645C69D75D39400AD20440850AC4C5A /* Lock.swift */; };
- 174E79F6F4F258BFD96FCF98C6E17E22 /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71994DA2BBD9C304D819C7047EE05E30 /* Repeat.swift */; };
- 17F457793BBF80D7CEA139CB0AEA72BF /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C0E0B1C146DCC25FC4334EC6B740C7 /* CombineLatest+arity.swift */; };
- 17F6AC139F6D799F70ABA7941CA680CB /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = E311625865D0D05A02582E96997D2A52 /* Sample.swift */; };
- 17FDA418B9429F709D054E222913044C /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C928DEB54F5D685004A8F28D7AFD00 /* Delay.swift */; };
- 18D01FE858F724C447E638ACD871F99A /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79786DC0EAF52654C0ABE21C9A712CD6 /* SwiftSupport.swift */; };
- 1AEBDD41A9A057789C4C3433F46E62FA /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2BDA6F1109DFCB01A555374DBCC4C29 /* Map.swift */; };
- 1B2326CD053A2CFF609EFCE1813D697F /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55652D0E74B5767E41EAFA907FD4CD11 /* RxMutableBox.swift */; };
- 1BC829B8C0095260CC7DAB55528C404B /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 784975362005DBF40455DEE86BFA042D /* InfiniteSequence.swift */; };
- 1C79EDA2A40F399528804A965D46F6AE /* empty.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8271ED43075A7FDB893085AFC4E1237 /* empty.pb.swift */; };
- 1C8CF08E024EAE839C548C4073243CCC /* SelectiveVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E83C43698120F4EA863456782AA8A8 /* SelectiveVisitor.swift */; };
- 1D96D645912F932962BF70C24C9BD969 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013D4C11C4053542550BC7CB0688D011 /* Version.swift */; };
- 1DC279A7A4378239CE0F275F8B670894 /* TextFormatDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DECDE83346114A0693FD68B1D9558641 /* TextFormatDecoder.swift */; };
- 1E16873D03061A3CFD1EF755292533B0 /* Infallible+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B48931C9603729AA9D07616794C7E /* Infallible+Operators.swift */; };
- 1E3813333AAC0751994BD82795AE2DA1 /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20ED293D45E9F38E7DBA3F47CA76DADD /* Multicast.swift */; };
- 1EDBE5E446A16363E5A201C1AA4B0199 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E72C3825CB6DB02DB743DEB7F04C65A /* Amb.swift */; };
- 1F44BD0B655E2AF2E87CD11B05451DBF /* PolarSensorSetting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56DD720FA1EB2CD24745FA4E4A2D8A97 /* PolarSensorSetting.swift */; };
- 1F65D3A83FFC6271378E693A609E56E6 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D806E0C33496195E763282D6E21A870C /* ObservableType.swift */; };
- 1F6BDE451F7C8F728C49B46B177D2E06 /* Google_Protobuf_Timestamp+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 127BAA1120C5A20081D456830C794743 /* Google_Protobuf_Timestamp+Extensions.swift */; };
- 207A9931D012A95E25CEC4FC693398F8 /* BinaryEncodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8020053FF74D95DC5F6D84588AB7E669 /* BinaryEncodingError.swift */; };
- 2182B36B621B7DAD02D77AB293A6AFD6 /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C58402E461B3F8F4326BF8E2227D5E1 /* AsSingle.swift */; };
- 221EB6F8D46542CAF4FAD1AA79C36315 /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CB8241675D34228A067068A9D03B97A /* StartWith.swift */; };
- 221F75FB472C5620C720DCEFA94157A8 /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D8972AB1CDE45DFD241182587AFC42B /* CurrentThreadScheduler.swift */; };
- 23CEE5F8D11E07387D1199D760D65530 /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279EEEA0B5DDB0B33ED305D2CB46BAAB /* TakeLast.swift */; };
- 24877985081AD2A8E93A80B431AD9218 /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A6000F6344CCEC30F8513487BECC76D /* Bag+Rx.swift */; };
- 27270D2BB246A9DE10B0106A78B6BF4B /* Message+AnyAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3656CC96BC0F5389D682BFCA09C75375 /* Message+AnyAdditions.swift */; };
- 2861F87654F4D909A39CF1F7FA4B62F1 /* PolarBleSdk-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9370A417F6DCAD2D68CE77A3724FB159 /* PolarBleSdk-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 287732217FAA45A48B109D805C21494F /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A875BE552D8F1F96ADBE735541AB6903 /* ScheduledItem.swift */; };
- 296FE4832D312FC4DB3D71FAC599ECC7 /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777C5A78AA8DD39AE17677773D81D83C /* ObservableType+Extensions.swift */; };
- 299BB669678BAF14E2364A0DF9BE4ACC /* BleGattException.swift in Sources */ = {isa = PBXBuildFile; fileRef = F163F7DE1406ECDCF6634D950EBA92E0 /* BleGattException.swift */; };
- 29B3DF2745C7C1096205B6F2019C7F44 /* Visitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56B175C47458873EFA23E1CCEA7B882B /* Visitor.swift */; };
- 2AA7522E36D812CBE08A3ABA746B1486 /* BinaryDelimited.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA34DC0706EFD4F7CC9EADE042B35A60 /* BinaryDelimited.swift */; };
- 2BD8DE05F43CF1D94FE51407EC5A126F /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C3330D1A5538DCFEE5A321678AE18B /* Platform.Darwin.swift */; };
- 2CCA434735EDE1FDB768611127FC0935 /* PolarTimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A786E2D1ECF2AC2507056579C8E962 /* PolarTimeUtils.swift */; };
- 2E26836BFF53F3E4704672844675EE74 /* wrappers.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05F0C6C83BD7CAFEAE8328A1B71B6274 /* wrappers.pb.swift */; };
- 2ED0B7E5FD6471C2E85299A857143AF5 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E11B5B2A85775812B947A876CED020 /* Debug.swift */; };
- 2F2169946358B494D5648A231D587010 /* TypeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC08C2DF522E689A14004C29124C7CB /* TypeUtils.swift */; };
- 3096BB753ADD7E8DE1407A13E7E65B9F /* types.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = F509F50A0B0A111639DCC84385CA8848 /* types.pb.swift */; };
- 32B951162C2E2EE087B0432E80FB6EA8 /* BlePsdClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34110778827601017836166A6AD5C8B8 /* BlePsdClient.swift */; };
- 32C314BC62D12DC608A7B7D030C4946D /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDBFB37DA665949568E802848C8BEF20 /* CompactMap.swift */; };
- 345BFA5F79F02BE9B2C94A1A0F96D89A /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFB578F6B8FF6EC89AD6E5D75B540CB0 /* AnyObserver.swift */; };
- 3462329C6FA7B2980B86CF9610DFB599 /* UnsafeRawPointer+Shims.swift in Sources */ = {isa = PBXBuildFile; fileRef = 911EE52EC8DC57264FB35CA8E800264E /* UnsafeRawPointer+Shims.swift */; };
- 34E5AEC04856AC54C3365543000EB833 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01EA22C7FB7EAA8C6D86DA01EFDC6F54 /* Message.swift */; };
- 351A6CB17B9B6C82E276969E1E37FA67 /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE34289C576E8D7D0041F9F90FBE725 /* WithLatestFrom.swift */; };
- 351EFA50683CD02D3CA68D21125CAF9C /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660C3A22A0172E5F0CE697692F0B00FF /* Empty.swift */; };
- 37140DED8966225438C97DEC5597B025 /* type.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F87418EBDC4C5924BC3887F86F193E3 /* type.pb.swift */; };
- 3748F192F38B8D13AA65097FDF0D30F7 /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27F4D742BBD2164A0F255FF5C89C3024 /* Single.swift */; };
- 37E4DFB780F1CB093F167D2E4812B1F4 /* PolarBleApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0D6F8F3ED3BDE6B9C65DEC7C21A9D38 /* PolarBleApi.swift */; };
- 38394D34821A263317E6E6AEABD4AE0E /* PolarBleApiImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B048E6988BDC4FEFEB9302FFCD60F9 /* PolarBleApiImpl.swift */; };
- 38ED5C26CFE11C3F0DAC0EF8E8AA7860 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C3891E43AB477B083F6275F77AC5F5F /* Errors.swift */; };
- 390D357300B3609809B79D9EF452215B /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91207BA375194007A15B94DE56324162 /* HistoricalScheduler.swift */; };
- 3A783AF6D8FC58A9682DCF3E3044EBA3 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD1F77CC8EB226699C14C67BC3BB33F9 /* Range.swift */; };
- 3DE69AC05F322448D05B3FC20B4D43D1 /* FieldTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CE8CB4CA6AF831C369D8C3B086DEED1 /* FieldTypes.swift */; };
- 3E959858B255C2B8C544C4E3327CA8FE /* ObservableConvertibleType+Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 308238E1F525725E48D4DADB316F75FE /* ObservableConvertibleType+Infallible.swift */; };
- 3E9ABB37AA4232C049958B8CD326A139 /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB591A0106ED478706F6B91E5632F5A1 /* Dematerialize.swift */; };
- 3F79D3ABE157AF044795BAF37A658373 /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C35CE4B97A3B27A960933DFA95659A6 /* ToArray.swift */; };
- 40A350D9C50BB3F7EE578C3CC85BE5D2 /* ZigZag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8365C4170313771E8AFAF93082C9469F /* ZigZag.swift */; };
- 411E9B91D83164EB93FAC6F13189C293 /* Google_Protobuf_Any+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C64D31E442A90B4A06FA8B04EFF8161 /* Google_Protobuf_Any+Extensions.swift */; };
- 4237CB5E3F05EAAD624042B52DA7F337 /* Observable+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = A08A9709A56F183AACCCC3D317283B58 /* Observable+Concurrency.swift */; };
- 438D3CD2785D6DC02D8F264030B1CF1C /* JSONEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492EE6372FF7B5522ACBEB8C5A845344 /* JSONEncodingVisitor.swift */; };
- 43C026D12ED48AF95692798EEF1A6D4A /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0829F1BD399A08F0FB48989E66D9132 /* SynchronizedUnsubscribeType.swift */; };
- 446645DEBB1AB25837E0965497F46BB8 /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C91F7AD9A9B0292C882B5E30E9D1BBE /* InvocableType.swift */; };
- 44926125E57087C9287D22031613CE97 /* Infallible+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 691BB3705C654AC22E56DCA9914C3B4A /* Infallible+Create.swift */; };
- 4514D2F9FABD47511D99C183FD772965 /* Google_Protobuf_Struct+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B6FD89E03FE0EB43FF346A2BB0B5731 /* Google_Protobuf_Struct+Extensions.swift */; };
- 4560219C938B3186424B5CBF5AC619D0 /* BleBasClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850C826B87C064525DDD60CBF9AAFB30 /* BleBasClient.swift */; };
- 45BD8B1989EC8C757C4A749A34CEFBA4 /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AC1C553FC66B31C5D7FD6F5647EDE8 /* Maybe.swift */; };
- 45D91C4992292532D01FB89DEE481E13 /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7D0CFF97842605EB9707B4B2FA293C6 /* VirtualTimeScheduler.swift */; };
- 4683658A13DEE75CB6871C433F32540C /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78BF7E063F2A639B3E4441B7F97D5946 /* Bag.swift */; };
- 47CA94FA8859482BB41C8EFABB454E82 /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8999D540996AB45554D372E4B5D78ACE /* AddRef.swift */; };
- 47D04120CE1D47B9D1B8723526064F10 /* Google_Protobuf_Value+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39F8E05578F7BA96876FD1621C74F9F5 /* Google_Protobuf_Value+Extensions.swift */; };
- 47FC0069B266190D9DD08286A430C848 /* BinaryEncodingSizeVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC60D97B01FED4E756D5830A21AFBFEC /* BinaryEncodingSizeVisitor.swift */; };
- 484600B8C197E9A62D975EA3F1DB60B6 /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C9D656B5289CBEA6DFAC595EC5C1960 /* SingleAsync.swift */; };
- 4862FC30FDB2EF5DC52B15FBCEB2059B /* BleDeviceSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1544877AA3B3304E23C2DE7532A9F75F /* BleDeviceSession.swift */; };
- 49FE7A93E456531CA00C08695065BB8E /* JSONEncodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6BB4FBF2E8E73D4B7E4B09FA6E96DC2 /* JSONEncodingError.swift */; };
- 4A691BB24356782E7FAF49FA5DE02DDA /* SimpleExtensionMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A61E7FA84F1161232636D7A3B96731 /* SimpleExtensionMap.swift */; };
- 4A913DE4DEEA7241C248D0BC80A20A70 /* Message+JSONAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B14EDABDD3867383C3B4313439E98963 /* Message+JSONAdditions.swift */; };
- 4B6ADF01814A2A00B5293610AD464394 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
+ 019D51A9E180D381A7146E9FD25EF56F /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4E524020C64D4412CC1BD0B184888D /* Materialize.swift */; };
+ 0235E801A36FFE1406BB965DE2707C51 /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA6BC48C23E1A05F698A703C12E1A84 /* SynchronizedDisposeType.swift */; };
+ 027D2FAE09264CD29DDEF926C068B6A3 /* TimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 518E1F2EF762E9E755B2FEED58E44C78 /* TimeUtils.swift */; };
+ 0372B80013898F66955EDB3A41A65C0D /* OfflineHrData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D569F43A3FA06C0357FDEDB1180C2B30 /* OfflineHrData.swift */; };
+ 03A4E0050C06F9ACAE558EF99AC29E1C /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = B432D0E80BFA676EA6BA120F0FC112C5 /* Never.swift */; };
+ 04CC0BFBBE9AB324655285B021951757 /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = DACB6CAD64F19EAF2860AB8EC77F0470 /* First.swift */; };
+ 04F8B20F752655242D1E11E4B3DE66B2 /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D074E7011D4AB8A3B71DF5354DF993 /* Empty.swift */; };
+ 06FACAFED9E7120C34308DD30B14BFF2 /* PmdMeasurementType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CFABEDD1730C29DC8F40ECDF1BE2CEE /* PmdMeasurementType.swift */; };
+ 07A176C8B1D997D47873A5EB5E6D0E64 /* PmdSetting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB2438653F53A0E9079BC859C4375CF /* PmdSetting.swift */; };
+ 07AF36DFABFEB99B5E9300FD0BE68E96 /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130674DBC6A310F6C8BBBED33780B837 /* ShareReplayScope.swift */; };
+ 08E2A21732730F61FB775621E3FA5187 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 175686E73964E408CBE67B5632546BA6 /* ObservableConvertibleType.swift */; };
+ 08FC42D0C017FC9C36C37C7B99D52C40 /* Google_Protobuf_FieldMask+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DF0C0A9ACF074A5C9067DDE0771D85 /* Google_Protobuf_FieldMask+Extensions.swift */; };
+ 09A84FB711842E81391B82971653F1DD /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0CB5E5D259972457E9D3901CDA4BA91 /* SingleAssignmentDisposable.swift */; };
+ 0B01D167CD0E8E91E44B3814AD603C1F /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = 922086CBF483F6F64652B8D2B01E4E1A /* Take.swift */; };
+ 0D2B7636E656D5BB68497F0DA0FC4348 /* Google_Protobuf_NullValue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6F58A9A54CE568970CB36E123668169 /* Google_Protobuf_NullValue+Extensions.swift */; };
+ 0E2C32094F147379494A40E0A9B3AABC /* TimeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFC540793A1D75418CB358293F2C371 /* TimeUtility.swift */; };
+ 0EB012C481804B790AA8D451DD508AFF /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 541D9682D9BEA8CF5F3EB446D77882E7 /* Optional.swift */; };
+ 0ED91ED092BB18EE3EECE2FF29BF7789 /* MessageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8E7AD34E8FA7732EDDCD8B1A171A69 /* MessageExtension.swift */; };
+ 105223A8CF94613E3E721A79865DF23E /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74265CF5E26B6AF4DFBC2D661EE97A63 /* InfiniteSequence.swift */; };
+ 10651660E88BE04A8BD976C9964644EE /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAEA74AF15592D9F9A2F50E03A774B4A /* Date+Dispatch.swift */; };
+ 1094971D3AE8DF1466FF544D8DB9D09E /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D87F0DC804B5A80F6FE9A9625826DF5 /* ObservableType+PrimitiveSequence.swift */; };
+ 1233FAB6C775A692932D046282396497 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA25B5823D8487BE969B69B8FA86DDAB /* RecursiveLock.swift */; };
+ 128EFA892A733D7A9CEBD54583D5C94C /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82A3CC2000B5316EE5A97F7659EA20CE /* ObserveOn.swift */; };
+ 14C10D5C7022F0CE7E0D5F9F24CEC8B1 /* CustomJSONCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7542FAD0D4BA309F5BBFA984F3CFEE43 /* CustomJSONCodable.swift */; };
+ 14C33F64302837D52B082F9DCEAF7076 /* BleHrClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89C05BF9EBD724DF8BE22CF77777CD09 /* BleHrClient.swift */; };
+ 15104657A1413C3FA0C3210FBC6B66B2 /* BinaryDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C910EA689D9DD8C825DE74AC77767F5 /* BinaryDecodingError.swift */; };
+ 183D0ABBCA8E5B0FB812D73F6290E5F0 /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C36E346B83AF0AEDF1600F03FB6FB0 /* Switch.swift */; };
+ 190E2127C3D090AB6FFFF00AFE3B5FEA /* SelectiveVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C83646F767642341E4A6B35F90D98349 /* SelectiveVisitor.swift */; };
+ 1A5229E5259CFCC3DF7FC51FAD79750C /* structures.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B88D79F287587D3F77FCB39043E3077 /* structures.pb.swift */; };
+ 1A6E3F81162E9BB6E1C1BA3C8FCC29DF /* BinaryEncodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6C9164A375159A619BC79834A629E2 /* BinaryEncodingError.swift */; };
+ 1A951C40066FD64B04A1C25F8B531CBA /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1689B13E9CD55BFB116E769E57ED2F22 /* AnyObserver.swift */; };
+ 1AC6A0093F7747B108BFD7966050B573 /* PolarBleApiObservers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6766EF6C07934496DA214BFBD2B3DCEE /* PolarBleApiObservers.swift */; };
+ 1C385198EEC8C4AC684DDA93B5ACCB53 /* SwiftProtobuf-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 84A4F35C09EABF07BE4D9E1B8458AD56 /* SwiftProtobuf-dummy.m */; };
+ 1C4740225B54A599F752813BD715A631 /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 101081793EDBE6121B8A144B3237231C /* AtomicInt.swift */; };
+ 1C976601F3AB6C959ECCB7A67AF0EDED /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8848F04AF39F50FF36A0D9F97C84CB18 /* Range.swift */; };
+ 1D1192524CB5B3090B72D47F41A3D6B1 /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06E2F260A7E7416C99AD4535CCCD1F42 /* CompactMap.swift */; };
+ 1DBF4826F115998436EED4243CB6777B /* PolarBleSdk-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C2BE755921E901312DEF581BD6680182 /* PolarBleSdk-dummy.m */; };
+ 1E5825DEC495629091ABF9A496AD8ECD /* AtomicInteger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F95FFEECD448318B3253F510786D21E /* AtomicInteger.swift */; };
+ 2014BC03D276649C1C5B090C02A2A2EF /* PolarErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F5B1DED14C2F17DF4084E9912820D3 /* PolarErrors.swift */; };
+ 20D2ECDBBEED4D19D006C8027F2CC648 /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FA7EE4C9CAD2F700584258AB04FF80E /* CombineLatest+arity.swift */; };
+ 21594981D5B14C5AA8E27869F5FC425E /* RxUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3694DFC8FB3BDF1105296CAE7824E0A /* RxUtils.swift */; };
+ 21C1E553B62EEA657D3F868ED1088AF5 /* UnsafeBufferPointer+Shims.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51CEB634E465F3297C516AA869EAA295 /* UnsafeBufferPointer+Shims.swift */; };
+ 2294491DEAA287756931ADAB00983427 /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C962BA423F79865BF3E2726E83EC7 /* SubscriptionDisposable.swift */; };
+ 2390D813F6830BB1391CBE7EF028E3C5 /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3D4E791D396E34E29C29691A1651A2 /* BinaryDisposable.swift */; };
+ 2409278B8EAC720B0F8461A568BAB1A2 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 836A6D741FEC582FFAD59FF1EF338975 /* AsMaybe.swift */; };
+ 24A36D91BF4857672AA7D02B27BA9788 /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF4779583DD3EC71F2CC462A383F006B /* Cancelable.swift */; };
+ 24D1C5BDA9CFDC28074AE20E34E582BE /* AtomicBoolean.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C8320B772AD96A44043695F2C852C7 /* AtomicBoolean.swift */; };
+ 256E36FC006B0EA45A004431D294C121 /* JSONScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF43D7501B46169594284424D72FAB5B /* JSONScanner.swift */; };
+ 2711B8AF669B1ACB9DCE663D9C0D3B82 /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = A41CA19D62BAC87B528E0C430C74EC8A /* SingleAsync.swift */; };
+ 299F3459A16E5007376AD5ECF09F5E1A /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E84F54462CE99FDFF37864AB140946 /* Scan.swift */; };
+ 2B7D10485496A367EB0DD59F21B965BA /* Binder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6084591974A3C5F7EA6F1B802572023 /* Binder.swift */; };
+ 2DD9E14F32B37DDCB55E08F24D78D0FF /* ZigZag.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB69B658CD046500B491CC56041536EC /* ZigZag.swift */; };
+ 2F4B6E9E271BB9AEB4BAFA082066F96C /* ExtensionFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = 614FCABD76C7317A083B02EF4FB96CD5 /* ExtensionFields.swift */; };
+ 310F571E6C89DB36CB9F62D4D2C3883F /* PmdOfflineTrigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98055E2E9CA4B51EFAB650D49C397A1B /* PmdOfflineTrigger.swift */; };
+ 31717DD57F04EEF165F94BE9C9F15C9C /* descriptor.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED5803ABFDB915B5A2B048CDD3A66749 /* descriptor.pb.swift */; };
+ 3171A4DD31B169467EFAFE0F8900521C /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40EBD1338BBD248CB9A524F7D09E7CAC /* MainScheduler.swift */; };
+ 31F8EA8CD0BE844B9A7360EC7EF2D836 /* BleRssiFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A4FB43A2D413C1D899C44367DE7C82B /* BleRssiFilter.swift */; };
+ 32219A918315500D5D0D1282383A510F /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B959AF256300A592713850B3800FF7 /* Skip.swift */; };
+ 323554C3E8C19326BD573D6BA67F691F /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5AA07EFD46B751E465BB270B421762F /* WithLatestFrom.swift */; };
+ 32B52E20458A6B3734730003DD5CA040 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
+ 32CE235C243F8ADAAB58174B01501708 /* HashVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12CBF043210FF21E25ED3D64DAB1152F /* HashVisitor.swift */; };
+ 32ED5040AEE0F9FF7CA0A3356CAA64C3 /* Data+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6ACF07E2806D390B9F196F01359C6A9 /* Data+Extensions.swift */; };
+ 3321B1EA11D4892623E8683C522BE0B2 /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42045BCD57C217FBFFD7FFF680699513 /* VirtualTimeScheduler.swift */; };
+ 33B3BCF62159B145FAAFCA23E5E459B2 /* ProtoNameProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B874DC94A70E0D515852025CBAB83B1B /* ProtoNameProviding.swift */; };
+ 33E09F779137E9ABB79E330C3303099A /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC76A4508B0963E514A5B8901A0A8BC1 /* HistoricalScheduler.swift */; };
+ 3407CFDB56DA4ECFE862E9E7D93CD1CA /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2A49EECD06105512F844A8D32AE29F /* CurrentThreadScheduler.swift */; };
+ 34E1E5866526AC21217E4C510227673F /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 776F1001E8094DF8369881015D417097 /* ObserverType.swift */; };
+ 3546F6E38F4982B9B35009FAD0E3AD2F /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B9802FA9B0CFDE8E7CC2385FD8799A /* Repeat.swift */; };
+ 379780525905DA74C902D1FF3CC2CDED /* Google_Protobuf_Any+Registry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317E06E2FA578E7995A3D26974BA4A49 /* Google_Protobuf_Any+Registry.swift */; };
+ 37C65B898506207D18E27C63CED6BDC7 /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B4FE4D28ACA7D333A2AF194DEC203BF /* CompositeDisposable.swift */; };
+ 393EB67C135FEE40D1935F85437B1934 /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 338A46A30A7867194F0AFDEA2DCE3C43 /* AsyncSubject.swift */; };
+ 3C16AFE874B1367473C1AECE002DB57D /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5933735384086414265BF76A5621F721 /* Reactive.swift */; };
+ 3C220BFF8D4DE835C5246CAD37B7B4DC /* Infallible+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088BB34BAD71A306B509355459A8A8DD /* Infallible+Zip+arity.swift */; };
+ 3D149532E1D5DDAE4F8A79286EF776ED /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F3B37EF52514BEB97DCFE6B789CB840 /* ElementAt.swift */; };
+ 3D326B16CBFFDE18D4E0F7E0A45AA5D9 /* TextFormatScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85453D459AB208B9E772CCABF38D2D7 /* TextFormatScanner.swift */; };
+ 3D7D445E8B0C83FD5DC5A9F1B8190731 /* ProtobufMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F45C0CC8F82D4653E1BB1B09DA06249F /* ProtobufMap.swift */; };
+ 3E2F5CADC872F50991FF8A6AB9DF67FF /* struct.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D7AD2A7E2112895D8E4B1E640FB3C61 /* struct.pb.swift */; };
+ 3F1C52BC22ABEB9904DAF2FECE9F1C9C /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BAD89344638793202424C9FDBF0659 /* ConnectableObservableType.swift */; };
+ 41A6B74A3B0E62072B0E2BC4DFFA00B2 /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E4B27FB7D063D0B3CB3C877E34639C8 /* Completable.swift */; };
+ 41B867816E64289E353A106E7FA51AE3 /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5988EBCA1BC50D92EF4CE891409E2AF3 /* BooleanDisposable.swift */; };
+ 41D140CCAC3D86085E54A08921EB9D03 /* PmdRecordingType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78D31EC66567B7D8D55674E252681F5A /* PmdRecordingType.swift */; };
+ 435472CE4B82963F1BBA62040E243CB7 /* BleH7SettingsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A20F3B1408D46A1DDD23477383CF301 /* BleH7SettingsClient.swift */; };
+ 438617437872E434B0EB522E0875EFD4 /* Observable+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA7B23448819793B8A0FA344FFFD225 /* Observable+Concurrency.swift */; };
+ 43E8F73E4EDAC098956B0733185ED500 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = E20D90CD22F1268655F20B69E4D8E496 /* Errors.swift */; };
+ 43EC8D8C534D4CB3CB78E3E7E72FBDA6 /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = D078F15CAC007FD9F88BFAFDBB9C1960 /* Sample.swift */; };
+ 453A213613627351945DB07FB1FBB028 /* BinaryDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB63A7A61DBCD32824577C6DF1D50A44 /* BinaryDecoder.swift */; };
+ 46CF19ACDF296038FDB48FF8C610FD29 /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = A413F1E11975D36A795468662D7C55A9 /* Concat.swift */; };
+ 4827B2E24356F8FC3240A1DBF159EBE2 /* PolarSensorSetting.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C675B2F994CBA3C084E87EF620A8A7 /* PolarSensorSetting.swift */; };
+ 489A16450AAE8EE337E72C5CF39A3D75 /* ExtensionFieldValueSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FB553355D14D551607874DDC7BFBFA8 /* ExtensionFieldValueSet.swift */; };
+ 49165947EB41561FD258CE797A5EE8EF /* Infallible+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = A08BD0F1723385580A5F78F157778DBF /* Infallible+Operators.swift */; };
+ 4ABA98977C983B28075D624B72C24492 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B293F16F9E37A9AB2802847A4FFC8813 /* Observable.swift */; };
+ 4BB70AC8218F52E51BD86A9B92303D73 /* PolarOfflineRecordingData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A308CD80B48C2A28172337B3E96053 /* PolarOfflineRecordingData.swift */; };
4C8C4C02B12BEA712F421F0882E9DF70 /* Pods-iosBleSdkTestApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B78FCA1AC7EAEA6B96F0EAA42A55179 /* Pods-iosBleSdkTestApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 4CFF3E8F3A5E19ED326163DD250B45F1 /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38CF150D0A46AEBF5CAF429ABE9A7D92 /* SynchronizedOnType.swift */; };
- 4D70D40695ED3F5B57139F2C58CD0EBF /* JSONEncodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F687F2065698267493726E0648489384 /* JSONEncodingOptions.swift */; };
- 4DAFB87395298E38C0F1ADF2BA7E37DB /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D0C85D4855F98566C0B1439A15EE38F /* SubscribeOn.swift */; };
- 4DB7B227AA3AA0718844586E0A06A855 /* BinaryEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267535E668EBDB57F586BD15204A2529 /* BinaryEncoder.swift */; };
- 4F4D9483725B3B20FE07004E8B88B948 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF97444383460714770615B069082C3B /* Internal.swift */; };
- 5029070194FC9359E1BF51EF2B902E94 /* TimeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77E37288A451F9FDE9E3363507B4207C /* TimeUtility.swift */; };
- 509D7AA53016AC93C4F4A52F4338E827 /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F5FA13DCD47ED0F9B7BF4EC42A7ED80 /* SkipUntil.swift */; };
- 51543DF8AA30E48F04A4F1EE92716E80 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08C2820C320183348852E445CF522EB0 /* Zip.swift */; };
- 5335AE2CCEA57A447BAB713EF3D712CA /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5948C561FA6D3C11E9505B290881B9B /* Debounce.swift */; };
- 53884079E20D5C149E66ECDC395C948F /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E80D68527051B9FF1B945CFB925F163 /* TailRecursiveSink.swift */; };
- 566AE41A16EEC35CE79A8ABE39A5C90F /* WithUnretained.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD9657D9BEC5CE0975DEFFF1C9AFD8C /* WithUnretained.swift */; };
- 56C018FAD702AEC3CE4ECCCE3147557E /* Google_Protobuf_Wrappers+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C0786E6E1B51A7A4AC33DB146EB268 /* Google_Protobuf_Wrappers+Extensions.swift */; };
- 5721C8DE23F9547C7C8CBD834814C2CC /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC728CAF09F632747DE215B16E1D360B /* DefaultIfEmpty.swift */; };
- 587D263D3D7F9BFA6B235EE400047540 /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC57B2D8C210B7A8C4D31211EC6EC88D /* ObserverType.swift */; };
- 58E866B5195C350C36AE894649EFCFD2 /* RecursiveCondition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9769DE2CEE17F8437E333DAA06A41218 /* RecursiveCondition.swift */; };
- 599500BA2C847D4328DE671D922C6D08 /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85CF1127B770F5758F5D2684BFE3D9B3 /* MainScheduler.swift */; };
- 59F891A6C53D3E9A18AC24397DDA3D4B /* Google_Protobuf_NullValue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF92CC242E480FB19469B54F4BE8C074 /* Google_Protobuf_NullValue+Extensions.swift */; };
- 5B268FCE8ECE96697E4149D4FE1E71C0 /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA146CA24F9DB8CD9B2722B92379821E /* RxSwift-dummy.m */; };
- 5C737BF7C8FF5E0C8A0ABCFEC6FEC802 /* SwiftProtobuf-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7615C0B13D4677362BF7BC2D92BA1505 /* SwiftProtobuf-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 5CF4B26CA74A921E1BC3A1AB7BA28EC9 /* PpiData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B9E51F5017B973F800D7A35C613DDF /* PpiData.swift */; };
- 5D3714115531D876DE0410D14D3D8C92 /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFD6BBB933FA44CEE302321C4E369E2 /* Do.swift */; };
- 5E1CDA8909338D14EFA6CC1386DF6094 /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 427483D3CA07E49479CB33006A57CD3C /* CombineLatest+Collection.swift */; };
- 5E4B03DA56FDCF1A52B9600DAED9D12B /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E88589E9C78E4BDBB6D50AB692C8F1 /* Enum.swift */; };
- 5E8172E80395AF0797235C17F93463C1 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 158CF9DCA6AC3655DFA9110E14150528 /* Window.swift */; };
- 5FF598108739BD35621D01A25884528D /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C755A65FBD94FCC287C7D1CF343B47B /* SwitchIfEmpty.swift */; };
- 61AE47B1BA8B495F7E0F5CBF6321A2BA /* BleAdvertisementContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF4C2C1B54D7F5F21590FA2B444C130A /* BleAdvertisementContent.swift */; };
- 628FFAE2E7AC375156094144EE2EF811 /* descriptor.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94A137D3427303AD8112C1129B58EEF1 /* descriptor.pb.swift */; };
- 6353A748664DB45EA09ECFBE19D5DE57 /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68559DC7CAB41E8D8EC46689DB431C08 /* PrimitiveSequence+Zip+arity.swift */; };
- 647C52CBA0D78CB6FF2D3FDC61B6CE78 /* exercise_samples.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42555751F4B24F022F99A6C47B0AFFF6 /* exercise_samples.pb.swift */; };
- 65638195FCE36BA11FA3F41C564A7487 /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850970BEDF41381FDF4A45C9E26428AD /* SchedulerServices+Emulation.swift */; };
- 65C02A406E2684C5C2FD474A2F6FADB5 /* PolarAdvDataUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A266B2C01F7E2950E157D4D12353CA9 /* PolarAdvDataUtility.swift */; };
- 660CB2AF2A3092561F38C86AC0416953 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A231D39ECB7D7D0CA2E9A02245EEA84 /* SchedulerType.swift */; };
- 677E023C7B02DA921E4D17AF10A295F8 /* TextFormatDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00272332B35ED4CDE993C648498AFAC6 /* TextFormatDecodingOptions.swift */; };
- 6861960D034FAE79F1CFE28BD8FD7A1F /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A7863675275C7E09D15F5C6D304E5DC /* Materialize.swift */; };
- 69F7D17AB2FC57D876AA04DB1B542B0E /* Message+BinaryAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78FD6353BCC45D4A546B2CF95B46414E /* Message+BinaryAdditions.swift */; };
- 6A67B75D512BC8A331037EB8791195E7 /* AnyUnpackError.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD605BA290DCD939B680E5C12E63CE36 /* AnyUnpackError.swift */; };
- 6C218B4BD8A32A238F8AA5B3841B973C /* AtomicType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3589E522B114673DD6CA1DD44221DA3 /* AtomicType.swift */; };
- 6C485A76D60B537AD0AA3F5C0C30FB25 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90F1865C2A422C4E6DE270BA12083001 /* Timeout.swift */; };
- 6DBEDAFE3DCD5D4838F462C179BF2554 /* BlePmdClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA890CC1D3378BC72011089ED31E15F /* BlePmdClient.swift */; };
- 6EF725A392884E32430C37CEDBAB0D83 /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3482470DF60545F23C63750E4811EBEB /* ElementAt.swift */; };
- 705891E9D96615376A1A9BF3DF46300E /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C66B61C66781B8E0C0B8FCDFC67274 /* Deferred.swift */; };
- 70A8F5D586BB38830EE151E699CF5FBC /* JSONDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D582EAC6962D8DF33B0901755188AF2 /* JSONDecodingOptions.swift */; };
- 72D6174F74FC9C28BAE30837717A01E2 /* BinaryDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78975B5F08DBD3C982A2FB87C1B8F0A2 /* BinaryDecodingOptions.swift */; };
- 738B064C4D9239493161797A9B6E23A3 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CC15C65AE65DE27678DBCBEC14C325C /* Create.swift */; };
- 73E92C549BBFA966F1E5BD3DEA116C36 /* ExtensibleMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24E13E40428B03D5E60F08BB0BA00169 /* ExtensibleMessage.swift */; };
- 74BA756E7D40D12B90351AE5AA9DB797 /* PmdMeasurementType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9FA9CEDB466CE81FDE4BB769655D975 /* PmdMeasurementType.swift */; };
- 759DFC85E3D71A5E5617B50FCE5F5D81 /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F5514CB8E88EEBF422DA8DD14067D1F /* Concat.swift */; };
- 75F1A17FDBF12F9CD305EA7212BBCE73 /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E02C62645B5ED0C49F2F386BD861330 /* First.swift */; };
- 7759A3316C34B3CA5B0877344A47391D /* MagData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30806C7CD0BAEFDD0D02D3DACAD8C823 /* MagData.swift */; };
- 78EFC897F65A77319AC9811811D4B7DD /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06214D8A3B99721F69922503324694CE /* Decode.swift */; };
- 7965F1875768F9FB11233F334404A358 /* Varint.swift in Sources */ = {isa = PBXBuildFile; fileRef = D99DDB39613E126B3DEB144745D4B1AE /* Varint.swift */; };
- 7A0959B122EC3D5941FDC0F669380BAB /* Infallible+CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8C9AC7B7D5F0F986F1A10DE7C9CD2E6 /* Infallible+CombineLatest+arity.swift */; };
- 7CFEA67F0D3BA34B93F686E927A6F362 /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0ECD4161A02019A6D38AD7A12861E93 /* SynchronizedDisposeType.swift */; };
- 7D9FD55E0165BEAA2F4A2B6E2102D700 /* TakeWithPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BACDDF50692D1E4A054A7DB6DDA492 /* TakeWithPredicate.swift */; };
- 7E816AB0D8A35404A3D8E68A29288081 /* Message+TextFormatAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC96DD19B683BF0657303A1809FE928D /* Message+TextFormatAdditions.swift */; };
- 7E921299CCA9B91F25F09F97EE0C00C4 /* TimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E11C3589185BB8549FC41641BC79C6 /* TimeUtils.swift */; };
- 7F86208E62A68404556E3BA5CFD99270 /* BleDeviceListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEABFDA13281F498D4DA25DB78751AD9 /* BleDeviceListener.swift */; };
- 8160CBC639821CE32A4CDF2341068473 /* JSONScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B88BE3878F3955C605D9EB43221F3B2 /* JSONScanner.swift */; };
- 817587847AF29E51A5FA619AB8F7CEC7 /* AtomicBoolean.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081936D2B937BDFE2444974C171B6606 /* AtomicBoolean.swift */; };
- 8178A822E01CC9388CECE0DEE9CF6642 /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9539702A34165CB6E4E17B9C4D6E861B /* Producer.swift */; };
- 81CBA0DAEC591800734FCF7AA5B2AA77 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC4802BFD5EA4BC13A10E3E6F59920 /* Optional.swift */; };
- 839F39A19F22FCC4D742D5BCBA61F57D /* MessageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA40BE4A49DD6DB80CD51EBD02B6F95E /* MessageExtension.swift */; };
- 8412560787532EA3D524ACA62DC075F2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
- 864C309DB0EA6C8FF4EB0627C02E7D7B /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FC7C3595EF680F6B2C06FAD1248B4A2 /* DelaySubscription.swift */; };
- 867C6C115396AC025727020918ECECF5 /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A5A80F08579DBEADE80046345566A0 /* Buffer.swift */; };
- 86BF52F73D4CAC95E1E5F544C251940F /* BinaryDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72B2CA5423C3526BB0AE8EDC145A500 /* BinaryDecodingError.swift */; };
- 874BD9332FDF5A906C6CFB99927B99A0 /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79DF9B4124F3CE202349A377A9A75792 /* Reactive.swift */; };
- 87CAFF22C1E1270D9CFD22296D2238DF /* TextFormatScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = A48E1F57BBC89DB94EC88A1F1177B5BD /* TextFormatScanner.swift */; };
- 889E9779BC5C7A4E31C82E81DFB541B2 /* field_mask.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D31CB137632F039EB70C9FA2BBB29B /* field_mask.pb.swift */; };
- 8946A639DD25A752382AE6641F060E37 /* PmdDataFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7B11CFB96D15A159F838FFF1F3622E /* PmdDataFrame.swift */; };
- 8A422046477596CBCA5E50D208F03DFE /* DoubleParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF9586E5297F4DB07FC123DF4CE43A1 /* DoubleParser.swift */; };
- 8AE05DCDAA30F47038927EF1465EEC06 /* BleGattClientBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99716A99C95D4F81BFDBBDFE4B528746 /* BleGattClientBase.swift */; };
- 8AF0E64589356181BAA5901CD5C6310C /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AB459518AA1D0E6A7A546AC5E13F30F /* Error.swift */; };
- 8BEA73F7085FE3B143F97C59A342AA57 /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E92ACF062006E92A8599C4F81F694CEC /* ImmediateSchedulerType.swift */; };
- 8D4E846BE6FD762B32F3DD78D981281E /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9272FF2CB7E45285AB3B275B02B89D71 /* Event.swift */; };
- 8E3DB4815E31298DE6B32C65ADE6941A /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4DA5EE90F662C899FE678C017CDEE6 /* Skip.swift */; };
- 8E4BA9E4889749ACAAF0CF9BA98E507C /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EE4B68316779E70CA4AFAB781FC189 /* Rx.swift */; };
- 8EBB897CDDC4D1C37654877A8DB68E3C /* EcgData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDA2D5FB2CF7CA42F31D64301087B94 /* EcgData.swift */; };
- 8EED5064F324932D0F21449E3E9D0C79 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFC9B5B95172130F9F9FAC88414E1467 /* ObservableConvertibleType.swift */; };
- 901BDCEE55871D7364D83070487B2803 /* TextFormatDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9485B6510F9994A1F26B38777D665E /* TextFormatDecodingError.swift */; };
- 904F2ABD9A79A216B0202E18D9005B12 /* PrimitiveSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59ADBD29011E08A796188A20B17FD97 /* PrimitiveSequence+Concurrency.swift */; };
- 93E60146F824101A037D7E3AE796AAEA /* Google_Protobuf_Duration+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FBD1C8E5E1C6AF60A8BB0E5C1C03E34 /* Google_Protobuf_Duration+Extensions.swift */; };
- 94092BF6E1FACC38707A5C7AE8983A85 /* RxObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFE17F0722ECE8A528F34E3F9550A92E /* RxObserver.swift */; };
- 96E8FD8ECD8765E9E84275EEDA9DF3EB /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39C342EB200517654BD38B2A0BF2491C /* Completable+AndThen.swift */; };
- 97548FA395C2BAD19912A761101C5347 /* pftp_request.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C940A5F0142D809607792D25C29E14 /* pftp_request.pb.swift */; };
- 97639265222DB515A940883ADBD68123 /* JSONDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC85D1FF387B31F57A06EAF931F45280 /* JSONDecodingError.swift */; };
- 978C101868733A1ABA33B896C075BE35 /* TextFormatEncodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CAF08C3F5C0E69929D0D14B6B30D2D1 /* TextFormatEncodingOptions.swift */; };
- 98024B61F2F3CE9F0F896410DF75D00F /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D21E7E6C263EB6F0C38A39AECA30C3 /* DispatchQueueConfiguration.swift */; };
- 98088AB8C40EF92980FCBA9E8C6DC4B3 /* BinaryEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3602A783BA9219D738AF573B26AA9D87 /* BinaryEncodingVisitor.swift */; };
- 992637782DD028BEB6B884104FA61780 /* JSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C7C2259758FE92427ECD4BA3E88B21 /* JSONDecoder.swift */; };
- 9959B0ED412560C6CE2B0C6024437CE1 /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A53B72709CCBB02F0C3B566750DCF8 /* Cancelable.swift */; };
- 99AB1E8D5ED654D79E594F89D4840DA2 /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45904D4625EDA41B3A75940888D7D9F7 /* RetryWhen.swift */; };
- 9AA5833CD774F10512A579D190FA5082 /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = A20E406EF4EABAB41689B544368B4408 /* PriorityQueue.swift */; };
- 9C80B7038499EF4A91A107FB2A216507 /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5ED6D44DD078ABDD8B6A3C80F743E2D /* ScheduledDisposable.swift */; };
- 9D3EF8E2ECEF02C841C285AF435B1EF3 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7C155674EE46DBBB26F95F217BDB478 /* Throttle.swift */; };
- 9DD30CFFF55A9485CC0F6F8ABD62FFB0 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD0B82388B68AB9DC6E9F8CAA29F74D3 /* AsMaybe.swift */; };
- 9F840CD83A62B46FB726E67A8985985C /* MathUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A05783E7CA66FD1EE88366CA792AE856 /* MathUtils.swift */; };
- A0DC062729DE643AF8BF5F728B82E9DB /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162D88707D8EAD937F7BB16A081CC0C1 /* DistinctUntilChanged.swift */; };
- A1F636FA0DEEB573FFA5D2DD8E962EC6 /* NameMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32068A9C83307D0E4C5EF48F319C07D0 /* NameMap.swift */; };
- A2067DB2C7C491AFD31F8BC5A50499A4 /* BleH7SettingsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78D4C5F21E2394A57096533F26124933 /* BleH7SettingsClient.swift */; };
- A2E33F8D2AEEE8D3254BDEBE64B899F2 /* Google_Protobuf_Any+Registry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C2DFD0FDD304DE1A8AFA3BF0A8B172 /* Google_Protobuf_Any+Registry.swift */; };
- A306114B24E407F0A897A09EFFF912CB /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A909DD9D9BFA4098138C49B3406F3A /* SerialDispatchQueueScheduler.swift */; };
- A51DF006E1149F33349110961159E23E /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0897DCA7CE715E662F450E343C131AA5 /* SerialDisposable.swift */; };
- A892FAF961448C82DD62CF5406ADC62D /* BinaryDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E75E3D2E7B4D3912A4850E34ACCD8DC /* BinaryDecoder.swift */; };
- A8D56F9FE2C0B8A1177873944635F5DB /* BleGattClientFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C58E93A5776C758E1E29FA7ECB2ED7 /* BleGattClientFactory.swift */; };
- A97EAA6350D18AE7A3359BB346C97E62 /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C295667717C310E3FD9B32474A7CC91 /* Catch.swift */; };
- AA37453ABCA41F7FB4B10E6926D08308 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1500A4342DBE47010CB550E22E322749 /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- AA65F2D793DE0A002DAE0E2632CA49CA /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE3A243FE99818F833808A7C3EBEC17 /* SubscriptionDisposable.swift */; };
- ABF2EF0329056D264866FEF4F4D71F40 /* GyrData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E882CA4F1046F185884EE8ABD280ACF /* GyrData.swift */; };
- AC0100F7C8DA75522154E29C05E9957F /* CBDeviceSessionImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DC8E8A9629A0289006FF11C57C491CF /* CBDeviceSessionImpl.swift */; };
- ACDD6E0041D86DFEDA07FB42D478EA8B /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45360363C37C8375AE6090B575F411C /* Date+Dispatch.swift */; };
- AD7EEFCAF336647F4B9BF598B58F6872 /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8688C83F59D183A029EFA076FF4336D0 /* ScheduledItemType.swift */; };
- AD9330818DF094165D8D4F5ABC7B80F5 /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2D737684EC43A72D667F07F97E09F0 /* RefCountDisposable.swift */; };
- AE40F8E291B8CB18FC096DA91AEB7EDC /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8EF47258C72F1B3EF1554339602461 /* Scan.swift */; };
- AF5749E93AED43AE7B449D5CCC20C4B5 /* PpgData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD620CA45A6BDAFD055748E37CD8C34 /* PpgData.swift */; };
- AF5A3ACA0DD60F74141946F01C8F5F5F /* RxUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9343004F35C54C3E3349773EE792DCB2 /* RxUtils.swift */; };
- B0B70F97A8B668EA9C12CF209628FBF4 /* BleLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = A618F3F3A4FF2C151DC97E54DD7D8B0F /* BleLogger.swift */; };
- B1287C7C2DEB15CC8A3AB076945E19D8 /* Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC14B91D3144EF570EF694163BC047A4 /* Infallible.swift */; };
- B12B92187BAF486D49EC62971538BFDC /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49725B78A46D132BCB2BB7F0C41495DA /* Never.swift */; };
- B29E821BAD101E983B8FC05259AC75A9 /* pftp_notification.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 688E9EB3A683772817B9649251E2999D /* pftp_notification.pb.swift */; };
- B32E8076727607434CB0A26501558E11 /* BleHrClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD37EE18A9B42FEFCA24C5890A0AEFEB /* BleHrClient.swift */; };
- B3D77B54E29596F758EC76AB620A0F58 /* CustomJSONCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB8D6D443DDEA41CE7F35BA2C4F36C9 /* CustomJSONCodable.swift */; };
- B406FBA2E4825DD946BC7F526586F42E /* UnknownStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECA20C51CCA5C1F201B65DCE6E3F98BB /* UnknownStorage.swift */; };
- B4D65FA018EBFBF90E90928F02CDACA8 /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6001D8F81684C08BAC819E8BD551377 /* Merge.swift */; };
- B52CB688FEF62EE6D1397008620E1391 /* structures.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAFF9B52825927D688B2D0FEBCDB6D70 /* structures.pb.swift */; };
- B53114022BE46C356FCD7B4ACF39C304 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 252F061DBE82800BB7D3D16DB3248E79 /* Observable.swift */; };
- B55CA71E476FE701C9A756182082C420 /* TextFormatEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB131C6143838024A2DBF2FCB0B71CD /* TextFormatEncodingVisitor.swift */; };
- B633690FAEA0D21207F6825F757129B7 /* timestamp.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40274E111C2F27A32591A65CB08B9325 /* timestamp.pb.swift */; };
- B641F8038336C3FF7EB08A1F7CA28F50 /* Google_Protobuf_FieldMask+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA48203FA75D05A1E3F1C5195D49598 /* Google_Protobuf_FieldMask+Extensions.swift */; };
- B83EB58EC15F5F7EA9AAB9D6FEDE753C /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 718BBFDCDC5254956E6B565D9E909DEB /* AtomicInt.swift */; };
- B880129BD2AB8F310A6F8A87BCADC15C /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E31EDDB89023495408DC24E826C99441 /* SubjectType.swift */; };
- B9040CA46492C5E56D2F2D3CEC19E46F /* CBScanningProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC1CB8274075FAB90A3D432D723A8D73 /* CBScanningProtocol.swift */; };
- BA02D0B0ADB0F6040618D6F6D67E4A5B /* Infallible+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC14A66698C11A707FF80B1BC4FE58F /* Infallible+Concurrency.swift */; };
- BB840B70DE11C650307FAD75457F2FD5 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FA75260443DDAA7EC9B90941A6A341 /* Queue.swift */; };
- BC0CF1F9F46C89E7224873BB0041E464 /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E3968907D5B825B316E4551F254975 /* Sequence.swift */; };
- BC3B1FA53553180AEF9A3CE513A00FDB /* Binder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CE22AEF26C88AC26C048307F3B50494 /* Binder.swift */; };
- BCBE453A5BE2A55AC29C093347D77580 /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8C5A96598D1C72F8B3D1FD0267DD081 /* GroupedObservable.swift */; };
- BD00D025856057732B1E48EB9DDA9C1B /* Data+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE5100B33CDEE7649E63D7AC01CA615 /* Data+Extensions.swift */; };
- BE2FA4439AF4DAF8BB7B07D2D5725524 /* BlePsFtpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8196E1363E106B794A77612E30609671 /* BlePsFtpClient.swift */; };
- BE7F4DBD06FE776D38196A15A13006ED /* AccData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5014204371A29786BB8E1CC12F0C6C53 /* AccData.swift */; };
- BF954AA7DB437810F416A76DCF2EA53B /* ExtensionMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 760A2FFD051FA5830B59781D22153A80 /* ExtensionMap.swift */; };
- BFB5BF9498C5CA5DC11530F2671E57C4 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDAE858A582E6F0F88A217748373294A /* Disposable.swift */; };
- C083EA32F736E1BDCBC370E15958EF8F /* BleDisClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD250FFA833C955E4E75FDE20348E946 /* BleDisClient.swift */; };
- C085FDE7A7B8813B156339C776EE10A6 /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4CC1AC8AAA5269EF4D662CDD09DAD15 /* DisposeBag.swift */; };
- C5FFA178B4DC1C67685F21F1DDA4717D /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FE94E317E422845C3A263D233EAA507 /* RecursiveLock.swift */; };
- C65762CB15F4700B4B848D782D318CC7 /* PmdTimeStampUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E338B52071A1BF9A3825D794C646990F /* PmdTimeStampUtils.swift */; };
- C66194E1F9D2872C6B61076AA7679B1E /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D650DC7778F1C726A37225F31A5EF96 /* Filter.swift */; };
- C673CAD5DD57D150C5E2576BF5EC4C48 /* JSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672CC009B2D3609137CBA753E7534EF4 /* JSONEncoder.swift */; };
- C6F7A44C3CD5329C2C1AD20A41AFC65B /* ExtensionFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7145FE8A7BDFB5DFED8ABE65D1F67102 /* ExtensionFields.swift */; };
- C74C6ADA2366A55B8E15D05490624DA0 /* Message+JSONArrayAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A952CFB54DDFDB35AE14B456EBA8637 /* Message+JSONArrayAdditions.swift */; };
- C80B61C196C3EF47E08875FDBB7E5760 /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2073FE4CFF73F6F98CFE2077080D4C5F /* NopDisposable.swift */; };
+ 4C94DFD78A14F02DCAA77E168A82CFCD /* BleAdvertisementContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF520DF58BC4509D28C7CDD751BA4E6 /* BleAdvertisementContent.swift */; };
+ 4CA88AD223CCF971821582F89F2F7AA6 /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE804DA9F6DDCE149EDAF2339FBF635F /* DelaySubscription.swift */; };
+ 4CF142D803105A96325F4AB1A5D468BE /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7579B2475BEC3D08E0CF730DF8F478D0 /* Sink.swift */; };
+ 4DB1D46D50A5CB6235E839268122FB63 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 796B679FDA3C18812632680FD7B891B4 /* SchedulerType.swift */; };
+ 4EBEB1A8467A701C31AC7EC3A7A99DD1 /* BinaryDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F3D928AA12648D7153767435E9A24F /* BinaryDecodingOptions.swift */; };
+ 4F1ABA699E479E54E164FFBE1ADD4921 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
+ 4FB14FB6F9841AF3EA0DEB51EFCFA9F2 /* BinaryEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA81B65F67F5CB1AFDEB25D80380C89 /* BinaryEncodingVisitor.swift */; };
+ 4FD0D0BD74C9C2444673CEEA6ADABF9B /* JSONEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84D225172B435AEDBA6E264D6F04AFD /* JSONEncodingVisitor.swift */; };
+ 507C75253E5BB447607C89BC275918EE /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 395AF1A91E3328B200E4A010BFE00FAA /* Rx.swift */; };
+ 51932190B5D5D2A360F8B4B2ABF176E2 /* BlePsdClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB9432E5B528111DE6D82E34F481840D /* BlePsdClient.swift */; };
+ 519AAFA04F436CF85875381B0330127A /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8358EAD559A11D674615D75A17ACAE4 /* ScheduledItem.swift */; };
+ 5203F233B9C73B9EFBF21E7F75A10679 /* Google_Protobuf_Struct+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73E39CB32D3BCDE2478DE9ADE9C1890 /* Google_Protobuf_Struct+Extensions.swift */; };
+ 53A37285F44FFE6B1C71B1ED42508DD1 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAE6FE2FF6F3EF95D3E980A2A0DB684 /* Lock.swift */; };
+ 5505B72B06D1AB39E0BD4A265159B6C2 /* BleDeviceListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D61A2E8F44B76EDDE858DEDC5430EAE /* BleDeviceListener.swift */; };
+ 553C18768F6D186BC7820B4BB2319847 /* FieldTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 284787AA56191E083941D5FE9190C953 /* FieldTypes.swift */; };
+ 56880E58B5C55C41AD42323701308916 /* PolarAdvDataUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795DF667FB22E01834A3533D4503C56D /* PolarAdvDataUtility.swift */; };
+ 5696852746F1312D537E022B6035A677 /* OfflineRecordingData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D1856448110BA07CB30B0A087F45520 /* OfflineRecordingData.swift */; };
+ 570224779E1CBB93D1EA2E995F9E837F /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59F31C4DA2ABC350129BB2C524F7EEBC /* RxMutableBox.swift */; };
+ 5704D86EB22EE193320F0FDB8FE77CE9 /* JSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5B48F3A447026A1E798F637CD960B5 /* JSONDecoder.swift */; };
+ 571531179C97A1165163C76DFD717482 /* PolarOfflineRecordingEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 189CB4C626154717364C7A99E9E31AB7 /* PolarOfflineRecordingEntry.swift */; };
+ 574545500D1B985BEB741A364EC8C3D3 /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 199C61D7F343B348BB76C0F63DF97071 /* NopDisposable.swift */; };
+ 57C6E0F63F6278DADECA264BF14D6681 /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC9B819978383549E643BC1741C6EB51 /* AsSingle.swift */; };
+ 58005872F232ACAF6B229AE6CC921528 /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ABAD49A33B68163AAAF2455599032F3 /* Completable+AndThen.swift */; };
+ 58327D6D8E0C76251F05799495DF4F5E /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DA3674F7DC6F6815047EE82C6B9B81C /* SchedulerServices+Emulation.swift */; };
+ 5922215D4576AFD6D1FEE16A58D447A1 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12B47200FD5ADA2F74C5B4E0C919F328 /* Create.swift */; };
+ 59D78D7B62AC64F5D38B5B6976528528 /* AtomicType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0973A7C004B0E16C90257729901CEE99 /* AtomicType.swift */; };
+ 5AC45FBB338899767F148087768414AF /* type.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C766985B0D07006B2100A7CA7A6B8341 /* type.pb.swift */; };
+ 5BB6CDB625AF6E235139C749A5A0EA98 /* api.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29A4919364CFE2101B7A52DC6A5318B /* api.pb.swift */; };
+ 5C495392A50F4289044A638793192422 /* ProtobufAPIVersionCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB0778BB4D3401574232E9833ACFF13E /* ProtobufAPIVersionCheck.swift */; };
+ 5C60842C33EBE2C4B3E1910CFDC440E0 /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBD79BC8A5FD524DCDB56D8F95FD1A7 /* Deferred.swift */; };
+ 5CDFDD0E334AFA1DA453D00C39F2469B /* TextFormatEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D83489AEDC49EE98F4AB28963FF3C4 /* TextFormatEncodingVisitor.swift */; };
+ 5D9B7DF3113BE4196EAABE6875ADD6B2 /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1FBEE47D6DF6F1373F153DDB4BBE653 /* Using.swift */; };
+ 5DE49A17A61626795FDBD65AA8AC18FC /* PrimitiveSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C045CF619C4086A2CB57107B5C7D49 /* PrimitiveSequence+Concurrency.swift */; };
+ 5F5DC6334DBBE57EE27DEF7B468034EF /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3FA56E5C0FAF7CBBD5F2BE28754ED7 /* SerialDisposable.swift */; };
+ 601D7155EA3C9E1A7543D969EF443A5C /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FDAC9D0066FB3F1524EF3FED439417 /* AnonymousObserver.swift */; };
+ 602BA065105C089F224B63122BBE264E /* BleLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C58535F232AB43B09F4B32B2FFAD05D1 /* BleLogger.swift */; };
+ 60A35EA6B229A086D5BDF25D437C85EE /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 344C696710F3074C70FA03F238A1F111 /* Delay.swift */; };
+ 60E8A47A5A2B838082819FB075BBA0A9 /* JSONDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A728B59D5F34D304CAAE94D5800489 /* JSONDecodingOptions.swift */; };
+ 624651303197897A698A2C08E7203DBC /* exercise_samples.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320711E7D7541179A16C1319C7A3A8E1 /* exercise_samples.pb.swift */; };
+ 62CF8B410ADBEA34F4EFBE8BFF933F16 /* CBDeviceSessionImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E63B2991A234C7FA07C4F2066D464FD /* CBDeviceSessionImpl.swift */; };
+ 638B15E187E05C79142322D5ECBBC9B9 /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A26E400A3E4E21E2BF204EB1DE98F8E /* Debounce.swift */; };
+ 6409C6B55203C3D642D36ECC36C3A777 /* AnyMessageStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C0D699BA7A172573091B009CC24C3A8 /* AnyMessageStorage.swift */; };
+ 660837F50963F58B83A1CE1C8E372156 /* empty.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1D8AED1F34F1A3800B58C06F3C95718 /* empty.pb.swift */; };
+ 66D6287C36071901824C5B833543348E /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435CE08E97FCC834E3D4EF4615F25DEF /* SerialDispatchQueueScheduler.swift */; };
+ 67F4671CA40B457508C2DAD48E8F200B /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B6127E64B2EEF0AD838DC4482197B26 /* Event.swift */; };
+ 69A46DA6F93E7CFB5758614FAC71E4C3 /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 928EB8713CBABAD03673FE3BAF1A423D /* Sequence.swift */; };
+ 69FD93D4B79A3CBC2819638F15F2FABE /* TypeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE0118862BBFA383EECB3F9CAD6DABBB /* TypeUtils.swift */; };
+ 6AE407129C4CAA34320A69756A6A747B /* PmdControlPointCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B978770BD85DD311C334D8732E1025 /* PmdControlPointCommand.swift */; };
+ 6AF93A685E573724F225EFF5E5DB4A05 /* CBDeviceListenerImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99BE141779D3BC24624BD52EF74FA238 /* CBDeviceListenerImpl.swift */; };
+ 6C6F17D01438BDE6B7E957892B5C2AC2 /* BleBasClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78CE08707147D006E8E12268B58A9434 /* BleBasClient.swift */; };
+ 6DD7EC9013CD32A8EA275903228D1038 /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E615F24CD4FF49E26D5B1BE19700AF /* RefCountDisposable.swift */; };
+ 6E1377DB03662DAE0028F0D7486A8754 /* Message+AnyAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86E48E06CC228218340D3EE3226412A /* Message+AnyAdditions.swift */; };
+ 6F22308742821527136BF33E814E6B5E /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = E157901D7D13AF2525FD4498E7D1C2EF /* SubscribeOn.swift */; };
+ 6FBF1864367F864095D501D4E65FE974 /* WireFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FDCE4FADDBE38CBF2625E13677C4C49 /* WireFormat.swift */; };
+ 6FE1D6E7F6F0FD0418A721382F506C8C /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B99238505A9FD4A947A8909F17DC78 /* ReplaySubject.swift */; };
+ 7035B7ECAAD1A3E8349CD62B724851BD /* Message+JSONArrayAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A14603EA371CA7D56B17358D39D9BE8 /* Message+JSONArrayAdditions.swift */; };
+ 714DE5E46A7F2FDECD1E7A32A7C1D9B4 /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30171D283DB6514B72328D2F21E411B7 /* SkipWhile.swift */; };
+ 71C0311EED2F53ADC2B7A7708A44715F /* Decoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 663D78E860646E2C959304CF81025433 /* Decoder.swift */; };
+ 71DC31D0414425EBA71FBDF31AD46214 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85064016C5F76E5CF749ACA84C3CE393 /* Message.swift */; };
+ 720CD80412443E17C7655E005130F8EA /* PmdSdkMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B07BA5BE74DEE0289CFDBED60405D74A /* PmdSdkMode.swift */; };
+ 723DE439C2EE34A7CF7BDDF3282CD4DD /* Infallible+CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE231C7F80AA405A5E0F0E8933A2BA5B /* Infallible+CombineLatest+arity.swift */; };
+ 73FA88A7C1EFFEE5A166034E1C3BDF10 /* PolarBleApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FC808B572FD36628C766E468744B8AE /* PolarBleApi.swift */; };
+ 746831A54971B621DE185247936579F2 /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = E970D906F845DD212C35DE19BCCF61D7 /* Enum.swift */; };
+ 7486B22EA9C5956AF30FAA87767268DE /* BleRscClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3780E56E2137ABAB68C984EBBE82E29 /* BleRscClient.swift */; };
+ 74BD06A722B475FFE3A81B3AFD0AA29D /* BleDeviceSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAD34A9EC039E6C7A9DBEC25F6A332E /* BleDeviceSession.swift */; };
+ 74C485EC0D4420574E33159DC0AA02B9 /* any.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52D505772967D0AA8722B9AC50F20B8 /* any.pb.swift */; };
+ 759F1AC4C02C6F6F7D62958BE0571FD7 /* JSONEncodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A42FB45A180AD01F9EF229A219CD569E /* JSONEncodingOptions.swift */; };
+ 76114E9052AD32976FC534ECE74DF178 /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD277C9ED82F5A54344D74960CFA5B3 /* SynchronizedUnsubscribeType.swift */; };
+ 77F24E9AF80518BACF2F5613F4F15023 /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B5225BD24B46740E1049264EF88681 /* StartWith.swift */; };
+ 79F5FA45AE7B530DF3B627D555C920D1 /* ExtensibleMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD809DE16F687EF9861B81AA35E3C7E /* ExtensibleMessage.swift */; };
+ 7BB7A0F38F9EEB4ACDC7E6B28AEB9A81 /* ExtensionMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA197E505D0505A95CB3DC07C30B70ED /* ExtensionMap.swift */; };
+ 7D6F7DD7B6AC5DE98B2FF65D7A686E62 /* FieldTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17627E11EE6D16A5DE9B7B0AF690C5DE /* FieldTag.swift */; };
+ 7DEDC4ED6C2B325FEABFD289BE5280E3 /* BlePsFtpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 623D5A3668663D0EBC24197412E5FFA7 /* BlePsFtpClient.swift */; };
+ 7E592534D97AC2757930064B625EAD8F /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B8177ED3048E83E442FB87F1DF182B /* Disposables.swift */; };
+ 7FC59824B2FD01812D76C198A29E15BD /* OfflineRecordingUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5A4BF84AB8340EB25FAE98782F9FC3 /* OfflineRecordingUtils.swift */; };
+ 808021198A63EE5DBF71726A64A5CB58 /* BleGattClientFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA066DE812AE7A68594B52187C7E7E8B /* BleGattClientFactory.swift */; };
+ 81E53351F1F4152B767CBE8333A48F21 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5269F2E2B4AD3F74DB5CCCBC8B0440A3 /* Window.swift */; };
+ 81F33F001DB275983D15892FA8F779A3 /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2ABF574926EA1D39FCEF44BA77F6CD1 /* DisposeBag.swift */; };
+ 81FBADEB05698A4D68C1A8B04FD3B67A /* BlePolarHrAdvertisement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D93CF4E1DC4CF2F6837E0C013C21C5 /* BlePolarHrAdvertisement.swift */; };
+ 825CC4C58B24688ACD3CD96EDE5FDD0B /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C56B5799321B18FE9B67E9EE3B870BA /* LockOwnerType.swift */; };
+ 830933D5B3ABAA900932E0B8F44458A0 /* RecursiveCondition.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7D0FB67775710212488BEA1DF78A061 /* RecursiveCondition.swift */; };
+ 846F9DC16AB3B3A16D06CB5DA33713A2 /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1979A3975CB738AC299A2589E26C7A43 /* DispatchQueueConfiguration.swift */; };
+ 85B00E49D80080621BA82990CADC386F /* duration.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D6BF9329978A3360CE7638004093093 /* duration.pb.swift */; };
+ 860B81543B02D9F04C1EBA89544C7A6A /* Message+JSONAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA38FB03BCA5E54F878BBE41D8A6B12 /* Message+JSONAdditions.swift */; };
+ 867909901078C2FE0C8575B5F96BA220 /* field_mask.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93E1F361FABA8B70299CF0CBC691AA13 /* field_mask.pb.swift */; };
+ 86E07BDB2A39D75B6F427DEA1154207F /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA94B6FB6618F1F9422A74C494F0881 /* SkipUntil.swift */; };
+ 88228A7A1AC07D942E5AD12FEED0304C /* Google_Protobuf_Value+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BA1093F5E679F49B70B7C01133B2002 /* Google_Protobuf_Value+Extensions.swift */; };
+ 88B78497E93FF8374118F4F3CD9DBF30 /* BlePfcClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = C569E230CFAFD2AC3CD7FD4EC863FA08 /* BlePfcClient.swift */; };
+ 8A1BDAA07736E697AADF27745AB23948 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B650AAC00F50BDE887C12A7D0EEBDD8 /* Queue.swift */; };
+ 8EC5E0D4D5776F727CF051E9B4CA2E1C /* BleGattClientBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DBE62F32C58F519CF6EB4CB1BEC28 /* BleGattClientBase.swift */; };
+ 8EC701F474B6D1668A005411DE03AFF3 /* StringUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C44D9C7F90DD7F9E84B8CA6F825FFB2 /* StringUtils.swift */; };
+ 8F0CD7DF96024526A9EA6BB4E68C5DB9 /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A9E636407D22063200B2D386775258 /* PrimitiveSequence.swift */; };
+ 8FCE5242A298DA891A96D9B25A57B923 /* JSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D58EF5D2805C635D7091DE41E421B0B /* JSONEncoder.swift */; };
+ 90BADADCC1CABD9DD0C56B7FC38C177D /* Google_Protobuf_Duration+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA458BA151C1CBE27291B8889C51D5A /* Google_Protobuf_Duration+Extensions.swift */; };
+ 91ABAF2CFF4E01851C69C1CEF6D0FFA2 /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D42F1AC182D8BC6E6CE741245597BE88 /* Zip+Collection.swift */; };
+ 94063490834B0A151BB1D76746C128D1 /* Google_Protobuf_ListValue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652EACEDBCD20E1A2BDEA799F20BF504 /* Google_Protobuf_ListValue+Extensions.swift */; };
+ 945C551C4A777F7836C16206E9B1FE30 /* CBScanningProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849D50DEF5D4C128B930DEDF7A33EE6C /* CBScanningProtocol.swift */; };
+ 94CF68FA6BEBA4A4A43CB593FE9726A4 /* PolarRecordingSecret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 533707CD91A28395E5E62C42BF8AC2EC /* PolarRecordingSecret.swift */; };
+ 94E90C64C2434C37E139924BC99057CC /* MagData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A775EAFB50B94C64F9776B80A83160 /* MagData.swift */; };
+ 95289AB137C996A920EFCA201FBBF4FA /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B4C32B07425EBA0D09EC7DC21ECA90C /* PrimitiveSequence+Zip+arity.swift */; };
+ 9551A656B20140DB6EDDF25878F11831 /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FCC1B2A4F64F59C1F671B38C9A06982 /* CombineLatest.swift */; };
+ 959E98ACF8A08AACE0E049BB378933F0 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EDE3B21DBCA9DF2353F591E94DAAE4 /* Timer.swift */; };
+ 97926090EA2BAF1AF8C7FDEBCB47C7AD /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FE66BD361A57746B6C1B58CCC1758A2 /* ToArray.swift */; };
+ 97FA5843E9E452AB57D3E7C8B484189D /* TextFormatDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0545A78A477E203FA313A3860764173C /* TextFormatDecodingError.swift */; };
+ 9982FFA7EE850045A64AA41379F5BABE /* CBScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F9BE9DB6193724CE39F40DA3AB2AE5 /* CBScanner.swift */; };
+ 9996DBF1D3347737946BD812B345177F /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC8EA517F7DA8406687CAA6004ED497 /* ScheduledDisposable.swift */; };
+ 9DB78F19164E9B903561E9FDF9F111E3 /* BlePmdClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69212A57FC0AF39DED5AAA09F8A09C07 /* BlePmdClient.swift */; };
+ 9E6604D5573222347261888E5EC75448 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD36DF1053F629500B94E0FF6093E86 /* DispatchQueue+Extensions.swift */; };
+ 9EA672A31CD955C5B92F94D4DBA5BA1C /* BinaryEncodingSizeVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49294806630DE336EA50FD2309848EA2 /* BinaryEncodingSizeVisitor.swift */; };
+ 9F55C1472017C914985D10B9F8EA3CE9 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7790188593290EF0418D7E8B8ABD0F94 /* Throttle.swift */; };
+ 9F701E57F0DA83DA271F35936E53E197 /* BleAttributeTransportProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB69655C4AD15B213F43686EF075783D /* BleAttributeTransportProtocol.swift */; };
+ 9F7EC4F666ED024D8F251B2DB09873E2 /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F3C6C7292375B71B692952D11C432C2 /* DefaultIfEmpty.swift */; };
+ 9FDB07545A1ACC4FB5F63BE450B67464 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC55B2DCFD5608D002C535DBAA6CF81 /* Amb.swift */; };
+ A02E56ECE0D205004A9E78804BAB0DF5 /* JSONMapEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE133A8F394D80BF0C7CA42B665EC32F /* JSONMapEncodingVisitor.swift */; };
+ A1C4DDF7EEB28E28DB0555832EDC5201 /* TextFormatDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B79D4AC84BE90B45EE6FCE42E150A247 /* TextFormatDecodingOptions.swift */; };
+ A1CC90995960309F99BA321914BADA15 /* PolarBleApiImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9782693753F47621990750BBEC6FCC /* PolarBleApiImpl.swift */; };
+ A36E4A9FD42F8A892A1387173A2A73C7 /* MathUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A9C42F523AECAA6DE06DBDABF32331 /* MathUtils.swift */; };
+ A3877FF92D0BC0208206A3F18DEE13B0 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35963177D2046845339FF33A48F304F5 /* HistoricalSchedulerTimeConverter.swift */; };
+ A54885A872BFEFD8D18804DD00F6A7DC /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57085AF167F66D54C56D2FC21ABCBAAD /* ObservableType.swift */; };
+ A6D49E2EA1CA50F9479181DD437FDC0F /* pftp_request.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E831271AEEE5CFB36EEFCED89356B8F /* pftp_request.pb.swift */; };
+ A7074B027D05B56669875D85D74C86A5 /* Infallible+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8E1D8F9C7FC2848150F177BFADA926B /* Infallible+Concurrency.swift */; };
+ A728859C1BB944C69A29DD39653A30E6 /* JSONEncodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D40D9EC5EE394FC5DD0B2CC8D8C4A57 /* JSONEncodingError.swift */; };
+ A72CB96E3299B59945A99C6534FE49D1 /* AnyUnpackError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32E221E6CE17BD3B0A66CBD5B7DF78C /* AnyUnpackError.swift */; };
+ A8ECB699FEF3C8839D6DEDF4D1FA5ADB /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB2501A21A54B31B57AAF7E51B854BF /* Debug.swift */; };
+ A91935B6E356D077371326210E82D462 /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8540810EF26F764A7C7D23D1BC9D743C /* Generate.swift */; };
+ A954A8B6CD182CD6FFF4E70991E074B3 /* Google_Protobuf_Any+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E2A65202E0F00456AA7EF283024DC1D /* Google_Protobuf_Any+Extensions.swift */; };
+ A9A5EAA3F7B05F20BF0837CCD0B465F0 /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5258333A84B720410B16697B1B94FC05 /* Single.swift */; };
+ AB6F363E4643559D2B2EFBA21B84D353 /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ADDB1089A43D566BF9FBED6AE072DF0 /* CombineLatest+Collection.swift */; };
+ AC94871FC3127F3527B07F7C0FBBEC02 /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A55BD24EB76262B58A6EB659B9FD0B /* ImmediateSchedulerType.swift */; };
+ AD7AA852125CDCCF40434457F62BBDDB /* GyrData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88161B13F8A192397F282CFFA065B4D0 /* GyrData.swift */; };
+ AEC79A6B9FE266F31EA56E2E3800F0DA /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC85D7F1FAE5995B1501585A50EFB7A1 /* Internal.swift */; };
+ B04D23DEFAB89AF3A2808850D4B9AA6A /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A36C5A34C03DBE94D17EB996E1862D7 /* Enumerated.swift */; };
+ B06000F3CDDAE3939CB5AEEE584E5430 /* nanopb.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470D4963E2A91B967CAD923A5C0D71CF /* nanopb.pb.swift */; };
+ B0C5921DEAA3DD9F38EFB25497B0123D /* PpgData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53092FCBA5C49E66081A2DB7A57789C /* PpgData.swift */; };
+ B0CA3AE9DD61A48D42515DF44CEC40AB /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7648C1378DE9DA78DF3A465D859986 /* SubjectType.swift */; };
+ B24B73718868B0B286BECD1E0D5B1388 /* BinaryEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6FA758F561B399D5A3F3EC9BE0A8A1 /* BinaryEncoder.swift */; };
+ B2B66A939B89B37D0C3F9182EFC6BCD3 /* Message+BinaryAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A43BADA5074397A6354356A4466420F0 /* Message+BinaryAdditions.swift */; };
+ B3CAD0B3A9C00232785AA19F88D61A4F /* PmdTimeStampUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A299B54602E6059D042158F29D657410 /* PmdTimeStampUtils.swift */; };
+ B5589B002D7378292CF2E0A2F54C5E1F /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 159B0C129C49BB8494FD2A235F7E27DC /* DisposeBase.swift */; };
+ B65FCEF5EF347398D4726DE8CFD7D5CA /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED91CC19786D1EEB0FABEA214560D8F8 /* PublishSubject.swift */; };
+ B7421460CD34DC6CBC7E54FFEDF2AF05 /* WithUnretained.swift in Sources */ = {isa = PBXBuildFile; fileRef = 936565CA8F549A337BDD45307D56A95B /* WithUnretained.swift */; };
+ B94ECAF85E1A5F4ADC7CBF4752C8DD13 /* BleDisClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA5EF927D1C3ADB579E6B181A0134B76 /* BleDisClient.swift */; };
+ BAE35A0B57FB4BD49001133A3EDF63A5 /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17892258DA789704C820C1268CED1930 /* Do.swift */; };
+ BB2401B1089CB31EC99FA66066C5A554 /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30B9B24477EBE7C853D852566D0BF6E /* OperationQueueScheduler.swift */; };
+ BC0FC4905DF4461BC6DA43D91AA14818 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 357F77B7B805C1590C141368D667A8AE /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BD5E87CAD55BDFACE7237F6BE5A21525 /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2CD70D8E5AFEDB4040317769C5F5493 /* ConcurrentMainScheduler.swift */; };
+ BEA39BEDECC5CC39B588B75691B20A99 /* TextFormatEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AADAFBF01DF1CF62767D03B4620994B /* TextFormatEncoder.swift */; };
+ BEC65F7696E2D83635737B97BC45F39B /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51A0A1AEF9FE8479C06D98DFC979BC6C /* TakeLast.swift */; };
+ BFAFEE8B2531B363D1AC989FE4A01941 /* BinaryDelimited.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E32BA8A61BF5A0B08C49F73C10D749 /* BinaryDelimited.swift */; };
+ C08CBF589A7DE1C63CAF1D52D5C6F5A9 /* AtomicList.swift in Sources */ = {isa = PBXBuildFile; fileRef = FABD19A8C93F54E621B6B311913D209F /* AtomicList.swift */; };
+ C0D9036D771D374A17A724B17B1EE9DD /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E290CE5CF7A25BC620727B5F4D6510EC /* ScheduledItemType.swift */; };
+ C109A7D98BA2C21685E2D9A49B081599 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 360E844886043A6FCFBD4F9C9F7A3AC3 /* Zip+arity.swift */; };
+ C275DE632074842E1BE9471496460EE1 /* PolarTimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 174910FEF5C6E31262FFF870A4C6765D /* PolarTimeUtils.swift */; };
+ C2ACE308D3516D84A6E4F5D64C8A25E5 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759F0478BC0041A13D6F1B5FD045617A /* Platform.Darwin.swift */; };
+ C2C5954F40FE622D7515E33EE12E7178 /* PmdActiveMeasurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 233F199871498EED990E322994DA1E9B /* PmdActiveMeasurement.swift */; };
+ C3F08D14116291262E7CB732C26106D4 /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = EACC283F5029E94792FE2CE3E6B6C333 /* Bag+Rx.swift */; };
+ C46D49005E99FE2A61086B4E6FC536FA /* DoubleParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1460FB939DDCE55B6BE26264173832D1 /* DoubleParser.swift */; };
+ C547A6F519D5419AB78A3D1AFC8EDCF6 /* PolarSdkModeApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D75D7BA8892D71E67FA1B0B9B0D78F /* PolarSdkModeApi.swift */; };
C817994A3645ADD0A188BF005872DE9C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
- C86FAAD95C36967173AD4698CBB9059C /* HashVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00670003FF6577E25A6862B71C34FF80 /* HashVisitor.swift */; };
- C96B1F28AFEBE38BE64E097CD132C4D7 /* ProtobufAPIVersionCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = CADCDBF9060A7277270D120C5306C591 /* ProtobufAPIVersionCheck.swift */; };
- C96FA5BA2B15CAE971A15ED479348794 /* pftp_response.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E5E67C31ED8C21BE8E49EF1A51B2563 /* pftp_response.pb.swift */; };
- C97E22B993CC5E82FB7D21A019429BD7 /* SwiftProtobuf-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 301FA48FE3161AA9BFDF140A4E7FAF7E /* SwiftProtobuf-dummy.m */; };
- C99AC9CC4DC518AE573D2D5A442C3FB9 /* ProtoNameProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFD59524496649060F5F2BCBC89C88C /* ProtoNameProviding.swift */; };
- CABA3E0986327B70B8DAE79D39C82173 /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C524E1BF1C8ED0F3CDB1A1A105A5717F /* Completable.swift */; };
- CBBD28B169FE20BB2C9BB996513970D8 /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37EBB11A4A4B8AA9F50C0733DA5C6DAD /* PublishSubject.swift */; };
- CC85C15351BA7B976917A1088AF01794 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EEC323E9B32531A59F46AB0D11AB740 /* DispatchQueue+Extensions.swift */; };
- CEB420EA04C3F4BEBE74E63CDE1B0859 /* WireFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97EB4438B89CBF02C4AF20574917C36D /* WireFormat.swift */; };
- CFCCA22A9F65F616603ED0504813CF91 /* nanopb.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = A189913C9C43C2D9F70D8568B5C8594F /* nanopb.pb.swift */; };
- D008C193BBDB473F33B41EE526C2F839 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = D46282FAA8E61A702830FC2B49C74C3F /* Reduce.swift */; };
- D0E8ACF1FF4FC1B578647105D68C7A3A /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6BB23AB7DBC569FBAA2B0F2C15EFB64 /* Take.swift */; };
- D0E8C78707A954EF0E7037BBBCC76ECF /* struct.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8B6EF7CF0E999C959F5B77B3C09A2B6 /* struct.pb.swift */; };
- D114F204A27EA0E2DF3D1BAF601E7288 /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A004FBE455E5A3DA5D7DE32DB684EA /* ObserverBase.swift */; };
- D1B8AE727898FB1AF2DBB5FFF15C11DB /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 725080E09D1BF573CC3B7BE4B9878888 /* PrimitiveSequence.swift */; };
- D1D0AB466D5D198311B9A8332EC293D1 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D774BD70A0497EE8ED2956B0C69EB1 /* Zip+arity.swift */; };
- D2048F9FF293145F7CACC9CD903A52BA /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 027A0CF5722BFC21E928108971A2F2C6 /* Timer.swift */; };
- D20786863222D8D9BE10ABE71E96E605 /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493FBB4B1476B756AAB3B2BA8310AE69 /* AnonymousDisposable.swift */; };
- D35B8A0D512C27C6B263D12BD03F6605 /* BleRssiFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8431749118C23E98AD51577F2E8CB7 /* BleRssiFilter.swift */; };
- D3DFCA48E201A6CD5B9F710028C3BB07 /* Infallible+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79DDFE7FDC3A2F7F987C00C4A973EEB9 /* Infallible+Zip+arity.swift */; };
- D580F9B7859F868FD6AB3D06034C0332 /* Decoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FD741D683043A8E7405A12CCEBADB38 /* Decoder.swift */; };
- D693BD89EEA79B9ECFCCC45B92046AE4 /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2367C583BF51F13FACDFAEFFCBC943FE /* BehaviorSubject.swift */; };
- D81790EB82AB3CC6465328E9488F1AE3 /* PolarBleSdk-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A4A1752C96FB9D15C5BA69131844D37 /* PolarBleSdk-dummy.m */; };
- DA015FA5E963554E8BFC034F6B2F1583 /* ProtobufMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522E5C9000A3FEB1B3F05550961D6A8F /* ProtobufMap.swift */; };
+ C9252C794E843482A2D98C41710615F1 /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1E735FADE226186318AD186B1E746DF /* InvocableType.swift */; };
+ C96BBF950FCF159F46BDB624D0A09924 /* pftp_error.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = F68DEF1414189A4EE937FDDD8864EB1C /* pftp_error.pb.swift */; };
+ C9858DE57EBE48C4DCDB1B812ADF58D3 /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7A3561527AD8BCDA11C2D51B54FEFF /* SynchronizedOnType.swift */; };
+ CA3CBD24102A0E7EAFAB14FE0DC8C10E /* EcgData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3ECC0397FCEBB47537954872663057 /* EcgData.swift */; };
+ CA4D57DB3F33C9E2B99CA0808598CCD0 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D103FFD480E18510224C7A581F7396C /* Zip.swift */; };
+ CB4FA51A5882A53A9A7D16113B9028BF /* Message+TextFormatAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96EE570267C15802E2E8008C89C2F368 /* Message+TextFormatAdditions.swift */; };
+ CB99C19A88376C13918FF978DB4FB180 /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9808465F950921C41D1DE14006B090BE /* ObservableType+Extensions.swift */; };
+ CBF53E454B837B909E2AC7D1D5BE8A46 /* BlePsFtpUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CCF972540BF9723E6EDC383071F8067 /* BlePsFtpUtility.swift */; };
+ CC28459D5C39B8603801F17B4AA7BDB6 /* source_context.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B22E406B84FCE93DC8404AAFBB1D68F /* source_context.pb.swift */; };
+ CC57763644B3FB7A0D3942E4072D4952 /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3844DDB6F64632CCEFBA369EE81253DE /* Buffer.swift */; };
+ CD232152BCA483A93A4089D787FBDB58 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3FB0662CCF4B679AE96F3D89E1EC48 /* Error.swift */; };
+ CD268F402AAC5EE1F3A5584F58D123FB /* TextFormatEncodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86F1DFF871779A2D891978C20F5FEB8 /* TextFormatEncodingOptions.swift */; };
+ CDD9C623C100DE71C8023BA1A07BAC1B /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1922BA29889CAB79191AD2BEC7F5F6A0 /* Decode.swift */; };
+ CDDAAC9AE423D11743477A97038A9497 /* Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9702EE4C954FB03F07CD127B14DF1E9C /* Infallible.swift */; };
+ CE48B40BF20E3B6974F18BAC448D6E62 /* Visitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0361453D0A30A05800BD561737ED6EB2 /* Visitor.swift */; };
+ CE65084D737579C3F48B6408BB9BA313 /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0CCD67DEA687542784832F0AD9D5432 /* VirtualTimeConverterType.swift */; };
+ CE67589FF011494DB61C49282D65168E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
+ CEBC9DA941CDF404C56CF137F0DF718B /* PolarH10OfflineExerciseApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FF16C18EF174F34E70FF2B90803FEFB /* PolarH10OfflineExerciseApi.swift */; };
+ CF3972DC6F529E38065D4398E46B3C21 /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FFA00112E5675DBDACF01366C166B9 /* Multicast.swift */; };
+ CF81F0BE9E739DF7537962D22B2BDB05 /* PolarOnlineStreamingApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57C9CD6340B17FF3DAD63647087352DA /* PolarOnlineStreamingApi.swift */; };
+ CFC30A7AF1D74637FD395430A9D7AC8C /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6831E14B250EB1BA870C9322B3389FAE /* Platform.Linux.swift */; };
+ D02D01F5A908AB1C98671B1EFDB25BBC /* SimpleExtensionMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2BD3771788729B58A48FDBB3E2C142 /* SimpleExtensionMap.swift */; };
+ D075EC4F4F01A6C43BC36527A4DA36B7 /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D817271B5C83E4472E7D7F7E3B3F72EB /* SwitchIfEmpty.swift */; };
+ D0E190FA5A1E7410EAABDA0D044E7FBC /* PmdSecret.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424CF24A08B36990A0FA03A743A303FE /* PmdSecret.swift */; };
+ D1248FB69918A2F37FC030BBB582DA9E /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 487C70AAA6F7C6764D8F0EA5DB526235 /* Version.swift */; };
+ D1C6CEDD46A59AE1595CEAA8970AE4C9 /* PmdDataFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DFC368E2BE5D79B1C72840990120069 /* PmdDataFrame.swift */; };
+ D2F55DE577B1B99175308FA7A727323A /* PolarBleSdk-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A249185E28E354E2ED8A483C8F36693A /* PolarBleSdk-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D32C0D7CE0EFD5EB7DA5B283A0141794 /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28719B64B729589A3A9177598F60132C /* Producer.swift */; };
+ D36991F36008A7A9DBD6AA199C2A8A9E /* PolarOfflineRecordingApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = C71F4564512A3B54A29F1476D0FB4C31 /* PolarOfflineRecordingApi.swift */; };
+ D4D2EABD149F1F9B0AE81EC7E8B884AD /* PolarDataUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419646CE97FD398D7B06ADC8E572ED85 /* PolarDataUtils.swift */; };
+ D4F5104AF9445677D866C7259C66C122 /* TextFormatDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6FB5C7EAB2981186B4FBFEAC3401741 /* TextFormatDecoder.swift */; };
+ D60AE92138EADB12472A7DB7B60CB2E5 /* UnknownStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279517C421CA5C59400249C4EBA4F9DB /* UnknownStorage.swift */; };
+ D6241BEF8323EDD9DAFFE0F816977364 /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40BDEE9375D75085A5CE7C0C6E136726 /* ConcurrentDispatchQueueScheduler.swift */; };
+ D6C619B4D8E457A1AECF0A9A299B0077 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C462E8B008C70C5DB0BDDB6A9E5D12B /* Timeout.swift */; };
+ D74AA8777A0E8A08F99C6A2BBB5D79CE /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E431087590341E9B0AF4CC322514914 /* RxSwift-dummy.m */; };
+ D7EB397AF62F20EBD59619B47D8B0C6A /* RxObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A153994A0075043244D79D807BD98E /* RxObserver.swift */; };
+ D98750EF7F6971ED104EDB8451649A5F /* PolarOfflineRecordingTriggerMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E9E3301BA32B4A111C0D6BC40C7338 /* PolarOfflineRecordingTriggerMode.swift */; };
DAF1F89684517D092E848A22233FFAF4 /* Pods-iosBleSdkTestApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FDD9E796E4EAEFD7E9142CADE826F03 /* Pods-iosBleSdkTestApp-dummy.m */; };
- DC7791AAE4AE8928D2A763EF9045A6C5 /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84FECB8CA2F12AD74B036644D2D76AE /* ConnectableObservableType.swift */; };
- DCACBCCB85ACBAE058583A005A09ECA6 /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EB85B6C58DF624A37627250DA3E8790 /* LockOwnerType.swift */; };
- DE515C16195731FA4D1DE5D90B10A4A5 /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD876050A60079C59D4E12E23F59A58F /* SingleAssignmentDisposable.swift */; };
- DE9C4A1B2EB6A52BDE2E197A38C37CD5 /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 217D3EF423C85418E1CFA15D80084E53 /* DisposeBase.swift */; };
- DEFEC7377306458E3BF261093B0B6254 /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 218435100B415D33C835A4D59EEBBF11 /* ShareReplayScope.swift */; };
- E072F9B12104020142D9A47941F6B30B /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B48C2BE590D99CFB8EC69599406887 /* ObserveOn.swift */; };
- E0CF2A5AAA7E88F31FFA172217B7055A /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED9028BC21598342A48F448B4A63DF8E /* VirtualTimeConverterType.swift */; };
- E1F45C0DC5C5E279288E128DA6438155 /* JSONMapEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 881FDDA76E3861E9E21A02AE24B297FB /* JSONMapEncodingVisitor.swift */; };
- E2079C2D009D05A421928628FC2AC50E /* BlePolarHrAdvertisement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F62ADA7446B1836A882EBC3556D416 /* BlePolarHrAdvertisement.swift */; };
- E28C454F5E98F83EA6369509DE43CDDB /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AD9FAAA0BF06A4EF5F67ADFE5EB60F /* GroupBy.swift */; };
- E2D2881E3C855629E4D68CC146B8B72B /* CBScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = B88EAA1BA8A8B5FEC10D322DCDF41753 /* CBScanner.swift */; };
- E430DFE6312636CE74E163CAB8CB23B5 /* PolarBleApiObservers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C61664FCC0E7EC4C63A8729ECFE08DF /* PolarBleApiObservers.swift */; };
- E47FDFBF0415EAD451BC331566BD888A /* Google_Protobuf_ListValue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB679A84EA8B462A3D44B1F30893BBCD /* Google_Protobuf_ListValue+Extensions.swift */; };
- E5B2BA08585DC7F0AD809367ABA1E559 /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76DBFD11D67BCFE2082E349AC2DEA7C /* BinaryDisposable.swift */; };
- E6561EBC58013CC1A582B2DA4E31E33F /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B69C83376643768A94BFB4804438F9 /* ConcurrentDispatchQueueScheduler.swift */; };
- E702678E6F7BD956438E12917C10E76D /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE71BABFEC756E04476E82E96A74963 /* CompositeDisposable.swift */; };
- E71B2CB5CAF3C0C382BF74E35D3EFE55 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE9E781E18990825619D61BD2CA012EE /* HistoricalSchedulerTimeConverter.swift */; };
- E81F64BA3730D926DC90D865EC8B7EC1 /* BlePolarDeviceCapabilitiesUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A51AFFDEE89606985715022E2D68D6E /* BlePolarDeviceCapabilitiesUtility.swift */; };
- E87A77D14ADBC697E5C0AECB1395ED25 /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08244BF5155848CF6813CFAF08055202 /* Using.swift */; };
- E89BD58D0C68FE01012F20EC37B8BDC3 /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64BFE94EA41B29BD7F5B4A500BB6CF65 /* Generate.swift */; };
- E9FE2B06C1FAA49C16B13F7A131A3899 /* any.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE9EFF889500D0DBB1CA459B8045625 /* any.pb.swift */; };
- EAAA414DF1863DEB04D1EC65A61DDA69 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
- EAC966C6FB6C9B5E34A6732A5148F6A2 /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7B741FDCB1ECEE8DECF1B8FB6F41861 /* AnonymousObserver.swift */; };
- EB372C84A9ABC50716C9DA0A6EAE79EA /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 626F7FE917BAF13C39B56520299799BC /* RecursiveScheduler.swift */; };
- EC2F3023891E68544F6CB60D49822CAE /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 722F8AF5420FE88147F1AB00A2B93226 /* Enumerated.swift */; };
- ECCC138BA6D57D818F0C0F8B4A8EF497 /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8B0816F417FFFFA982C3A7E0BCE491 /* OperationQueueScheduler.swift */; };
- EF9654E0DBC3D247D452ED87B447B4CA /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1740107945D4BB17026C5F337892E4C2 /* ObservableType+PrimitiveSequence.swift */; };
- F125C55BFBBF4E1E24140C7AF4A2AC5F /* AtomicInteger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F2FBF612962F34AFB245FB64E31A90F /* AtomicInteger.swift */; };
- F12E6E5F1E03D6F4730217E2D1B56972 /* ExtensionFieldValueSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D70D439EDEDDFD1242D40D2CF7EB749 /* ExtensionFieldValueSet.swift */; };
- F373077628B0F58BE2DB50C074672D16 /* BleRscClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = F750505D8AF6D5A81D8A1482F6880F38 /* BleRscClient.swift */; };
- F5779E23600B5B5BFFDB9DCC0508ED28 /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA302866CF355487970699B49FCA68D /* AsyncLock.swift */; };
- F5ABE5231AB3161543A028AB3698A473 /* exercise_rr_samples.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D6CE3DDA860705B1CA3B4F53E17225 /* exercise_rr_samples.pb.swift */; };
- F5B48CCF164693A31BC16DCDD52E1EE2 /* PmdSetting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDF3B3CBB274AFD14B0B47E5DE29E28 /* PmdSetting.swift */; };
- F7EB749D3F07B6E3E38D0E653A30DAF6 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3BB4D9279DCB1CF50B65490EE84F015 /* Sink.swift */; };
- F88F64E776CB70A6FFF85B063299E972 /* BlePfcClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE1FBE3CA23618EAF00B6C7A308070B9 /* BlePfcClient.swift */; };
- F90EE4B7B353DF6B68079545E29AF707 /* pftp_error.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7450FEB4974E9617F0327FE18865410 /* pftp_error.pb.swift */; };
- FB6C0D03670665EC9C78814A3C2A8687 /* UnsafeBufferPointer+Shims.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF41A7B5E8D6315899C5CEF3CFB3EB30 /* UnsafeBufferPointer+Shims.swift */; };
- FC966626E2E0BD58D715A6265E2F4EFF /* AnyMessageStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F9F19B0139A897BC3BD624FF5DA32B /* AnyMessageStorage.swift */; };
- FD2CFE5A5167BA31729497A156488D32 /* PolarErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40110C23427AC2BD0E4BF822FB91D518 /* PolarErrors.swift */; };
- FD74B8D0EA064ADF82EF99FE46D9717E /* BlePolarDeviceIdUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 272AAB76A2537DF70992893A4ADDE6BD /* BlePolarDeviceIdUtility.swift */; };
- FD81569449EF4DDA71CA3AC022CA7B2A /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B3808EC7BDC4DDAEE88C9C5C0E552BC /* BooleanDisposable.swift */; };
- FF5A2276EBDE96278D032CF14A2F3A89 /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = A17E816C2399D5E1E0179E7C0E3E95C8 /* Just.swift */; };
+ DD022C9D3D44CD7F827D0287C7934664 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0436C4243A7D948D97DF5E60687A8C94 /* Disposable.swift */; };
+ DD627F48C32F7C842ED14ED8430C5D09 /* timestamp.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 602D2CA2935C87CCBD6D74A1D59183B1 /* timestamp.pb.swift */; };
+ DE1FD8C863BC5449BBEBE0E416B5A7F1 /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21595460BB09C2330D3ECA11E59F45D6 /* Map.swift */; };
+ DF2B42EC757E56F69C114BE4800C5A7E /* wrappers.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 677CD605ED1EF369EFEF386C43D2B8C5 /* wrappers.pb.swift */; };
+ DF64182DC5B651582A628CF6DDBD778F /* TakeWithPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D383CFBF3A460C56249020CF0837EBB6 /* TakeWithPredicate.swift */; };
+ E00B5130A9E10472A6195F84B73F51F5 /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = E46EA775CE9A8D8B4A59A90B8450D8D3 /* RetryWhen.swift */; };
+ E0BECE85EEB3C766DC3641AA964749B2 /* UnsafeRawPointer+Shims.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8919F73BE2DBF8256D97C14345A207 /* UnsafeRawPointer+Shims.swift */; };
+ E0C9DB21F5F88CD3A6C4B8A65AC7C483 /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17DFC1737CEF2F27101F00738836E958 /* AddRef.swift */; };
+ E0CCC809FF11EAB474C4979431596542 /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6D8A7ADEC1F4F9E0D71130B0C8808B7 /* ObserverBase.swift */; };
+ E0F5A4E88549E47431AA2C42891F0D36 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A96FF0CDBB12E2E3F91DDF71BAC4D82 /* Filter.swift */; };
+ E142114F1485FFA8E3AC926DB6FDDB10 /* Infallible+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61015D8D4D9216EE37DD857C73461D6F /* Infallible+Create.swift */; };
+ E14B7A8CB8BD9E08E7DD386C1FEA3D31 /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D7446A880948C75CABAAC7D8D3963C /* GroupedObservable.swift */; };
+ E1F361FC615E091EE53BA1E219F3B3A9 /* PpiData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA121D475EEC9990139A67ED9610B8B /* PpiData.swift */; };
+ E27C79E1515D6467F92508A6E69429AC /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BEC522A6F7833321F65B799DEB17985 /* RecursiveScheduler.swift */; };
+ E2E03C93E560A6B7F8A97B9C7823FE7C /* OfflineRecordingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5BE1E8246FAB1A83CE515BB021DEBD /* OfflineRecordingError.swift */; };
+ E33AC42076FBB79F38C71CC56188BFF2 /* pftp_notification.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCABF82E180AF0879B0366E735CE3470 /* pftp_notification.pb.swift */; };
+ E3BF24BFE80C9F64909C95A51764C077 /* PolarBleApiDefaultImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77473B0D22BAE197B6309D362339F544 /* PolarBleApiDefaultImpl.swift */; };
+ E4E3431EDCB6443EEABC37576198DBC0 /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFF17706C6D59A9567BA700CB3E89707 /* PriorityQueue.swift */; };
+ E50BC35257743A3C567F54EAA7300BAE /* ObservableConvertibleType+Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A222CA4B26E265B64327B8AF1AF072 /* ObservableConvertibleType+Infallible.swift */; };
+ E5C584411D8D5EE7D6E7ABF895F7653F /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = B769E0C28F55D383CAB99D40D66B276D /* Merge.swift */; };
+ E70ADC5CC973F2451FDD944A4699C4C3 /* Google_Protobuf_Timestamp+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C9B9EDFCFCAB3B69CD54D7ACCFA3156 /* Google_Protobuf_Timestamp+Extensions.swift */; };
+ E73ACD7FFE9CEAD70FBA825258231BA9 /* exercise_rr_samples.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9704F513E7737A00B6BEDA5056FCA7D5 /* exercise_rr_samples.pb.swift */; };
+ EEE137D6AC19C49DBFC2D3D042DCB19B /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D42E63F399E49E99505AD610D508A62 /* DistinctUntilChanged.swift */; };
+ F024FA0B52FABFDC37A2C0FC45356599 /* BlePolarDeviceIdUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D1D2E7E3185684ADA3251ABDC88F88 /* BlePolarDeviceIdUtility.swift */; };
+ F037C9EEAD7517760595344A467DB155 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D28E75A789ED4EDE917D4101077395 /* Reduce.swift */; };
+ F0B9266FE08A06B6E77C84A48561D3AB /* Varint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625793FF0AF56D56E6A726130773F55D /* Varint.swift */; };
+ F0EADB3A349CE8648AA22A68ECDECF0C /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95394C069BCFFC340EA0DBDEE5F7D1C2 /* Dematerialize.swift */; };
+ F150E1D2280AA1BED87439DECA59D73E /* SwiftProtobuf-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 504D1E54F974B7FD0D0677E980496401 /* SwiftProtobuf-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F18E6939837FA7DEDAA2182283C6C3B4 /* Google_Protobuf_Wrappers+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A0AB44BB13EDA9E098CE22000AA404 /* Google_Protobuf_Wrappers+Extensions.swift */; };
+ F245F66146C0150409B7C9B0B26D5A32 /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB9DC95ED2D42C0DF8B799A8FC81A87C /* Maybe.swift */; };
+ F247C439193185B5470EF6DB24955399 /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 237E35D82CCEC77B456194B34E86DD7F /* BehaviorSubject.swift */; };
+ F3606A7E48C4A1131861EE87FFDFB53C /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 489D025DE31C7625CAE0603C2FF23C85 /* AnonymousDisposable.swift */; };
+ F3E43CC0612C59FFD1D36D6A8CA561F2 /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3F7AD66F288E71BF455B698950FA583 /* GroupBy.swift */; };
+ F431319497F11892367D56620058C1A1 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6143345E680335E9ECDB6F33A18F019C /* Bag.swift */; };
+ F449E72E628F6290E7B384F6E81F3DAA /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6434A22BC3D3AC2325C4AAEA988CDEE7 /* Just.swift */; };
+ F4ECA6C41A8F0B135427F0297FB22300 /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 497788FCDEBC31DDD3D8A2A6A3741F6B /* AsyncLock.swift */; };
+ F50E17CF27C0E76AAE6F6F9FCEFBCAAB /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABB0F37AC0E9CFB01CABC3938F1E04F4 /* SwiftSupport.swift */; };
+ F5E16A2EF60B21CA2AC3E26CDD641602 /* pftp_response.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A4E343409F559960D778AC061BBE676 /* pftp_response.pb.swift */; };
+ F669BB8A1DB7BC2E9644AD985B46D9A0 /* BleGattException.swift in Sources */ = {isa = PBXBuildFile; fileRef = D825AE1BE50D9DF1724EED449D0D97D9 /* BleGattException.swift */; };
+ F6C9227106EDC62D6B5A602F9604223E /* BlePolarDeviceCapabilitiesUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF4DDF4B8654318CEC97F1A55CD65D91 /* BlePolarDeviceCapabilitiesUtility.swift */; };
+ F75E57F7F3EB394177058855EA887836 /* NameMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE70C798B64F06BA894B3CFC99EE451C /* NameMap.swift */; };
+ F90005CA19DC8D921EF0AAF4F755DF64 /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC632D3F6986C05834BE4A8D2FEBAF3F /* Catch.swift */; };
+ F975971369D2172467D51C673494ECD8 /* types.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1458AD25FB4CC0F3706A264E4A498D1 /* types.pb.swift */; };
+ FA1442465FB30EC996984E0A9547CB3C /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46596E30B6DC8A92F6CDB657A88C8787 /* TailRecursiveSink.swift */; };
+ FB366EB370A0CFDBCC65B773D28773FE /* AccData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7332F6A3C5AB529A21F545B0E73DE2 /* AccData.swift */; };
+ FB40D1D4827B115EA98E223AD39A76C9 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 593A2F507485DD41413020F35089C5AF /* InvocableScheduledItem.swift */; };
+ FDE3C7A7DBCD1FB12D3DA3E1D404DB52 /* JSONDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314BB069C559CE241F0A4EC1B461BA00 /* JSONDecodingError.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 2819F1E8541AB7F7CB492CFCCE67BF3F /* PBXContainerItemProxy */ = {
+ 04CB73F43C2E79C0313415E06B244FEC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = A5F702E0DA383BC1479572581615A916;
- remoteInfo = SwiftProtobuf;
+ remoteGlobalIDString = 42E579C8E6CAE49EB3D535783E635CB6;
+ remoteInfo = PolarBleSdk;
};
- 51D57CFD7C79BAA0E168A6B9F75AA984 /* PBXContainerItemProxy */ = {
+ 14596096F56280AC18BFFB686A9B3BBD /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F;
remoteInfo = RxSwift;
};
- AC38356A9C2B7A3399F6404D90A27A30 /* PBXContainerItemProxy */ = {
+ 1A9485BC0BAAD0E4F788F979AC6F489C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 42E579C8E6CAE49EB3D535783E635CB6;
- remoteInfo = PolarBleSdk;
+ remoteGlobalIDString = A5F702E0DA383BC1479572581615A916;
+ remoteInfo = SwiftProtobuf;
};
- C5B856774A4828E805BFDE8BBCE7D3F5 /* PBXContainerItemProxy */ = {
+ 21FA7EEF9F0A792FB7E6F019A9B01925 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F;
- remoteInfo = RxSwift;
+ remoteGlobalIDString = A5F702E0DA383BC1479572581615A916;
+ remoteInfo = SwiftProtobuf;
};
- CB0D1FAC29CA022FC8E6586B7D03E65A /* PBXContainerItemProxy */ = {
+ DA4B9DD084D92E0752BEA5C39093327D /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = A5F702E0DA383BC1479572581615A916;
- remoteInfo = SwiftProtobuf;
+ remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F;
+ remoteInfo = RxSwift;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
- 00272332B35ED4CDE993C648498AFAC6 /* TextFormatDecodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatDecodingOptions.swift; path = Sources/SwiftProtobuf/TextFormatDecodingOptions.swift; sourceTree = ""; };
- 00670003FF6577E25A6862B71C34FF80 /* HashVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HashVisitor.swift; path = Sources/SwiftProtobuf/HashVisitor.swift; sourceTree = ""; };
- 013D4C11C4053542550BC7CB0688D011 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Version.swift; path = Sources/SwiftProtobuf/Version.swift; sourceTree = ""; };
- 01EA22C7FB7EAA8C6D86DA01EFDC6F54 /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Message.swift; path = Sources/SwiftProtobuf/Message.swift; sourceTree = ""; };
- 027A0CF5722BFC21E928108971A2F2C6 /* Timer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timer.swift; path = RxSwift/Observables/Timer.swift; sourceTree = ""; };
- 05F0C6C83BD7CAFEAE8328A1B71B6274 /* wrappers.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = wrappers.pb.swift; path = Sources/SwiftProtobuf/wrappers.pb.swift; sourceTree = ""; };
- 06214D8A3B99721F69922503324694CE /* Decode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Decode.swift; path = RxSwift/Observables/Decode.swift; sourceTree = ""; };
- 081936D2B937BDFE2444974C171B6606 /* AtomicBoolean.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicBoolean.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/common/AtomicBoolean.swift"; sourceTree = ""; };
- 08244BF5155848CF6813CFAF08055202 /* Using.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Using.swift; path = RxSwift/Observables/Using.swift; sourceTree = ""; };
- 0897DCA7CE715E662F450E343C131AA5 /* SerialDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDisposable.swift; path = RxSwift/Disposables/SerialDisposable.swift; sourceTree = ""; };
- 08C2820C320183348852E445CF522EB0 /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = RxSwift/Observables/Zip.swift; sourceTree = ""; };
+ 00BAD89344638793202424C9FDBF0659 /* ConnectableObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectableObservableType.swift; path = RxSwift/ConnectableObservableType.swift; sourceTree = ""; };
+ 01A775EAFB50B94C64F9776B80A83160 /* MagData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MagData.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/model/MagData.swift"; sourceTree = ""; };
+ 0361453D0A30A05800BD561737ED6EB2 /* Visitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Visitor.swift; path = Sources/SwiftProtobuf/Visitor.swift; sourceTree = ""; };
+ 0436C4243A7D948D97DF5E60687A8C94 /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = RxSwift/Disposable.swift; sourceTree = ""; };
+ 0545A78A477E203FA313A3860764173C /* TextFormatDecodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatDecodingError.swift; path = Sources/SwiftProtobuf/TextFormatDecodingError.swift; sourceTree = ""; };
+ 06E2F260A7E7416C99AD4535CCCD1F42 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = RxSwift/Observables/CompactMap.swift; sourceTree = ""; };
+ 088BB34BAD71A306B509355459A8A8DD /* Infallible+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Zip+arity.swift"; path = "RxSwift/Traits/Infallible/Infallible+Zip+arity.swift"; sourceTree = ""; };
+ 08B959AF256300A592713850B3800FF7 /* Skip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Skip.swift; path = RxSwift/Observables/Skip.swift; sourceTree = ""; };
+ 0973A7C004B0E16C90257729901CEE99 /* AtomicType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicType.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/common/AtomicType.swift"; sourceTree = ""; };
0A25251B748422A94B68776703215555 /* Pods-iosBleSdkTestApp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosBleSdkTestApp-acknowledgements.plist"; sourceTree = ""; };
- 0A952CFB54DDFDB35AE14B456EBA8637 /* Message+JSONArrayAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+JSONArrayAdditions.swift"; path = "Sources/SwiftProtobuf/Message+JSONArrayAdditions.swift"; sourceTree = ""; };
- 0AB131C6143838024A2DBF2FCB0B71CD /* TextFormatEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatEncodingVisitor.swift; path = Sources/SwiftProtobuf/TextFormatEncodingVisitor.swift; sourceTree = ""; };
0AB21EFE1E65382E95A220C52B546184 /* Pods-iosBleSdkTestApp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iosBleSdkTestApp.modulemap"; sourceTree = ""; };
- 0C35CE4B97A3B27A960933DFA95659A6 /* ToArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToArray.swift; path = RxSwift/Observables/ToArray.swift; sourceTree = ""; };
- 0C58402E461B3F8F4326BF8E2227D5E1 /* AsSingle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsSingle.swift; path = RxSwift/Observables/AsSingle.swift; sourceTree = ""; };
- 0C9D656B5289CBEA6DFAC595EC5C1960 /* SingleAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAsync.swift; path = RxSwift/Observables/SingleAsync.swift; sourceTree = ""; };
- 0CE8CB4CA6AF831C369D8C3B086DEED1 /* FieldTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldTypes.swift; path = Sources/SwiftProtobuf/FieldTypes.swift; sourceTree = ""; };
- 0D582EAC6962D8DF33B0901755188AF2 /* JSONDecodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecodingOptions.swift; path = Sources/SwiftProtobuf/JSONDecodingOptions.swift; sourceTree = ""; };
- 0F80642505DB3254FDCAFF314BBF5D7D /* RxSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwift.modulemap; sourceTree = ""; };
- 11C66B61C66781B8E0C0B8FCDFC67274 /* Deferred.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deferred.swift; path = RxSwift/Observables/Deferred.swift; sourceTree = ""; };
- 127BAA1120C5A20081D456830C794743 /* Google_Protobuf_Timestamp+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Timestamp+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift"; sourceTree = ""; };
- 13B69C83376643768A94BFB4804438F9 /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentDispatchQueueScheduler.swift; path = RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; };
- 1500A4342DBE47010CB550E22E322749 /* RxSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-umbrella.h"; sourceTree = ""; };
- 1531562EF4112BF4AB2A1BF1ED226A36 /* PolarBleSdk-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PolarBleSdk-prefix.pch"; sourceTree = ""; };
- 1544877AA3B3304E23C2DE7532A9F75F /* BleDeviceSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BleDeviceSession.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/BleDeviceSession.swift"; sourceTree = ""; };
- 158CF9DCA6AC3655DFA9110E14150528 /* Window.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Window.swift; path = RxSwift/Observables/Window.swift; sourceTree = ""; };
- 162D88707D8EAD937F7BB16A081CC0C1 /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DistinctUntilChanged.swift; path = RxSwift/Observables/DistinctUntilChanged.swift; sourceTree = ""; };
- 1740107945D4BB17026C5F337892E4C2 /* ObservableType+PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+PrimitiveSequence.swift"; path = "RxSwift/Traits/PrimitiveSequence/ObservableType+PrimitiveSequence.swift"; sourceTree = ""; };
- 18C0786E6E1B51A7A4AC33DB146EB268 /* Google_Protobuf_Wrappers+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Wrappers+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift"; sourceTree = ""; };
- 19A53B72709CCBB02F0C3B566750DCF8 /* Cancelable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancelable.swift; path = RxSwift/Cancelable.swift; sourceTree = ""; };
- 1A231D39ECB7D7D0CA2E9A02245EEA84 /* SchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulerType.swift; path = RxSwift/SchedulerType.swift; sourceTree = ""; };
- 1A2D737684EC43A72D667F07F97E09F0 /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; };
- 1D650DC7778F1C726A37225F31A5EF96 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = RxSwift/Observables/Filter.swift; sourceTree = ""; };
- 1E02C62645B5ED0C49F2F386BD861330 /* First.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = First.swift; path = RxSwift/Observables/First.swift; sourceTree = ""; };
- 1E72C3825CB6DB02DB743DEB7F04C65A /* Amb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Amb.swift; path = RxSwift/Observables/Amb.swift; sourceTree = ""; };
- 1F5514CB8E88EEBF422DA8DD14067D1F /* Concat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concat.swift; path = RxSwift/Observables/Concat.swift; sourceTree = ""; };
- 1F87418EBDC4C5924BC3887F86F193E3 /* type.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = type.pb.swift; path = Sources/SwiftProtobuf/type.pb.swift; sourceTree = ""; };
- 1FDA2D5FB2CF7CA42F31D64301087B94 /* EcgData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EcgData.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/model/EcgData.swift"; sourceTree = ""; };
- 2073FE4CFF73F6F98CFE2077080D4C5F /* NopDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NopDisposable.swift; path = RxSwift/Disposables/NopDisposable.swift; sourceTree = ""; };
- 20ED293D45E9F38E7DBA3F47CA76DADD /* Multicast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multicast.swift; path = RxSwift/Observables/Multicast.swift; sourceTree = ""; };
- 217D3EF423C85418E1CFA15D80084E53 /* DisposeBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBase.swift; path = RxSwift/Disposables/DisposeBase.swift; sourceTree = ""; };
- 218435100B415D33C835A4D59EEBBF11 /* ShareReplayScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareReplayScope.swift; path = RxSwift/Observables/ShareReplayScope.swift; sourceTree = ""; };
- 2367C583BF51F13FACDFAEFFCBC943FE /* BehaviorSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorSubject.swift; path = RxSwift/Subjects/BehaviorSubject.swift; sourceTree = ""; };
- 24D21E7E6C263EB6F0C38A39AECA30C3 /* DispatchQueueConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchQueueConfiguration.swift; path = RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift; sourceTree = ""; };
- 24E13E40428B03D5E60F08BB0BA00169 /* ExtensibleMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensibleMessage.swift; path = Sources/SwiftProtobuf/ExtensibleMessage.swift; sourceTree = ""; };
- 252F061DBE82800BB7D3D16DB3248E79 /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Observable.swift; path = RxSwift/Observable.swift; sourceTree = ""; };
- 25C2DFD0FDD304DE1A8AFA3BF0A8B172 /* Google_Protobuf_Any+Registry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Any+Registry.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift"; sourceTree = ""; };
- 25C940A5F0142D809607792D25C29E14 /* pftp_request.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = pftp_request.pb.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/protobuf/pftp_request.pb.swift"; sourceTree = ""; };
- 267535E668EBDB57F586BD15204A2529 /* BinaryEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryEncoder.swift; path = Sources/SwiftProtobuf/BinaryEncoder.swift; sourceTree = ""; };
- 272AAB76A2537DF70992893A4ADDE6BD /* BlePolarDeviceIdUtility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlePolarDeviceIdUtility.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/polar/BlePolarDeviceIdUtility.swift"; sourceTree = ""; };
- 279EEEA0B5DDB0B33ED305D2CB46BAAB /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; };
- 27F4D742BBD2164A0F255FF5C89C3024 /* Single.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Single.swift; path = RxSwift/Traits/PrimitiveSequence/Single.swift; sourceTree = ""; };
- 29C7C2259758FE92427ECD4BA3E88B21 /* JSONDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecoder.swift; path = Sources/SwiftProtobuf/JSONDecoder.swift; sourceTree = ""; };
- 2A7863675275C7E09D15F5C6D304E5DC /* Materialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Materialize.swift; path = RxSwift/Observables/Materialize.swift; sourceTree = ""; };
+ 0D40D9EC5EE394FC5DD0B2CC8D8C4A57 /* JSONEncodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONEncodingError.swift; path = Sources/SwiftProtobuf/JSONEncodingError.swift; sourceTree = ""; };
+ 0DFC368E2BE5D79B1C72840990120069 /* PmdDataFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PmdDataFrame.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/PmdDataFrame.swift"; sourceTree = ""; };
+ 0E8919F73BE2DBF8256D97C14345A207 /* UnsafeRawPointer+Shims.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UnsafeRawPointer+Shims.swift"; path = "Sources/SwiftProtobuf/UnsafeRawPointer+Shims.swift"; sourceTree = ""; };
+ 0EC55B2DCFD5608D002C535DBAA6CF81 /* Amb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Amb.swift; path = RxSwift/Observables/Amb.swift; sourceTree = ""; };
+ 0FCC1B2A4F64F59C1F671B38C9A06982 /* CombineLatest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombineLatest.swift; path = RxSwift/Observables/CombineLatest.swift; sourceTree = ""; };
+ 0FF16C18EF174F34E70FF2B90803FEFB /* PolarH10OfflineExerciseApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarH10OfflineExerciseApi.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/api/PolarH10OfflineExerciseApi.swift"; sourceTree = ""; };
+ 101081793EDBE6121B8A144B3237231C /* AtomicInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicInt.swift; path = Platform/AtomicInt.swift; sourceTree = ""; };
+ 11B978770BD85DD311C334D8732E1025 /* PmdControlPointCommand.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PmdControlPointCommand.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/PmdControlPointCommand.swift"; sourceTree = ""; };
+ 12B47200FD5ADA2F74C5B4E0C919F328 /* Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Create.swift; path = RxSwift/Observables/Create.swift; sourceTree = ""; };
+ 12CBF043210FF21E25ED3D64DAB1152F /* HashVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HashVisitor.swift; path = Sources/SwiftProtobuf/HashVisitor.swift; sourceTree = ""; };
+ 12F9BE9DB6193724CE39F40DA3AB2AE5 /* CBScanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBScanner.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/endpoints/corebluetooth/central/CBScanner.swift"; sourceTree = ""; };
+ 130674DBC6A310F6C8BBBED33780B837 /* ShareReplayScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareReplayScope.swift; path = RxSwift/Observables/ShareReplayScope.swift; sourceTree = ""; };
+ 1460FB939DDCE55B6BE26264173832D1 /* DoubleParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoubleParser.swift; path = Sources/SwiftProtobuf/DoubleParser.swift; sourceTree = ""; };
+ 159B0C129C49BB8494FD2A235F7E27DC /* DisposeBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBase.swift; path = RxSwift/Disposables/DisposeBase.swift; sourceTree = ""; };
+ 1689B13E9CD55BFB116E769E57ED2F22 /* AnyObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyObserver.swift; path = RxSwift/AnyObserver.swift; sourceTree = ""; };
+ 174910FEF5C6E31262FFF870A4C6765D /* PolarTimeUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarTimeUtils.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/utils/PolarTimeUtils.swift"; sourceTree = ""; };
+ 175686E73964E408CBE67B5632546BA6 /* ObservableConvertibleType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableConvertibleType.swift; path = RxSwift/ObservableConvertibleType.swift; sourceTree = ""; };
+ 17627E11EE6D16A5DE9B7B0AF690C5DE /* FieldTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldTag.swift; path = Sources/SwiftProtobuf/FieldTag.swift; sourceTree = ""; };
+ 17892258DA789704C820C1268CED1930 /* Do.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Do.swift; path = RxSwift/Observables/Do.swift; sourceTree = ""; };
+ 17D55381508BF8F333460DDF4C021C0F /* PolarBleSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PolarBleSdk.debug.xcconfig; sourceTree = ""; };
+ 17DFC1737CEF2F27101F00738836E958 /* AddRef.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AddRef.swift; path = RxSwift/Observables/AddRef.swift; sourceTree = ""; };
+ 189CB4C626154717364C7A99E9E31AB7 /* PolarOfflineRecordingEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarOfflineRecordingEntry.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/api/model/PolarOfflineRecordingEntry.swift"; sourceTree = ""; };
+ 18A728B59D5F34D304CAAE94D5800489 /* JSONDecodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecodingOptions.swift; path = Sources/SwiftProtobuf/JSONDecodingOptions.swift; sourceTree = ""; };
+ 1922BA29889CAB79191AD2BEC7F5F6A0 /* Decode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Decode.swift; path = RxSwift/Observables/Decode.swift; sourceTree = ""; };
+ 1979A3975CB738AC299A2589E26C7A43 /* DispatchQueueConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchQueueConfiguration.swift; path = RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift; sourceTree = ""; };
+ 199C61D7F343B348BB76C0F63DF97071 /* NopDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NopDisposable.swift; path = RxSwift/Disposables/NopDisposable.swift; sourceTree = ""; };
+ 19E615F24CD4FF49E26D5B1BE19700AF /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; };
+ 1AADAFBF01DF1CF62767D03B4620994B /* TextFormatEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatEncoder.swift; path = Sources/SwiftProtobuf/TextFormatEncoder.swift; sourceTree = ""; };
+ 1BA1093F5E679F49B70B7C01133B2002 /* Google_Protobuf_Value+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Value+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift"; sourceTree = ""; };
+ 1CA7B23448819793B8A0FA344FFFD225 /* Observable+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Concurrency.swift"; path = "RxSwift/Observable+Concurrency.swift"; sourceTree = ""; };
+ 1D103FFD480E18510224C7A581F7396C /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = RxSwift/Observables/Zip.swift; sourceTree = ""; };
+ 1D6BF9329978A3360CE7638004093093 /* duration.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = duration.pb.swift; path = Sources/SwiftProtobuf/duration.pb.swift; sourceTree = ""; };
+ 1E5BE1E8246FAB1A83CE515BB021DEBD /* OfflineRecordingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OfflineRecordingError.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/offlinerecording/OfflineRecordingError.swift"; sourceTree = ""; };
+ 21595460BB09C2330D3ECA11E59F45D6 /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = RxSwift/Observables/Map.swift; sourceTree = ""; };
+ 22A222CA4B26E265B64327B8AF1AF072 /* ObservableConvertibleType+Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Infallible.swift"; path = "RxSwift/Traits/Infallible/ObservableConvertibleType+Infallible.swift"; sourceTree = ""; };
+ 233F199871498EED990E322994DA1E9B /* PmdActiveMeasurement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PmdActiveMeasurement.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/PmdActiveMeasurement.swift"; sourceTree = ""; };
+ 237E35D82CCEC77B456194B34E86DD7F /* BehaviorSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorSubject.swift; path = RxSwift/Subjects/BehaviorSubject.swift; sourceTree = ""; };
+ 26A9C42F523AECAA6DE06DBDABF32331 /* MathUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MathUtils.swift; path = Sources/SwiftProtobuf/MathUtils.swift; sourceTree = ""; };
+ 279517C421CA5C59400249C4EBA4F9DB /* UnknownStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnknownStorage.swift; path = Sources/SwiftProtobuf/UnknownStorage.swift; sourceTree = ""; };
+ 284787AA56191E083941D5FE9190C953 /* FieldTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldTypes.swift; path = Sources/SwiftProtobuf/FieldTypes.swift; sourceTree = ""; };
+ 28719B64B729589A3A9177598F60132C /* Producer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Producer.swift; path = RxSwift/Observables/Producer.swift; sourceTree = ""; };
+ 29A0AB44BB13EDA9E098CE22000AA404 /* Google_Protobuf_Wrappers+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Wrappers+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift"; sourceTree = ""; };
+ 29A55BD24EB76262B58A6EB659B9FD0B /* ImmediateSchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImmediateSchedulerType.swift; path = RxSwift/ImmediateSchedulerType.swift; sourceTree = ""; };
+ 2ABAD49A33B68163AAAF2455599032F3 /* Completable+AndThen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Completable+AndThen.swift"; path = "RxSwift/Traits/PrimitiveSequence/Completable+AndThen.swift"; sourceTree = ""; };
+ 2B6127E64B2EEF0AD838DC4482197B26 /* Event.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Event.swift; path = RxSwift/Event.swift; sourceTree = ""; };
2B78FCA1AC7EAEA6B96F0EAA42A55179 /* Pods-iosBleSdkTestApp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iosBleSdkTestApp-umbrella.h"; sourceTree = ""; };
- 2CE22AEF26C88AC26C048307F3B50494 /* Binder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Binder.swift; path = RxSwift/Binder.swift; sourceTree = ""; };
- 2D0C85D4855F98566C0B1439A15EE38F /* SubscribeOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscribeOn.swift; path = RxSwift/Observables/SubscribeOn.swift; sourceTree = ""; };
- 2EEC323E9B32531A59F46AB0D11AB740 /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; };
- 2F2FBF612962F34AFB245FB64E31A90F /* AtomicInteger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicInteger.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/common/AtomicInteger.swift"; sourceTree = ""; };
- 2F5FA13DCD47ED0F9B7BF4EC42A7ED80 /* SkipUntil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipUntil.swift; path = RxSwift/Observables/SkipUntil.swift; sourceTree = ""; };
- 2FD1A4BF8EB8C322BB03A2D3BC876DFF /* PolarBleApiDefaultImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarBleApiDefaultImpl.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/api/PolarBleApiDefaultImpl.swift"; sourceTree = ""; };
- 301FA48FE3161AA9BFDF140A4E7FAF7E /* SwiftProtobuf-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftProtobuf-dummy.m"; sourceTree = ""; };
- 30806C7CD0BAEFDD0D02D3DACAD8C823 /* MagData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MagData.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/model/MagData.swift"; sourceTree = ""; };
- 308238E1F525725E48D4DADB316F75FE /* ObservableConvertibleType+Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Infallible.swift"; path = "RxSwift/Traits/Infallible/ObservableConvertibleType+Infallible.swift"; sourceTree = ""; };
- 31CAA6585B2CEF360D895B4D9CC3A310 /* SkipWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipWhile.swift; path = RxSwift/Observables/SkipWhile.swift; sourceTree = ""; };
- 32068A9C83307D0E4C5EF48F319C07D0 /* NameMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NameMap.swift; path = Sources/SwiftProtobuf/NameMap.swift; sourceTree = ""; };
+ 2C0D699BA7A172573091B009CC24C3A8 /* AnyMessageStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyMessageStorage.swift; path = Sources/SwiftProtobuf/AnyMessageStorage.swift; sourceTree = ""; };
+ 2C3D4E791D396E34E29C29691A1651A2 /* BinaryDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDisposable.swift; path = RxSwift/Disposables/BinaryDisposable.swift; sourceTree = ""; };
+ 2CAD34A9EC039E6C7A9DBEC25F6A332E /* BleDeviceSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BleDeviceSession.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/BleDeviceSession.swift"; sourceTree = ""; };
+ 2E63B2991A234C7FA07C4F2066D464FD /* CBDeviceSessionImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBDeviceSessionImpl.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/endpoints/corebluetooth/central/CBDeviceSessionImpl.swift"; sourceTree = ""; };
+ 2F1C2477D93F8EDF109B4728F13CEF2B /* RxSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwift.modulemap; sourceTree = ""; };
+ 30171D283DB6514B72328D2F21E411B7 /* SkipWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipWhile.swift; path = RxSwift/Observables/SkipWhile.swift; sourceTree = ""; };
+ 314BB069C559CE241F0A4EC1B461BA00 /* JSONDecodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecodingError.swift; path = Sources/SwiftProtobuf/JSONDecodingError.swift; sourceTree = ""; };
+ 317E06E2FA578E7995A3D26974BA4A49 /* Google_Protobuf_Any+Registry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Any+Registry.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift"; sourceTree = ""; };
+ 320711E7D7541179A16C1319C7A3A8E1 /* exercise_samples.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = exercise_samples.pb.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/protobuf/exercise_samples.pb.swift"; sourceTree = ""; };
324C6536E15A4A6440ED02A0D2C9F13C /* Pods-iosBleSdkTestApp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iosBleSdkTestApp-acknowledgements.markdown"; sourceTree = ""; };
- 32BACDDF50692D1E4A054A7DB6DDA492 /* TakeWithPredicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeWithPredicate.swift; path = RxSwift/Observables/TakeWithPredicate.swift; sourceTree = ""; };
- 34110778827601017836166A6AD5C8B8 /* BlePsdClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlePsdClient.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/BlePsdClient.swift"; sourceTree = ""; };
- 3482470DF60545F23C63750E4811EBEB /* ElementAt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementAt.swift; path = RxSwift/Observables/ElementAt.swift; sourceTree = ""; };
- 3602A783BA9219D738AF573B26AA9D87 /* BinaryEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryEncodingVisitor.swift; path = Sources/SwiftProtobuf/BinaryEncodingVisitor.swift; sourceTree = ""; };
- 3656CC96BC0F5389D682BFCA09C75375 /* Message+AnyAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+AnyAdditions.swift"; path = "Sources/SwiftProtobuf/Message+AnyAdditions.swift"; sourceTree = ""; };
- 37EBB11A4A4B8AA9F50C0733DA5C6DAD /* PublishSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishSubject.swift; path = RxSwift/Subjects/PublishSubject.swift; sourceTree = ""; };
- 38C3330D1A5538DCFEE5A321678AE18B /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; };
- 38CF150D0A46AEBF5CAF429ABE9A7D92 /* SynchronizedOnType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedOnType.swift; path = RxSwift/Concurrency/SynchronizedOnType.swift; sourceTree = ""; };
- 38E11C3589185BB8549FC41641BC79C6 /* TimeUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimeUtils.swift; path = Sources/SwiftProtobuf/TimeUtils.swift; sourceTree = ""; };
- 39C342EB200517654BD38B2A0BF2491C /* Completable+AndThen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Completable+AndThen.swift"; path = "RxSwift/Traits/PrimitiveSequence/Completable+AndThen.swift"; sourceTree = ""; };
- 39F8E05578F7BA96876FD1621C74F9F5 /* Google_Protobuf_Value+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Value+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift"; sourceTree = ""; };
- 3A6000F6344CCEC30F8513487BECC76D /* Bag+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bag+Rx.swift"; path = "RxSwift/Extensions/Bag+Rx.swift"; sourceTree = ""; };
- 3CAF08C3F5C0E69929D0D14B6B30D2D1 /* TextFormatEncodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatEncodingOptions.swift; path = Sources/SwiftProtobuf/TextFormatEncodingOptions.swift; sourceTree = ""; };
- 3CB8241675D34228A067068A9D03B97A /* StartWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StartWith.swift; path = RxSwift/Observables/StartWith.swift; sourceTree = ""; };
- 3D5372C4BC0C51DAF90F2B4AFB8DE40C /* Switch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Switch.swift; path = RxSwift/Observables/Switch.swift; sourceTree = ""; };
- 3E80D68527051B9FF1B945CFB925F163 /* TailRecursiveSink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TailRecursiveSink.swift; path = RxSwift/Observers/TailRecursiveSink.swift; sourceTree = ""; };
- 3F9065494FEF8134DA31E985F439602C /* CombineLatest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombineLatest.swift; path = RxSwift/Observables/CombineLatest.swift; sourceTree = ""; };
- 40110C23427AC2BD0E4BF822FB91D518 /* PolarErrors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarErrors.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/api/errors/PolarErrors.swift"; sourceTree = ""; };
- 40274E111C2F27A32591A65CB08B9325 /* timestamp.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = timestamp.pb.swift; path = Sources/SwiftProtobuf/timestamp.pb.swift; sourceTree = ""; };
- 41B048E6988BDC4FEFEB9302FFCD60F9 /* PolarBleApiImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarBleApiImpl.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/PolarBleApiImpl.swift"; sourceTree = ""; };
- 42555751F4B24F022F99A6C47B0AFFF6 /* exercise_samples.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = exercise_samples.pb.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/protobuf/exercise_samples.pb.swift"; sourceTree = ""; };
- 427483D3CA07E49479CB33006A57CD3C /* CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+Collection.swift"; path = "RxSwift/Observables/CombineLatest+Collection.swift"; sourceTree = ""; };
- 42C0AF9BBFFE1D81E2765D39023D10A7 /* FieldTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldTag.swift; path = Sources/SwiftProtobuf/FieldTag.swift; sourceTree = ""; };
- 45904D4625EDA41B3A75940888D7D9F7 /* RetryWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryWhen.swift; path = RxSwift/Observables/RetryWhen.swift; sourceTree = ""; };
- 46B19B473905B112DF7B197338D60983 /* PolarBleSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PolarBleSdk.debug.xcconfig; sourceTree = ""; };
- 46C0E0B1C146DCC25FC4334EC6B740C7 /* CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+arity.swift"; path = "RxSwift/Observables/CombineLatest+arity.swift"; sourceTree = ""; };
- 492EE6372FF7B5522ACBEB8C5A845344 /* JSONEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONEncodingVisitor.swift; path = Sources/SwiftProtobuf/JSONEncodingVisitor.swift; sourceTree = ""; };
- 493FBB4B1476B756AAB3B2BA8310AE69 /* AnonymousDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousDisposable.swift; path = RxSwift/Disposables/AnonymousDisposable.swift; sourceTree = ""; };
- 49725B78A46D132BCB2BB7F0C41495DA /* Never.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Never.swift; path = RxSwift/Observables/Never.swift; sourceTree = ""; };
+ 338A46A30A7867194F0AFDEA2DCE3C43 /* AsyncSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncSubject.swift; path = RxSwift/Subjects/AsyncSubject.swift; sourceTree = ""; };
+ 344C696710F3074C70FA03F238A1F111 /* Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delay.swift; path = RxSwift/Observables/Delay.swift; sourceTree = ""; };
+ 357F77B7B805C1590C141368D667A8AE /* RxSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-umbrella.h"; sourceTree = ""; };
+ 35963177D2046845339FF33A48F304F5 /* HistoricalSchedulerTimeConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalSchedulerTimeConverter.swift; path = RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift; sourceTree = ""; };
+ 35D83489AEDC49EE98F4AB28963FF3C4 /* TextFormatEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatEncodingVisitor.swift; path = Sources/SwiftProtobuf/TextFormatEncodingVisitor.swift; sourceTree = ""; };
+ 360E844886043A6FCFBD4F9C9F7A3AC3 /* Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+arity.swift"; path = "RxSwift/Observables/Zip+arity.swift"; sourceTree = ""; };
+ 3844DDB6F64632CCEFBA369EE81253DE /* Buffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Buffer.swift; path = RxSwift/Observables/Buffer.swift; sourceTree = ""; };
+ 395AF1A91E3328B200E4A010BFE00FAA /* Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rx.swift; path = RxSwift/Rx.swift; sourceTree = ""; };
+ 3B4FE4D28ACA7D333A2AF194DEC203BF /* CompositeDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositeDisposable.swift; path = RxSwift/Disposables/CompositeDisposable.swift; sourceTree = ""; };
+ 3B88D79F287587D3F77FCB39043E3077 /* structures.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = structures.pb.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/protobuf/structures.pb.swift"; sourceTree = ""; };
+ 3C56B5799321B18FE9B67E9EE3B870BA /* LockOwnerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LockOwnerType.swift; path = RxSwift/Concurrency/LockOwnerType.swift; sourceTree = ""; };
+ 3C910EA689D9DD8C825DE74AC77767F5 /* BinaryDecodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDecodingError.swift; path = Sources/SwiftProtobuf/BinaryDecodingError.swift; sourceTree = ""; };
+ 3CCF972540BF9723E6EDC383071F8067 /* BlePsFtpUtility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlePsFtpUtility.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/psftp/BlePsFtpUtility.swift"; sourceTree = ""; };
+ 3CD36DF1053F629500B94E0FF6093E86 /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; };
+ 3CFABEDD1730C29DC8F40ECDF1BE2CEE /* PmdMeasurementType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PmdMeasurementType.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/PmdMeasurementType.swift"; sourceTree = ""; };
+ 3E431087590341E9B0AF4CC322514914 /* RxSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwift-dummy.m"; sourceTree = ""; };
+ 3E4380E468B0F2C4376933299CEB3AB9 /* SwiftProtobuf-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftProtobuf-Info.plist"; sourceTree = ""; };
+ 3E4B27FB7D063D0B3CB3C877E34639C8 /* Completable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Completable.swift; path = RxSwift/Traits/PrimitiveSequence/Completable.swift; sourceTree = ""; };
+ 3FB553355D14D551607874DDC7BFBFA8 /* ExtensionFieldValueSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionFieldValueSet.swift; path = Sources/SwiftProtobuf/ExtensionFieldValueSet.swift; sourceTree = ""; };
+ 40BDEE9375D75085A5CE7C0C6E136726 /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentDispatchQueueScheduler.swift; path = RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; };
+ 40EBD1338BBD248CB9A524F7D09E7CAC /* MainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainScheduler.swift; path = RxSwift/Schedulers/MainScheduler.swift; sourceTree = ""; };
+ 419646CE97FD398D7B06ADC8E572ED85 /* PolarDataUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarDataUtils.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/utils/PolarDataUtils.swift"; sourceTree = ""; };
+ 41B99238505A9FD4A947A8909F17DC78 /* ReplaySubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaySubject.swift; path = RxSwift/Subjects/ReplaySubject.swift; sourceTree = ""; };
+ 42045BCD57C217FBFFD7FFF680699513 /* VirtualTimeScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeScheduler.swift; path = RxSwift/Schedulers/VirtualTimeScheduler.swift; sourceTree = ""; };
+ 424CF24A08B36990A0FA03A743A303FE /* PmdSecret.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PmdSecret.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/PmdSecret.swift"; sourceTree = ""; };
+ 42C045CF619C4086A2CB57107B5C7D49 /* PrimitiveSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Concurrency.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Concurrency.swift"; sourceTree = ""; };
+ 435CE08E97FCC834E3D4EF4615F25DEF /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDispatchQueueScheduler.swift; path = RxSwift/Schedulers/SerialDispatchQueueScheduler.swift; sourceTree = ""; };
+ 46596E30B6DC8A92F6CDB657A88C8787 /* TailRecursiveSink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TailRecursiveSink.swift; path = RxSwift/Observers/TailRecursiveSink.swift; sourceTree = ""; };
+ 470D4963E2A91B967CAD923A5C0D71CF /* nanopb.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = nanopb.pb.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/protobuf/nanopb.pb.swift"; sourceTree = ""; };
+ 4745F99C86CEB3C2F92DFF20E9AC3011 /* RxSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.release.xcconfig; sourceTree = ""; };
+ 487C70AAA6F7C6764D8F0EA5DB526235 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Version.swift; path = Sources/SwiftProtobuf/Version.swift; sourceTree = ""; };
+ 489D025DE31C7625CAE0603C2FF23C85 /* AnonymousDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousDisposable.swift; path = RxSwift/Disposables/AnonymousDisposable.swift; sourceTree = ""; };
+ 49294806630DE336EA50FD2309848EA2 /* BinaryEncodingSizeVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryEncodingSizeVisitor.swift; path = Sources/SwiftProtobuf/BinaryEncodingSizeVisitor.swift; sourceTree = ""; };
+ 497788FCDEBC31DDD3D8A2A6A3741F6B /* AsyncLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncLock.swift; path = RxSwift/Concurrency/AsyncLock.swift; sourceTree = ""; };
+ 49A308CD80B48C2A28172337B3E96053 /* PolarOfflineRecordingData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarOfflineRecordingData.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/api/model/PolarOfflineRecordingData.swift"; sourceTree = ""; };
4AD0B775D2E2D5D996085CBF27B835B5 /* Pods-iosBleSdkTestApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosBleSdkTestApp.release.xcconfig"; sourceTree = ""; };
- 4B88BE3878F3955C605D9EB43221F3B2 /* JSONScanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONScanner.swift; path = Sources/SwiftProtobuf/JSONScanner.swift; sourceTree = ""; };
- 4BE3A243FE99818F833808A7C3EBEC17 /* SubscriptionDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionDisposable.swift; path = RxSwift/Disposables/SubscriptionDisposable.swift; sourceTree = ""; };
- 4CA890CC1D3378BC72011089ED31E15F /* BlePmdClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlePmdClient.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/BlePmdClient.swift"; sourceTree = ""; };
- 4E5E67C31ED8C21BE8E49EF1A51B2563 /* pftp_response.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = pftp_response.pb.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/impl/protobuf/pftp_response.pb.swift"; sourceTree = ""; };
- 4E7CA51BD09B9285D0A17D9DD3342027 /* InvocableScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableScheduledItem.swift; path = RxSwift/Schedulers/Internal/InvocableScheduledItem.swift; sourceTree = ""; };
- 4EE9EFF889500D0DBB1CA459B8045625 /* any.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = any.pb.swift; path = Sources/SwiftProtobuf/any.pb.swift; sourceTree = ""; };
- 4FB7F7F4AF003355909B3450EAEF8691 /* RxSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-prefix.pch"; sourceTree = ""; };
- 5014204371A29786BB8E1CC12F0C6C53 /* AccData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccData.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/model/AccData.swift"; sourceTree = ""; };
- 50A5A80F08579DBEADE80046345566A0 /* Buffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Buffer.swift; path = RxSwift/Observables/Buffer.swift; sourceTree = ""; };
- 522E5C9000A3FEB1B3F05550961D6A8F /* ProtobufMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProtobufMap.swift; path = Sources/SwiftProtobuf/ProtobufMap.swift; sourceTree = ""; };
- 55652D0E74B5767E41EAFA907FD4CD11 /* RxMutableBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxMutableBox.swift; path = RxSwift/RxMutableBox.swift; sourceTree = ""; };
- 5584D6A4F824CC6AA864EA7CD1794C7E /* duration.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = duration.pb.swift; path = Sources/SwiftProtobuf/duration.pb.swift; sourceTree = ""; };
- 56B175C47458873EFA23E1CCEA7B882B /* Visitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Visitor.swift; path = Sources/SwiftProtobuf/Visitor.swift; sourceTree = ""; };
- 56DD720FA1EB2CD24745FA4E4A2D8A97 /* PolarSensorSetting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolarSensorSetting.swift; path = "sources/iOS/ios-communications/Sources/PolarBleSdk/sdk/api/model/PolarSensorSetting.swift"; sourceTree = ""; };
- 59D31CB137632F039EB70C9FA2BBB29B /* field_mask.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = field_mask.pb.swift; path = Sources/SwiftProtobuf/field_mask.pb.swift; sourceTree = ""; };
- 5C64D31E442A90B4A06FA8B04EFF8161 /* Google_Protobuf_Any+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Any+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Any+Extensions.swift"; sourceTree = ""; };
- 5C755A65FBD94FCC287C7D1CF343B47B /* SwitchIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchIfEmpty.swift; path = RxSwift/Observables/SwitchIfEmpty.swift; sourceTree = ""; };
- 5C8431749118C23E98AD51577F2E8CB7 /* BleRssiFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BleRssiFilter.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/advertisement/BleRssiFilter.swift"; sourceTree = ""; };
- 5D8B0816F417FFFFA982C3A7E0BCE491 /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationQueueScheduler.swift; path = RxSwift/Schedulers/OperationQueueScheduler.swift; sourceTree = ""; };
- 5DD620CA45A6BDAFD055748E37CD8C34 /* PpgData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PpgData.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/model/PpgData.swift"; sourceTree = ""; };
- 5DD92141EB2A231684117BD08C4A7794 /* PolarBleSdk-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PolarBleSdk-Info.plist"; sourceTree = ""; };
- 5E882CA4F1046F185884EE8ABD280ACF /* GyrData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GyrData.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/api/model/gatt/client/pmd/model/GyrData.swift"; sourceTree = ""; };
- 626F7FE917BAF13C39B56520299799BC /* RecursiveScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveScheduler.swift; path = RxSwift/Schedulers/RecursiveScheduler.swift; sourceTree = ""; };
- 62EDAA82BF460615F86EBE1FF0A571BB /* api.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = api.pb.swift; path = Sources/SwiftProtobuf/api.pb.swift; sourceTree = ""; };
- 64BFE94EA41B29BD7F5B4A500BB6CF65 /* Generate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generate.swift; path = RxSwift/Observables/Generate.swift; sourceTree = ""; };
- 650A7559858967FAD90E63B324EF83A7 /* CBDeviceListenerImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBDeviceListenerImpl.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/endpoints/corebluetooth/central/CBDeviceListenerImpl.swift"; sourceTree = ""; };
- 660C3A22A0172E5F0CE697692F0B00FF /* Empty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Empty.swift; path = RxSwift/Observables/Empty.swift; sourceTree = ""; };
+ 4BEC522A6F7833321F65B799DEB17985 /* RecursiveScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveScheduler.swift; path = RxSwift/Schedulers/RecursiveScheduler.swift; sourceTree = ""; };
+ 4C2BD3771788729B58A48FDBB3E2C142 /* SimpleExtensionMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SimpleExtensionMap.swift; path = Sources/SwiftProtobuf/SimpleExtensionMap.swift; sourceTree = ""; };
+ 4EA38FB03BCA5E54F878BBE41D8A6B12 /* Message+JSONAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+JSONAdditions.swift"; path = "Sources/SwiftProtobuf/Message+JSONAdditions.swift"; sourceTree = ""; };
+ 4FA458BA151C1CBE27291B8889C51D5A /* Google_Protobuf_Duration+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Duration+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift"; sourceTree = ""; };
+ 4FA6BC48C23E1A05F698A703C12E1A84 /* SynchronizedDisposeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedDisposeType.swift; path = RxSwift/Concurrency/SynchronizedDisposeType.swift; sourceTree = ""; };
+ 504D1E54F974B7FD0D0677E980496401 /* SwiftProtobuf-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftProtobuf-umbrella.h"; sourceTree = ""; };
+ 518E1F2EF762E9E755B2FEED58E44C78 /* TimeUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimeUtils.swift; path = Sources/SwiftProtobuf/TimeUtils.swift; sourceTree = ""; };
+ 51A0A1AEF9FE8479C06D98DFC979BC6C /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; };
+ 51C8320B772AD96A44043695F2C852C7 /* AtomicBoolean.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicBoolean.swift; path = "sources/iOS/ios-communications/Sources/iOSCommunications/ble/common/AtomicBoolean.swift"; sourceTree = ""; };
+ 51CEB634E465F3297C516AA869EAA295 /* UnsafeBufferPointer+Shims.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UnsafeBufferPointer+Shims.swift"; path = "Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift"; sourceTree = ""; };
+ 523C92BF623E9B04D5963939DB5FB30E /* RxSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.debug.xcconfig; sourceTree = ""; };
+ 5258333A84B720410B16697B1B94FC05 /* Single.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Single.swift; path = RxSwift/Traits/PrimitiveSequence/Single.swift; sourceTree = "