diff --git a/Docs/source/accelerometer.rst b/Docs/source/accelerometer.rst index 8f04436..4f50f7e 100644 --- a/Docs/source/accelerometer.rst +++ b/Docs/source/accelerometer.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Accelerometer ============= @@ -14,10 +14,12 @@ One thing common to all accelerometers is the ability to access raw x, y, and z :: - device.accelerometer.sampleFrequency = 100; // Default: 100 Hz - [device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - NSLog(@"X = %f, Y = %f, Z = %f", obj.x, obj.y, obj.z); - }]; + device.accelerometer?.sampleFrequency = 100 + device.accelerometer?.dataReadyEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("X = \(obj.x), Y = \(obj.y), Z = \(obj.z)") + } + }) Raw RMS Data ------------ @@ -26,9 +28,11 @@ You can also access the root mean square (RMS) of the accelerometer data :: - [device.accelerometer.rmsDataReadyEvent startNotificationsWithHandlerAsync:^(MBLRMSAccelerometerData *obj, NSError *error) { - NSLog(@"RMS: %@", obj); - }]; + device.accelerometer?.rmsDataReadyEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("RMS = \(obj.rms)") + } + }) Single Axis Data ---------------- @@ -37,9 +41,11 @@ You can also access a single axis of accelerometer data. :: - [device.accelerometer.xAxisReadyEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"x-axis: %@", obj); - }]; + device.accelerometer?.xAxisReadyEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("x-axis = \(obj.value)") + } + }) Cast to Derived Class --------------------- @@ -48,9 +54,8 @@ To use advanced accelerometer features it's necessary to figure out exactly what :: - if ([device.accelerometer isKindOfClass:[MBLAccelerometerMMA8452Q class]]) { - MBLAccelerometerMMA8452Q *accelerometerMMA8452Q = (MBLAccelerometerMMA8452Q *)device.accelerometer; - } else if ([device.accelerometer isKindOfClass:[MBLAccelerometerBMI160 class]]) { - MBLAccelerometerBMI160 *accelerometerBMI160 = (MBLAccelerometerBMI160 *)device.accelerometer; - } + if let accelerometerMMA8452Q = device.accelerometer as? MBLAccelerometerMMA8452Q { + + } else if let accelerometerBMI160 = device.accelerometer as? MBLAccelerometerBMI160 { + } diff --git a/Docs/source/accelerometerbmi160.rst b/Docs/source/accelerometerbmi160.rst index e612a51..c2864da 100644 --- a/Docs/source/accelerometerbmi160.rst +++ b/Docs/source/accelerometerbmi160.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift AccelerometerBMI160 =================== @@ -12,10 +12,10 @@ Events can be generated for a single or double tap along any of the axis'. :: - accelerometerBMI160.tapType = MBLAccelerometerTapTypeSingle; // Default: Single tap - [accelerometerBMI160.tapEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"Tapped Me!"); - }]; + accelerometerBMI160.tapEvent.type = .single + accelerometerBMI160.tapEvent.startNotificationsAsync(handler: { (obj, error) in + print("Tapped Me!") + }) Notify on Orientation Change ---------------------------- @@ -24,9 +24,11 @@ Events can be generated when an orientation change of the MetaWear occurs. :: - [accelerometerBMI160.orientationEvent startNotificationsWithHandlerAsync:^(MBLOrientationData *obj, NSError *error) { - NSLog(@"Flipped Me: %@", obj); - }]; + accelerometerBMI160.orientationEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Flipped Me: \(obj)") + } + }) Notify when Placed Flat ----------------------- @@ -35,9 +37,11 @@ Events can be generated when the MetaWear is set down on a flat surface, or remo :: - [accelerometerBMI160.flatEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerBoschFlatData *obj, NSError *error) { - NSLog(@"%@" obj.isFlat ? @"Flat" : "Not Flat"); - }]; + accelerometerBMI160.flatEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print(obj.isFlat ? "Flat" : "Not Flat") + } + }) Notify on Step -------------- @@ -46,9 +50,11 @@ Events can be generated when a step pattern is detected. :: - [accelerometerBMI160.stepEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Nice Step!"); - }]; + accelerometerBMI160.stepEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Nice Step!") + } + }) Notify on Freefall ------------------ @@ -57,11 +63,11 @@ Events can be generated when free-fall is detected. :: - accelerometerBMI160.lowOrHighGEvent.highGEnabledAxis = 0; - accelerometerBMI160.lowOrHighGEvent.lowGEnabled = YES; - [accelerometerBMI160.lowOrHighGEvent startNotificationsWithHandlerAsync:^(MBLDataSample *result, NSError *error) { - NSLog(@"Dropped Me!"); - }]; + accelerometerBMI160.lowOrHighGEvent.highGEnabledAxis = .X + accelerometerBMI160.lowOrHighGEvent.lowGEnabled = true; + accelerometerBMI160.lowOrHighGEvent.startNotificationsAsync(handler: { (obj, error) in + print("Dropped Me!") + }) Notify on Shock --------------- @@ -70,13 +76,11 @@ Events can be generated when high acceleration (shock) is detected. :: - accelerometerBMI160.fullScaleRange = MBLAccelerometerBMI160Range16G; - - accelerometerBMI160.lowOrHighGEvent.lowGEnabled = NO; - accelerometerBMI160.lowOrHighGEvent.highGThreshold = 8.0; - accelerometerBMI160.lowOrHighGEvent.highGEnabledAxis = MBLAccelerometerAxisX; - - [accelerometerBMI160.lowOrHighGEvent startNotificationsWithHandlerAsync:^(MBLDataSample *result, NSError *error) { - NSLog(@"8G Shock in X-Axis!"); - }]; + accelerometerBMI160.fullScaleRange = .range16G; + accelerometerBMI160.lowOrHighGEvent.lowGEnabled = false; + accelerometerBMI160.lowOrHighGEvent.highGThreshold = 8.0; + accelerometerBMI160.lowOrHighGEvent.highGEnabledAxis = .X; + accelerometerBMI160.lowOrHighGEvent.startNotificationsAsync(handler: { (obj, error) in + print("8G Shock in X-Axis!") + }) diff --git a/Docs/source/accelerometermma8452q.rst b/Docs/source/accelerometermma8452q.rst index e7b273d..cc0e891 100644 --- a/Docs/source/accelerometermma8452q.rst +++ b/Docs/source/accelerometermma8452q.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift AccelerometerMMA8452Q ===================== @@ -12,11 +12,11 @@ Events can be generated for a single or double tap along any of the axis'. :: - accelerometerMMA8452Q.tapDetectionAxis = MBLAccelerometerAxisX; // Default: X-axis tap - accelerometerMMA8452Q.tapType = MBLAccelerometerTapTypeSingle; // Default: Single tap - [accelerometerMMA8452Q.tapEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"Tapped Me!"); - }]; + accelerometerMMA8452Q.tapDetectionAxis = .X + accelerometerMMA8452Q.tapType = .single + accelerometerMMA8452Q.tapEvent.startNotificationsAsync(handler: { (obj, error) in + print("Tapped Me!") + }) Notify on Orientation Change ---------------------------- @@ -25,9 +25,11 @@ Events can be generated when an orientation change of the MetaWear occurs. :: - [accelerometerMMA8452Q.orientationEvent startNotificationsWithHandlerAsync:^(MBLOrientationData *obj, NSError *error) { - NSLog(@"Flipped Me: %@", obj); - }]; + accelerometerMMA8452Q.orientationEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Flipped Me: \(obj)") + } + }) Notify on Free Fall ------------------- @@ -36,9 +38,11 @@ Events can be generated when the MetaWear goes into free fall. :: - [accelerometerMMA8452Q.freeFallEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"Dropped Me!"); - }]; + accelerometerMMA8452Q.freeFallEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Dropped Me!") + } + }) Notify on Shake --------------- @@ -47,7 +51,9 @@ Events can be generated when you shake the MetaWear. :: - [accelerometerMMA8452Q.shakeEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"Yeah YOU! Shook me all night long"); - }]; + accelerometerMMA8452Q.shakeEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Yeah YOU! Shook me all night long") + } + }) diff --git a/Docs/source/advanced_features.rst b/Docs/source/advanced_features.rst new file mode 100755 index 0000000..93a63ce --- /dev/null +++ b/Docs/source/advanced_features.rst @@ -0,0 +1,55 @@ +.. highlight:: swift + +Advanced Features +================= + +High Frequency Streaming +------------------------ + +Some developers may want to stream data from multiple motion sensors simultaneously or individually at frequencies higher than 100Hz. To accommodate this use case, accelerometer and gyro have a packed output mode that combines 3 data samples into 1 ble packet increasing the data throughput by 3x. Simply enable notifications on the ``packedDataReadEvent`` to use this feature. + +Persistent Configuration +------------------------ + +``MBLRestorable`` object containing custom settings and events that are programmed to the MetaWear and preserved between disconnects and app termination. + +Use ``setConfigurationAsync`` to assign a new configuration object to this MetaWear. This only needs to be called once, likely after you confirm the device from a scanning screen or such. Upon calling it will erase all non-volatile memory the device (which requires disconnect), then perform reset, once its comes back online we will connect and invoke the runOnDeviceBoot method. All calls in that method are persisted device side so after any future reset these settings will be applied automatically. + +The properties of the configuration objected are automatically persisted to disk after interactions with the board. If, however, you make changes to various module setting without acutally interacting, then it may be useful to call ``synchronizeAsync`` to force a save to disk. + +:: + + device.setConfigurationAsync(DeviceConfiguration()).success { _ in + print("Settings successfully applied") + }.failure { error in + print("Something went wrong, we should try again: \(error)") + } + +Updating Firmware +----------------- + +The firmware running on the MetaWear is periodically updated by MbientLab with additional features and bug-fixes. To update, you first call a MetaWear API which puts the device in a special bootloader mode, then use the Nordic Semiconductor `IOS-DFU-Librarly `_ to upload the new firmware. We recommend looking at our `Sample App `_ for an example on how to integrate. + +This is one API you can call WITHOUT being connected, there are some cases where you can't connect because the firmware is too old, but you still need to be able to update it! + +:: + + device.prepareForFirmwareUpdateAsync().success { result in + var selectedFirmware: DFUFirmware? + if result.firmwareUrl.pathExtension.caseInsensitiveCompare("zip") == .orderedSame { + selectedFirmware = DFUFirmware(urlToZipFile: result.firmwareUrl) + } else { + selectedFirmware = DFUFirmware(urlToBinOrHexFile: result.firmwareUrl, urlToDatFile: nil, type: .application) + } + self.initiator = DFUServiceInitiator(centralManager: result.centralManager, target: result.target) + let _ = self.initiator?.with(firmware: selectedFirmware!) + self.initiator?.forceDfu = true // We also have the DIS which confuses the DFU library + self.initiator?.logger = self // - to get log info + self.initiator?.delegate = self // - to be informed about current state and errors + self.initiator?.peripheralSelector = self + self.initiator?.progressDelegate = self // - to show progress bar + + self.dfuController = self.initiator?.start() + }.failure { error in + print("Something went wrong, we should try again in 60 seconds: \(error)") + } diff --git a/Docs/source/ambient_light.rst b/Docs/source/ambient_light.rst index cdadf11..15c0f65 100644 --- a/Docs/source/ambient_light.rst +++ b/Docs/source/ambient_light.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Ambient Light ============= @@ -14,7 +14,5 @@ There is currently nothing in the generic ``MBLAmbientLight`` class, so you need :: - if ([device.ambientLight isKindOfClass:[MBLAmbientLightLTR329 class]]) { - MBLAmbientLightLTR329 *ambientLightLTR329 = (MBLAmbientLightLTR329 *)device.ambientLight; + if let ambientLightLTR329 = device.ambientLight as? MBLAmbientLightLTR329 { } - diff --git a/Docs/source/ambientlightltr329.rst b/Docs/source/ambientlightltr329.rst index d72f725..e978e93 100644 --- a/Docs/source/ambientlightltr329.rst +++ b/Docs/source/ambientlightltr329.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift AmbientLightLTR329 ================== @@ -12,12 +12,13 @@ This ambient light sensor has a built in timer, so you can program it directly t :: - ambientLightLTR329.gain = MBLAmbientLightLTR329Gain1X; + ambientLightLTR329.gain = .gain1X; // Have the sensor measure over 100ms - ambientLightLTR329.integrationTime = MBLAmbientLightLTR329Integration100ms; + ambientLightLTR329.integrationTime = .integration100ms; // Perform a new measurement each second - ambientLightLTR329.measurementRate = MBLAmbientLightLTR329Rate1000ms; - [ambientLightLTR329.periodicIlluminance startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"ambient light: %f lux", obj.value.floatValue); - }]; - + ambientLightLTR329.measurementRate = .rate1000ms; + ambientLightLTR329.periodicIlluminance.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("ambient light: \(obj.value.doubleValue) lux") + } + }) diff --git a/Docs/source/ancs.rst b/Docs/source/ancs.rst index 02d2147..22ef7af 100644 --- a/Docs/source/ancs.rst +++ b/Docs/source/ancs.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift ANCS ==== @@ -14,10 +14,10 @@ It's simple to have the MetaWear flash when a notification comes in. :: - MBLEvent *ancs = [device.ancs eventWithCategoryIds:MBLANCSCategoryIDAny]; - [ancs programCommandsToRunOnEventAsync:^{ - [device.led flashLEDColorAsync:[UIColor redColor] withIntensity:1.0]; - }]; + let ancs = device.ancs?.event(withCategoryIds: .any) + ancs?.programCommandsToRunOnEventAsync { + device.led?.flashColorAsync(.red, withIntensity: 1.0) + } Filter Notification Events -------------------------- @@ -26,13 +26,12 @@ You may want to be notified when you get a message from a special someone: :: - MBLEvent *ancs = [device.ancs eventWithCategoryIds:MBLANCSCategoryIDAny - eventIds:MBLANCSEventIDNotificationAdded - eventFlags:MBLANCSEventFlagAny - attributeId:MBLANCSNotificationAttributeIDTitle - attributeData:@"John Doe"]; - [ancs programCommandsToRunOnEventAsync:^{ - [device.led flashLEDColorAsync:[UIColor greenColor] withIntensity:1.0 numberOfFlashes:5]; - [device.hapticBuzzer startHapticWithDutyCycleAsync:255 pulseWidth:500 completion:nil]; - }]; - + let ancs = device.ancs?.event(withCategoryIds: .any, + eventIds: .notificationAdded, + eventFlags: .init(rawValue: 0), + attributeId: .title, + attributeData: "John Doe") + ancs?.programCommandsToRunOnEventAsync { + device.led?.flashColorAsync(.green, withIntensity: 1.0, numberOfFlashes: 5) + device.hapticBuzzer?.startHapticAsync(dutyCycle: 255, pulseWidth: 500, completion: nil) + } diff --git a/Docs/source/barometer.rst b/Docs/source/barometer.rst index f82c60f..44fc235 100644 --- a/Docs/source/barometer.rst +++ b/Docs/source/barometer.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Barometer ========= @@ -14,9 +14,9 @@ One thing common to all ambient light sensors is the ability to measure the ambi :: - [[device.barometer.pressure readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"pressure: %f pascals", result.value.floatValue); - }]; + device.barometer?.pressure.readAsync().success { result in + print("pressure: \(result.value.doubleValue) pascals") + } Altitude Reading ---------------- @@ -25,9 +25,9 @@ Often times what you really want is an estimation of current altitude above sea :: - [[device.barometer.altitude readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"altitude: %f meters", result.value.floatValue); - }]; + device.barometer?.altitude.readAsync().success { result in + print("altitude: \(result.value.doubleValue) meters") + } Cast to Derived Class --------------------- @@ -36,7 +36,5 @@ To use advanced barometer features it's necessary to figure out exactly what bar :: - if ([device.barometer isKindOfClass:[MBLBarometerBMP280 class]]) { - MBLBarometerBMP280 *barometerBMP280 = (MBLBarometerBMP280 *)device.barometer; + if let barometerBMP280 = device.barometer as? MBLBarometerBMP280 { } - diff --git a/Docs/source/barometerbmp280.rst b/Docs/source/barometerbmp280.rst index 35daedc..5a75ed0 100644 --- a/Docs/source/barometerbmp280.rst +++ b/Docs/source/barometerbmp280.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift BarometerBMP280 =============== @@ -13,16 +13,17 @@ This barometer has a built in timer, so you can program it to directly perform p :: // Use the oversampling mode to balance power vs performance - barometerBMP280.pressureOversampling = MBLBarometerBMP280OversampleUltraHighResolution; + barometerBMP280.pressureOversampling = .ultraHighResolution; // Use the builtin average filter to eliminate short term noise - barometerBMP280.hardwareAverageFilter = MBLBarometerBMP280FilterAverage16; + barometerBMP280.hardwareAverageFilter = .average16; // This determines how long the device will sleep between samples, // so it's not directly the period, since the sample itself can // take several ms to complete. - barometerBMP280.standbyTime = MBLBarometerBMP280Standby0_5; - - // Or you can use periodicPressure below - [barometerBMP280.periodicAltitude startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"altitude: %f meters", obj.value.floatValue); - }]; + barometerBMP280.standbyTime = .standby0_5; + // Or you can use periodicPressure below + barometerBMP280.periodicAltitude.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("altitude: \(obj.value.doubleValue) meters") + } + }) diff --git a/Docs/source/color_sensor.rst b/Docs/source/color_sensor.rst new file mode 100644 index 0000000..730073a --- /dev/null +++ b/Docs/source/color_sensor.rst @@ -0,0 +1,18 @@ +.. highlight:: swift + +Color Sensor +============ + +Similiar to :doc:`ambient light sensors `, color sensors are responsive to light, however they are typically manufactured to only capture red, green, and blue light though some models are responsive to all visible light. MetaEnvironment boards come equipped with a builtin photometer (color sensor). It's configured via properties on the `MBLPhotometer `_ class. + +To meet specific needs, different MetaWear models may have different photometers, so the ``MBLPhotometer`` class is actually a generic abstraction of all photometers. You can up-cast to one of our derived photometers objects in order to access advanced features. + + +Cast to Derived Class +--------------------- + +There is currently nothing in the generic ``MBLPhotometer`` class, so you need to use the `MBLPhotometerTCS3472 `_ derived class. +:: + + if let photometerTCS3472 = device.photometer as? MBLPhotometerTCS3472 { + } diff --git a/Docs/source/color_sensor_tcs3472.rst b/Docs/source/color_sensor_tcs3472.rst new file mode 100644 index 0000000..e658287 --- /dev/null +++ b/Docs/source/color_sensor_tcs3472.rst @@ -0,0 +1,37 @@ +.. highlight:: swift + +Color Sensor TCS3472 +==================== + +This specific color sensor is configured via properties on the `MBLPhotometerTCS3472 `_ class. This section shows how to use its advanced features. + + +Configuration +------------- +The color sensor has 2 configurable parameters that affect the data range, resultion, and sensitivity. + +================ ============================================ +Parameter Description +================ ============================================ +Gain Analog signal scale +Integration Time Amount of time spent to aggregate adc values +================ ============================================ + +There is also a white illuminator LED next to the sensor that can be used to provide additional light if the surrounding area is too dark. + +:: + + // set gain to 4x, integration time to 4.8ms, + // keep illuminator led off + photometerTCS3472.gain = .gain4X + photometerTCS3472.integrationTime = 4.8 + +ADC Values +---------- +The red, green, blue, and clear ADC values measured by the TCS3472 device are represented by the `MBLRGBData `_ class. + +:: + + photometerTCS3472.color?.readAsync().success { result in + print("color adc = \(result)") + } diff --git a/Docs/source/conf.py b/Docs/source/conf.py index 635f2ce..ed0387b 100644 --- a/Docs/source/conf.py +++ b/Docs/source/conf.py @@ -29,7 +29,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = [] +extensions = ['sphinx.ext.autosectionlabel'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -47,7 +47,7 @@ # General information about the project. project = 'MetaWear iOS/macOS/tvOS API' -copyright = '2016, MbientLab' +copyright = '2017, MbientLab' author = 'MbientLab' # The version info for the project you're documenting, acts as replacement for @@ -55,9 +55,9 @@ # built documents. # # The short X.Y version. -version = '2.8.3' +version = '2.8.4' # The full version, including alpha/beta/rc tags. -release = '2.8.3' +release = '2.8.4' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/Docs/source/core_modules.rst b/Docs/source/core_modules.rst new file mode 100755 index 0000000..bc66489 --- /dev/null +++ b/Docs/source/core_modules.rst @@ -0,0 +1,13 @@ +Core Modules +============ +The MetaWear firmware comes with several powerful features that enable developers to fine-tune their board configuration for specific use cases. +Outside of the :doc:`sensor_fusion` module (MetaMotion only), all of these features are available on every board. + +.. toctree:: + :hidden: + :maxdepth: 1 + + data_processor + sensor_fusion + settings + timer diff --git a/Docs/source/data.rst b/Docs/source/data.rst index 892db07..72e9ad2 100644 --- a/Docs/source/data.rst +++ b/Docs/source/data.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Data ==== @@ -14,11 +14,11 @@ One of the most basic use cases is to simply receive the data on your Apple devi :: - MBLGPIOPin *pin0 = self.device.gpio.pins[0]; - [[pin0.digitalValue readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"Pin Value: %@", result); - result.value.boolValue ? NSLog(@"Pressed!") : NSLog(@"Released!"); - }]; + if let pin0 = device.gpio?.pins.first { + pin0.digitalValue?.readAsync().success { result in + print("Pin Value: \(result)") + } + } Periodic Reads -------------- @@ -27,11 +27,12 @@ By periodically reading data, you conceptually turn it into an asynchronous even :: - MBLGPIOPin *pin0 = device.gpio.pins[0]; - MBLEvent *periodicPinValue = [pin0.analogAbsolute periodicReadWithPeriod:100]; - [periodicPinValue startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Analog Value: %@", obj); - }]; + if let pin0 = device.gpio?.pins.first { + let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) + periodicPinValue?.startNotificationsAsync(handler: { (obj, error) in + print("Analog Value: \(obj)") + }) + } Triggered Reads --------------- @@ -41,9 +42,10 @@ Another interesting feature is the ability to have an ``MBLEvent`` trigger a rea :: // NOTE: This i2c register is just an example, it might not return anything on your exact board - MBLI2CData *whoami = [device.serial dataAtDeviceAddress:0x1C registerAddress:0x0D length:1]; - MBLEvent *event = [device.mechanicalSwitch.switchUpdateEvent readDataOnEvent:whoami]; - [event startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"%@", obj); - }]; + if let whoami = device.serial?.data(atDeviceAddress: 0x1C, registerAddress: 0x0D, length: 1) as? MBLData { + let event = device.mechanicalSwitch?.switchUpdateEvent.readData(onEvent: whoami) + event?.startNotificationsAsync(handler: { (obj, error) in + print("\(obj)") + }) + } diff --git a/Docs/source/data_processor.rst b/Docs/source/data_processor.rst new file mode 100644 index 0000000..d41c20f --- /dev/null +++ b/Docs/source/data_processor.rst @@ -0,0 +1,216 @@ +.. highlight:: swift + +Data Processor +============== + +Filtered data is represented by the `MBLFilter `_ class. You create filter objects by calling one of the filters methods on the `MBLEvent `_ object (which serves as the input). + +Since `MBLFilter `_ derives from `MBLEvent `_, all of the features available to events are available to filters, and filters can be chained together to perform complex processing. + +Summation (accumulator) +----------------------- + +One simple filter is the accumulator, which simply adds together all the input values. + +:: + + let switchPressCount = device.mechanicalSwitch?.switchUpdateEvent.summationOfEvent() + switchPressCount?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Switch Change Count: \(obj)") + } + }) + +Average +------- + +A very useful DSP technique for filtering out noise is averaging. This is how use the averaging filter: + +The depth parameter determines how many pervious samples get averaged together. This means the first output won't occur until N input events occur. + +NOTE: This uses a recursive average technique so the answers are approximate. +NOTE: This works fastest when depth is a power of 2 + +:: + + if let pin0 = device.gpio?.pins.first { + let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) + let averagePinValue = periodicPinValue?.averageOfEvent(withDepth: 8) + averagePinValue?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Analog Value: \(obj)") + } + }) + } + +Comparison +---------- + +You may want to conditionally ignore some values coming from sensors. Here is an example: + +:: + + if let pin0 = device.gpio?.pins.first { + let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) + let filteredPinValue = periodicPinValue?.compare(using: .greaterThan, data: [1.0], output: .value) + filteredPinValue?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Pin Value Over 1.0V: \(obj)") + } + }) + } + +Or you may want to quickly see what range a sensor value is in. Here is an example: + +:: + + if let pin0 = device.gpio?.pins.first { + let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) + let filteredPinValue = periodicPinValue?.compare(using: .lessThan, data: [0.5, 1.0, 2.0], output: .zone) + filteredPinValue?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + // Zone Map + // 0 == [0, 0.5) + // 1 == [0.5, 1.0) + // 2 == [1.0, 2.0) + // 3 == [2.0, inf) + print("Pin in zone: \(obj)") + } + }) + } + +Modify +------ + +You can apply basic math operations to data as well. We support add/subtract/multiply/divide, and the others listed in `MBLArithmeticOperation `_. Here are some examples of how you might initialize them: + +:: + + let temp = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) + let doubleTemp = temp?.modifyEvent(using: .multiply, withData: 2) + let halfTemp = temp?.modifyEvent(using: .divide, withData: 2) + let fiftyLessTemp = temp?.modifyEvent(using: .subtract, withData: 50.0) + let absTemp = fiftyLessTemp?.modifyEvent(using: .absoluteValue, withData: 0) + +Periodic Sampling +----------------- + +If you want control over the frequency an event occurs you can use a periodic sampling filter. It simply stores the most recent value from the input and passes it through at a predefined interval. This is useful for taking high frequency events, and logging them at a lower frequency. + +Here we accumulate RMS data from the accelerometer and log it every 20 seconds: + +:: + + // The rmsDataReadyEvent event will occur at the accelerometer sample frequency (i.e. every 10ms) + let runningRMS = device.accelerometer?.rmsDataReadyEvent.summationOfEvent() + // Since we don't need absolute precision, we can just log the value every 20 seconds + // and recreate an approximate graph later + let periodicRMS = runningRMS?.periodicSample(ofEvent: 20000) + periodicRMS?.startLoggingAsync() + +Differential Sampling +--------------------- + +Similar to Periodic Sampling, but instead of passing through the last value of the input directly, it reports the difference between the last value reported and the current value. + +:: + + // The rmsDataReadyEvent event will occur at the accelerometer sample frequency (i.e. every 10ms) + let runningRMS = device.accelerometer?.rmsDataReadyEvent.summationOfEvent() + // Since we don't need absolute precision, we can just log the differnce every 20 seconds + // and recreate an approximate graph later + let differentialRMS = runningRMS?.differentialSample(ofEvent: 20000) + differentialRMS?.startLoggingAsync() + +Delay +----- + +The delay filter buffers N samples of input, and after N input events are generated, the filter passes through the first input. + +:: + + let delayedSwitch = device.mechanicalSwitch?.switchUpdateEvent.delayOfEvent(withCount: 3) + delayedSwitch?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print(obj) + } + }) + +Pulse +----- + +The pulse filter detect pulses in the input signal. It works on a simple principal that a pulse occurs when a signal goes over a given threshold for N samples. + +:: + + let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) + let pulseEvent = temperatureEvent?.pulseDetectorOfEvent(withThreshold: 25.0, width: 10, output: .area) + pulseEvent?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Temp Pulsed!: \(obj)") + } + }) + +Conditional Data Switch +----------------------- + +This filter can pass data through or not, also you may programmatically activate or deactivate the switch. + +:: + + let presses = device.mechanicalSwitch?.switchUpdateEvent.conditionalDataSwitch(true) + presses?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print(obj) + } + }) + // Turn off the filter after 3 seconds + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + presses?.resetConditionalAsync(false) + } + +Counting Data Switch +-------------------- + +This filter can pass N samples through, and all subsequent events are blocked. + +:: + + let twoPresses = device.mechanicalSwitch?.switchUpdateEvent.countingDataSwitch(2) + twoPresses?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print(obj) + } + }) + +Delta +----- + +This filter monitors a signal and notifies when the signal value changes by a given delta. + +:: + + let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) + // Get notifications when it changes by 2 degrees C + let deltaTemperatureEvent = temperatureEvent?.changeOfEvent(byDelta: 3.0, output: .absolute) + deltaTemperatureEvent?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Temp Changed!: \(obj)") + } + }) + +Threshold +--------- + +This filter monitors a signal and notifies when it crosses a given threshold. It also takes a hysteresis value to prevent multiple events if the signal oscillates right on the threshold. + +:: + + let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) + // Get notifications when it crosses 25 degrees C + let thresholdEvent = temperatureEvent?.change(ofEventAcrossThreshold: 25.0, hysteresis: 2.0, output: .absolute) + thresholdEvent?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Temp Crossed Threshold!: \(obj)") + } + }) diff --git a/Docs/source/events.rst b/Docs/source/events.rst index 75da504..622d176 100644 --- a/Docs/source/events.rst +++ b/Docs/source/events.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Events ====== @@ -16,28 +16,29 @@ Notifications One of the most basic use cases is to simply receive the data on your Apple device. This is done via blocks within your app. When an event occurs you get a callback with an event specific object containing all relevant data. In this example, we setup a trigger that notifies us when there is a change detected in the value of GPIO pin 0 and logs a message upon receipt of that notification. -Events will continue to stream in until the device is disconnected, or you call ``stopNotificationsAsync:`` +Events will continue to stream in until the device is disconnected, or you call ``stopNotificationsAsync`` You can check if an event is currently streaming by checking the ``isNotifying`` property. :: - MBLGPIOPin *pin0 = device.gpio.pins[0]; - [pin0.changeEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Cool, the pin changed: %@", obj); - }]; + if let pin0 = device.gpio?.pins.first { + pin0.changeEvent?.startNotificationsAsync(handler: { (obj, error) in + print("Cool, the pin changed: " + String(describing: obj)) + }) + } :: - [pin0.changeEvent stopNotificationsAsync]; - pin0.changeEvent.isNotifying + pin0.changeEvent?.stopNotificationsAsync() + pin0.changeEvent?.isNotifying() Command ------- In order to free the MetaWear from needing constant phone connection, we can program the device to perform certain actions when an event occurs. It's a basic "If then " paradigm. The magic being, all logic is stored on the MetaWear, so it works even with the Apple device disconnected. -The device will continue to perform on until you either reset the device or call ``eraseCommandsToRunOnEvent:`` +The device will continue to perform on until you either reset the device or call ``programCommandsToRunOnEventAsync`` You can check if an event is currently programmed by checking the ``hasCommands`` property. @@ -47,14 +48,14 @@ There are some important details to consider when using this feature. At the lo :: // Flash the LED when you press the button - [device.mechanicalSwitch.switchUpdateEvent programCommandsToRunOnEventAsync:^{ - [device.led flashLEDColorAsync:[UIColor redColor] withIntensity:1.0 numberOfFlashes:3]; - }]; + device.mechanicalSwitch?.switchUpdateEvent.programCommandsToRunOnEventAsync { + device.led?.flashColorAsync(.red, withIntensity: 1.0, numberOfFlashes: 3) + } :: - [self.device.mechanicalSwitch.switchUpdateEvent eraseCommandsToRunOnEvent]; - self.device.mechanicalSwitch.switchUpdateEvent.hasCommands + device.mechanicalSwitch?.switchUpdateEvent.eraseCommandsToRunOnEventAsync() + device.mechanicalSwitch?.switchUpdateEvent.hasCommands() Logging ------- @@ -65,23 +66,24 @@ Once you start logging you can disconnect and even kill the app. Later on, re-co :: - [device.mechanicalSwitch.switchUpdateEvent startLoggingAsync]; + device.mechanicalSwitch?.switchUpdateEvent.startLoggingAsync() :: - [[device.mechanicalSwitch.switchUpdateEvent downloadLogAndStopLoggingAsync:YES progressHandler:^(float number) { - // Update progress bar, as this can take upwards of one minute to download a full log - }] success:^(NSArray * _Nonnull result) { + device.mechanicalSwitch?.switchUpdateEvent.downloadLogAndStopLoggingAsync(true, progressHandler: { number in + // Update progress bar, as this can take anywhere from one minute + // to a couple hours to download a full log + }).success({ result in // array contains all the log entries - for (MBLNumericData *entry in result) { - NSLog(@"Entry: %@", entry); + for entry in result { + print("Entry: " + String(describing: entry)) } - }]; + }) Filters ------- Many of the events generated are raw sensor output, to help make sense of this data, MetaWear has several digital signal processing (DSP) functions builtin. To use filters you call one of the "create filter" functions on an event object and it will return a new event object! When you turn on notifications or logging of this new event, you will see the filtered data. -Since the filters work at the firmware level, they too function when the device is disconnected. See the section on :doc:`filters` for details. +Since the filters work at the firmware level, they too function when the device is disconnected. See the section on :doc:`data_processor` for details. diff --git a/Docs/source/filters.rst b/Docs/source/filters.rst deleted file mode 100644 index 0388543..0000000 --- a/Docs/source/filters.rst +++ /dev/null @@ -1,194 +0,0 @@ -.. highlight:: Objective-C - -Filters -======= - -Filtered data is represented by the `MBLFilter `_ class. You create filter objects by calling one of the filters methods on the `MBLEvent `_ object (which serves as the input). - -Since `MBLFilter `_ derives from `MBLEvent `_, all of the features available to events are available to filters, and filters can be chained together to perform complex processing. - -Summation (accumulator) ------------------------ - -One simple filter is the accumulator, which simply adds together all the input values. - -:: - - MBLFilter *switchPressCount = [device.mechanicalSwitch.switchUpdateEvent summationOfEvent]; - [switchPressCount startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Switch Change Count: %@", obj); - }]; - -Average -------- - -A very useful DSP technique for filtering out noise is averaging. This is how use the averaging filter: - -The depth parameter determines how many pervious samples get averaged together. This means the first output won't occur until N input events occur. - -NOTE: This uses a recursive average technique so the answers are approximate. -NOTE: This works fastest when depth is a power of 2 - -:: - - MBLGPIOPin *pin0 = device.gpio.pins[0]; - MBLEvent *periodicPinValue = [pin0.analogAbsolute periodicReadWithPeriod:100]; - MBLEvent *averagePinValue = [periodicPinValue averageOfEventWithDepth:8]; - [averagePinValue startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Analog Value: %@", obj); - }]; - -Comparison ----------- - -You may want to conditionally ignore some values coming from sensors. Here is an example: - -:: - - MBLGPIOPin *pin0 = device.gpio.pins[0]; - MBLEvent *periodicPinValue = [pin0.analogAbsolute periodicReadWithPeriod:100]; - MBLEvent *filteredPinValue = [periodicPinValue compareEventUsingOperation:MBLComparisonOperationGreaterThan data:@[@1.0] output:MBLComparisonOutputValue]; - [filteredPinValue startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Pin Value Over 1.0V: %@", obj); - }]; - -Or you may want to quickly see what range a sensor value is in. Here is an example: - -:: - - MBLGPIOPin *pin0 = device.gpio.pins[0]; - MBLEvent *periodicPinValue = [pin0.analogAbsolute periodicReadWithPeriod:100]; - MBLEvent *filteredPinValue = [periodicPinValue compareEventUsingOperation:MBLComparisonOperationLessThan data:@[@0.5, @1.0, @2.0] output:MBLComparisonOutputZone]; - [filteredPinValue startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - // Zone Map - // 0 == [0, 0.5) - // 1 == [0.5, 1.0) - // 2 == [1.0, 2.0) - // 3 == [2.0, inf) - NSLog(@"Pin in zone: %@", obj); - }]; - -Modify ------- - -You can apply basic math operations to data as well. We support add/subtract/multiply/divide, and the others listed in `MBLArithmeticOperation `_. Here are some examples of how you might initialize them: - -:: - - MBLEvent *temp = [device.temperature.onDieThermistor periodicReadWithPeriod:500]; - MBLFilter *doubleTemp = [temp modifyEventUsingOperation:MBLArithmeticOperationMultiply withData:2]; - MBLFilter *halfTemp = [temp modifyEventUsingOperation:MBLArithmeticOperationDivide withData:2]; - MBLFilter *fiftyLessTemp = [temp modifyEventUsingOperation:MBLArithmeticOperationSubtract withData:50.0]; - MBLFilter *absTemp = [fiftyLessTemp modifyEventUsingOperation:MBLArithmeticOperationAbsoluteValue withData:0]; - -Periodic Sampling ------------------ - -If you want control over the frequency an event occurs you can use a periodic sampling filter. It simply stores the most recent value from the input and passes it through at a predefined interval. This is useful for taking high frequency events, and logging them at a lower frequency. - -Here we accumulate RMS data from the accelerometer and log it every 20 seconds: - -:: - - // The rmsDataReadyEvent event will occur at the accelerometer sample frequency (i.e. every 10ms) - MBLFilter *runningRMS = [device.accelerometer.rmsDataReadyEvent summationOfEvent]; - // Since we don't need absolute precision, we can just log the value every 20 seconds - // and recreate an approximate graph later - MBLFilter *periodicRMS = [runningRMS periodicSampleOfEvent:20000]; - [periodicRMS startLoggingAsync]; - -Differential Sampling ---------------------- - -Similar to Periodic Sampling, but instead of passing through the last value of the input directly, it reports the difference between the last value reported and the current value. - -:: - - // The rmsDataReadyEvent event will occur at the accelerometer sample frequency (i.e. every 10ms) - MBLFilter *runningRMS = [device.accelerometer.rmsDataReadyEvent summationOfEvent]; - // Since we don't need absolute precision, we can just log the differnce every 20 seconds - // and recreate an approximate graph later - MBLFilter *differentialRMS = [runningRMS differentialSampleOfEvent:20000]; - [differential startLoggingAsync]; - -Delay ------ - -The delay filter buffers N samples of input, and after N input events are generated, the filter passes through the first input. - -:: - - MBLFilter *delayedSwitch = [device.mechanicalSwitch.switchUpdateEvent delayOfEventWithCount:3]; - [delayedSwitch startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; - -Pulse ------ - -The pulse filter detect pulses in the input signal. It works on a simple principal that a pulse occurs when a signal goes over a given threshold for N samples. - -:: - - MBLEvent *temperatureEvent = [device.temperature.onDieThermistor periodicReadWithPeriod:500]; - MBLEvent *pulseEvent = [temperatureEvent pulseDetectorOfEventWithThreshold:25.0 width:10 output:MBLPulseOutputArea]; - [pulseEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Temp Pulsed!: %@", obj); - }]; - -Conditional Data Switch ------------------------ - -This filter can pass data through or not, also you may programmatically activate or deactivate the switch. - -:: - - MBLDataSwitch *presses = [device.mechanicalSwitch.switchUpdateEvent conditionalDataSwitch:YES]; - [presses startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; - // Turn off the filter after 3 seconds - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [presses resetConditionalAsync:NO]; - }); - -Counting Data Switch --------------------- - -This filter can pass N samples through, and all subsequent events are blocked. - -:: - - MBLDataSwitch *twoPresses = [device.mechanicalSwitch.switchUpdateEvent countingDataSwitch:2]; - [twoPresses startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; - -Delta ------ - -This filter monitors a signal and notifies when the signal value changes by a given delta. - -:: - - MBLEvent *temperatureEvent = [device.temperature.onDieThermistor periodicReadWithPeriod:500]; - // Get notifications when it changes by 2 degrees C - MBLEvent *deltaTemperatureEvent = [temperatureEvent changeOfEventByDelta:2.0 output:MBLDeltaValueOutputAbsolute]; - [deltaTemperatureEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Temp Changed!: %@", obj); - }]; - -Threshold ---------- - -This filter monitors a signal and notifies when it crosses a given threshold. It also takes a hysteresis value to prevent multiple events if the signal oscillates right on the threshold. - -:: - - MBLEvent *temperatureEvent = [device.temperature.onDieThermistor periodicReadWithPeriod:500]; - // Get notifications when it crosses 25 degrees C - MBLEvent *thresholdEvent = [temperatureEvent changeOfEventAcrossThreshold:25.0 hysteresis:2.0 output:MBLThresholdValueOutputAbsolute]; - [thresholdEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Temp Crossed Threshold!: %@", obj); - }]; - diff --git a/Docs/source/gen_api_reference.sh b/Docs/source/gen_api_reference.sh new file mode 100755 index 0000000..980887f --- /dev/null +++ b/Docs/source/gen_api_reference.sh @@ -0,0 +1,5 @@ +appledoc -p "MetaWear iOS/macOS/tvOS API 2.8.4" --project-version "2.8.4" -c "MBIENTLAB INC" --company-id com.mbientlab --no-create-docset --no-repeat-first-par --ignore .m -o . ../MetaWear/Classes +open html/index.html + +make html +open build/html/index.html diff --git a/Docs/source/gpio.rst b/Docs/source/gpio.rst index 91126f6..f192219 100644 --- a/Docs/source/gpio.rst +++ b/Docs/source/gpio.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift GPIO ==== @@ -14,10 +14,11 @@ To check the digital (0 or 1) value of a pin, just get a pointer to the correspo :: - MBLGPIOPin *pin0 = device.gpio.pins[0]; - [[pin0.digitalValue readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"Pin State: %d", result.value.boolValue); - }]; + if let pin0 = device.gpio?.pins.first { + pin0.digitalValue?.readAsync().success { result in + print("Pin State: \(result)") + } + } Read Analog ----------- @@ -28,17 +29,19 @@ To check the analog value relative to the supply voltage of a pin [0, 1.0], just :: - MBLGPIOPin *pin0 = device.gpio.pins[0]; - [[pin0.analogAbsolute readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"Pin Voltage: %f V", result.value.floatValue); - }]; + if let pin0 = device.gpio?.pins.first { + pin0.analogAbsolute?.readAsync().success { result in + print("Pin Voltage: \(result.value.doubleValue)") + } + } :: - MBLGPIOPin *pin0 = device.gpio.pins[0]; - [[pin0.analogRatio readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"Pin Ratio: %f", result.value.floatValue); - }]; + if let pin0 = device.gpio?.pins.first { + pin0.analogRatio?.readAsync().success { result in + print("Pin Ratio: \(result.value.doubleValue)") + } + } Set/Clear Pin ------------- @@ -47,8 +50,9 @@ To set the digital value of a pin: :: - MBLGPIOPin *pin0 = device.gpio.pins[0]; - [pin0 setToDigitalValueAsync:YES]; + if let pin0 = device.gpio?.pins.first { + pin0.setToDigitalValueAsync(true) + } Notify on Pin Change -------------------- @@ -57,12 +61,13 @@ Events can be generated when the digital state of a pin changes: :: - MBLGPIOPin *pin0 = device.gpio.pins[0]; - pin0.changeType = MBLPinChangeTypeRising; - pin0.configuration = MBLPinConfigurationNopull; - [pin0.changeEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Cool, the pin changed: %@", obj.value); - }]; + if let pin0 = device.gpio?.pins.first { + pin0.changeType = .rising + pin0.setConfiguration(.nopull) + pin0.changeEvent?.startNotificationsAsync(handler: { (obj, error) in + print("Cool, the pin changed: " + String(describing: obj)) + }) + } Enable Pin ---------- @@ -71,11 +76,9 @@ To save power, sensors connected to a GPIO pin may optionally have an "enable" s :: - MBLGPIOPin *pin0 = self.device.gpio.pins[0]; - MBLData *analogRatio = [pin0 analogRatioWithPullUp:nil pullDown:@2 readDelay:200]; - // When calling readAsync we will automatically pull down pin 2 200 uSec before - // reading pin 0 and then pull up pin 2 once the reading is complete - [[analogRatio readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"With Enable: %@", result.value); - }]; - + if let pin0 = device.gpio?.pins.first { + let analogRatio = pin0.analogRatio(withPullUp: nil, pullDown: 2, readDelay: 200) + analogRatio.readAsync().success { result in + print("With Enable: \(result.value)") + } + } diff --git a/Docs/source/gyro.rst b/Docs/source/gyro.rst index c857267..48b468a 100644 --- a/Docs/source/gyro.rst +++ b/Docs/source/gyro.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Gyro ==== @@ -14,10 +14,12 @@ One thing common to all gyroscopes is the ability to access raw x, y, and z axis :: - device.gyro.sampleFrequency = 100; // Default: 100 Hz - [device.gyro.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLGyroData *obj, NSError *error) { - NSLog(@"X = %f, Y = %f, Z = %f", obj.x, obj.y, obj.z); - }]; + device.gyro?.sampleFrequency = 100.0 + device.gyro?.dataReadyEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("X = \(obj.x), Y = \(obj.y), Z = \(obj.z)") + } + }) Single Axis Data ---------------- @@ -26,9 +28,11 @@ You can also access a single axis of gyroscope data. :: - [device.gyro.xAxisReadyEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"x-axis: %@", obj); - }]; + device.gyro?.xAxisReadyEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("x-axis: \(obj.value.doubleValue)") + } + }) Cast to Derived Class --------------------- @@ -37,7 +41,5 @@ To use advanced gyroscope features it's necessary to figure out exactly what gyr :: - if ([device.gyro isKindOfClass:[MBLGyroBMI160 class]]) { - MBLGyroBMI160 *gyroBMI160 = (MBLGyroBMI160 *)device.gyro; + if let gyroBMI160 = device.gyro as? MBLGyroBMI160 { } - diff --git a/Docs/source/gyrobmi160.rst b/Docs/source/gyrobmi160.rst index 871941b..c031f29 100644 --- a/Docs/source/gyrobmi160.rst +++ b/Docs/source/gyrobmi160.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift GyroBMI160 ========== @@ -12,5 +12,4 @@ You can adjust the sensitivity of the gyroscope based on your needs. :: - gyroBMI160.fullScaleRange = MBLGyroBMI160Range125; - + gyroBMI160.fullScaleRange = .range125 diff --git a/Docs/source/haptic.rst b/Docs/source/haptic.rst index e72bc6b..720c9e1 100644 --- a/Docs/source/haptic.rst +++ b/Docs/source/haptic.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Haptic ====== @@ -12,7 +12,7 @@ The haptic motor has 2 parameters. First, duty cycle [0, 255], which correspond :: - [device.hapticBuzzer startHapticWithDutyCycleAsync:255 pulseWidth:500 completion:nil]; + device.hapticBuzzer?.startHapticAsync(dutyCycle: 255, pulseWidth: 500, completion: nil) Start Buzzer ------------ @@ -21,5 +21,4 @@ The buzzer has just a pulse width parameter, or how long to buzz (units in ms). :: - [device.hapticBuzzer startBuzzerWithPulseWidthAsync:500 completion:nil]; - + device.hapticBuzzer?.startBuzzerAsync(pulseWidth: 500, completion: nil) diff --git a/Docs/source/humidity.rst b/Docs/source/humidity.rst new file mode 100644 index 0000000..d00089a --- /dev/null +++ b/Docs/source/humidity.rst @@ -0,0 +1,18 @@ +.. highlight:: swift + +Humidity +======== + +Electronic humidity sensors (hydrometer) measure humidity by measuring the capacitance or resistance of air samples. This sensor comes packaged with the `BME280 `_ integrated environmental unit, only available on MetaEnvironment boards, and is accessible through the `MBLHygrometerBME280 `_ interface. + +To meet specific needs, different MetaWear models may have different hydrometers, so the ``MBLHygrometer`` class is actually a generic abstraction of all hydrometers. You can up-cast to one of our derived hydrometer objects in order to access advanced features. + + +Cast to Derived Class +--------------------- + +There is currently nothing in the generic ``MBLHygrometer`` class, so you need to use the `MBLHygrometerBME280 `_ derived class. +:: + + if let hygrometerBME280 = device.hygrometer as? MBLHygrometerBME280 { + } diff --git a/Docs/source/humidity_bme280.rst b/Docs/source/humidity_bme280.rst new file mode 100644 index 0000000..3cdd5d6 --- /dev/null +++ b/Docs/source/humidity_bme280.rst @@ -0,0 +1,28 @@ +.. highlight:: swift + +Humidity BME280 +=============== + +This specific color sensor is configured via properties on the `MBLHygrometerBME280 `_ class. This section shows how to use its advanced features. + + +Configuration +------------- +For humidity measurements, oversampling can be used to reduce the noise. Oversampling modes are set with `humidityOversampling `_ property. + +:: + + // set oversampling to 16x + hygrometerBME280.humidityOversampling = .oversample16X + +Humidity Data +------------- +Relative humidity data is a float value from 0 to 100 percent. + +:: + + hygrometerBME280.periodicHumidity.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Humidity: \(obj.value.doubleValue)") + } + }) diff --git a/Docs/source/ibeacon.rst b/Docs/source/ibeacon.rst index 610ca33..fe35432 100644 --- a/Docs/source/ibeacon.rst +++ b/Docs/source/ibeacon.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift iBeacon ======= @@ -8,20 +8,20 @@ iBeacon is an indoor positioning system that uses a particular Bluetooth low-ene Start iBeacon ------------- -To start using iBeacon set up the different properties and call setBeaconOnAsync:YES +To start using iBeacon set up the different properties and call setBeaconOnAsync(true) :: // Easily create your own uuid by running 'uuidgen' in the terminal - device.iBeacon.uuid = [CBUUID UUIDWithString:@"A1589B8C-3E02-4112-AA3C-54850F5C970A"]; - device.iBeacon.major = 10; - device.iBeacon.minor = 20; - device.iBeacon.calibratedReceiverPower = -55; - device.iBeacon.transmitPower = MBLiBeaconTransmitPower0dBm; - device.iBeacon.frequency = 100; - - [device.iBeacon setBeaconOnAsync:YES]; + device.iBeacon?.setUuid(CBUUID(string: "A1589B8C-3E02-4112-AA3C-54850F5C970A")) + device.iBeacon?.setMajor(10) + device.iBeacon?.setMinor(20) + device.iBeacon?.setCalibratedReceiverPower(-55) + device.iBeacon?.setTransmitPower(.power0dBm) + device.iBeacon?.setFrequency(100) + device.iBeacon?.setBeaconOnAsync(true) + // YOU MUST DISCONNECT BEFORE IT WILL BECOME A VISIBLE BEACON - [[device disconnectAsync] success:^(MBLMetaWear * _Nonnull result) { - NSLog(@"It's Beacon Time!"); - }]; + device.disconnectAsync().success { _ in + print("It's Beacon Time!") + } diff --git a/Docs/source/index.rst b/Docs/source/index.rst index 58d23c7..654f381 100644 --- a/Docs/source/index.rst +++ b/Docs/source/index.rst @@ -6,17 +6,13 @@ MetaWear iOS/macOS/tvOS API =========================== -Getting Started ---------------- +The MetaWear iOS/macOS/tvOS API provides a simple way to communicate with your MetaWear boards using Apple devices. This guide will cover the functionality of the API. If you are interested in the finer details of the library, the source code is available on our `GitHub page `_ and API documentation is on our `website `_. -If you haven't installed the SDK yet, please head over to the `QuickStart guide `_ on our Github page to get the SDK up and running in Xcode. You can also check out our `API Reference `_ for more detailed information about our SDK. -Overview --------- - -The MetaWear platform is your one-stop shop for wearable sensor solutions. Our goal is to completely eliminate the need for product developers to build hardware or write firmware code. +Getting Started +--------------- -You will, however, need fundamental knowledge of iOS, macOS, or tvOS programming especially either `Objective-C `_ and `Blocks `_ or `Swift `_ and `Closures `_. +This guide assumes you have fundamental knowledge of iOS, macOS, or tvOS programming especially `Swift `_ and `Closures `_. If you are not developing for the Apple ecosystem, we also offer an `Android API `_ and `C++ API `_. @@ -24,32 +20,12 @@ If you are not developing for the Apple ecosystem, we also offer an `Android API :hidden: :maxdepth: 1 + project_setup + metawearboard metawear_manager - metawear - events data - modules - settings - pushbutton - led - temperature - accelerometer - accelerometerbmi160 - accelerometermma8452q - gyro - gyrobmi160 - magnetometer - magnetometerbmm150 - ambient_light - ambientlightltr329 - barometer - barometerbmp280 - gpio - haptic - ibeacon - neopixel - ancs - timer - serial - filters - sensor_fusion + events + core_modules + sensors + peripherals + advanced_features diff --git a/Docs/source/led.rst b/Docs/source/led.rst index 2f9b5fb..e7b1ef9 100644 --- a/Docs/source/led.rst +++ b/Docs/source/led.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift LED === @@ -12,20 +12,22 @@ This snippet will set the LED to a solid red color. :: - [device.led setLEDColorAsync:[UIColor redColor] withIntensity:1.0]; + device.led?.setLEDColorAsync(.red, withIntensity: 1.0) Flash Color ----------- -This snippet will flash the LED a solid red color indefinitely. :: +This snippet will flash the LED a red color indefinitely. - [device.led flashLEDColorAsync:[UIColor redColor] withIntensity:1.0]; +:: + + device.led?.flashColorAsync(.red, withIntensity: 1.0) Or you might find it beneficial to flash only a few times. :: - [device.led flashLEDColorAsync:[UIColor greenColor] withIntensity:1.0 numberOfFlashes:3]; + device.led?.flashColorAsync(.red, withIntensity: 1.0, numberOfFlashes: 3) Turning Off ----------- @@ -34,5 +36,4 @@ This snippet will completely shut down the LED. :: - [device.led setLEDOnAsync:NO withOptions:1]; - + device.led?.setLEDOnAsync(false, withOptions: 1) diff --git a/Docs/source/magnetometer.rst b/Docs/source/magnetometer.rst index a1243e8..b78b4ee 100644 --- a/Docs/source/magnetometer.rst +++ b/Docs/source/magnetometer.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Magnetometer ============ @@ -14,7 +14,6 @@ Cast to Derived Class There is currently nothing in the generic ``MBLMagnetometer`` class, so you need to use the `MagnetometerBMM150 `_ derived class. :: - if ([device.magnetometer isKindOfClass:[MBLMagnetometerBMM150 class]]) { - MBLMagnetometerBMM150 *magnetometerBMM150 = (MBLMagnetometerBMM150 *)device.magnetometer; + if let magnetometerBMM150 = device.magnetometer as? MBLMagnetometerBMM150 { } diff --git a/Docs/source/magnetometerbmm150.rst b/Docs/source/magnetometerbmm150.rst index 3383149..336b43a 100644 --- a/Docs/source/magnetometerbmm150.rst +++ b/Docs/source/magnetometerbmm150.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift MagnetometerBMM150 ================== @@ -12,7 +12,8 @@ This magnetometer sensor has a built in timer, so you can program it directly to :: - [magnetometerBMM150.periodicMagneticField startNotificationsWithHandlerAsync:^(MBLMagnetometerData *result, NSError *error) { - NSLog(@"Magnetic Field: %@", result); - }]; - + magnetometerBMM150.periodicMagneticField.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Magnetic Field: \(obj)") + } + }) diff --git a/Docs/source/metawear.rst b/Docs/source/metawear.rst deleted file mode 100644 index 788bb02..0000000 --- a/Docs/source/metawear.rst +++ /dev/null @@ -1,164 +0,0 @@ -.. highlight:: Objective-C - -MetaWear -======== - -The `MBLMetaWear `_ class is your digital representation of a physical MetaWear board. It contains all the logical methods you would expect for interacting with the device, such as connecting, disconnecting, reading and writing state. - -Sensors and peripherals on the MetaWear are encapsulated within their own objects accessible via properties. For example, all ``accelerometer`` functionality is contained in the `MBLAccelerometer `_ class and is accessed using the ``accelerometer`` property - -You always get a `MBLMetaWear `_ object through the `MBLMetaWearManager `_ , afterwards, keep a reference to it as long as the app is running. From here on assume that inside code blocks ``device`` is a `MBLMetaWear `_ object reference - -Connect/Disconnect ------------------- - -Before doing anything with the MetaWear board, your first step is to establish a connection: - -The task returned from ``connectAsync`` will be completed after the connection is complete. There is no timeout feature, so block might not be invoked for a long time if the device is out of range. If error != nil (which certainly can happen, so handle it!) then the connection wasn't successful and you should try again. - -The block passed to ``connectWithTimeoutAsync:`` will be called after the connection is complete, or timeout seconds have passed. If a timeout occurs, the block will get an error of kMBLErrorDomain and kMBLErrorConnectionTimeout code. - -:: - - [[device connectAsync] success:^(MBLMetaWear * _Nonnull result) { - NSLog(@"Connected"); - [[device disconnectAsync] success:^(MBLMetaWear * _Nonnull result) { - NSLog(@"Disconnected"); - }]; - }]; - - // connectAsync will try to connect indefinitely, but using - // connectWithTimeoutAsync: is a simple way to limit the amount of - // time spent searching for the device - [[device connectWithTimeoutAsync:20] failure:^(NSError * _Nonnull error) { - if ([error.domain isEqualToString:kMBLErrorDomain] && - error.code == kMBLErrorConnectionTimeout) { - NSLog(@"Connection Timeout"); - } - }]; - -Saving MetaWears ----------------- - -If you expect to re-connect to a specific MetaWear device, you can "remember" it for easy retrieval later on through the MetaWear Manager. - -Once you are done with the device, then "forget" it to remove it from the list. - -:: - - [device rememberDevice]; - -:: - - [device forgetDevice]; - -Firmware Updates ----------------- - -The firmware running on the MetaWear is periodically updated by MbientLab with additional features and bug-fixes. To update, you first call a MetaWear API which puts the device in a special bootloader mode, then use the Nordic Semiconductor `IOS-DFU-Librarly `_ to upload the new firmware. We recommend looking at our `Sample App `_ for an example on how to integrate. - -This is one API you can call WITHOUT being connected, there are some cases where you can't connect because the firmware is too old, but you still need to be able to update it! - -:: - - [[[device prepareForFirmwareUpdateAsync] success:^(MBLFirmwareUpdateInfo * _Nonnull result) { - DFUFirmware *selectedFirmware; - if ([result.firmwareUrl.pathExtension caseInsensitiveCompare:@"zip"] == NSOrderedSame) { - selectedFirmware = [[DFUFirmware alloc] initWithUrlToZipFile:result.firmwareUrl]; - } else { - selectedFirmware = [[DFUFirmware alloc] initWithUrlToBinOrHexFile:result.firmwareUrl urlToDatFile:nil type:DFUFirmwareTypeApplication]; - } - - DFUServiceInitiator *initiator = [[DFUServiceInitiator alloc] initWithCentralManager:result.centralManager target:result.target]; - [initiator withFirmwareFile:selectedFirmware]; - initiator.forceDfu = YES; // We also have the DIS which confuses the DFU library - initiator.logger = self; // - to get log info - initiator.delegate = self; // - to be informed about current state and errors - initiator.progressDelegate = self; // - to show progress bar - initiator.peripheralSelector = self; - - [initiator start]; - }] failure:^(NSError * _Nonnull error) { - NSLog(@"Something went wrong, we should try again in 60 seconds: %@", error); - return; - }]; - -Persistent Configuration ------------------------- - -``MBLRestorable`` object containing custom settings and events that are programmed to the MetaWear and preserved between disconnects and app termination. - -Use ``setConfigurationAsync:`` to assign a new configuration object to this MetaWear. This only needs to be called once, likely after you confirm the device from a scanning screen or such. Upon calling it will erase all non-volatile memory the device (which requires disconnect), then perform reset, once its comes back online we will connect and invoke the runOnDeviceBoot method. All calls in that method are persisted device side so after any future reset these settings will be applied automatically. - -The properties of the configuration objected are automatically persisted to disk after interactions with the board. If, however, you make changes to various module setting without acutally interacting, then it may be useful to call ``synchronizeAsync`` to force a save to disk. - -:: - - [[[device setConfigurationAsync:[[DeviceConfiguration alloc] init]] success:^(MBLMetaWear * _Nonnull result) { - NSLog(@"Settings successfully applied"); - }] failure:^(NSError * _Nonnull error) { - NSLog(@"Something went wrong, we should try again: %@", error); - }]; - -Received Signal Strength Indicator (RSSI) ------------------------------------------ - -RSSI is a measurement of the power present in a received radio signal. This can be used to approximate how close the MetaWear is to the Apple device, bigger numbers mean closer. - -:: - - [[device readRSSIAsync] success:^(NSNumber * _Nonnull result) { - NSLog(@"RSSI: %@", result); - }]; - -Battery Life ------------- - -You can query the percent charge remaining on the MetaWear anytime. You get back an integer between 0 and 100 indicating the percent remaining. - -:: - - [[device readBatteryLifeAsync] success:^(NSNumber * _Nonnull result) { - NSLog(@"Battery Percent Remaining: %@", result); - }]; - -Connection State ----------------- - -Get the state of the BLE connection. - -:: - - if (device.state == MBLConnectionStateConnected) { - NSLog(@"Connected!"); - } - -Programmed by Other Application -------------------------------- - -Since we do not support using a single MetaWear device with multiple application, you should take care if a user accidently tries to do this. Once connected, your application should check this BOOL and if it is YES, then you shouldn't change settings or perform any operations unless you supply the user with an alert saying, "This device is in use by another application, are you sure you want to reprogram it? This will cause errors and data loss for the other application”. If they agree then you need to call setConfigurationAsync: to take ownership of the device. - -:: - - if (device.programedByOtherApp) { - NSLog(@"WARNING - device already programmed, are you sure you want to continue? Call [device setConfigurationAsync:nil] if you wish to take ownership."); - } - -Identifier ----------- - -Apple generates a unique identifier for each BLE device. Note, two different Apple devices will generate two different identifiers for the same MetaWear. - -:: - - NSLog(@"%@", device.identifier); - -Device Name ------------ - -By using the ``name`` property you can change the advertised ``name`` of the MetaWear. - -:: - - device.name = @"HAMMER"; - diff --git a/Docs/source/metawear_manager.rst b/Docs/source/metawear_manager.rst index c42be8c..f6a74ca 100644 --- a/Docs/source/metawear_manager.rst +++ b/Docs/source/metawear_manager.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift MetaWear Manager ================ @@ -12,7 +12,7 @@ The `MBLMetaWearManager *array) { - for (MBLMetaWear *device in array) { - NSLog(@"Found MetaWear: %@", device); + MBLMetaWearManager.shared().startScan(forMetaWearsAllowDuplicates: false, handler: { array in + for device in array { + print("Found MetaWear: \(device)") } - }]; + }) Scanning for Nearby MetaWears ----------------------------- -In the previous example we set ``startScanForMetaWearsAllowDuplicates:NO`` which meant that the handler block would be invoked only when a new MetaWear was detected. However, by allowing duplicates the handler block will be invoked each time an advertisement packet is detected (even from an already detected MetaWear). +In the previous example we set ``startScan(forMetaWearsAllowDuplicates: false`` which meant that the handler block would be invoked only when a new MetaWear was detected. However, by allowing duplicates the handler block will be invoked each time an advertisement packet is detected (even from an already detected MetaWear). This feature is handy because the ``discoveryTimeRSSI`` property on the discovered `MBLMetaWear `_ objects get continually updated, so you can get a real time sense for how far it is from the Apple device. :: - static const int MAX_ALLOWED_RSSI = -15; // The RSSI calculation sometimes produces erroneous values, we know anything above this value is invalid - static const int MIN_ALLOWED_RSSI = -45; // Depending on your specific application this value will change! - - [[MBLMetaWearManager sharedManager] startScanForMetaWearsAllowDuplicates:YES handler:^(NSArray *array) { - for (MBLMetaWear *device in array) { + let MAX_ALLOWED_RSSI = -15; // The RSSI calculation sometimes produces erroneous values, we know anything above this value is invalid + let MIN_ALLOWED_RSSI = -45; // Depending on your specific application this value will change! + + MBLMetaWearManager.shared().startScan(forMetaWearsAllowDuplicates: true, handler: { array in + for device in array { + guard device.discoveryTimeRSSI != nil else { + continue + } // Reject any value above a reasonable range - if (device.discoveryTimeRSSI.integerValue > MAX_ALLOWED_RSSI) { - continue; + if device.discoveryTimeRSSI!.intValue > MAX_ALLOWED_RSSI { + continue } // Reject if the signal strength is too low to be close enough (find through experiment) - if (device.discoveryTimeRSSI.integerValue < MIN_ALLOWED_RSSI) { - continue; + if device.discoveryTimeRSSI!.intValue < MIN_ALLOWED_RSSI { + continue } - [[MBLMetaWearManager sharedManager] stopScan]; + MBLMetaWearManager.shared().stopScan() // At this point we have a close MetaWear, do what you please with it! } - }]; + }) Retrieving MetaWears -------------------- @@ -63,9 +66,9 @@ The array is ordered so the first device remembered is at index 0, next device a :: - [[[MBLMetaWearManager sharedManager] retrieveSavedMetaWearsAsync] success:^(NSArray * _Nonnull array) { - MBLMetaWear *savedDevice = array[0]; - }]; + MBLMetaWearManager.shared().retrieveSavedMetaWearsAsync().success { array in + let savedDevice = array.firstObject + } Dispatch Queue -------------- @@ -76,7 +79,7 @@ Since we use `Bolts-ObjC `_ throug :: - [MBLMetaWearManager sharedManager].dispatchQueue = myCustomQueue; + MBLMetaWearManager.shared().dispatchQueue = myCustomQueue Minimum Firmware Required @@ -88,6 +91,4 @@ This property is writeable, so you can enforce an even newer version for your ap :: - [MBLMetaWearManager sharedManager].minimumRequiredVersion = MBLFirmwareVersion1_2_0; - - + MBLMetaWearManager.shared().minimumRequiredVersion = .version1_2_0 diff --git a/Docs/source/metawearboard.rst b/Docs/source/metawearboard.rst new file mode 100755 index 0000000..a31611d --- /dev/null +++ b/Docs/source/metawearboard.rst @@ -0,0 +1,131 @@ +.. highlight:: swift + +MetaWear Board +============== + +The `MBLMetaWear `_ interface is a software representation of the MetaWear boards and is the central class of the MetaWear API. It contains all the logical methods you would expect for interacting with the device, such as connecting, disconnecting, reading and writing state. + +Sensors and peripherals on the MetaWear are encapsulated within their own objects accessible via properties. For example, all ``accelerometer`` functionality is contained in the `MBLAccelerometer `_ class and is accessed using the ``accelerometer`` property + +You always get a `MBLMetaWear `_ object through the `MBLMetaWearManager `_ , afterwards, keep a reference to it as long as the app is running. From here on assume that inside code blocks ``device`` is a `MBLMetaWear `_ object reference + + +Bluetooth LE Connection +----------------------- +Before using any API features, you must first connect to the board with `connectAsync `_. The returned task will finish when a connection has been established and the ``MBLMetaWear`` state has been initialized. :: + + device.connectAsync().success { _ in + print("Connected") + }.failure { error in + print("Failed to connect", error) + } + +There is also a convenient `connectWithTimeoutAsync `_ which will finish when the connection is complete, or timeout seconds have passed. If a timeout occurs, the task will get an error of kMBLErrorDomain and kMBLErrorConnectionTimeout code. :: + + device.connect(withTimeoutAsync: 5).success { _ in + print("Connected") + }.failure { error in + print("Failed to connect", error) + } + +Conversely, call `disconnectAsync `_ to close the connection. If there is a pending ``connectAsync`` task when ``disconnectAsync`` is called, the connect task will be cancelled. :: + + device.disconnectAsync().success { _ in + print("Disconnected") + } + +Watching for Disconnects +^^^^^^^^^^^^^^^^^^^^^^^^ +It is often useful to handle BLE disconnection events, `waitForDisconnect `_ will create a task that completes once this device disconnects, either expectedly or unexpectedly. :: + + device.waitForDisconnect().continueOnDispatch { t in + print("Lost connection") + return nil + } + + +Saving MetaWears +---------------- + +If you expect to re-connect to a specific MetaWear device, you can "remember" it for easy retrieval later on through the MetaWear Manager. + +Once you are done with the device, then "forget" it to remove it from the list. + +:: + + device.rememberDevice() + +:: + + device.forgetDevice() + +Model +----- +Despite the name, the ``MBLMetaWear`` interface communicates with all MetaSensor boards, not just MetaWear boards. Because of this, the interface provides a `model `_ property that determines exactly which board the interface is currently connected to. + +:: + + print(MBLModelString(device.model)) + +BLE Information +--------------- +RSSI and some GATT characetristics can be read from the MBLMetaWear interface using `readRssiAsync `_, `readBatteryLifeAsync `_. Device information is avaliable througth the `deviceInfo `_ property. :: + + device.readRSSIAsync().success { rssi in + print("rssi: \(rssi)") + } + device.readBatteryLifeAsync().success { battery in + print("battery: \(battery)") + } + + +Connection State +---------------- + +Get the state of the BLE connection. + +:: + + if device.state == .connected { + print("Connected!") + } + + + +Programmed by Other Application +------------------------------- + +Since we do not support using a single MetaWear device with multiple application, you should take care if a user accidently tries to do this. Once connected, your application should check this BOOL and if it is YES, then you shouldn't change settings or perform any operations unless you supply the user with an alert saying, "This device is in use by another application, are you sure you want to reprogram it? This will cause errors and data loss for the other application”. If they agree then you need to call setConfigurationAsync: to take ownership of the device. + +:: + + if device.programedByOtherApp { + print("WARNING - device already programmed, are you sure you want to continue? Call device.setConfigurationAsync(nil) if you wish to take ownership.") + } + +Identifier +---------- + +Apple generates a unique identifier for each BLE device. Note, two different Apple devices will generate two different identifiers for the same MetaWear. + +:: + + print("\(device.identifier)") + +Device Name +----------- + +By using the ``name`` property you can change the advertised ``name`` of the MetaWear. + +:: + + device.name = "HAMMER" + + +Modules +------- +MetaWear modules, represented by the `MBLModule `_ interface, are sensors, peripherals, or on-board firmware features. To interact with the underlying MetaWear modules, retrieve a reference to the desired interface via properties on ``MBLMetaWear``. A null pointer will be returned if any of the following conditions are true: + +* Requested module is not supported on the board +* Board is in MetaBoot mode +* Has not yet connected diff --git a/Docs/source/modules.rst b/Docs/source/modules.rst deleted file mode 100644 index 9d6ce38..0000000 --- a/Docs/source/modules.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. highlight:: Objective-C - -Modules -======= - -For clarity, different logical functions are encapsulated into separate modules. The `MBLMetaWear `_ object has pointers to all the different modules it supports and are explained in the following sections. - diff --git a/Docs/source/neopixel.rst b/Docs/source/neopixel.rst index 050a5f7..d7fda41 100644 --- a/Docs/source/neopixel.rst +++ b/Docs/source/neopixel.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift NeoPixel ======== @@ -16,18 +16,16 @@ Note, if it lights up a color other than green, you have the wrong color orderin :: - const int length = 30; // Specific to your NeoPixel stand - const MBLColorOrdering color = MBLColorOrderingGRB; // Specific to your NeoPixel stand - const MBLStrandSpeed speed = MBLStrandSpeedSlow; // Specific to your NeoPixel stand - - MBLNeopixelStrand *strand = [device.neopixel strandWithColor:color speed:speed pin:0 length:length]; - [strand initializeAsync]; - for (int i = 0; i < length; i++) { - [strand setPixelAsync:i color:[UIColor greenColor]]; + // All constants are specific to your NeoPixel stand + let length: UInt8 = 30 + let strand = device.neopixel?.strand(withColor: .GBR, speed: .slow, pin: 0, length: length) + strand?.initializeAsync() + for i in 0..`_ that has taken care of all the steps outlined on this page. + +Compile Dependency +------------------ + +.. highlight:: ruby + +To add the MetaWear SDK as a dependency to your project you should setup `CocoaPods `_, and add the following line to your Podfile: :: + + pod "MetaWear" + +.. highlight:: console + +Then run: :: + + pod install + +Finding Your Device +------------------- + +.. highlight:: swift + +The last thing to do is retrieve an `MBLMetaWear `_ object corresponding to your board by scanning for it. + +:: + + import MetaWear + + MBLMetaWearManager.shared().startScanForMetaWears() { array in + // Hooray! We found a MetaWear board, so stop scanning for more + MBLMetaWearManager.shared().stopScan() + // Connect to the board we found + if let device = array.first { + device.connectAsync().success() { _ in + // Hooray! We connected to a MetaWear board, so flash its LED! + device.led?.flashColorAsync(UIColor.green, withIntensity: 0.5) + }.failure() { error in + // Sorry we couldn't connect + print(error) + } + } + } diff --git a/Docs/source/proximity.rst b/Docs/source/proximity.rst new file mode 100644 index 0000000..9d8d52a --- /dev/null +++ b/Docs/source/proximity.rst @@ -0,0 +1,20 @@ +.. highlight:: swift + +Proximity +========= + +Proximity sensors detect the presence of objects without physically touching them. They are often used as a touch-less switch, automatically turning on faucets and opening doors to name a few examples. + +MetaDetector boards are outfitted with the `TSL2671 `_ proximity detector, a photoelectric style detector that refelcts an infrared signal off the target object to measure distance. This sensor is accessed with the `MBLProximityTSL2671 `_ interface. + +To meet specific needs, different MetaWear models have different magnetometer sensors, so the ``MBLProximity`` class is actually a generic abstraction of all magnetometers. You can up-cast to one of our derived magnetometer objects in order to access advanced features. + + +Cast to Derived Class +--------------------- + +There is currently nothing in the generic ``MBLProximity`` class, so you need to use the `MBLProximityTSL2671 `_ derived class. +:: + + if let proximityTSL2671 = device.proximity as? MBLProximityTSL2671 { + } diff --git a/Docs/source/proximity_tsl2671.rst b/Docs/source/proximity_tsl2671.rst new file mode 100644 index 0000000..a75dd8e --- /dev/null +++ b/Docs/source/proximity_tsl2671.rst @@ -0,0 +1,38 @@ +.. highlight:: swift + +Proximity TSL2671 +================= + +This specific proximity sensor is configured via properties on the `MBLProximityTSL2671 `_ class. This section shows how to use its advanced features. + + +Configuration +------------- +The TSL2671 device has 4 configurable parameters that control the sensitivity and distance at which the detector can measure proximity. These parameters are set with properties on the interface. + +=================== =================================================================== +Parameter Description +=================== =================================================================== +Integration Time How long the internal ADC converts analog input into digital counts +Pulse Count Number of IR pulses emitted for distance measuring +Transmitter Current Amount of current driving the IR transmitter +=================== =================================================================== + +:: + + // set integration time to 5.44ms + // use default pulse count of 1, + // set drive current to 25mA + proximityTSL2671.integrationTime = 5.44 + proximityTSL2671.proximityPulses = 1 + proximityTSL2671.drive = .drive25mA + +Proximity Data +-------------- +Proximity data is an ADC value represented as an UInt16; the higher the adc value, the closer the distance to the object. + +:: + + proximityTSL2671.proximity?.readAsync().success { result in + print("Proximity ADC = \(result.value.uint16Value)") + } diff --git a/Docs/source/pushbutton.rst b/Docs/source/pushbutton.rst index d2deb24..7dd1074 100644 --- a/Docs/source/pushbutton.rst +++ b/Docs/source/pushbutton.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Pushbutton ========== @@ -12,9 +12,9 @@ You can read the current state with the following code. :: - [[device.mechanicalSwitch.switchValue readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"Switch State: %d", result.value.boolValue); - }]; + device.mechanicalSwitch?.switchValue.readAsync().success { result in + print("Switch State: \(result.value.boolValue)") + } Listening For Change -------------------- @@ -23,7 +23,9 @@ It's likely you just want to know when the switch is pressed or released, for th :: - [device.mechanicalSwitch.switchUpdateEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Switch Changed: %@", obj); - }]; + device.mechanicalSwitch?.switchUpdateEvent.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Switch Changed \(obj)") + } + }) diff --git a/Docs/source/sensor_fusion.rst b/Docs/source/sensor_fusion.rst index 0098db7..0e00a01 100644 --- a/Docs/source/sensor_fusion.rst +++ b/Docs/source/sensor_fusion.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Sensor Fusion ============= @@ -28,12 +28,12 @@ We provide attitude and heading information using both Euler Angles and Quaterni :: - [self.device.sensorFusion.eulerAngle startNotificationsWithHandlerAsync:^(MBLEulerAngleData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; - [self.device.sensorFusion.quaternion startNotificationsWithHandlerAsync:^(MBLQuaternionData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; + device.sensorFusion?.eulerAngle.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) + device.sensorFusion?.quaternion.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) Gravity Reading --------------- @@ -42,9 +42,9 @@ This looks at the acceleration due to gravity and removes the acceleration due t :: - [self.device.sensorFusion.gravity startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; + device.sensorFusion?.gravity.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) Linear Acceleration ------------------- @@ -53,9 +53,9 @@ This looks at the acceleration due to motion and removes the acceleration due to :: - [self.device.sensorFusion.gravity startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; + device.sensorFusion?.linearAcceleration.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) Corrected Sensor Readings ------------------------- @@ -73,12 +73,12 @@ M4G 50Hz N/A 50Hz :: - [device.sensorFusion.acceleration startNotificationsWithHandlerAsync:^(MBLCorrectedAccelerometerData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; - [device.sensorFusion.rotation startNotificationsWithHandlerAsync:^(MBLCorrectedGyroData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; - [device.sensorFusion.magneticField startNotificationsWithHandlerAsync:^(MBLCorrectedMagnetometeData *obj, NSError *error) { - NSLog(@"%@", obj); - }]; + device.sensorFusion?.acceleration.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) + device.sensorFusion?.rotation.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) + device.sensorFusion?.magneticField.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) diff --git a/Docs/source/sensors.rst b/Docs/source/sensors.rst new file mode 100755 index 0000000..baeac48 --- /dev/null +++ b/Docs/source/sensors.rst @@ -0,0 +1,28 @@ +Sensors +======= +MetaWear comes with plenty of sensors ready to be used with only a few API calls. Most boards have a different combination of sensors or even different sensor models so it is important to add confirm existence of module before using. + +.. toctree:: + :hidden: + :maxdepth: 1 + + accelerometer + accelerometerbmi160 + accelerometermma8452q + ambient_light + ambientlightltr329 + barometer + barometerbmp280 + color_sensor + color_sensor_tcs3472 + gyro + gyrobmi160 + humidity + humidity_bme280 + magnetometer + magnetometerbmm150 + proximity + proximity_tsl2671 + temperature + ancs + pushbutton diff --git a/Docs/source/serial.rst b/Docs/source/serial.rst deleted file mode 100644 index 2002eb2..0000000 --- a/Docs/source/serial.rst +++ /dev/null @@ -1,49 +0,0 @@ -.. highlight:: Objective-C - -Serial -====== - -A great way to extend the hardware features of MetaWear is to attach additional devices via a serial bus (I2C or SPI). - -Read/Write ----------- - -To read or write to the registers on the device, first use the `MBLSerial `_ module to create an `MBLI2CData `_ or `MBLSPIData `_ object, then invoke its read/write methods. - -:: - - MBLSPIData *bmi160 = [device.serial dataWithSlaveSelectPin:10 - clockPin:0 - mosiPin:11 - misoPin:7 - lsbFirst:0 - spiMode:3 - spiFrequency:6 - nativePinIndexing:1 - length:5]; - - uint8_t byte = 0xDA; - [[bmi160 readWithParamtersAsync:[NSData dataWithBytes:&byte length:1]] success:^(MBLDataSample *result) { - NSLog(@"%@", result); - }]; - -:: - - MBLI2CData *aReg = [device.serial dataAtDeviceAddress:0x1C - registerAddress:0x0D - length:1]; - [aReg writeByteAsync:self.i2cScratchRegValue]; - -Periodic Reads --------------- - -Since `MBLI2CData `_ and `MBLSPIData `_ derive from `MBLData `_ they inherit its periodic read methods: - -:: - - MBLI2CData *reg = [device.i2c dataAtDeviceAddress:0x1C registerAddress:0x12 length:1]; - MBLEvent *periodicRead = [reg periodicReadWithPeriod:1000]; - [periodicRead startNotificationsWithHandlerAsync:^(MBLDataSample *obj, NSError *error) { - NSLog(@"I am reading every second: %@", obj.data); - }]; - diff --git a/Docs/source/serial_passthrough.rst b/Docs/source/serial_passthrough.rst new file mode 100644 index 0000000..3753742 --- /dev/null +++ b/Docs/source/serial_passthrough.rst @@ -0,0 +1,45 @@ +.. highlight:: swift + +Serial Passthrough +================== + +A great way to extend the hardware features of MetaWear is to attach additional devices via a serial bus (I2C or SPI). + +Read/Write +---------- + +To read or write to the registers on the device, first use the `MBLSerial `_ module to create an `MBLI2CData `_ or `MBLSPIData `_ object, then invoke its read/write methods. + +:: + + let bmi160 = device.serial?.data(withSlaveSelectPin: 10, + clockPin: 0, + mosiPin: 11, + misoPin: 7, + lsbFirst: false, + spiMode: 3, + spiFrequency: 6, + nativePinIndexing: true, + length: 5) + let byte: UInt8 = 0xDA + bmi160?.read(withParamtersAsync: Data(bytes: [byte])).success { result in + print(result) + } + +:: + + let aReg = device.serial?.data(atDeviceAddress: 0x1C, registerAddress: 0x0D, length: 1) + aReg?.writeByteAsync(0x55) + +Periodic Reads +-------------- + +Since `MBLI2CData `_ and `MBLSPIData `_ derive from `MBLData `_ they inherit its periodic read methods: + +:: + + let reg = device.serial?.data(atDeviceAddress: 0x1C, registerAddress: 0x12, length: 1) + let periodicRead = reg?.periodicRead(withPeriod: 1000) + periodicRead?.startNotificationsAsync(handler: { (obj, error) in + print("I am reading every second: " + String(describing: obj)) + }) diff --git a/Docs/source/settings.rst b/Docs/source/settings.rst index aa4f231..309c95c 100644 --- a/Docs/source/settings.rst +++ b/Docs/source/settings.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Settings ======== @@ -12,7 +12,7 @@ The radio transmit power is also exposed through a property. Setting a smaller :: - device.settings.transmitPower = MBLTransmitPower0dBm; + device.settings?.transmitPower = .power0dBm Circular Buffer Log ------------------- @@ -21,7 +21,7 @@ Choose what happens if the internal log fills up. If circularBufferLog is YES t :: - device.settings.circularBufferLog = NO; + device.settings?.circularBufferLog = false Scan Response ------------- @@ -31,8 +31,8 @@ You can modify the BLE Ad Packet to advertise application specific data, this is :: // Make it advertise http://www.mbientlab.com - uint8_t rawuri[] = { 0x03, 0x03, 0xD8, 0xFE, 0x10, 0x16, 0xD8, 0xFE, 0x00, 0x12, 0x00, 0x6D, 0x62, 0x69, 0x65, 0x6E, 0x74, 0x6C, 0x61, 0x62, 0x00 }; - device.settings.scanResponse = [NSData dataWithBytes:rawuri length:sizeof(rawuri)]; + let rawuri = Data(bytes: [0x03, 0x03, 0xD8, 0xFE, 0x10, 0x16, 0xD8, 0xFE, 0x00, 0x12, 0x00, 0x6D, 0x62, 0x69, 0x65, 0x6E, 0x74, 0x6C, 0x61, 0x62, 0x00]) + device.settings?.scanResponse = rawuri Advertising Settings -------------------- @@ -43,20 +43,20 @@ This is a startAdvertisement method which can be explicitly use to start adverti :: - device.settings.advertisingInterval = 417.5; // Default value - device.settings.advertisingTimeout = 0; // Default value - always advertise - [device.settings startAdvertisementAsync]; + device.settings?.advertisingInterval = 417.5; // Default value + device.settings?.advertisingTimeout = 0; // Default value - always advertise + device.settings?.startAdvertisementAsync() Pairing/Bonding --------------- In a few special cases, you may need to enable of Bluetooth level bonding. This is still in development, so not everything is exposed. To begin pairing simply call: :: - [device.settings initiatePairingAsync]; + device.settings?.initiatePairingAsync() To fully destroy the bond, you need to first call ``deleteAllBonds`` then disconnect. Second, "Forget" the device in the iOS Settings APP under Bluetooth. :: - [device.settings deleteAllBondsAsync]; + device.settings?.deleteAllBondsAsync() Disconnect Event ---------------- @@ -66,9 +66,9 @@ Event representing a BLE disconnection event. Note this doesn't make sense to s :: // Flash red LED twice on disconnect - [device.settings.disconnectEvent programCommandsToRunOnEventAsync:^{ - [device.led flashLEDColorAsync:[UIColor redColor] withIntensity:1.0 numberOfFlashes:2]; - }]; + device.settings?.disconnectEvent?.programCommandsToRunOnEventAsync { + device.led?.flashColorAsync(.red, withIntensity: 1.0, numberOfFlashes: 2) + } MAC Address ----------- @@ -77,7 +77,35 @@ Get the MAC address of the MetaWear. :: - [[device.settings.macAddress readAsync] success:^(MBLStringData * _Nonnull result) { - NSLog(@"%@", result.value); - }]; + device.settings?.macAddress?.readAsync().success { mac in + print(mac) + } +Connection Parameters +--------------------- + +Bluetooth LE connection parameters control how the ble devices communicate with each other. Configuring these parameters is done with the via properties on the MBLSettings object. A more detailed explanation on connection parameters can be found on the Nordic Developer Zone: + +* https://devzone.nordicsemi.com/question/60/what-is-connection-parameters/ + +:: + + // change min conn interval to 10ms, + // max conn interval to 1024ms + device.settings?.minimumConnectionInterval = 10 + device.settings?.maximumConnectionInterval = 1024 + device.settings?.applyConnectionParametersAsync() + + +Power Status +------------ +Firmware v1.3.2 exposes battery charging and power status notifications which provides information on when the battery is charging / not charging and when a power source is attached / removed, respectively. The data is interpreted as a byte or boolean with 1 (true) signifying battery charging / power source attached, and 0 (false) meaning battery not charging / power source removed. Not all boards support this feature and a null pointer will be returned if `powerStatus `_ or `chargerStatus `_ is called on an unsupported board. + +:: + + device.settings?.chargerStatus?.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) + device.settings?.powerStatus?.startNotificationsAsync(handler: { (obj, error) in + print(String(describing: obj)) + }) diff --git a/Docs/source/temperature.rst b/Docs/source/temperature.rst index d568342..6beac7e 100644 --- a/Docs/source/temperature.rst +++ b/Docs/source/temperature.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Temperature =========== @@ -12,9 +12,9 @@ The sources are available as different ``MBLData`` properties. :: - MBLData *onDieThermistor = device.temperature.onDieThermistor; - MBLExternalThermistor *externalThermistor = device.temperature.externalThermistor; - MBLData *onboardThermistor = device.temperature.onboardThermistor; + let onDieThermistor = device.temperature?.onDieThermistor + let externalThermistor = device.temperature?.externalThermistor + let onboardThermistor = device.temperature?.onboardThermistor Single Read ----------- @@ -23,20 +23,19 @@ Here is how you get a single temperature reading. Note that to use an external :: - [[device.temperature.onDieThermistor readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"on-die temp: %f", result.value.floatValue); - }]; - - [[device.temperature.onboardThermistor readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"on-board temp: %f", result.value.floatValue); - }]; - - MBLExternalThermistor *externalThermistor = device.temperature.externalThermistor; - externalThermistor.readPin = 0; - externalThermistor.enablePin = 1; - [[externalThermistor readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"external thermistor temp: %f", result.value.floatValue); - }]; + device.temperature?.onDieThermistor.readAsync().success { result in + print("on-die temp: \(result.value.doubleValue)") + } + device.temperature?.onboardThermistor?.readAsync().success { result in + print("on-board temp: \(result.value.doubleValue)") + } + + let externalThermistor = device.temperature?.externalThermistor + externalThermistor?.readPin = 0 + externalThermistor?.enablePin = 1 + externalThermistor?.readAsync().success { result in + print("external thermistor temp: \(result.value.doubleValue)") + } Periodic Read ------------- @@ -45,10 +44,12 @@ Since all temperature sources are MBLData objects, you can easily perform period :: - MBLEvent *temperatureEvent = [device.temperature.onDieThermistor periodicReadWithPeriod:500]; - [temperatureEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"on-die temp: %f", obj.value.floatValue); - }]; + let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) + temperatureEvent?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("on-die temp: \(obj.value.doubleValue)") + } + }) Change Event ------------ @@ -57,12 +58,15 @@ The following code shows how to setup filters to notify when the temperature has :: - MBLEvent *temperatureEvent = [device.temperature.onDieThermistor periodicReadWithPeriod:500]; + let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) // Get notifications when it changes by 2 degrees C - MBLEvent *deltaTemperatureEvent = [temperatureEvent changeOfEventByDelta:2.0 output:MBLDeltaValueOutputAbsolute]; - [deltaTemperatureEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Temp Changed!: %@", obj); - }]; + let deltaTemperatureEvent = temperatureEvent?.changeOfEvent(byDelta: 2.0, output: .absolute) + deltaTemperatureEvent?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Temp Changed!: \(obj.value.doubleValue)") + } + }) + Threshold Event --------------- @@ -71,10 +75,11 @@ Similarly, we can use the filters to setup a notification when the temperature o :: - MBLEvent *temperatureEvent = [device.temperature.onDieThermistor periodicReadWithPeriod:500]; - // Get notifications when it crosses 25 degrees C - MBLEvent *thresholdEvent = [temperatureEvent changeOfEventAcrossThreshold:25.0 hysteresis:2.0 output:MBLThresholdValueOutputAbsolute]; - [thresholdEvent startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - NSLog(@"Temp Crossed Threshold!: %@", obj); - }]; - + let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) + // Get notifications when it changes by 2 degrees C + let thresholdEvent = temperatureEvent?.change(ofEventAcrossThreshold: 25.0, hysteresis: 2.0, output: .absolute) + thresholdEvent?.startNotificationsAsync(handler: { (obj, error) in + if let obj = obj { + print("Temp Crossed Threshold!: \(obj.value.doubleValue)") + } + }) diff --git a/Docs/source/timer.rst b/Docs/source/timer.rst index ed7d711..b5c0c90 100644 --- a/Docs/source/timer.rst +++ b/Docs/source/timer.rst @@ -1,4 +1,4 @@ -.. highlight:: Objective-C +.. highlight:: swift Timer ===== @@ -12,8 +12,7 @@ Here is a simple way to buzz 3 times. :: - MBLEvent *periodicEvent = [device.timer eventWithPeriod:2000 eventCount:3]; - [periodicEvent programCommandsToRunOnEventAsync:^{ - [device.hapticBuzzer startBuzzerWithPulseWidthAsync:500 completion:nil]; - }]; - + let periodicEvent = device.timer?.event(withPeriod: 2000, eventCount: 3) + periodicEvent?.programCommandsToRunOnEventAsync { + device.hapticBuzzer?.startBuzzerAsync(pulseWidth: 500, completion: nil) + } diff --git a/MetaWear.podspec b/MetaWear.podspec index c10563a..e098c31 100644 --- a/MetaWear.podspec +++ b/MetaWear.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'MetaWear' - s.version = '2.8.3' + s.version = '2.8.4' s.license = { :type => 'Commercial', :text => 'See https://www.mbientlab.com/terms/', :file => 'LICENSE' } s.homepage = 'https://mbientlab.com' s.summary = 'iOS/macOS/tvOS API and documentation for the MetaWear platform' diff --git a/MetaWear/Classes/Core/MBLConstants.m b/MetaWear/Classes/Core/MBLConstants.m index aa60a27..fc119d3 100644 --- a/MetaWear/Classes/Core/MBLConstants.m +++ b/MetaWear/Classes/Core/MBLConstants.m @@ -36,7 +36,7 @@ #import "MBLConstants.h" #import "MBLConstants+Private.h" -NSString *const kMBLAPIVersion = @"2.8.3"; +NSString *const kMBLAPIVersion = @"2.8.4"; NSString *MBLFirmwareVersionString(MBLFirmwareVersion version) { diff --git a/MetaWear/Classes/Core/MBLEvent.h b/MetaWear/Classes/Core/MBLEvent.h index 784aec4..a7b1ca6 100644 --- a/MetaWear/Classes/Core/MBLEvent.h +++ b/MetaWear/Classes/Core/MBLEvent.h @@ -253,6 +253,14 @@ typedef void (^MBLNotificationHandler)(ResultType __nullable obj, NSError *__nul - (BFTask *> *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging remainingHandler:(nullable MBLLogProgressHandler)progressHandler; - (BFTask *> *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging; +/** + Stop logging this event, but don't initiate a download. + + @returns Task whose completion value is the total number of entries in the log. + Note this size is for all events beging logged on the device. + */ +- (BFTask *)stopLoggingAsync; + /** See if this event is currently being logged @returns YES if logging, NO otherwise diff --git a/MetaWear/Classes/Core/MBLEvent.m b/MetaWear/Classes/Core/MBLEvent.m index 38cbedf..e5fec0f 100644 --- a/MetaWear/Classes/Core/MBLEvent.m +++ b/MetaWear/Classes/Core/MBLEvent.m @@ -209,17 +209,8 @@ - (BFTask *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging remainingHandler:(M [device incrementCount]; return [[[BFTask taskFromMetaWearWithBlock:^id{ - if (stopLogging && self.isLoggingImpl) { - self.isLoggingImpl = NO; - - return [[[[self deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [device.logging stopLoggingEvent:self]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self deinitializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Since log downloads take a while, let's save state here - return [device synchronizeAsync]; - }]; + if (stopLogging) { + return [self stopLoggingAsync]; } return nil; }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { @@ -251,6 +242,39 @@ - (BFTask *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging return [self downloadLogAndStopLoggingAsync:stopLogging progressHandler:nil]; } +- (BFTask *)stopLoggingAsync +{ + MBLMetaWear *device = self.module.device; + if (device.state != MBLConnectionStateConnected) { + NSError *error = [NSError errorWithDomain:kMBLErrorDomain + code:kMBLErrorNotConnected + userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before using the API."}]; + return [BFTask taskWithError:error]; + } + + [device incrementCount]; + return [[[BFTask taskFromMetaWearWithBlock:^id{ + if (self.isLoggingImpl) { + self.isLoggingImpl = NO; + + return [[[[self deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { + return [device.logging stopLoggingEvent:self]; + }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { + return [self deinitializeAsync]; + }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { + // Since log downloads take a while, let's save state here + return [device synchronizeAsync]; + }]; + } + return nil; + }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { + return [device.logging.logLength readAsync]; + }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { + [device decrementCount]; + return task; + }]; +} + - (BOOL)isLogging { BOOL __block result; @@ -498,13 +522,12 @@ typedef struct __attribute__((packed)) { - (MBLFilter *)periodicSampleOfEvent:(uint32_t)periodInMsec { - if (self.format.length > 8) { - [NSException raise:@"Invalid Filter" format:@"Can't use periodic sample filter with events of size > 8, %d invalid", self.format.length]; - } - deltat_param_t params = {0}; params.filter_id = 8; if (self.module.device.dataProcessor.moduleInfo.moduleRevision == 0) { + if (self.format.length > 8) { + [NSException raise:@"Invalid Filter" format:@"Can't use periodic sample filter with events of size > 8, %d invalid", self.format.length]; + } params.datalen = self.format.length - 1; params.filter_mode = 0; } else { @@ -685,9 +708,11 @@ - (MBLFilter *)pulseDetectorOfEventWithThreshold:(double)threshold width:(uint16 params.outputmode = output; params.width = width; - if (![MBLConversion number:[self.format numberFromDouble:threshold] toInt32:¶ms.threshold]) { + int32_t thresholdTmp; + if (![MBLConversion number:[self.format numberFromDouble:threshold] toInt32:&thresholdTmp]) { [NSException raise:@"Invalid data" format:@"threshold %f cannot fit in int32", threshold]; } + params.threshold = thresholdTmp; MBLFormat *format = nil; // We make a copy of the formatter because we want to force it to 4 byte length diff --git a/MetaWear/Classes/Core/MBLMetaWear.m b/MetaWear/Classes/Core/MBLMetaWear.m index 35e3ac5..c9c9555 100644 --- a/MetaWear/Classes/Core/MBLMetaWear.m +++ b/MetaWear/Classes/Core/MBLMetaWear.m @@ -1233,6 +1233,11 @@ - (void)resetDevice - (BFTask *)checkForFirmwareUpdateAsync { + if (self.state != MBLConnectionStateConnected) { + return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain + code:kMBLErrorNotConnected + userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before performing checkForFirmwareUpdateAsync."}]]; + } BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; [[[MBLFirmwareUpdateManager getLatestFirmwareForDeviceAsync:self.deviceInfo] successOnMetaWear:^(MBLFirmwareBuild * _Nonnull result) { if ([MBLConstants versionString:self.deviceInfo.firmwareRevision isLessThan:result.firmwareRev]) { diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m index 22286cd..6ce9219 100644 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m +++ b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m @@ -36,6 +36,7 @@ #import "MBLAccelerometerBosch+Private.h" #import "MBLAccelerometer+Private.h" #import "MBLAccelerometerBoschDataReadyEvent.h" +#import "MBLAccelerometerBoschPackedDataReadyEvent.h" #import "MBLAccelerometerBoschAxisReadyEvent.h" #import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" #import "MBLAccelerometerBoschOrientationEvent.h" @@ -66,6 +67,9 @@ - (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo * if (self) { // MBLAccelerometer properties self.dataReadyEvent = [[MBLAccelerometerBoschDataReadyEvent alloc] initWithAccelerometer:self]; + if (moduleInfo.moduleRevision >= 1) { + self.packedDataReadyEvent = [[MBLAccelerometerBoschPackedDataReadyEvent alloc] initWithAccelerometer:self]; + } self.xAxisReadyEvent = [[MBLAccelerometerBoschAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisX]; self.yAxisReadyEvent = [[MBLAccelerometerBoschAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisY]; self.zAxisReadyEvent = [[MBLAccelerometerBoschAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisZ]; diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h index 2b2f524..1e417d2 100644 --- a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h +++ b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h @@ -83,9 +83,17 @@ typedef NS_ENUM(uint8_t, MBLAccelerometerTapType) { /** Event representing a new accelerometer data sample complete with x, y, and z axis data. This event will occur at the neareast hardware value - to sampleFrequency. Event callbacks will be provided an MBLAccelerometerData object. + to sampleFrequency. Event callbac + ks will be provided an MBLAccelerometerData object. */ @property (nonatomic, readonly) MBLEvent *dataReadyEvent; +/** + Event representing a new accelerometer data sample, but with 3 raw samples + packed into a single BLE packet at the link level. This makes streaming much + more efficient, but at a slight cost of latency. This should certainly be used + for streaming at speeds over 100Hz, but should not be used for logging. + */ +@property (nonatomic, readonly, nullable) MBLEvent *packedDataReadyEvent; /** Event representing a new accelerometer X axis sample. This event will occur at sampleFrequency. Event callbacks will be provided an diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m index fd0d395..4b386b7 100644 --- a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m +++ b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m @@ -51,6 +51,7 @@ @interface MBLAccelerometer() @property (nonatomic) MBLEvent *dataReadyEvent; +@property (nonatomic) MBLEvent *packedDataReadyEvent; @property (nonatomic) MBLEvent *xAxisReadyEvent; @property (nonatomic) MBLEvent *yAxisReadyEvent; @property (nonatomic) MBLEvent *zAxisReadyEvent; diff --git a/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m b/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m index c0f72b0..9f205a1 100644 --- a/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m +++ b/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m @@ -39,6 +39,7 @@ #import "MBLRegister+Private.h" #import "MBLNumericFormatter.h" #import "MBLAccelerometerDataReadyEvent.h" +#import "MBLAccelerometerPackedDataReadyEvent.h" #import "MBLAccelerometerFreeFallEvent.h" #import "MBLAccelerometerOrientationEvent.h" #import "MBLAccelerometerTapEvent.h" @@ -76,6 +77,9 @@ - (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo * MBLRegister *globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; self.dataSettings = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; self.dataReadyEvent = [[MBLAccelerometerDataReadyEvent alloc] initWithAccelerometer:self]; + if (moduleInfo.moduleRevision >= 1) { + self.packedDataReadyEvent = [[MBLAccelerometerPackedDataReadyEvent alloc] initWithAccelerometer:self]; + } self.xAxisReadyEvent = [[MBLAccelerometerAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisX]; self.yAxisReadyEvent = [[MBLAccelerometerAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisY]; self.zAxisReadyEvent = [[MBLAccelerometerAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisZ]; diff --git a/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m b/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m index e0a0cd7..fb99438 100644 --- a/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m +++ b/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m @@ -37,6 +37,7 @@ #import "MBLGyro+Private.h" #import "MBLMetaWear+Private.h" #import "MBLGyroBMI160DataReadyEvent.h" +#import "MBLGyroBMI160PackedDataReadyEvent.h" #import "MBLGyroBMI160AxisReadyEvent.h" #import "MBLNumericFormatter.h" @@ -54,6 +55,9 @@ - (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo * if (self) { // MBLGyro properties self.dataReadyEvent = [[MBLGyroBMI160DataReadyEvent alloc] initWithGyro:self]; + if (moduleInfo.moduleRevision >= 1) { + self.packedDataReadyEvent = [[MBLGyroBMI160PackedDataReadyEvent alloc] initWithGyro:self]; + } self.xAxisReadyEvent = [[MBLGyroBMI160AxisReadyEvent alloc] initWithGyro:self axis:MBLGyroAxisX]; self.yAxisReadyEvent = [[MBLGyroBMI160AxisReadyEvent alloc] initWithGyro:self axis:MBLGyroAxisY]; self.zAxisReadyEvent = [[MBLGyroBMI160AxisReadyEvent alloc] initWithGyro:self axis:MBLGyroAxisZ]; diff --git a/MetaWear/Classes/Modules/Gyro/MBLGyro.h b/MetaWear/Classes/Modules/Gyro/MBLGyro.h index 5cf8ef6..6bd3d63 100644 --- a/MetaWear/Classes/Modules/Gyro/MBLGyro.h +++ b/MetaWear/Classes/Modules/Gyro/MBLGyro.h @@ -73,6 +73,13 @@ typedef NS_ENUM(uint8_t, MBLGyroAxis) { to sampleFrequency. Event callbacks will be provided an MBLGyroData object. */ @property (nonatomic, readonly) MBLEvent *dataReadyEvent; +/** + Event representing a new gryo data sample, but with 3 raw samples + packed into a single BLE packet at the link level. This makes streaming much + more efficient, but at a slight cost of latency. This should certainly be used + for streaming at speeds over 100Hz, but should not be used for logging. + */ +@property (nonatomic, readonly, nullable) MBLEvent *packedDataReadyEvent; /** Event representing a new gyro X-axis sample. This event will occur at sampleFrequency. Event callbacks will be provided an MBLNumericData diff --git a/MetaWear/Classes/Modules/Gyro/MBLGyro.m b/MetaWear/Classes/Modules/Gyro/MBLGyro.m index 3d167b1..fa4fcbb 100644 --- a/MetaWear/Classes/Modules/Gyro/MBLGyro.m +++ b/MetaWear/Classes/Modules/Gyro/MBLGyro.m @@ -41,6 +41,7 @@ @interface MBLGyro () @property (nonatomic) MBLEvent *dataReadyEvent; +@property (nonatomic) MBLEvent *packedDataReadyEvent; @property (nonatomic) MBLEvent *xAxisReadyEvent; @property (nonatomic) MBLEvent *yAxisReadyEvent; @property (nonatomic) MBLEvent *zAxisReadyEvent; diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h index ed8711b..d0d0207 100644 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h +++ b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h @@ -35,13 +35,11 @@ #import "MBLEvent+Private.h" @class MBLAccelerometerBosch; -@class MBLAccelerometerBoschPackedDataReadyEvent; NS_ASSUME_NONNULL_BEGIN @interface MBLAccelerometerBoschDataReadyEvent : MBLEvent @property (nonatomic) MBLRegister *accelDataInterruptEn; -@property (nonatomic) MBLAccelerometerBoschPackedDataReadyEvent *packedData; - (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; @end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m index 3cde170..d4da208 100644 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m +++ b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m @@ -38,16 +38,7 @@ #import "MBLAccelerometerBMI160+Private.h" #import "MBLAccelerometerBoschFormat.h" #import "MBLNumericFormatter.h" - -typedef NS_ENUM(uint8_t, MBLBoschPackedDataMode) { - MBLBoschPackedDataModeOff = 0, - MBLBoschPackedDataModeNormal = 1, - MBLBoschPackedDataModePacked = 2 -}; - -@interface MBLAccelerometerBoschDataReadyEvent () -@property (nonatomic) MBLBoschPackedDataMode packerMode; -@end +#import "MBLLogger.h" @implementation MBLAccelerometerBoschDataReadyEvent @@ -57,9 +48,6 @@ - (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer self = [super initWithModule:accelerometer registerId:0x4 format:[[MBLAccelerometerBoschFormat alloc] initWithAccelerometer:accelerometer packed:NO]]; if (self) { self.accelDataInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - if (accelerometer.moduleInfo.moduleRevision >= 1) { - self.packedData = [[MBLAccelerometerBoschPackedDataReadyEvent alloc] initWithAccelerometer:accelerometer]; - } } return self; } @@ -80,39 +68,11 @@ - (BFTask *)performAsyncDeinitialization - (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler { - if (!self.packedData) { - return [super startNotificationsWithHandlerAsync:handler]; - } - MBLAccelerometerBosch *accelerometer = (MBLAccelerometerBosch *)self.module; - if (self.packerMode == MBLBoschPackedDataModeOff) { - // Turn on the packer for frequencies over 100 - self.packerMode = accelerometer.sampleFrequency >= 100 ? MBLBoschPackedDataModePacked : MBLBoschPackedDataModeNormal; - } - return self.packerMode == MBLBoschPackedDataModePacked ? [self.packedData startNotificationsWithHandlerAsync:handler] - : [super startNotificationsWithHandlerAsync:handler]; -} - -- (BFTask *)stopNotificationsAsync -{ - if (!self.packedData) { - return [super stopNotificationsAsync]; - } - - MBLBoschPackedDataMode prevMode = self.packerMode; - self.packerMode = MBLBoschPackedDataModeOff; - return prevMode == MBLBoschPackedDataModePacked ? [self.packedData stopNotificationsAsync] - : [super stopNotificationsAsync]; -} - -- (BOOL)isNotifying -{ - if (!self.packedData) { - return [super isNotifying]; + if (accelerometer.packedDataReadyEvent && accelerometer.sampleFrequency >= 100 ) { + MBLLog(MBLLogLevelWarning, @"For high frequency streaming, use packedDataReadyEvent"); } - - return self.packerMode == MBLBoschPackedDataModePacked ? [self.packedData isNotifying] - : [super isNotifying]; + return [super startNotificationsWithHandlerAsync:handler]; } @end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m index 29f00aa..a6c610e 100644 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m +++ b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m @@ -72,4 +72,11 @@ - (BFTask *)performAsyncDeactivation return [accelerometer.dataReadyEvent deactivateAsync]; } +- (BFTask *)startLoggingAsync +{ + return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain + code:kMBLErrorOperationInvalid + userInfo:@{NSLocalizedDescriptionKey : @"You should only log dataReadyEvent and not packedDataReadyEvent."}]]; +} + @end diff --git a/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h b/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h index 4ac3158..371d4d1 100644 --- a/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h +++ b/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h @@ -41,6 +41,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MBLAccelerometer (Private) @property (nonatomic) MBLEvent *dataReadyEvent; +@property (nonatomic) MBLEvent *packedDataReadyEvent; @property (nonatomic) MBLEvent *xAxisReadyEvent; @property (nonatomic) MBLEvent *yAxisReadyEvent; @property (nonatomic) MBLEvent *zAxisReadyEvent; diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m index 330597a..aab75de 100644 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m +++ b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m @@ -41,18 +41,11 @@ #import "MBLNumericFormatter.h" #import "mma8452q.h" #import "BFTask+MBLPrivate.h" +#import "MBLLogger.h" -typedef NS_ENUM(uint8_t, MBLAccelerometerPackedDataMode) { - MBLAccelerometerPackedDataModeOff = 0, - MBLAccelerometerPackedDataModeNormal = 1, - MBLAccelerometerPackedDataModePacked = 2 -}; - @interface MBLAccelerometerDataReadyEvent () @property (nonatomic) MBLRegister *dataEnable; -@property (nonatomic) MBLAccelerometerPackedDataReadyEvent *packedData; -@property (nonatomic) MBLAccelerometerPackedDataMode packerMode; @end @implementation MBLAccelerometerDataReadyEvent @@ -62,9 +55,6 @@ - (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer self = [super initWithModule:accelerometer registerId:0x4 format:[[MBLAccelerometerMMA8452QFormat alloc] initWithPacked:NO]]; if (self) { self.dataEnable = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x2 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - if (accelerometer.moduleInfo.moduleRevision >= 1) { - self.packedData = [[MBLAccelerometerPackedDataReadyEvent alloc] initWithAccelerometer:accelerometer]; - } } return self; } @@ -92,39 +82,11 @@ - (BFTask *)performAsyncDeactivation - (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler { - if (!self.packedData) { - return [super startNotificationsWithHandlerAsync:handler]; - } - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - if (self.packerMode == MBLAccelerometerPackedDataModeOff) { - // Turn on the packer for frequencies over 100 - self.packerMode = accelerometer.sampleFrequency >= 100 ? MBLAccelerometerPackedDataModePacked : MBLAccelerometerPackedDataModeNormal; - } - return self.packerMode == MBLAccelerometerPackedDataModePacked ? [self.packedData startNotificationsWithHandlerAsync:handler] - : [super startNotificationsWithHandlerAsync:handler]; -} - -- (BFTask *)stopNotificationsAsync -{ - if (!self.packedData) { - return [super stopNotificationsAsync]; - } - - MBLAccelerometerPackedDataMode prevMode = self.packerMode; - self.packerMode = MBLAccelerometerPackedDataModeOff; - return prevMode == MBLAccelerometerPackedDataModePacked ? [self.packedData stopNotificationsAsync] - : [super stopNotificationsAsync]; -} - -- (BOOL)isNotifying -{ - if (!self.packedData) { - return [super isNotifying]; + if (accelerometer.packedDataReadyEvent && accelerometer.sampleFrequency >= 100) { + MBLLog(MBLLogLevelWarning, @"For high frequency streaming, use packedDataReadyEvent"); } - - return self.packerMode == MBLAccelerometerPackedDataModePacked ? [self.packedData isNotifying] - : [super isNotifying]; + return [super startNotificationsWithHandlerAsync:handler]; } @end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m index 5400cda..17b13b8 100644 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m +++ b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m @@ -79,4 +79,11 @@ - (BFTask *)performAsyncDeactivation return [accelerometer.dataReadyEvent deactivateAsync]; } +- (BFTask *)startLoggingAsync +{ + return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain + code:kMBLErrorOperationInvalid + userInfo:@{NSLocalizedDescriptionKey : @"You should only log dataReadyEvent and not packedDataReadyEvent."}]]; +} + @end diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m index e582fcf..dc7e2f3 100644 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m +++ b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m @@ -42,17 +42,8 @@ #import "MBLNumericFormatter.h" #import "MBLGyroBMI160Format.h" #import "MBLGyroBMI160PackedDataReadyEvent.h" +#import "MBLLogger.h" -typedef NS_ENUM(uint8_t, MBLGyroPackedDataMode) { - MBLGyroPackedDataModeOff = 0, - MBLGyroPackedDataModeNormal = 1, - MBLGyroPackedDataModePacked = 2 -}; - -@interface MBLGyroBMI160DataReadyEvent () -@property (nonatomic) MBLGyroPackedDataMode packerMode; -@property (nonatomic) MBLGyroBMI160PackedDataReadyEvent *packedData; -@end @implementation MBLGyroBMI160DataReadyEvent @@ -61,9 +52,6 @@ - (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro self = [super initWithModule:gyro registerId:0x5 format:[[MBLGyroBMI160Format alloc] initWithGyro:gyro packed:NO]]; if (self) { self.dataInterruptEn = [[MBLRegister alloc] initWithModule:gyro registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - if (gyro.moduleInfo.moduleRevision >= 1) { - self.packedData = [[MBLGyroBMI160PackedDataReadyEvent alloc] initWithGyro:gyro]; - } } return self; } @@ -84,40 +72,11 @@ - (BFTask *)performAsyncDeactivation - (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler { - if (!self.packedData) { - return [super startNotificationsWithHandlerAsync:handler]; - } - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - if (self.packerMode == MBLGyroPackedDataModeOff) { - // Turn on the packer for frequencies over 100 - self.packerMode = gyro.sampleFrequency >= 100 ? MBLGyroPackedDataModePacked : MBLGyroPackedDataModeNormal; - } - return self.packerMode == MBLGyroPackedDataModePacked ? [self.packedData startNotificationsWithHandlerAsync:handler] - : [super startNotificationsWithHandlerAsync:handler]; -} - -- (BFTask *)stopNotificationsAsync -{ - if (!self.packedData) { - return [super stopNotificationsAsync]; - } - - MBLGyroPackedDataMode prevMode = self.packerMode; - self.packerMode = MBLGyroPackedDataModeOff; - return prevMode == MBLGyroPackedDataModePacked ? [self.packedData stopNotificationsAsync] - : [super stopNotificationsAsync]; -} - -- (BOOL)isNotifying -{ - if (!self.packedData) { - return [super isNotifying]; + if (gyro.packedDataReadyEvent && gyro.sampleFrequency >= 100 ) { + MBLLog(MBLLogLevelWarning, @"For high frequency streaming, use packedDataReadyEvent"); } - - return self.packerMode == MBLGyroPackedDataModePacked ? [self.packedData isNotifying] - : [super isNotifying]; + return [super startNotificationsWithHandlerAsync:handler]; } - @end diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m index 3d6ed47..d8e48e2 100644 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m +++ b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m @@ -76,4 +76,11 @@ - (BFTask *)performAsyncDeactivation return [gyro.dataReadyEvent deactivateAsync]; } +- (BFTask *)startLoggingAsync +{ + return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain + code:kMBLErrorOperationInvalid + userInfo:@{NSLocalizedDescriptionKey : @"You should only log dataReadyEvent and not packedDataReadyEvent."}]]; +} + @end diff --git a/MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h b/MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h index 6055575..29cdd46 100644 --- a/MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h +++ b/MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h @@ -41,6 +41,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MBLGyro (Private) @property (nonatomic) MBLEvent *dataReadyEvent; +@property (nonatomic) MBLEvent *packedDataReadyEvent; @property (nonatomic) MBLEvent *xAxisReadyEvent; @property (nonatomic) MBLEvent *yAxisReadyEvent; @property (nonatomic) MBLEvent *zAxisReadyEvent; diff --git a/MetaWear/Internal/Modules/Logging/MBLLogging.m b/MetaWear/Internal/Modules/Logging/MBLLogging.m index 179cc1e..d3b562f 100644 --- a/MetaWear/Internal/Modules/Logging/MBLLogging.m +++ b/MetaWear/Internal/Modules/Logging/MBLLogging.m @@ -161,13 +161,13 @@ - (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo * uint8_t triggerCount = 8; // This was the old default if (moduleInfo.moduleData.length) { triggerCount = *(uint8_t *)moduleInfo.moduleData.bytes; - //if (moduleInfo.moduleRevision == 1) { - // mw_log_module_info *info = (mw_log_module_info *)moduleInfo.moduleData.bytes; - // MBLLog(MBLLogLevelDebug, @"%d", info->logCap); - //} else { - // mw_log_module_info_old *info = (mw_log_module_info_old *)moduleInfo.moduleData.bytes; - // MBLLog(MBLLogLevelDebug, @"%d", info->logCap); - //} + if (moduleInfo.moduleRevision >= 1) { + mw_log_module_info *info = (mw_log_module_info *)moduleInfo.moduleData.bytes; + MBLLog(MBLLogLevelDebug, @"Log Capacity: %d", info->logCap); + } else { + mw_log_module_info_old *info = (mw_log_module_info_old *)moduleInfo.moduleData.bytes; + MBLLog(MBLLogLevelDebug, @"Log Capacity: %d", info->logCap); + } } self.triggers = [NSMutableArray arrayWithCapacity:triggerCount]; diff --git a/MetaWear/Internal/Modules/Logging/MBLLoggingV2.m b/MetaWear/Internal/Modules/Logging/MBLLoggingV2.m index 41fe84f..adb7ec2 100644 --- a/MetaWear/Internal/Modules/Logging/MBLLoggingV2.m +++ b/MetaWear/Internal/Modules/Logging/MBLLoggingV2.m @@ -155,6 +155,12 @@ - (void)processRawEntry:(const mw_log_entry_t *)rawEntry NSData *data = [NSData dataWithBytes:rawEntry->data length:4]; NSDate __block *date = nil; date = self.device.nonVolatileState.logStartingDates[resetId]; + if ([[NSNull null] isEqual:date]) { + MBLLog(MBLLogLevelError, @"Timestamp error, please call setConfiguration:nil on the MBLMetaWear object to reset log"); + date = [NSDate dateWithTimeIntervalSince1970:0]; + self.device.nonVolatileState.logStartingDates[resetId] = date; + } + // If reset uid changes then reset lastTimestamp if (resetId != self.lastResetId) { self.lastTimestamp = 0; @@ -169,11 +175,6 @@ - (void)processRawEntry:(const mw_log_entry_t *)rawEntry self.lastTimestamp = entryTs; self.lastResetId = resetId; - if ([[NSNull null] isEqual:date]) { - MBLLog(MBLLogLevelError, @"Timestamp error, please call setConfiguration:nil on the MBLMetaWear object to reset log"); - date = [NSDate dateWithTimeIntervalSince1970:0]; - self.device.nonVolatileState.logStartingDates[resetId] = date; - } // Convert to real time NSDate *timestamp = [date dateByAddingTimeInterval:entryTs * LOGGING_SEC_PER_TIMESTAMP]; diff --git a/MetaWear/MetaWear.xcodeproj/project.pbxproj b/MetaWear/MetaWear.xcodeproj/project.pbxproj index a764801..f84512e 100644 --- a/MetaWear/MetaWear.xcodeproj/project.pbxproj +++ b/MetaWear/MetaWear.xcodeproj/project.pbxproj @@ -34,7 +34,6 @@ 400655CE1D9A479A0066AB54 /* MBLConnectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655CC1D9A46FF0066AB54 /* MBLConnectionTests.m */; }; 400655D11D9A67FD0066AB54 /* MBLMetaWearTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */; }; 400655D21D9A67FD0066AB54 /* MBLMetaWearTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */; }; - 403708591DBFD5FF003BF743 /* gen_api_reference.sh in Resources */ = {isa = PBXBuildFile; fileRef = 403708581DBFD5FF003BF743 /* gen_api_reference.sh */; }; 403BF7731D9E348000B22B82 /* DFUTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 403BF7721D9E342800B22B82 /* DFUTests.m */; }; 40703E281D94B09600F38FF0 /* MBLConverstionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E101D94AE5000F38FF0 /* MBLConverstionTests.m */; }; 40703E3A1D94B8CA00F38FF0 /* MBLConverstionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E101D94AE5000F38FF0 /* MBLConverstionTests.m */; }; @@ -126,39 +125,8 @@ 400655C51D9A1DF30066AB54 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; name = .travis.yml; path = ../.travis.yml; sourceTree = ""; }; 400655CC1D9A46FF0066AB54 /* MBLConnectionTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBLConnectionTests.m; sourceTree = ""; }; 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBLMetaWearTests.m; sourceTree = ""; }; - 402B7E191DADA6B1005F81D3 /* accelerometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometer.rst; sourceTree = ""; }; - 402B7E1A1DADA6B1005F81D3 /* accelerometerbmi160.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometerbmi160.rst; sourceTree = ""; }; - 402B7E1B1DADA6B1005F81D3 /* accelerometermma8452q.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometermma8452q.rst; sourceTree = ""; }; - 402B7E1C1DADA6B1005F81D3 /* ambient_light.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ambient_light.rst; sourceTree = ""; }; - 402B7E1D1DADA6B1005F81D3 /* ambientlightltr329.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ambientlightltr329.rst; sourceTree = ""; }; - 402B7E1E1DADA6B1005F81D3 /* ancs.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ancs.rst; sourceTree = ""; }; - 402B7E1F1DADA6B1005F81D3 /* barometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = barometer.rst; sourceTree = ""; }; - 402B7E201DADA6B1005F81D3 /* barometerbmp280.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = barometerbmp280.rst; sourceTree = ""; }; - 402B7E211DADA6B1005F81D3 /* conf.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = conf.py; sourceTree = ""; }; - 402B7E221DADA6B1005F81D3 /* data.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = data.rst; sourceTree = ""; }; - 402B7E231DADA6B1005F81D3 /* events.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = events.rst; sourceTree = ""; }; - 402B7E241DADA6B1005F81D3 /* filters.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = filters.rst; sourceTree = ""; }; - 402B7E251DADA6B1005F81D3 /* gpio.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gpio.rst; sourceTree = ""; }; - 402B7E261DADA6B1005F81D3 /* gyro.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gyro.rst; sourceTree = ""; }; - 402B7E271DADA6B1005F81D3 /* gyrobmi160.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gyrobmi160.rst; sourceTree = ""; }; - 402B7E281DADA6B1005F81D3 /* haptic.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = haptic.rst; sourceTree = ""; }; - 402B7E291DADA6B1005F81D3 /* ibeacon.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ibeacon.rst; sourceTree = ""; }; - 402B7E2A1DADA6B1005F81D3 /* index.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.rst; sourceTree = ""; }; - 402B7E2B1DADA6B1005F81D3 /* led.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = led.rst; sourceTree = ""; }; - 402B7E2C1DADA6B1005F81D3 /* magnetometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = magnetometer.rst; sourceTree = ""; }; - 402B7E2D1DADA6B1005F81D3 /* magnetometerbmm150.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = magnetometerbmm150.rst; sourceTree = ""; }; - 402B7E2E1DADA6B1005F81D3 /* metawear_manager.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = metawear_manager.rst; sourceTree = ""; }; - 402B7E2F1DADA6B1005F81D3 /* metawear.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = metawear.rst; sourceTree = ""; }; - 402B7E301DADA6B1005F81D3 /* modules.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = modules.rst; sourceTree = ""; }; - 402B7E311DADA6B1005F81D3 /* neopixel.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = neopixel.rst; sourceTree = ""; }; - 402B7E321DADA6B1005F81D3 /* pushbutton.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pushbutton.rst; sourceTree = ""; }; - 402B7E331DADA6B1005F81D3 /* serial.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = serial.rst; sourceTree = ""; }; - 402B7E341DADA6B1005F81D3 /* settings.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = settings.rst; sourceTree = ""; }; - 402B7E351DADA6B1005F81D3 /* temperature.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = temperature.rst; sourceTree = ""; }; - 402B7E361DADA6B1005F81D3 /* timer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = timer.rst; sourceTree = ""; }; - 403708581DBFD5FF003BF743 /* gen_api_reference.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = gen_api_reference.sh; path = ../gen_api_reference.sh; sourceTree = ""; }; + 400C47D91E8F1CEF00F72568 /* gen_api_reference.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = gen_api_reference.sh; sourceTree = ""; }; 403BF7721D9E342800B22B82 /* DFUTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DFUTests.m; sourceTree = ""; }; - 4061029B1DD5343900F10575 /* sensor_fusion.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sensor_fusion.rst; sourceTree = ""; }; 40703E061D94AE3500F38FF0 /* MetaWearUnitTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "MetaWearUnitTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 40703E0A1D94AE3500F38FF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../../MetaWearUnitTests-iOS/Info.plist"; sourceTree = ""; }; 40703E0F1D94AE5000F38FF0 /* MBLAutomaticTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = MBLAutomaticTests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; @@ -220,6 +188,47 @@ 40CBC8951D9B37040078573C /* MBLMetaBootTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = MBLMetaBootTests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 40CBC8981D9B7D5E0078573C /* MagnetometerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MagnetometerTests.m; sourceTree = ""; }; 40D2A7081DC0192300916C7E /* MetaWearPrivate.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = MetaWearPrivate.podspec; path = ../MetaWearPrivate.podspec; sourceTree = ""; }; + 40F5A8BF1E8F1C4200BC143D /* accelerometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometer.rst; sourceTree = ""; }; + 40F5A8C01E8F1C4200BC143D /* accelerometerbmi160.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometerbmi160.rst; sourceTree = ""; }; + 40F5A8C11E8F1C4200BC143D /* accelerometermma8452q.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometermma8452q.rst; sourceTree = ""; }; + 40F5A8C21E8F1C4200BC143D /* advanced_features.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = advanced_features.rst; sourceTree = ""; }; + 40F5A8C31E8F1C4200BC143D /* ambient_light.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ambient_light.rst; sourceTree = ""; }; + 40F5A8C41E8F1C4200BC143D /* ambientlightltr329.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ambientlightltr329.rst; sourceTree = ""; }; + 40F5A8C51E8F1C4200BC143D /* ancs.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ancs.rst; sourceTree = ""; }; + 40F5A8C61E8F1C4200BC143D /* barometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = barometer.rst; sourceTree = ""; }; + 40F5A8C71E8F1C4200BC143D /* barometerbmp280.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = barometerbmp280.rst; sourceTree = ""; }; + 40F5A8C81E8F1C4200BC143D /* color_sensor_tcs3472.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = color_sensor_tcs3472.rst; sourceTree = ""; }; + 40F5A8C91E8F1C4200BC143D /* color_sensor.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = color_sensor.rst; sourceTree = ""; }; + 40F5A8CA1E8F1C4200BC143D /* conf.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = conf.py; sourceTree = ""; }; + 40F5A8CB1E8F1C4200BC143D /* core_modules.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = core_modules.rst; sourceTree = ""; }; + 40F5A8CC1E8F1C4200BC143D /* data_processor.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = data_processor.rst; sourceTree = ""; }; + 40F5A8CD1E8F1C4200BC143D /* data.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = data.rst; sourceTree = ""; }; + 40F5A8CE1E8F1C4200BC143D /* events.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = events.rst; sourceTree = ""; }; + 40F5A8CF1E8F1C4200BC143D /* gpio.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gpio.rst; sourceTree = ""; }; + 40F5A8D01E8F1C4200BC143D /* gyro.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gyro.rst; sourceTree = ""; }; + 40F5A8D11E8F1C4200BC143D /* gyrobmi160.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gyrobmi160.rst; sourceTree = ""; }; + 40F5A8D21E8F1C4200BC143D /* haptic.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = haptic.rst; sourceTree = ""; }; + 40F5A8D31E8F1C4200BC143D /* humidity_bme280.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = humidity_bme280.rst; sourceTree = ""; }; + 40F5A8D41E8F1C4200BC143D /* humidity.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = humidity.rst; sourceTree = ""; }; + 40F5A8D51E8F1C4200BC143D /* ibeacon.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ibeacon.rst; sourceTree = ""; }; + 40F5A8D61E8F1C4200BC143D /* index.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.rst; sourceTree = ""; }; + 40F5A8D71E8F1C4200BC143D /* led.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = led.rst; sourceTree = ""; }; + 40F5A8D81E8F1C4200BC143D /* magnetometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = magnetometer.rst; sourceTree = ""; }; + 40F5A8D91E8F1C4200BC143D /* magnetometerbmm150.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = magnetometerbmm150.rst; sourceTree = ""; }; + 40F5A8DA1E8F1C4200BC143D /* metawear_manager.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = metawear_manager.rst; sourceTree = ""; }; + 40F5A8DB1E8F1C4200BC143D /* metawearboard.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = metawearboard.rst; sourceTree = ""; }; + 40F5A8DC1E8F1C4200BC143D /* neopixel.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = neopixel.rst; sourceTree = ""; }; + 40F5A8DD1E8F1C4200BC143D /* peripherals.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = peripherals.rst; sourceTree = ""; }; + 40F5A8DE1E8F1C4200BC143D /* project_setup.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = project_setup.rst; sourceTree = ""; }; + 40F5A8DF1E8F1C4200BC143D /* proximity_tsl2671.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = proximity_tsl2671.rst; sourceTree = ""; }; + 40F5A8E01E8F1C4200BC143D /* proximity.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = proximity.rst; sourceTree = ""; }; + 40F5A8E11E8F1C4200BC143D /* pushbutton.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pushbutton.rst; sourceTree = ""; }; + 40F5A8E21E8F1C4200BC143D /* sensor_fusion.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sensor_fusion.rst; sourceTree = ""; }; + 40F5A8E31E8F1C4200BC143D /* sensors.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sensors.rst; sourceTree = ""; }; + 40F5A8E41E8F1C4200BC143D /* serial_passthrough.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = serial_passthrough.rst; sourceTree = ""; }; + 40F5A8E51E8F1C4200BC143D /* settings.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = settings.rst; sourceTree = ""; }; + 40F5A8E61E8F1C4200BC143D /* temperature.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = temperature.rst; sourceTree = ""; }; + 40F5A8E71E8F1C4200BC143D /* timer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = timer.rst; sourceTree = ""; }; 484B02B57C8B8237F94E2B65 /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWearIntegrationTests-tvOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.release.xcconfig"; sourceTree = ""; }; 4C9766F13CD493411988E405 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig"; sourceTree = ""; }; 54E10821F9CD84FE00E1EFAA /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig"; sourceTree = ""; }; @@ -336,38 +345,48 @@ 402B7E181DADA696005F81D3 /* Docs */ = { isa = PBXGroup; children = ( - 403708581DBFD5FF003BF743 /* gen_api_reference.sh */, - 402B7E191DADA6B1005F81D3 /* accelerometer.rst */, - 402B7E1A1DADA6B1005F81D3 /* accelerometerbmi160.rst */, - 402B7E1B1DADA6B1005F81D3 /* accelerometermma8452q.rst */, - 402B7E1C1DADA6B1005F81D3 /* ambient_light.rst */, - 402B7E1D1DADA6B1005F81D3 /* ambientlightltr329.rst */, - 402B7E1E1DADA6B1005F81D3 /* ancs.rst */, - 402B7E1F1DADA6B1005F81D3 /* barometer.rst */, - 402B7E201DADA6B1005F81D3 /* barometerbmp280.rst */, - 402B7E211DADA6B1005F81D3 /* conf.py */, - 402B7E221DADA6B1005F81D3 /* data.rst */, - 402B7E231DADA6B1005F81D3 /* events.rst */, - 402B7E241DADA6B1005F81D3 /* filters.rst */, - 402B7E251DADA6B1005F81D3 /* gpio.rst */, - 402B7E261DADA6B1005F81D3 /* gyro.rst */, - 402B7E271DADA6B1005F81D3 /* gyrobmi160.rst */, - 4061029B1DD5343900F10575 /* sensor_fusion.rst */, - 402B7E281DADA6B1005F81D3 /* haptic.rst */, - 402B7E291DADA6B1005F81D3 /* ibeacon.rst */, - 402B7E2A1DADA6B1005F81D3 /* index.rst */, - 402B7E2B1DADA6B1005F81D3 /* led.rst */, - 402B7E2C1DADA6B1005F81D3 /* magnetometer.rst */, - 402B7E2D1DADA6B1005F81D3 /* magnetometerbmm150.rst */, - 402B7E2E1DADA6B1005F81D3 /* metawear_manager.rst */, - 402B7E2F1DADA6B1005F81D3 /* metawear.rst */, - 402B7E301DADA6B1005F81D3 /* modules.rst */, - 402B7E311DADA6B1005F81D3 /* neopixel.rst */, - 402B7E321DADA6B1005F81D3 /* pushbutton.rst */, - 402B7E331DADA6B1005F81D3 /* serial.rst */, - 402B7E341DADA6B1005F81D3 /* settings.rst */, - 402B7E351DADA6B1005F81D3 /* temperature.rst */, - 402B7E361DADA6B1005F81D3 /* timer.rst */, + 400C47D91E8F1CEF00F72568 /* gen_api_reference.sh */, + 40F5A8BF1E8F1C4200BC143D /* accelerometer.rst */, + 40F5A8C01E8F1C4200BC143D /* accelerometerbmi160.rst */, + 40F5A8C11E8F1C4200BC143D /* accelerometermma8452q.rst */, + 40F5A8C21E8F1C4200BC143D /* advanced_features.rst */, + 40F5A8C31E8F1C4200BC143D /* ambient_light.rst */, + 40F5A8C41E8F1C4200BC143D /* ambientlightltr329.rst */, + 40F5A8C51E8F1C4200BC143D /* ancs.rst */, + 40F5A8C61E8F1C4200BC143D /* barometer.rst */, + 40F5A8C71E8F1C4200BC143D /* barometerbmp280.rst */, + 40F5A8C81E8F1C4200BC143D /* color_sensor_tcs3472.rst */, + 40F5A8C91E8F1C4200BC143D /* color_sensor.rst */, + 40F5A8CA1E8F1C4200BC143D /* conf.py */, + 40F5A8CB1E8F1C4200BC143D /* core_modules.rst */, + 40F5A8CC1E8F1C4200BC143D /* data_processor.rst */, + 40F5A8CD1E8F1C4200BC143D /* data.rst */, + 40F5A8CE1E8F1C4200BC143D /* events.rst */, + 40F5A8CF1E8F1C4200BC143D /* gpio.rst */, + 40F5A8D01E8F1C4200BC143D /* gyro.rst */, + 40F5A8D11E8F1C4200BC143D /* gyrobmi160.rst */, + 40F5A8D21E8F1C4200BC143D /* haptic.rst */, + 40F5A8D31E8F1C4200BC143D /* humidity_bme280.rst */, + 40F5A8D41E8F1C4200BC143D /* humidity.rst */, + 40F5A8D51E8F1C4200BC143D /* ibeacon.rst */, + 40F5A8D61E8F1C4200BC143D /* index.rst */, + 40F5A8D71E8F1C4200BC143D /* led.rst */, + 40F5A8D81E8F1C4200BC143D /* magnetometer.rst */, + 40F5A8D91E8F1C4200BC143D /* magnetometerbmm150.rst */, + 40F5A8DA1E8F1C4200BC143D /* metawear_manager.rst */, + 40F5A8DB1E8F1C4200BC143D /* metawearboard.rst */, + 40F5A8DC1E8F1C4200BC143D /* neopixel.rst */, + 40F5A8DD1E8F1C4200BC143D /* peripherals.rst */, + 40F5A8DE1E8F1C4200BC143D /* project_setup.rst */, + 40F5A8DF1E8F1C4200BC143D /* proximity_tsl2671.rst */, + 40F5A8E01E8F1C4200BC143D /* proximity.rst */, + 40F5A8E11E8F1C4200BC143D /* pushbutton.rst */, + 40F5A8E21E8F1C4200BC143D /* sensor_fusion.rst */, + 40F5A8E31E8F1C4200BC143D /* sensors.rst */, + 40F5A8E41E8F1C4200BC143D /* serial_passthrough.rst */, + 40F5A8E51E8F1C4200BC143D /* settings.rst */, + 40F5A8E61E8F1C4200BC143D /* temperature.rst */, + 40F5A8E71E8F1C4200BC143D /* timer.rst */, ); name = Docs; path = ../Docs/source; @@ -897,7 +916,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 403708591DBFD5FF003BF743 /* gen_api_reference.sh in Resources */, 4078203E1D9DD6B200FF5134 /* MetaWearIntegrationTests-tvOS-Info.plist in Resources */, 40D2A7091DC0192300916C7E /* MetaWearPrivate.podspec in Resources */, ); diff --git a/MetaWear/Tests/Integration/AutomaticTests.m b/MetaWear/Tests/Integration/AutomaticTests.m index 9dff52a..e3fbf9e 100644 --- a/MetaWear/Tests/Integration/AutomaticTests.m +++ b/MetaWear/Tests/Integration/AutomaticTests.m @@ -495,6 +495,42 @@ - (void)testAccelerometerLogging XCTAssertGreaterThanOrEqual(progressCount, 4); } +- (void)testStopLogWithoutDownload +{ + CapabilityCheck(self.device.accelerometer.dataReadyEvent); + + self.device.accelerometer.sampleFrequency = [self accelerometerFrequencyNear:200]; + + int __block entryCount = 0; + [self.device.accelerometer.dataReadyEvent startLoggingAsync]; + + XCTestExpectation *loggingExpectation = [self expectationWithDescription:@"logging accelerometer data"]; + // Let the log run for 2.0 seconds + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [[self.device.accelerometer.dataReadyEvent stopLoggingAsync] success:^(MBLNumericData * _Nonnull result) { + entryCount = result.value.intValue; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [[self.device.accelerometer.dataReadyEvent downloadLogAndStopLoggingAsync:YES remainingHandler:^(uint32_t totalEntries, uint32_t remainingEntries) { + XCTAssertEqual(totalEntries, entryCount); + }] success:^(NSArray * _Nonnull result) { + // Finished the test! + // We were having trouble with extra samples getting into the log after the above + // readout, so here we do an extra purge after the accelermoeter has had time to + // empty its buffers. + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [[self.device.logging stopAndClearLog] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { + [loggingExpectation fulfill]; + return nil; + }]; + }); + }]; + }); + }]; + }); + [self waitForExpectationsWithTimeout:60 handler:nil]; +} + - (void)testAccelerometerRMSLogging { CapabilityCheck(self.device.accelerometer.rmsDataReadyEvent); @@ -1986,16 +2022,16 @@ - (void)testPackedAccelStream CapabilityCheck(self.device.accelerometer.dataReadyEvent); self.device.accelerometer.sampleFrequency = [self accelerometerFrequencyNear:400]; - [self eventUpdateTest:self.device.accelerometer.dataReadyEvent time:10 frequency:self.device.accelerometer.sampleFrequency]; -}; + [self eventUpdateTest:self.device.accelerometer.packedDataReadyEvent time:10 frequency:self.device.accelerometer.sampleFrequency]; +} - (void)testPackedGyroStream { CapabilityCheck(self.device.gyro.dataReadyEvent); self.device.gyro.sampleFrequency = 400; - [self eventUpdateTest:self.device.gyro.dataReadyEvent time:10 frequency:self.device.gyro.sampleFrequency]; -}; + [self eventUpdateTest:self.device.gyro.packedDataReadyEvent time:10 frequency:self.device.gyro.sampleFrequency]; +} - (void)testSensorFusion { diff --git a/MetaWearPrivate.podspec b/MetaWearPrivate.podspec index 5851a3d..664dc9c 100644 --- a/MetaWearPrivate.podspec +++ b/MetaWearPrivate.podspec @@ -2,7 +2,7 @@ Pod::Spec.new do |s| # Same as MetaWear.podspec, but with access to private header files for our testing and development pleasure s.name = 'MetaWearPrivate' s.module_name = 'MetaWear' - s.version = '2.8.3' + s.version = '2.8.4' s.license = { :type => 'Commercial', :text => 'See https://www.mbientlab.com/terms/', :file => 'LICENSE' } s.homepage = 'https://mbientlab.com' s.summary = 'iOS/macOS/tvOS API and documentation for the MetaWear platform' diff --git a/StarterProject/Podfile.lock b/StarterProject/Podfile.lock index 43a9c55..85230b9 100644 --- a/StarterProject/Podfile.lock +++ b/StarterProject/Podfile.lock @@ -2,7 +2,7 @@ PODS: - Bolts/Tasks (1.8.4) - FastCoding+tvOS (3.2.1) - MBProgressHUD (1.0.0) - - MetaWear (2.8.3): + - MetaWear (2.8.4): - Bolts/Tasks (~> 1.8.4) - FastCoding+tvOS (~> 3.2.1) @@ -18,8 +18,8 @@ SPEC CHECKSUMS: Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 FastCoding+tvOS: d314b6daa8389ec790ab362f973f53a5657292bd MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a - MetaWear: edb17be3e38fd7d262ea433f257a0655c0401f07 + MetaWear: 3ce32e1e16a6840846d3f71aab528bf4522f5969 PODFILE CHECKSUM: 097e07f8cd09329bd0f334824e32a3f7be4e05a0 -COCOAPODS: 1.2.0.beta.3 +COCOAPODS: 1.2.1 diff --git a/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json b/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json index a10f889..cc517d3 100644 --- a/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json +++ b/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json @@ -1,6 +1,6 @@ { "name": "MetaWear", - "version": "2.8.3", + "version": "2.8.4", "license": { "type": "Commercial", "text": "See https://www.mbientlab.com/terms/", @@ -14,7 +14,7 @@ }, "source": { "git": "https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.git", - "tag": "2.8.3" + "tag": "2.8.4" }, "platforms": { "ios": "8.0", @@ -22,7 +22,7 @@ "tvos": "10.0" }, "social_media_url": "https://twitter.com/mbientLab", - "documentation_url": "https://www.mbientlab.com/docs/metawear/ios/2.8.3/index.html", + "documentation_url": "https://www.mbientlab.com/docs/metawear/ios/2.8.4/index.html", "source_files": "MetaWear/{Assets,Classes,Internal}/**/*.{h,m}", "private_header_files": "MetaWear/Internal/**/*.h", "frameworks": [ diff --git a/StarterProject/Pods/Manifest.lock b/StarterProject/Pods/Manifest.lock index 43a9c55..85230b9 100644 --- a/StarterProject/Pods/Manifest.lock +++ b/StarterProject/Pods/Manifest.lock @@ -2,7 +2,7 @@ PODS: - Bolts/Tasks (1.8.4) - FastCoding+tvOS (3.2.1) - MBProgressHUD (1.0.0) - - MetaWear (2.8.3): + - MetaWear (2.8.4): - Bolts/Tasks (~> 1.8.4) - FastCoding+tvOS (~> 3.2.1) @@ -18,8 +18,8 @@ SPEC CHECKSUMS: Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 FastCoding+tvOS: d314b6daa8389ec790ab362f973f53a5657292bd MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a - MetaWear: edb17be3e38fd7d262ea433f257a0655c0401f07 + MetaWear: 3ce32e1e16a6840846d3f71aab528bf4522f5969 PODFILE CHECKSUM: 097e07f8cd09329bd0f334824e32a3f7be4e05a0 -COCOAPODS: 1.2.0.beta.3 +COCOAPODS: 1.2.1 diff --git a/StarterProject/Pods/Pods.xcodeproj/project.pbxproj b/StarterProject/Pods/Pods.xcodeproj/project.pbxproj index a30d67c..a99a8e1 100644 --- a/StarterProject/Pods/Pods.xcodeproj/project.pbxproj +++ b/StarterProject/Pods/Pods.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 04B7A892003C009201A00447A5690AAD /* MBLMagnetometerBMM150+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D6BC428BBE28BC6318A5536050EBE29 /* MBLMagnetometerBMM150+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 0519BA5B87DE107C73FD6EBCF4847634 /* MBLBitmaskEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F3E4A49284B3C9D2BBA5007D98511EDC /* MBLBitmaskEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 0533EE1F6947B9ACCE145AF0BD3E9C1D /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A5DC47AD9A484FED84FC6E05A84F84 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 061C2C970A04A3FE9E19E20A280F8F60 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 017C16CD60E2331BA0406A7E4C21B5C5 /* CoreBluetooth.framework */; }; 06641FA3488FD36FB231376CC3CD2225 /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = EC7E7C61A1A7D963F66AFD329A4DABBF /* MBLAmbientLight.m */; }; 069A8C2E7BABD2D69F2B95B1EC84885B /* MBLAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = A0090A2868B4FCBFF1324E5AB97D929F /* MBLAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; 06A08FC67E0FC632B0519F5CE0411365 /* MBLMacAddressFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 26D066D6DB945BFB9B677569377DC63E /* MBLMacAddressFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -38,6 +39,7 @@ 0712E4D8DB78B985CC8CADE59EE9624C /* BFTask+MBLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 77076F4645FCEA34FA282E9A3F5D65E8 /* BFTask+MBLPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; 0719137174782E05C69307DCFB57DA48 /* MBLTemperature.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ED7BE86E8A22BB4E2FC769AB283BA30 /* MBLTemperature.m */; }; 07390861516689D3B62EF6F60FB57BF7 /* MBLRGBData.m in Sources */ = {isa = PBXBuildFile; fileRef = 09507EEFD3429D1B449AFF4E37AF7061 /* MBLRGBData.m */; }; + 0759F40C53FDF01700D75E42EB571039 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78A7D2553C049E1B54586DE59BFCB951 /* CoreData.framework */; }; 07875A6B71B2ECCFE2916E5881FB196C /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AF8C33AA81310202926F72391C9998B6 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */; }; 078BCCB5A01F27E716F03AD7295B9544 /* MBLSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = DB30CEAF2C8A78C9FC0C23B042C61E33 /* MBLSettings.m */; }; 08A149B0547CE687883678A82C56CD89 /* MBLConductance.h in Headers */ = {isa = PBXBuildFile; fileRef = C44E113666B769A5E520B92A99E9D988 /* MBLConductance.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -79,10 +81,10 @@ 0F2875DD9391F33A54708FEA6B5F2961 /* MBLI2C.h in Headers */ = {isa = PBXBuildFile; fileRef = 185FC3FB574B6D35EFCDA2ACD1071F9E /* MBLI2C.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0F41C8D35C71CA0234C03AE4F57AE1C3 /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = CB3E7A7FD6E90699B1C777611399057D /* MBLTemperatureV1.m */; }; 0FA85D1DE80B8A9C0FC00D6AFBF86DE6 /* MBLEulerAngleData.h in Headers */ = {isa = PBXBuildFile; fileRef = F0919F3A8BAC7F30B9347774BC18ADF2 /* MBLEulerAngleData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FD7CD24CD427D501AFF2DFDE22FCA9C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7002D87870C8950C52FA349353F0AF9C /* Foundation.framework */; }; 118BB4ABCD73982D6421505ACA13228A /* MBLAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B7D59C11618CA5A8A989619B4516516 /* MBLAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11B04014B23D51D09471C9EB289ADC86 /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 55F39FFE925DE28A09C1F23CACDB89DF /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; 11CC13562DD9201C21F6B8CC25AA6599 /* MBLSerial+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B4E5725732E313CDB9F6BC3C46AA8091 /* MBLSerial+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 11D42D2834DA68C6C9A64230E0356347 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3512CF6BE38CBEE8CD936560099B334 /* QuartzCore.framework */; }; 11D7BCDDB676409FE0FDEEF1EECB5A0B /* MBLConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = ACF196C1771D261462899070F9246EA0 /* MBLConversion.m */; }; 11E2DA9938B1DE0E06F80327B37D107D /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 11CAA03EA0AFB1DA8469FF32A53AE879 /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 121914B60C22FBE4895DCAC811F76C8D /* MBLExternalThermistor.m in Sources */ = {isa = PBXBuildFile; fileRef = FA5F615AA6E6307C0F86B3706A5C2508 /* MBLExternalThermistor.m */; }; @@ -130,6 +132,7 @@ 1AA5EE551DB9E664A8B3676413E092B2 /* MBLDataSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = AECC2F94297038EE4CAF66BF5902E25F /* MBLDataSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1ACBAF6126C76A1361A95F802BD61BED /* MBLAccelerometerBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CC6DDAC0E6DB335F2982F8F4123EC57 /* MBLAccelerometerBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1ACE8DD09C7948DEFBBCD1D7F5B4E8E5 /* MBLEulerAngleData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1A9B43375F0A42E6DA8730CF268554 /* MBLEulerAngleData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1B162E7D2B85F7F94F2A9DC5ECFA3D31 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F64B4DF7061FEEF0BE66787FA436E3A4 /* CoreGraphics.framework */; }; 1B4791C48E65682099584A4B2D4C0B3D /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 763F5637315E7DF2ADC93156B720FBF0 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1B5943066F1ED8B471DA66BF931F59A2 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = FCD0BBE71ABF961E947120886E0DEFBD /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1B86980B822338FC2ACEBA903B686AEF /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0A608D20178542FE4901B7B67BCF0C /* MBLHygrometerBME280PeriodicHumidityEvent.m */; }; @@ -147,6 +150,7 @@ 1EF831EC0B566F746C2417F60E636835 /* MBLI2CData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7008E2B738EA0A58E175847BDE0C7E3C /* MBLI2CData.m */; }; 1F251BD4B5E44D7A81E4654849A38A72 /* FastCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 91170B642AA57BE0BED52DEF020AA502 /* FastCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1F2AA001EE2D4416C62AE14AD9293E67 /* MBLEulerAngleData.m in Sources */ = {isa = PBXBuildFile; fileRef = EACC23F68F53B9AEAF648F671D3ADCA0 /* MBLEulerAngleData.m */; }; + 1F44842175C66F2DB12B81AB3254E442 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A35D8C4EF8BD6DF1EE57A8A8FB2FC0A2 /* CoreGraphics.framework */; }; 1FD3FD5DEB02DF50A05E023F3A101659 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = B72969C5065823E61814F84012A4AC81 /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1FEE2EB42BC67B3B09E0A84880CAAB9C /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E827191B6C88910FBB37D05EF560E215 /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 200826D84244F2AA99A4D0892DFCFB5C /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B8A20076D0BC32C9630FC2131D868AB /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -166,7 +170,6 @@ 234401122B6D8EEB528D2B25B91CAB1B /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = EC7E7C61A1A7D963F66AFD329A4DABBF /* MBLAmbientLight.m */; }; 2372A3439275B03D2A1D1E9DE47F4481 /* MBLGyroBMI160DataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F51010BE502FAC7BAF48DFF54AE96766 /* MBLGyroBMI160DataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2396019CBB262D983F9F03D61C9ECAD5 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = B72969C5065823E61814F84012A4AC81 /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 23A6B8AEF3704C62054DB1A86B1DB35A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B6F6855B2D07A7F36785DB81CE06184 /* CoreGraphics.framework */; }; 23CD86F8B6309328E6E8664A7B2BC492 /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C40B1F9C14F5EB9F27419A261B72237 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23DD0FF2C52B2C5831C642F3C65642DD /* MBLSerial.h in Headers */ = {isa = PBXBuildFile; fileRef = DB0ACB412E7E566ACC7984600CCFE525 /* MBLSerial.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23F8E24A04970789973215F16597313A /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = CB3E7A7FD6E90699B1C777611399057D /* MBLTemperatureV1.m */; }; @@ -221,6 +224,7 @@ 2CDBCBCEF0261FE116CE8B4F7CA50F9E /* MBLFirmwareUpdateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FEA7C8ED1EAD97C5CEF6B28E1B52F0E1 /* MBLFirmwareUpdateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2CF30B50A87109BAF21DBD50DD660B3B /* MBLMovingAverage.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F0FCAC64FCC2947473B7C98B98F5E77 /* MBLMovingAverage.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2D0A35E837CC0B1D14E5409AED41952B /* MBLRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A9C40673E2DD7B93440B6AD5300AF12 /* MBLRegister.m */; }; + 2D13530877F3E3C2BD981AEE64902DBC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ACFC4378961E890FCB0BB98761C6F308 /* QuartzCore.framework */; }; 2D16329ACDC6DA532D75D4CEF03C23DC /* MBLAccelerometerBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB9822A612F3E5FEDB01D11DFCEC94C /* MBLAccelerometerBMI160.m */; }; 2D27A2A7BEB6C6E1484C86351F950E24 /* MBLTestDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 1176158465B16552853D4809236CA1E7 /* MBLTestDebug.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2D3713D02A6AA83EA3AC2D0237C68D91 /* MBLCorrectedFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = DE88F30B876FAB43922600DBCDBB1111 /* MBLCorrectedFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -253,6 +257,7 @@ 33F35393BF92811545D184A08A9E2DE6 /* MBLHygrometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 235CCE459BD26140EAE27F9ADA5A473F /* MBLHygrometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3420350E581A627B53D7FA8D5A873DC2 /* MBLMockUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 481509CED960D9254A773EA61A27E449 /* MBLMockUtils.m */; }; 3426FF699DA296B596A933A34B1B6FC0 /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 33DDA572AA9FE70301DEE5860B7C07E3 /* MBLMagnetometerBMM150.m */; }; + 348119EFF54B003E6F216DE34593DD6C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87396C9C828902D5F5F29B2210371F72 /* Foundation.framework */; }; 34C07984E415DEE707BE2F4A15BB6CCB /* MBLANCS.h in Headers */ = {isa = PBXBuildFile; fileRef = C864143A60D049236640211DF7575452 /* MBLANCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; 35094C2A14D331EF5AC8793C0F0EB6AE /* MBLFirmwareUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DDF80EAFF1C6413FF15CAEC0D05554D /* MBLFirmwareUpdateManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; 351E4FA270659C5395CD56B7AD258112 /* MBLAccelerometerBMI160StepEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E19841A1BB5CB5104F3807DC063A987E /* MBLAccelerometerBMI160StepEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -305,7 +310,6 @@ 3E47182EC6AC37AAB90AB80386269797 /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 00AF301E849B61F3EB0792D026C89EE0 /* MBLGPIOPin.m */; }; 3E4901177DA2885BCC1DFDAE3D796F53 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E9DD214C767ABF01DAD5A9E031F2AFF /* MBProgressHUD.m */; }; 3E5B6B44EF068328A1C9C89D304A143F /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 1731F1F6C12452D1428E10E2C6C3D225 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EBBFEF94B5CEA7BB72D77C4BD9F94B2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D59A5296B16033CBAD588D89F3F220A1 /* Foundation.framework */; }; 3EF4DAC0FA157BD74A42921BCC0A94C4 /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 630E11E41427BD4CE8322B1983CC27FD /* BFTask+Exceptions.m */; }; 3EF81E1BE8B957A533A1231E27377CCE /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 630E11E41427BD4CE8322B1983CC27FD /* BFTask+Exceptions.m */; }; 3F7717F38096557D15AF3B66C4D543DA /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9203B0B8D52A3AF62D5149DBAFE60DAF /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -317,7 +321,6 @@ 40811E2EB57D1C7CD4A1BB44B8A5A315 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C79FD728D320885F82B7FA5B39A1439 /* MBLAccelerometerBoschDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 40D8E64FDA81D313AE2FB74B915E05C7 /* MBLAccelerometerBMA255MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = B3D009A64007F2945FD8880875C8F653 /* MBLAccelerometerBMA255MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 410D2575BA4DF48C38AABA2546450725 /* MBLAccelerometerBoschFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = AE9EB4A2C7DB7F32E11F6838BAA3CCEA /* MBLAccelerometerBoschFormat.m */; }; - 413E74B9F27B606943A9B3855EFFFC08 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7B648AE22D5F6957400ED1D7955CEC7 /* CoreData.framework */; }; 42162C398BF6C45539FB054F35CF2FF4 /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D12B71E11EE6B462B4B1AAFE11AA4C0 /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4259423701FEEA879EE6308E5E71EBDF /* MBLGPIO+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A569883E4CD55859D7398B1F0468B94 /* MBLGPIO+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 42B7BF0FEA24FAA98E2A64287D19D9D1 /* MBLRMSAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ABFBBEEFB8F52CEBF68EEBFB54089BE3 /* MBLRMSAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -329,6 +332,7 @@ 434DC3C109E44EF7C63FDFFE11958E7B /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F0FFF4C4C8D4728FB1FA95B8E667505 /* MBLAccelerometerBoschDataReadyEvent.m */; }; 436C6F13F8D3FB1674FA705B76201865 /* MBLGyroBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = E6D765EE2181259762786349BF95D183 /* MBLGyroBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4384783B695D7F4FBE6B97C4F22DCC9C /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9203B0B8D52A3AF62D5149DBAFE60DAF /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 43912772F0744A797152EC8FF6310965 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87396C9C828902D5F5F29B2210371F72 /* Foundation.framework */; }; 43A4C30850917B03AAC732898F6FCEE9 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 95067C93A11109FF2A6C3EA66F40FB2B /* MBLBarometerBoschPeriodicAltitudeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 43DC7AC2865935AC5FFD09B91C4347E2 /* MBLFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 96EE829ABE4F0A6741B86698C7BD23E4 /* MBLFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; 442B8516B5F60C3A1D6B4989314AE77A /* MBLNonVolatileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 69EABCAE19F56C4F0FB0F56CE9CC6E67 /* MBLNonVolatileState.m */; }; @@ -372,10 +376,8 @@ 4BD4E694DE74502CB38111FC13BE69CF /* MBLHapticBuzzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 084146000452F904FA93CFEDCE1547E1 /* MBLHapticBuzzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4BD60DBFB492EDD0A509665EEFB37A2C /* MBLGyroBMI160AxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D812C40857EE1BCA49120C2ABB88F2CA /* MBLGyroBMI160AxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4BE6D0B405B73D60D95842CFFDD1C96C /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA0E57028E97B4CD4F5E8F74EE44CDA /* MBLConductance.m */; }; - 4C0C37E074120C9ADD1D8CA4A1BB9FA4 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD7F3A0D16420C52C9C8D0F2B8501F97 /* CoreBluetooth.framework */; }; 4C2A032299D3263EF86C50C447D8C08A /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = D3B81C695DD16D875B010D7371EBA1B0 /* MBLQuaternionData.m */; }; 4C76096AAE12C2D213AA7312C12BEC56 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F8D73726A75389CC577284BB5FB837C /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4CD26B9ABBB01EC2636D60960E74074D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75E8F0DF5B518E5704648A9D9FB2D015 /* Foundation.framework */; }; 4D8AD9B1129101F28D5E1B5194C76CC3 /* MBLExternalThermistor0.h in Headers */ = {isa = PBXBuildFile; fileRef = 19383E81950B437B8FB735534D2780B7 /* MBLExternalThermistor0.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4DC0694BDD3BF7BD88FC5E051489B703 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B676B19EF80681DCF5F2FA427B95B90 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4DE25AA2100D6B98F5934CFDFB9A0C8E /* MBLPhotometerTCS3472.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F06249552349AC211E66337B5AA0072 /* MBLPhotometerTCS3472.m */; }; @@ -454,6 +456,7 @@ 5B297597D29BA90852ABA792D96A3B79 /* MBLBarometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9298A037488A800D97150B2E1394302E /* MBLBarometerBosch+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5B3D9BF9F0472045D8FB6D0A270FC5DC /* MBLAccelerometerBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AD1F99B97E0826808889A7422749053 /* MBLAccelerometerBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5BC82429E4A3FB40394405C0A2445AB3 /* MBLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1736B78F5B175DE8D2090800ECE75FEA /* MBLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BD7DA8D57C2F32FE534FC400230A081 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E36DB953BF28A99DC23577EB005E8F5 /* CoreData.framework */; }; 5BF39F5CB8856403B543BAF7D892E3B2 /* MBLBarometerBMP280.m in Sources */ = {isa = PBXBuildFile; fileRef = BEB4C9B86E902832023DC8147EF5A725 /* MBLBarometerBMP280.m */; }; 5C5DB02684249C0059181E24EB693879 /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A5DC47AD9A484FED84FC6E05A84F84 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5C6032958F007A8BC8DB5C421A4F51D4 /* MBLSettings+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 831B24D141A482B7CC94AD023B4F1E89 /* MBLSettings+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -479,6 +482,7 @@ 612CBC04F7A801793E0ABA636FFBDB46 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = DAADBB24954CB7204BB4973ACF7E4AEC /* MBLGyroBMI160PackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6163DAB439D46EBFC6EE80DE765C48D8 /* MBLCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 55C3D4FCD30101F2BD955D88F6E2A186 /* MBLCommand.m */; }; 6177ACC4B253B0911C731F079C5590B4 /* FastCoding+tvOS-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 208B900CE87A1561F18813030B856034 /* FastCoding+tvOS-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 618EB24DA4C00A2C12308C7660982E96 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7002D87870C8950C52FA349353F0AF9C /* Foundation.framework */; }; 619AC5402628D47BA4B4EE810F9F4E1E /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = C273AA1CB2A2CBB16B4EF1B7A0BDD2D9 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; 61BA4FF2460EC6A102CB2701CB35BC64 /* MBLProximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 8721F90533BF4071FE66FE24715013B0 /* MBLProximity.m */; }; 61CDDF32599820672E39AFE9FC90FFDC /* MBLNumericFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0773DD8C5F346FCA7BDFD7F562313935 /* MBLNumericFormatter.m */; }; @@ -515,7 +519,6 @@ 674790FF06733D85725F2D441EBE4C11 /* MBLGyroBMI160DataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC942C60C381020D31C01A0BD11654E /* MBLGyroBMI160DataReadyEvent.m */; }; 675D15C1FEFEDB7247DE26F7D386C0BB /* MBLAmbientLightLTR329.h in Headers */ = {isa = PBXBuildFile; fileRef = 10B210F09466EBE43259E0B37A0D9D3A /* MBLAmbientLightLTR329.h */; settings = {ATTRIBUTES = (Public, ); }; }; 67630356C6154638816F32E192A00361 /* MBLDownloadOnlyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B1DD89A9B7689DF037390CF8943B836 /* MBLDownloadOnlyEvent.m */; }; - 67F0B07E21D441AEA6328E435459CE30 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D59A5296B16033CBAD588D89F3F220A1 /* Foundation.framework */; }; 68341A9B0D8552C3A6EFDBED9B80473C /* MBLAccelerometerBMA255+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A38A04AD11C3909C8623B9DC50C4AA1 /* MBLAccelerometerBMA255+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 68420F9EC3BC580527424C07B2090B27 /* MBLGyroBMI160Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A2FAA37C2BE304D23603B9DDF72F921 /* MBLGyroBMI160Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; 684BD3890A6F2517AC880B74DFFEF37B /* MBLCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 878E71ABBEC939C082FBB1E69805243E /* MBLCommand.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -531,7 +534,6 @@ 6A8248BF30B2B485320F5C4866C8F8AA /* MBLQuaternionFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B401C07A650ED01BF0807114BDE2350 /* MBLQuaternionFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6AA55C3B8BC5044CDE73FD66F072151B /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 33DDA572AA9FE70301DEE5860B7C07E3 /* MBLMagnetometerBMM150.m */; }; 6AB17157735487D8BD5DFB9FB9BF7B46 /* MBLBarometerBMP280.h in Headers */ = {isa = PBXBuildFile; fileRef = 95414301DDD4E2E47B0793315158AE22 /* MBLBarometerBMP280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6AE9F33B8033F49F8091C72FC8F586FA /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6F86CAFB1942B0B7C1BE8984F5F8D8 /* CoreData.framework */; }; 6B4C3E689FA92EB0E539D4BCBE6362E9 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F8D73726A75389CC577284BB5FB837C /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6C4B464F967125F4794A3D09E4A0AD9C /* MBLDownloadOnlyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 284D8C71E44A1392AA1C2EACAE5D8491 /* MBLDownloadOnlyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6C58E77DBF54BF2F8D2712FDAF891DFB /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3813B5ED7E007951E10F57BC62A4859B /* MBLAccelerometerBoschPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -593,6 +595,7 @@ 78B0BC86AAA7FFC20AF3769409B7203A /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = D3B81C695DD16D875B010D7371EBA1B0 /* MBLQuaternionData.m */; }; 78BED4012A02B38885FBFD79F44083F4 /* MBLPhotometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 11821A4803F664081591925B566BDF9D /* MBLPhotometer.m */; }; 78FC52D4C28EEC75C0DBC7F476B100C0 /* MBLAccelerometerMMA8452QFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4853962E4AB0BCA94D9456BF869D7A92 /* MBLAccelerometerMMA8452QFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 793E7CF321CF8F0260DA58A22524DD48 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7002D87870C8950C52FA349353F0AF9C /* Foundation.framework */; }; 79DCB3F48BD79F46FDD40ABC9CDBAF0D /* MBLOrientationData.m in Sources */ = {isa = PBXBuildFile; fileRef = 06AC5A7E73579CE6FB9E756AB4BE8428 /* MBLOrientationData.m */; }; 79F363A8EA9B6B887804ED349A28919E /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E827191B6C88910FBB37D05EF560E215 /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 7A0CA6A2D0AABC44E317269069D0E6A4 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 520B530F73C427129D074A9784A53ADC /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -611,6 +614,7 @@ 7B8B930C1C0D81009AD5101B682BAACE /* MBLAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 93BDF5D89D3D854AD38F195B06E646C8 /* MBLAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 7B9B19BB386975D6B46A925E90423299 /* MBLMetaWear+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C75B27023A7F94AC6EC3DE94372BFDC6 /* MBLMetaWear+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 7C287CCB4A786EEF55E45CB797B1865A /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 93A8E6ECE107FCC4DB0DC0AA9DD5D688 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7D105FE9BCC556C79B6BDABED77B48E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7002D87870C8950C52FA349353F0AF9C /* Foundation.framework */; }; 7D57ABCCFBAD9D6BFB875C40E0633452 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 1731F1F6C12452D1428E10E2C6C3D225 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7D57B59C9B55E2B97566CBD656CAF63E /* MBLHapticBuzzer.m in Sources */ = {isa = PBXBuildFile; fileRef = C11BF296E2E861BED8F55B4531757BE5 /* MBLHapticBuzzer.m */; }; 7D94204B3AFD59915DDCC1B9C2B0A578 /* MBLBarometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2220D9AE565FAD520CFC2216CD8E9A47 /* MBLBarometer.m */; }; @@ -756,7 +760,6 @@ 9B9A7E2F95DBF48E34B18354FC3BBC91 /* MBLModuleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CAD3E0FB53290D8970EC35947FECF778 /* MBLModuleInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; 9BAEDF608C13749412AE4C9F8C684BAF /* MBLI2CData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D4AFDA6AEA249087E088D2BC71E7AF1 /* MBLI2CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9BFF9AED208791D2AFD82A86EB75B5A9 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 520B530F73C427129D074A9784A53ADC /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C07047F8B30188C52F929FCC68EB316 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D59A5296B16033CBAD588D89F3F220A1 /* Foundation.framework */; }; 9C3BE847FDCB847279B78E8648FDB710 /* FastCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3278CB1C42986471C4DE8F09B809015C /* FastCoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 9C495AA9CED54113E66B3E769E3CD901 /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D12B71E11EE6B462B4B1AAFE11AA4C0 /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; 9C5AE7CE4F5CB7D09BB54DC8C76C96D1 /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 33DDA572AA9FE70301DEE5860B7C07E3 /* MBLMagnetometerBMM150.m */; }; @@ -818,7 +821,6 @@ A8574595B65EEC811DDEF2FC17F79566 /* MBLLoggingV0.m in Sources */ = {isa = PBXBuildFile; fileRef = E03A3AC5010E8ABD80B07CBC97549B5F /* MBLLoggingV0.m */; }; A8B4E295A7166E94446E1422A68B7DF8 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1982DA3464DA26BEA5F1354253E593ED /* MBLAccelerometerBMI160MotionEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; A90D8354D147B1A86373715E40358850 /* MBLANCSEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = C7E0EFE1B6DD2F4993A3CF94C0B4291C /* MBLANCSEventData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9936782EEA8DB41336B087B7ACAE0AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75E8F0DF5B518E5704648A9D9FB2D015 /* Foundation.framework */; }; A9ACD368FF9FB70E48FA572673F3F31B /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = F4826F2587EFC4142CF9CD4DE2849FCD /* MBLAmbientLightLTR329.m */; }; A9B52116604517B8803B7866F091E3B6 /* MBLGyroBMI160AxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = ED5E4311FC57943AB6DEF220E51B3271 /* MBLGyroBMI160AxisReadyEvent.m */; }; AB394066FD919BBB496F4DEFACB54C2C /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 00AF301E849B61F3EB0792D026C89EE0 /* MBLGPIOPin.m */; }; @@ -842,12 +844,10 @@ AE428E1F190413E67DF2D3251790BCE4 /* MBLModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F60D1AA1A81C75BCE0709336278A7362 /* MBLModule+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; AE448A406950E5BE822AA3C0D9A8B0E0 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = A65DC669573CECCA700F6A88CD82C7B9 /* MBLAccelerometerBoschFlatData.m */; }; AE5DA0BA00B79B7DEDBBD075853E2B9D /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F7350F24852592C6534DE8816E7EB4F /* MBLGyroBMI160PackedDataReadyEvent.m */; }; - AE6D0B3B9F823F24314F12CDA21DF0B7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D59A5296B16033CBAD588D89F3F220A1 /* Foundation.framework */; }; AEA08F7169D8E16372E59CADCB4DA91D /* MBLAccelerometerBoschFlatEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E0A86B242E6059F071FA3977C4882A09 /* MBLAccelerometerBoschFlatEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; AF4C5EAB12ECD670E13D435735656317 /* MBLEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AF7B617EA9CF4874768E9D649DC7F4FD /* MBLEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; AF500AA124F81F29BD4E72ED9176019F /* MBLGyroBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 7064FDB53593D67B10A1769E0B514EE6 /* MBLGyroBMI160.m */; }; AF74B306D9CF556205C8BEEAF5CE1C4F /* MBLDataSample.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E515D1B8225F3F2496143A21AA0476B /* MBLDataSample.m */; }; - AFE1B15D4450BDA30325A18895506141 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75E8F0DF5B518E5704648A9D9FB2D015 /* Foundation.framework */; }; B0ADEF06AB1C0315656B96B14FDEDE02 /* MBLAccelerometerBoschOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 128368ED107F3E5DB6E9DC17B74E57DA /* MBLAccelerometerBoschOrientationEvent.m */; }; B0BF142CE5D67DBCE2BC9C2F928BBC89 /* MBLBluetoothPeripheralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B2B12A995155F0DAEB03CCAB5BB68E /* MBLBluetoothPeripheralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; B0E056D000273B19E40DE633550C7D46 /* MBLData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F647CF64380D63F5E2AAD367D04A9EF2 /* MBLData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -858,6 +858,7 @@ B1A7F4639A5874D115B35C7BC99A6C32 /* MBLAccelerometerBoschOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C714F80655A5F8A7CE0DDA514A8D8C5 /* MBLAccelerometerBoschOrientationFormat.m */; }; B1B66D16F9C8A453702A4F8BE8FC3AEA /* MBLGyroData.h in Headers */ = {isa = PBXBuildFile; fileRef = D35034F2258EF349B09A220E748DC779 /* MBLGyroData.h */; settings = {ATTRIBUTES = (Public, ); }; }; B1FB9925EED679E07763D5515CA9BFC2 /* MBLGravityFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C4D319ED1CC2E87C3CC1C07A486502C /* MBLGravityFormat.m */; }; + B24776E3E9C7C1A540CA163170FDCAFC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5E2018840308A236E89E084B18CF4B8 /* QuartzCore.framework */; }; B24928E76C53B3A17B590B20A3715308 /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C212A01923482B6AFD871BD54240742 /* MBLExternalThermistor1.m */; }; B287A0832F922D9889563F3742ABDA03 /* MetaWear-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD3A336E7EFFAF89D4321D8769E11FE /* MetaWear-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; B2931449FC709359704309698178C7CA /* MBLLoggingV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DCC20B9D04F236AB54CEB19127D5EF /* MBLLoggingV1.m */; }; @@ -879,7 +880,7 @@ B5F91C28FC6A4A32DED98EB3EBD0A748 /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA0E57028E97B4CD4F5E8F74EE44CDA /* MBLConductance.m */; }; B68BF26AFD2348704B7B5002C702B441 /* MBLMagnetometerBMM150.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB2168B289A0606A43DE66EB7383720 /* MBLMagnetometerBMM150.h */; settings = {ATTRIBUTES = (Public, ); }; }; B6BDB2EBE846BB1DC48449E63DC97237 /* MBLData.m in Sources */ = {isa = PBXBuildFile; fileRef = DBF9D19F8EF823A0275117C9691613F4 /* MBLData.m */; }; - B6DF3968199C86EAEBFBE195352318D1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75E8F0DF5B518E5704648A9D9FB2D015 /* Foundation.framework */; }; + B6E0E83AF092A58EDF8A6ED1077DA894 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87396C9C828902D5F5F29B2210371F72 /* Foundation.framework */; }; B707105B42FD7991A8C056E2301EA01E /* MBLEntityModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 353E6BE57F30A08E3D579C04276658F6 /* MBLEntityModule.m */; }; B71BB10CD9EC1F2EC28247F18FF01B08 /* MBLANCS.m in Sources */ = {isa = PBXBuildFile; fileRef = A2F150D7873B5E4A488F7D80B14D9B2B /* MBLANCS.m */; }; B72127EC4045E184A767C6827F17CE9E /* MBLGyro+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FFEC2211CF833D1296D080426D43877E /* MBLGyro+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -915,6 +916,7 @@ BE2FA936B65AB72E9955E34B3D280584 /* MBLAccelerometerOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E7C54EB2FF17D981EA07AA1AB5B87AD8 /* MBLAccelerometerOrientationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; BE57C102A7158D9C1C547552301A64FA /* MBLMagnetometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 557258C6E99A617BB645320B5673A2FE /* MBLMagnetometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; BE5D5A1370CCAF5D8288D5E00383EE4A /* MBLLED.h in Headers */ = {isa = PBXBuildFile; fileRef = 793C0C11B423408348FA16D58B5412FA /* MBLLED.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF0A7E9F8EA8E436892852126C08575F /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3E8E076702194CF22414804D34576A7 /* CoreBluetooth.framework */; }; BF1B8DDD1D2D1BB1D4BAA4432EB16ABF /* MBLBluetoothCentralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 709EFA77847E436D8B1EB95647367AD5 /* MBLBluetoothCentralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; BF64BA28FFF9D6140F5126042B70D599 /* MBLData.h in Headers */ = {isa = PBXBuildFile; fileRef = A70D09987B75849B3720A63CDB89A3E3 /* MBLData.h */; settings = {ATTRIBUTES = (Public, ); }; }; BF878DA46AD84590A05B6F5EAA9B77C2 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A6704034DE0FE300EF601880B83E60 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -922,7 +924,6 @@ C03223DE222FCC7320760917EAF0F35D /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F0FFF4C4C8D4728FB1FA95B8E667505 /* MBLAccelerometerBoschDataReadyEvent.m */; }; C0B338C7492AF0997E68AFDC05C4582D /* MBLLoggingV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB0EA488F655C10701AEA81223FD0C6 /* MBLLoggingV0.h */; settings = {ATTRIBUTES = (Private, ); }; }; C0DE0A16CCFD14651EED0CF7435D1004 /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = F4826F2587EFC4142CF9CD4DE2849FCD /* MBLAmbientLightLTR329.m */; }; - C0FC02A1CD6AA3D9848A19F5A59A8EEE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75E8F0DF5B518E5704648A9D9FB2D015 /* Foundation.framework */; }; C13F27F2736429A595533BFEC49DA1B0 /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B8A20076D0BC32C9630FC2131D868AB /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; C15AF4AEE463EF1C133427B0B4804998 /* MBLModuleMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 69530DC5E3A71209EADEA2285805F826 /* MBLModuleMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; C1988725869E4F8CD84E9E845B25F82F /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = A95598610047E7E22B83AADF9B82135C /* MBLAccelerometerMMA8452QRMSFormat.m */; }; @@ -934,6 +935,7 @@ C32D4E2EB34A3D7858D9B22408CA2D77 /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C40B1F9C14F5EB9F27419A261B72237 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; C32FD805F26B59E63789F6796F40F593 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = A65DC669573CECCA700F6A88CD82C7B9 /* MBLAccelerometerBoschFlatData.m */; }; C36DF75BBA2F030E1BAB0B69A77B8A75 /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A71CB88ED808454F822BA3637CE4339E /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C37C93863BEB6D9D822F6F1BEDF8741B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87396C9C828902D5F5F29B2210371F72 /* Foundation.framework */; }; C394CFEE3184B4CF89A92AE324E884C4 /* MBLSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 4943F1682A22C585F3EF9BBF3E3188BB /* MBLSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3AEA07DF12871222C9CE0F827F9F771 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 763F5637315E7DF2ADC93156B720FBF0 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3B92813AD9E072B4D04D82EB3495B0F /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7F77FA3287357F1891AF97B7032545 /* BFExecutor.m */; }; @@ -945,7 +947,6 @@ C4F283E789FA584C66D6DA907327B787 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B676B19EF80681DCF5F2FA427B95B90 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; C544D03CF2DA7E690F67280FEFC1C837 /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 11CAA03EA0AFB1DA8469FF32A53AE879 /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; C57A70AF286B0007FB3510A2FF46E2E9 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B1F2B48E6727CC4D784E3E68F6D110A6 /* BFCancellationTokenSource.m */; }; - C5991BC0A0888A33A2B611001656B5AE /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 042487D16E8F317600A0562939C8E058 /* QuartzCore.framework */; }; C5B35C079CB6F1B6AF041F7E339EDD82 /* MBLConstants+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D48B84C6FA108C4E25206564D522F726 /* MBLConstants+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; C5E1E373D6E2F2493634A630B735BFA2 /* MBLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6520C8C26DE050F25F4D1C8178744E20 /* MBLLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; C6721CCD9F32EC0A0CF471D9F5412F93 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 948EE72776D1C2C08B17D9EE3E8616AD /* BFCancellationToken.m */; }; @@ -1012,13 +1013,13 @@ D5E81240F38B3EFB2F8BBD39E165BD25 /* MBLGyroData.m in Sources */ = {isa = PBXBuildFile; fileRef = DD45CCD33153B0A0846E7D48D8904C4B /* MBLGyroData.m */; }; D67C1373DC730459994610BEF3CEABEF /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 55F39FFE925DE28A09C1F23CACDB89DF /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; D6CB05261CFA1F175D9A52BF384A9548 /* MBLI2C.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E407B48F78EC6BCC388125FF4260AC /* MBLI2C.m */; }; - D6F8FCC420A0647387A1D7F5819A2819 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6C85758B24C09B172FAC142FFB412C /* CoreBluetooth.framework */; }; D73837FA3AE84AEBBD445BE4D962BE70 /* MBLGPIOData.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD77175D432B99DADF10868DF8C9B89 /* MBLGPIOData.h */; settings = {ATTRIBUTES = (Private, ); }; }; D764B17914ACE41D8C7EE2EEC2296636 /* MBLMechanicalSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D9E05CAFD4093AC053FF5C0A2127C4 /* MBLMechanicalSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; D7A251AB35F1F678137A1E6C52A858FB /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C212A01923482B6AFD871BD54240742 /* MBLExternalThermistor1.m */; }; D7A7B46D7619497D6CEA90E6EEEF2497 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FE0B0E71750D1CE40C1D4789DA75866 /* MBLAccelerometerBoschAxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; D7B2C65950532217114E781948DC292A /* MBLGyroBMI160Format.m in Sources */ = {isa = PBXBuildFile; fileRef = EBE0C93DCD36C2E7A697883924CCEDA8 /* MBLGyroBMI160Format.m */; }; D7F963D118A4DE6CB800E8420189054A /* MBLEulerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DD585AEEF0E35FC116A9D0066EB9A70 /* MBLEulerFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; + D81AF825656B889F1AFEBD681D7397D1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87396C9C828902D5F5F29B2210371F72 /* Foundation.framework */; }; D8613E76DD7D28C40F5711662E0C2F1A /* MBLMagnetometerBMM150Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 87299CF60D59C70349CBAA5AEBAF9E51 /* MBLMagnetometerBMM150Format.m */; }; D86D5EB16BDBEF1D338543196B19FE5A /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D0DB988707DB086696B58C54F1F7254 /* MBLAccelerometerBoschFlatEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; D8A2DDAC7B03024793C368D28B0C9DA4 /* MBLStringData.m in Sources */ = {isa = PBXBuildFile; fileRef = D9134805E63381944DEC80382F6FBE05 /* MBLStringData.m */; }; @@ -1107,7 +1108,6 @@ EBCA869401387E7ADE82E3B3360BDCA9 /* MBLAccelerometerBoschFlatEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 468B99678DA5D10E28C44DFA09C95D62 /* MBLAccelerometerBoschFlatEvent.m */; }; EC9E850298C0A6EA8D2EBC25BC945DC3 /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5AE709F276156094393E7A535596C0 /* MBLAccelerometer.m */; }; ECC5C91D945E448DB06BECA39C35BF34 /* MBLLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D166E189E7E1262BE85F7701DA524F0B /* MBLLogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; - ED11DACE529E2D77676EC18A415890B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D59A5296B16033CBAD588D89F3F220A1 /* Foundation.framework */; }; ED49E272C05B0872B64B37249E000CCB /* MBLLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FE78939F1195D790A2DAEF637840085 /* MBLLogging.m */; }; ED4E46EB5A526C54CADEBFF71B65B6D1 /* MBLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EB7005CE5EC0FC6C52233A4589EA829 /* MBLConversion.h */; settings = {ATTRIBUTES = (Private, ); }; }; EDA3EBD884A97CE4D4184093A177D431 /* MBLPhotometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4377C83CC112F1147AA008C48CE58E01 /* MBLPhotometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -1118,7 +1118,6 @@ EE61F2A908EB789270C42B2920A6BDFB /* MBLTemperature+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CFFE9A936D02A9E7A4BDA98A2882AE75 /* MBLTemperature+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; EE82F80E4AFD0846BE2D0DD0EC6C198C /* MBLTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 20E72D8748FAEDF0790DD87C094FC88E /* MBLTimer.m */; }; EE9CE9FC6044342EB861D61F14C8DFDD /* MBLDataSample.h in Headers */ = {isa = PBXBuildFile; fileRef = A50F2A931EBE7A4E751156799A1CB901 /* MBLDataSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EED92610B60F28257756B59EF30BCC1D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F5788CE45E8A4984CC8DB608AE67B13 /* CoreGraphics.framework */; }; EEE4D4BD1145E9A18F20C61CA0FE4061 /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5AE709F276156094393E7A535596C0 /* MBLAccelerometer.m */; }; EFD4C39B2E69626FBA9408F031ED72A9 /* MBLProximityTSL2671.m in Sources */ = {isa = PBXBuildFile; fileRef = FB078E8A8B4A2D3903B73C35843D2337 /* MBLProximityTSL2671.m */; }; F044271EA9ABA7108F1956F37BBE27A4 /* MBLANCSEventData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B011A1E9B28E8CEA617FF09F2A086C03 /* MBLANCSEventData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -1162,6 +1161,7 @@ FA9C12C0309379E8AC38D760B149BE54 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 77EB79E37526CE6A5023DD56F6C0769B /* MBLAccelerometerBoschTapEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; FAE02C9269DE28A78C4219F66A46654C /* MBLBarometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D13FA22DDA975471EEC17203E90BA6BF /* MBLBarometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; FB3799B1C3EDD761FC52DC2B98CA04A2 /* MBLMacAddressFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = B137395B7A8E52718EAE887C2B537DD1 /* MBLMacAddressFormat.m */; }; + FB4E2BC73BB7DDC951695F789059F67A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7002D87870C8950C52FA349353F0AF9C /* Foundation.framework */; }; FBD67E88ED8DBFB029B59356F1527A59 /* MBLMagnetometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB1550E1A7F48F1850BB21ADE6E9296 /* MBLMagnetometer.m */; }; FBD81FE564D5E075DC5F6F627C685451 /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A71CB88ED808454F822BA3637CE4339E /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; FBE2CC29E2D6C52D82B6124321353D3E /* MBLTimer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BEF2A736B3F5ADE01ADD88532362B2A /* MBLTimer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -1308,10 +1308,10 @@ /* Begin PBXFileReference section */ 00AF301E849B61F3EB0792D026C89EE0 /* MBLGPIOPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIOPin.m; sourceTree = ""; }; + 017C16CD60E2331BA0406A7E4C21B5C5 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; 028D3C99F018AD3DFFAC5F8EC15C2213 /* MBLDeviceLookup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDeviceLookup.m; sourceTree = ""; }; 03F99031ED5131166DDAB440590AF551 /* FastCoding_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FastCoding_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 040CDE47B4C2F589410015C45BA0199F /* MBLMockUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMockUtils.h; sourceTree = ""; }; - 042487D16E8F317600A0562939C8E058 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; 0439038CA7B3EA7D2F2989BB872189D6 /* Bolts-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-iOS-dummy.m"; path = "../Bolts-iOS/Bolts-iOS-dummy.m"; sourceTree = ""; }; 05566FFE0895F59949B518867B673C43 /* MetaWear-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-tvOS-dummy.m"; path = "../MetaWear-tvOS/MetaWear-tvOS-dummy.m"; sourceTree = ""; }; 05D0CDF4C71EF40611B714E487DEABF0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1333,7 +1333,6 @@ 0E10D646318312AF4B850DC3D6142D26 /* MBLQuaternionFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLQuaternionFormat.m; sourceTree = ""; }; 0E8BA03C3C10F0EA0AF385FFB4C26AA5 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MetaWear.framework; path = "MetaWear-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 0F43AF09C0BC7606D4E70B260B35B206 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = "MBProgressHUD-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0F6C85758B24C09B172FAC142FFB412C /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; 109709133C85E0024DDCD1E214264775 /* MBLNumericData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNumericData.h; sourceTree = ""; }; 10B210F09466EBE43259E0B37A0D9D3A /* MBLAmbientLightLTR329.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAmbientLightLTR329.h; sourceTree = ""; }; 114B506BEEB516F597054183B7C47D54 /* MBLDependentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDependentData.m; sourceTree = ""; }; @@ -1365,6 +1364,7 @@ 1CAB43AFA14E6743D3CD8FF5966D300C /* Pods-Starter-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Starter-macOS-acknowledgements.plist"; sourceTree = ""; }; 1D0DB988707DB086696B58C54F1F7254 /* MBLAccelerometerBoschFlatEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschFlatEvent+Private.h"; sourceTree = ""; }; 1DDD97C3A93E68B36B0E06C919325676 /* Pods-Starter-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-iOS-frameworks.sh"; sourceTree = ""; }; + 1E36DB953BF28A99DC23577EB005E8F5 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; 1E631DB94C1CB521CA27AE8FA7882F6A /* MBLMacro.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMacro.m; sourceTree = ""; }; 208B900CE87A1561F18813030B856034 /* FastCoding+tvOS-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding+tvOS-tvOS-umbrella.h"; path = "../FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS-umbrella.h"; sourceTree = ""; }; 209B45A74994920F5D9CAF69D0BB990A /* MBLProximityTSL2671.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLProximityTSL2671.h; sourceTree = ""; }; @@ -1392,7 +1392,6 @@ 2A38A04AD11C3909C8623B9DC50C4AA1 /* MBLAccelerometerBMA255+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMA255+Private.h"; sourceTree = ""; }; 2A48324BA4553B2E1AD6060A5AF60A60 /* MBLProximity+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLProximity+Private.h"; sourceTree = ""; }; 2A96542512A6E9FCA69EAA3C1DD02313 /* MBLTimerEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTimerEvent.h; sourceTree = ""; }; - 2B6F6855B2D07A7F36785DB81CE06184 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 2BB0EA488F655C10701AEA81223FD0C6 /* MBLLoggingV0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV0.h; sourceTree = ""; }; 2BEF2A736B3F5ADE01ADD88532362B2A /* MBLTimer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLTimer+Private.h"; sourceTree = ""; }; 2C714F80655A5F8A7CE0DDA514A8D8C5 /* MBLAccelerometerBoschOrientationFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschOrientationFormat.m; sourceTree = ""; }; @@ -1446,7 +1445,6 @@ 4943F1682A22C585F3EF9BBF3E3188BB /* MBLSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSettings.h; sourceTree = ""; }; 4B339005B2B4A7576DDEB3B3A313C205 /* MBLAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAnalytics.m; sourceTree = ""; }; 4B7D59C11618CA5A8A989619B4516516 /* MBLAccelerometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometer.h; sourceTree = ""; }; - 4C6F86CAFB1942B0B7C1BE8984F5F8D8 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; 4CB1550E1A7F48F1850BB21ADE6E9296 /* MBLMagnetometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometer.m; sourceTree = ""; }; 4D6BC428BBE28BC6318A5536050EBE29 /* MBLMagnetometerBMM150+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMagnetometerBMM150+Private.h"; sourceTree = ""; }; 4DE21AF1BA56056B3B49B132FCFA766D /* Pods_Starter_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Starter_tvOS.framework; path = "Pods-Starter-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1519,6 +1517,7 @@ 6F3A959B1AC47ABC40731D1B1123714D /* MBProgressHUD-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MBProgressHUD-tvOS-umbrella.h"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-umbrella.h"; sourceTree = ""; }; 6F7F77FA3287357F1891AF97B7032545 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; 6FD77175D432B99DADF10868DF8C9B89 /* MBLGPIOData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIOData.h; sourceTree = ""; }; + 7002D87870C8950C52FA349353F0AF9C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 7008E2B738EA0A58E175847BDE0C7E3C /* MBLI2CData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLI2CData.m; sourceTree = ""; }; 7064FDB53593D67B10A1769E0B514EE6 /* MBLGyroBMI160.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160.m; sourceTree = ""; }; 709EFA77847E436D8B1EB95647367AD5 /* MBLBluetoothCentralMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothCentralMock.h; sourceTree = ""; }; @@ -1527,7 +1526,6 @@ 71FC2AC14A94BFBD1C5F4CF269BA9FE0 /* MBLOnDieTemperature0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLOnDieTemperature0.h; sourceTree = ""; }; 7349CE488373EAECCAD435CD9088AD4C /* MBLLoggingV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV1.h; sourceTree = ""; }; 756992439A4C08C3DE9B0F4A6963C649 /* MBLNeopixelStrand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNeopixelStrand.m; sourceTree = ""; }; - 75E8F0DF5B518E5704648A9D9FB2D015 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 761D16FEFBA483BEFEC9D28C3C47F942 /* Bolts-OSX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-OSX-prefix.pch"; sourceTree = ""; }; 763F5637315E7DF2ADC93156B720FBF0 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; 76DBBC92D2A4EED017552F1FF4F6C828 /* mma8452q.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mma8452q.h; sourceTree = ""; }; @@ -1536,6 +1534,7 @@ 77EB79E37526CE6A5023DD56F6C0769B /* MBLAccelerometerBoschTapEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschTapEvent+Private.h"; sourceTree = ""; }; 785B603D34657FB52D1B332F258CCCE8 /* MBLEntityEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEntityEvent.h; sourceTree = ""; }; 787D93033316FDFFF92C3365C9A326F1 /* MBProgressHUD-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MBProgressHUD-tvOS.xcconfig"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS.xcconfig"; sourceTree = ""; }; + 78A7D2553C049E1B54586DE59BFCB951 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; 792CEEBF32F78C823D2147B67A1CAC3E /* MBLProximity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLProximity.h; sourceTree = ""; }; 7932BB0025D0019DBE2A9D9BCA4F0A90 /* MBLAccelerometerBMA255MotionEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMA255MotionEvent.m; sourceTree = ""; }; 793C0C11B423408348FA16D58B5412FA /* MBLLED.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLED.h; sourceTree = ""; }; @@ -1562,6 +1561,7 @@ 871177AC271D93E0FE1CFC2B50F9B8D9 /* MBLEntityEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEntityEvent+Private.h"; sourceTree = ""; }; 8721F90533BF4071FE66FE24715013B0 /* MBLProximity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLProximity.m; sourceTree = ""; }; 87299CF60D59C70349CBAA5AEBAF9E51 /* MBLMagnetometerBMM150Format.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150Format.m; sourceTree = ""; }; + 87396C9C828902D5F5F29B2210371F72 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 878E71ABBEC939C082FBB1E69805243E /* MBLCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLCommand.h; sourceTree = ""; }; 880237A6B3629D049B685386404DF001 /* MBLFirmwareBuild.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFirmwareBuild.h; sourceTree = ""; }; 894D6BDD300D1CB977B5359F8DEC8F8F /* Pods-Starter-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Starter-tvOS-umbrella.h"; sourceTree = ""; }; @@ -1573,7 +1573,6 @@ 8D12B71E11EE6B462B4B1AAFE11AA4C0 /* MBLNumericFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNumericFormatter.h; sourceTree = ""; }; 8DF053DB4547F302D14EB63AC2D1BCA6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8EC942C60C381020D31C01A0BD11654E /* MBLGyroBMI160DataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160DataReadyEvent.m; sourceTree = ""; }; - 8F5788CE45E8A4984CC8DB608AE67B13 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 8FB9822A612F3E5FEDB01D11DFCEC94C /* MBLAccelerometerBMI160.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMI160.m; sourceTree = ""; }; 90E16F18974F2AF8B43AB90C4A7F1359 /* MBLBarometerBosch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBosch.h; sourceTree = ""; }; 9112225BB3AEA02A745F1E305072F71C /* MBProgressHUD-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "MBProgressHUD-tvOS.modulemap"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; sourceTree = ""; }; @@ -1620,7 +1619,7 @@ A0A2F69CD0F70E4A06F1B8E3C3B1C647 /* MBLDataProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDataProcessor.m; sourceTree = ""; }; A0AA47965455DFB90933FCB952C9F456 /* MBLDispatchQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDispatchQueue.m; sourceTree = ""; }; A2F150D7873B5E4A488F7D80B14D9B2B /* MBLANCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLANCS.m; sourceTree = ""; }; - A3512CF6BE38CBEE8CD936560099B334 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + A35D8C4EF8BD6DF1EE57A8A8FB2FC0A2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; A419305A08B759C0BAC7AC7BD1F366D3 /* MBLFilter+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLFilter+Private.h"; sourceTree = ""; }; A4BC6A7E7A46D7651FAC64F3FE06EF12 /* Pods-Starter-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Starter-tvOS.modulemap"; sourceTree = ""; }; A50F2A931EBE7A4E751156799A1CB901 /* MBLDataSample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDataSample.h; sourceTree = ""; }; @@ -1643,6 +1642,7 @@ ABFBBEEFB8F52CEBF68EEBFB54089BE3 /* MBLRMSAccelerometerData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLRMSAccelerometerData+Private.h"; sourceTree = ""; }; AC3F730235E10FBD2C4908949CB1AA61 /* MBLEntityModule+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEntityModule+Private.h"; sourceTree = ""; }; ACF196C1771D261462899070F9246EA0 /* MBLConversion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConversion.m; sourceTree = ""; }; + ACFC4378961E890FCB0BB98761C6F308 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; AE4A158551010DF2F8513B2D03FB3FE6 /* FastCoding+tvOS-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "FastCoding+tvOS-tvOS.modulemap"; path = "../FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS.modulemap"; sourceTree = ""; }; AE5AE709F276156094393E7A535596C0 /* MBLAccelerometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometer.m; sourceTree = ""; }; AE9EB4A2C7DB7F32E11F6838BAA3CCEA /* MBLAccelerometerBoschFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFormat.m; sourceTree = ""; }; @@ -1679,7 +1679,6 @@ BB932CD95971C70940734ACDC552F0CF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BBA44A9AD6787286733D9F6B27E22E38 /* MBLTemperatureV0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTemperatureV0.m; sourceTree = ""; }; BBC0854A3AE6EC052C70DC2D229E6B09 /* Pods_Starter_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Starter_iOS.framework; path = "Pods-Starter-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - BD7F3A0D16420C52C9C8D0F2B8501F97 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; BE1A9B43375F0A42E6DA8730CF268554 /* MBLEulerAngleData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEulerAngleData+Private.h"; sourceTree = ""; }; BEA26D8A0D1D8AF99A361F2DC83C5721 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; BEB4C9B86E902832023DC8147EF5A725 /* MBLBarometerBMP280.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBMP280.m; sourceTree = ""; }; @@ -1698,7 +1697,6 @@ C71440A919B1C62027795A291154C9FA /* MBLEntityEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEntityEvent.m; sourceTree = ""; }; C75B27023A7F94AC6EC3DE94372BFDC6 /* MBLMetaWear+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMetaWear+Private.h"; sourceTree = ""; }; C780913767E4473F6AC20C752CAE59F4 /* MetaWear-OSX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MetaWear-OSX.xcconfig"; sourceTree = ""; }; - C7B648AE22D5F6957400ED1D7955CEC7 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; C7E0EFE1B6DD2F4993A3CF94C0B4291C /* MBLANCSEventData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLANCSEventData.h; sourceTree = ""; }; C820737E1995169D2D0531641B99FA78 /* MBLAccelerometerBoschPackedDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschPackedDataReadyEvent.m; sourceTree = ""; }; C864143A60D049236640211DF7575452 /* MBLANCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLANCS.h; sourceTree = ""; }; @@ -1730,7 +1728,6 @@ D4675A750F70C5BC3823D37837EA120C /* MBLFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFormat.m; sourceTree = ""; }; D48B84C6FA108C4E25206564D522F726 /* MBLConstants+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLConstants+Private.h"; sourceTree = ""; }; D58971D76BFC55DB69932DC784B0A2B7 /* MBLFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFilter.h; sourceTree = ""; }; - D59A5296B16033CBAD588D89F3F220A1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; D63CD53A65C3D144427680FC8BD9B5B5 /* Pods-Starter-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Starter-macOS.modulemap"; sourceTree = ""; }; D65C7C6F74F25B0657D6E539B2546C14 /* MBLAccelerometerBoschOrientationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschOrientationEvent.h; sourceTree = ""; }; D6618A033335734D475C5BAFBD8AB902 /* FastCoding+tvOS-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FastCoding+tvOS-tvOS-dummy.m"; path = "../FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS-dummy.m"; sourceTree = ""; }; @@ -1789,12 +1786,15 @@ F35860694293108E568D26B341D4D841 /* FastCoding+tvOS-OSX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FastCoding+tvOS-OSX-dummy.m"; sourceTree = ""; }; F3E4A49284B3C9D2BBA5007D98511EDC /* MBLBitmaskEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBitmaskEvent.h; sourceTree = ""; }; F3E674EEECFCDB16F19A1C75E3801968 /* MBLAccelerometerBoschFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFormat.h; sourceTree = ""; }; + F3E8E076702194CF22414804D34576A7 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; F4812B596372D4D8F0778378EF3CFD2E /* MBLiBeacon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLiBeacon.h; sourceTree = ""; }; F4826F2587EFC4142CF9CD4DE2849FCD /* MBLAmbientLightLTR329.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAmbientLightLTR329.m; sourceTree = ""; }; F51010BE502FAC7BAF48DFF54AE96766 /* MBLGyroBMI160DataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160DataReadyEvent.h; sourceTree = ""; }; F57048199E0ED7C28548E153014EFE70 /* MBProgressHUD-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MBProgressHUD-tvOS-dummy.m"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-dummy.m"; sourceTree = ""; }; + F5E2018840308A236E89E084B18CF4B8 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; F60D1AA1A81C75BCE0709336278A7362 /* MBLModule+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLModule+Private.h"; sourceTree = ""; }; F647CF64380D63F5E2AAD367D04A9EF2 /* MBLData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLData+Private.h"; sourceTree = ""; }; + F64B4DF7061FEEF0BE66787FA436E3A4 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; F6A4A6EB5F68B71AF759267A805A4DF7 /* MBLDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDeviceInfo.m; sourceTree = ""; }; F7224B9FBB48FED43485B675DEB8FAB2 /* MBLGPIOPin+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGPIOPin+Private.h"; sourceTree = ""; }; F805411C4F0A4414877BCE5EDD29C92B /* Pods-Starter-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Starter-iOS-acknowledgements.markdown"; sourceTree = ""; }; @@ -1814,10 +1814,10 @@ buildActionMask = 2147483647; files = ( 241368D6DEC54FAF3450DA5AFAF480D6 /* Bolts.framework in Frameworks */, - 4C0C37E074120C9ADD1D8CA4A1BB9FA4 /* CoreBluetooth.framework in Frameworks */, - 413E74B9F27B606943A9B3855EFFFC08 /* CoreData.framework in Frameworks */, + BF0A7E9F8EA8E436892852126C08575F /* CoreBluetooth.framework in Frameworks */, + 5BD7DA8D57C2F32FE534FC400230A081 /* CoreData.framework in Frameworks */, 5FD74418B529A54DA2B1F30990B78FA5 /* FastCoding_tvOS.framework in Frameworks */, - 4CD26B9ABBB01EC2636D60960E74074D /* Foundation.framework in Frameworks */, + 793E7CF321CF8F0260DA58A22524DD48 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1825,7 +1825,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C0FC02A1CD6AA3D9848A19F5A59A8EEE /* Foundation.framework in Frameworks */, + FB4E2BC73BB7DDC951695F789059F67A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1833,9 +1833,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EED92610B60F28257756B59EF30BCC1D /* CoreGraphics.framework in Frameworks */, - 67F0B07E21D441AEA6328E435459CE30 /* Foundation.framework in Frameworks */, - 11D42D2834DA68C6C9A64230E0356347 /* QuartzCore.framework in Frameworks */, + 1B162E7D2B85F7F94F2A9DC5ECFA3D31 /* CoreGraphics.framework in Frameworks */, + 348119EFF54B003E6F216DE34593DD6C /* Foundation.framework in Frameworks */, + 2D13530877F3E3C2BD981AEE64902DBC /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1843,7 +1843,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3EBBFEF94B5CEA7BB72D77C4BD9F94B2 /* Foundation.framework in Frameworks */, + C37C93863BEB6D9D822F6F1BEDF8741B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1851,7 +1851,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B6DF3968199C86EAEBFBE195352318D1 /* Foundation.framework in Frameworks */, + 0FD7CD24CD427D501AFF2DFDE22FCA9C /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1859,7 +1859,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AFE1B15D4450BDA30325A18895506141 /* Foundation.framework in Frameworks */, + 7D105FE9BCC556C79B6BDABED77B48E9 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1867,7 +1867,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9C07047F8B30188C52F929FCC68EB316 /* Foundation.framework in Frameworks */, + B6E0E83AF092A58EDF8A6ED1077DA894 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1875,9 +1875,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 23A6B8AEF3704C62054DB1A86B1DB35A /* CoreGraphics.framework in Frameworks */, - A9936782EEA8DB41336B087B7ACAE0AC /* Foundation.framework in Frameworks */, - C5991BC0A0888A33A2B611001656B5AE /* QuartzCore.framework in Frameworks */, + 1F44842175C66F2DB12B81AB3254E442 /* CoreGraphics.framework in Frameworks */, + 618EB24DA4C00A2C12308C7660982E96 /* Foundation.framework in Frameworks */, + B24776E3E9C7C1A540CA163170FDCAFC /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1922,10 +1922,10 @@ buildActionMask = 2147483647; files = ( 368DEE59E3D42D252E5FFB486A63B903 /* Bolts.framework in Frameworks */, - D6F8FCC420A0647387A1D7F5819A2819 /* CoreBluetooth.framework in Frameworks */, - 6AE9F33B8033F49F8091C72FC8F586FA /* CoreData.framework in Frameworks */, + 061C2C970A04A3FE9E19E20A280F8F60 /* CoreBluetooth.framework in Frameworks */, + 0759F40C53FDF01700D75E42EB571039 /* CoreData.framework in Frameworks */, 36EC9E721804CB07125FB70FD4048261 /* FastCoding_tvOS.framework in Frameworks */, - AE6D0B3B9F823F24314F12CDA21DF0B7 /* Foundation.framework in Frameworks */, + D81AF825656B889F1AFEBD681D7397D1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1933,7 +1933,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ED11DACE529E2D77676EC18A415890B5 /* Foundation.framework in Frameworks */, + 43912772F0744A797152EC8FF6310965 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2402,6 +2402,18 @@ path = PhotometerTCS3472; sourceTree = ""; }; + 5AD85845C5E59FE76490A68F662DBC17 /* tvOS */ = { + isa = PBXGroup; + children = ( + 017C16CD60E2331BA0406A7E4C21B5C5 /* CoreBluetooth.framework */, + 78A7D2553C049E1B54586DE59BFCB951 /* CoreData.framework */, + F64B4DF7061FEEF0BE66787FA436E3A4 /* CoreGraphics.framework */, + 87396C9C828902D5F5F29B2210371F72 /* Foundation.framework */, + ACFC4378961E890FCB0BB98761C6F308 /* QuartzCore.framework */, + ); + name = tvOS; + sourceTree = ""; + }; 5B1987451EA4E508FEED5AE81AF0B6CE /* Neopixel */ = { isa = PBXGroup; children = ( @@ -2975,18 +2987,6 @@ path = DataProcessor; sourceTree = ""; }; - CBB19503AE7BC9D7EBA38907C92D6A71 /* iOS */ = { - isa = PBXGroup; - children = ( - BD7F3A0D16420C52C9C8D0F2B8501F97 /* CoreBluetooth.framework */, - C7B648AE22D5F6957400ED1D7955CEC7 /* CoreData.framework */, - 2B6F6855B2D07A7F36785DB81CE06184 /* CoreGraphics.framework */, - 75E8F0DF5B518E5704648A9D9FB2D015 /* Foundation.framework */, - 042487D16E8F317600A0562939C8E058 /* QuartzCore.framework */, - ); - name = iOS; - sourceTree = ""; - }; D07FF70C4FFC8159E410111522E4E51A /* PhotometerTCS3472 */ = { isa = PBXGroup; children = ( @@ -3045,18 +3045,6 @@ path = MagnetometerBMM150; sourceTree = ""; }; - DA5943D93EB491A5B438605F4A7847C5 /* tvOS */ = { - isa = PBXGroup; - children = ( - 0F6C85758B24C09B172FAC142FFB412C /* CoreBluetooth.framework */, - 4C6F86CAFB1942B0B7C1BE8984F5F8D8 /* CoreData.framework */, - 8F5788CE45E8A4984CC8DB608AE67B13 /* CoreGraphics.framework */, - D59A5296B16033CBAD588D89F3F220A1 /* Foundation.framework */, - A3512CF6BE38CBEE8CD936560099B334 /* QuartzCore.framework */, - ); - name = tvOS; - sourceTree = ""; - }; DBAAF062D0270106FC6C79AE787C9A17 /* Magnetometer */ = { isa = PBXGroup; children = ( @@ -3138,9 +3126,9 @@ children = ( A09C8CB08427537798496F402169A556 /* Bolts.framework */, 03F99031ED5131166DDAB440590AF551 /* FastCoding_tvOS.framework */, - CBB19503AE7BC9D7EBA38907C92D6A71 /* iOS */, + F0F6BFCC7A675555A5EB0D6FDA7C8309 /* iOS */, 0DB4B5E4EAB97499229F97636213F782 /* OS X */, - DA5943D93EB491A5B438605F4A7847C5 /* tvOS */, + 5AD85845C5E59FE76490A68F662DBC17 /* tvOS */, ); name = Frameworks; sourceTree = ""; @@ -3207,6 +3195,18 @@ path = AccelerometerBosch; sourceTree = ""; }; + F0F6BFCC7A675555A5EB0D6FDA7C8309 /* iOS */ = { + isa = PBXGroup; + children = ( + F3E8E076702194CF22414804D34576A7 /* CoreBluetooth.framework */, + 1E36DB953BF28A99DC23577EB005E8F5 /* CoreData.framework */, + A35D8C4EF8BD6DF1EE57A8A8FB2FC0A2 /* CoreGraphics.framework */, + 7002D87870C8950C52FA349353F0AF9C /* Foundation.framework */, + F5E2018840308A236E89E084B18CF4B8 /* QuartzCore.framework */, + ); + name = iOS; + sourceTree = ""; + }; F3448AAA0DCFC7C2CA5550BA6034C6EE /* Pods-Starter-macOS */ = { isa = PBXGroup; children = ( @@ -4347,7 +4347,7 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; + LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 0700; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; @@ -5068,10 +5068,11 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0B2CCA7AE293EBC10652F88BAF5D7402 /* Release */ = { + 0BE7BCB8F44B32130B2170F297FCFF2F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641AA0111A93400A1FD9A0EB69E87E9 /* Bolts-iOS.xcconfig */; + baseConfigurationReference = BB114BD37743073B30161F5D950B4BB0 /* Bolts-tvOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -5083,18 +5084,18 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = Bolts; - SDKROOT = iphoneos; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -5137,6 +5138,39 @@ }; name = Debug; }; + 13F5015A0160BCA3940931C1A5DA600B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BB114BD37743073B30161F5D950B4BB0 /* Bolts-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Bolts; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0.1; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 1B82DE711D63F26300A0F7A0107901AC /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 57145DDED2FD1272A4C456956BBE679D /* Pods-Starter-macOS.release.xcconfig */; @@ -5174,15 +5208,14 @@ }; name = Release; }; - 1D003044E6772E6E6045874F247B2E2D /* Debug */ = { + 1C054D50487EA65F86053C1D255280B7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B48FE742D8CD3F2D672138142ACB87EB /* FastCoding+tvOS-OSX.xcconfig */; + baseConfigurationReference = 6641AA0111A93400A1FD9A0EB69E87E9 /* Bolts-iOS.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; @@ -5190,25 +5223,75 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-OSX/FastCoding+tvOS-OSX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-OSX/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.6; - MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-OSX/FastCoding+tvOS-OSX.modulemap"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FastCoding_tvOS; - SDKROOT = macosx; + PRODUCT_NAME = Bolts; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 25AD0805AD3ADD56B28F7055AED07C98 /* Release */ = { + 1C0A10D44C1282F1EE6054110DDFDE56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MACOSX_DEPLOYMENT_TARGET = 10.12; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + TVOS_DEPLOYMENT_TARGET = 10.0; + }; + name = Debug; + }; + 1D003044E6772E6E6045874F247B2E2D /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = B48FE742D8CD3F2D672138142ACB87EB /* FastCoding+tvOS-OSX.xcconfig */; buildSettings = { @@ -5218,7 +5301,7 @@ "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -5232,7 +5315,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.6; MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-OSX/FastCoding+tvOS-OSX.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_NAME = FastCoding_tvOS; SDKROOT = macosx; SKIP_INSTALL = YES; @@ -5240,31 +5323,32 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 285757BB1F880D88D2CABA8B78E9CA67 /* Release */ = { + 2019F6AD15617739BB5269C660A3CCB4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 684B9BAB9E361082FA4C43F5C28BFB88 /* MetaWear-iOS.xcconfig */; + baseConfigurationReference = B92BBE818347A495C7009EC34204231C /* MBProgressHUD-iOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = MetaWear; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; @@ -5272,30 +5356,31 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 2A144A3EE536E0ED4AA01291AA3AB97C /* Debug */ = { + 205EA17F7B6D5B5C39BAB793592C020B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 787D93033316FDFFF92C3365C9A326F1 /* MBProgressHUD-tvOS.xcconfig */; + baseConfigurationReference = 933263669A3051E6F1BF79F8B4A4EF05 /* FastCoding+tvOS-tvOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = MBProgressHUD; + MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FastCoding_tvOS; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; @@ -5304,46 +5389,46 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 39292F97E80D6A31AB7085E0ACB69D8B /* Debug */ = { + 21E32C49CC51FB2B59EB41B62E0C28F0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 650423F1F88149F2DC689838E4ADBDDD /* Bolts-OSX.xcconfig */; + baseConfigurationReference = 6641AA0111A93400A1FD9A0EB69E87E9 /* Bolts-iOS.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-OSX/Bolts-OSX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-OSX/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; - MODULEMAP_FILE = "Target Support Files/Bolts-OSX/Bolts-OSX.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = Bolts; - SDKROOT = macosx; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 485A1148B9B86740EE58C19AC6FA3EDE /* Debug */ = { + 259D114AE34AD243C1399DFB9FF74086 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B92BBE818347A495C7009EC34204231C /* MBProgressHUD-iOS.xcconfig */; + baseConfigurationReference = 54B80383998620218757341F989F766A /* FastCoding+tvOS-iOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -5355,14 +5440,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = MBProgressHUD; + PRODUCT_NAME = FastCoding_tvOS; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; @@ -5372,9 +5457,9 @@ }; name = Debug; }; - 5C5B48745BF1B0D4BD7F6A71A78B212B /* Release */ = { + 25AD0805AD3ADD56B28F7055AED07C98 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C780913767E4473F6AC20C752CAE59F4 /* MetaWear-OSX.xcconfig */; + baseConfigurationReference = B48FE742D8CD3F2D672138142ACB87EB /* FastCoding+tvOS-OSX.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -5390,14 +5475,14 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-OSX/MetaWear-OSX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-OSX/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-OSX/FastCoding+tvOS-OSX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-OSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/MetaWear-OSX/MetaWear-OSX.modulemap"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-OSX/FastCoding+tvOS-OSX.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = MetaWear; + PRODUCT_NAME = FastCoding_tvOS; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; @@ -5406,10 +5491,11 @@ }; name = Release; }; - 65297F80B84E8FA5044D1EE02B1D61BB /* Release */ = { + 35CBF5CCB81305B26B531D8E894590E7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 787D93033316FDFFF92C3365C9A326F1 /* MBProgressHUD-tvOS.xcconfig */; + baseConfigurationReference = 684B9BAB9E361082FA4C43F5C28BFB88 /* MetaWear-iOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -5421,30 +5507,32 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = MBProgressHUD; - SDKROOT = appletvos; + PRODUCT_NAME = MetaWear; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 678E6362F08F4D196B02D39C7FEABA68 /* Debug */ = { + 39292F97E80D6A31AB7085E0ACB69D8B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 933263669A3051E6F1BF79F8B4A4EF05 /* FastCoding+tvOS-tvOS.xcconfig */; + baseConfigurationReference = 650423F1F88149F2DC689838E4ADBDDD /* Bolts-OSX.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; @@ -5452,98 +5540,115 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-OSX/Bolts-OSX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-OSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS.modulemap"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.8; + MODULEMAP_FILE = "Target Support Files/Bolts-OSX/Bolts-OSX.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FastCoding_tvOS; - SDKROOT = appletvos; + PRODUCT_NAME = Bolts; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 697274CB99F7754307930EB8EAAFD8C2 /* Debug */ = { + 44179F4E85F87E23D177559EFF67CC39 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A9000F0FF7A90A6F59B81BFB7F8D0A37 /* Pods-Starter-iOS.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-iOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_iOS; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + MACOSX_DEPLOYMENT_TARGET = 10.12; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + TVOS_DEPLOYMENT_TARGET = 10.0; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - 6C0466E866A5FFB2FD5E97F267C126C5 /* Debug */ = { + 52DFE5B194709BCFC9B570B8ECD5BD1B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BB114BD37743073B30161F5D950B4BB0 /* Bolts-tvOS.xcconfig */; + baseConfigurationReference = D3201E3A006625BA636D039DAD71147E /* Pods-Starter-tvOS.release.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Bolts; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Starter_tvOS; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0.1; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 6E3E86F09250821CB7010DBE4A74230E /* Release */ = { + 5C5B48745BF1B0D4BD7F6A71A78B212B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CEF8BCE60C4FD64A661A7293183A8A56 /* MetaWear-tvOS.xcconfig */; + baseConfigurationReference = C780913767E4473F6AC20C752CAE59F4 /* MetaWear-OSX.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; @@ -5551,28 +5656,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-OSX/MetaWear-OSX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-OSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULEMAP_FILE = "Target Support Files/MetaWear-OSX/MetaWear-OSX.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = MetaWear; - SDKROOT = appletvos; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 70295B8FB6C5FE0DC92C62D315F25F3E /* Release */ = { + 64D36AB503E50687352BB26DCDE4352F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BB114BD37743073B30161F5D950B4BB0 /* Bolts-tvOS.xcconfig */; + baseConfigurationReference = 54B80383998620218757341F989F766A /* FastCoding+tvOS-iOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -5584,32 +5690,33 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Bolts; - SDKROOT = appletvos; + PRODUCT_NAME = FastCoding_tvOS; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 7481EF4727A8F02903E392559016959F /* Release */ = { + 6B26A2F340E6AC64F7F4DAC14C6A6132 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3201E3A006625BA636D039DAD71147E /* Pods-Starter-tvOS.release.xcconfig */; + baseConfigurationReference = ECB10F2A65A6BA5FB610B121361268F9 /* Pods-Starter-tvOS.debug.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -5621,7 +5728,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -5634,12 +5741,13 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 84151C67613A94AEBF2658E1F42CF182 /* Release */ = { + 70C36883D6F68193743A858178699A51 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 933263669A3051E6F1BF79F8B4A4EF05 /* FastCoding+tvOS-tvOS.xcconfig */; + baseConfigurationReference = CEF8BCE60C4FD64A661A7293183A8A56 /* MetaWear-tvOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -5651,150 +5759,61 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = FastCoding_tvOS; + PRODUCT_NAME = MetaWear; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 861B1067C00BDC0ABD494326604B26E7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.12; - ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Debug; - }; - 89FA5E0BF597061350FB59EF816CD156 /* Release */ = { + 787BE3E9F2490976404575628DC8AAC1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB6F3AEB30C3D9BEC5BBD5C00EACADC8 /* Pods-Starter-iOS.release.xcconfig */; + baseConfigurationReference = CEF8BCE60C4FD64A661A7293183A8A56 /* MetaWear-tvOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_iOS; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = MetaWear; + SDKROOT = appletvos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_VERSION = 3.0.1; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - 9030B339C84C869711686BFC3251CFB8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.12; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - TVOS_DEPLOYMENT_TARGET = 10.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; + name = Debug; }; - AEDD5C15A673BE35BF246A21B2812D91 /* Debug */ = { + 910C8CDCBC6E1CDB62FA97EF683A4495 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 684B9BAB9E361082FA4C43F5C28BFB88 /* MetaWear-iOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -5823,111 +5842,113 @@ }; name = Debug; }; - BD27F0A07ED710B8B93977C310E0F79A /* Debug */ = { + 9E3855961F08F2CF77550612ACFB0F53 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ECB10F2A65A6BA5FB610B121361268F9 /* Pods-Starter-tvOS.debug.xcconfig */; + baseConfigurationReference = B92BBE818347A495C7009EC34204231C /* MBProgressHUD-iOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_tvOS; - SDKROOT = appletvos; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MBProgressHUD; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; + SWIFT_VERSION = 3.0.1; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - C20658318906257EB8A07D3F9188EB88 /* Release */ = { + A54FCF083E3DE2811BAF9EC3193361E5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 650423F1F88149F2DC689838E4ADBDDD /* Bolts-OSX.xcconfig */; + baseConfigurationReference = 933263669A3051E6F1BF79F8B4A4EF05 /* FastCoding+tvOS-tvOS.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-OSX/Bolts-OSX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-OSX/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; - MODULEMAP_FILE = "Target Support Files/Bolts-OSX/Bolts-OSX.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Bolts; - SDKROOT = macosx; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-tvOS/FastCoding+tvOS-tvOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = FastCoding_tvOS; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - C26A23AB86F97B570F2D7321A0505BA8 /* Release */ = { + B40AB0FEC6BBD0353E4F26444A2A355B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 54B80383998620218757341F989F766A /* FastCoding+tvOS-iOS.xcconfig */; + baseConfigurationReference = A9000F0FF7A90A6F59B81BFB7F8D0A37 /* Pods-Starter-iOS.debug.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-iOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = FastCoding_tvOS; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Starter_iOS; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0.1; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - CCC7A946B9FB37BA1A7D391A97EDE5C5 /* Release */ = { + B808726147C5C414E7EE4E3056E9F325 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B92BBE818347A495C7009EC34204231C /* MBProgressHUD-iOS.xcconfig */; + baseConfigurationReference = CB6F3AEB30C3D9BEC5BBD5C00EACADC8 /* Pods-Starter-iOS.release.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -5939,59 +5960,65 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD-iOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = MBProgressHUD; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Starter_iOS; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0.1; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - D5024B83706C293851F20A93E4D222EF /* Debug */ = { + C20658318906257EB8A07D3F9188EB88 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 54B80383998620218757341F989F766A /* FastCoding+tvOS-iOS.xcconfig */; + baseConfigurationReference = 650423F1F88149F2DC689838E4ADBDDD /* Bolts-OSX.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding+tvOS-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-OSX/Bolts-OSX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-OSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding+tvOS-iOS/FastCoding+tvOS-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FastCoding_tvOS; - SDKROOT = iphoneos; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.8; + MODULEMAP_FILE = "Target Support Files/Bolts-OSX/Bolts-OSX.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Bolts; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; - TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - DE77C679EF618929E24D552E8CE0B20E /* Debug */ = { + E33D984357A4ADEFBF5E53B00B85ABBE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CEF8BCE60C4FD64A661A7293183A8A56 /* MetaWear-tvOS.xcconfig */; + baseConfigurationReference = 787D93033316FDFFF92C3365C9A326F1 /* MBProgressHUD-tvOS.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -6003,30 +6030,32 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = MetaWear; + PRODUCT_NAME = MBProgressHUD; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; + TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - E33B3E8C74513E52D37877A16D39D2CB /* Debug */ = { + EBE5886C3E8232B7097D72DB7F1011D6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6641AA0111A93400A1FD9A0EB69E87E9 /* Bolts-iOS.xcconfig */; + baseConfigurationReference = C780913767E4473F6AC20C752CAE59F4 /* MetaWear-OSX.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; @@ -6034,57 +6063,56 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-OSX/MetaWear-OSX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-OSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULEMAP_FILE = "Target Support Files/MetaWear-OSX/MetaWear-OSX.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Bolts; - SDKROOT = iphoneos; + PRODUCT_NAME = MetaWear; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; - TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - EBE5886C3E8232B7097D72DB7F1011D6 /* Debug */ = { + F720BB5618E4E35C496754A6A06A59A1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C780913767E4473F6AC20C752CAE59F4 /* MetaWear-OSX.xcconfig */; + baseConfigurationReference = 787D93033316FDFFF92C3365C9A326F1 /* MBProgressHUD-tvOS.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-OSX/MetaWear-OSX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-OSX/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/MetaWear-OSX/MetaWear-OSX.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = MetaWear; - SDKROOT = macosx; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MBProgressHUD; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0.1; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ @@ -6101,8 +6129,8 @@ 1CD42F5BD6A6DA292B2802EC0357808F /* Build configuration list for PBXNativeTarget "Pods-Starter-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - BD27F0A07ED710B8B93977C310E0F79A /* Debug */, - 7481EF4727A8F02903E392559016959F /* Release */, + 6B26A2F340E6AC64F7F4DAC14C6A6132 /* Debug */, + 52DFE5B194709BCFC9B570B8ECD5BD1B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6110,8 +6138,8 @@ 21252E6CE3D099A3BE867C48DE81CB0E /* Build configuration list for PBXNativeTarget "Bolts-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6C0466E866A5FFB2FD5E97F267C126C5 /* Debug */, - 70295B8FB6C5FE0DC92C62D315F25F3E /* Release */, + 13F5015A0160BCA3940931C1A5DA600B /* Debug */, + 0BE7BCB8F44B32130B2170F297FCFF2F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6119,8 +6147,8 @@ 295ECAA9B3954089BEFDC23B1D2C2730 /* Build configuration list for PBXNativeTarget "Bolts-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - E33B3E8C74513E52D37877A16D39D2CB /* Debug */, - 0B2CCA7AE293EBC10652F88BAF5D7402 /* Release */, + 1C054D50487EA65F86053C1D255280B7 /* Debug */, + 21E32C49CC51FB2B59EB41B62E0C28F0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6128,8 +6156,8 @@ 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 861B1067C00BDC0ABD494326604B26E7 /* Debug */, - 9030B339C84C869711686BFC3251CFB8 /* Release */, + 1C0A10D44C1282F1EE6054110DDFDE56 /* Debug */, + 44179F4E85F87E23D177559EFF67CC39 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6146,8 +6174,8 @@ 44E941482C0742D390D3AFB1A0A6C567 /* Build configuration list for PBXNativeTarget "FastCoding+tvOS-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - D5024B83706C293851F20A93E4D222EF /* Debug */, - C26A23AB86F97B570F2D7321A0505BA8 /* Release */, + 259D114AE34AD243C1399DFB9FF74086 /* Debug */, + 64D36AB503E50687352BB26DCDE4352F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6173,8 +6201,8 @@ 82CA117C9BEEDA33CAEAD5FADCCEDF39 /* Build configuration list for PBXNativeTarget "Pods-Starter-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 697274CB99F7754307930EB8EAAFD8C2 /* Debug */, - 89FA5E0BF597061350FB59EF816CD156 /* Release */, + B40AB0FEC6BBD0353E4F26444A2A355B /* Debug */, + B808726147C5C414E7EE4E3056E9F325 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6182,8 +6210,8 @@ D15F450C46352209534CE932C303818F /* Build configuration list for PBXNativeTarget "MBProgressHUD-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 485A1148B9B86740EE58C19AC6FA3EDE /* Debug */, - CCC7A946B9FB37BA1A7D391A97EDE5C5 /* Release */, + 2019F6AD15617739BB5269C660A3CCB4 /* Debug */, + 9E3855961F08F2CF77550612ACFB0F53 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6191,8 +6219,8 @@ D4FCC774EFF79AA8E4FE14428E4F3FF6 /* Build configuration list for PBXNativeTarget "MBProgressHUD-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2A144A3EE536E0ED4AA01291AA3AB97C /* Debug */, - 65297F80B84E8FA5044D1EE02B1D61BB /* Release */, + E33D984357A4ADEFBF5E53B00B85ABBE /* Debug */, + F720BB5618E4E35C496754A6A06A59A1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6200,8 +6228,8 @@ D8F74E1ADE2E6F500B1DEA2EEAA600FC /* Build configuration list for PBXNativeTarget "MetaWear-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - AEDD5C15A673BE35BF246A21B2812D91 /* Debug */, - 285757BB1F880D88D2CABA8B78E9CA67 /* Release */, + 910C8CDCBC6E1CDB62FA97EF683A4495 /* Debug */, + 35CBF5CCB81305B26B531D8E894590E7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6209,8 +6237,8 @@ E6FCE49D80275049D3DDC9FA5F5CDE3F /* Build configuration list for PBXNativeTarget "FastCoding+tvOS-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 678E6362F08F4D196B02D39C7FEABA68 /* Debug */, - 84151C67613A94AEBF2658E1F42CF182 /* Release */, + A54FCF083E3DE2811BAF9EC3193361E5 /* Debug */, + 205EA17F7B6D5B5C39BAB793592C020B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6218,8 +6246,8 @@ F929B253C7EC61FFFE49BA86897339CD /* Build configuration list for PBXNativeTarget "MetaWear-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - DE77C679EF618929E24D552E8CE0B20E /* Debug */, - 6E3E86F09250821CB7010DBE4A74230E /* Release */, + 787BE3E9F2490976404575628DC8AAC1 /* Debug */, + 70C36883D6F68193743A858178699A51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist index 560e39e..db9e5d8 100644 --- a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist @@ -22,9 +22,5 @@ ${CURRENT_PROJECT_VERSION} NSPrincipalClass - UIRequiredDeviceCapabilities - - arm64 - diff --git a/StarterProject/Pods/Target Support Files/FastCoding+tvOS-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/FastCoding+tvOS-tvOS/Info.plist index 46f74a0..42c9fae 100644 --- a/StarterProject/Pods/Target Support Files/FastCoding+tvOS-tvOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/FastCoding+tvOS-tvOS/Info.plist @@ -22,9 +22,5 @@ ${CURRENT_PROJECT_VERSION} NSPrincipalClass - UIRequiredDeviceCapabilities - - arm64 - diff --git a/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/Info.plist index e4c7663..2243fe6 100644 --- a/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/Info.plist @@ -22,9 +22,5 @@ ${CURRENT_PROJECT_VERSION} NSPrincipalClass - UIRequiredDeviceCapabilities - - arm64 - diff --git a/StarterProject/Pods/Target Support Files/MetaWear-OSX/Info.plist b/StarterProject/Pods/Target Support Files/MetaWear-OSX/Info.plist index ffa1413..60e6892 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-OSX/Info.plist +++ b/StarterProject/Pods/Target Support Files/MetaWear-OSX/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.8.3 + 2.8.4 CFBundleSignature ???? CFBundleVersion diff --git a/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist b/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist index ffa1413..60e6892 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.8.3 + 2.8.4 CFBundleSignature ???? CFBundleVersion diff --git a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist index 7a04de4..60e6892 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist @@ -15,16 +15,12 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.8.3 + 2.8.4 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSPrincipalClass - UIRequiredDeviceCapabilities - - arm64 - diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh index 4602c68..aed060f 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh @@ -21,6 +21,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig index fbc6740..247dd46 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig @@ -5,4 +5,5 @@ OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bol OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding_tvOS" -framework "MBProgressHUD" -framework "MetaWear" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig index fbc6740..247dd46 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig @@ -5,4 +5,5 @@ OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bol OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding_tvOS" -framework "MBProgressHUD" -framework "MetaWear" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh index 4602c68..aed060f 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh @@ -21,6 +21,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig index b0e7fe8..7730a8d 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig @@ -6,4 +6,5 @@ OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-OSX/Bol OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding_tvOS" -framework "MetaWear" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig index b0e7fe8..7730a8d 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig @@ -6,4 +6,5 @@ OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-OSX/Bol OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding_tvOS" -framework "MetaWear" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Info.plist index e4c7663..2243fe6 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Info.plist @@ -22,9 +22,5 @@ ${CURRENT_PROJECT_VERSION} NSPrincipalClass - UIRequiredDeviceCapabilities - - arm64 - diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh index 4602c68..aed060f 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh @@ -21,6 +21,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig index 2f614ce..466c376 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig @@ -5,4 +5,5 @@ OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bo OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding_tvOS" -framework "MBProgressHUD" -framework "MetaWear" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig index 2f614ce..466c376 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig @@ -5,4 +5,5 @@ OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bo OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding_tvOS" -framework "MBProgressHUD" -framework "MetaWear" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/StarterProject.xcodeproj/project.pbxproj b/StarterProject/StarterProject.xcodeproj/project.pbxproj index c56f0f6..a83425b 100644 --- a/StarterProject/StarterProject.xcodeproj/project.pbxproj +++ b/StarterProject/StarterProject.xcodeproj/project.pbxproj @@ -330,7 +330,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; 5D83398C0851483637B414DA /* [CP] Embed Pods Frameworks */ = { @@ -390,7 +390,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; B011AC4A4DC14E6A0A19D00B /* [CP] Copy Pods Resources */ = { @@ -450,7 +450,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/StarterProject/iOS/Main.storyboard b/StarterProject/iOS/Main.storyboard index 550e717..3a5c685 100644 --- a/StarterProject/iOS/Main.storyboard +++ b/StarterProject/iOS/Main.storyboard @@ -1,7 +1,10 @@ - + + + + - + @@ -34,15 +37,15 @@ - + - + - + - + - + @@ -102,7 +105,7 @@ - + @@ -113,30 +116,33 @@ - + - + - + + - + - + diff --git a/StarterProject/tvOS/Base.lproj/Main.storyboard b/StarterProject/tvOS/Base.lproj/Main.storyboard index 0e70e28..2ebca3a 100644 --- a/StarterProject/tvOS/Base.lproj/Main.storyboard +++ b/StarterProject/tvOS/Base.lproj/Main.storyboard @@ -1,8 +1,11 @@ - + + + + - + @@ -16,25 +19,28 @@ - - + + - + + - + - +