diff --git a/CHANGELOG.md b/CHANGELOG.md index fefb62e9..a6afbf5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,128 @@ # Changelog +## 1.6.0.11 + +New: + +* Design tweaks + +Fixes: + +* Fixed issue in alarm expansion setup where configurations are not loaded + +## 1.6.0.10 + +New: + +* Amazon review routing only for people with Sense One for now +* Add title view for configuration selection in alarm expansion setup +* Updated units and time icon in account settings +* Add lights and thermostat attribution +* Convert thermostat ranges based on preferences +* More voice command tweaks + +## 1.6.0.9 + +New: + +* Reduced size of app +* Voice command tweaks +* Moved units & time in to account settings + +Fixes: + +* Fixed issue that would cause insights to not load right after signing in. + +## 1.6.0.8 + +New: + +* Thermostat support in alarms +* Lights support in alarms + +Fixes: + +* Mute control for voice now works properly +* Volume control for voice now works properly + +## 1.6.0.7 + +New: + +* Add Thermostat row to Alarm screen +* Updated Lights row in Alarm screen + +Fixes: + +* Fixed new particulates about copy +* Fixed issue where switch for alarm list does nothing if sliding instead of tapping +* Fixed issue where switch for smart alarm does nothing if sliding instead of tapping + +## 1.6.0.6 + +New: + +* Changed copy for Log In to Sign In +* Removed the Voice Commands title from the voice tab +* Smart default for smart alarm switch when creating alarm + +## 1.6.0.5 + +New: + +* Updated primary user VX +* Added mute option in voice settings +* Added volume control option in voice settings +* Added volume control UI +* Hide mac address for 1.0 Sense in Wi-Fi scanner +* Updated copy in various screens + +## 1.6.0.4 + +New: + +* Added voice settings screen +* Added support for setting primary user, hooked up to an API that is not yet available +* Re-enabled lights integration in alarms +* Updated location prompt message + +Fixes: + +* Fixed order sense casing in initial set up screen +* Fixed copy in pill set up screen +* Fixed copy in pill pairing screen + +## 1.6.0.3 + +New: + +* Removed enhanced audio from onboarding +* Updated copy throughout onboarding + +## 1.6.0.2 + +New: + +* Sense MAC address now shown on the WiFi scan screen +* Added support for mbar unit for barometric pressure + +Fixes: + +* Fix issue where navigation bar separator is shown in voice examples screen on iOS 10 +* Fixed punctuation copy from several voice examples +* Allow server to define order of displayed sensors + +## 1.6.0.1 + +New: + +* Voice tab appears as sibling to Insights feed if Sense paired is Sense with Voice +* Voice tab displays welcome card until closed +* Voice tab displays a set of categorized commands with an example preview +* Tapping in to a command category will display a full set of commands based on what is available today. +* Added Lights attribution to expansion alarms +* Removed dependency to features API, using hardware version as replacement + ## 1.5.4.6 New: diff --git a/Extensions/RoomConditions/Info.plist b/Extensions/RoomConditions/Info.plist index 7859c3f1..8ee0f894 100644 --- a/Extensions/RoomConditions/Info.plist +++ b/Extensions/RoomConditions/Info.plist @@ -17,11 +17,11 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 1.5.4 + 1.6.0 CFBundleSignature ???? CFBundleVersion - 1.5.4.6 + 1.6.0.11 NSExtension NSExtensionMainStoryboard diff --git a/Podfile b/Podfile index 7822a736..d5f26b59 100644 --- a/Podfile +++ b/Podfile @@ -7,7 +7,7 @@ abstract_target 'SenseApp' do pod 'SHSProtoBuf', :git => 'git@github.com:hello/protobuf-objc.git' pod 'LGBluetooth', :git => 'git@github.com:hello/LGBluetooth.git' pod 'SenseKit', :git => 'git@github.com:hello/SenseKit.git' - # pod 'SenseKit', :path => '../SenseKit' + #pod 'SenseKit', :path => '../SenseKit' pod 'AttributedMarkdown', :git => 'git@github.com:hello/AttributedMarkdown.git', :inhibit_warnings => true pod 'CGFloatType', '~> 1.3.1' pod 'SORelativeDateTransformer', :git => 'git@github.com:jrmiddle/SORelativeDateTransformer.git', :commit => '51f53d591b7c19da1fcea5a91e5c044089c99410' @@ -23,7 +23,7 @@ abstract_target 'SenseApp' do pod 'UICountingLabel', '~> 1.2.0' pod 'Bugsnag', '~> 4.1.0' pod 'NAPickerView', :git => 'git@github.com:hello/NAPickerView.git' - pod 'Charts/Realm', '2.2.5' + pod 'Charts/Core', '2.2.5' pod 'iOSDFULibrary', :git => 'git@github.com:jimmymlu/IOS-Pods-DFU-Library.git', :branch => 'method-name-compatibility' pod 'Zip', '0.4.3' pod 'Analytics', '3.0.7' diff --git a/Podfile.lock b/Podfile.lock index 2d8216a6..761a00e8 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -27,9 +27,6 @@ PODS: - Bugsnag/no-arc (4.1.0) - CGFloatType (1.3.1) - Charts/Core (2.2.5) - - Charts/Realm (2.2.5): - - Charts/Core - - RealmSwift (~> 0.97) - CocoaLumberjack (2.0.3): - CocoaLumberjack/Default (= 2.0.3) - CocoaLumberjack/Extensions (= 2.0.3) @@ -51,11 +48,6 @@ PODS: - NAPickerView (0.0.1) - Nocilla (0.11.0) - NSJSONSerialization-NSNullRemoval (1.0.1) - - Realm (0.103.2): - - Realm/Headers (= 0.103.2) - - Realm/Headers (0.103.2) - - RealmSwift (0.103.2): - - Realm (= 0.103.2) - SenseKit (0.1.0): - SenseKit/Analytics (= 0.1.0) - SenseKit/API (= 0.1.0) @@ -99,7 +91,7 @@ DEPENDENCIES: - AttributedMarkdown (from `git@github.com:hello/AttributedMarkdown.git`) - Bugsnag (~> 4.1.0) - CGFloatType (~> 1.3.1) - - Charts/Realm (= 2.2.5) + - Charts/Core (= 2.2.5) - FBSDKCoreKit (~> 4.11.0) - FBSDKLoginKit (~> 4.11.0) - iOSDFULibrary (from `git@github.com:jimmymlu/IOS-Pods-DFU-Library.git`, branch `method-name-compatibility`) @@ -154,7 +146,7 @@ CHECKOUT OPTIONS: :commit: 0451b5e67dec46b8bc48fcad63d9f844cae1bf19 :git: git@github.com:hello/NAPickerView.git SenseKit: - :commit: 8a3fbfc31af2088fe1ce06338c1154846ee41475 + :commit: b3c69b658337fc4bee76e98193e2637dd36936dc :git: git@github.com:hello/SenseKit.git SHSProtoBuf: :commit: 86b2e176097f76d130c858164eca42e15b779073 @@ -188,8 +180,6 @@ SPEC CHECKSUMS: NAPickerView: cac3bd6f38e36374e53309335e28f4fc9cd93c94 Nocilla: 7af7a386071150cc8aa5da4da97d060f049dd61c NSJSONSerialization-NSNullRemoval: 4c50d948b7805807ea8ce690d48e05ee679ef5b7 - Realm: 448f0416079fe5b0ed947e7d86f3c4e1c75826cb - RealmSwift: 8a45cc8f02dfac093b72a3b5a01d567e27e15891 SenseKit: c061883ef8ed2c6781fee3af2df870172e6303c0 SHSProtoBuf: 89a179d27f35dea460139a630e8ac22378eabbe3 SORelativeDateTransformer: 307489386df4697780902bc16e99881d69a629b3 @@ -199,6 +189,6 @@ SPEC CHECKSUMS: ZendeskSDK: 45b7a2812a04c3c5c2510aeeeded5818e6e705a5 Zip: 670419a5ba9faaf5f24ed3650c4c38b4136e996b -PODFILE CHECKSUM: 7d5242e2506ba12f31affb1fcd9b590909277712 +PODFILE CHECKSUM: e1a4174b5e9e2bfea9f57d7776b0051a90b12339 COCOAPODS: 1.0.0 diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmBarData.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmBarData.swift deleted file mode 100644 index e2e82013..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmBarData.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RealmBarData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmBarData: BarChartData -{ - public init(results: RLMResults?, xValueField: String, dataSets: [IChartDataSet]?) - { - if results == nil - { - super.init(xVals: [String](), dataSets: dataSets) - } - else - { - super.init(xVals: RealmChartUtils.toXVals(results: results!, xValueField: xValueField), dataSets: dataSets) - } - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmBarDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmBarDataSet.swift deleted file mode 100644 index 6ece1e59..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmBarDataSet.swift +++ /dev/null @@ -1,260 +0,0 @@ -// -// RealmBarDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import CoreGraphics - - -import Realm -import Realm.Dynamic - -public class RealmBarDataSet: RealmBarLineScatterCandleBubbleDataSet, IBarChartDataSet -{ - public override func initialize() - { - self.highlightColor = NSUIColor.blackColor() - } - - public required init() - { - super.init() - } - - public override init(results: RLMResults?, yValueField: String, xIndexField: String?, label: String?) - { - super.init(results: results, yValueField: yValueField, xIndexField: xIndexField, label: label) - } - - public init(results: RLMResults?, yValueField: String, xIndexField: String?, stackValueField: String, label: String?) - { - _stackValueField = stackValueField - - super.init(results: results, yValueField: yValueField, xIndexField: xIndexField, label: label) - } - - public convenience init(results: RLMResults?, yValueField: String, xIndexField: String?, stackValueField: String) - { - self.init(results: results, yValueField: yValueField, xIndexField: xIndexField, stackValueField: stackValueField, label: "DataSet") - } - - public convenience init(results: RLMResults?, yValueField: String, stackValueField: String, label: String) - { - self.init(results: results, yValueField: yValueField, xIndexField: nil, stackValueField: stackValueField, label: label) - } - - public convenience init(results: RLMResults?, yValueField: String, stackValueField: String) - { - self.init(results: results, yValueField: yValueField, xIndexField: nil, stackValueField: stackValueField) - } - - public override init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, xIndexField: String?, label: String?) - { - super.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: yValueField, xIndexField: xIndexField, label: label) - } - - public init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, xIndexField: String?, stackValueField: String, label: String?) - { - _stackValueField = stackValueField - - super.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: yValueField, xIndexField: xIndexField, label: label) - } - - public convenience init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, xIndexField: String?, stackValueField: String) - { - self.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: yValueField, xIndexField: nil, stackValueField: stackValueField) - } - - public convenience init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, stackValueField: String, label: String?) - { - self.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: yValueField, xIndexField: nil, stackValueField: stackValueField, label: label) - } - - public convenience init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, stackValueField: String) - { - self.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: yValueField, xIndexField: nil, stackValueField: stackValueField, label: nil) - } - - public override func notifyDataSetChanged() - { - _cache.removeAll() - ensureCache(start: 0, end: entryCount - 1) - self.calcStackSize(_cache as! [BarChartDataEntry]) - - super.notifyDataSetChanged() - } - - // MARK: - Data functions and accessors - - internal var _stackValueField: String? - - /// the maximum number of bars that are stacked upon each other, this value - /// is calculated from the Entries that are added to the DataSet - private var _stackSize = 1 - - internal override func buildEntryFromResultObject(object: RLMObject, atIndex: UInt) -> ChartDataEntry - { - let value = object[_yValueField!] - let entry: BarChartDataEntry - - if value is RLMArray - { - var values = [Double]() - for val in value as! RLMArray - { - values.append((val as! RLMObject)[_stackValueField!] as! Double) - } - entry = BarChartDataEntry(values: values, xIndex: _xIndexField == nil ? Int(atIndex) : object[_xIndexField!] as! Int) - } - else - { - entry = BarChartDataEntry(value: value as! Double, xIndex: _xIndexField == nil ? Int(atIndex) : object[_xIndexField!] as! Int) - } - - return entry - } - - /// calculates the maximum stacksize that occurs in the Entries array of this DataSet - private func calcStackSize(yVals: [BarChartDataEntry]!) - { - for i in 0 ..< yVals.count - { - if let vals = yVals[i].values - { - if vals.count > _stackSize - { - _stackSize = vals.count - } - } - } - } - - public override func calcMinMax(start start : Int, end: Int) - { - let yValCount = self.entryCount - - if yValCount == 0 - { - return - } - - var endValue : Int - - if end == 0 || end >= yValCount - { - endValue = yValCount - 1 - } - else - { - endValue = end - } - - ensureCache(start: start, end: endValue) - - if _cache.count == 0 - { - return - } - - _lastStart = start - _lastEnd = endValue - - _yMin = DBL_MAX - _yMax = -DBL_MAX - - for i in start.stride(through: endValue, by: 1) - { - if let e = _cache[i - _cacheFirst] as? BarChartDataEntry - { - if !e.value.isNaN - { - if e.values == nil - { - if e.value < _yMin - { - _yMin = e.value - } - - if e.value > _yMax - { - _yMax = e.value - } - } - else - { - if -e.negativeSum < _yMin - { - _yMin = -e.negativeSum - } - - if e.positiveSum > _yMax - { - _yMax = e.positiveSum - } - } - } - } - } - - if (_yMin == DBL_MAX) - { - _yMin = 0.0 - _yMax = 0.0 - } - } - - /// - returns: the maximum number of bars that can be stacked upon another in this DataSet. - public var stackSize: Int - { - return _stackSize - } - - /// - returns: true if this DataSet is stacked (stacksize > 1) or not. - public var isStacked: Bool - { - return _stackSize > 1 ? true : false - } - - /// array of labels used to describe the different values of the stacked bars - public var stackLabels: [String] = ["Stack"] - - // MARK: - Styling functions and accessors - - /// space indicator between the bars in percentage of the whole width of one value (0.15 == 15% of bar width) - public var barSpace: CGFloat = 0.15 - - /// the color used for drawing the bar-shadows. The bar shadows is a surface behind the bar that indicates the maximum value - public var barShadowColor = NSUIColor(red: 215.0/255.0, green: 215.0/255.0, blue: 215.0/255.0, alpha: 1.0) - - /// the width used for drawing borders around the bars. If borderWidth == 0, no border will be drawn. - public var barBorderWidth : CGFloat = 0.0 - - /// the color drawing borders around the bars. - public var barBorderColor = NSUIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0) - - /// the alpha value (transparency) that is used for drawing the highlight indicator bar. min = 0.0 (fully transparent), max = 1.0 (fully opaque) - public var highlightAlpha = CGFloat(120.0 / 255.0) - - // MARK: - NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmBarDataSet - copy._stackSize = _stackSize - copy.stackLabels = stackLabels - copy.barSpace = barSpace - copy.barShadowColor = barShadowColor - copy.highlightAlpha = highlightAlpha - return copy - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmBarLineScatterCandleBubbleDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmBarLineScatterCandleBubbleDataSet.swift deleted file mode 100644 index 027afdad..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmBarLineScatterCandleBubbleDataSet.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// RealmBarLineScatterCandleBubbleDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmBarLineScatterCandleBubbleDataSet: RealmBaseDataSet, IBarLineScatterCandleBubbleChartDataSet -{ - // MARK: - Data functions and accessors - - // MARK: - Styling functions and accessors - - public var highlightColor = NSUIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) - public var highlightLineWidth = CGFloat(0.5) - public var highlightLineDashPhase = CGFloat(0.0) - public var highlightLineDashLengths: [CGFloat]? - - // MARK: - NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmBarLineScatterCandleBubbleDataSet - copy.highlightColor = highlightColor - copy.highlightLineWidth = highlightLineWidth - copy.highlightLineDashPhase = highlightLineDashPhase - copy.highlightLineDashLengths = highlightLineDashLengths - return copy - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmBaseDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmBaseDataSet.swift deleted file mode 100644 index 18712a5e..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmBaseDataSet.swift +++ /dev/null @@ -1,475 +0,0 @@ -// -// RealmBaseDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmBaseDataSet: ChartBaseDataSet -{ - public func initialize() - { - fatalError("RealmBaseDataSet is an abstract class, you must inherit from it. Also please do not call super.initialize().") - } - - public required init() - { - super.init() - - // default color - colors.append(NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - - initialize() - } - - public override init(label: String?) - { - super.init() - - // default color - colors.append(NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - - self.label = label - - initialize() - } - - public init(results: RLMResults?, yValueField: String, xIndexField: String?, label: String?) - { - super.init() - - // default color - colors.append(NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - - self.label = label - - _results = results - _yValueField = yValueField - _xIndexField = xIndexField - _results = _results?.sortedResultsUsingProperty(_xIndexField!, ascending: true) - - notifyDataSetChanged() - - initialize() - } - - public convenience init(results: RLMResults?, yValueField: String, label: String?) - { - self.init(results: results, yValueField: yValueField, xIndexField: nil, label: label) - } - - public convenience init(results: RLMResults?, yValueField: String, xIndexField: String?) - { - self.init(results: results, yValueField: yValueField, xIndexField: xIndexField, label: "DataSet") - } - - public convenience init(results: RLMResults?, yValueField: String) - { - self.init(results: results, yValueField: yValueField) - } - - public init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, xIndexField: String?, label: String?) - { - super.init() - - // default color - colors.append(NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - - self.label = label - - _yValueField = yValueField - _xIndexField = xIndexField - - if realm != nil - { - loadResults(realm: realm!, modelName: modelName) - } - - initialize() - } - - public convenience init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, label: String?) - { - self.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: yValueField, xIndexField: nil, label: label) - } - - public func loadResults(realm realm: RLMRealm, modelName: String) - { - loadResults(realm: realm, modelName: modelName, predicate: nil) - } - - public func loadResults(realm realm: RLMRealm, modelName: String, predicate: NSPredicate?) - { - if predicate == nil - { - _results = realm.allObjects(modelName) - } - else - { - _results = realm.objects(modelName, withPredicate: predicate) - } - - if _xIndexField != nil - { - _results = _results?.sortedResultsUsingProperty(_xIndexField!, ascending: true) - } - - notifyDataSetChanged() - } - - // MARK: - Data functions and accessors - - internal var _results: RLMResults? - internal var _yValueField: String? - internal var _xIndexField: String? - internal var _cache = [ChartDataEntry]() - internal var _cacheFirst: Int = -1 - internal var _cacheLast: Int = -1 - - internal var _yMax = Double(0.0) - internal var _yMin = Double(0.0) - - /// the last start value used for calcMinMax - internal var _lastStart: Int = 0 - - /// the last end value used for calcMinMax - internal var _lastEnd: Int = 0 - - /// Makes sure that the cache is populated for the specified range - internal func ensureCache(start start: Int, end: Int) - { - if start <= _cacheLast && end >= _cacheFirst - { - return - } - - guard let results = _results else { return } - - if _cacheFirst == -1 || _cacheLast == -1 - { - _cache.removeAll() - _cache.reserveCapacity(end - start + 1) - - for i in UInt(start) ..< UInt(end + 1) - { - _cache.append(buildEntryFromResultObject(results.objectAtIndex(i), atIndex: i)) - } - - _cacheFirst = start - _cacheLast = end - } - - if start < _cacheFirst - { - var newEntries = [ChartDataEntry]() - newEntries.reserveCapacity(start - _cacheFirst) - - for i in UInt(start) ..< UInt(_cacheFirst) - { - newEntries.append(buildEntryFromResultObject(results.objectAtIndex(i), atIndex: i)) - } - - _cache.insertContentsOf(newEntries, at: 0) - - _cacheFirst = start - } - - if end > _cacheLast - { - for i in UInt(_cacheLast + 1) ..< UInt(end + 1) - { - _cache.append(buildEntryFromResultObject(results.objectAtIndex(i), atIndex: i)) - } - - _cacheLast = end - } - } - - internal func buildEntryFromResultObject(object: RLMObject, atIndex: UInt) -> ChartDataEntry - { - let entry = ChartDataEntry(value: object[_yValueField!] as! Double, xIndex: _xIndexField == nil ? Int(atIndex) : object[_xIndexField!] as! Int) - - return entry - } - - /// Makes sure that the cache is populated for the specified range - internal func clearCache() - { - _cache.removeAll() - _cacheFirst = -1 - _cacheLast = -1 - } - - /// Use this method to tell the data set that the underlying data has changed - public override func notifyDataSetChanged() - { - calcMinMax(start: _lastStart, end: _lastEnd) - } - - public override func calcMinMax(start start: Int, end: Int) - { - let yValCount = self.entryCount - - if yValCount == 0 - { - return - } - - var endValue : Int - - if end == 0 || end >= yValCount - { - endValue = yValCount - 1 - } - else - { - endValue = end - } - - ensureCache(start: start, end: endValue) - - if _cache.count == 0 - { - return - } - - _lastStart = start - _lastEnd = endValue - - _yMin = DBL_MAX - _yMax = -DBL_MAX - - for i in start.stride(through: endValue, by: 1) - { - let e = _cache[i - _cacheFirst] - - if (!e.value.isNaN) - { - if (e.value < _yMin) - { - _yMin = e.value - } - if (e.value > _yMax) - { - _yMax = e.value - } - } - } - - if (_yMin == DBL_MAX) - { - _yMin = 0.0 - _yMax = 0.0 - } - } - - /// - returns: the minimum y-value this DataSet holds - public override var yMin: Double { return _yMin } - - /// - returns: the maximum y-value this DataSet holds - public override var yMax: Double { return _yMax } - - /// - returns: the number of y-values this DataSet represents - public override var entryCount: Int { return Int(_results?.count ?? 0) } - - /// - returns: the value of the Entry object at the given xIndex. Returns NaN if no value is at the given x-index. - public override func yValForXIndex(x: Int) -> Double - { - let e = self.entryForXIndex(x) - - if (e !== nil && e!.xIndex == x) { return e!.value } - else { return Double.NaN } - } - - /// - returns: all of the y values of the Entry objects at the given xIndex. Returns NaN if no value is at the given x-index. - public override func yValsForXIndex(x: Int) -> [Double] - { - let entries = self.entriesForXIndex(x) - - var yVals = [Double]() - for e in entries - { - yVals.append(e.value) - } - - return yVals - } - - /// - returns: the entry object found at the given index (not x-index!) - /// - throws: out of bounds - /// if `i` is out of bounds, it may throw an out-of-bounds exception - public override func entryForIndex(i: Int) -> ChartDataEntry? - { - if i < _lastStart || i > _lastEnd - { - ensureCache(start: i, end: i) - } - return _cache[i - _lastStart] - } - - /// - returns: the first Entry object found at the given xIndex with binary search. - /// If the no Entry at the specifed x-index is found, this method returns the Entry at the closest x-index. - /// nil if no Entry object at that index. - public override func entryForXIndex(x: Int, rounding: ChartDataSetRounding) -> ChartDataEntry? - { - let index = self.entryIndex(xIndex: x, rounding: rounding) - if (index > -1) - { - return entryForIndex(index) - } - return nil - } - - /// - returns: the first Entry object found at the given xIndex with binary search. - /// If the no Entry at the specifed x-index is found, this method returns the Entry at the closest x-index. - /// nil if no Entry object at that index. - public override func entryForXIndex(x: Int) -> ChartDataEntry? - { - return entryForXIndex(x, rounding: .Closest) - } - - /// - returns: all Entry objects found at the given xIndex with binary search. - /// An empty array if no Entry object at that index. - public override func entriesForXIndex(x: Int) -> [ChartDataEntry] - { - var entries = [ChartDataEntry]() - - guard let results = _results else { return entries } - - if _xIndexField == nil - { - if results.count > UInt(x) - { - entries.append(buildEntryFromResultObject(results.objectAtIndex(UInt(x)), atIndex: UInt(x))) - } - } - else - { - let foundObjects = results.objectsWithPredicate( - NSPredicate(format: "%K == %d", _xIndexField!, x) - ) - - for e in foundObjects - { - entries.append(buildEntryFromResultObject(e as! RLMObject, atIndex: UInt(x))) - } - } - - return entries - } - - /// - returns: the array-index of the specified entry - /// - /// - parameter x: x-index of the entry to search for - public override func entryIndex(xIndex x: Int, rounding: ChartDataSetRounding) -> Int - { - guard let results = _results else { return -1 } - - let foundIndex = results.indexOfObjectWithPredicate( - NSPredicate(format: "%K == %d", _xIndexField!, x) - ) - - // TODO: Figure out a way to quickly find the closest index - - return Int(foundIndex) - } - - /// - returns: the array-index of the specified entry - /// - /// - parameter e: the entry to search for - public override func entryIndex(entry e: ChartDataEntry) -> Int - { - for i in 0 ..< _cache.count - { - if (_cache[i] === e || _cache[i].isEqual(e)) - { - return _cacheFirst + i - } - } - - return -1 - } - - /// Not supported on Realm datasets - public override func addEntry(e: ChartDataEntry) -> Bool - { - return false - } - - /// Not supported on Realm datasets - public override func addEntryOrdered(e: ChartDataEntry) -> Bool - { - return false - } - - /// Not supported on Realm datasets - public override func removeEntry(entry: ChartDataEntry) -> Bool - { - return false - } - - /// Checks if this DataSet contains the specified Entry. - /// - returns: true if contains the entry, false if not. - public override func contains(e: ChartDataEntry) -> Bool - { - for entry in _cache - { - if (entry.isEqual(e)) - { - return true - } - } - - return false - } - - /// Returns the fieldname that represents the "y-values" in the realm-data. - public var yValueField: String? - { - get - { - return _yValueField - } - } - - /// Returns the fieldname that represents the "x-index" in the realm-data. - public var xIndexField: String? - { - get - { - return _xIndexField - } - } - - // MARK: - NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmBaseDataSet - - copy._results = _results - copy._yValueField = _yValueField - copy._xIndexField = _xIndexField - copy._yMax = _yMax - copy._yMin = _yMin - copy._lastStart = _lastStart - copy._lastEnd = _lastEnd - - return copy - } -} - - diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmBubbleData.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmBubbleData.swift deleted file mode 100644 index 70f4f21d..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmBubbleData.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RealmBubbleData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmBubbleData: BubbleChartData -{ - public init(results: RLMResults?, xValueField: String, dataSets: [IChartDataSet]?) - { - if results == nil - { - super.init(xVals: [String](), dataSets: dataSets) - } - else - { - super.init(xVals: RealmChartUtils.toXVals(results: results!, xValueField: xValueField), dataSets: dataSets) - } - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmBubbleDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmBubbleDataSet.swift deleted file mode 100644 index 12926415..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmBubbleDataSet.swift +++ /dev/null @@ -1,186 +0,0 @@ -// -// RealmBubbleDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import CoreGraphics - - -import Realm -import Realm.Dynamic - -public class RealmBubbleDataSet: RealmBarLineScatterCandleBubbleDataSet, IBubbleChartDataSet -{ - public override func initialize() - { - } - - public required init() - { - super.init() - } - - public init(results: RLMResults?, yValueField: String, xIndexField: String, sizeField: String, label: String?) - { - _sizeField = sizeField - - super.init(results: results, yValueField: yValueField, xIndexField: xIndexField, label: label) - } - - public convenience init(results: RLMResults?, yValueField: String, xIndexField: String, sizeField: String) - { - self.init(results: results, yValueField: yValueField, xIndexField: xIndexField, sizeField: sizeField, label: "DataSet") - } - - public init(realm: RLMRealm?, modelName: String, resultsWhere: String, yValueField: String, xIndexField: String, sizeField: String, label: String?) - { - _sizeField = sizeField - - super.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: yValueField, xIndexField: xIndexField, label: label) - } - - // MARK: - Data functions and accessors - - internal var _sizeField: String? - - internal var _xMax = Double(0.0) - internal var _xMin = Double(0.0) - internal var _maxSize = CGFloat(0.0) - - public var xMin: Double { return _xMin } - public var xMax: Double { return _xMax } - public var maxSize: CGFloat { return _maxSize } - public var normalizeSizeEnabled: Bool = true - public var isNormalizeSizeEnabled: Bool { return normalizeSizeEnabled } - - internal override func buildEntryFromResultObject(object: RLMObject, atIndex: UInt) -> ChartDataEntry - { - let entry = BubbleChartDataEntry(xIndex: _xIndexField == nil ? Int(atIndex) : object[_xIndexField!] as! Int, value: object[_yValueField!] as! Double, size: object[_sizeField!] as! CGFloat) - - return entry - } - - public override func calcMinMax(start start: Int, end: Int) - { - let yValCount = self.entryCount - - if yValCount == 0 - { - return - } - - var endValue : Int - - if end == 0 || end >= yValCount - { - endValue = yValCount - 1 - } - else - { - endValue = end - } - - ensureCache(start: start, end: endValue) - - if _cache.count == 0 - { - return - } - - _lastStart = start - _lastEnd = end - - _yMin = yMin(_cache[start - _cacheFirst] as! BubbleChartDataEntry) - _yMax = yMax(_cache[start - _cacheFirst] as! BubbleChartDataEntry) - - for i in start.stride(through: endValue, by: 1) - { - let entry = _cache[i - _cacheFirst] as! BubbleChartDataEntry - - let ymin = yMin(entry) - let ymax = yMax(entry) - - if (ymin < _yMin) - { - _yMin = ymin - } - - if (ymax > _yMax) - { - _yMax = ymax - } - - let xmin = xMin(entry) - let xmax = xMax(entry) - - if (xmin < _xMin) - { - _xMin = xmin - } - - if (xmax > _xMax) - { - _xMax = xmax - } - - let size = largestSize(entry) - - if (size > _maxSize) - { - _maxSize = size - } - } - } - - private func yMin(entry: BubbleChartDataEntry) -> Double - { - return entry.value - } - - private func yMax(entry: BubbleChartDataEntry) -> Double - { - return entry.value - } - - private func xMin(entry: BubbleChartDataEntry) -> Double - { - return Double(entry.xIndex) - } - - private func xMax(entry: BubbleChartDataEntry) -> Double - { - return Double(entry.xIndex) - } - - private func largestSize(entry: BubbleChartDataEntry) -> CGFloat - { - return entry.size - } - - // MARK: - Styling functions and accessors - - /// Sets/gets the width of the circle that surrounds the bubble when highlighted - public var highlightCircleWidth: CGFloat = 2.5 - - // MARK: - NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmBubbleDataSet - copy._xMin = _xMin - copy._xMax = _xMax - copy._maxSize = _maxSize - copy.highlightCircleWidth = highlightCircleWidth - return copy - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmCandleData.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmCandleData.swift deleted file mode 100644 index 26e3baae..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmCandleData.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RealmCandleData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmCandleData: CandleChartData -{ - public init(results: RLMResults?, xValueField: String, dataSets: [IChartDataSet]?) - { - if results == nil - { - super.init(xVals: [String](), dataSets: dataSets) - } - else - { - super.init(xVals: RealmChartUtils.toXVals(results: results!, xValueField: xValueField), dataSets: dataSets) - } - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmCandleDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmCandleDataSet.swift deleted file mode 100644 index f46d1046..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmCandleDataSet.swift +++ /dev/null @@ -1,201 +0,0 @@ -// -// RealmCandleDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import CoreGraphics - - -import Realm -import Realm.Dynamic - -public class RealmCandleDataSet: RealmLineScatterCandleRadarDataSet, ICandleChartDataSet -{ - public override func initialize() - { - - } - - public required init() - { - super.init() - } - - public init(results: RLMResults?, highField: String, lowField: String, openField: String, closeField: String, xIndexField: String, label: String?) - { - _highField = highField - _lowField = lowField - _openField = openField - _closeField = closeField - - super.init(results: results, yValueField: "", xIndexField: xIndexField, label: label) - } - - public convenience init(results: RLMResults?, highField: String, lowField: String, openField: String, closeField: String, xIndexField: String) - { - self.init(results: results, highField: highField, lowField: lowField, openField: openField, closeField: closeField, xIndexField: xIndexField, label: "DataSet") - } - - public init(realm: RLMRealm?, modelName: String, resultsWhere: String, highField: String, lowField: String, openField: String, closeField: String, xIndexField: String, label: String?) - { - _highField = highField - _lowField = lowField - _openField = openField - _closeField = closeField - - super.init(realm: realm, modelName: modelName, resultsWhere: resultsWhere, yValueField: "", xIndexField: xIndexField, label: label) - } - - // MARK: - Data functions and accessors - - internal var _highField: String? - internal var _lowField: String? - internal var _openField: String? - internal var _closeField: String? - - internal override func buildEntryFromResultObject(object: RLMObject, atIndex: UInt) -> ChartDataEntry - { - let entry = CandleChartDataEntry( - xIndex: _xIndexField == nil ? Int(atIndex) : object[_xIndexField!] as! Int, - shadowH: object[_highField!] as! Double, - shadowL: object[_lowField!] as! Double, - open: object[_openField!] as! Double, - close: object[_closeField!] as! Double) - - return entry - } - - public override func calcMinMax(start start: Int, end: Int) - { - let yValCount = self.entryCount - - if yValCount == 0 - { - return - } - - var endValue : Int - - if end == 0 || end >= yValCount - { - endValue = yValCount - 1 - } - else - { - endValue = end - } - - ensureCache(start: start, end: endValue) - - if _cache.count == 0 - { - return - } - - _lastStart = start - _lastEnd = end - - _yMin = DBL_MAX - _yMax = -DBL_MAX - - for i in start.stride(through: endValue, by: 1) - { - let e = _cache[i - _cacheFirst] as! CandleChartDataEntry - - if (e.low < _yMin) - { - _yMin = e.low - } - - if (e.high > _yMax) - { - _yMax = e.high - } - } - } - - // MARK: - Styling functions and accessors - - /// the space between the candle entries - /// - /// **default**: 0.1 (10%) - private var _barSpace = CGFloat(0.1) - - /// the space that is left out on the left and right side of each candle, - /// **default**: 0.1 (10%), max 0.45, min 0.0 - public var barSpace: CGFloat - { - set - { - if (newValue < 0.0) - { - _barSpace = 0.0 - } - else if (newValue > 0.45) - { - _barSpace = 0.45 - } - else - { - _barSpace = newValue - } - } - get - { - return _barSpace - } - } - - /// should the candle bars show? - /// when false, only "ticks" will show - /// - /// **default**: true - public var showCandleBar: Bool = true - - /// the width of the candle-shadow-line in pixels. - /// - /// **default**: 3.0 - public var shadowWidth = CGFloat(1.5) - - /// the color of the shadow line - public var shadowColor: NSUIColor? - - /// use candle color for the shadow - public var shadowColorSameAsCandle = false - - /// Is the shadow color same as the candle color? - public var isShadowColorSameAsCandle: Bool { return shadowColorSameAsCandle } - - /// color for open == close - public var neutralColor: NSUIColor? - - /// color for open > close - public var increasingColor: NSUIColor? - - /// color for open < close - public var decreasingColor: NSUIColor? - - /// Are increasing values drawn as filled? - /// increasing candlesticks are traditionally hollow - public var increasingFilled = false - - /// Are increasing values drawn as filled? - public var isIncreasingFilled: Bool { return increasingFilled } - - /// Are decreasing values drawn as filled? - /// descreasing candlesticks are traditionally filled - public var decreasingFilled = true - - /// Are decreasing values drawn as filled? - public var isDecreasingFilled: Bool { return decreasingFilled } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineData.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmLineData.swift deleted file mode 100644 index 84e523b2..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineData.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RealmLineData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmLineData: LineChartData -{ - public init(results: RLMResults?, xValueField: String, dataSets: [IChartDataSet]?) - { - if results == nil - { - super.init(xVals: [String](), dataSets: dataSets) - } - else - { - super.init(xVals: RealmChartUtils.toXVals(results: results!, xValueField: xValueField), dataSets: dataSets) - } - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmLineDataSet.swift deleted file mode 100644 index 89624a4e..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineDataSet.swift +++ /dev/null @@ -1,197 +0,0 @@ -// -// RealmLineDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmLineDataSet: RealmLineRadarDataSet, ILineChartDataSet -{ - public override func initialize() - { - circleColors.append(NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - } - - // MARK: - Data functions and accessors - - // MARK: - Styling functions and accessors - - /// The drawing mode for this line dataset - /// - /// **default**: Linear - public var mode: LineChartDataSet.Mode = LineChartDataSet.Mode.Linear - - private var _cubicIntensity = CGFloat(0.2) - - /// Intensity for cubic lines (min = 0.05, max = 1) - /// - /// **default**: 0.2 - public var cubicIntensity: CGFloat - { - get - { - return _cubicIntensity - } - set - { - _cubicIntensity = newValue - if (_cubicIntensity > 1.0) - { - _cubicIntensity = 1.0 - } - if (_cubicIntensity < 0.05) - { - _cubicIntensity = 0.05 - } - } - } - - @available(*, deprecated=1.0, message="Use `mode` instead.") - public var drawCubicEnabled: Bool - { - get - { - return mode == .CubicBezier - } - set - { - mode = newValue ? LineChartDataSet.Mode.CubicBezier : LineChartDataSet.Mode.Linear - } - } - - @available(*, deprecated=1.0, message="Use `mode` instead.") - public var isDrawCubicEnabled: Bool { return drawCubicEnabled } - - @available(*, deprecated=1.0, message="Use `mode` instead.") - public var drawSteppedEnabled: Bool - { - get - { - return mode == .Stepped - } - set - { - mode = newValue ? LineChartDataSet.Mode.Stepped : LineChartDataSet.Mode.Linear - } - } - - @available(*, deprecated=1.0, message="Use `mode` instead.") - public var isDrawSteppedEnabled: Bool { return drawSteppedEnabled } - - /// The radius of the drawn circles. - public var circleRadius = CGFloat(8.0) - - /// The hole radius of the drawn circles - public var circleHoleRadius = CGFloat(4.0) - - public var circleColors = [NSUIColor]() - - /// - returns: the color at the given index of the DataSet's circle-color array. - /// Performs a IndexOutOfBounds check by modulus. - public func getCircleColor(index: Int) -> NSUIColor? - { - let size = circleColors.count - let index = index % size - if (index >= size) - { - return nil - } - return circleColors[index] - } - - /// Sets the one and ONLY color that should be used for this DataSet. - /// Internally, this recreates the colors array and adds the specified color. - public func setCircleColor(color: NSUIColor) - { - circleColors.removeAll(keepCapacity: false) - circleColors.append(color) - } - - /// Resets the circle-colors array and creates a new one - public func resetCircleColors(index: Int) - { - circleColors.removeAll(keepCapacity: false) - } - - /// If true, drawing circles is enabled - public var drawCirclesEnabled = true - - /// - returns: true if drawing circles for this DataSet is enabled, false if not - public var isDrawCirclesEnabled: Bool { return drawCirclesEnabled } - - /// The color of the inner circle (the circle-hole). - public var circleHoleColor: NSUIColor? = NSUIColor.whiteColor() - - /// True if drawing circles for this DataSet is enabled, false if not - public var drawCircleHoleEnabled = true - - /// - returns: true if drawing the circle-holes is enabled, false if not. - public var isDrawCircleHoleEnabled: Bool { return drawCircleHoleEnabled } - - /// This is how much (in pixels) into the dash pattern are we starting from. - public var lineDashPhase = CGFloat(0.0) - - /// This is the actual dash pattern. - /// I.e. [2, 3] will paint [-- -- ] - /// [1, 3, 4, 2] will paint [- ---- - ---- ] - public var lineDashLengths: [CGFloat]? - - /// Line cap type, default is CGLineCap.Butt - public var lineCapType = CGLineCap.Butt - - /// formatter for customizing the position of the fill-line - private var _fillFormatter: ChartFillFormatter = ChartDefaultFillFormatter() - - /// Sets a custom FillFormatter to the chart that handles the position of the filled-line for each DataSet. Set this to null to use the default logic. - public var fillFormatter: ChartFillFormatter? - { - get - { - return _fillFormatter - } - set - { - if newValue == nil - { - _fillFormatter = ChartDefaultFillFormatter() - } - else - { - _fillFormatter = newValue! - } - } - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmLineDataSet - copy.circleRadius = circleRadius - copy.circleHoleRadius = circleHoleRadius - copy.circleColors = circleColors - copy.circleRadius = circleRadius - copy.cubicIntensity = cubicIntensity - copy.lineDashPhase = lineDashPhase - copy.lineDashLengths = lineDashLengths - copy.lineCapType = lineCapType - copy.drawCirclesEnabled = drawCirclesEnabled - copy.drawCircleHoleEnabled = drawCircleHoleEnabled - copy.mode = mode - return copy - } - -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineRadarDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmLineRadarDataSet.swift deleted file mode 100644 index 8bd80092..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineRadarDataSet.swift +++ /dev/null @@ -1,96 +0,0 @@ -// -// RealmLineRadarDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import CoreGraphics - - -import Realm -import Realm.Dynamic - -public class RealmLineRadarDataSet: RealmLineScatterCandleRadarDataSet, ILineRadarChartDataSet -{ - // MARK: - Data functions and accessors - - // MARK: - Styling functions and accessors - - /// The color that is used for filling the line surface area. - private var _fillColor = NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0) - - /// The color that is used for filling the line surface area. - public var fillColor: NSUIColor - { - get { return _fillColor } - set - { - _fillColor = newValue - fill = nil - } - } - - /// The object that is used for filling the area below the line. - /// **default**: nil - public var fill: ChartFill? - - /// The alpha value that is used for filling the line surface, - /// **default**: 0.33 - public var fillAlpha = CGFloat(0.33) - - private var _lineWidth = CGFloat(1.0) - - /// line width of the chart (min = 0.2, max = 10) - /// - /// **default**: 1 - public var lineWidth: CGFloat - { - get - { - return _lineWidth - } - set - { - if (newValue < 0.2) - { - _lineWidth = 0.2 - } - else if (newValue > 10.0) - { - _lineWidth = 10.0 - } - else - { - _lineWidth = newValue - } - } - } - - public var drawFilledEnabled = false - - public var isDrawFilledEnabled: Bool - { - return drawFilledEnabled - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmLineRadarDataSet - copy.fillColor = fillColor - copy._lineWidth = _lineWidth - copy.drawFilledEnabled = drawFilledEnabled - return copy - } - -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineScatterCandleRadarDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmLineScatterCandleRadarDataSet.swift deleted file mode 100644 index 8a08e950..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmLineScatterCandleRadarDataSet.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// RealmLineScatterCandleRadarDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmLineScatterCandleRadarDataSet: RealmBarLineScatterCandleBubbleDataSet, ILineScatterCandleRadarChartDataSet -{ - // MARK: - Data functions and accessors - - // MARK: - Styling functions and accessors - - /// Enables / disables the horizontal highlight-indicator. If disabled, the indicator is not drawn. - public var drawHorizontalHighlightIndicatorEnabled = true - - /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. - public var drawVerticalHighlightIndicatorEnabled = true - - /// - returns: true if horizontal highlight indicator lines are enabled (drawn) - public var isHorizontalHighlightIndicatorEnabled: Bool { return drawHorizontalHighlightIndicatorEnabled } - - /// - returns: true if vertical highlight indicator lines are enabled (drawn) - public var isVerticalHighlightIndicatorEnabled: Bool { return drawVerticalHighlightIndicatorEnabled } - - /// Enables / disables both vertical and horizontal highlight-indicators. - /// :param: enabled - public func setDrawHighlightIndicators(enabled: Bool) - { - drawHorizontalHighlightIndicatorEnabled = enabled - drawVerticalHighlightIndicatorEnabled = enabled - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmLineScatterCandleRadarDataSet - copy.drawHorizontalHighlightIndicatorEnabled = drawHorizontalHighlightIndicatorEnabled - copy.drawVerticalHighlightIndicatorEnabled = drawVerticalHighlightIndicatorEnabled - return copy - } - -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmPieData.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmPieData.swift deleted file mode 100644 index 5993f377..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmPieData.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RealmPieData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmPieData: PieChartData -{ - public init(results: RLMResults?, xValueField: String, dataSets: [IChartDataSet]?) - { - if results == nil - { - super.init(xVals: [String](), dataSets: dataSets) - } - else - { - super.init(xVals: RealmChartUtils.toXVals(results: results!, xValueField: xValueField), dataSets: dataSets) - } - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmPieDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmPieDataSet.swift deleted file mode 100644 index 9a7c8549..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmPieDataSet.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// RealmPieDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import CoreGraphics - - -import Realm -import Realm.Dynamic - -public class RealmPieDataSet: RealmBaseDataSet, IPieChartDataSet -{ - public override func initialize() - { - self.valueTextColor = NSUIColor.whiteColor() - self.valueFont = NSUIFont.systemFontOfSize(13.0) - } - - // MARK: - Styling functions and accessors - - private var _sliceSpace = CGFloat(0.0) - - /// the space in pixels between the pie-slices - /// **default**: 0 - /// **maximum**: 20 - public var sliceSpace: CGFloat - { - get - { - return _sliceSpace - } - set - { - var space = newValue - if (space > 20.0) - { - space = 20.0 - } - if (space < 0.0) - { - space = 0.0 - } - _sliceSpace = space - } - } - - /// indicates the selection distance of a pie slice - public var selectionShift = CGFloat(18.0) - - public var xValuePosition: PieChartDataSet.ValuePosition = .InsideSlice - public var yValuePosition: PieChartDataSet.ValuePosition = .InsideSlice - - /// When valuePosition is OutsideSlice, indicates line color - public var valueLineColor: NSUIColor? = NSUIColor.blackColor() - - /// When valuePosition is OutsideSlice, indicates line width - public var valueLineWidth: CGFloat = 1.0 - - /// When valuePosition is OutsideSlice, indicates offset as percentage out of the slice size - public var valueLinePart1OffsetPercentage: CGFloat = 0.75 - - /// When valuePosition is OutsideSlice, indicates length of first half of the line - public var valueLinePart1Length: CGFloat = 0.3 - - /// When valuePosition is OutsideSlice, indicates length of second half of the line - public var valueLinePart2Length: CGFloat = 0.4 - - /// When valuePosition is OutsideSlice, this allows variable line length - public var valueLineVariableLength: Bool = true - - // MARK: - NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmPieDataSet - copy._sliceSpace = _sliceSpace - copy.selectionShift = selectionShift - return copy - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmRadarData.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmRadarData.swift deleted file mode 100644 index 367d4da8..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmRadarData.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RealmRadarData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmRadarData: RadarChartData -{ - public init(results: RLMResults?, xValueField: String, dataSets: [IChartDataSet]?) - { - if results == nil - { - super.init(xVals: [String](), dataSets: dataSets) - } - else - { - super.init(xVals: RealmChartUtils.toXVals(results: results!, xValueField: xValueField), dataSets: dataSets) - } - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmRadarDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmRadarDataSet.swift deleted file mode 100644 index f37ce134..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmRadarDataSet.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// RealmRadarDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import CoreGraphics - - -import Realm -import Realm.Dynamic - -public class RealmRadarDataSet: RealmLineRadarDataSet, IRadarChartDataSet -{ - public override func initialize() - { - self.valueFont = NSUIFont.systemFontOfSize(13.0) - } - - // MARK: - Data functions and accessors - - // MARK: - Styling functions and accessors - - /// flag indicating whether highlight circle should be drawn or not - /// **default**: false - public var drawHighlightCircleEnabled: Bool = false - - /// - returns: true if highlight circle should be drawn, false if not - public var isDrawHighlightCircleEnabled: Bool { return drawHighlightCircleEnabled } - - public var highlightCircleFillColor: NSUIColor? = NSUIColor.whiteColor() - - /// The stroke color for highlight circle. - /// If `nil`, the color of the dataset is taken. - public var highlightCircleStrokeColor: NSUIColor? - - public var highlightCircleStrokeAlpha: CGFloat = 0.3 - - public var highlightCircleInnerRadius: CGFloat = 3.0 - - public var highlightCircleOuterRadius: CGFloat = 4.0 - - public var highlightCircleStrokeWidth: CGFloat = 2.0 -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmScatterData.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmScatterData.swift deleted file mode 100644 index c4b0a64e..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmScatterData.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RealmScatterData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation - - -import Realm -import Realm.Dynamic - -public class RealmScatterData: ScatterChartData -{ - public init(results: RLMResults?, xValueField: String, dataSets: [IChartDataSet]?) - { - if results == nil - { - super.init(xVals: [String](), dataSets: dataSets) - } - else - { - super.init(xVals: RealmChartUtils.toXVals(results: results!, xValueField: xValueField), dataSets: dataSets) - } - } -} diff --git a/Pods/Charts/ChartsRealm/Classes/Data/RealmScatterDataSet.swift b/Pods/Charts/ChartsRealm/Classes/Data/RealmScatterDataSet.swift deleted file mode 100644 index 27591b7f..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Data/RealmScatterDataSet.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// RealmScatterDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import CoreGraphics - - -import Realm -import Realm.Dynamic - -public class RealmScatterDataSet: RealmLineScatterCandleRadarDataSet, IScatterChartDataSet -{ - // The size the scatter shape will have - public var scatterShapeSize = CGFloat(15.0) - - // The type of shape that is set to be drawn where the values are at - // **default**: .Square - public var scatterShape = ScatterChartDataSet.Shape.Square - - // The radius of the hole in the shape (applies to Square, Circle and Triangle) - // **default**: 0.0 - public var scatterShapeHoleRadius: CGFloat = 0.0 - - // Color for the hole in the shape. Setting to `nil` will behave as transparent. - // **default**: nil - public var scatterShapeHoleColor: NSUIColor? = nil - - // Custom path object to draw where the values are at. - // This is used when shape is set to Custom. - public var customScatterShape: CGPath? - - public override func initialize() - { - - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! RealmScatterDataSet - copy.scatterShapeSize = scatterShapeSize - copy.scatterShape = scatterShape - copy.customScatterShape = customScatterShape - return copy - } - -} diff --git a/Pods/Charts/ChartsRealm/Classes/Utils/RealmChartUtils.swift b/Pods/Charts/ChartsRealm/Classes/Utils/RealmChartUtils.swift deleted file mode 100644 index 817c910a..00000000 --- a/Pods/Charts/ChartsRealm/Classes/Utils/RealmChartUtils.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// RealmChartUtils.swift -// Charts -// -// Created by Daniel Cohen Gindi on 1/17/16. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import Realm - -public class RealmChartUtils: NSObject -{ - /// Transforms the given Realm-ResultSet into an xValue array, using the specified xValueField - public static func toXVals(results results: RLMResults, xValueField: String) -> [String] - { - let addedValues = NSMutableSet() - var xVals = [String]() - - for object in results - { - let xVal = (object as! RLMObject)[xValueField] as! String! - if !addedValues.containsObject(xVal) - { - addedValues.addObject(xVal) - xVals.append(xVal) - } - } - - return xVals - } -} - -extension RLMResults: SequenceType -{ - public func generate() -> NSFastGenerator - { - return NSFastGenerator(self) - } -} - -extension RLMArray: SequenceType -{ - public func generate() -> NSFastGenerator - { - return NSFastGenerator(self) - } -} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 2d8216a6..761a00e8 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -27,9 +27,6 @@ PODS: - Bugsnag/no-arc (4.1.0) - CGFloatType (1.3.1) - Charts/Core (2.2.5) - - Charts/Realm (2.2.5): - - Charts/Core - - RealmSwift (~> 0.97) - CocoaLumberjack (2.0.3): - CocoaLumberjack/Default (= 2.0.3) - CocoaLumberjack/Extensions (= 2.0.3) @@ -51,11 +48,6 @@ PODS: - NAPickerView (0.0.1) - Nocilla (0.11.0) - NSJSONSerialization-NSNullRemoval (1.0.1) - - Realm (0.103.2): - - Realm/Headers (= 0.103.2) - - Realm/Headers (0.103.2) - - RealmSwift (0.103.2): - - Realm (= 0.103.2) - SenseKit (0.1.0): - SenseKit/Analytics (= 0.1.0) - SenseKit/API (= 0.1.0) @@ -99,7 +91,7 @@ DEPENDENCIES: - AttributedMarkdown (from `git@github.com:hello/AttributedMarkdown.git`) - Bugsnag (~> 4.1.0) - CGFloatType (~> 1.3.1) - - Charts/Realm (= 2.2.5) + - Charts/Core (= 2.2.5) - FBSDKCoreKit (~> 4.11.0) - FBSDKLoginKit (~> 4.11.0) - iOSDFULibrary (from `git@github.com:jimmymlu/IOS-Pods-DFU-Library.git`, branch `method-name-compatibility`) @@ -154,7 +146,7 @@ CHECKOUT OPTIONS: :commit: 0451b5e67dec46b8bc48fcad63d9f844cae1bf19 :git: git@github.com:hello/NAPickerView.git SenseKit: - :commit: 8a3fbfc31af2088fe1ce06338c1154846ee41475 + :commit: b3c69b658337fc4bee76e98193e2637dd36936dc :git: git@github.com:hello/SenseKit.git SHSProtoBuf: :commit: 86b2e176097f76d130c858164eca42e15b779073 @@ -188,8 +180,6 @@ SPEC CHECKSUMS: NAPickerView: cac3bd6f38e36374e53309335e28f4fc9cd93c94 Nocilla: 7af7a386071150cc8aa5da4da97d060f049dd61c NSJSONSerialization-NSNullRemoval: 4c50d948b7805807ea8ce690d48e05ee679ef5b7 - Realm: 448f0416079fe5b0ed947e7d86f3c4e1c75826cb - RealmSwift: 8a45cc8f02dfac093b72a3b5a01d567e27e15891 SenseKit: c061883ef8ed2c6781fee3af2df870172e6303c0 SHSProtoBuf: 89a179d27f35dea460139a630e8ac22378eabbe3 SORelativeDateTransformer: 307489386df4697780902bc16e99881d69a629b3 @@ -199,6 +189,6 @@ SPEC CHECKSUMS: ZendeskSDK: 45b7a2812a04c3c5c2510aeeeded5818e6e705a5 Zip: 670419a5ba9faaf5f24ed3650c4c38b4136e996b -PODFILE CHECKSUM: 7d5242e2506ba12f31affb1fcd9b590909277712 +PODFILE CHECKSUM: e1a4174b5e9e2bfea9f57d7776b0051a90b12339 COCOAPODS: 1.0.0 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 704d824a..47e92ed9 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1380 +7,1226 @@ objects = { /* Begin PBXBuildFile section */ - 002E0AC336718596E8848EC0084885ED /* LGService.m in Sources */ = {isa = PBXBuildFile; fileRef = ADB4EBD1C58434E6333C4324E900CC11 /* LGService.m */; }; - 0059AE29FF180F27AE922B530223E405 /* KWChangeMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D4F1F90A5CDF6DA38E655C5343D6D1 /* KWChangeMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 007FE68427E20960F94A7CC1943F69DB /* SVWebViewControllerBack@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E8C24778164233CB3E4B5642BA6F3CF7 /* SVWebViewControllerBack@2x.png */; }; - 008D783405F8AEB7F6FBFFCFE31C7CDD /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 360215B27D8ACD8FC6F32AE1CDE860E8 /* PieRadarChartViewBase.swift */; }; - 00E3F76540AE936EDBF3EB0F657D032C /* ProtocolBuffers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C4B7CADF45E3F6BCDDD1DAE47BAE034 /* ProtocolBuffers.framework */; }; - 0184685B7986816E2A6BEA9F98EC72AB /* SEGIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = FCEF8613DA38B659CEEC235E69F35B99 /* SEGIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01AFB4F259B9A3D4CBAE5EE37521532D /* SORelativeDateTransformer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B7EE9EF973C8EFB261C9D37135660D85 /* SORelativeDateTransformer-dummy.m */; }; - 01C7EF854FED721AA2ECED1304DC88D3 /* DFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B539DA027D44B349C7B05CAA534A325 /* DFUServiceDelegate.swift */; }; - 01E0781CE0ADD3F03E1FA474103F2E3D /* BLE.h in Headers */ = {isa = PBXBuildFile; fileRef = 34C4653CF80652A9EE0E0D943D4AFC74 /* BLE.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0268ACF71BEA21D7D8845A2EFF73E089 /* KWMessageTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = FDAFEE7C119494686BA4F1BCA53175F3 /* KWMessageTracker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 029CF81FE56C04EE808717B1B31B9E18 /* KSCrashReportFields.h in Headers */ = {isa = PBXBuildFile; fileRef = 6474085461E7ED2A41152B5AE3C3F6FC /* KSCrashReportFields.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02D4D70EA714AF03579DD2D98874694E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 03120D323FC1C57E791105D0A721A821 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EEBD9F1687B0620EC7BB066E3BDBD2A /* BarChartView.swift */; }; - 04086616F173579F594AE9172CFDAB04 /* SENTimelineSegment.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EBC339B21403BB6A98F3D743D1E288F /* SENTimelineSegment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0426CDA7716C24FF163FA9F8F8A22A67 /* NSInvocation+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A1AA55BA7D4E8D01106AE351F059026C /* NSInvocation+OCMAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04534596D9A2C203E614FC3A98AAEA4B /* Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2180DA463BB8AB24453FE6E9CC6DB2 /* Double.swift */; }; - 0489663081FDDD2B13BA8645DF17B88A /* KWCaptureSpy.m in Sources */ = {isa = PBXBuildFile; fileRef = E74716B643BEA5FA2D8EC5CCB78B62C4 /* KWCaptureSpy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0489E98427555162AE35170D6F2DEA32 /* RLMArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F908176A50B46CA9C74FAAFF76E0FF4 /* RLMArray.h */; }; - 04B2FABEDF474C18561E6960C6C6D98F /* LGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C565E593EEF0089FFA3636DA0BE986 /* LGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 051D53CA2F5656E2D8C826F7A9CF1BC5 /* KSCrashSentry_Signal.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BE3000B2EFC03130811B011E36D2291 /* KSCrashSentry_Signal.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 056D59B1534B524062887E6459E08476 /* NSInvocation+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5315385AB126C983262A4C35B649DA0D /* NSInvocation+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 05DAEB917E5EB66C491B159D027DA1FC /* RingBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = FE970C0616393EDEE93841269AA7B258 /* RingBuffer.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 05E1F318A5B49D224539C6A697B85CB9 /* brg_types.h in Headers */ = {isa = PBXBuildFile; fileRef = F29B4CC36C243159F8861938B4B42120 /* brg_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05FE57F7E354093077A28AA4F55BDB70 /* BFAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 41438E2D786CC1426B9E9D9551117362 /* BFAppLink.m */; }; - 06447CCB961B3D8A16AA0A192F6D2E86 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74D70D31A0FF212F8D9D641720DBD63A /* ChartAnimationEasing.swift */; }; - 0663A7992534811B537011822E71CA7F /* RLMListBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = EF847FE61448E5B0851232613E122D59 /* RLMListBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 067B5F6B11960E2554A01D69B3FFE310 /* NSData+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 90825536944A5CED7B9E3877BAB8D344 /* NSData+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 067EF2D3BF15B548256EFFCF1C0F4311 /* KWMatchers.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BF9ACB2AE022D16234D321A2FACA6B3 /* KWMatchers.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 069F7F6BEDB81850D98069D45F2DB718 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8166A9D1D696B47D30A50D0E1BA35872 /* BubbleChartRenderer.swift */; }; - 06C5D0030A7912F65E4069569401B325 /* RLMSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2D7023EBE773E75FE5A2C06A22C166A7 /* RLMSchema.h */; }; - 06CBC64DEB3FD0DA7E133B630910149B /* SENTimelineMetric.h in Headers */ = {isa = PBXBuildFile; fileRef = 520F57FF107102F2A5AA9F070A7964CC /* SENTimelineMetric.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0717CBE54E12019054FD064386581D7A /* SVWebViewControllerActivitySafari.h in Headers */ = {isa = PBXBuildFile; fileRef = 78F60CA651949BE629E319BE82D49441 /* SVWebViewControllerActivitySafari.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 071FD8C0542C066C7D55ABF6F134F1BB /* RLMObjectSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5212E1D8EA82E7F4B71011A0712DD9 /* RLMObjectSchema.h */; }; - 0765348B12A3DC16AEB7D26CB2FF902E /* KWAfterEachNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF687EEB9DDA09F954D0D375CC584FA /* KWAfterEachNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 07CD518C07ABB447EB6AB5BFB750A4C4 /* KWBeforeEachNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5E75B1C4DB4709B6B72E65354BB5CB /* KWBeforeEachNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07D5555611CB57BED345E40487AE7D62 /* FBSDKLogo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0161F67DC2844FD7838D57AE889DBBFC /* FBSDKLogo.m */; }; - 07F17729A8A0D10A2135308CA686354B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 08071E47368F2A474E720B2150285251 /* KWExampleSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE755C4D2B948424407327B2D2526BB /* KWExampleSuite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08101612FDCD0CA8DC2BB05B7F8EE82D /* CodedInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F7C5AC344038EDF3A74044F893F804DA /* CodedInputStream.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 086507B7FF3C7B4E1593FFDCA110F9CD /* FBSDKGraphRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 969D9B15E2FC9C49D3C86CE6895D497F /* FBSDKGraphRequest.m */; }; - 086C48AB89C319451AC4A8B6FFB0275F /* RLMArrayLinkView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7796091DF6A11C61913B960E3A3D6F6B /* RLMArrayLinkView.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 087D6B3252BE9E8FE73882D8F9674967 /* KWItNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F004F52877876F1A61FCEF93560ABE60 /* KWItNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 089C2B57C74B33C05B9669C971157BCD /* MSDynamicsDrawerStyler.h in Headers */ = {isa = PBXBuildFile; fileRef = 532DFAE1DAAB438F6721626EDFFAEA37 /* MSDynamicsDrawerStyler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08A4BF560668B42F515D53C8D7A79300 /* NSData+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = 16FC710F1F548B45252783CA16EB5C9E /* NSData+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 08BB01205A70ACD5F0008B273528B2A0 /* KWMock.h in Headers */ = {isa = PBXBuildFile; fileRef = EDCFAF3040C2DD96AAED36B2E26A803B /* KWMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 091F4A9EAD206F8BD7E180035ED6925F /* PBArray.h in Headers */ = {isa = PBXBuildFile; fileRef = ED4855FC3015D95F114B2A3760FBD309 /* PBArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0982F0B9A83085AF0E8FD1935191CA79 /* SENAppUnreadStats.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B5C24B02B667EF57B1226157D65B56 /* SENAppUnreadStats.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 098A52066D8D62C709B83BC213145271 /* LSHTTPStubURLProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A0FCF518BE46B622A82AB43330FF47 /* LSHTTPStubURLProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09EDE0F0D2057FEC468B5D6B51A85C79 /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EE858643009844560E18D026FE4043 /* DDLog.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 09FA4EDEC2C696EDCAE4195382FAEF89 /* NSURLRequest+DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 69A364A0200A2D14090DAB5368826363 /* NSURLRequest+DSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0A05B6B605F44B9623E6DBC0843B47D0 /* RealmLineScatterCandleRadarDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE13E02126DB15BB9DE464A31A2D2FA2 /* RealmLineScatterCandleRadarDataSet.swift */; }; - 0A3E453D9B07C87A2525097F2EC0973D /* RealmCollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCAE0DF73FD39C1E33EE1CFCBE756C24 /* RealmCollectionType.swift */; }; - 0A463FE893495A0F985027D07E1C136D /* RLMObjectBase_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 34A220D7A86A2205A220F38D442D7C14 /* RLMObjectBase_Dynamic.h */; }; - 0A502D4FAE1DA06116FC2DDB0B2EF24D /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C98FBE189C77CD73282BF1BB7AD897 /* Realm.framework */; }; - 0AC2B93730BCECCD1564EBD02386624A /* KWValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0626363125CDD5D9D261AEB8583BA659 /* KWValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AC81EFB916F3BCAF1B7C51621AE0946 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62606A139E993335CF0244A75E4EC9EF /* Migration.swift */; }; - 0B13F2AC3F72EB709DCA9DBC64409489 /* SENAPISensor.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D66EC4E15C120723D7D405E44F8EC1 /* SENAPISensor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B164A96157A37EFF3852ECAF48AB600 /* SENAPIPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = A71CABA464BFD4C3AFDDA6634B2843EE /* SENAPIPreferences.m */; }; - 0B29E73D955B82F36B7A0B18541B0909 /* FBSDKURLOpening.h in Headers */ = {isa = PBXBuildFile; fileRef = A33BE84F045A4545AF199098F5603094 /* FBSDKURLOpening.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B3A700337C244F8F39995883FBD18EE /* fileenc.c in Sources */ = {isa = PBXBuildFile; fileRef = E771B10D73A6F5AE6CEA426921272D8B /* fileenc.c */; }; - 0BF2A5BFE2D7EEDF95FEAFF4172EFEAA /* Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 52BAE834B2409B01110EB6C7D136C07E /* Model.m */; }; - 0C9224034D58256946B3FB0506FB6658 /* KSCrashCallCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = 67F0CCB02DE8228ACACBFCF514176539 /* KSCrashCallCompletion.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0CE13EB2BD4A6BDB0970CF2504EEC159 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 0D09C889A9E22F4DBFE217110E6600D7 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA07824339A6A84D8F4C1DB85E88CCB6 /* CandleChartData.swift */; }; - 0D59FA7A7C11A3F1C7887A5B5DEDAB6C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 0E1341755AA032C0321422978BDC5E5C /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C9FBAC712B92DD64B902DC636670893A /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E314324FC03FD2E1C4B9035C1C096E0 /* KWExampleSuiteBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B6FECDCE58BCACC63263B1DDF19DD7A /* KWExampleSuiteBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E5A686675F95879DCBDABAEEC3F1379 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C15B40389E9A71548B62106C4294EED6 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0ECC21BE652C01E221691EEE0E633672 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5118EEBDA728C28FF4004BC58E86A1A7 /* ja.lproj */; }; - 0EE8E235DC588CEFA7ED8324D377F30E /* LSNocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F9D4AFC996EBB5E22A2908EF9000901 /* LSNocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EF0FA3848035F3100357D0D4D3FE414 /* BugsnagSink.m in Sources */ = {isa = PBXBuildFile; fileRef = F981202C5A645974FC60252205341F2F /* BugsnagSink.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0EF4141DD5C396BF594EAF4A43D82972 /* NAPickerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE7AC9AABCA6C6F5A927CB39CAB193C /* NAPickerCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EFA7B318C2BBB8D934D2A9569AB3993 /* SEGBluetooth.m in Sources */ = {isa = PBXBuildFile; fileRef = 08339E85C1D080E7B0116701EBF0EAED /* SEGBluetooth.m */; }; - 0F2B855318FAC1F6F8E1E090AC68CB7C /* SENAPIAlarms.h in Headers */ = {isa = PBXBuildFile; fileRef = 24CBB6B4CB79C7920FD6F3483A20EF26 /* SENAPIAlarms.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F5B16CC63F7C9FF267E6F606245EADD /* FBSDKLoginManagerLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DD2AAEB6DA7B7520B291D70302E7D140 /* FBSDKLoginManagerLogger.m */; }; - 0F92944D13BE9B6C63BF188894DAF7EF /* RLMAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA6E1AC6422CB894FD1D5D3A151727B /* RLMAccessor.h */; }; - 0FEFE1125F648AB07DE2EB068E4C5D9B /* Zip-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 786DBB3D1F79F530BDF99E5341613264 /* Zip-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1055297B29994080537ADD0403F82DFC /* collection_change_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80ECC86A32A116B365ACD72F5D72C920 /* collection_change_builder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 109C5A98B6A40962E14772E89D765B36 /* KWStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D6BA5B9E35F33E11A90F5B214869F81 /* KWStub.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10A11A792AE1B83F5B03E42AC796C098 /* FBSDKAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = D158C97FFD48A08C7426663F2FE20A96 /* FBSDKAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10B9315906F223D83E86EB9D5A67E53C /* SENSleepSoundDurations.m in Sources */ = {isa = PBXBuildFile; fileRef = A1CF3AA9F41807F1BE2138FE326BFAF7 /* SENSleepSoundDurations.m */; }; - 10BFEFFE72C96213CC63B7B89005EBC2 /* SENConditionRange.m in Sources */ = {isa = PBXBuildFile; fileRef = EBCFAAD9305C48E71BA401CCE97EDF47 /* SENConditionRange.m */; }; - 10DAA3F2F1356F6DF741C13C9E3DA50D /* KWStringContainsMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 2430F14AF4E02491DB99ECEF0EB9D7B8 /* KWStringContainsMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10DC91BFF735D35C008266EBAF1A967F /* KSMach_x86_32.c in Sources */ = {isa = PBXBuildFile; fileRef = D81F931D893AB2A61601A60D9A6CA848 /* KSMach_x86_32.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 11AFD39461933FAED78BBB9333EB22D9 /* Descriptor.pb.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B378F5B3A6A21072BCE37454600DA6A /* Descriptor.pb.m */; }; - 11BCEFF665B7F78174DE01189141AD29 /* KWHaveValueMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E79ECBA479AFE37BDD2F49E161B9EA9 /* KWHaveValueMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 11F24F645E4E1AEE7C971B39338B0644 /* CBUUID+StringExtraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B97743BBDE3BB4DB6073F3CDC1FA52A /* CBUUID+StringExtraction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11FF238E74017E7AE529ADEE50DF4ECD /* RLMMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 7616EFB9F5F1639402CC9AC0C5E353CC /* RLMMigration.h */; }; - 12494B0651A0CA8BC0D596026B2EE8D4 /* SENAPIShare.h in Headers */ = {isa = PBXBuildFile; fileRef = 27AF0EAF2CAFBCCAB587A437853FF1E5 /* SENAPIShare.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 127AD881F385C8A0AF6859C3E5AEFDB3 /* FBSDKAccessTokenCacheV4.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5A27CE556AEA44B4EE4D1B4672AE5C /* FBSDKAccessTokenCacheV4.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 127EEED77914399C504037970321E467 /* FBSDKInternalUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = B4BA7242D55F0FC06C212275CAFB3827 /* FBSDKInternalUtility.m */; }; - 128EE63C425AD312E4C59BE1D9BFCEDB /* FBSDKCoreKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 20A01CDFA0AFBC89ECBC46D1EEB2BB83 /* FBSDKCoreKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12FE918C45DD76F6D5078B5FA5722EFA /* LSDataMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = CE40A5CC23FEB7D99E1DC5874D90404C /* LSDataMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 130228D79720B8D816BC8DFFCA7E08FD /* SEGAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 926C92405677E6A568F20B151D672F0A /* SEGAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 130527AAE8765BAD009310514630F135 /* SENPeripheralManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A43F76C853D0AA1BA8528D2F2939C9A4 /* SENPeripheralManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 131270A424C7C2673118C6C85CF28FE7 /* DDAbstractDatabaseLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DF572F72B15DEDEB397E66DFFC329F6 /* DDAbstractDatabaseLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 13270BD6A58F6E309AE9811B0835224E /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C98FBE189C77CD73282BF1BB7AD897 /* Realm.framework */; }; - 139654EA75A7AFC1613178537DC97860 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 14065C68774A9693110C02E57368EAFE /* KWBeforeEachNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 2426136105757DBE499DDB795FF756F2 /* KWBeforeEachNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 146D9EEEF5186E435B02B8E247C7224D /* SENCondition.h in Headers */ = {isa = PBXBuildFile; fileRef = 96797E2BDE8A29F38585529A09CC31F5 /* SENCondition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14AE92FBC9843F67965899EBD0EAA282 /* KWCaptureSpy.h in Headers */ = {isa = PBXBuildFile; fileRef = 78D03B60D8BE2DCD60B4D9DBF222F1BD /* KWCaptureSpy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14B007213945EEF58C5A28DC5CBB0A2A /* SEGAnalyticsRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B46CB5025509B41C774FBCE0C501D108 /* SEGAnalyticsRequest.m */; }; - 14E413D38C130EA26661A34531CE7AC5 /* FXKeychain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C5D232433B8193471CA138255302B9A /* FXKeychain.framework */; }; - 14F15E522DAAC5C15DD287C92F9F4DC0 /* SVWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B2AB40083C0C529D770B6144B94BCFA /* SVWebViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14F92979380FFB1F7C4FF29BF307F9BF /* FBSDKSystemAccountStoreAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AA2B7AC1281E6558D7E0CCB248C122E /* FBSDKSystemAccountStoreAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1542D18C7CEA571B88BB5286E6A3208E /* SENAPISupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D5CD2562B76BBBF989C2ABA8E5DDEA6 /* SENAPISupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 15504633195ED8B3E2AC5290BC70BE39 /* FBSDKPaymentObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 73F5E6099D39E4AE83E60F568E5C8AE3 /* FBSDKPaymentObserver.m */; }; - 15B597127CC3F017A4079D1DE5949097 /* SENAPIPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 770F39C7C5B4DA0EDF9436BD64A28EB2 /* SENAPIPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16121EA438040183CA067F8E8BCE6D3F /* KWCallSite.m in Sources */ = {isa = PBXBuildFile; fileRef = 779318520299B237A12EADD4E82EA994 /* KWCallSite.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 161971F1E73EC15AA9BB2CC6EAFEED4A /* SENDeviceMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = A5020AFD5A78F7A182935EA06EC4AAD8 /* SENDeviceMetadata.m */; }; - 161EC39CD8362C167BD234B63820BDB0 /* RealmConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42321C76A3C559EFCBD6C1982B454783 /* RealmConfiguration.swift */; }; - 16465C2782FEA5286D07B1452084F82C /* LSMatcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5051891CB782676EF93C0714FC8A18 /* LSMatcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 164E5E34792DF7CD4A372B5154FB6B2E /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = BAF493C1F292DD955F857868FC41686F /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 165CDC7181877CE7AB477D1200E3CA22 /* RLMRealm_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 91EFFB7AFE5CE38A52DFA66AF3D55512 /* RLMRealm_Dynamic.h */; }; - 1678C9D1AA91068482512BCF848EA6E4 /* LSStubResponseDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 01EBF0C337277D28D7B7CE89D7294EF6 /* LSStubResponseDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17141F63654A56112662BAEFE83A79B5 /* KWEqualMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F8970477CBA0D4CE8AC4CD999A16A89F /* KWEqualMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17199AB3E03EAD5219C4394982F84B91 /* BugsnagBreadcrumb.h in Headers */ = {isa = PBXBuildFile; fileRef = 20821F17C4996D30BF385DA5EC9CC331 /* BugsnagBreadcrumb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 172AD672E6FD4CFD24882CADA3FE0FE7 /* KWConformToProtocolMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = D3FDB6AA039FFBE479D3B6BE00ECDDB2 /* KWConformToProtocolMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 174B7C06AC1794E2642C480D3B5BEFC6 /* FBSDKButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DFDE33FFBF7254EC8954EE648367886 /* FBSDKButton.m */; }; - 17685D13725BC80D41774C81B64357AB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 177312AB76A42B23284A77857F6ED2F6 /* FBSDKErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = BA1FD4A1FD166FCDC6F44EA7857FC737 /* FBSDKErrorRecoveryAttempter.m */; }; - 1836667D6DBDB64618037FCE84E82DCE /* FBSDKGraphRequestMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = DA93A159498D6FCD5D960A5DA1EB14D3 /* FBSDKGraphRequestMetadata.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1891999DCF7C9B28264E3C77D40780B9 /* KWWorkarounds.h in Headers */ = {isa = PBXBuildFile; fileRef = 91F045C7FBE712D986B3AE68AC3A8066 /* KWWorkarounds.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18A4246499A7B3702C57A0090DDD5B49 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD4975DCDA03C50A9DB9B1C4634BDC5 /* LineChartView.swift */; }; - 18C7D2A231176F08523CA332907FD8F5 /* SENService.h in Headers */ = {isa = PBXBuildFile; fileRef = 132F81F12EAFD58A6A82D474C46E0371 /* SENService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1905FD833FD38751C1A021536F80543A /* UnknownFieldSetBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C926D5E8A6D0BF65D5FC7FDB938BA015 /* UnknownFieldSetBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 192575FDB681537CAC5289DA4618DAD6 /* ChartXAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD75E66D5A9A3309345B75964360E6D3 /* ChartXAxisRendererRadarChart.swift */; }; - 19349AB0E76F6B3E5B42909B06BA6AB1 /* FBSDKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D9564F5E22B256425B03C43A3844736B /* FBSDKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1942694ED527D5584AEE29968E88DFDA /* SENKeyedArchiver.m in Sources */ = {isa = PBXBuildFile; fileRef = 61E142489F11A879A0E5DC8A5F0F8386 /* SENKeyedArchiver.m */; }; - 1981272E78993F2D0F1BA2907F688669 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 19911CD8F66B2DC6F3EF20A38093C901 /* SENConditionRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 048E483362A21348B8DBFCAA1DEBDFE3 /* SENConditionRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 19C505D92EB5BF4CCA974F7F70674F3D /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 230511BE1F38D84E3EB831384C3E3BFB /* IPieChartDataSet.swift */; }; - 1A380040CE8539356341E406346AC818 /* SEGSegmentIntegrationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = B2675CC7C04F565CA4E23255C1FC8823 /* SEGSegmentIntegrationFactory.m */; }; - 1A3C476678A6DD294912C7553B02C0FC /* DFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08F136554A09DFFF8E1C72473C50B55F /* DFUPacket.swift */; }; - 1AD24B2DC831B4C9E1CF077342276159 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A45A23E2773710E17C6C6496897FC1C /* HorizontalBarChartView.swift */; }; - 1AD57D3690C7297C3D109AA28CA9CBAB /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 699CF37DE2AC1AEA8F5B8AC9BC46ACF6 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1AD97A87BBC69506481F95B51325BB0D /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D475E214297E4F594F394FB1131FB02 /* CombinedChartRenderer.swift */; }; - 1B0BD4AC4A3DAB26683F7AB0C24FE7D9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 1B2218588F314218F43055D6049D72E4 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = D148EBF9273C5525BADE14B1F0DD55FA /* ioapi.c */; }; - 1B3C5C87BE89F990A21D22037ED16B74 /* FBSDKProfilePictureView.h in Headers */ = {isa = PBXBuildFile; fileRef = B09ACB8314F136282B01D565C75F35DF /* FBSDKProfilePictureView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B40A5685BA7D345B07E0C3AF2C871FD /* SVWebViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB96793A455B281E265440083C4E8674 /* SVWebViewController-dummy.m */; }; - 1B4A0F0F6ABEC2D65673C947BC5057B0 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9D09F20527D6638C08509066A5E8B3 /* ChartHighlighter.swift */; }; - 1B9962A3F4613EEB6FDCA62C174ADCC1 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 289C3CBA88646F173BCD450FCF1D275F /* UIWebView+AFNetworking.m */; }; - 1BBC379B58D0F9CB3DB8007DD3C8D79A /* FBSDKCoreKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E067C9724D3FB66EF4F59200B447C7B /* FBSDKCoreKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C0122691143971947E9B43F3378798C /* AbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3088788DB6E65AB7680E3A9C575181 /* AbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C2FB9A88AA9C09FD0A7F0293D247878 /* KWChangeMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = EA8585B56852B46E508FD08B6C823A46 /* KWChangeMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1C30B73DDD8B07EE39238646A8746A1F /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F9C5CDB57240F9482E003C84877A8C /* CandleStickChartRenderer.swift */; }; - 1C4C830E0C682AB68CA553014DB5BB3A /* FBSDKUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DB2D9C308B85AF3857571F9E49E2FEB /* FBSDKUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1CCC9B90F6E6AD8319811C85F5CEDFA8 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = C3AE766D3F5FA42C513D1346B47AD786 /* AFURLResponseSerialization.m */; }; - 1D3AE7B1AE37BEBE027E2AA16E46A578 /* MSDynamicsDrawerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B89ED9C2EDA6BCF9DBAE94B86381735A /* MSDynamicsDrawerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D50E332ED707262089DD5AAF8E0BF3B /* KWMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 091F6533D95D3F82D1D73EB24DE13117 /* KWMock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1D6964ECD88351955E7988F44B0956A1 /* KWAsyncVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = A2778AEB40AF025FB2E53B856D4C7F22 /* KWAsyncVerifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1DE380C180D03370EFC075AFF48FCAFF /* SENSleepSoundsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 91D9336743B0D10B1C24EB632D7BF650 /* SENSleepSoundsState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1DF1E10C522E006582301FF294BA118E /* NSProxy+KiwiVerifierAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5090AD051FCC9F02DE41901D46683F3B /* NSProxy+KiwiVerifierAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1DF26D7BD6FFB43FB72D348216182801 /* RLMCollection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 01CF1D31B6F4DB345C202E6A2CD2041C /* RLMCollection.h */; }; - 1E14B7ACBEFE1B735E2CB0B1EA49B77A /* RLMSwiftSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 0921B996155F3A82122C92738B12A970 /* RLMSwiftSupport.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 1E1EC8BA87E1ED69B8585E15C083B6EE /* ConcreteExtensionField.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FF3579692DBBB12636E3485570C421D /* ConcreteExtensionField.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 1E4B31D52936ED8DE2F1932EFC0BB529 /* RLMAccessor.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = AAA6E1AC6422CB894FD1D5D3A151727B /* RLMAccessor.h */; }; - 1E4F961E06A0F4B583698F2CDCB1E75C /* KWExampleNode.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15364124A35A523861701A737B2050 /* KWExampleNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E56B3786E60E05C82E1BE05457FBFE6 /* FBSDKGraphRequest+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E79830219A71B40D6AC209583D4FD966 /* FBSDKGraphRequest+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E607643F40450FABE3892E04D78B7C5 /* IntelHex2BinConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = E9E4CE6073A0C1A57A58937E3B454904 /* IntelHex2BinConverter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E7FF59DEF705C9542E9BDE33DEF5EDA /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E6D3327F6F0FBC131AE30865BD2C537 /* BubbleChartDataEntry.swift */; }; - 1EB508DA76DC923C005FFEF7E59B9221 /* UIImageEffects-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E2CAE9CEA184EE79FF584EBF073D467 /* UIImageEffects-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F22F628174A90CB05E333C9AAEC68D3 /* SENSenseWiFiStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA44F36DBC6892BD7243055AEC976A /* SENSenseWiFiStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F286D5D74B648B4065A7BE7FE8D41D6 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F0959E606AE870914EB0EADAEE51D4F0 /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F4F8CA63D55E39CA52E125A312C7E70 /* NSJSONSerialization-NSNullRemoval-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FD4341E9FF07150CA9C2328E7798588 /* NSJSONSerialization-NSNullRemoval-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F8A565A56EB245F0B6CC40A6E73D367 /* FBSDKWebDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = C898E026C3A67FD7515039C23FF66F4C /* FBSDKWebDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1FC38802B91E70C33BF0B7775113B85B /* LSDataMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6889A08C817AB661A9EC94B5BE533329 /* LSDataMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1FE64FEAA44EE7E5D9A4854AA1332B1A /* RealmLineDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF72A303C626BC569AFC4040E1D7BFE /* RealmLineDataSet.swift */; }; - 2017400B223BD973E1BE3DA3B6391982 /* FBSDKViewImpressionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = B3AD34109298E7EE4A73219F718D934C /* FBSDKViewImpressionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2032F0E7975AF810511966ACECDF29B3 /* LegacyDFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19218D03D052E41A01F27F4779AB208 /* LegacyDFUServiceController.swift */; }; - 2064ED8B8D1D0FE0F043942CBC173F60 /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF5B8D64BAB3EBE249136D06FAC640CC /* IRadarChartDataSet.swift */; }; - 2126930E45775E7DBE90576CD92B46B3 /* SENSense.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F2ED922FD2CF3C67AABCC6052265BB /* SENSense.m */; }; - 21D9AD3C1623A139D6998064AC19D959 /* ExtensionRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 79C29EAF45C835A0C947EBE5AECDAF4B /* ExtensionRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22112E40D903C346C81750A92B8442E8 /* RealmLineRadarDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64822BCB87843EA567B82449B79CB693 /* RealmLineRadarDataSet.swift */; }; - 222417169B80E034D421A5042F5E0A6D /* FBSDKPaymentObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = CA72AEE0A8F8ABF9AAA416ADFE366A95 /* FBSDKPaymentObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 224E586797683D87846D9B05978DD7B3 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 50E4DEFF17669D4CA0A29D104B5CA76B /* unzip.c */; }; - 226B60FC104A69E6AE9A3ECC251712AA /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C5CB28B621DA15A8BBA82D2358CAD2B /* LineRadarChartDataSet.swift */; }; - 22FF1A3016CD871D0AB885079F9D96D1 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E4FDE1BC725ED63F0B6A523CDABC50A /* ScatterChartDataProvider.swift */; }; - 231C2AC740C77ED7100FCD68449982B2 /* SVWebViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AD74B2E969701909132AA134CFDB5F75 /* SVWebViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2335ED83CE054C913753FFF78ADAEC7B /* Field.m in Sources */ = {isa = PBXBuildFile; fileRef = 190B1F4C850F944F149392D338627D60 /* Field.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 233A5F44B898C98EA05A4CD20A456679 /* CGFloatType.m in Sources */ = {isa = PBXBuildFile; fileRef = 813F43BD23D99B83C1A4AF020FC0EB1D /* CGFloatType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 236B153B26CC836D63DE26FEFDA34A01 /* BFAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BAA1017D960A876DD404AD2C5F0475 /* BFAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 236E1C530880C79A19A7DC7C0E9B53E7 /* SENAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = E49F52513E02D80F4462FA863A4C2FF3 /* SENAnalytics.m */; }; - 23A5047562B6EED500DAFFFD9C2D99B0 /* FBSDKTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDEB0F11E04C8FB7507E90467A41E6F /* FBSDKTooltipView.m */; }; - 23A730E246AD2BE5B16C3B7D4CF8EC3B /* KWBlockRaiseMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 219FC34893A78F8F315338331D7F2DF4 /* KWBlockRaiseMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 23AB8BF7CCFF82EC1CD732B82D3ABEA8 /* FXKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 86B43C5F5B1F2318C7C9A02EDFA71075 /* FXKeychain.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 240E74F214F3EBAD880D0DC25155AB65 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91C34C4AAF07AB370560C70814CFB51A /* CombinedChartData.swift */; }; - 241CB44C3CF88E659F8666A409F871E6 /* SENAnalyticsLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A49BFF2C63D52B930D2FD2BEDD2ACE86 /* SENAnalyticsLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24BEB58370519146C4FE44760246BAF9 /* KWMatcherFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BEA6A7624D9109C8253BB4B3526F6FA /* KWMatcherFactory.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 24C011F5569E80FB478A3DE21233B468 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E4D820020E565CCEAB317B99850629 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24DABD250537AE960043A922D4157D9D /* NAPickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D4D6DEB70DE71E7A988AF707FC8140F /* NAPickerCell.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 24F32588CD353F5FE5B3FC9D454F4A53 /* FBSDKAccessTokenCacheV3.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AA2E774CC695F4D1FC8017794F492E8 /* FBSDKAccessTokenCacheV3.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25235747A7C7B9A82E56A21637A8A796 /* SENAuthorizationService.h in Headers */ = {isa = PBXBuildFile; fileRef = E52A6E9BF4A75001CC02B0491680200C /* SENAuthorizationService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 254AD971C7B8A446ADDE442ACB20DE3D /* SENPillMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA6AB5FDE3F232D957BB6AF846E62F7 /* SENPillMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 258354A90B71F39B0EAEBEEA6BE11599 /* RealmRadarData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EF9FA8F0EA981BF7F9C5F88168CF579 /* RealmRadarData.swift */; }; - 25A11F3033622A68624F29D3862C059C /* LineRadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3131CA4CBB5B5641969B3F35142087 /* LineRadarChartRenderer.swift */; }; - 25B2ECCDA079DEC17951FFAFD54FBBF2 /* SORelativeDateTransformer.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1DE3845FC5C7F310A88812775F3D0B8A /* SORelativeDateTransformer.bundle */; }; - 25F8BB329DEA3E7DEAC3CB5D79E07334 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3131AA6BB1825657038B27B52388EF1E /* RadarChartData.swift */; }; - 26570631AA67EB72D83308FFB63C1479 /* SEGAnalyticsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EA18C15A0442F6F9A446AC983564235A /* SEGAnalyticsUtils.m */; }; - 267A9D43C9132119D8112313FA674608 /* ExtendableMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = E4689514D0A2494BC57ECA59F432A75B /* ExtendableMessage.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 26CFA16176B4B2DEF3F299E68C827D8F /* KSCrashReportFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = BB48CB8F493F3B714762A97DE65FEA4B /* KSCrashReportFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 26E6708810CB26BD78D50AE8C7FC983C /* FBSDKURLConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 131AB0F3F0872740AE3904D986800138 /* FBSDKURLConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 272D6B420E6D7B74F240B5167A0B161B /* AttributedMarkdown-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 88DD1317EFFABA61A48B82A8498BFB89 /* AttributedMarkdown-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27346D298CA752A7E64C7A0803067056 /* SecureDFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = B873D145FC904746DF7DA313C46B54DE /* SecureDFUPacket.swift */; }; - 2760D9825CB0A3015E110EA6310314E7 /* SEGAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = C43AB72E7C87091A781126BB6E4D31FB /* SEGAnalytics.m */; }; - 2797563A35ADAB4DE75BD99DE31AF9EC /* NSJSONSerialization+RemovingNulls.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AEBDA28C5CBB72A7345A1E4D7E2FDA6 /* NSJSONSerialization+RemovingNulls.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27D0E20144220AE0779761017931E747 /* SENSleepPill.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A40D58BB3EE05658ABDA4BF915783FB /* SENSleepPill.m */; }; - 28326DE0CC3D077EA4D461370C5C0AFD /* RLMRealm_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3025464D4B1E2E30718CB0EF2A19A342 /* RLMRealm_Private.h */; }; - 287832D069AA7E0D4C19C3E3648A9E99 /* RLMArray_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D560944F2A2A901B1DF5FC8346D61D5B /* RLMArray_Private.h */; }; - 28A07BF7B81AA8D622063311277F6F37 /* SORelativeDateTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = CB1F3A34E3FCF4DE49CE18604061E40D /* SORelativeDateTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 290E56206D7C81660A4088FDA2CF5B7A /* DFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA484951371BF3FB96E02CF1C8E305BF /* DFUServiceController.swift */; }; - 29202F06AA00503D5D6E7E525CBA0EAC /* DDMultiFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F025C1E2DF6A110E4C269AFC5C6F531 /* DDMultiFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2961AD5883F9EAEFB20080BC73AD82ED /* BugsnagMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8438E722662ECB830B77290473FEC6E8 /* BugsnagMetaData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2996C3AB260B66EEFB319AF6C7BC5905 /* KWLetNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E8BD4235F01DC878576F7B168C13D70 /* KWLetNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 29C137910A3C7A41E83DE15A58A274DC /* KSCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = E41CB6C4639F6C33D667107B56B3993F /* KSCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 29F60BC0378533F3A8740F7E247037A5 /* FBSDKBridgeAPIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 44107D2EA44667BB3BA20640AABDB4E9 /* FBSDKBridgeAPIResponse.m */; }; - 2A73845CB9CFD507A9A3F5A1A5BE7F5B /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB0E6EFE9387F5E284B70600C89EE5D /* QuickZip.swift */; }; - 2AB23AC41A224E94A515B333E495116C /* SecureDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EE9730ACD1B5598D6B641BEFD33E3D /* SecureDFUPeripheralDelegate.swift */; }; - 2AE62D1AB8DC4D65C2A8B9CE68A6B047 /* KSCrashReportStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A7CFF90D6ADD6462393FA92422B7254 /* KSCrashReportStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B598EEEA7EBBA91ED8E204DD932F2CB /* RLMObjectStore.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 1CE1E02CFA4F13F5CE2D31F02529D3E4 /* RLMObjectStore.h */; }; - 2B6F223ED85BC72735F2386C61B29440 /* RLMResults_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6174478BA6EE6A953F6FFC15DA9729F3 /* RLMResults_Private.h */; }; - 2B85E69CC4D9418C966CA430A8B29584 /* KWAsyncVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = B8801421677871FB911850D9684B19FC /* KWAsyncVerifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2BFB096E6116C2F997F9E6A7F63F2587 /* RealmBubbleDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BCCA8BD658C2A1DA7E51EAACEF94C27 /* RealmBubbleDataSet.swift */; }; - 2C3B89B7286299EADEDEF4E62715EEC1 /* KSString.c in Sources */ = {isa = PBXBuildFile; fileRef = B7A2600C97DC456E250225D8427B2495 /* KSString.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2C4FF5851493895CA6E3A36EDA24C547 /* RLMObjectBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E0D901C9189BED0600BF1FE504386BC2 /* RLMObjectBase.h */; }; - 2C7AEE20794F03552F162FB3F80354E8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 2C8502237686F5FDEEE5229544DA850C /* NSURLRequest+LSHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 507C6D5B825799DB9A162E5A23612658 /* NSURLRequest+LSHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2CF07215A3E56ABF0F16CDD8EBE97282 /* MutableExtensionRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E79DEDFE7AC7A63BADCF82A35866944 /* MutableExtensionRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D083CD4AB01FDD16631142A55E4DCB9 /* KWWorkarounds.m in Sources */ = {isa = PBXBuildFile; fileRef = AF1E68C22C7CE433159BB87B4AA4057C /* KWWorkarounds.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2D0AE6CCCEE22F8B0057B1E2905B1E7C /* KWProbePoller.h in Headers */ = {isa = PBXBuildFile; fileRef = D0F5EAE3FEFD7D16931D94440C5C2640 /* KWProbePoller.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D1EC62DA5C77A1E4205A8CBD46279DD /* KWBeWithinMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C9C97E718BF92CF39FC1EDD65906410 /* KWBeWithinMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D209EDEB793880067A2B13D14B8853F /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DEE98A438638D16FADB378EDF7E60177 /* fr.lproj */; }; - 2D30E069F3B9C7C2A16E4858411CD2D5 /* FBSDKBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BC892654DE790A354F2D76045A0735A /* FBSDKBase64.m */; }; - 2D59F33A82015DDFFE73F6D33FFCCEB2 /* FBSDKCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 731F2C72F18E5784B41C850B9E1254BD /* FBSDKCrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D64999F189EAD350E03B6138E9FECA7 /* SENSenseMessage.pb.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF7B706B95365925BA0AE7DF234FCFC /* SENSenseMessage.pb.m */; }; - 2D7E5789E25E9DEE11C9BABE989B4EF0 /* KSFileUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9608C3E1620EBF92E324A433F8B653BF /* KSFileUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D870A12429C5CBF5FEE79D2CF96A267 /* RLMObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = ADFA4F91940EA8911338A8C2D1DD4C6E /* RLMObject.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 2DE93CB7D024ACBE3709832FEFE62D40 /* ChartAxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D192C8D3AE142298F46B44605769FD /* ChartAxisBase.swift */; }; - 2E263670F5873F90B0D4B74BFA59703C /* FBSDKAccessToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F5C6A6CEDD8A4829229A67BE43018A /* FBSDKAccessToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E3D6784578E52C5D8A337F7E30FB352 /* FBSDKBridgeAPICrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 395C8AE3248EE3357FAB8DD25746154C /* FBSDKBridgeAPICrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E5ED571A6F40AB00D402689EF1C54F3 /* KSCrashSentry_Deadlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DE39AA6C157ECA49038240FB2A44D05 /* KSCrashSentry_Deadlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E625816865270A322E68D14C9EAD2B9 /* NSError+SimpleConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 54F18837E2F4DE450ABB011630A4E017 /* NSError+SimpleConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EF97A45D7315A3D38CE1F7991C3E48F /* RLMOptionalBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C981EE111B8AB22794FD8001A3D1F65 /* RLMOptionalBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 2F2FA0D80DADEDB9BC220A2AFEF0C53B /* KSSystemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2359FCA43EDCD88146BF63025778B1EF /* KSSystemInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F4A1532CA863EB3126E46AEBE5C6395 /* BFAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5856EE930464E2D35F3DD82A4EE37C /* BFAppLinkReturnToRefererView.m */; }; - 2F9E36541CC8C9F0EF8ACB5C9085348F /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07E52B4F8804AE5AFA3F87E18A8A6CC9 /* Zip.framework */; }; - 2FA5FDC68BC6D0C7504883FE450068A8 /* RLMSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 911E1A07274A2E7D1A0662B6C7B2730F /* RLMSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 2FC45C309C084647236DA8E329F950DC /* KWItNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BCF7E95B63229910FC0BAB98CC2162F /* KWItNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2FC7B3B84DABCA5190FDC589C928DCB8 /* KWMessageTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = F88F56BA01E5297E31E0FA3C84F77CD0 /* KWMessageTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FEE1823B7AE50FE54A7502B870FF56E /* DFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8964B5A49D2BB43EB10BEEB961A9120 /* DFUControlPoint.swift */; }; - 300AF571A8FDD84B0203D3061FF8EABC /* FBSDKLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D681969EE3A5E95D3CAE03AAA4098E /* FBSDKLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3013C3ED958A225D965517855AFDBE61 /* FBSDKLoginCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = 936CCD433FE6F6D3B62564C136C65711 /* FBSDKLoginCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3021C8DFB79C857848C36351AE442A9F /* SEGLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2690FC1B30A2D2D19DFF0EF41AA03E01 /* SEGLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 303F0BCF3AEACDF596A4893F48D709AE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 3088996EDA7F66606F51A19E254F0A24 /* DFUStreamZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = A145A750A808AAABE7EB44FFDD278DDA /* DFUStreamZip.swift */; }; - 30C55A82BD2A7FA98C218B37D24C3FB2 /* KWAfterEachNode.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE5F2567784E4799FD9723D7A1125BC /* KWAfterEachNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30C588115D124D18659E39A6F4CDE55A /* LGCharacteristic.m in Sources */ = {isa = PBXBuildFile; fileRef = 539E8856D8A5AA9ECD4884ED94C025FC /* LGCharacteristic.m */; }; - 30D7C3A7F522B305EA3C612BFCADF8D7 /* FBSDKDialogConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CB46C5F2DCE3A88C23EDF3AF4E6E5D0 /* FBSDKDialogConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30E68E52B3C64C08693460DD25C5669F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 317EECFF88BA46A96FBC0BAC72148ABD /* SEGAnalyticsRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EBC65802B3889D5CCE698F4CFDB9D3A /* SEGAnalyticsRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 318B251AF24A4942ED256404FD3F1CD8 /* KSSingleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DD5A92764853FEEA688048ADEE7D25A /* KSSingleton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31CA0C0D38703F2C328EB564D925CC7A /* KWInvocationCapturer.m in Sources */ = {isa = PBXBuildFile; fileRef = F1F977DF8BCD02FC5A580EB41D6AB3BE /* KWInvocationCapturer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 31E12E0364384CEE0ED07B7777D116CB /* FBSDKServerConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE13E5DA0F4A0981D13C487DE6D5A11 /* FBSDKServerConfiguration+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31FAF72F996D1B2A2242B728608531FD /* SENExpansion.h in Headers */ = {isa = PBXBuildFile; fileRef = A5F7A864B5FA2EE2A78B104AE49E1E52 /* SENExpansion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32014B05FF73BCD97B318874ADC9BC47 /* ExtendableMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 34A2B11FA2B504E89F88996817BE108A /* ExtendableMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 323FA563EBAF23E774AF081E4A1A26E5 /* KSCrashSentry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AA6DB4138821E78C6808DCE198ABD2D /* KSCrashSentry_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3268896DED700D82D9D608B31267F373 /* RLMResults.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = BE556820FEF482B55D54FF9712B9DE92 /* RLMResults.h */; }; - 327E98967731E60FD231710477C3ED1D /* ChartXAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE5927FC06FDE015414D7663342B11C0 /* ChartXAxis.swift */; }; - 3295792AD74D93C915734BA310D6C717 /* SENFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 42352B7B711278F174EEEC51E9A0DE29 /* SENFeatures.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32F1BBEADA52F60484D44E373876DE5F /* markdown_parser.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B5E74CA2A074C3F13CEC87EFA252774 /* markdown_parser.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 337C3B1D36180FE1F56F406909227D59 /* KWCallSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B5550DFE4FB9AC96647ABAA12C4D9AF /* KWCallSite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33997F96816CC1F4176ED1624DB92F60 /* KWIntercept.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B08539F9B110139ABE0D9EADE8207FA /* KWIntercept.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33EA06F3A0B1CA567F15684F163224D7 /* KWFutureObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 789582586C33A6BCC215BA4D6AA12DBA /* KWFutureObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3413B2393A1CD9C53E6D85D21659FA83 /* FBSDKLoginCompletion+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0637C05359E6854277967F4A9DE4B6AC /* FBSDKLoginCompletion+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34738B7E4F8D228CC475969F8AFF2EA0 /* SENAPISleepSounds.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DEA32748F549E71BFF5B43CEC77F0E /* SENAPISleepSounds.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3496D8AB8E915FBC194345DD119B755C /* DFUStreamHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14C16A57DC940366F62208F7DE68933 /* DFUStreamHex.swift */; }; - 34999E11E91BB7F55FB88F25F8C75F9C /* FBSDKContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ACEBBEC96319425EFEFC0ED18823C7E8 /* FBSDKContainerViewController.m */; }; - 34AC6EBD9F8A1628BC537A839C1EC4C9 /* NSObject+KiwiStubAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F2DE7F1E80B0689BC500E7D1F96C2D11 /* NSObject+KiwiStubAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 34F8C089BE692AA698A6FE4DD9BE18E3 /* KWExistVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = C3E31A10909090D07F9DDC8388999166 /* KWExistVerifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 352A4963A9B909B066B8F65349711787 /* KSSignalInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F02A2E0797EFCBAC0939817CEE5B0E96 /* KSSignalInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 353E5B4016DB202C470DE97DC051B035 /* SVWebViewControllerActivityChrome@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D7BEBD4F61691991021861B81046A727 /* SVWebViewControllerActivityChrome@2x.png */; }; - 354A949F90ED32604633338249B9346A /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 96F58F6C98C2A01F1BFCF4DCE95678F4 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3561FA1A79DD89A11A4A7D2D961D4362 /* FBSDKLoginManagerLoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E1D61AD7EBA83D17C86A162D21728AC /* FBSDKLoginManagerLoginResult.m */; }; - 35A5435D99B66BCE97BDEFD7E2283A0A /* DFUVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 972420E4F7B3DD29C24E86992C6B2A00 /* DFUVersion.swift */; }; - 35C77A1DF538FA69F440907419CF2BA4 /* fileenc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A4BBD0DEDAE9900534393675E25AD24 /* fileenc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3601DA353EF72110E87EA4BE722E4968 /* DDContextFilterLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 073F61C7D7ACBDEE644202FADA6CB3E0 /* DDContextFilterLogFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3653983A4018E18D4B64BF79189FC1FC /* FBSDKAppEventsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = AF434524A0B0E561DDD21D498F2B4C2D /* FBSDKAppEventsUtility.m */; }; - 36785E3CC765273F0C86F65D16725CD3 /* KWBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = E684D1B252C10EFB914CE0E6542D5BEC /* KWBlock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3688C6C80C8E2AA0FF0DFEB1731D81FD /* KWFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 762B308598A35E1F8271A22397E3A249 /* KWFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36A4D2D01C2B4553E571C10B7E6F4685 /* KWExampleSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = B34120FCA27B8399BC044D3E163B2B9E /* KWExampleSuiteBuilder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 36F2A0941DB883B63EB2F50B912DD7A9 /* RLMProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 056EBDF9E23B7D4FB58A07344131EEED /* RLMProperty.h */; }; - 37605CC5D62C6D2ECAFB63E3F01897B7 /* LGCentralManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE48B2BD7591E96FD544CAAB991DA2E /* LGCentralManager.m */; }; - 37714D3399BD199BC69E0C9596A51810 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A2F99575BF7F5D721ABB6205858CC8B6 /* UIKit.framework */; }; - 3797B27E2DFDB945411ED437ABD78EF9 /* SENSenseMessage.pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AAEE9AF28B505B549FC52F3F2D94FAD /* SENSenseMessage.pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 381A4BF4C9EDDFF567611319BB5F9101 /* FBSDKLoginKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A49958D5405D897A327B3F52F7844D06 /* FBSDKLoginKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3849F4F963655C861634D13DB7E80536 /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CFB49A2BC3C7EA331A9D06AA687884 /* PieChartView.swift */; }; - 3853C361B4ECCE6E6F63C05AF2220DC3 /* UIImage+ImageEffects.h in Headers */ = {isa = PBXBuildFile; fileRef = F8CD0DD473CCEBD19518D307D62F812F /* UIImage+ImageEffects.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38550D12478B130A4D4D0D5092F6E56B /* FBSDKDynamicFrameworkLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = CEDE43F45B14ECCC87F3D0557CD027DA /* FBSDKDynamicFrameworkLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 389E17D5D9ED2115EF41E7C08FC6F26A /* SENAPIPhoto.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4BCF6CC098A824958EC389B5B282A2 /* SENAPIPhoto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38F19EDF81FBDF22557AFAEA7527BB67 /* ExtensionField.h in Headers */ = {isa = PBXBuildFile; fileRef = 415701F3DD9247A5DB2A4F6AA89BC606 /* ExtensionField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38FAC4863054B2B59D1ED405A97DED6E /* RLMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 0887EBCF1CBF974E276C517B22A0C2B3 /* RLMObject.h */; }; - 392C576481D196BA321C6881DE043C13 /* NSRegularExpression+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AE2101F1A2949E7ECCBF41F705B7920 /* NSRegularExpression+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3A39656484AE25F88CA87C181C3870BA /* BFWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = B9E0A3D2926DF0BFB3B42AB06B648B6A /* BFWebViewAppLinkResolver.m */; }; - 3A4E9BFF4A2FF2616217559B8BA1F939 /* NALabelCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A7D26D4AC87B19F73E601A08E8C79C /* NALabelCell.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3AB8975A8A155D3696AFB61A8B5893FD /* FBSDKAccessTokenCacheV3.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ECD9BC2A8DC61B32F26B5EDF97826CD /* FBSDKAccessTokenCacheV3.m */; }; - 3ACA2A46BEC11E599A6E5CBE685E9881 /* Analytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 48DAF3A169A34E643FA514298E6052C3 /* Analytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B0AF3483D586ED76DAC62F027EEC8E4 /* NSObject+KiwiVerifierAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C23E8D09BA0D573548361DB6B47CEBC /* NSObject+KiwiVerifierAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B28410FAFB02CB90FA6AC399180571B /* KWNilMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE3618AF3A807E30640D29B9D62A0FD /* KWNilMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3B30741A24459FD8C2D9FF25D9AEABB1 /* MutableExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 75AB2EA628467348AC7BA9E59878CA7A /* MutableExtensionRegistry.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 3B6EBD681C98F5C86003DAEBAFAB67DB /* LSMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = AC494697EA56ED1E575363203F683F77 /* LSMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B781763F8F7F91DF3D9347A49F97C96 /* KWBeBetweenMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 52C57E961DAF09764469888401BA801F /* KWBeBetweenMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3B969E1208A3BF1B27BCF4E3ADF7EB07 /* Bugsnag-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F2FAF13AF0F884EAE93FBBF3343A6F22 /* Bugsnag-dummy.m */; }; - 3B9F4C0EF289E60FB017BA23567F24F5 /* RingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D4CCB5380C318DA6FD34315DBB1D4517 /* RingBuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3BAA33D40CA8585554B5A0697A60325C /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C4A7A4FA6E6E9B63047D57763B264421 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3BC43EF2A1D2112426108E22CCD9C8A1 /* FBSDKLoginUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = BD65285F62F97A519BB9E5B9AB0D261E /* FBSDKLoginUtility.m */; }; - 3BE7C8726E10BE46B198D1FD5E45220B /* KWBeBetweenMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E0A1F2FE6088C78D389F1C13973785C /* KWBeBetweenMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3BFC9A76135F419219CAF8E0462DB22D /* KWProbePoller.m in Sources */ = {isa = PBXBuildFile; fileRef = BB882793B9DBCF0897148003653A77EA /* KWProbePoller.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3C1720B0D40FAEBBD6D9EDC074B707C8 /* RealmPieDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8446D771AF2D73E31887FBBA49A49C77 /* RealmPieDataSet.swift */; }; - 3C2C38C3046948F6967FA573562496DE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 3C4311DA5499DE28FA37598E9DF19B63 /* FBSDKGraphRequestPiggybackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 94B5510D678670CE5C1EC353B4F05BEF /* FBSDKGraphRequestPiggybackManager.m */; }; - 3CE52D2382AC587DD950A2EADF5E9B84 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = CF55E61471959D87F924F81CD8A1B489 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3CF09685712D93A0B24E3960FE077575 /* FBSDKLoginButton.h in Headers */ = {isa = PBXBuildFile; fileRef = A154113516ACADBF9F352648684E151D /* FBSDKLoginButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D8CA8A5A5E2A0FDAF9370A1FBA402E7 /* iOSDFULibrary-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 77E181FB001DAB7E09FB02BB9F5F8610 /* iOSDFULibrary-dummy.m */; }; - 3D91C70A5D65FEC674AB5259E319D82F /* SENAPIDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7A7B023786D33B8C0FEA4C3A1DFAF5 /* SENAPIDevice.m */; }; - 3D9EFD2FE1C9CBFAED0234CC64066D1F /* KWConformToProtocolMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 55CAA81803BC6BCCFDE945EF268F8771 /* KWConformToProtocolMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3DC928B5E71CC5A9640CDB2F813D806B /* SENPreference.h in Headers */ = {isa = PBXBuildFile; fileRef = E9DF6924BF3EBCFF69AA04D8B408644E /* SENPreference.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E1844B7983A3A7D17CCEF2C5653ECB9 /* FBSDKBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 983A6472808FDAE6AFBC8F2459323DE2 /* FBSDKBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3EF105EE9D66879C4CC657C39F8680AE /* RealmBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA1374168936E98895A7E75F1042053 /* RealmBaseDataSet.swift */; }; - 3F00DA4BE50E5B82FEBCF288C05A64D0 /* KWBlockNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E9BF537F5E7AA38216A336B51A7DDD /* KWBlockNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F39C3971802AC1288D54874D496969A /* RLMRealmUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2B04F16632A8A8BC661A23FAEA803404 /* RLMRealmUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 3F924F7BCFE9B06763D78E0EC1D5BBC0 /* SVWebViewControllerActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D52A23829C3D8FF8EBAB3DA32B4A028 /* SVWebViewControllerActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 400C2D6002A91490BA2A6D13B650FB2F /* SENTrendsGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BC3E3FC8FBF455A73B91A3C25C02720 /* SENTrendsGraph.m */; }; - 4082FC991EF16EECE52DF7F61BD91665 /* KWContainMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 858596D1E2B6DDD117D916BDC840B0F3 /* KWContainMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40971706956181AADAA6FAC5C2956ECB /* RLMObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CE1E02CFA4F13F5CE2D31F02529D3E4 /* RLMObjectStore.h */; }; - 40DF372231A43947D8E01553E72C9B15 /* Kiwi-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EA44FFCF7920EB3BA56273FF83C3BFA1 /* Kiwi-dummy.m */; }; - 4158E94365DCC2AC7431B44F3F816F06 /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFF7643372191487B450718C0086636 /* LineChartDataProvider.swift */; }; - 41694706400C327417314A583A8BABDC /* RLMUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = DEC126DD8F4E08A66070C1085D65C817 /* RLMUpdateChecker.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 419B4D172F5830CFAD636234705E491C /* FBSDKMonotonicTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 5434F81128FD57F297E131179B0ED5CB /* FBSDKMonotonicTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 41E559CC0796E9DEA48B5CD8E3637E16 /* FBSDKColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CBA366FBAA63B1100D364B49843D89F /* FBSDKColor.m */; }; - 422B1A0A6F60E3628E14E680C3C34744 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B201480098CE38EDB14C7D2ED45764D /* Optional.swift */; }; - 4230E6106F49E42CF7AECAB1ECDC06C1 /* ASIHTTPRequestStub.m in Sources */ = {isa = PBXBuildFile; fileRef = D1AE4C206A7735991E5E1A338F5034F5 /* ASIHTTPRequestStub.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 427342E67749AD8D91BCB22D97BA9002 /* SENAnswer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DF9BF10A42F842B493FA264362A7A29 /* SENAnswer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 428C807EE3203E815F9230D6DE190695 /* FBSDKSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 804668236F9469976216B0979EE3650B /* FBSDKSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42969C8E5DD84485657301D97A7B734E /* FBSDKProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 950220B45A8D01237BEFE09BFB6D995F /* FBSDKProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 430AE91B7820B2806EB5773CC6999E6B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC842E1ADC9A4495DEA155AB31DDF3BF /* QuartzCore.framework */; }; - 4366324ED438DC052FF07DD149C5078C /* CodedOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CFFE2785D9F2F65C82E56FD39695358 /* CodedOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4397C284249A7114D959D041D9DF796F /* markdown_peg.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C7C14B40677F5286300B3B695329782 /* markdown_peg.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43D3B215E704D4F212F7404015ED431B /* ChartYAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B884F348DE9E36837CEC0A765E9ED27 /* ChartYAxisRendererRadarChart.swift */; }; - 43D54A104F30C12B001F0D769C243A56 /* BFAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E1909A1D15E078A32DEB12E59BDCC8F /* BFAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44062021FB1976CD9F9CFBCAD6DB58CF /* SEGLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 295440090B8CA95FD8E7292D0BF14C6D /* SEGLocation.m */; }; - 4419C943AD38A0AEA2667352F4934C81 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = C418DE088F434FF892318642B807D860 /* CandleChartDataEntry.swift */; }; - 445565D159E15255C57765F523D87006 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB7FC0161943E9CD406F01F85F122617 /* LineChartRenderer.swift */; }; - 44B0D09EC350BDAF2700B6D21890016E /* SecureDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BEB4854EF31AF4FEC6FE6A0685729FD /* SecureDFUServiceInitiator.swift */; }; - 44DFB03EE321276EC61F479F19EFBAD1 /* FBSDKErrorConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DD18038F8539D3309E1488FA979135B4 /* FBSDKErrorConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44F9C98FDF26CED8B3E58F971974C9D4 /* FBSDKMath.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A2DD12E72C761BC4028096B8CA9AE3 /* FBSDKMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 450252F25E279061383DC1CF20E060D9 /* KWContextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E1AA21C16F518FCC31B91D0C8121A32B /* KWContextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4534A56CFB27C9C5059E71B1FCDEA41C /* SENSound.m in Sources */ = {isa = PBXBuildFile; fileRef = 579BB90E90E847558E887432F7EC5FAF /* SENSound.m */; }; - 4539169C90FB05452FD4FF292E7F24EE /* FBSDKMutableCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = EE37F559A1F6F53FFF92B989EB15576F /* FBSDKMutableCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 454CD45AA9811EE185E9DBA9C6BE776E /* _FBSDKLoginRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 344AEE2192AEC655787DAF36F912DB85 /* _FBSDKLoginRecoveryAttempter.m */; }; - 45C31C23DBF3BB73A734DE091EB175E7 /* AttributedMarkdown-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CC48BA090A9D69EAF16688A27B0F3511 /* AttributedMarkdown-dummy.m */; }; - 45D4B9BCACAE82CEF9933563E2F299CC /* BFURL.h in Headers */ = {isa = PBXBuildFile; fileRef = FBCBAA43137D41C57D8C9F3DCCAE0769 /* BFURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45E45AC953C96E2A7A95A9101F3AA4D3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 4636A95719B9311D475B429A42068908 /* FBSDKApplicationDelegate+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDE6F82CB52A18ECC7100C7E94F2E36 /* FBSDKApplicationDelegate+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 464EE5BEBDEDC6A05FE41AC1C1DC535D /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD742FAA64C39D5ACD3C727AD3605D7 /* Bolts.m */; }; - 46AE05A6627D8883582770B557C38808 /* ChartYAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3896122BC24C844F44D2FC4DC6FDE95 /* ChartYAxis.swift */; }; - 47069F71191029B78454F13A5E61CBC8 /* FBSDKErrorConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 75C9A5239F5E5B11C78F7DBEBB4E8965 /* FBSDKErrorConfiguration.m */; }; - 470B70D14049D52C176B8633DD5F56B5 /* LGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B6DCE4105E52FDD0E15AC74850E940C /* LGUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 470B9285A8BF320D44A05A2C78B614A4 /* RLMObjectSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 23BE046FA812475047E30B1D89141394 /* RLMObjectSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 4754F1DC5E4640E342DBAEFE1278D20A /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D532CAA6C3A2CF3CBDCCC50F02C57E9 /* Accelerate.framework */; }; - 477926100433C782BD48D0D5EC73128A /* KWContainStringMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A0D6BE5A1A3D083857535B59130F22F /* KWContainStringMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4819F1498A73A3ECCCCA856C5F9816EC /* RLMResults_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 6174478BA6EE6A953F6FFC15DA9729F3 /* RLMResults_Private.h */; }; - 4829D36A44AF602CD4C5534DE809867C /* RLMMigration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7616EFB9F5F1639402CC9AC0C5E353CC /* RLMMigration.h */; }; - 4842AF40956CA08AB0D0A5A95668EBDE /* RLMOptionalBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 1115EC9B096C79695A87AB541442A2F4 /* RLMOptionalBase.h */; }; - 4848E7E27CCB797B3852BCBAC0BA7BE2 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = AADB919FE63FD68D85C9FF9C673DBE0F /* BarChartDataProvider.swift */; }; - 497003FBE08A8B70F28CE7A3BF779502 /* FBSDKErrorRecoveryConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F28597EF7599C6B424C8BBB7E2AE31 /* FBSDKErrorRecoveryConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 499062EA05DACB05F050F7B1BA541E10 /* RFC3339DateTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCD2E1F65F90F5F885C5DD004E94E12 /* RFC3339DateTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 49BCE4A13083FE938123A6B160D75911 /* RLMObject.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0887EBCF1CBF974E276C517B22A0C2B3 /* RLMObject.h */; }; - 4A3D108C9E0A8FC618E0C48027479662 /* MutableField.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AF6DC856D2DAC2A1D6740CCDE1C715 /* MutableField.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 4A8FF81151EC2F6F73FA00266C4CCF5A /* BFAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = F8F3E98A9214C3419B90756D35523D66 /* BFAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A99C26F1CF4FFE0DE282608EB276254 /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = 4937D016E516753DABCDEAB1CFA30DCF /* sha1.c */; }; - 4AA9D28BD4C515F978C24DFAA2DE6175 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 4AB6D4BADD9AABF8849D1FB53C2FEDC1 /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB8032107E61D92BFF991CC150532F3 /* ICandleChartDataSet.swift */; }; - 4ADC20A70D98729C6B1FCF8401FC4594 /* RLMUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = A02B82C757E31D0161B1B192C858E93F /* RLMUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 4B07984EEFB9695F64E793F3842BB381 /* SENAPITimeZone.h in Headers */ = {isa = PBXBuildFile; fileRef = 98CC1334B32283077BD3F97AF8D33551 /* SENAPITimeZone.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B1FC4B281ACE0F177AEEC4193412FDF /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CC05AFECB18C9ED7FEF3DC1CE084AD9 /* LineScatterCandleRadarChartDataSet.swift */; }; - 4B2C58E14DEF7A0FDEB7B779C6D32738 /* BarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0031756EB662D6B580E7710A10BDF59 /* BarChartHighlighter.swift */; }; + 0024A88DEEED386CA79BE0DFEF7AE337 /* SENSensorDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 492ADC11C9C24A59465F0D33556DD92E /* SENSensorDataRequest.m */; }; + 002E0AC336718596E8848EC0084885ED /* LGService.m in Sources */ = {isa = PBXBuildFile; fileRef = 015EE0A07A34B40175947D1DB3A2B48B /* LGService.m */; }; + 0059AE29FF180F27AE922B530223E405 /* KWChangeMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D2C39738904B957AFF03826909D3D2B /* KWChangeMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00E3F76540AE936EDBF3EB0F657D032C /* ProtocolBuffers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EF1444B5384BE14AE6FD51C9E74E370 /* ProtocolBuffers.framework */; }; + 0184685B7986816E2A6BEA9F98EC72AB /* SEGIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8971602E085776CC9D064C4B81CEF864 /* SEGIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01A018E12F76157E5BAE800D014A51D9 /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438EE7A86ADA2186AA85F8229086D52F /* PieChartRenderer.swift */; }; + 01A424FDFCD8E0B6797353BC581A1B2E /* ChartYAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09536F2CDB53EF1F89923BCE0A5E7066 /* ChartYAxisRendererRadarChart.swift */; }; + 01AFB4F259B9A3D4CBAE5EE37521532D /* SORelativeDateTransformer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3881483ACCFC5FA8A845092A9B7630 /* SORelativeDateTransformer-dummy.m */; }; + 01B7B95AB07577DD0382D6281BCA7E80 /* ChartTransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = E54B37D5330ABC478214DBE01C16A472 /* ChartTransformerHorizontalBarChart.swift */; }; + 01C7EF854FED721AA2ECED1304DC88D3 /* DFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F334BD4C61BDF5283AFFDC093893D79C /* DFUServiceDelegate.swift */; }; + 025C3CAD004D2C461D2CBEE895A74A3F /* SENAuthorizationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 061640276642C3CE835A044AAFC10F3E /* SENAuthorizationService.m */; }; + 0268ACF71BEA21D7D8845A2EFF73E089 /* KWMessageTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DE0A3FE8004360305FCD43B2B35A0F /* KWMessageTracker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 029CF81FE56C04EE808717B1B31B9E18 /* KSCrashReportFields.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF34F938B815B8CBD786D373E17930E /* KSCrashReportFields.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02D4D70EA714AF03579DD2D98874694E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 02FFB2C8AD4DCD373C98F88052D0C9F5 /* SENServiceDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 103B358B0E7ADFC1C07E1A3182A247B8 /* SENServiceDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0426CDA7716C24FF163FA9F8F8A22A67 /* NSInvocation+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C2BB420BF33F147B25BD984C483C3D78 /* NSInvocation+OCMAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04534596D9A2C203E614FC3A98AAEA4B /* Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01187E4F31F62A38C1230F596E0CA953 /* Double.swift */; }; + 0489663081FDDD2B13BA8645DF17B88A /* KWCaptureSpy.m in Sources */ = {isa = PBXBuildFile; fileRef = 588E5D57CACD475B1D7DCB42022C710F /* KWCaptureSpy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 04B2FABEDF474C18561E6960C6C6D98F /* LGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = D772589458602A99BA6C118DB28859CD /* LGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04BF64D9E89DDA31D5A253073A59F916 /* SENAPIQuestions.m in Sources */ = {isa = PBXBuildFile; fileRef = 02D07B006380ADCB51A9C444CD0A9A37 /* SENAPIQuestions.m */; }; + 04D33332808804CD4FE5506C7FE53F5B /* SENAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 4198B0C8219AED58787CEB919A08D23D /* SENAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0517AA0CAE149C6B327E60AEF20C990F /* ChartHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DC7166A9433D8C12D284143DE805CD0 /* ChartHighlight.swift */; }; + 051D53CA2F5656E2D8C826F7A9CF1BC5 /* KSCrashSentry_Signal.c in Sources */ = {isa = PBXBuildFile; fileRef = 6CD6773FE4014D790B7AC1F2986F5805 /* KSCrashSentry_Signal.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 056D59B1534B524062887E6459E08476 /* NSInvocation+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DC3EB78DD01D02892615FE843B09E26 /* NSInvocation+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 058B027A3CA3302166F962637F7924F7 /* SENService+Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ADAA50F2A799E9CDA41BD7218C4E3F0 /* SENService+Protected.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05DAEB917E5EB66C491B159D027DA1FC /* RingBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = D6630ABC61E3F2835A7A7477826C92D2 /* RingBuffer.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 05E1F318A5B49D224539C6A697B85CB9 /* brg_types.h in Headers */ = {isa = PBXBuildFile; fileRef = C05CFC459869641413E249FA0FA0DDC3 /* brg_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 05FE57F7E354093077A28AA4F55BDB70 /* BFAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = FA574DE99BB78672FDBF84C8722B4BAD /* BFAppLink.m */; }; + 067B5F6B11960E2554A01D69B3FFE310 /* NSData+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = E4FF4EDF44D4B97DA370E3DE2A3FFBDE /* NSData+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 067EF2D3BF15B548256EFFCF1C0F4311 /* KWMatchers.m in Sources */ = {isa = PBXBuildFile; fileRef = 392D67CFCA1BA91AF1C9AD183AD13346 /* KWMatchers.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0765348B12A3DC16AEB7D26CB2FF902E /* KWAfterEachNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E2EDF5D4191EA72CA623932CDAFE1D87 /* KWAfterEachNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 07CD518C07ABB447EB6AB5BFB750A4C4 /* KWBeforeEachNode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA896EB127524B7BF10DDB69B8E03DD6 /* KWBeforeEachNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07CFA580F48E188761DD99775EC1D5F7 /* SENService.h in Headers */ = {isa = PBXBuildFile; fileRef = EDD5615E2A8F11479FCA9144FCE2CC1D /* SENService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07D5555611CB57BED345E40487AE7D62 /* FBSDKLogo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A44DA38619CB209B949A04B2BE62B1A /* FBSDKLogo.m */; }; + 07F17729A8A0D10A2135308CA686354B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 08071E47368F2A474E720B2150285251 /* KWExampleSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = 778997680AAAA44D951304AB035354F0 /* KWExampleSuite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08101612FDCD0CA8DC2BB05B7F8EE82D /* CodedInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBAEEC720683EC9D019B25BC7D8FACF /* CodedInputStream.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 086507B7FF3C7B4E1593FFDCA110F9CD /* FBSDKGraphRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 23F794C220CA11EDACFAB2F06256A4A9 /* FBSDKGraphRequest.m */; }; + 087D6B3252BE9E8FE73882D8F9674967 /* KWItNode.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AEBC0306BDA990EBA13BE0EF681A14 /* KWItNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 089C2B57C74B33C05B9669C971157BCD /* MSDynamicsDrawerStyler.h in Headers */ = {isa = PBXBuildFile; fileRef = F35CAEC6D9081BF80E476524743A77E9 /* MSDynamicsDrawerStyler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08A4BF560668B42F515D53C8D7A79300 /* NSData+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = 89A7B3B704066D9A3551450C8FDB7C57 /* NSData+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 08BB01205A70ACD5F0008B273528B2A0 /* KWMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 654980C250A209F92EDD89C370A53C8C /* KWMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 091F4A9EAD206F8BD7E180035ED6925F /* PBArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 3932D23C9F30AFDBDDDD8245F0F33542 /* PBArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0980824CD06E84980AE97B6674F016E8 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C05561ABB3BB9566626F6D3D9F2BD5B3 /* Accelerate.framework */; }; + 09871862A54A77A6A958FFFAE0ED299B /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7173D15CEE9538607C61F57B5726B009 /* CombinedHighlighter.swift */; }; + 098A52066D8D62C709B83BC213145271 /* LSHTTPStubURLProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B3ED77A7082EE7DEB2BB85D722E7415C /* LSHTTPStubURLProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 09E1587DDAB04EEA5672B55C8FF40EB6 /* SVWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C51F9EF1950D1AB41E9E3737ED8B3159 /* SVWebViewController.m */; }; + 09EDE0F0D2057FEC468B5D6B51A85C79 /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = F91E7B009BD5CFF0E9D1012E5B201B12 /* DDLog.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 09FA4EDEC2C696EDCAE4195382FAEF89 /* NSURLRequest+DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = D37677D65E67015A8A4DC83951896D73 /* NSURLRequest+DSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0A3A63AFD3C1CC328A2D9F755E4F30AF /* SENAPINotification.h in Headers */ = {isa = PBXBuildFile; fileRef = EE8757BAE6C003CF9CB2A7E126FA27E9 /* SENAPINotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AC2B93730BCECCD1564EBD02386624A /* KWValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F5B584F7F2113D3A15A9FD6EB6530E8 /* KWValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B039A7D5F0DFE4678E9025084BD2DB8 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573F218997372DF6C922BC1C1FDFE7E /* ChartAnimationEasing.swift */; }; + 0B29E73D955B82F36B7A0B18541B0909 /* FBSDKURLOpening.h in Headers */ = {isa = PBXBuildFile; fileRef = 23DD2D50796358B39F913E73ECEA2947 /* FBSDKURLOpening.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B3A700337C244F8F39995883FBD18EE /* fileenc.c in Sources */ = {isa = PBXBuildFile; fileRef = BDFB20BEF0D88EF7ECF730479CC23309 /* fileenc.c */; }; + 0BAF816D6E151AFCE6921C819D1795BD /* SENLocalPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 91AC8B7166E4A9E01A95B4E5598A0621 /* SENLocalPreferences.m */; }; + 0C523C537E184C691CC8030659CD1E8A /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15594F3622AF4FAEAE37A3E5EFC4E0D /* CombinedChartView.swift */; }; + 0C57D5D677C17C9D8AB562228C2E2B06 /* SVWebViewControllerActivityChrome-iPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1F243912EE7B8A7980530B9394755198 /* SVWebViewControllerActivityChrome-iPad@2x.png */; }; + 0C9224034D58256946B3FB0506FB6658 /* KSCrashCallCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = 856FACF4C8125F5C460812DC28E44213 /* KSCrashCallCompletion.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0CE13EB2BD4A6BDB0970CF2504EEC159 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 0D15EC17A8C39F3B2F965CA4470C6958 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168E65A84E317B5F232002F9CB3DE015 /* LineChartRenderer.swift */; }; + 0D3C338CD26D26EEC232315817D5516D /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1150FCB3B7D281D554FBADF0F9BBC6CB /* ICandleChartDataSet.swift */; }; + 0D59FA7A7C11A3F1C7887A5B5DEDAB6C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 0E1341755AA032C0321422978BDC5E5C /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = D08965420294621F032CCF8B27C92828 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E22E43F70E61B51A3F9E134AD4CFE61 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4356D5A707051C87E953BE5607D4A4FA /* IScatterChartDataSet.swift */; }; + 0E314324FC03FD2E1C4B9035C1C096E0 /* KWExampleSuiteBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E8E8267834CC1C9A5F1BF7C604A5943 /* KWExampleSuiteBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E5A686675F95879DCBDABAEEC3F1379 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B9EB61766FC11C05A738B7E9A350200 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0EE8E235DC588CEFA7ED8324D377F30E /* LSNocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 95222582FE3DFEC1320BF7A329F4F2AD /* LSNocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0EF0FA3848035F3100357D0D4D3FE414 /* BugsnagSink.m in Sources */ = {isa = PBXBuildFile; fileRef = E342D7395C1CC8D4CDE7E88F440BB1D5 /* BugsnagSink.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0EF4141DD5C396BF594EAF4A43D82972 /* NAPickerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C03B5E0A641A6613D0DDE836B65155 /* NAPickerCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0EFA7B318C2BBB8D934D2A9569AB3993 /* SEGBluetooth.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E32E3649C5910A056CEFE9932C35A42 /* SEGBluetooth.m */; }; + 0F29B60D5FC948B2196AD36E8A7FBE42 /* ChartLegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8DF0CBDBC965EF753E5905E5C3C3B6B /* ChartLegendRenderer.swift */; }; + 0F31103A44C044DEE811C49E86E41C5E /* SENTimelineMetric.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D57ED45F147FEAB44C65AF543B572C /* SENTimelineMetric.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F5B16CC63F7C9FF267E6F606245EADD /* FBSDKLoginManagerLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 207E1E6317C4ED0DA0FB90B954FF45AC /* FBSDKLoginManagerLogger.m */; }; + 0F671E4757E37DD07B43ED54D67E0DD3 /* UIImage+ImageEffects.m in Sources */ = {isa = PBXBuildFile; fileRef = 494DACF56937AA4BEEEE90F23B69896D /* UIImage+ImageEffects.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0FB9BD598B7AF00C0E83FA0BF04E7E32 /* ChartViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E88FDFB3D10A018204CD31FF848B2C2 /* ChartViewPortHandler.swift */; }; + 0FEFE1125F648AB07DE2EB068E4C5D9B /* Zip-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 95D974FD45184163CA88E1B79604829A /* Zip-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 102BCA1410C6A2EC64BFDF9ADB45DFCD /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7AFA83F50ED668B1B23FDA919D4EFD3 /* ChartDataRendererBase.swift */; }; + 109C5A98B6A40962E14772E89D765B36 /* KWStub.h in Headers */ = {isa = PBXBuildFile; fileRef = E337168F0B5582458F2C4AD06C09BF93 /* KWStub.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10A11A792AE1B83F5B03E42AC796C098 /* FBSDKAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 968D1ABD70DBB0F1A3E187AA4C24E4CE /* FBSDKAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10DAA3F2F1356F6DF741C13C9E3DA50D /* KWStringContainsMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C1AAB9BB7D26C44C63BF4681A516477 /* KWStringContainsMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10DC91BFF735D35C008266EBAF1A967F /* KSMach_x86_32.c in Sources */ = {isa = PBXBuildFile; fileRef = ECEEBA4778296151676D99C6DEA5B727 /* KSMach_x86_32.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 11AFD39461933FAED78BBB9333EB22D9 /* Descriptor.pb.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B92E956F8ECA8E03243AAE63D0FF692 /* Descriptor.pb.m */; }; + 11BCEFF665B7F78174DE01189141AD29 /* KWHaveValueMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EE4A5BAB3BA8B64CF81CC4B234C1AC /* KWHaveValueMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 11F24F645E4E1AEE7C971B39338B0644 /* CBUUID+StringExtraction.h in Headers */ = {isa = PBXBuildFile; fileRef = D962C8823B63CCB85B3467679FC87B11 /* CBUUID+StringExtraction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 127AD881F385C8A0AF6859C3E5AEFDB3 /* FBSDKAccessTokenCacheV4.h in Headers */ = {isa = PBXBuildFile; fileRef = D55836AC01421E874A4C8DBAE4FF05D1 /* FBSDKAccessTokenCacheV4.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 127EEED77914399C504037970321E467 /* FBSDKInternalUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B6D706477B3B1EE4BE36F03AEDAAD55 /* FBSDKInternalUtility.m */; }; + 128EE63C425AD312E4C59BE1D9BFCEDB /* FBSDKCoreKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D1851F66D673002D364E8A24C02704A /* FBSDKCoreKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12FE918C45DD76F6D5078B5FA5722EFA /* LSDataMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F03E450A33A8C3D431576B35EB835B /* LSDataMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 130228D79720B8D816BC8DFFCA7E08FD /* SEGAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AE9CC709CA19997AD684E09C8103671 /* SEGAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 131270A424C7C2673118C6C85CF28FE7 /* DDAbstractDatabaseLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DEBE4581193B14746B8A112829E2EA2 /* DDAbstractDatabaseLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 139654EA75A7AFC1613178537DC97860 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 14065C68774A9693110C02E57368EAFE /* KWBeforeEachNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 67766D8DAD9E1221E70CC3BBB244FE57 /* KWBeforeEachNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1450ADDC9FDF6038251CCE7EACD8A70D /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D84CFFB404CAC88E4EEA0A50CC7955 /* LineChartData.swift */; }; + 14A74B0831212CB3291B182E260583DE /* ChartXAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 286BDBAC72AA751062B90DB32E87663C /* ChartXAxisRendererRadarChart.swift */; }; + 14AE92FBC9843F67965899EBD0EAA282 /* KWCaptureSpy.h in Headers */ = {isa = PBXBuildFile; fileRef = 8910F9DCA675A283F8AF8CA4EDB19286 /* KWCaptureSpy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14B007213945EEF58C5A28DC5CBB0A2A /* SEGAnalyticsRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 783A4394DC4195056589A42D7FA3BF34 /* SEGAnalyticsRequest.m */; }; + 14E413D38C130EA26661A34531CE7AC5 /* FXKeychain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D57B3716E7601A56E914D1878DEC86B3 /* FXKeychain.framework */; }; + 14F92979380FFB1F7C4FF29BF307F9BF /* FBSDKSystemAccountStoreAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F74FD5B248F8CA8F665A38023A806C84 /* FBSDKSystemAccountStoreAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 15504633195ED8B3E2AC5290BC70BE39 /* FBSDKPaymentObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = DF6998AC60B65B3755C0DDCBECBA77C1 /* FBSDKPaymentObserver.m */; }; + 15ABCD87B022D05D82A45493BDF038F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 16121EA438040183CA067F8E8BCE6D3F /* KWCallSite.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A87507ECFF5737557202573FE409125 /* KWCallSite.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 16465C2782FEA5286D07B1452084F82C /* LSMatcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 94C83F4D5AC687E14CC0768704F50A3F /* LSMatcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 164E5E34792DF7CD4A372B5154FB6B2E /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A15A7A4358888C621562F09F441B2B /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1678C9D1AA91068482512BCF848EA6E4 /* LSStubResponseDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 948030C51C2CA2421DEB4282CDCA0A48 /* LSStubResponseDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17141F63654A56112662BAEFE83A79B5 /* KWEqualMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 873A4DF4591F28FBE2F1FD007FFD35B2 /* KWEqualMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17199AB3E03EAD5219C4394982F84B91 /* BugsnagBreadcrumb.h in Headers */ = {isa = PBXBuildFile; fileRef = 6826E19A38CE2C9451C669B5A0B03E09 /* BugsnagBreadcrumb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 172AD672E6FD4CFD24882CADA3FE0FE7 /* KWConformToProtocolMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 2458305175DE118921D31A89BEC2FDBB /* KWConformToProtocolMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 174B7C06AC1794E2642C480D3B5BEFC6 /* FBSDKButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 28CD68C2FFBA07F44ACC8A15161C7BEA /* FBSDKButton.m */; }; + 17685D13725BC80D41774C81B64357AB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 177312AB76A42B23284A77857F6ED2F6 /* FBSDKErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F94C48734A41114106DC04AFD23F7F /* FBSDKErrorRecoveryAttempter.m */; }; + 1836667D6DBDB64618037FCE84E82DCE /* FBSDKGraphRequestMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = F4CA450E162860FBA46759FE7707BA8A /* FBSDKGraphRequestMetadata.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1891999DCF7C9B28264E3C77D40780B9 /* KWWorkarounds.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CC974D9021F7EBE4956030F00A920A6 /* KWWorkarounds.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18B3492C70750A692781B7C9521A3A03 /* SENAPISpeech.h in Headers */ = {isa = PBXBuildFile; fileRef = 338ED2C90049EC473778979E9607192B /* SENAPISpeech.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1905FD833FD38751C1A021536F80543A /* UnknownFieldSetBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = B8FF85448A0D0205322455A104E16FCC /* UnknownFieldSetBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 192871ECBDD40F33A3C6D2EE763A1977 /* SVModalWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DD89876610F3E3D8DFC0779D0FBE68CA /* SVModalWebViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 192F3E2F6ED8B79CF0316849F6E6F49F /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAB038E29C8E3EEA4F4A4FF85F52B80D /* ChartHighlighter.swift */; }; + 19349AB0E76F6B3E5B42909B06BA6AB1 /* FBSDKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = DA77CEEFBAD60276552391C64D0FAA2B /* FBSDKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1938C331F13F8CAD99FF59DB7F804B65 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA9F303109B4389F27AC8F0BF5D83DF /* BubbleChartDataProvider.swift */; }; + 194065DDA9F162DC9384087BC4328EC4 /* HorizontalBarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E0071E67D171F0988844A161EB396C /* HorizontalBarChartHighlighter.swift */; }; + 197BC08F5D8139B1FCC2D4653EBD3D68 /* SENAppStats.m in Sources */ = {isa = PBXBuildFile; fileRef = EFAB6EAEA0A424601044887194D22E03 /* SENAppStats.m */; }; + 1981272E78993F2D0F1BA2907F688669 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 1A2FFE1C56ABE25EFBE106313E19BCD1 /* SENAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = C76CA027D521DFD2D4F49C78859F9130 /* SENAPIClient.m */; }; + 1A380040CE8539356341E406346AC818 /* SEGSegmentIntegrationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = C9C749AC111AAB71D3F7C27A38F979FB /* SEGSegmentIntegrationFactory.m */; }; + 1A3C476678A6DD294912C7553B02C0FC /* DFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = F32C9E65963C73B0EDD7B5B4DB151BCD /* DFUPacket.swift */; }; + 1AD57D3690C7297C3D109AA28CA9CBAB /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = FA6C5218CC4F9EBDD4BCF4B81B525D67 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B0BD4AC4A3DAB26683F7AB0C24FE7D9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 1B2218588F314218F43055D6049D72E4 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 95FDF5C839A4C707BBB3195007A4E9BA /* ioapi.c */; }; + 1B33D31B1B504A32D6B3D6E03B65B978 /* SENAlarm.m in Sources */ = {isa = PBXBuildFile; fileRef = D97836B567BC2BD432A20F8C934953AA /* SENAlarm.m */; }; + 1B3C5C87BE89F990A21D22037ED16B74 /* FBSDKProfilePictureView.h in Headers */ = {isa = PBXBuildFile; fileRef = ECEAD89578B3D497E5A9CCFA31EEBD67 /* FBSDKProfilePictureView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B9962A3F4613EEB6FDCA62C174ADCC1 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 76ADAAE601541283E0881E8E1BA97BE7 /* UIWebView+AFNetworking.m */; }; + 1BBC379B58D0F9CB3DB8007DD3C8D79A /* FBSDKCoreKit.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F4822E550E8F3A1FD1506D9A3BB96E /* FBSDKCoreKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1BF830747CA8768EA7ED3375E3C08444 /* SENAnalyticsProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B95149C26B5D6D62AEAD1BA82E1EB01 /* SENAnalyticsProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C0122691143971947E9B43F3378798C /* AbstractMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A10463CC2F13EE58B586BB7EEF9B9F /* AbstractMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C2FB9A88AA9C09FD0A7F0293D247878 /* KWChangeMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 520B1A2F022DA8E2DA6FA7949B9E1E4E /* KWChangeMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1C4C830E0C682AB68CA553014DB5BB3A /* FBSDKUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 93105FCBACC69AFE4CCE4AF5C735EC58 /* FBSDKUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1CCC9B90F6E6AD8319811C85F5CEDFA8 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 135043D102C75AA30101BAC3EB989A97 /* AFURLResponseSerialization.m */; }; + 1CFE6EE22510C232D89ED0F548DD58A8 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E1BD0D41ABA1831315717543BD6157E9 /* ja.lproj */; }; + 1D3AE7B1AE37BEBE027E2AA16E46A578 /* MSDynamicsDrawerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E5604F788E80E758BEAA63F705B561AB /* MSDynamicsDrawerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D50E332ED707262089DD5AAF8E0BF3B /* KWMock.m in Sources */ = {isa = PBXBuildFile; fileRef = BF65420693CE005B8A6AC725F407C6EF /* KWMock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1D6964ECD88351955E7988F44B0956A1 /* KWAsyncVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = B86937AF5F90ECD087A9D1EF577EB204 /* KWAsyncVerifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1DF1E10C522E006582301FF294BA118E /* NSProxy+KiwiVerifierAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FBDE7BA010291EDCBB5E933A4B330 /* NSProxy+KiwiVerifierAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E1EC8BA87E1ED69B8585E15C083B6EE /* ConcreteExtensionField.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E3EB19CF459D83889124F4219854EE9 /* ConcreteExtensionField.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1E4F961E06A0F4B583698F2CDCB1E75C /* KWExampleNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3261EDFB84127F7801CAC189A98F0F /* KWExampleNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E56B3786E60E05C82E1BE05457FBFE6 /* FBSDKGraphRequest+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4369868EEB18342D827C4992C8BB2E /* FBSDKGraphRequest+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E607643F40450FABE3892E04D78B7C5 /* IntelHex2BinConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = F7A0A975B07D45CA5DDBBFBA5AFAB4A5 /* IntelHex2BinConverter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ECC20ED3FD1E7E35E3267FA78520D41 /* SENQuestion.h in Headers */ = {isa = PBXBuildFile; fileRef = 21AAD66A77BEBCE185B9704AA2C72EC6 /* SENQuestion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EF5B71F6C15CE19AFDA984A71D5065D /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A27423CD90B88205B4321C95931B1810 /* ChartDataProvider.swift */; }; + 1F1065DF9F98C8CF5EC430560BB3FBE6 /* ChartDataApproximatorFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA9E99C870067DDD91D2787CBA9276D /* ChartDataApproximatorFilter.swift */; }; + 1F286D5D74B648B4065A7BE7FE8D41D6 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3881FEC60346A6F70CF179183F93E8ED /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F4F8CA63D55E39CA52E125A312C7E70 /* NSJSONSerialization-NSNullRemoval-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 32BEFB96E2614FF65FDDF14C81E8AF17 /* NSJSONSerialization-NSNullRemoval-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F8A565A56EB245F0B6CC40A6E73D367 /* FBSDKWebDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DD6919BF046455CCAE54A940F9C2E9C /* FBSDKWebDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1FC38802B91E70C33BF0B7775113B85B /* LSDataMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = BBC21A823C05D778E937BEEB187942B6 /* LSDataMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1FD8A73234B18F0D706650AD7F2101EC /* LineRadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75E8BF30599CC15197BEC96CF44EB60 /* LineRadarChartRenderer.swift */; }; + 200701BC0992E03EB02990B67DD9A294 /* SENSenseMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D7EB3E7AEB235451731EDCFC29D3E7 /* SENSenseMetadata.m */; }; + 2017400B223BD973E1BE3DA3B6391982 /* FBSDKViewImpressionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4949918605DD8965D300B1B5E77EBE72 /* FBSDKViewImpressionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2032F0E7975AF810511966ACECDF29B3 /* LegacyDFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66EBA0556CBC5C94EC161FCA1CDA42A0 /* LegacyDFUServiceController.swift */; }; + 2060256010389C82093AF518D305DED0 /* SENAPIAppStats.m in Sources */ = {isa = PBXBuildFile; fileRef = 84FE7F01CA8C6C3438AE9FF8FC5E69AD /* SENAPIAppStats.m */; }; + 21D9AD3C1623A139D6998064AC19D959 /* ExtensionRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A339FBD99325A2182A7E666E8308003 /* ExtensionRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21FF199F199701113442B3AB043E089E /* SENAnswer.m in Sources */ = {isa = PBXBuildFile; fileRef = 83ACB32BA762182880FA1132D9D71D19 /* SENAnswer.m */; }; + 222417169B80E034D421A5042F5E0A6D /* FBSDKPaymentObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 02A9A73627703300108A74BEA7E5847B /* FBSDKPaymentObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 224E586797683D87846D9B05978DD7B3 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = DE079CC21EBBD85B949FD1D976C5853F /* unzip.c */; }; + 2289EFB799B1241629240516FE511054 /* SENShareable.h in Headers */ = {isa = PBXBuildFile; fileRef = 434271472FB3533B6CA52F27AC3FA4BF /* SENShareable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 232F2C7DC3197C9BF16C679B5D765A85 /* SENSupportTopic.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DB07497258DCEC7996C83186C394878 /* SENSupportTopic.m */; }; + 2335ED83CE054C913753FFF78ADAEC7B /* Field.m in Sources */ = {isa = PBXBuildFile; fileRef = BBEB0B4911E4BA048520B6E56D353F9D /* Field.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 233A5F44B898C98EA05A4CD20A456679 /* CGFloatType.m in Sources */ = {isa = PBXBuildFile; fileRef = 729F58CC5730FA85519844F0AFA19BB9 /* CGFloatType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 23631528D008AE9AE4E9D826B0CED210 /* SENSenseWiFiStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 157D0B40A96BC232559268267CE3A25C /* SENSenseWiFiStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 236B153B26CC836D63DE26FEFDA34A01 /* BFAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = FC974942349E6F74728F93375686691F /* BFAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 237B70DBEC5AB6B637F1D25AD8E0CD37 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1340D5A4A12AE74230BA41F8F042C3E /* ChartUtils.swift */; }; + 23A5047562B6EED500DAFFFD9C2D99B0 /* FBSDKTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2054A824AD715E77D855119B82CEEFD3 /* FBSDKTooltipView.m */; }; + 23A730E246AD2BE5B16C3B7D4CF8EC3B /* KWBlockRaiseMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1415153B5A66DB82C17A725410D94BA4 /* KWBlockRaiseMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23AB8BF7CCFF82EC1CD732B82D3ABEA8 /* FXKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 98156C9BB85902474629FE99F7CC9722 /* FXKeychain.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 23ED8FA861FC2434753F233573124631 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A446714ED9D089EBF19A50A27819E7 /* PieChartData.swift */; }; + 23ED9E36AF7C589E2682FAFD6D452263 /* SENSenseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7357B28B445072BDC2324E9CE165FC69 /* SENSenseManager.m */; }; + 24BEB58370519146C4FE44760246BAF9 /* KWMatcherFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A016502AA2726AB5399BA3B8B2119A2 /* KWMatcherFactory.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 24C011F5569E80FB478A3DE21233B468 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C2A7221A296BBF89F59D0640F774566 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 24DABD250537AE960043A922D4157D9D /* NAPickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0147AEC32573F4ED372109CA7860F7CA /* NAPickerCell.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 24F32588CD353F5FE5B3FC9D454F4A53 /* FBSDKAccessTokenCacheV3.h in Headers */ = {isa = PBXBuildFile; fileRef = BCDE5E4D0AF22B1A081B5F811320FA53 /* FBSDKAccessTokenCacheV3.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25B2ECCDA079DEC17951FFAFD54FBBF2 /* SORelativeDateTransformer.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 9764B0461832699549599577CAA19A87 /* SORelativeDateTransformer.bundle */; }; + 25B919FA691113D9870C7CC306187B1B /* SENAPISupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 690E8B60BA5A74CA606F6BA1EAFB4512 /* SENAPISupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26324AC335B131CB50DE58AFB1037FFE /* SENAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 13238306B1C43C7867055268CA2F657D /* SENAnalytics.m */; }; + 26570631AA67EB72D83308FFB63C1479 /* SEGAnalyticsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = AA5D9FAEAC598D1EEE2A92A6586278EC /* SEGAnalyticsUtils.m */; }; + 267A9D43C9132119D8112313FA674608 /* ExtendableMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = B5B3F5544592C5B95E150873AE34B576 /* ExtendableMessage.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 268E13E71581DBAE4879E574901221EB /* SENSpeechResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 5581D3DBBFE4D9235DD856ABD83B11F1 /* SENSpeechResult.m */; }; + 26CFA16176B4B2DEF3F299E68C827D8F /* KSCrashReportFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D09FC8C0B0D65B401AB2A03AF90305 /* KSCrashReportFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26E6708810CB26BD78D50AE8C7FC983C /* FBSDKURLConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E6B349D1158A12BAB0F514F97DD4C2 /* FBSDKURLConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 272D6B420E6D7B74F240B5167A0B161B /* AttributedMarkdown-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C7350467646C636DB48FDB8282C9ED46 /* AttributedMarkdown-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27346D298CA752A7E64C7A0803067056 /* SecureDFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D8F03AFE82FEA5AD31AA1EDC177DCA /* SecureDFUPacket.swift */; }; + 2760D9825CB0A3015E110EA6310314E7 /* SEGAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 537805D689B845335B86408CF45FBCD2 /* SEGAnalytics.m */; }; + 2797563A35ADAB4DE75BD99DE31AF9EC /* NSJSONSerialization+RemovingNulls.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C0B9EB4F70A6CCDE94EC3871F40B238 /* NSJSONSerialization+RemovingNulls.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 28A07BF7B81AA8D622063311277F6F37 /* SORelativeDateTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 09AB4F17064ECDBD7527EC2D5FB64927 /* SORelativeDateTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 290E56206D7C81660A4088FDA2CF5B7A /* DFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0356F59B497D5D73B5F2620AA9A49F /* DFUServiceController.swift */; }; + 29202F06AA00503D5D6E7E525CBA0EAC /* DDMultiFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 954914C5496DBC1A6DAFB34632F47607 /* DDMultiFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 293EC6477BA8ABF66D24748C31C47C01 /* SENPeripheralManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B852A764E7F54B50530F7A88C25FE288 /* SENPeripheralManager.m */; }; + 294515D20B14DEE1439B443F731F51A4 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2080CCF73CCE217085343EEA9CF93DA5 /* ChartDataEntry.swift */; }; + 2961AD5883F9EAEFB20080BC73AD82ED /* BugsnagMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = 35867910FA69B21B57FD62C553A82794 /* BugsnagMetaData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2996C3AB260B66EEFB319AF6C7BC5905 /* KWLetNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A77755F9611E7073442779AEE0F18E /* KWLetNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 29C137910A3C7A41E83DE15A58A274DC /* KSCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 9039E31D96D74894021EEC416041977B /* KSCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29F60BC0378533F3A8740F7E247037A5 /* FBSDKBridgeAPIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A63FAD576C28157516E1F1E5A69B26D6 /* FBSDKBridgeAPIResponse.m */; }; + 29F8F552DC09135FC8711986E90C49EF /* UIImageEffects-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D04B31A797E7852B9B23234D38012E /* UIImageEffects-dummy.m */; }; + 2A73845CB9CFD507A9A3F5A1A5BE7F5B /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4A2E9373AFF9645443332143D65B7EB /* QuickZip.swift */; }; + 2AB23AC41A224E94A515B333E495116C /* SecureDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA4DF27302FEBF5CBE4AEC7EA80EC3A /* SecureDFUPeripheralDelegate.swift */; }; + 2AC3BCB8FC4F732BCC18396A228CC3ED /* SENKeyedArchiver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D50003F2E50559A0D5B67AB301DB57D /* SENKeyedArchiver.m */; }; + 2AE62D1AB8DC4D65C2A8B9CE68A6B047 /* KSCrashReportStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 26246BECFAC539F5BE23BD7DB8CBDF1E /* KSCrashReportStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B85E69CC4D9418C966CA430A8B29584 /* KWAsyncVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6C6F2F87ACCA520E2BF96AA8086D7D /* KWAsyncVerifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2BD3C64821C3FD4CA058803A8C0C7862 /* SENSensorStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0423E405619B9CF08C235FD57B346F /* SENSensorStatus.m */; }; + 2C3B89B7286299EADEDEF4E62715EEC1 /* KSString.c in Sources */ = {isa = PBXBuildFile; fileRef = 27BB3CCDB5C3766D6C07FCD7F0ADB82D /* KSString.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2C5D63A11E8E556D619C8615B335BA84 /* SENSleepSoundDurations.m in Sources */ = {isa = PBXBuildFile; fileRef = 210538C99A7800DC6EBE06C85F0CCFB8 /* SENSleepSoundDurations.m */; }; + 2C7AEE20794F03552F162FB3F80354E8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 2C8502237686F5FDEEE5229544DA850C /* NSURLRequest+LSHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE17660AC31FE0987045850038FB2F8 /* NSURLRequest+LSHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2CF07215A3E56ABF0F16CDD8EBE97282 /* MutableExtensionRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = F9C3275A280F0B1BC08EAC94142A5F21 /* MutableExtensionRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D083CD4AB01FDD16631142A55E4DCB9 /* KWWorkarounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F3514F5512423AD843EE18BF163A231 /* KWWorkarounds.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2D0AE6CCCEE22F8B0057B1E2905B1E7C /* KWProbePoller.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE9F5A8861B7867DB739C3FFDACA5F6 /* KWProbePoller.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D1EC62DA5C77A1E4205A8CBD46279DD /* KWBeWithinMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 713CD36A92527DF40A2E07D59A5FE404 /* KWBeWithinMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D30E069F3B9C7C2A16E4858411CD2D5 /* FBSDKBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = 36C21A79DA12F0AB84FF3F8831F4CC03 /* FBSDKBase64.m */; }; + 2D59F33A82015DDFFE73F6D33FFCCEB2 /* FBSDKCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 709283AE668F1BC1B9EB5A2D8864146B /* FBSDKCrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D7E5789E25E9DEE11C9BABE989B4EF0 /* KSFileUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A15DAC441C5D0F1EFC8CB3BD7F3C7553 /* KSFileUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2DA06FD8A947058ABA91C300A846EAF7 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E94D7029E29FCDB95CE98BBE37E069D /* CombinedChartData.swift */; }; + 2DB80C1AF3A0F915F416EDA077ED3B84 /* SENAPIAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = 34EC324A69F18EF7179316270B698642 /* SENAPIAccount.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E263670F5873F90B0D4B74BFA59703C /* FBSDKAccessToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 06DCE2BC1E366352525EB7796FE23C62 /* FBSDKAccessToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E28EA67D4B7CC9C089F7C38DE31887E /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E499F30C3EC67C802D5090A88C418DE /* BarChartDataSet.swift */; }; + 2E3D6784578E52C5D8A337F7E30FB352 /* FBSDKBridgeAPICrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A1F2470E70BEB4C0D126F6FB61CFEC /* FBSDKBridgeAPICrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E5ED571A6F40AB00D402689EF1C54F3 /* KSCrashSentry_Deadlock.h in Headers */ = {isa = PBXBuildFile; fileRef = C74660D095E15BEB998BAA21735D63EE /* KSCrashSentry_Deadlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E625816865270A322E68D14C9EAD2B9 /* NSError+SimpleConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = CAAE7588E17B834E174E234999E91715 /* NSError+SimpleConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E6374976FA7761B129245BD04E1909D /* zh-Hans.lproj in Resources */ = {isa = PBXBuildFile; fileRef = EC290D01BC7A83145F8248E0D3824F78 /* zh-Hans.lproj */; }; + 2E6554FB4F5694A1EA5ED4E4EDB76BEA /* SENAPIAlarms.m in Sources */ = {isa = PBXBuildFile; fileRef = 4665849D23B47A9390AF86A657357B35 /* SENAPIAlarms.m */; }; + 2F2FA0D80DADEDB9BC220A2AFEF0C53B /* KSSystemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C4A793BE5031FFAB00309D1CA5219025 /* KSSystemInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F4A1532CA863EB3126E46AEBE5C6395 /* BFAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = 180B1246D297BF6F5E129F56DFAF2285 /* BFAppLinkReturnToRefererView.m */; }; + 2F63E6231E4C5F2C71FBA02C78F35C82 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD1896DB99D8C53FED817DE0CEBCD2CA /* BarChartDataProvider.swift */; }; + 2F9E36541CC8C9F0EF8ACB5C9085348F /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C15D030E1F39F0F0BDDB581CDE2DB8D /* Zip.framework */; }; + 2FC45C309C084647236DA8E329F950DC /* KWItNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 994819FE2E1A6B29E13964BBF1925435 /* KWItNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2FC7B3B84DABCA5190FDC589C928DCB8 /* KWMessageTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = A4EFDD2FBB6B904D5C411C2B5FE70EBF /* KWMessageTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FEE1823B7AE50FE54A7502B870FF56E /* DFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90D468058BB021EA15FB55D7544E1B7B /* DFUControlPoint.swift */; }; + 300AF571A8FDD84B0203D3061FF8EABC /* FBSDKLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CA0D0F56C727A79C953933607C354F8 /* FBSDKLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3013C3ED958A225D965517855AFDBE61 /* FBSDKLoginCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = A0858C20B44828570EDC2D33D92ACD02 /* FBSDKLoginCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3021C8DFB79C857848C36351AE442A9F /* SEGLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B8709C22DA5CBBB213CCEBDF61E61AD /* SEGLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 303725FEC48395DC2875D6344714BD72 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9CBE43CDD883F76008C74100FBAE83 /* CandleChartData.swift */; }; + 303F0BCF3AEACDF596A4893F48D709AE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 3088996EDA7F66606F51A19E254F0A24 /* DFUStreamZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1D986AB04C62A132CD0F8AD7A98512 /* DFUStreamZip.swift */; }; + 30C55A82BD2A7FA98C218B37D24C3FB2 /* KWAfterEachNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 413FE6CBBACA1DEE75628ED8624B4962 /* KWAfterEachNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30C588115D124D18659E39A6F4CDE55A /* LGCharacteristic.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C5B8109B13BB75C6C86615EE9C0DB8 /* LGCharacteristic.m */; }; + 30D7C3A7F522B305EA3C612BFCADF8D7 /* FBSDKDialogConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43DCCEEF90A5DC41614FC95D6AC67F70 /* FBSDKDialogConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30E68E52B3C64C08693460DD25C5669F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 311380647698B8589E111BF0346EB487 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8E7A35D74B7C87D42ED9199FB81052 /* ScatterChartDataProvider.swift */; }; + 317EECFF88BA46A96FBC0BAC72148ABD /* SEGAnalyticsRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = FC4794256070F45472C414ADB99B7B39 /* SEGAnalyticsRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 318B251AF24A4942ED256404FD3F1CD8 /* KSSingleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A747FDD01504AFC744D3C2C36C2CA9C /* KSSingleton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31CA0C0D38703F2C328EB564D925CC7A /* KWInvocationCapturer.m in Sources */ = {isa = PBXBuildFile; fileRef = BDFED5A4F565CE76E1560649AE37263E /* KWInvocationCapturer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 31E12E0364384CEE0ED07B7777D116CB /* FBSDKServerConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D58A7C7AA9658B96DE93BF728411133 /* FBSDKServerConfiguration+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31F37588B7707CEB9512FBA96FB3582A /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C2A4C054230FE487F1779D00EA527 /* RadarChartRenderer.swift */; }; + 32014B05FF73BCD97B318874ADC9BC47 /* ExtendableMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 648FB8BDDBFC2009FB0953B20F61FE96 /* ExtendableMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 323FA563EBAF23E774AF081E4A1A26E5 /* KSCrashSentry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5E91D6179B80CD3C97E0D1CE39E3975 /* KSCrashSentry_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32F1BBEADA52F60484D44E373876DE5F /* markdown_parser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8368864842AB12218119E28A262B1823 /* markdown_parser.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 332D0BD8E65D627910D76D72F51D502F /* ChartDefaultXAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BACA21575B977B810A42B28A2875F08 /* ChartDefaultXAxisValueFormatter.swift */; }; + 3374F7CC86218919BE363BD32E7394EA /* SENAPIQuestions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5022725DC199D74BCE68B2612CB0A6 /* SENAPIQuestions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 337C3B1D36180FE1F56F406909227D59 /* KWCallSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 329D9A466D625A0457B170849DAC81F5 /* KWCallSite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33997F96816CC1F4176ED1624DB92F60 /* KWIntercept.h in Headers */ = {isa = PBXBuildFile; fileRef = 292A2DA2D66D340A98E9835EF141BC95 /* KWIntercept.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33B93FA26A97B679FEA5ED59AFCEB8F3 /* SENAPIAlarms.h in Headers */ = {isa = PBXBuildFile; fileRef = F587A2B11FB490E9BE5C95A2B686C890 /* SENAPIAlarms.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33EA06F3A0B1CA567F15684F163224D7 /* KWFutureObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 947D0354D7F5F1D3DBA51BC8B9A1CDCB /* KWFutureObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3413B2393A1CD9C53E6D85D21659FA83 /* FBSDKLoginCompletion+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 063AA0FEDE1FD7DD48DDDE31831C09EC /* FBSDKLoginCompletion+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3496D8AB8E915FBC194345DD119B755C /* DFUStreamHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0862016D3FCD28EC338BF9BA8816ED /* DFUStreamHex.swift */; }; + 34999E11E91BB7F55FB88F25F8C75F9C /* FBSDKContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A6251DD8BA043A333E7C56023B773E1E /* FBSDKContainerViewController.m */; }; + 34AC6EBD9F8A1628BC537A839C1EC4C9 /* NSObject+KiwiStubAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F73622B73978F427E08F7C8BC4CD07 /* NSObject+KiwiStubAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 34F8C089BE692AA698A6FE4DD9BE18E3 /* KWExistVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 76E7D4C62B86E9DCC49F46204CFE5F41 /* KWExistVerifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 352A4963A9B909B066B8F65349711787 /* KSSignalInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 71B338959780FB7A9328D16A8717F90D /* KSSignalInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 354A949F90ED32604633338249B9346A /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F54092C6F6296BDC5603E44198228594 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3561FA1A79DD89A11A4A7D2D961D4362 /* FBSDKLoginManagerLoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DCE2C3E986B798D1ADAF4CD7BC078AD /* FBSDKLoginManagerLoginResult.m */; }; + 35A5435D99B66BCE97BDEFD7E2283A0A /* DFUVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1BFB91BA98EBD8BEC804B650A85AD7 /* DFUVersion.swift */; }; + 35C77A1DF538FA69F440907419CF2BA4 /* fileenc.h in Headers */ = {isa = PBXBuildFile; fileRef = A64F29CD1043CC1D2F657760ED3B8D8C /* fileenc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3601DA353EF72110E87EA4BE722E4968 /* DDContextFilterLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = B0183AC85783EB3AB775C3734559D88D /* DDContextFilterLogFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3653983A4018E18D4B64BF79189FC1FC /* FBSDKAppEventsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D148113F671646174A7DA73C5AD7DDB /* FBSDKAppEventsUtility.m */; }; + 36785E3CC765273F0C86F65D16725CD3 /* KWBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FC241E195FACF562830BE2E117D199 /* KWBlock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3688C6C80C8E2AA0FF0DFEB1731D81FD /* KWFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 4600DBB61767E5E90887A50E71CAE170 /* KWFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36A4D2D01C2B4553E571C10B7E6F4685 /* KWExampleSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CB6E2BBABD8C780EDC41B467A54838C /* KWExampleSuiteBuilder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 36D7A88A537AEFFAFB3427EE11AB7E3A /* Charts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C062B11BD21931FD957112EA04672617 /* Charts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37605CC5D62C6D2ECAFB63E3F01897B7 /* LGCentralManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 039953BBD1A7BDB50F1CF23E11BE2F0A /* LGCentralManager.m */; }; + 37714D3399BD199BC69E0C9596A51810 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF7B46ADCA7AA57D4B6C44BEFB603573 /* UIKit.framework */; }; + 37C345E332F47B8A52F6DF18466FA93A /* UICountingLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E43A3CFE7C388A925D4016870B17F760 /* UICountingLabel-dummy.m */; }; + 381A4BF4C9EDDFF567611319BB5F9101 /* FBSDKLoginKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EB98B0F7BF1EB13A4BBDD85DB83CC580 /* FBSDKLoginKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38550D12478B130A4D4D0D5092F6E56B /* FBSDKDynamicFrameworkLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7769AB92618B8FB41B20209CE32C05F4 /* FBSDKDynamicFrameworkLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38639604B03BC43076FC71717C0F6D94 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB6A26D0EC85C92AC8A47CCEA760E25 /* IChartDataSet.swift */; }; + 38F19EDF81FBDF22557AFAEA7527BB67 /* ExtensionField.h in Headers */ = {isa = PBXBuildFile; fileRef = 2271DF5221B362C529B87179CA152846 /* ExtensionField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 392C576481D196BA321C6881DE043C13 /* NSRegularExpression+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = D6F07098D3082A6483DBE80BB8AFFE3F /* NSRegularExpression+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 39CE944F4A255CD05EF5F699B5CA1302 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 3A39656484AE25F88CA87C181C3870BA /* BFWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 9322212EC63E6098AEE7C2F12B1241C3 /* BFWebViewAppLinkResolver.m */; }; + 3A4E9BFF4A2FF2616217559B8BA1F939 /* NALabelCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FA2BE27CEC8725B76FDB87EBBD04E8B /* NALabelCell.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3AAD894C496B9C67AB3BBD2873707AD1 /* SENAPIExpansion.h in Headers */ = {isa = PBXBuildFile; fileRef = 3089D73EE4A415E1964BB9CF250BCB4C /* SENAPIExpansion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AB8975A8A155D3696AFB61A8B5893FD /* FBSDKAccessTokenCacheV3.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2B034F117073CB7F38EE1F66887A0E /* FBSDKAccessTokenCacheV3.m */; }; + 3AD95F6D319AD8965148BF0FDF6BF5ED /* SENSenseMessage.pb.h in Headers */ = {isa = PBXBuildFile; fileRef = F0A457C138C5DF94685611358E63C82A /* SENSenseMessage.pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B0AF3483D586ED76DAC62F027EEC8E4 /* NSObject+KiwiVerifierAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6944DFF218B86D54786D9B6EFE8929AF /* NSObject+KiwiVerifierAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B16C0C526EEED38B9F50C3FA1F3030C /* SENTrends.h in Headers */ = {isa = PBXBuildFile; fileRef = 3359706735C31C851683C69413394ECA /* SENTrends.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B28410FAFB02CB90FA6AC399180571B /* KWNilMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F413F480320BD0F9F9F636D338E4D32 /* KWNilMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3B30741A24459FD8C2D9FF25D9AEABB1 /* MutableExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = BEB7D908F341B8EC9E5DB660EBA99588 /* MutableExtensionRegistry.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3B326BD3C8053F89C285C4F8AF382972 /* UICountingLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F439A712D796F9F97ADBE689E5F2719 /* UICountingLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B6EBD681C98F5C86003DAEBAFAB67DB /* LSMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 76E021734DAC9A375097773DD9045B92 /* LSMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B781763F8F7F91DF3D9347A49F97C96 /* KWBeBetweenMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A654263015F2F3095665B4A8E1D660DA /* KWBeBetweenMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3B969E1208A3BF1B27BCF4E3ADF7EB07 /* Bugsnag-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6528415ECA2228EEC66563ED33B20895 /* Bugsnag-dummy.m */; }; + 3B9F4C0EF289E60FB017BA23567F24F5 /* RingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = DB73E0191CD7F6486779293FCAFBD583 /* RingBuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BAA33D40CA8585554B5A0697A60325C /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 562A59A1D697000971D3D4824CD652C2 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BC43EF2A1D2112426108E22CCD9C8A1 /* FBSDKLoginUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4406BB72FE5703EA91E7B41D600D2E /* FBSDKLoginUtility.m */; }; + 3BE7C8726E10BE46B198D1FD5E45220B /* KWBeBetweenMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 9463EBB8ABA1D0B1EE47AC89D5892044 /* KWBeBetweenMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BF640092C573CE86CEA548B0E6376A4 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC1C11B6CEF66E80F7D7CC68FB1B8E74 /* RadarChartDataSet.swift */; }; + 3BFC9A76135F419219CAF8E0462DB22D /* KWProbePoller.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BF13ADAFC3E7C4B57616F73AEC98308 /* KWProbePoller.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3C4311DA5499DE28FA37598E9DF19B63 /* FBSDKGraphRequestPiggybackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C12BDF33CA9C47581367FC8B6C96A96F /* FBSDKGraphRequestPiggybackManager.m */; }; + 3CE52D2382AC587DD950A2EADF5E9B84 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C9E1CB8926D98B02FE2EC003C21F2A2 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3CF09685712D93A0B24E3960FE077575 /* FBSDKLoginButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B6C44E5B88EF647FF4BBA897881D7353 /* FBSDKLoginButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3D1761CAA3C45EB53709966A3FE48FFA /* SVWebViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DD75B82CF72C1E45AE727EAF94627411 /* SVWebViewController-dummy.m */; }; + 3D217D1C3D24191ABFE798FE28B51B05 /* SENCondition.h in Headers */ = {isa = PBXBuildFile; fileRef = B68AA96572EC87DE3E5F5CD49C93342C /* SENCondition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3D8CA8A5A5E2A0FDAF9370A1FBA402E7 /* iOSDFULibrary-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 15E9A58EC2FA0B8E7E1806E7B1AE089F /* iOSDFULibrary-dummy.m */; }; + 3D9EFD2FE1C9CBFAED0234CC64066D1F /* KWConformToProtocolMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E5CB79CF17F03244FEFC425D2DBE396 /* KWConformToProtocolMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3E1844B7983A3A7D17CCEF2C5653ECB9 /* FBSDKBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE606BB5D2DB432C08B664C5BE90A8D /* FBSDKBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E3F3BA5CA5AD4DBFB39F8332BD6D776 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A64DDABAC0922737B74A7484CFB1E06E /* HorizontalBarChartRenderer.swift */; }; + 3F00DA4BE50E5B82FEBCF288C05A64D0 /* KWBlockNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D97890DE73939F3A0818E813F574AA5C /* KWBlockNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F3041C8F63E4B76790BE569B0717E56 /* SENAPIShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 0487202A7D8ECC666D6BD2D403764B0B /* SENAPIShare.m */; }; + 404C389714CB64C8B08F1E2F7437C05C /* SENSleepPillManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C4C05B41AA902BDE02CAA2A5CA6CF97 /* SENSleepPillManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4082FC991EF16EECE52DF7F61BD91665 /* KWContainMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = D2364A6A8A0AC2BFE8962CBB64A52388 /* KWContainMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40DF372231A43947D8E01553E72C9B15 /* Kiwi-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 17437E1514E23069EE0787BB8CAA769F /* Kiwi-dummy.m */; }; + 419B4D172F5830CFAD636234705E491C /* FBSDKMonotonicTime.h in Headers */ = {isa = PBXBuildFile; fileRef = FD32A18F58D4945EF6902BBD362E1700 /* FBSDKMonotonicTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 41DA3FD72EF57C4843C44579EE1B468F /* SENSleepSounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BB8A240CFA1BA939D684FBAD2ED1A7A /* SENSleepSounds.m */; }; + 41E559CC0796E9DEA48B5CD8E3637E16 /* FBSDKColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B615BB0F0330CB731738E7214F94219 /* FBSDKColor.m */; }; + 4230E6106F49E42CF7AECAB1ECDC06C1 /* ASIHTTPRequestStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 30C2ABAF468B78660BAC589B7727DC7E /* ASIHTTPRequestStub.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 424AED9EC15DE7B81E15206C758D5D3A /* SENTimelineMetric.m in Sources */ = {isa = PBXBuildFile; fileRef = 7078A20ECA04DECD402A7BAD1252EBC3 /* SENTimelineMetric.m */; }; + 426E847AEE339FFF4961A13821F07DFE /* SENAPIAppFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = E23E3D426ECD40F8FAA5FE96CD6FB143 /* SENAPIAppFeedback.m */; }; + 428C807EE3203E815F9230D6DE190695 /* FBSDKSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 53E762F024ED5470594EC84A5D636FF3 /* FBSDKSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 42969C8E5DD84485657301D97A7B734E /* FBSDKProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 39C5EB2B5A1E49FDABE43CCBCA85BE2C /* FBSDKProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 42FA4A23E84046961B628209AEB17E1E /* SENAnalyticsLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA8289B0FF07BF0CB87F4B7C9C6FA8A /* SENAnalyticsLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 430AE91B7820B2806EB5773CC6999E6B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A991275F9EC93E54F2F8DF55641B2991 /* QuartzCore.framework */; }; + 4366324ED438DC052FF07DD149C5078C /* CodedOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DB00858903EC8A12C224228B14E0EF7 /* CodedOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4397C284249A7114D959D041D9DF796F /* markdown_peg.h in Headers */ = {isa = PBXBuildFile; fileRef = D84C7A94F93BFC192E60276A1E767390 /* markdown_peg.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 43D54A104F30C12B001F0D769C243A56 /* BFAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D6ED7ADEF238CA17F1256200766D13B /* BFAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44062021FB1976CD9F9CFBCAD6DB58CF /* SEGLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = FC462AEC4720202E7CA70C6224C05CBC /* SEGLocation.m */; }; + 441AA476F1F1A9701DCE89197B19306B /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305D04DEE78E70DF2B7009D7299EC15F /* BarChartView.swift */; }; + 444F93B5D21913A7E1EC9613818EF49C /* SENSound.m in Sources */ = {isa = PBXBuildFile; fileRef = AFF6C1CE913BF27C12E0FE437BB8B60B /* SENSound.m */; }; + 44B0D09EC350BDAF2700B6D21890016E /* SecureDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB759A309ED61A81CC30A0F9927C8C3 /* SecureDFUServiceInitiator.swift */; }; + 44DFB03EE321276EC61F479F19EFBAD1 /* FBSDKErrorConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DB56A749A812C3A52744509C5BEF34AC /* FBSDKErrorConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44F9C98FDF26CED8B3E58F971974C9D4 /* FBSDKMath.h in Headers */ = {isa = PBXBuildFile; fileRef = C874E6B266FC8D70DDDD304AB031F9FA /* FBSDKMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 450252F25E279061383DC1CF20E060D9 /* KWContextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 73333867F2E3DF7460199601A0428751 /* KWContextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4539169C90FB05452FD4FF292E7F24EE /* FBSDKMutableCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = EF22420924DD8393D929AA3D1BFD52B9 /* FBSDKMutableCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 454135CF320869F997006849A30EA610 /* SENAPITrends.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D447E1562FF6E9DBC77D2DC5B733F5C /* SENAPITrends.m */; }; + 454CD45AA9811EE185E9DBA9C6BE776E /* _FBSDKLoginRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 83050E7BEEEF5B0F9C8454D60332B369 /* _FBSDKLoginRecoveryAttempter.m */; }; + 45680D8ACA4A1AC896217FA368E5E805 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82362D7CC19D3752067197B71A0CBEBA /* ChartColorTemplates.swift */; }; + 45C31C23DBF3BB73A734DE091EB175E7 /* AttributedMarkdown-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DF46AEFF8A62696E8B67DB4F29B52BB /* AttributedMarkdown-dummy.m */; }; + 45D4B9BCACAE82CEF9933563E2F299CC /* BFURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 72D1683657A763EE42197B76A9717F61 /* BFURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45E45AC953C96E2A7A95A9101F3AA4D3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 4636A95719B9311D475B429A42068908 /* FBSDKApplicationDelegate+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = D7FD91CE8B11764E7C4EA2482AAB92E3 /* FBSDKApplicationDelegate+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 464EE5BEBDEDC6A05FE41AC1C1DC535D /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F16FE05CE6FC0A0A8FA158B370CAB9B /* Bolts.m */; }; + 47069F71191029B78454F13A5E61CBC8 /* FBSDKErrorConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 02B95771F7E77C8A17B997F98D098908 /* FBSDKErrorConfiguration.m */; }; + 470B70D14049D52C176B8633DD5F56B5 /* LGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 52BE9E5F8F58FB77AB70F9316672E5C2 /* LGUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 477926100433C782BD48D0D5EC73128A /* KWContainStringMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C8F3EDA544E796D8A53D73EBBF6E863B /* KWContainStringMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4817AE570592DD38E4F9417D9FED0508 /* ChartPlatform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DFCF8812B865E209C89385C6FD1C1B7 /* ChartPlatform.swift */; }; + 48D8209F694519E20F5B47571544A182 /* ChartFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8914DE772464FD283DA5E4B7715788 /* ChartFillFormatter.swift */; }; + 497003FBE08A8B70F28CE7A3BF779502 /* FBSDKErrorRecoveryConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AF15827193595FCEC3E271AC14623F /* FBSDKErrorRecoveryConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4981F1390C4ABE4F0EFC86060D4D01AE /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AA5448927A1F08E807D80A5A0AAB46F /* BubbleChartDataSet.swift */; }; + 499062EA05DACB05F050F7B1BA541E10 /* RFC3339DateTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 37051E34E2EB632A81CD15F3097CBB78 /* RFC3339DateTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 49DEED94BDABBBF264FE8B91E60C7624 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6D06764DC8654BCEE6DAA0B227536ACD /* en.lproj */; }; + 4A0684F1F79D445C22FBAA625B27A6EA /* ChartXAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB434E995C0FD4373BEE2543621D3288 /* ChartXAxisRendererHorizontalBarChart.swift */; }; + 4A27D1913709B47756B33056777D8F8C /* SENSwapStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADB58A30AB4367DA57BC46CBEFBC836 /* SENSwapStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A3D108C9E0A8FC618E0C48027479662 /* MutableField.m in Sources */ = {isa = PBXBuildFile; fileRef = 1417666017EB86762AFA2AC6D0CFD84F /* MutableField.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 4A7768B75EAD0B21B86A4192599FB0E1 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8AF84CA850A0EA1D7A82F5604FEA27 /* BubbleChartRenderer.swift */; }; + 4A8FF81151EC2F6F73FA00266C4CCF5A /* BFAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = E6970FC083BC7537D1F5F15DA60266CF /* BFAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A99C26F1CF4FFE0DE282608EB276254 /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = 85B7F55AA41CE550B665DD7C779D6C2E /* sha1.c */; }; + 4B310199A9A67FF1AB1A530B287AB881 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D893DDD5CD7E1E75666C3C60FFC1173 /* CandleStickChartRenderer.swift */; }; 4B408B88D3FFC36DBC7F42DF9C7F3E49 /* Pods-SenseApp-Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B4199426BAD9EFB819F3D03262AC189C /* Pods-SenseApp-Tests-dummy.m */; }; - 4B589C6227BBA5AB2F6E177FDECD8F5C /* SENSense.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B3C1DDC863179F93AEA5C8616CF7C4 /* SENSense.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B9BACA2DF8E2C78161434FDF27F002F /* LSStubRequestDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 15F7FC63041B13CC887C5154D8B825D7 /* LSStubRequestDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BBAD7662CCB60E1091DACD133E1C4BC /* CocoaLumberjack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAE86106065D2999DA85019B2D43B9D6 /* CocoaLumberjack.framework */; }; - 4BBB4991C552E6492516106496600F39 /* FBSDKTestUsersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4276046567CF117EC1B5B6B4E6407776 /* FBSDKTestUsersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BBE6B3707985DA0ED3D56955D57230D /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5668CE9A95E8B73045D823DAD8A11EF4 /* ChartDataEntry.swift */; }; - 4BC9F6D4FB983AC92C4D47B5EB35EBFF /* SENAPISpeech.m in Sources */ = {isa = PBXBuildFile; fileRef = E279FCF41429C8312BCDFC5D94ACCD7F /* SENAPISpeech.m */; }; - 4BE3FE5074F6EDFE4FA33BE727062D06 /* KWBeMemberOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1846E0ED0F8C10D7B4D96FD34C6C06 /* KWBeMemberOfClassMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BF1DA1366275BAC3A5CEFF700CE897F /* FBSDKAccessTokenCacheV3_21.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB30C71FC6B027EDAC2A7233178C453 /* FBSDKAccessTokenCacheV3_21.m */; }; - 4C18700BD268A7DF2F06BAAA33DD5A4E /* SENSleepSoundStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F001682AB9E7CD5287D55B50A5C228B /* SENSleepSoundStatus.m */; }; - 4C73DC5A144A717D3EF8CBDDD7034463 /* ConcreteExtensionField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4506EFAC6385F3E257F0D033FFAF92F0 /* ConcreteExtensionField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C7BD955AFF587C6533BA28A7A74035A /* SENAuthorizationService.m in Sources */ = {isa = PBXBuildFile; fileRef = B8D0719063563070957BA6B5EBB2894E /* SENAuthorizationService.m */; }; - 4C8CD5113ECC2B0402A6AF10D37C8B0B /* NSJSONSerialization-NSNullRemoval-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C63331516B883A2713CC5D72061E092 /* NSJSONSerialization-NSNullRemoval-dummy.m */; }; - 4CCD9A01779A349E94958B50D2816935 /* NSJSONSerialization_NSNullRemoval.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4984747F3B91403391EA4EE69C0CA727 /* NSJSONSerialization_NSNullRemoval.framework */; }; - 4D36F7EC2589DF3DA34A9DB1C8D8620E /* RLMProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BEA9B50EDFA2F74A059D27B589BE696 /* RLMProperty.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 4D505EC3C3BC7D103B235C113ED23FC3 /* KWExampleNodeVisitor.h in Headers */ = {isa = PBXBuildFile; fileRef = B12DC5955AE75B90D7B424A24F73429F /* KWExampleNodeVisitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D5BADBF851B1EB0D39E8516D70B31EE /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 91DE1D587EDEAE63B8D98DA7450848E7 /* UIImageView+AFNetworking.m */; }; - 4D72700C0CADD632BA62D07982ADD20B /* KWExpectationType.h in Headers */ = {isa = PBXBuildFile; fileRef = D674097F2A8397C64C5F24C8B7B541E0 /* KWExpectationType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D92B84448BC7B0C7E9C52210D2079AF /* SENAPIQuestions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9099CDD9FBB2D911BBAE5B1ED7744C2D /* SENAPIQuestions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DB393D7CE3BE2AADF84C9A4499B3CBD /* KWGenericMatchingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EC8DAC76DF33B9749560A11895897597 /* KWGenericMatchingAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4E2BFB3257E451D82B4B3606E9A04A13 /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B3720BF8EA93EFFA30CBA3BDAC576C9 /* IBubbleChartDataSet.swift */; }; - 4E2FF37CAC80E4A4B2F58ECF9DE86737 /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C41BC30D694F4FC6FE51A07C5F75083 /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4ECD4BEC475C6294F5C1AC466FC5FF9C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 4EF031E6D501C9D4CF3E21FBF61205DB /* FBSDKCoreKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F2AFA5E5B0143B940801E67E8EF94B1 /* FBSDKCoreKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EF2AB552AD93147BFD421E33C7A86E9 /* FBSDKMath.m in Sources */ = {isa = PBXBuildFile; fileRef = 475FBA20839C3E2451CB8F21BE446BD9 /* FBSDKMath.m */; }; - 4F223AEFB17494A1418A5CF7BE5183DE /* PBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A8D8869E24B2D51141E5A393CDFD66 /* PBArray.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 4F5340C9836AAA7BE4C86CBFB69CAEA6 /* KSCrashSentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 382C6AB7BD5403500A3596D3DB318BE8 /* KSCrashSentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F71EA64D65D2EFC63C542BD828D27DC /* SENAPIInsight.m in Sources */ = {isa = PBXBuildFile; fileRef = ACB89D8088A295DA0B4CCEE519D7D99D /* SENAPIInsight.m */; }; - 4F9DE057659ECDF3F96B6E8CB55B9E36 /* SEGTrackPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 882A9EA1F12A4657158D4D879F932DB2 /* SEGTrackPayload.m */; }; - 4FA48CD19611E2EAE3D4D77624FB6CA0 /* RLMMigration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8C90DEAAC7E43975EEFEC32AC254A8C3 /* RLMMigration_Private.h */; }; - 4FB94263B81EA30FE5B8B2A8DADFA344 /* KWGenericMatchEvaluator.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B1BEB4892CE731D4E254642292B6794 /* KWGenericMatchEvaluator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4FDADAA393247C22478E56F683C922A1 /* pwd2key.c in Sources */ = {isa = PBXBuildFile; fileRef = 2B1EF599B587AAD87E70A9B4AD43EA38 /* pwd2key.c */; }; - 4FEA929EE4E6989657AFBE90F65EACAE /* KWEqualMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D3E5B49E71FBC5D3D57A69A2847FC244 /* KWEqualMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5005871E5388A28E1ADDB2433DFB7BBD /* LineScatterCandleRadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C95E297CA057EE7F95758D5DFF81D67D /* LineScatterCandleRadarChartRenderer.swift */; }; - 500599DB27D27D7F5C2007E94CBA6883 /* SEGSegmentIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9910FFA362C7000CFE52FCF04AAFD6CC /* SEGSegmentIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 503976310142E45FD9F56FBBD4CAE9A8 /* KiwiBlockMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A7EECA374FB96F84890E050F40530FE /* KiwiBlockMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5081C431C6D4C300830876177494BCC6 /* SEGIdentifyPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 78CDE200E2E6FBC7396ADC2768D206E8 /* SEGIdentifyPayload.m */; }; - 51680F847C6633AD89668FDACEA482A6 /* RLMObject_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E6659ADFE03C7252077F4B2EF285011 /* RLMObject_Private.h */; }; - 519527C7E0DA668E68C69CF7FFEC5F15 /* SENSleepSoundStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 2743333FCBD6A81D45F5025E40D48BDB /* SENSleepSoundStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5211CE88DDD7DD32DCCCF2BE07032DAC /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF76B44BE95F7E991F6B22F3BFE9A6F5 /* FBSDKCoreKit.framework */; }; - 52DEC36D65CA146DEEE957EFFC59562F /* NSData+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B41B62E7EC756C61C1DED1008FEC6BB /* NSData+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52DFFD6F30055793B436D7E68775B497 /* KWRegisterMatchersNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB9393C6942884F8F37594AC2D053CD /* KWRegisterMatchersNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 53169FFDB72055AF86FAE690F6835DBA /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C7905D25FCB5938BEF9953ED273D55F /* BFTask+Exceptions.m */; }; - 533252514D017A9CB8CD8E9ACC19E13A /* Manifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF15AE5DEF758BC43077DF37993803B /* Manifest.swift */; }; - 535F5F35D553B040C4BBCDD1A114A75F /* FBSDKLoginManagerLoginResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 18A47DB46C31C28B1E051710C9AB9B4D /* FBSDKLoginManagerLoginResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 539774C48A655E5C386E89CDFECFF694 /* zh-Hant.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 4A43D53160B65F7FFF029B08E95A414D /* zh-Hant.lproj */; }; - 53982CF8DF887D8C8DA76AF2A6296E25 /* SENAPIExpansion.h in Headers */ = {isa = PBXBuildFile; fileRef = BD03D4C2ADECB0ED12C9078606F93039 /* SENAPIExpansion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 539D17E570EEA881AFEB5BDAB9048CC9 /* KWHaveMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEB97F64BED10022C01ED0007804DCA /* KWHaveMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 540228B324C9225535C6E3D65930F3F0 /* UnknownFieldSet.m in Sources */ = {isa = PBXBuildFile; fileRef = F028C3E4CC6EA374D684FA41A3398E9E /* UnknownFieldSet.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5434E2F298FE619E1DA14820D7039995 /* KWSharedExampleRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BA98C5109DF92A7091500CA9F577985 /* KWSharedExampleRegistry.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 546C649D17FD1309E9AC7412D281196E /* KSJSONCodecObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 46265E4111BCFEFEBCFAB223A62378DF /* KSJSONCodecObjC.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 54BB4D78696473F648489312E9AD637F /* KWRespondToSelectorMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 479D309CA8E1BEF620799415713816C0 /* KWRespondToSelectorMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 54FFDA9B3CE4954521E91379470651D7 /* NSObject+KiwiSpyAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA63EB735C260E3F5B92A994DB037D12 /* NSObject+KiwiSpyAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 554DA7A9FD2724F3297A1303DA8BAC2B /* SENTrends.m in Sources */ = {isa = PBXBuildFile; fileRef = 726C3601B462991860E1B038EB6F814F /* SENTrends.m */; }; - 55568477E1161E25C3D9324389C020C5 /* NSObject+KiwiMockAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 99F53054DB1F2904A5D1C8EEFA5E4871 /* NSObject+KiwiMockAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55BFE2B5CE661D53212E28008E9699BD /* KSCrashSentry_NSException.h in Headers */ = {isa = PBXBuildFile; fileRef = D1FA879988DFBD1E79A73C4857F67A88 /* KSCrashSentry_NSException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55C9EEB9DFCB0D9CF164D05E498813FF /* LSStringMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E4833113746957048616673A068E48F /* LSStringMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 55E65C5C787114C7A89C19DE32C34B55 /* RLMRealm.mm in Sources */ = {isa = PBXBuildFile; fileRef = EF8A2B799D8DFC975345B85DC6A22A73 /* RLMRealm.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 55EA900AB1BB4AE695110A4FF4579C04 /* LGBluetooth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C8E159F7A6C40EE9DE942739549EBD /* LGBluetooth-dummy.m */; }; - 55F48D83A1B4879FFFB6DBD7588985FA /* aescrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 95FDB508F989809C95E644C94DC9340F /* aescrypt.c */; }; - 560AD2D1E34E001CF37FD86693D800E4 /* KWNotificationMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = FDA779DCC3BD7ACE5FD1535132F62D50 /* KWNotificationMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 560F0C5F0F833D26A8BB3EE37C6DE879 /* SVWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B675485F28C9736A967223AF34FC024 /* SVWebViewController.m */; }; - 561DF35E5831D8D9EBBFF91BB3D19D6D /* KSCrashType.h in Headers */ = {isa = PBXBuildFile; fileRef = 88FF2C710E7733681C75C23AE227162E /* KSCrashType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 563A425A3C91359C56988C5DD7FA85C6 /* SENService+Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = 061E8FAA2ADB6C8E786802191CA84735 /* SENService+Protected.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 563C0216002B1195A062B68131869495 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 362CDCFE77556406F9B21FA11D6B6430 /* BarLineScatterCandleBubbleChartData.swift */; }; - 56456F8E850328943245181820A4F396 /* KWBackgroundTask.m in Sources */ = {isa = PBXBuildFile; fileRef = AE8899350AB3A97F4BC2D8915B5B00D7 /* KWBackgroundTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 564DC7C8591A8DB1D51D13F859AC5626 /* FBSDKCloseIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = FB3EFB7F02F037ACD533B0BD9D8FE954 /* FBSDKCloseIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 565FB35E60AD42D2049D9EE11AA5FFB7 /* SENTrends.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D781BA5638003AB2B5ACE9B80FC9363 /* SENTrends.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5673E56A8002849EA3FD31100491E99F /* hmac.c in Sources */ = {isa = PBXBuildFile; fileRef = B1CFDDF0F67EB52CE4F3D85BB955871E /* hmac.c */; }; - 56DC2D2DE18BFB06A572EB81D10F02BD /* FBSDKLoginKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CD46B84345EF4F585F321C40C2E77227 /* FBSDKLoginKit-dummy.m */; }; - 571035B62EAE734BF8257B262F388892 /* SENSound.h in Headers */ = {isa = PBXBuildFile; fileRef = 6033BB43F23BE5497C2A0999EA5F2600 /* SENSound.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5758650B02798548399485958495F49C /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F730358F306A911B5448A85D161326A /* AnimatedMoveViewJob.swift */; }; - 57D65C204AC7910F5E5B444CA2915233 /* SENAPISupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D854254F6DCF603A8348ED5B5FF5791 /* SENAPISupport.m */; }; - 57E9828E4797DF2F1B1DE35FE76E106A /* KWBeEmptyMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 749A89177E5F0B042DF7AE566C9AE00E /* KWBeEmptyMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 580CAD09D7862897B0CDE270764D8A12 /* SENTrendsGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = D44FBC623F518AAB5B5DD1096AD5EFD0 /* SENTrendsGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5811BF270E237069753A10F0E256195A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06B20C0BA0BBD6B926FCAA236E5A1F05 /* CFNetwork.framework */; }; - 5864FC23264CED95408CE1DDA69A5FDA /* iOSDFULibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 234A0A8855A407594657E217BC6F84A1 /* iOSDFULibrary.framework */; }; - 586F1E3294845CA9FAE4A5AB12101E4D /* SENPeripheralManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F09C67F97F6515AEBC58B87BBB0184E5 /* SENPeripheralManager.m */; }; - 58881FD963CBAFD2BDCFB80184DEC851 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 999EB44050E298BABA027437E5D4EA40 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58A0B6DD7BF4563C15E5E53FA6257A80 /* KWGenericMatchEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = 396816D9E5F31F28CF8E53ACD9B5EAF0 /* KWGenericMatchEvaluator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58CD3150DC4E38AAB278C4630442A9F9 /* FBSDKKeychainStoreViaBundleID.h in Headers */ = {isa = PBXBuildFile; fileRef = F8A26AAC8A614F7C63B9BE262CFF1D4E /* FBSDKKeychainStoreViaBundleID.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58F4A27488FF0EC165B5AA64A6F1B34F /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3664EF64EBB999443CB5DB44AAE2B2B1 /* Bolts.framework */; }; - 590D591C36CD2C30A4CFB7C3A4151D47 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C92365B992831C7105F20336468C0779 /* RLMRealmConfiguration_Private.h */; }; - 590EA04F044FB6180ED24EBC672DC802 /* LGUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D9A3AB57BEE632BFED61A51258EB938 /* LGUtils.m */; }; - 597D01F8E1994CDA4B7F4BA38433F868 /* RealmSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B40031E7B23BF1AFE32642D32E988539 /* RealmSwift.framework */; }; - 59EFB9537B0168DD83DFC5E70781EDF7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 5A2D95FE0EE0874F008C56948E606504 /* FXKeychain-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D54A7DCC95C3F8A140402B38295D1F65 /* FXKeychain-dummy.m */; }; - 5A37E627293F8FC6F2266EE46FFA4A30 /* BFMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 09F0DE7277068BDD933F79CC61695BCD /* BFMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AC7C8A3C39393CB71D2BD1CABE87FBB /* RLMArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = E523603AB7DC4A455D331D2514FFE1DB /* RLMArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 5ACA704A2FF797A1877B306AA80C6095 /* SENAnalyticsProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 85F3DF8C72277558573A937B100C62E4 /* SENAnalyticsProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5AE94F793E163EBAA6A4967D49CBAF24 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7877AB20B2ECD5CF8FA2088732C3E1AD /* ChartViewBase.swift */; }; - 5B07F64433D0390823626FC5BA572FCA /* DFUPeripheralSelectorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EEC8A34B0F02B1085F5F8AA5BB95F7B /* DFUPeripheralSelectorDelegate.swift */; }; - 5B11AB71D1E5E48ACCC60BB974743C55 /* RLMListBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = DDEF373FD2A99B534F6323C5074812F0 /* RLMListBase.h */; }; - 5B186435FEF2F455F81661439BB283E0 /* UICountingLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA103A261B0D58C0B9F2DD18509B174E /* UICountingLabel-dummy.m */; }; - 5B6C9026646566A6CD0EDB9221DFC9E6 /* LSStubRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CC89499D0EADD7F0CE370CD9EBE09692 /* LSStubRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5B8CC5F4A1A5AE9651F7A28691B0129A /* KWContextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 582D1BA91C91848BAA7679EC5B0DDC5B /* KWContextNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5BD372B59EE536DA10EFAE36D466236B /* transact_log_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45592637FCEE6AF25E3F138E6BBB3DA /* transact_log_handler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 5BF4708CCD64EA8E53CC9C55A1054C46 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7AE59CB52BFF46497C4094B08282B86 /* LineChartDataSet.swift */; }; - 5C046104EBA5606755D4A711F4DDF712 /* RLMConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 352688CA996308E146C72F275037790C /* RLMConstants.h */; }; - 5C4BA597C8B526AFF25BFD0FEE7C2074 /* CocoaLumberjack-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D3198520D520DF1AEACD4CF55E0809E6 /* CocoaLumberjack-dummy.m */; }; - 5C77C81B119D2B36BE16473C05C0C1A1 /* LGPeripheral.m in Sources */ = {isa = PBXBuildFile; fileRef = 21FE4323122965E78215E3D8DDDE4E30 /* LGPeripheral.m */; }; - 5C7A3E39E8ECBC46F79E4F7AD0FE28FF /* SEGSegmentIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CC784A42750512714DD58D23E7F9B15 /* SEGSegmentIntegration.m */; }; - 5C7C0F74F890D8FBB521BD5DF6416574 /* SENTimeline.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D13B076048438E69F04E0A95CF94DB7 /* SENTimeline.m */; }; - 5CB44C3D89FB6F8AE62AA7BD4DE78606 /* BugsnagMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C3A44A90FDE032EECE4BEDCD85DE400 /* BugsnagMetaData.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5D30C2003DE2D408A0C822122C4D11D1 /* FBSDKBridgeAPIRequest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7967FD069C45DE48FCC4BA1863138A /* FBSDKBridgeAPIRequest+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5DA40DF9BC58E80F963A0B32C6071076 /* Bugsnag.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA9ECC9AC50E75EE7FE66078136510E /* Bugsnag.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DE89845CCB755543F7AAABF895FE670 /* ASIHTTPRequestStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FCC3BDD292F775D82BC3C795A30BF34 /* ASIHTTPRequestStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E5834F8804F80C8AA4C8880430E6C0B /* DDDispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = AB7CA6BBB13D63DC23395C26709F0C42 /* DDDispatchQueueLogFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5E98B9D27555D296D1B04E6160FF70AF /* KWInequalityMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 686293D6D891D055AEB9EEBCBBE4D899 /* KWInequalityMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E9D46446FECC30DFB93134C2E22C22A /* LegacyDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58EAB835EAB1A16A2E243058FF69AC0 /* LegacyDFUExecutor.swift */; }; - 5EF4947A17C60BCB26789E3392DA6FD3 /* LSASIHTTPRequestHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F32C89EBA3DDFBD3FA65A5B18F1A713 /* LSASIHTTPRequestHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5EFAE333E8DAC2555AF668F0DA35B8BD /* FBSDKInternalUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C112C97E027A098AE197B591946E9767 /* FBSDKInternalUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F007DF0B00E82D30AD76181CE2ED242 /* RLMPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = B8A0D469D156594B23F99DE30D8B4C33 /* RLMPlatform.h */; }; - 5F21C136FAC61082045EA45B9E0E1B20 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD66153A6F2336D277807D2D12111D72 /* CombinedHighlighter.swift */; }; - 5F7BC47C08F4AEED82AD5FC6FDE6318E /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07E52B4F8804AE5AFA3F87E18A8A6CC9 /* Zip.framework */; }; - 5F810CA86AF95E3F9B4CBE11BF03B53A /* GeneratedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C556B12960500C187E7C7094222477F /* GeneratedMessage.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5F8202F7994F276F4EE87A7D858546E4 /* KSObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD7BD8D8587E668D455BEDDDE49E356 /* KSObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F94B178F0B51E4C9CAF7B84F0FF63F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 5F9500FA8566379553C8C924BD6A85E6 /* SENLocalPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = D33165EED7E093B5F3CD4906A251CE48 /* SENLocalPreferences.m */; }; - 5FA256388903425858D55C32DBC3E645 /* GeneratedMessageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 322F1CA0447465952BB9CC4720DBEEF4 /* GeneratedMessageBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5FD27F467F5ADE5B8F158DC99A7F1E14 /* KWLetNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8666736B6E4F8EFC924EA2175D618D86 /* KWLetNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 601FC5B98D69BC0B293723EFB3FEF7F8 /* FBSDKAppLinkUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F3638EB723E869445800DF0D8FD6DD /* FBSDKAppLinkUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 605B6E3ADC3247AA0E4BC66B8BB438A5 /* es-ES.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AFF014B25AC33E01302E05E6C3825341 /* es-ES.lproj */; }; - 608B99801212831425F9651920228E54 /* KWFutureObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A84362EAE244EA14455DA44B16BDA27 /* KWFutureObject.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 60A1A407AF951511C0373DF0A4A99C0A /* AbstractMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E099CA07DDDA02E8018BE1743BD049C /* AbstractMessage.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 60AE2CD54E95CCDBDB4C98C26FA354C1 /* LGBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1456F0BB470014478425ADCB04FC1AE /* LGBluetooth.framework */; }; - 60AFA37494FCF9355801EE45076D018A /* FBSDKAccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = C72B822D3386376C668B51DA41CAD092 /* FBSDKAccessToken.m */; }; - 60D7AB446B208A882AF04A1AB240B42D /* KWMatcherFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = CF6F8C3BC53E13F137F43AC78C8C60CB /* KWMatcherFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60D9123A6F05E7AFA1ABAB97DABB052B /* FBSDKLoginTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = EAC6E2EF9DB26DDB32E137A07F898A57 /* FBSDKLoginTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61014532918B6E43E07C85DFFEB0E379 /* SENAPIAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 458A99512363C4C0D888ECC9DF1D54E0 /* SENAPIAccount.m */; }; - 6124FE8A39BDDCA81FAD72DC5851EDC8 /* RLMObservation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7E9C2FFEDD4135FC31D3E302AF193592 /* RLMObservation.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 6174853431A2659B8318CAF8C9402222 /* FBSDKLoginUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = E0F673B029B2755BFCC231456FEF11E9 /* FBSDKLoginUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 619DF60873C0B42528A0CF22EBC721D0 /* KWStringContainsMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FF6104D3C5057AEFCFB3E9F7B08D70B /* KWStringContainsMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 61F5586A47814335184D1ACFBA0CF884 /* RLMRealm_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 91EFFB7AFE5CE38A52DFA66AF3D55512 /* RLMRealm_Dynamic.h */; }; - 622CF553EA438A407FD259CCEF6176C3 /* BugsnagCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 4176A18E901462C0F22443A9F23AFC0C /* BugsnagCrashReport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63079C8DE10C40754187481E9E20A03D /* KWInequalityMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2EE90055A8B82253B93119890AE3D3 /* KWInequalityMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 631A4D3EC351313B40F8CB38E9A2C4B6 /* UnknownFieldSetBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = BB706E450F552995910DFC91FA714DDC /* UnknownFieldSetBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6383AEDFD8AAC4C827FA6F70D1CD5DFD /* BugsnagIosNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = FF98F4AEE6DCA028B854D85C53226B31 /* BugsnagIosNotifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 639B22AD2782F5A99A20C06E69BF5644 /* RLMRealmConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E7404CD34249A0353A4078A868E7C182 /* RLMRealmConfiguration.h */; }; - 63C9B92F5EC5B2AD8ED3BB78037726A0 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE355C572E5774EBA9907E33E397E5A5 /* ChartData.swift */; }; - 640916B1B91ECB9E25D3610C106DB4CF /* KWMessagePattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 164B6172F43D9DD2FB14C9FC3E465B61 /* KWMessagePattern.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 642D58C9FB1C955C904989CE50FE15BD /* KSCrashSentry_MachException.c in Sources */ = {isa = PBXBuildFile; fileRef = 4F6F271A834494DA6F56EF87823EB31E /* KSCrashSentry_MachException.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 644486AB16E4FFEC5394CA8C6BC14694 /* KWBeWithinMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8962D5CD8DD0D2A516004004A37BF2CF /* KWBeWithinMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 64482B74BE3469DC7BA31F76CE2C9C2C /* SVWebViewControllerActivitySafari-iPad.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FDD529B0406017631A464B302260B16 /* SVWebViewControllerActivitySafari-iPad.png */; }; - 647687F8A02FCB4EA56E58403444433F /* Kiwi-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 38505529998FB202659CA539EC306551 /* Kiwi-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 64A15D938E900B5315EBA95643BDC42C /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5F86BBD69DF5E4F46EECFB3DCA1DBC3 /* BarChartRenderer.swift */; }; - 64BCC345074B91C766A2A4AD8FFA7F96 /* SENSensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F949642012589A54A31E789783C8600E /* SENSensor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6535B5490A63DCD4DC6307C70EFAD79F /* SVWebViewControllerActivityChrome-iPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7FF693E807E4131E1228248EB11151F8 /* SVWebViewControllerActivityChrome-iPad@2x.png */; }; - 6536A28B233D63567A2D850A38946872 /* FBSDKLogo.h in Headers */ = {isa = PBXBuildFile; fileRef = 88B76869DF89B12E860589F9CEC84695 /* FBSDKLogo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 654360C8ED223DBACC2DC94045E23D84 /* SENSenseMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 699CDB7937D77DF7EDE9519C053160B5 /* SENSenseMetadata.m */; }; - 65A9CACD8E0377928344467D754B82AA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 65AF837779A0287A03085463256A475F /* SVWebViewController.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 40D07985590F3465BF7441417DC22D5B /* SVWebViewController.bundle */; }; - 65E3FE3D4821F35ED8230B53B409FDA4 /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F93CF1CFCB4456B8457EEA5D5F0E4A /* ILineRadarChartDataSet.swift */; }; - 65E4D53E16A507AB77FF4A869BE93127 /* SENServiceDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 6161161C06255A6379BAEC3C86EBFF8D /* SENServiceDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 65E7300BAB7DBDC3DD5B07FF90FC5A04 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 149DB644C51BFBF99DBFA2585D550170 /* en.lproj */; }; - 661CC2674F6474DCE0D52656DEE1B73D /* LegacyDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC4F9A3DFED49917418F278A1D2929A9 /* LegacyDFUService.swift */; }; - 6644AACA4C31EE23383564A9BDBBEC46 /* SENAPITrends.h in Headers */ = {isa = PBXBuildFile; fileRef = 6603FC8A49B4C964878043FAAA77940F /* SENAPITrends.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 667BBB195BF6AABDC964EF91254420B2 /* BugsnagNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A7DAAD1AD5D1B8A0F1EE46D36B90281 /* BugsnagNotifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66812C9277302D6CD4050876D946C186 /* FBSDKError.m in Sources */ = {isa = PBXBuildFile; fileRef = 05845E36629366233189702305E5FB35 /* FBSDKError.m */; }; - 6748736D4230A7F763A5FFBA3CA7566D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC842E1ADC9A4495DEA155AB31DDF3BF /* QuartzCore.framework */; }; - 674E43EC0C2C8566D0A90E3AD24EBDFA /* NSURLRequest+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1F61B8147F56675FCB7D2838DD7D69 /* NSURLRequest+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6807BB7FE8138D09E7EB16D2347BCC7A /* FBSDKAudioResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AB9781F43392FCD793A11A849D0FD35 /* FBSDKAudioResourceLoader.m */; }; - 680B8DFADD5B1C6795CD6EFEAA5013B7 /* SVWebViewControllerActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D03431772826192EF874FE02B43EF2B /* SVWebViewControllerActivity.m */; }; - 683581E0CD33B0CEA4276079C5809CBE /* SENInsight.m in Sources */ = {isa = PBXBuildFile; fileRef = 3768AB85D4571640B894A0B8D5FE7370 /* SENInsight.m */; }; - 68849FD2CBBDE2ED0E9C5D3DF23CFE0F /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A91063E89AF470C783E9B7148C2C30F /* PieChartDataSet.swift */; }; - 688CBC45E9B87872C06A870E182A05C8 /* results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 68D0FB0E6E371B2B3A35AA08B4AB4A6F /* results.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 689C7A9A087A1F5358DD8F725DBE172D /* RLMObjectBase_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 34A220D7A86A2205A220F38D442D7C14 /* RLMObjectBase_Dynamic.h */; }; - 68A3FC4AF4354FD8AE3E7E7014E083C8 /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F5F32160CA718EE51EE6B984770A4D9 /* NSDictionary+Merge.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 68A84356181F9B2FF71E74E1A2D41134 /* KWAfterAllNode.m in Sources */ = {isa = PBXBuildFile; fileRef = BF387B7A4990626BC6F7DC470DA60A8D /* KWAfterAllNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 68D57FE474CF5848D5F27EF7230EF6BA /* SecureDFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72DCB5A45D848E4F873A3FDBAD5123DB /* SecureDFUControlPoint.swift */; }; - 69431E38C1A36ACA9CB8CB467660BADB /* Demangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9F819292239D287998FAF9D4B5CA71 /* Demangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 695644C456AD9290BF0B90281DE1F85F /* SVWebViewControllerNext@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E72EF9B0D2B303574EDF366AD3DD237 /* SVWebViewControllerNext@2x.png */; }; - 699D646211C2DA3D463CBFAC28336756 /* ChartTransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = D229AF94243497EF72260BD2AAFFC6E7 /* ChartTransformerHorizontalBarChart.swift */; }; - 6A0B3DC2E3B99DB073488FE1FA1AF331 /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DD8958EE63D9B1C2BA06BF41068CD14 /* _FBSDKTemporaryErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A0C4C3125E63FE69D00DE071A8D97AB /* LegacyDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C357FA281AE30B3AEDD3EA1BC1FF7278 /* LegacyDFUPeripheralDelegate.swift */; }; - 6A50C96DA2C6F9BD61747555ABE58CD0 /* KWAfterAllNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 629C45EE701953B7826B41C1B0FDCCF1 /* KWAfterAllNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A6BCBBFEEE34EA9589179565E7A250C /* SENLocalPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B80F435FEAADE9F4D67CAE032388C50 /* SENLocalPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A8D5BE261480E1A2BE490990F07127A /* KSObjC.c in Sources */ = {isa = PBXBuildFile; fileRef = BBD9584B1F762014EEA0374D27999328 /* KSObjC.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6AA36484F09982A5EEA47B090D69E341 /* BugsnagNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 885159B118BD562C1CE7FD160D67C55E /* BugsnagNotifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6AB786A9D325A8FD4AE2B70E989450BD /* FBSDKAppEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7333EE1C0E1E680E7F9C08039E5AC6 /* FBSDKAppEvents.m */; }; - 6AE74AC3EC2AEE2CAEFE5D77161783CE /* RLMResults.h in Headers */ = {isa = PBXBuildFile; fileRef = BE556820FEF482B55D54FF9712B9DE92 /* RLMResults.h */; }; - 6B15EABCAF94BB264DE4C4F1C8C75684 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C71303AEC4231931093C3E72FE1E3FC /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; - 6B33137A198E59183FA541079C801DA4 /* ChartAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA5BE56AFA4D7F4B7DA04851D6A1C64 /* ChartAnimator.swift */; }; - 6B640A7634ED7633E46B52AA734D61B3 /* RLMConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 352688CA996308E146C72F275037790C /* RLMConstants.h */; }; - 6B6B51B45B3E39B03E85EEDEB80A386E /* SecureDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E98215128C662955799889F2CAA71EA /* SecureDFUExecutor.swift */; }; - 6B776CB7580F90D48E25A595CE3E6569 /* RLMSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = A53528E54202434D76AE1E48CE2C6D68 /* RLMSchema_Private.h */; }; - 6B85D8C0BADEAC1DC4E1C59A442BE2FD /* UnknownFieldSet.h in Headers */ = {isa = PBXBuildFile; fileRef = FB220E0C882EB45400F666838D4A29EF /* UnknownFieldSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6BC0839DC419730023CBFC077C291026 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BBDB1C055F3B30366412F82EBDE8EA5 /* AFURLSessionManager.m */; }; - 6BE9896BA0043AAB0A8DB9DC5B1EDD02 /* FBSDKViewImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA454E0972A3CB1E4AD4B29D82AC7EE /* FBSDKViewImpressionTracker.m */; }; - 6BEDFD850FBCC81CF319B852258B47DA /* KWNull.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C73599A171B04402135F0045DB6440 /* KWNull.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6C70E44CEECD48BFAB3013ED1FBAD1C1 /* ManifestFirmwareInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A8EEFA215E4D2CFD3A6FF42592DDD4 /* ManifestFirmwareInfo.swift */; }; - 6C8545B394040B853787D3BC8BCDD49E /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 367738D81AEBA2DE2A02CC551AA91F5D /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6CA80119C5A2CB827E7D403D913E4A2A /* FBSDKTimeSpentData.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3D3A578534728C9A07046E519E135B /* FBSDKTimeSpentData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D1B126AAE668167C505002E738C8607 /* DDFileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 99A6002400FA68B946C4B7D7584990DD /* DDFileLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6D1B839D3B4D45C92071E812DBCE94AD /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D3D76AC723DAAAFF606C864826338F1 /* UIButton+AFNetworking.m */; }; - 6D443E8C9666A817934791E6EBDB6E44 /* RLMSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D7023EBE773E75FE5A2C06A22C166A7 /* RLMSchema.h */; }; - 6D6ECCF0C21A016D74F6F1EE6432D7A4 /* UIImageEffects-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B405957DD754242F314CF4B943722 /* UIImageEffects-dummy.m */; }; + 4B9BACA2DF8E2C78161434FDF27F002F /* LSStubRequestDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = F0C9278BC8FE54E4B8216EDC68485642 /* LSStubRequestDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4BBAD7662CCB60E1091DACD133E1C4BC /* CocoaLumberjack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A6B143E9A57A4649C38827C1B8071DB /* CocoaLumberjack.framework */; }; + 4BBB4991C552E6492516106496600F39 /* FBSDKTestUsersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 441E689DD4E4DA59EEF161755F254216 /* FBSDKTestUsersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4BE3FE5074F6EDFE4FA33BE727062D06 /* KWBeMemberOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 85F6816AC60C3A8827754D3016808127 /* KWBeMemberOfClassMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4BF1DA1366275BAC3A5CEFF700CE897F /* FBSDKAccessTokenCacheV3_21.m in Sources */ = {isa = PBXBuildFile; fileRef = 94253083B651F74F38BC2D8D73E35593 /* FBSDKAccessTokenCacheV3_21.m */; }; + 4BF380429D5C2EA6E10DE305BF502128 /* SENPairedDevices.h in Headers */ = {isa = PBXBuildFile; fileRef = B74C83B214B9246C4CCD2B14BDD3A2CB /* SENPairedDevices.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C05E3EA30308B19698D23C643C0BE69 /* SENAPIInsight.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B41AC23A04748735DE8A52869084ED /* SENAPIInsight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C73DC5A144A717D3EF8CBDDD7034463 /* ConcreteExtensionField.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B6454F780277243C8BBC786380065F /* ConcreteExtensionField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C8CD5113ECC2B0402A6AF10D37C8B0B /* NSJSONSerialization-NSNullRemoval-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 38E96CC1B497B3CF3028562A18075B3D /* NSJSONSerialization-NSNullRemoval-dummy.m */; }; + 4CB33682E256BAB08D7E08BF8C3E8F9D /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6D30614AAEBD016227B2962E602C24 /* CombinedChartRenderer.swift */; }; + 4CCD9A01779A349E94958B50D2816935 /* NSJSONSerialization_NSNullRemoval.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 400F6D1754AE6A3A1EC3585774096C38 /* NSJSONSerialization_NSNullRemoval.framework */; }; + 4D505EC3C3BC7D103B235C113ED23FC3 /* KWExampleNodeVisitor.h in Headers */ = {isa = PBXBuildFile; fileRef = BFF5F2B44921E5B6DEAC58CCEA659119 /* KWExampleNodeVisitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D5BADBF851B1EB0D39E8516D70B31EE /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E9DA9CD07270D1BED2250F66B1BF9EF6 /* UIImageView+AFNetworking.m */; }; + 4D72700C0CADD632BA62D07982ADD20B /* KWExpectationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 391F8C6E1E5A398A2DCD74B39E1DE3AC /* KWExpectationType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DB393D7CE3BE2AADF84C9A4499B3CBD /* KWGenericMatchingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 89B966434EB68EE0DDAFE7E1A32C017F /* KWGenericMatchingAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4E1D7F8F2EC9499EA34DB4BF9953FFB1 /* ChartMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80005E65CBE03057B5AA0BCB5A955561 /* ChartMarker.swift */; }; + 4E2FF37CAC80E4A4B2F58ECF9DE86737 /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = D1C751528243A5815954B21F8CCAA091 /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EF031E6D501C9D4CF3E21FBF61205DB /* FBSDKCoreKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 15EB6F14E701C35227E100E0C00E90A5 /* FBSDKCoreKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EF2AB552AD93147BFD421E33C7A86E9 /* FBSDKMath.m in Sources */ = {isa = PBXBuildFile; fileRef = 04719E3076B558A7721780984373914D /* FBSDKMath.m */; }; + 4F223AEFB17494A1418A5CF7BE5183DE /* PBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 47B445E85B04E79A462D18921BB20230 /* PBArray.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 4F5340C9836AAA7BE4C86CBFB69CAEA6 /* KSCrashSentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 79CBFE68228B7B7E5F6C566D58C72D09 /* KSCrashSentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F9DE057659ECDF3F96B6E8CB55B9E36 /* SEGTrackPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = D5212ED3AC00461C878C00E60CFE3E49 /* SEGTrackPayload.m */; }; + 4FB94263B81EA30FE5B8B2A8DADFA344 /* KWGenericMatchEvaluator.m in Sources */ = {isa = PBXBuildFile; fileRef = DBDF5272C1DF2723E3F8B10E72553380 /* KWGenericMatchEvaluator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4FDADAA393247C22478E56F683C922A1 /* pwd2key.c in Sources */ = {isa = PBXBuildFile; fileRef = 23D6B991A588BED5011F6109C3DCB8AF /* pwd2key.c */; }; + 4FEA929EE4E6989657AFBE90F65EACAE /* KWEqualMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CE672AF5CF07053A6FA69CAB6F2CB3 /* KWEqualMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 500599DB27D27D7F5C2007E94CBA6883 /* SEGSegmentIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ABEF28E8C14FA6D58C9E7E820841C60 /* SEGSegmentIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 502087E86E1B33B57FFCA56F2D303A8B /* ChartTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7556E2613DAC78B968776F661F320021 /* ChartTransformer.swift */; }; + 503976310142E45FD9F56FBBD4CAE9A8 /* KiwiBlockMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 179343D1E144800218C9FE56D64F8856 /* KiwiBlockMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5069E935C9911946ACD38B3DC98E4D04 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DABF3094B32A3845F36C8D867FBAC1C /* CandleChartDataEntry.swift */; }; + 5081C431C6D4C300830876177494BCC6 /* SEGIdentifyPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 293A9493CDC3F6F9CC651F580C5A1DB3 /* SEGIdentifyPayload.m */; }; + 5211CE88DDD7DD32DCCCF2BE07032DAC /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4605B515FCB47357C239F30A7F8C781E /* FBSDKCoreKit.framework */; }; + 523347521D16C71B167674903AC8EF6A /* SENSenseMessage.pb.m in Sources */ = {isa = PBXBuildFile; fileRef = C9B1AABAC8AB7B7AD2CC254E35894C08 /* SENSenseMessage.pb.m */; }; + 5295CD5F9B52CBBC428BCE2056F1590B /* ChartLegend.swift in Sources */ = {isa = PBXBuildFile; fileRef = D98E33FA2B733DF9E994062270EB8D2A /* ChartLegend.swift */; }; + 52BD08ABBBB81C005035151EDBEECB0A /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17E28D16AFC828EAE023AEBB5C948E20 /* CandleChartDataProvider.swift */; }; + 52DEC36D65CA146DEEE957EFFC59562F /* NSData+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 95F07ED41C831E574107AA8715075BF3 /* NSData+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52DFFD6F30055793B436D7E68775B497 /* KWRegisterMatchersNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 3036D4112488A0AD401B373418122EEE /* KWRegisterMatchersNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 53169FFDB72055AF86FAE690F6835DBA /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 79218965E79D7BA4DED4F8E81470D772 /* BFTask+Exceptions.m */; }; + 532074C75914FE4CF53436C1A6A14713 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75E92075E11C522CAE6BDC96D6A9619 /* IPieChartDataSet.swift */; }; + 533252514D017A9CB8CD8E9ACC19E13A /* Manifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3A92CA63ECA800458DB9D7A5D950CD /* Manifest.swift */; }; + 535F5F35D553B040C4BBCDD1A114A75F /* FBSDKLoginManagerLoginResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF8D0E42B7F6B7193F61ED22E159643 /* FBSDKLoginManagerLoginResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 539D17E570EEA881AFEB5BDAB9048CC9 /* KWHaveMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FDCC5A57BB7D1BD0BDFABB3A6911CA4 /* KWHaveMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 53E9D9DC82155C55BC45B757ADAF5E98 /* SENServiceDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = B906BC429B071335CEC1F1AADDFB92D3 /* SENServiceDevice.m */; }; + 53FD835B1C9D1262BA6BC65E5F7ED062 /* SENTimelineSegment.m in Sources */ = {isa = PBXBuildFile; fileRef = 18DD6368EE2B20ED3DC43E4B02655EC2 /* SENTimelineSegment.m */; }; + 540228B324C9225535C6E3D65930F3F0 /* UnknownFieldSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 68FE950065EFC2079C9CEC56B11DC411 /* UnknownFieldSet.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5417D146991DD5246E633BF3EC8BDDAF /* SENAPIPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 10C5A8F688C4E47EE12F0B75DAFF31B4 /* SENAPIPreferences.m */; }; + 5434E2F298FE619E1DA14820D7039995 /* KWSharedExampleRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C52C16FDF3452C375D66CD6691BC6C8 /* KWSharedExampleRegistry.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 54468A513F5D3821FA6356E58353E99A /* SenseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B890BEACA084FB576CE274B117B912A /* SenseKit-dummy.m */; }; + 546C649D17FD1309E9AC7412D281196E /* KSJSONCodecObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B1036B1F55857FBF26051272706DBFF /* KSJSONCodecObjC.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 54AAFA8303FA0FD345F9888A59A2ED84 /* SENPillMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 20B202493D1DDDCD89417EAB06B075B0 /* SENPillMetadata.m */; }; + 54BB4D78696473F648489312E9AD637F /* KWRespondToSelectorMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB610EA4900AE141A19865EE6EB0D4A /* KWRespondToSelectorMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 54CF9EFBCFD3BF837EE566F251EF286E /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA92B725F460A614353D537F8B8F775E /* BarLineScatterCandleBubbleChartDataSet.swift */; }; + 54FFDA9B3CE4954521E91379470651D7 /* NSObject+KiwiSpyAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FD8CAF8448164EE70267B97D4069249F /* NSObject+KiwiSpyAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 55029C2CCDD6E611E178B408293614A5 /* SENPreference.h in Headers */ = {isa = PBXBuildFile; fileRef = A83D1221B0622098E9078EF5DEF320C2 /* SENPreference.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 554AF7BCDFF1403BF6D77983D6D3BAB7 /* SENSleepSoundRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8040D76005E51B3ECD3E61693985ED77 /* SENSleepSoundRequest.m */; }; + 55568477E1161E25C3D9324389C020C5 /* NSObject+KiwiMockAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAF4CEB62B079179A74B5C618E7DB61 /* NSObject+KiwiMockAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 55BFE2B5CE661D53212E28008E9699BD /* KSCrashSentry_NSException.h in Headers */ = {isa = PBXBuildFile; fileRef = EF97265121F9DF599FA1067A0C58415E /* KSCrashSentry_NSException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55C9EEB9DFCB0D9CF164D05E498813FF /* LSStringMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = CDA54E1FAEF332FE9945DD1AD9CBB7D4 /* LSStringMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 55EA900AB1BB4AE695110A4FF4579C04 /* LGBluetooth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EBC5DF030E021A28E9331B3402CC79D8 /* LGBluetooth-dummy.m */; }; + 55F48D83A1B4879FFFB6DBD7588985FA /* aescrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 6318A0CCA38CE2AFD16C9FD64A153241 /* aescrypt.c */; }; + 560AD2D1E34E001CF37FD86693D800E4 /* KWNotificationMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD843BBA8721DCB017B1D347B1FDF07 /* KWNotificationMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 561DF35E5831D8D9EBBFF91BB3D19D6D /* KSCrashType.h in Headers */ = {isa = PBXBuildFile; fileRef = 40A5F229C5CA7A123CA54A0029901039 /* KSCrashType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56456F8E850328943245181820A4F396 /* KWBackgroundTask.m in Sources */ = {isa = PBXBuildFile; fileRef = E0EA030BBB5E935AAB37D11C72FF8529 /* KWBackgroundTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 564DC7C8591A8DB1D51D13F859AC5626 /* FBSDKCloseIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = D7ECAB8E59FDCA6B7D2F0FCBEA7C3774 /* FBSDKCloseIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5673E56A8002849EA3FD31100491E99F /* hmac.c in Sources */ = {isa = PBXBuildFile; fileRef = ACD1C7B3B14F9BBE34ADD176481A9FD3 /* hmac.c */; }; + 5677A70BE22547372AB1331911448784 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 56B11F0C34BC591FEDEDC77675EAEF6A /* SVWebViewControllerActivitySafari-iPad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8802FFBD754B09370D9EDF65EC13AED1 /* SVWebViewControllerActivitySafari-iPad.png */; }; + 56DC2D2DE18BFB06A572EB81D10F02BD /* FBSDKLoginKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A3AF312F9662D66A8FA5B81DF298B33 /* FBSDKLoginKit-dummy.m */; }; + 57E6ECBCC169FE19BB4272F5711DC5E8 /* MoveChartViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED7E392376C5A535DBD75805DBE156F /* MoveChartViewJob.swift */; }; + 57E9828E4797DF2F1B1DE35FE76E106A /* KWBeEmptyMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 84D34460B2200B26D6FB7453C9781AA5 /* KWBeEmptyMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5811BF270E237069753A10F0E256195A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16729C10532A4A859DD48B8C2D542B5A /* CFNetwork.framework */; }; + 5864FC23264CED95408CE1DDA69A5FDA /* iOSDFULibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BD854D75F99835EB41DE7EC3FDD8A71 /* iOSDFULibrary.framework */; }; + 58881FD963CBAFD2BDCFB80184DEC851 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = C3839B6328882FAB12D505A08E8CA1F7 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58A0B6DD7BF4563C15E5E53FA6257A80 /* KWGenericMatchEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B288CA94E516BD12D019D42E8471ABE /* KWGenericMatchEvaluator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58CD3150DC4E38AAB278C4630442A9F9 /* FBSDKKeychainStoreViaBundleID.h in Headers */ = {isa = PBXBuildFile; fileRef = BA86812AFC5FF190B31D67097ABB54D8 /* FBSDKKeychainStoreViaBundleID.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58F4A27488FF0EC165B5AA64A6F1B34F /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B62DB8621AC21C867659B21483A2705E /* Bolts.framework */; }; + 590EA04F044FB6180ED24EBC672DC802 /* LGUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD3B15C978F14BA92C2F5BB22F9410B /* LGUtils.m */; }; + 598722EFA8B47C0417242FDAAFAAA3BC /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05EEB90E6DE25224009F5ED21A86873C /* ScatterChartDataSet.swift */; }; + 59EFB9537B0168DD83DFC5E70781EDF7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 5A2D95FE0EE0874F008C56948E606504 /* FXKeychain-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E545C042660025FA73C4AF01B6C0A90 /* FXKeychain-dummy.m */; }; + 5A37E627293F8FC6F2266EE46FFA4A30 /* BFMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E4DB52402B80899F03DA775C4E63B2 /* BFMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B07F64433D0390823626FC5BA572FCA /* DFUPeripheralSelectorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A9240D697CA4370259AF2724EBAA83 /* DFUPeripheralSelectorDelegate.swift */; }; + 5B6C9026646566A6CD0EDB9221DFC9E6 /* LSStubRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 17ADD41EA3F05B532353E5E1EDA618F8 /* LSStubRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5B8CC5F4A1A5AE9651F7A28691B0129A /* KWContextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A536B7426BF438AB598E0EEC6E014CE3 /* KWContextNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5C4BA597C8B526AFF25BFD0FEE7C2074 /* CocoaLumberjack-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 46CCD8B212E1195A63718F808E7903E4 /* CocoaLumberjack-dummy.m */; }; + 5C77C81B119D2B36BE16473C05C0C1A1 /* LGPeripheral.m in Sources */ = {isa = PBXBuildFile; fileRef = FB4866EA530FEBC25946B0A0C0188963 /* LGPeripheral.m */; }; + 5C7A3E39E8ECBC46F79E4F7AD0FE28FF /* SEGSegmentIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F626315F30E7A0962B2623DBD460988 /* SEGSegmentIntegration.m */; }; + 5CB44C3D89FB6F8AE62AA7BD4DE78606 /* BugsnagMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = A55C2E3AA3AFB9C418934BA82CF578EF /* BugsnagMetaData.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5D30C2003DE2D408A0C822122C4D11D1 /* FBSDKBridgeAPIRequest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5013BDC7156651A56275AEF6EFF16FCC /* FBSDKBridgeAPIRequest+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DA40DF9BC58E80F963A0B32C6071076 /* Bugsnag.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F5F5C46D019193274B86430867DEAB5 /* Bugsnag.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DE89845CCB755543F7AAABF895FE670 /* ASIHTTPRequestStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B30B74EC9369440BAAF252DC3AD2C61 /* ASIHTTPRequestStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E33A6E6D05A1DAAE8B87F0A275DFE94 /* SENAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D81DF619B7E8E6A9E43F8601826360 /* SENAccount.m */; }; + 5E49DEBA97A5E0A36C5A9DF751FCD0F6 /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2131D24970D52A5961E65D0AABF0CA73 /* da.lproj */; }; + 5E5834F8804F80C8AA4C8880430E6C0B /* DDDispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 29AF42ED7441FE0FB92725F1A36EEBB1 /* DDDispatchQueueLogFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5E98B9D27555D296D1B04E6160FF70AF /* KWInequalityMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 064FF3868F8D2ED780F3AA5BD5240AEF /* KWInequalityMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E9D46446FECC30DFB93134C2E22C22A /* LegacyDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CE51DC8FFC5DFBA5B185CDB7CD41CD /* LegacyDFUExecutor.swift */; }; + 5EBDE877677ECD8F8F44A58F5F8C0468 /* ChartViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = B300B6AA072EB96AF5CE9ED9F8A71E0A /* ChartViewPortJob.swift */; }; + 5EF4947A17C60BCB26789E3392DA6FD3 /* LSASIHTTPRequestHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 09523D7F5BDACB18BAF98AB8708F9C9B /* LSASIHTTPRequestHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5EFAE333E8DAC2555AF668F0DA35B8BD /* FBSDKInternalUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 85556CE56A0ADF19D1E420E310E6ED89 /* FBSDKInternalUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F5A73C3476B6C30F196A2E36639C643 /* SENAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = 157A512529D22EB51F08254049103506 /* SENAccount.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F7BC47C08F4AEED82AD5FC6FDE6318E /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C15D030E1F39F0F0BDDB581CDE2DB8D /* Zip.framework */; }; + 5F810CA86AF95E3F9B4CBE11BF03B53A /* GeneratedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 56ADAFA6A1FC7B8F320A871724643A2A /* GeneratedMessage.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5F8202F7994F276F4EE87A7D858546E4 /* KSObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = B0DE7A4AC0F689755048279AAB498BF1 /* KSObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FA256388903425858D55C32DBC3E645 /* GeneratedMessageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 04B26C6B81B9203812D47870622621E0 /* GeneratedMessageBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5FD27F467F5ADE5B8F158DC99A7F1E14 /* KWLetNode.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD764EF4EBB82F7A77C4D6562B06B6D /* KWLetNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 601FC5B98D69BC0B293723EFB3FEF7F8 /* FBSDKAppLinkUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 40C9E3E6DF31D20A0E27ACAE16B49165 /* FBSDKAppLinkUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 608B99801212831425F9651920228E54 /* KWFutureObject.m in Sources */ = {isa = PBXBuildFile; fileRef = ED919C7B7CCA5778E68DBB3524999DCC /* KWFutureObject.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 60A1A407AF951511C0373DF0A4A99C0A /* AbstractMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B47DD74621B271EBEA7E413EF170FA4 /* AbstractMessage.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 60AE2CD54E95CCDBDB4C98C26FA354C1 /* LGBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F1F6C643394771272A4C855A6EE4B32 /* LGBluetooth.framework */; }; + 60AFA37494FCF9355801EE45076D018A /* FBSDKAccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1DEA844A07E5EF01AD8ACA051362C0 /* FBSDKAccessToken.m */; }; + 60D7AB446B208A882AF04A1AB240B42D /* KWMatcherFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 40914E439C718D21121B3CAC91F4B922 /* KWMatcherFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60D9123A6F05E7AFA1ABAB97DABB052B /* FBSDKLoginTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = 34A828EA9B38152969146189DAD0DBD2 /* FBSDKLoginTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6174853431A2659B8318CAF8C9402222 /* FBSDKLoginUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F4754BD1D3D32E359DFB2AA5FCB949E /* FBSDKLoginUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 619D27346AD4CF433F1F92036DEB7758 /* SENAPITimeZone.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B3B4356B970C68D54FD6491DC926774 /* SENAPITimeZone.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 619DF60873C0B42528A0CF22EBC721D0 /* KWStringContainsMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 648520DAE61105BB0EF4E15CF98FEEA6 /* KWStringContainsMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 62241491025D074E08E55D13BA63893E /* SENTrendsGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = F39F5BC5DF2255411328E8AC651508A4 /* SENTrendsGraph.m */; }; + 622CF553EA438A407FD259CCEF6176C3 /* BugsnagCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B08208FE309800B233859C9064BA64B /* BugsnagCrashReport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 627316DC74F72AAB4E466FE4A5F7075B /* SENKeyedArchiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E1F449019FE8245EBB6475F006BC75B /* SENKeyedArchiver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63079C8DE10C40754187481E9E20A03D /* KWInequalityMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9268ADCC28DE0D1663EE5931202858 /* KWInequalityMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 631A4D3EC351313B40F8CB38E9A2C4B6 /* UnknownFieldSetBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 68DA0FF5F2704BCA2382CC476CA2A74B /* UnknownFieldSetBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6383AEDFD8AAC4C827FA6F70D1CD5DFD /* BugsnagIosNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F739AB4FCC5638EE4F6886A7DB8296B /* BugsnagIosNotifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 640916B1B91ECB9E25D3610C106DB4CF /* KWMessagePattern.h in Headers */ = {isa = PBXBuildFile; fileRef = B44E21AEEF1D1003DCFEEAEC0870931A /* KWMessagePattern.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 642D58C9FB1C955C904989CE50FE15BD /* KSCrashSentry_MachException.c in Sources */ = {isa = PBXBuildFile; fileRef = 5715B688519632150FD089870E3568E9 /* KSCrashSentry_MachException.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 644486AB16E4FFEC5394CA8C6BC14694 /* KWBeWithinMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E83BBA151286AA81933299A0C0957DD /* KWBeWithinMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 647687F8A02FCB4EA56E58403444433F /* Kiwi-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1F5291602B09E82E87C5357B79F762 /* Kiwi-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6483597E8B09277139E7CE785F6803A6 /* SVWebViewControllerActivityChrome.m in Sources */ = {isa = PBXBuildFile; fileRef = 815F49EE90B872FF8C89C51CE8FF5C78 /* SVWebViewControllerActivityChrome.m */; }; + 6536A28B233D63567A2D850A38946872 /* FBSDKLogo.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A9E4A126C24102F72599C7E39CD8AF /* FBSDKLogo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 661CC2674F6474DCE0D52656DEE1B73D /* LegacyDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33EDCA79BB3E76F47FF05E2A0DB0BD2 /* LegacyDFUService.swift */; }; + 665B1FB05FE4E07E324087E6BFB8959B /* SENTrendsGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 4098DC5F9F0D0C731FFE442A6519001F /* SENTrendsGraph.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 666CB79B413CEC59EF2E415EA2ABD1CB /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E93DDB331A6DB2E47563F5B02868A4F /* LineRadarChartDataSet.swift */; }; + 667A711544D7F2EB030A6B63599A18DC /* Analytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 040836341333C0543FD6FD42CFBE8E4C /* Analytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 667BBB195BF6AABDC964EF91254420B2 /* BugsnagNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 102CA30E607EB7CEA0450E020B99A59A /* BugsnagNotifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 667EB72D271891FD27FC61D9C18DF053 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB894AE3E9D213449BF0EA77B843187 /* AnimatedMoveViewJob.swift */; }; + 66812C9277302D6CD4050876D946C186 /* FBSDKError.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ADC518676737574D1E6CA926389CBE7 /* FBSDKError.m */; }; + 6748736D4230A7F763A5FFBA3CA7566D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A991275F9EC93E54F2F8DF55641B2991 /* QuartzCore.framework */; }; + 674E43EC0C2C8566D0A90E3AD24EBDFA /* NSURLRequest+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF4D278AFB07E17D92CDFCCE0D0F6A1 /* NSURLRequest+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6807BB7FE8138D09E7EB16D2347BCC7A /* FBSDKAudioResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = A0B2CC9566C4D61577D305714BC8BBBE /* FBSDKAudioResourceLoader.m */; }; + 6848A4546407425C61FA8BA6A013FB4F /* SENAPIPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 55AE8998353601799D2740928FE4402E /* SENAPIPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68A3FC4AF4354FD8AE3E7E7014E083C8 /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F93BFC92ACA16300522876B64064BE1 /* NSDictionary+Merge.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 68A84356181F9B2FF71E74E1A2D41134 /* KWAfterAllNode.m in Sources */ = {isa = PBXBuildFile; fileRef = F164A28ADDB474214B13184E8CF28513 /* KWAfterAllNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 68D57FE474CF5848D5F27EF7230EF6BA /* SecureDFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFDEEACA3362C59B22F1245394D5CCC9 /* SecureDFUControlPoint.swift */; }; + 69431E38C1A36ACA9CB8CB467660BADB /* Demangle.h in Headers */ = {isa = PBXBuildFile; fileRef = F2943568A5B4D227DB0F297BF0C07140 /* Demangle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 699674B0B872C6B630B675122E0635A0 /* SENInsight.h in Headers */ = {isa = PBXBuildFile; fileRef = 56C2291681C0717149BFC6AB25CF1D7A /* SENInsight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A9E10A59F4EBF1E845428A3E7875F8 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57DD91F5A5E61905A04638AA5D2A57CE /* BarLineScatterCandleBubbleChartData.swift */; }; + 6A0B3DC2E3B99DB073488FE1FA1AF331 /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 431FB0FFD71A077F1971596CCF2FEE04 /* _FBSDKTemporaryErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A0C4C3125E63FE69D00DE071A8D97AB /* LegacyDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA79267AFF93C4AE75A9B2CE770974D0 /* LegacyDFUPeripheralDelegate.swift */; }; + 6A50C96DA2C6F9BD61747555ABE58CD0 /* KWAfterAllNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A9F057A2FBE7362106F14F7291E5533 /* KWAfterAllNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A8D5BE261480E1A2BE490990F07127A /* KSObjC.c in Sources */ = {isa = PBXBuildFile; fileRef = C1A645DEFB922F621304951E595D361C /* KSObjC.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6AA36484F09982A5EEA47B090D69E341 /* BugsnagNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = F8910D15EF5E5B37D431B6AC7A72445F /* BugsnagNotifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6AB786A9D325A8FD4AE2B70E989450BD /* FBSDKAppEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 97D028723C1059AFD3C90932B98056A8 /* FBSDKAppEvents.m */; }; + 6AFCCD325F95DFE33202F46A272E2DFE /* SENRemoteImage.h in Headers */ = {isa = PBXBuildFile; fileRef = E3DEDA73DD39D7936BC34400E5CC5194 /* SENRemoteImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B6B51B45B3E39B03E85EEDEB80A386E /* SecureDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0660408A46E7644069931E095ECCAF53 /* SecureDFUExecutor.swift */; }; + 6B85D8C0BADEAC1DC4E1C59A442BE2FD /* UnknownFieldSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 792D0BC877DBDC1C57B796BA04FA5520 /* UnknownFieldSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6BC0839DC419730023CBFC077C291026 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 390CA19A4CE2FB3E2A03B170BB53AF15 /* AFURLSessionManager.m */; }; + 6BE9896BA0043AAB0A8DB9DC5B1EDD02 /* FBSDKViewImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 49B64E9767A3DA4E78D83A1BA3A9A191 /* FBSDKViewImpressionTracker.m */; }; + 6BEDFD850FBCC81CF319B852258B47DA /* KWNull.m in Sources */ = {isa = PBXBuildFile; fileRef = 20E70512C3FE1C9529CB4A76C8650B9A /* KWNull.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6C70E44CEECD48BFAB3013ED1FBAD1C1 /* ManifestFirmwareInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AC9967AA9E3DE817AA00DD18D314C44 /* ManifestFirmwareInfo.swift */; }; + 6C8545B394040B853787D3BC8BCDD49E /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0673D42FA41D39342278B4D19320D824 /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C99A2A9396678CE2A6027ADAD87CE21 /* SenseKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EF318401E4C96604EB1759481D1BCACA /* SenseKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6CA80119C5A2CB827E7D403D913E4A2A /* FBSDKTimeSpentData.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6B1F73939D3BEE52BF710E1B0ED454 /* FBSDKTimeSpentData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CD82264E62FAFA590CC56013704E406 /* ChartXAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBE826E33376456D9C3460EAA988334 /* ChartXAxisRenderer.swift */; }; + 6CF6152571F2F4C28B1A9055F48C70B5 /* SENAppUnreadStats.m in Sources */ = {isa = PBXBuildFile; fileRef = 57728E10035748ABF43FA69BE0133486 /* SENAppUnreadStats.m */; }; + 6D0AFF77DBF2B01B5C77EECAB458F9F2 /* SENPreference.m in Sources */ = {isa = PBXBuildFile; fileRef = D0603FF17E999B9FDF36A64E0D1B40D5 /* SENPreference.m */; }; + 6D1A1BA047183DE9F5FFD43A69105B5C /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71CB5F8DCEA6BC36ACD6318A78E938F0 /* PieChartView.swift */; }; + 6D1B126AAE668167C505002E738C8607 /* DDFileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0759DDF9BE9A454DFC5FE80C921B3F7F /* DDFileLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D1B839D3B4D45C92071E812DBCE94AD /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FF6A7DB98CEA2B4B1D0D39751AC6571B /* UIButton+AFNetworking.m */; }; 6D77BA61E22BA6DD13EF8BE60C406631 /* Pods-SenseApp-Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 30ED9B3030ADC892B5CC6F8F2ED567BD /* Pods-SenseApp-Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6DA57A45A5402F28F0596E76157148A0 /* FBSDKGraphRequestBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 826496B75CB1AF11F94E871F9C9D603A /* FBSDKGraphRequestBody.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6DADE741E774D57A715941BC73B84E15 /* SENAPISensor.m in Sources */ = {isa = PBXBuildFile; fileRef = 66883D36D43D00686334C468BE503B7B /* SENAPISensor.m */; }; - 6DCA0A2F53B42067585063C8B1718184 /* SENRemoteImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8980A88B008BF729F0D7C9B33BF2C0C1 /* SENRemoteImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6DCBBEF028D682D8FB4078D9CFB4848C /* SENAnalyticsLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = B715FE6A4033EA20B19BFC9BC3C524C5 /* SENAnalyticsLogger.m */; }; - 6DD4F60FBC929C4570B66E477BBF2197 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = A70F3EB906FC60FD9691CEAA6C29B605 /* BFCancellationToken.m */; }; - 6DE6CAF9B2259269C70012D0232FBA3B /* RLMRealm_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 3025464D4B1E2E30718CB0EF2A19A342 /* RLMRealm_Private.h */; }; - 6DEA0F735F3FB51ABC3D80F8F8F8A52C /* KSCrashDoctor.h in Headers */ = {isa = PBXBuildFile; fileRef = D924FB5F733AB5EC0E82DF64F8F13044 /* KSCrashDoctor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6DFD854516FA548436E740FEB091938F /* HorizontalBarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C51F169E76464090A693CBD7C5A9773 /* HorizontalBarChartHighlighter.swift */; }; - 6E1A2048C0319AAFDCCA7310B12ADFDD /* FBSDKAppEventsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 28354B33C53B68B3861A74EAECA42164 /* FBSDKAppEventsState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E2877FD997CAA6786E431F052171329 /* LSHTTPRequestDSLRepresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = E24F275242E58CA92B37368F47AC7017 /* LSHTTPRequestDSLRepresentation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6E31A6A43C8DB594EA567E4AF9B29652 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04083689DEE81844F8C805D0E8F2C9F0 /* RadarChartRenderer.swift */; }; - 6E3DBB9F7F0EC90631FE3EC15DEAF494 /* SENSensorStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 347E7A4754F4C8F04FA4B5158345D216 /* SENSensorStatus.m */; }; - 6E57CBC38B033F577BFDF8B5AC0A61B9 /* schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1037326861389367976F7BA2407675D1 /* schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 6E97C7B4E23957A75219538966FA71F5 /* RealmSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 471EBCF5DA125B0717508451EE5AA0BC /* RealmSwift-dummy.m */; }; - 6EE79655C5B88B390FD19713AABD74B8 /* ProtocolBuffers.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F570A599EA8D01C7EE4EA310F87243 /* ProtocolBuffers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6EED9BFAB959D330EA396FEE1ECC5799 /* SENAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A386A03E4D3BDE46EFBAE96535DD2E /* SENAccount.m */; }; - 6F32E6AFC7B57505B72AD9A511F7B24A /* KWStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B029CE1A0D08FE143C70FF775D2D2577 /* KWStringUtilities.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6F5D9AF0CE03962BA50D4198D31E2FC0 /* SENPairedDevices.m in Sources */ = {isa = PBXBuildFile; fileRef = 62205BEB74365EF935AECC9C2EF7216A /* SENPairedDevices.m */; }; - 6FB825FF8D7C2637067464408AB71060 /* FBSDKLoginConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = D6EB92A3A24C1AEDC5AD9761DE3CD772 /* FBSDKLoginConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7066F824C867A8F8185E7EDACB6AA933 /* KWGenericMatchingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F26D8568AE7FF12B20F938356EFA3DFA /* KWGenericMatchingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7084614CB99BBD6985870138B32BEF1F /* FBSDKCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D1A6D1B3C59B62B40736404D82D977 /* FBSDKCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70BEEE2F3736878A230E65E615A2AC73 /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B67B0775D82B5C15863218E0D6B6BD0 /* BarLineChartViewBase.swift */; }; - 70EF76778F021D1FE7616C4B6998FD29 /* KSBacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 5830AD37E44D720C4FDD0256F5221BEF /* KSBacktrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70FA61E217AF604CD56C983467E6F72B /* DFUStreamBin.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFC4FD33EE89AFC9C8132DFF093AA464 /* DFUStreamBin.swift */; }; - 714D927ECE1A7F022E9ED25B461AFB9A /* RLMRealm.h in Headers */ = {isa = PBXBuildFile; fileRef = F21E7E32B4472CA43D29215E48C84B67 /* RLMRealm.h */; }; - 71B6A4B5D7569EBEE519879CF0D6A6C1 /* ChartDataBaseFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B11FF98D80AAFE830D5E4620473777 /* ChartDataBaseFilter.swift */; }; - 71B85FE9E55AA24125FB94C528606B7A /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 668A01F2C20E055DFF1703F9A0A60501 /* ChartColorTemplates.swift */; }; - 71C244340356EABEE6E89531A34988E3 /* RLMQueryUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2365B12F7B60A480DF052355767E5FCB /* RLMQueryUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 71DF4E09B103C2B0371FD6F5DA59F6EC /* FBSDKLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F2870658350BE4773DECBD042D4A42 /* FBSDKLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 720F9DEBFA33A185199E86D5CF52A721 /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 45E3C60ED0FF7A483AE3638B79338121 /* AFAutoPurgingImageCache.m */; }; - 726F708B72DEC425357F9B8ECA7F8937 /* SENAPIFeature.m in Sources */ = {isa = PBXBuildFile; fileRef = D201354927E36484B3CC6785ACC69028 /* SENAPIFeature.m */; }; - 72C442BC4DFA20BD7563DC620938D427 /* Descriptor.pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B66BEA723662314E9899CC7EBC665DD /* Descriptor.pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 730991AD850D31180306A0178FD127F7 /* LSHTTPRequestDiff.m in Sources */ = {isa = PBXBuildFile; fileRef = C4474248A2BA8640ADC97479A8446ABB /* LSHTTPRequestDiff.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 731D9F81768C450CD3826F7ADB9B9883 /* FBSDKGraphRequestPiggybackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 71BD86D01EFADE5A9861DE5E07627F9E /* FBSDKGraphRequestPiggybackManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73876B084DC2001D8130C4F3E5ABF876 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3E653CD21988F08329882B68700E1D9 /* IScatterChartDataSet.swift */; }; - 73C881AD6B7ABB723DE7E39D57DAE3DC /* DFUFirmware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFB6A624AA5FF897966C6FB11315910 /* DFUFirmware.swift */; }; - 740DA29EE8435C681426FA1009EFC16F /* RLMRealmConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 38E098F2FAC2D57E85E3E9A437427A9E /* RLMRealmConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 7421CD3F7521E6EBBBF184B3E6B21CBB /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13854BD203A5D61B5169225A3291D5D9 /* CandleChartDataProvider.swift */; }; - 745A1C317DAA43FBE59C4D153F107F98 /* FBSDKTypeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D851B0FFAE82335C3C6110BE387E86 /* FBSDKTypeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74690508EB2D032DA8CB045F77D1577F /* ChartComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF44F7A0ADA120E73B4AC095C4C72B82 /* ChartComponentBase.swift */; }; - 747FAF26070DA8AC38EEC195D8F93E92 /* SoftdeviceBootloaderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 318AD9D95E3D61B34F9E41FAE77C5C66 /* SoftdeviceBootloaderInfo.swift */; }; - 750989FD056B85C0EF41717710C87FD4 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00ECFBB350D722DDA57D616AFB36B008 /* Bolts-dummy.m */; }; - 7514741358BAF70E746EAD5CBFD67709 /* FBSDKProfilePictureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5205DE995F06B6EF3B32EB06BEBCFC79 /* FBSDKProfilePictureView.m */; }; - 751E36BAAF83AB556E4801F1258AB4CD /* FBSDKLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 096211E0EF1287E256B6F5F5F376D6F1 /* FBSDKLogger.m */; }; - 753F025EE33DAEBE3B3BFB1DF9E2AA03 /* WireFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = B12F8B7A5356FFFD7B0AF261DCFA8CD7 /* WireFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 755744E1E6BD0F0C6BD09011FB1F0402 /* KSCrashContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CE26D858384B890FF3081E99C3A434 /* KSCrashContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 756B3E8603A50B3F58C17DFCB2A4E565 /* FBSDKCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD058EF88EAED9466F60D6ECB8F6D5C /* FBSDKCrypto.m */; }; - 756B839C3495C14BCCFD936B91AECF77 /* Analytics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C62EC939F96FC6519DB4B733F2727F61 /* Analytics-dummy.m */; }; - 756BBF0C13BBD09FA316E7DBA8727AC1 /* FBSDKServerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 83D0FAF174D9BCEA32F60271107267A1 /* FBSDKServerConfiguration.m */; }; - 756DE50F61D50685612360418F7D1611 /* pwd2key.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E901D886A7536E03D975DCD717B02E /* pwd2key.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7596C3F4F47D251D4F2BA1FA027E7093 /* aes_via_ace.h in Headers */ = {isa = PBXBuildFile; fileRef = 867F3CB573393447D96859033DDA4979 /* aes_via_ace.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 759736E341C9294F4DC21A7DACB9E5DD /* KWInvocationCapturer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7667E0B307A05264E424C2BC2A1752 /* KWInvocationCapturer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75B0065AD627E9AA223F4316520A63C1 /* SENTimelineSegment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1038F32B1CC64BF30E355903AE62D804 /* SENTimelineSegment.m */; }; - 75E0DF45EBC1D6AD8B4DDA5543BED2D1 /* KSSysCtl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F4E64E46DD16E6A5D22D3582C8C4580 /* KSSysCtl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7627858FFD6ADFC3330165325CE026EE /* RealmBubbleData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045A06AFF8CE942DB74ED390A102ACE6 /* RealmBubbleData.swift */; }; - 7650D707CA8A5D638174D3EC655044D2 /* KSCrashState.c in Sources */ = {isa = PBXBuildFile; fileRef = 028AF39A2DEB4483CF2888C56FC12EC7 /* KSCrashState.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 76CDA5A95C33FCF344EA7720A3584142 /* KSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA2ABF5831039B90E361528BB2EF38B /* KSLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 772183FF7E0670930F6B02C279AF3F6A /* KSArchSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = 082161FFBBBEDB9362B0C68D3DFDB42C /* KSArchSpecific.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7785241A9ED674EE5E7C7649EA990835 /* UICountingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = D15538B5BBB8256397187AD0F14ABDFE /* UICountingLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 778F9F084A59F0B58B9943FC2E9053CF /* KSCrashSentry.c in Sources */ = {isa = PBXBuildFile; fileRef = 49FF41778899642202567A04C468C457 /* KSCrashSentry.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 77D927FAAB951410726B37EBC790E884 /* FBSDKURLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BD85498E1F4C5EA089E3FFE9D69A3E5 /* FBSDKURLConnection.m */; }; - 7814413E3435E85FECE273B9760AE526 /* DDLog+LOGV.h in Headers */ = {isa = PBXBuildFile; fileRef = D65BA82B9215214508E5B15A2A1EC79F /* DDLog+LOGV.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7883A222138D7424CEDF8844132A00D1 /* SenseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2A4492906C8804E9037E8C37A83872 /* SenseKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78D20F4B19491D0C4E1281411E55F16D /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F39C2A497DAD3BE8C125CC8E093A366 /* ChartDataRendererBase.swift */; }; - 78FE832F5FD591A091A4C5BB5FE70F49 /* KWBeforeAllNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 413122A5B5E5978EE70E06D00D50CF37 /* KWBeforeAllNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 79293BDB2C828B986E5ED54E3599EB82 /* SENQuestion.h in Headers */ = {isa = PBXBuildFile; fileRef = E91D6F73DA55A103ADF9D6A33C0C5753 /* SENQuestion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 795F88817EEBC4E77EF5970BBD217199 /* ChartXAxisRendererBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712D9029FB3B2BDBD3B69D8F64A8BFA6 /* ChartXAxisRendererBarChart.swift */; }; - 7962670960797DC09C84F93C2D0F0EAC /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 88DFD3DFFA391BCDBBC16ACB3DE28328 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79A4E1B0A007646762F827AE8F0AF2C3 /* NAPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = A0811B6D61467BAE276C023BD6578D1B /* NAPickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79BDD3EFDA7CA2DCE00D6B8472416B11 /* FBSDKGraphRequestConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = E93ECBAA87570F7E5126A9DD8D7BBFED /* FBSDKGraphRequestConnection.m */; }; - 79C65AF2F43E3CB84F82EDE53AACF781 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 79EFF8C43089CF4CD28F2F2E14F4123F /* KSCrashState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EAD5F21D5593EE03643EF45EFC5B689 /* KSCrashState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A245B30F4C433BB391AD546F26304F9 /* SENShareable.h in Headers */ = {isa = PBXBuildFile; fileRef = 18CF903871CE24C7CD5136EAFF2107ED /* SENShareable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A5BF6CCEFB1B3A347929D7EB093494E /* Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B361998344DBBBC59B2480A7BEC642 /* Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A6667ECD462CB77F77CD269DCA78987 /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = CF435333A91C367E2676AD864CFB66FF /* DDASLLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7A6F0B106F313DB7AA470D5C4AEFE015 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D88DACC44919B6B3E7584D3C3CA1EF /* LineChartData.swift */; }; - 7A8DDE292F6E2047CAE9031673777029 /* FBSDKGraphRequestMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = F50E0C8E71F7365692F8AF34AF38A01F /* FBSDKGraphRequestMetadata.m */; }; - 7A8F4E85263BFE3C2C364B8DAA48F79E /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266E37D12C6FB3B5DC302EA90C7DFD4A /* PieChartRenderer.swift */; }; - 7AAFA8A0FDF283338CF50205D1E30432 /* KWExampleDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 769716EFAEAB6B5B82EF275FDBDFE5CD /* KWExampleDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AE36195E3BE539134E0C7F589AA6AB1 /* KWStringPrefixMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F6BC56669880182667440F68022DD696 /* KWStringPrefixMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AF780C2615C8E788C3A0260E05AEF13 /* BFAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4250230E6D5B30045A7D38B40A3B3E92 /* BFAppLinkNavigation.m */; }; - 7B40310604685F79D5CB3DECDA3D380A /* GeneratedMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3B4B180D3300E7483CE7795201444F /* GeneratedMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B910C0AF91B9CED67D2967711529D8B /* SENAPINotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F493463FC4B0044D0FB099F33BE588F /* SENAPINotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BE5CC2442CDD730454F71F2BE087F43 /* object_store.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3B509EDBF4385EE250C8040B0605E39 /* object_store.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 7C0CF9D10CDA74A457C9BE2C646110CE /* KWObjCUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E270D7A8C3278212C51A9AE9875DFA0 /* KWObjCUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C3776A589EC42E671EC5AF412046DAF /* RLMOptionalBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1115EC9B096C79695A87AB541442A2F4 /* RLMOptionalBase.h */; }; - 7C41F0E24216410A0D4014F839A960BE /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68BCD4F77F990C4E98DD87E9EDE72AB6 /* Security.framework */; }; - 7C6BD93D4C39735083CCA7520779C466 /* WireFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = AEACBFA67BABBD7E7D1B8A46D4DB1D18 /* WireFormat.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 7C8C7A21918AB657BA6E595DC2EF27D1 /* KWObjCUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EEEAB753BD3BA27455A48E28F235FFC0 /* KWObjCUtilities.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7CAF3352103069C4E6A8424DCBD85DA5 /* FBSDKGraphRequestBody.m in Sources */ = {isa = PBXBuildFile; fileRef = FFEFD3158157423272643EAF4FBDC702 /* FBSDKGraphRequestBody.m */; }; - 7D17E30A0DC4475AE25F77743F91414F /* SENSensorStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = B4C513BACCFD6AE8174E71CC77BDAF87 /* SENSensorStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D182090F795BB5A83ABB33DD38AB1AD /* aestab.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FC6041281E1E2C5BE2C45DF4DC3180B /* aestab.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D2C27242410C4B7BBB583520120D71E /* SVWebViewControllerActivityChrome.h in Headers */ = {isa = PBXBuildFile; fileRef = CE866FA00A46EB798B09CAA11FF6186E /* SVWebViewControllerActivityChrome.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D32E4334466C7CE843475D7DD2FEA5F /* SENAppUnreadStats.m in Sources */ = {isa = PBXBuildFile; fileRef = B6CA54F0DCE8A883BE5CC87A795CBFCE /* SENAppUnreadStats.m */; }; - 7D3522ED5F0178BE77E5371371BE1E07 /* DDLogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EAAA276DB85A8E711C7AD0FE4B0CF05 /* DDLogMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D81A4E8FADC3BE055DFB093FFE127A8 /* SVWebViewControllerBack.png in Resources */ = {isa = PBXBuildFile; fileRef = A04CD6EE458BA81865538857CF32E412 /* SVWebViewControllerBack.png */; }; - 7DCD735DC4DCD9D4F6768541D014B74B /* SENDevicePairingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1491750C1A4C5B573357CF0168C4EC2C /* SENDevicePairingInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DF495EB05AD39E805402DD092980743 /* KWDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EF7E804BF9C7328041BF469AAB3C3F94 /* KWDeviceInfo.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7E10AACF608B23EB483FC17139829792 /* FBSDKServerConfigurationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ACDD0537F75052C75C3016FF1A02CAE5 /* FBSDKServerConfigurationManager.m */; }; - 7E5C133FC73237FA4541ACF81A54D9C2 /* LSNocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = E0BDD90E29E8597BE2EF2A831740F21A /* LSNocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7EDB45AAF9469718FFADA72A53807B0A /* FBSDKTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EDAE5FAE10A9D80DA0C1B2AE57F8946 /* FBSDKTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7EF99127902B3D02CD67148451F86F3A /* ChartFill.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFD03356CBD28B31A36AF1AEC143B26 /* ChartFill.swift */; }; - 7F312B73FFF1B91AB36300EC193AF789 /* KWUserDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 156B62BCCB956217CBE64076766F767C /* KWUserDefinedMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F78A2A2A6BD19A368190096BC627321 /* FBSDKGraphErrorRecoveryProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F11C99A83EFD1E314EC3EA1AA492D24A /* FBSDKGraphErrorRecoveryProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FDC0A56488E17A27401334413574484 /* SEGPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DA7F76A646A79747674ED14ADEDFC78 /* SEGPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8005F1F92553DBD28E5EF469A9C7E72D /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 79E119E5B456D9715BDE3A4F7E1ED930 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 807521E49EF0755746C9BE58F302EE61 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F3141B93F93E788E70D60984F4D40EA /* Object.swift */; }; - 809A6DC289BAA7FF1807ED89A4F67747 /* SHSProtoBuf-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 46B86E66AA435568334605881B45FD53 /* SHSProtoBuf-dummy.m */; }; - 80A115A98AAE4D5863B303B6A01C86B0 /* KSCrashSentry_Signal.h in Headers */ = {isa = PBXBuildFile; fileRef = C58094B9497A83E4B8BEE88FE590E716 /* KSCrashSentry_Signal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80D68687AD7C3818DF594C9904706FC4 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64E5BC801F935D39BB5BF067CC439D69 /* HorizontalBarChartRenderer.swift */; }; - 80FE8743A6F070ADE6B5CB02059D90F1 /* SENAppStats.h in Headers */ = {isa = PBXBuildFile; fileRef = E82FF4A575E4222229AEC661F431B869 /* SENAppStats.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 810DA8D287D9F33E925C79D50F6F12C4 /* ZoomChartViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39479450812051FB2E3D2D4963B06B8 /* ZoomChartViewJob.swift */; }; - 810FDBDA7EAF096E478A4A1F9F09A12F /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E3F894B967F1C59EFECD2496A32C93 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; - 8133A0D0D745D2770528A423558FB282 /* SENSleepSoundDurations.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FBAE1FE402267FB2C39A1958F1042D6 /* SENSleepSoundDurations.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81766E6B01BDEE7CB4C540B461883709 /* LSStringMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1407A9A22DB3CB922052C22157AFA5 /* LSStringMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81AB3F1CFC47349F030F585799960B47 /* CBUUID+StringExtraction.m in Sources */ = {isa = PBXBuildFile; fileRef = 0016455B4CB134F7ED16412109AF5560 /* CBUUID+StringExtraction.m */; }; - 81B4A126C45DE378E9EB7B7C9B1479B6 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EC79EC0D8719E670C7493468455FDB /* UIProgressView+AFNetworking.m */; }; - 81F20FA87F50EAE3ECEAD904CFB6AAF0 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC0843C0B94B968DB11E2D23CFF2A6B /* IChartDataSet.swift */; }; - 81F620F20D4D2147EFEE4F6AF790E298 /* NSObject+KiwiMockAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = ABC04AA4297C9708E61239353401AB6A /* NSObject+KiwiMockAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 821CCDFB755A193244EF7EEE8CD76679 /* entropy.c in Sources */ = {isa = PBXBuildFile; fileRef = 8D7BF5BD599F43EE5E29A26BE7280B25 /* entropy.c */; }; - 8289C2CC287BEA9647D291144C4035FC /* RLMObject_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 3E6659ADFE03C7252077F4B2EF285011 /* RLMObject_Private.h */; }; - 82958104D53A5602C8F6938C06356778 /* SENSensorDataRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 797A1965BCADDE793A1985B9FC7B4D3D /* SENSensorDataRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 829C926B3C003C534E689A485D850915 /* BFURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 44AA5E431DBA0E358AEF48CF73B54899 /* BFURL.m */; }; - 82CCE291FE379F44ACBCB2F48B997579 /* sha1.h in Headers */ = {isa = PBXBuildFile; fileRef = 25ADEEF93515CFBCA1E0CAFD839F5D46 /* sha1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82D304988D6DBA9DBA6D1019E127E85B /* KWFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = B2C8A58A3763022C07A0A2665FBD355D /* KWFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 82D4C1A09ED42F67B74B4F41DF8C131E /* BugsnagIosNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = B8DFE631CADF34C50ADD879FF7778AA0 /* BugsnagIosNotifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82E4E476BD6ECB50B86473C4A5B5BA96 /* SENSerializable.h in Headers */ = {isa = PBXBuildFile; fileRef = 1600FCEC5FB251E98E48C7B8C2B54B11 /* SENSerializable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 832F09AEBBD31B1CFFDCDCEF9C1BBD10 /* ARCSafe_MemMgmt.h in Headers */ = {isa = PBXBuildFile; fileRef = 31DDB832F39B94D22A96572AA28E031B /* ARCSafe_MemMgmt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83347CCAD82176BCB598146079C3E432 /* FBSDKErrorRecoveryConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 3119DB2C9924D0EB34FC7C1D07AD6D73 /* FBSDKErrorRecoveryConfiguration.m */; }; - 833ABCA6C216A8FDE7DF2BDBBFD05A6C /* Bugsnag.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EC0FBFC18DCBAEAF3A9FB952D35BBCB /* Bugsnag.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 838BFE2B59E2E5E82D94FCB3F8C0FA32 /* RealmSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B31D7E5A84257EAC900D64457D6F7A64 /* RealmSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83AE9892A672589822DC36DA7CB98CA8 /* MutableField.h in Headers */ = {isa = PBXBuildFile; fileRef = 023A98720CB8290A9E37BE0AA9305F25 /* MutableField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83BB9AAF806DA0866C2F99336ED64BA6 /* MoveChartViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 460723190BA7F0D643AB0BDAADE7A89A /* MoveChartViewJob.swift */; }; - 83DADC4FEFFB5D4520951803070602C5 /* SENAPIFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DDF821E9A777A2E7AD71B40534BB2E1 /* SENAPIFeature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8400CCF977CE10216413E1A02B3FB16A /* LSHTTPClientHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 67040C8BF6DC80D5F9618891B4BC2804 /* LSHTTPClientHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 845B9443974112134B7C50C76437B6E7 /* SENAnswer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7644891F16855D475219EF10C38A17B8 /* SENAnswer.m */; }; - 84A04D652E36C43FDE641217A3A20FCB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 84D0AB41EAC79FA0188E550D930A62B2 /* KSBacktrace.c in Sources */ = {isa = PBXBuildFile; fileRef = D5364E0BE46106CF182B9C1EDF7F88D0 /* KSBacktrace.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 84EE0046798D5B193D5CD3C06A6F1B94 /* SENDevicePairingInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6502818CA0708FD3224E8472F19AA786 /* SENDevicePairingInfo.m */; }; - 84EE5C0FDB8496F60D65F732F1818C3B /* KSMach_Arm.c in Sources */ = {isa = PBXBuildFile; fileRef = FA75C4A76644A7446D33932681D6A909 /* KSMach_Arm.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 84FED22BD581BC23690EE118774CC303 /* FBSDKLoginError.h in Headers */ = {isa = PBXBuildFile; fileRef = AE3045AEE8D6EDED754A17E19FDFD496 /* FBSDKLoginError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 85138E648F05AA95C1E9309D04EF9232 /* NSString+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = F519AC571C9DA17373D198C1559AF6F6 /* NSString+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8537CF58E11EE28EAB9E553162687497 /* SENSenseMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 311A2B2ADE06B57A046EBFFF7EDC3538 /* SENSenseMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 855E9DB9C98FE29199CF68D6FADDBCCA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 85A01A194FF10CFCB68BA9528C17571E /* SVWebViewControllerActivitySafari.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8939771F418C11A6B2FF500695E955 /* SVWebViewControllerActivitySafari.m */; }; - 85B0D7D287D247FC6CD822E36AF63F7F /* SEGScreenPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 78A05BAC6F99C00B16DC9BF8714CB64C /* SEGScreenPayload.m */; }; - 860F2E1DE1B3CB5B2B8C41B48EDD5AD5 /* ChartLegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76816CB9FD872D56978B1245866EC284 /* ChartLegendRenderer.swift */; }; - 863193E645B6BDBA54CCB149AFC12305 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = CF3DD6AFD541E64496711EE75B8733A1 /* AFImageDownloader.m */; }; - 865BA64E47BC6A4C71F95F36A7286CA2 /* brg_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = B0FBE0E730228CA633C1B16380307456 /* brg_endian.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86613CE94100938C414163460D6B4A68 /* RealmScatterData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EEC159F830EEE800640B42432953ABA /* RealmScatterData.swift */; }; - 8710A03578A34A9770D2D5C03545C5A0 /* FBSDKSettings+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 29600C36BEFAE8B37668222A60ACA6AA /* FBSDKSettings+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87420D7564A374CAFC877F6318B9A31C /* FBSDKAppEventsState.m in Sources */ = {isa = PBXBuildFile; fileRef = 924C8965A2FEDC6E2C1BCB1491F0BB07 /* FBSDKAppEventsState.m */; }; - 875BB63E9EAD45AAD11E1C460ECA7DCE /* ChartTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C35DAA49885257E3E384EEE04BE7C04E /* ChartTransformer.swift */; }; - 8765062552014BB40B22BC05F94FB294 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 87966686DC301D6DC995BF48EA07D1F6 /* ChartDefaultXAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457FAE524E2BC6AA3CF57860CA365B44 /* ChartDefaultXAxisValueFormatter.swift */; }; - 87A1C660DD148AF5F81D469628249523 /* KSJSONCodecObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = E86A93AF6C2718BB4A8BF5D3C3078303 /* KSJSONCodecObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87AF96EB8ABAD1C188179A56B1EF120C /* NAPickerView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 28B74ADD60DB542478B8887878D37BEA /* NAPickerView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87DBF11EE01F5406EEB99C9818D90111 /* DDTTYLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = AF04CD68158F2D4256C253EDE16EFB45 /* DDTTYLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 880034CF2B053A1CF99FBAE4D9211044 /* BugsnagConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = E3D9CE4361AC371112DCB74EC913794E /* BugsnagConfiguration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 883D15756D910CB5835C299149D91979 /* _FBSDKLoginRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = B759BB603C5A3BC6A1EAAA4D7DE9D85D /* _FBSDKLoginRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 889743A15847A11C1BC9CBFBFCAAB046 /* NAPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 58BDE08F62F4EC9EF98457424D803AB8 /* NAPickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 88C46E2438E04322C8690F07F3C804A4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 88E8B12105F61A66361205D6717084CF /* IntelHex2BinConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 328EBA3C72607647E986829A56A5E492 /* IntelHex2BinConverter.m */; }; - 891349E0A757790210A1CBE1B51F9185 /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6B2E492FF069C9245A7B2097E6BD74 /* BarChartDataSet.swift */; }; - 8964F3051DB2BF25A42DC8CFE015670C /* DFUPeripheralSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC5FE6235AC9424CC9199E1F42DCBAD /* DFUPeripheralSelector.swift */; }; - 8A38B8B48F4740485C571F0A52914D07 /* SENSwapStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = C72C086D6D4DCDDC4F9D4264E15A9BE6 /* SENSwapStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8AE0EEEDFA627806340AC3CB36F98B07 /* SEGTrackPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = C0B2A42E9324BEDCDD5CB72B7F475E4E /* SEGTrackPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B02A3572B65DD1A5CB9CFF27649AD6D /* FBSDKCloseIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EB043608664B82E0858325DFAAB25AB /* FBSDKCloseIcon.m */; }; - 8B356C82B96EA7C795C00733CE1DB5BB /* RLMPlatform.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B8A0D469D156594B23F99DE30D8B4C33 /* RLMPlatform.h */; }; - 8B5A09B5A5978F47F694DD1F7F7C6F49 /* RealmRadarDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499F7F8F5A854B43846F3BC9DEB7B6C6 /* RealmRadarDataSet.swift */; }; - 8B712876D17B4532C2667532EB9F5147 /* SENDFUStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = A82C5490B8E3FE6AB660F4D7CEA93E81 /* SENDFUStatus.m */; }; - 8B78E69D80622235564E8BB25891CB8E /* Model.h in Headers */ = {isa = PBXBuildFile; fileRef = 800CC42D515D97B2D648097DB325B14D /* Model.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BB715E8884807A499E4169A6D14B0EB /* KWBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = D8B5E5F4E32E581C1ABAAD89745181CC /* KWBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BC83A7A9CDF92CA8547583AD6F40D98 /* FBSDKAppEventsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B3D8645480F8427B9CDB1A9677A59E /* FBSDKAppEventsUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BD01C15C66902993368FDA55C85241D /* SEGGroupPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AD0BE7933819256E1A9074AD9997E3D /* SEGGroupPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BD1206193BEF68356F9AD62AFB840F8 /* SENAlarm.h in Headers */ = {isa = PBXBuildFile; fileRef = 883C0D45AD0831BFD8D6D8C8D9FFA0D8 /* SENAlarm.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C0CBCDC06D57B2CE03FA16178458004 /* SEGAnalyticsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 02657CB0B2CB9ACA034D5C661E99D6D3 /* SEGAnalyticsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C11755864F4663D326638223A5C90F4 /* UICountingLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B2D2FCFF2ABA43422B0A001A96F021 /* UICountingLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C2CA25644D5F5237773CE0B9E518265 /* realm_coordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43DBC2FE41F75192E4C3490FA3EE1A4C /* realm_coordinator.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 8C71B05FCCE6A6ECB433E9169290989D /* LSMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = EB836F511FBFE2EFB1E988FA07FAB08F /* LSMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8C8A4496A43B0C7E885DC7CA6F85545E /* NSObject+KiwiSpyAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 77AAA51322E2BCA46E4D48A2DF760432 /* NSObject+KiwiSpyAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8CA3A1E5402E7B8033E818A1A1F39477 /* KWBeZeroMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FAA6A49C10BD7210902FAC87D9CA4C /* KWBeZeroMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CB6CBA51A33949FC54F507F5FF9E527 /* RLMPredicateUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD59293105D66C25A6ACB9AEA6F99E7C /* RLMPredicateUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 8CDC7C76E7465BA1338CF29D9E4F4930 /* KWSuiteConfigurationBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 3271DE4046C0E295B9ACEF6734EB4379 /* KWSuiteConfigurationBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D4B8F7D67A2B11C7A1440037B545B60 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 8D8D4F376F3BDB9E7B07FE65466227DB /* RLMProperty.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 056EBDF9E23B7D4FB58A07344131EEED /* RLMProperty.h */; }; - 8DD16924EDF419A7E277268AF80E7A28 /* SENAPIAlarms.m in Sources */ = {isa = PBXBuildFile; fileRef = F33F7E5696C9DDB06294E1AD0413F7B7 /* SENAPIAlarms.m */; }; - 8DE17BF84D3264A988715815513EB999 /* KWRespondToSelectorMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = E84C9E7F0C2A3D2B4FEFDADB324E751F /* KWRespondToSelectorMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8E05C3708BE44320CC717B5AB3DAC576 /* KWMatchVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 403524B87617B8662E5F1ED7CAC93DE1 /* KWMatchVerifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8E065979ACA235A37A032C553F148EAE /* KSSafeCollections.h in Headers */ = {isa = PBXBuildFile; fileRef = 88DD9EE3D84A36D7E110CEF4CE795153 /* KSSafeCollections.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8E7374E9AF2509BE26432CE08D59272D /* LSHTTPRequestDSLRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 97210ED1AFAB4C3F60529067E5222778 /* LSHTTPRequestDSLRepresentation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8E798B56B2BDD5CB9411B67244867384 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D152AEB7136DEE033A8B5ED7405720FA /* BubbleChartData.swift */; }; - 8E7D662955926D47EF19177853B77557 /* ExtendableMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 502601D84C141A5DAC514B6A66B229B4 /* ExtendableMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8EAEB18A0940419104C383E930B0053A /* SENAPISleepSounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 67E8F919116392AF6FAB2B45DE755555 /* SENAPISleepSounds.m */; }; - 8ED98A970499A1ECFC0A73590F2CD2E6 /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE6991791F459B32F37235A8C527271 /* BarChartDataEntry.swift */; }; - 8F1A06BD70F9A769660BB7D7989EE737 /* AbstractMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = BB901024AB3EBEB24EE1595B0B601EB7 /* AbstractMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F6B9A968A93F6E1F8E3DAD163ADDD0E /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A974B4C27F7AABED58019FD291980A /* ChartDataSet.swift */; }; - 8FB69F63690474C874694CDFB3FE9F80 /* FBSDKErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4BC952C0F87F7F8522F247E273D330 /* FBSDKErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 901C74E32774F1819F495242E9BA992C /* KWBeKindOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9334EE7C53BC332D5955639985417FD4 /* KWBeKindOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9028ABEBBB173A8937D42A2C81F1A256 /* SENServiceDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 10D91DB778382B4F50B88A4EF2DB42EB /* SENServiceDevice.m */; }; - 9033CE13179A69A61E0618797CA50D57 /* KWSharedExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E8110A97D1EDBFFEEB005A252C4AE48B /* KWSharedExample.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 91187A94F1CBF93CA9BEEBBDAC096FFD /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */ = {isa = PBXBuildFile; fileRef = B71EB212C20D3F5EB9E5FEB14DAF2BE7 /* FBSDKBridgeAPIProtocolNativeV1.m */; }; - 91794219692BCA840E553CA0391326FC /* FBSDKProfile+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 46FCE7E8956D0F39DA0D6A4890E11FE4 /* FBSDKProfile+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 919AF90F1C2027433843A503AC4DBF1E /* KWMessageSpying.h in Headers */ = {isa = PBXBuildFile; fileRef = 67A8CFD94754CF8F4D07C4325B36361F /* KWMessageSpying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91AE5CD20B078590FF5930A502BADA34 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 455360A2E0C59FB3C6CDE2A2531E4E5B /* AFNetworkReachabilityManager.m */; }; - 91B936777D95E3280FC4198A46A4859E /* FBSDKAppEventsStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 46D92206BEF592ED99DEE9594733D78C /* FBSDKAppEventsStateManager.m */; }; - 91BFCA07F47A84548F5B8C9E3636B558 /* Aliases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379561B30CCAB3FB1EB207E401FE70E3 /* Aliases.swift */; }; - 9225EF58199BEE15E9EF4E620CA979EF /* KWBackgroundTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D83AA22D59EEEF5F6E81C978EEB906 /* KWBackgroundTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 924FDE5DD46A2FF78E1050053D630854 /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D2CF46F047959C528641BFFA363C2F /* AnimatedViewPortJob.swift */; }; - 927EE62B41209DD684DACB4186730AAA /* KWGenericMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = E3ECC77519D5DA8970A9C32D46694452 /* KWGenericMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9362E3B6D847C0B73E4490B0379AC788 /* KWBlockRaiseMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B9B5C63938E9738C3E592A1789B848 /* KWBlockRaiseMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 936592F8815A0FCD066B6C7C33415CA4 /* LSHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 441A79F1A7DBC078C484FEBEA1B3DEFD /* LSHTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 937C2B3B4B387A190CA45A2D3746F530 /* RLMArray_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = D560944F2A2A901B1DF5FC8346D61D5B /* RLMArray_Private.h */; }; - 938E08445A74CF401F77ECED1007E6B8 /* SENAPIPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = A2769B768ED530E2032755694EB60551 /* SENAPIPhoto.m */; }; - 93C2513B27A1B7562CA864E4E421A42C /* FBSDKBridgeAPIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A1FDD29683DEF29D837960B8445F33 /* FBSDKBridgeAPIResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93CE9F08AEFFE49D1EFC1F0F1EDAD9DE /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 253D01D55616A1B7E029A0374A9CF9AA /* BubbleChartView.swift */; }; - 93D5E62945298C38DE186DB81C916D80 /* Nocilla-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D70C23C533DC22F89703DC29BB47B58E /* Nocilla-dummy.m */; }; - 93FC4E068A0EE17880AAE36D900A5B02 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 698C7003143F532A17E15DEBBE2917EE /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93FFE7E28AA8693EC3E4086B28E88724 /* KSMach_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = 5740D4AE9F17AC1109ED3E102909EA5F /* KSMach_x86_64.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 945594FD245586D279D73FB78346E3AE /* SENAlarmCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = D92D06468DC49EDC5BA31EA1EE0AAA90 /* SENAlarmCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94AACA1D1411DE3ACD9EE9DB704FB685 /* KWStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 98ACEC38FF17A6210FC4460370C6511A /* KWStringUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94DCB1BE968EBFAEAEE6D358AA1723B3 /* NSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B178AD2E4A0CB47CECA64B09CE780F /* NSData.swift */; }; - 94E6DA1E78BC4E0F1F0DDDD2D7EC8C07 /* results_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 743782D72B1ED071CAE9BC1503AB3EB7 /* results_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 951D02689B1E6C113F98DC6BF1D75AF8 /* NSDictionary+Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DA11B64BF64D3009D2534C91770FAC2 /* NSDictionary+Merge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95288785480F19426C6A20ECCFB89CBA /* Realm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A022B45BD0209C4747305F178F94CFA /* Realm.swift */; }; - 9532AB04BBB4C914292E63F75ED15B5E /* KWExampleSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D09A59114787B42FD5795CECE6D8CB5 /* KWExampleSuite.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 95567F9D794FF41857DF4E39954733F2 /* SENAPINotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A6C4BA71CBDF218F88737B3E39F99A2 /* SENAPINotification.m */; }; - 95E4FA2CB7358427E5AFC6D0BD5D97FD /* LSASIHTTPRequestHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 5083863E50CCB06D2B8E5C43C0F09D3D /* LSASIHTTPRequestHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 95EABAA575000DE01C7EFF696174226F /* FBSDKTestUsersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D91C962347595E33BF484F5E48CFCA5 /* FBSDKTestUsersManager.m */; }; - 95F7CC5A5243432495F2A81415C5ECCA /* SENSleepPill.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AAFA0BD5323BFAD73A8E8DA29F913B1 /* SENSleepPill.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 95F985A0618271A1E3A4C144EA3466DB /* SENExpansion.m in Sources */ = {isa = PBXBuildFile; fileRef = 6814C42194D485A8BEAE02C4161BCB57 /* SENExpansion.m */; }; - 96227211FEE10DD123156CAA27DD8B20 /* Zip-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 697B3DE7E213C6C547675708C5C67796 /* Zip-dummy.m */; }; - 9635C7F5F33A5C8E9F641F5B96C8B0B0 /* KWAny.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB87C234E9F5F32F3102C793D55E52A /* KWAny.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 965F5B17A376514E96B65B0CF2F292BD /* SENSleepSoundRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B2D7387A2F28AAC72471D0B490A2F7A6 /* SENSleepSoundRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96FB413DB903A0A061D95F1F40EAE825 /* Charts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EDA071190ED33394E0D695AC4E61C6B /* Charts-dummy.m */; }; - 972B4F8C8D6C9E8311B097A9FA08551D /* KWRegularExpressionPatternMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = CB7988659B8D0453862C8DBFEE1BCF01 /* KWRegularExpressionPatternMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 97337457398388984E1EE8E844FC0BF3 /* FBSDKButton+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = A0A5B21D389A22E667549291387E93B7 /* FBSDKButton+Subclass.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9759200107D36881C9FADA8F2A742905 /* KWAllTestsSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 305EBF95F8DC4875A2E84657BC94C421 /* KWAllTestsSuite.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 97751ADF983CB6921D0F72A982136F52 /* FBSDKMaleSilhouetteIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A915E9CF8B4341DD83EF6ED1D98D9E /* FBSDKMaleSilhouetteIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9793DFE164ED1A0878C290D1EF636404 /* NSMethodSignature+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 727E989FEB0057A0A1DDE266B09916B6 /* NSMethodSignature+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 97A34EBA68DA0F79573741B208CD28FF /* FXKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 1877410E6715856F10925CB3697A26C3 /* FXKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 97B5F17518B0F26A3BC6874355D4C285 /* KWFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ACA314E0143ADB6E97BD655EE5CF15F /* KWFailure.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9818F6483396A6D73B04CE33D5E9159B /* Demangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDEA75DCD03866CB6CBB0D5D7BAE9765 /* Demangle.cpp */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 981E2253E253B9048411B29062459816 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 50068D9320D4A7DD473479CFD0097DC4 /* BFCancellationTokenSource.m */; }; - 9846C6266BEB148C8F692759A14EF9FE /* FBSDKTimeSpentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CD7D7E88843005C11857E774ECD69D2 /* FBSDKTimeSpentData.m */; }; - 9875763F68A0710CB3845BB0F7299F6A /* ChartYAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A0723EBA63ED0EE86CDEB22B933B3AA /* ChartYAxisRendererHorizontalBarChart.swift */; }; - 9895F3F157515EBE9B34157D788B665B /* aes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E92EC7F975F0B25127B1A6938F6C115 /* aes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 989E241770AF1B4E95F4F35E8E6E0DD2 /* LSHTTPStubURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 57364D41C712DB122B049108E3AA9C29 /* LSHTTPStubURLProtocol.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 98A54B02E8C80628FCA4E9FEF4DF461E /* DDAssertMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 58BC6DEB04DE9B4F6923B667C4EB3527 /* DDAssertMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98AD3CFCCC5B665503A4CEC910FFC582 /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 394CDCA718E8E592358D3A7BF05C2F43 /* AFNetworking.framework */; }; - 98CD9954E10B08ED347FBCCE94E8D87A /* FBSDKApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E80F685869AB9F6D7CFA2BE7BD16CEF /* FBSDKApplicationDelegate.m */; }; - 9930C693378100DF860F2F985EAA49AC /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 85AC2324CE1145F91D753495DDF9A7F8 /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 996E03298BA244A2A21188352C123DB4 /* zh-Hans.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 872B230FC2991F157DC100D8ECE2C2D5 /* zh-Hans.lproj */; }; - 997A35590DF8342B4302D4A45F8F9102 /* SENQuestion.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6E3487ACC59104E99DE2AB325E7AE8 /* SENQuestion.m */; }; - 9993E40A3B7A256EAAB9127A2D6A3359 /* FBSDKAppEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FCCC9CF13B0DC37EB35B68FE45FD83D /* FBSDKAppEvents.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9996BBFB1E8E849F6848AFF1F8F1A2B6 /* ChartAxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F80FDC592C3D9E2AC5977E1143379DD /* ChartAxisRendererBase.swift */; }; - 99A5EA309AE6EDABCC8C8FF2DB4D6E59 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - 99C84C8F8E1719FC69FE624D6329A1BC /* external_commit_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B52C742FA379E2286DEFAA0BB51F2FCA /* external_commit_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 99CF0E4F37E5F7C1064FC8E26FABBDF6 /* FBSDKDynamicFrameworkLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 78056ABA94955BCD9A275D1D09C54AC1 /* FBSDKDynamicFrameworkLoader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 99E20D2879599AA06D679238F21B4B8F /* KWMatching.h in Headers */ = {isa = PBXBuildFile; fileRef = B12610BFFAFA7634F7CA2F6F8ED21622 /* KWMatching.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99FBEA45ECFEAE4AAAA522322CB7B478 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1180B07916D0126946E26CDC9A60AD86 /* BarLineScatterCandleBubbleChartDataSet.swift */; }; - 9A44EAA0D309141D0C3610CD97483959 /* RLMConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BBB0A692F98C76EB787D49F38CED885 /* RLMConstants.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 9A709500E6C7FD075415AEBB625B4779 /* KWBeTrueMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C47D8C824060B7E625E75C2428D6855 /* KWBeTrueMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9A76551006A3561C00765B62C8B6D90A /* KSSignalInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 28E86BA05425BBA62D2C1C26C9911362 /* KSSignalInfo.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9B179332761F40F90E1AE878F8DDB364 /* KSCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B3362A6ED08DF78E22202739F1B852 /* KSCrash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B4D49E8B825297AC2CB416745D4A6C1 /* NSObject+KiwiVerifierAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AF8AD4F597FDE31FA4568204559DEF92 /* NSObject+KiwiVerifierAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9B91D571783E6F97774F530509F497C0 /* KWBeTrueMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E57EC15DCD0A56C88E7D36D5F7CE7D /* KWBeTrueMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9BEE074597D81C53482CA3C8E8B00426 /* RealmScatterDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2887F8172CD2C634B8FDC08C714BD553 /* RealmScatterDataSet.swift */; }; - 9C320EE7CE5F3A33BB9C0BF70436F38B /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = F6A905C155D83A39261866D65F92E9ED /* zip.c */; }; - 9C4A5269529CD8D1D8FC3AA0C862D246 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F10AA50F9D808E14A651D36400073CE /* ILineChartDataSet.swift */; }; - 9C58491D86D5C2D16DD67D3104F242D7 /* SENSpeechResult.h in Headers */ = {isa = PBXBuildFile; fileRef = F2C3265A9929A6C4E6B6925C390D60A0 /* SENSpeechResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C64C91C54EC981CFA8B5BB386E17E74 /* hmac.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A49493E2FDDF15FA2E657168E2559C9 /* hmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9CADF44F544E0792EA7F9152EE11B56C /* KWHaveMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = BFAC397DE1A16F31A42F848466BE711B /* KWHaveMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CFCB2A23C493A698579A4513E15FDBA /* FBSDKGraphRequestDataAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F0B4184D7F66E016122243C45FBDAF3 /* FBSDKGraphRequestDataAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9D0406F06E94090E99F6475D114CFE26 /* LSASIHTTPRequestAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F704A1B2C6DB0CBA5FE9CA348766433B /* LSASIHTTPRequestAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D25F0D7674E63F27A5005F350865796 /* Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 30750BFCC9674FBE36A2B6CE2C105549 /* Utilities.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 9D903AA7A8A056261706E44C6A1851BE /* SEGScreenPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2FC4E21424EBFF595AF6803851853B /* SEGScreenPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9DAA9BE91A0C5451E8078EBBB7F0DDBE /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D818A955A6046CC93BA65B931C589FC /* BFCancellationTokenRegistration.m */; }; - 9DABAE674BDC3B7C78264AC253337ABD /* SENSleepSounds.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F172F72E1A8490664556E91D4AD45B /* SENSleepSounds.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9DC6909AC7B4897CB2E310D4E3C2B600 /* BFAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = C08BA21DAE13DB22364E1550DE467B47 /* BFAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E0382CAAE99964042C92EDA6F4C2A82 /* KWExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 32F75FFE1483BAD2A9B1F1E6F2DEC3ED /* KWExample.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9E2EF1E5895B1EA3788DE90FAE1099E3 /* LGService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FAD384CA61220FC6C0EBDCF71887A59 /* LGService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E43CD2FDA8AF39139D6E570F544C965 /* RLMAccessor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3F7E36BDCB77935F11604F7E9E44AC9A /* RLMAccessor.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - 9E62F1253E7330CAC6DBA78608CBF5B0 /* RFC3339DateTool.m in Sources */ = {isa = PBXBuildFile; fileRef = F388A276B166D828FCF4FE8B945033A5 /* RFC3339DateTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9EBA4DA303F8ECAC9134D7852829BCDC /* FBSDKAccessTokenCacheV3_17.m in Sources */ = {isa = PBXBuildFile; fileRef = F82C8552881345426475003A0B817751 /* FBSDKAccessTokenCacheV3_17.m */; }; - 9EC17C9837976E1B94A578EA5849CCF1 /* SENPreference.m in Sources */ = {isa = PBXBuildFile; fileRef = BA07EC8239AD89716CB7AE126DA29843 /* SENPreference.m */; }; - 9EDBCBC0A90DD562B7210847757DDE8F /* RLMListBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = DDEF373FD2A99B534F6323C5074812F0 /* RLMListBase.h */; }; - 9EF4FAFD2899973C7E32BFC127B833DC /* KWHaveValueMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = EA067679DACE23737207DCBC5C7A71FE /* KWHaveValueMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F5038BECCA6AB5C8DA227A7129D526A /* DFUStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50B8E94366FB82BADDB196B452EA42D7 /* DFUStream.swift */; }; - 9F6DA774C2FE415548528FB199B55503 /* SENAPITimeZone.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D76E3273FCB253CDD14805240B6609 /* SENAPITimeZone.m */; }; - 9FB77A03839FEBE156A1BE8B065771DA /* KSJSONCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F26F60C58B5086675213C03F68C69EF /* KSJSONCodec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9FCC69300415E4D6CFB963A055901240 /* ChartFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8CE609D130706D34C02C120D2DE1506 /* ChartFillFormatter.swift */; }; - 9FEE2C40E84DEC3A3F584DDAFAFE4654 /* FBSDKWebDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = 394E0EB34426E65DB842FF98AB517BEC /* FBSDKWebDialog.m */; }; - A0514BA98C067714151307ECE076C07A /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD22AE258AA2FA099963A6BC59483FF /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A083F345354DD7609D331E2F9547F1FF /* KSCrashC.h in Headers */ = {isa = PBXBuildFile; fileRef = C5FBA85D548D02A296BF546FAA181C19 /* KSCrashC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0D27BCD0270D51F987EDEE321C092AC /* KWMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = D0BC3F75A68A4AA83C7DE5053A9B5E54 /* KWMatchers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0DAAFDF40F853F6531D164C4461964E /* ExtendableMessageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BBE0F5DF8AEA0C4D305A94FA20F4A1 /* ExtendableMessageBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A10A6561DBB16A2FADD2CA534B7C491F /* ExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3EBBB4A57E622A6B8CF82D635EB581 /* ExtensionRegistry.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A11B04F23C3193B9FF1E5E5389CC9B68 /* ZipArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B85A7E99977BBC2BF8FD9AFDCB21B34 /* ZipArchive.swift */; }; - A13C36A821CD65DBAF7D98274B24D89C /* iOSDFULibrary-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 28DE4D734A1BC4136083B5D672517EAC /* iOSDFULibrary-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1C2B54B7E650301CEF383CC460D77E0 /* RealmBarDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D083BC66915B806689F8C88A39D248A8 /* RealmBarDataSet.swift */; }; - A1D9FA5F88B9E8BA11D487F454978322 /* MSDynamicsDrawerStyler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9157BD7A05C708E4691A92D45A1946C8 /* MSDynamicsDrawerStyler.m */; }; - A1F9EDBB8CC207D2202D2D4D4EF978D4 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B328593408CB3F1D619A8AB46709C90 /* SystemConfiguration.framework */; }; - A20EE8ACF38639B5CB1C6B2DAA030226 /* ChartDataApproximatorFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84D8BA86B1E36D7B3D3E3B47FDC2E68 /* ChartDataApproximatorFilter.swift */; }; - A2D0C613E114F44E0A891D1470930315 /* CodedInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CEEC7DD92FE839914255D0B1A4E2ED1 /* CodedInputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A2DE140E74ABFD1514191A38FE76770F /* NSNumber+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D949ADD152BD58709168BC535C232214 /* NSNumber+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A3399C0A0262A6B36F34C975EA27493C /* KiwiConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD107FCBC43B0B4A8DA0C43B2444C95 /* KiwiConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A354CF5FF90E00C223E83BF3E4F0DA9E /* LSStubResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 071A2CDAF8D4CE490A79446640CBE1B1 /* LSStubResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A36614AD0C285393951824528DE38080 /* SENSleepSoundsState.m in Sources */ = {isa = PBXBuildFile; fileRef = A0EAA3BFCF14A4D3744864C1DA137F0D /* SENSleepSoundsState.m */; }; - A3767DA177DD42ADC9C73249FB0236CE /* LSNSURLHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C61B96BDEF7D0E930877D9369EC840 /* LSNSURLHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3836D0233881A5CF5179D99D2709FDB /* SVWebViewControllerActivitySafari@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FD524E231DBF0BB410424DE1686F787 /* SVWebViewControllerActivitySafari@2x.png */; }; - A392EAC51B4D3F9E57D2BF0B4905C47F /* FXKeychain-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2529986B25C4D9A988086319005BCFA3 /* FXKeychain-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3AA06F2E7D1887CABB68474F8D112B6 /* KSCrashCallCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A5A0D73E06BCA9AB5C5164E8812CE0 /* KSCrashCallCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3AF9727F649F21AC86FABCF00A2E821 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 785A6061EBF846C22D32C454D75D72C8 /* RadarChartDataSet.swift */; }; - A3C9E90CF86020321C042E52EECB2F83 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ABF28B21E98F739F501AB6A42DD0A19 /* BubbleChartDataSet.swift */; }; - A431A7B2C2F2F451175C32A89ECE854C /* KWBeZeroMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A6D83EF96DF0651EEB4D1CC55C1520C /* KWBeZeroMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A44FE40982E8BE6E160F35F2F1CC02BB /* SEGGroupPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = E7A4781CCC9CADF2AFAC7B754107A54E /* SEGGroupPayload.m */; }; - A47A8FBED52EDF9ABDBE1D530427A96B /* ObjectSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2F24E265F6F8AA64DC3DBEFC10AE7E3 /* ObjectSchema.swift */; }; - A4C257DC2D5B1EA0A393E4CA4596764F /* crc32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 483D61B7DC464B491ECE51436D3496AC /* crc32.swift */; }; - A4FE56E41066F451EE81B9394D754BDD /* MSDynamicsDrawerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E14F05F393D35754B7C2996D641112B /* MSDynamicsDrawerViewController.m */; }; - A51CE6F237749C72FC6BFAE1A5136B11 /* NSRegularExpression+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 25688C8318A800941558DE9D7B6CC38B /* NSRegularExpression+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5656FB6C94B63F0D8E2C95E18463026 /* CGFloatType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5321532F1A1907F189EB5B32982326EB /* CGFloatType.framework */; }; - A5A6E6963C431DC278BF1D41F9C62B93 /* KWStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 029FDEB55587E1FEF6A37FEEF9F3B49C /* KWStub.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A5C6FFA91B3FE094C2BF2A0CE4868646 /* SEGReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C4F2BB11602D30A924E4B7CDAB32B1F /* SEGReachability.m */; }; - A5CAAB1469DC8364BA4DD4F435CBEC51 /* SENAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC838FD7A644F3A846B795C7C0EBBAC /* SENAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5F49D63DFF80C09BC8B8BDD81D6F7A2 /* KWSharedExample.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B000FD8B040A661021569476ACE6C7C /* KWSharedExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A603825CF93EC4833A25E777FC4D2174 /* KSFileUtils.c in Sources */ = {isa = PBXBuildFile; fileRef = 91A8CC54A1F4CB30DD5CD7469DFB4964 /* KSFileUtils.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A645D9E09981D792FA6032FDDC43C618 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = 204B0E37E91052C9827449336E47F44D /* Property.swift */; }; - A662B63CB7F0D2B632963BAB144DF5AB /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE75D28D4CB06EBC7024B379BFB0E75 /* ChartUtils.swift */; }; - A6BB81CCF1F1A1817E7F40E5E38C09CB /* KWProbe.h in Headers */ = {isa = PBXBuildFile; fileRef = 0199501A652AF0056C6F91909403D23A /* KWProbe.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6EAB90EDBEE7E79370EC10BDAFB90B3 /* KSMachApple.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF7A4A8A151D05D3F15BB7655ADB9BB /* KSMachApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A70C204193C31D2EB5FFC6AACABECECF /* DDASLLogCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 807D313FF605EBE87CCED81694156D1F /* DDASLLogCapture.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A71499066BDA83E929B6D8260285C487 /* KSCrashReportStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C1D6F5D3425F46E5897FD29102DB98 /* KSCrashReportStore.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A72F7E9E5CDA415B4525C6C03F40DD04 /* KSCrashSentry_CPPException.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C701635A98AD9C6780BB85C54F3E5A /* KSCrashSentry_CPPException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A731D5B2C4015D6716BB61B3D9468404 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E9FD9B97D7F1A7934D7FD48FA78E7D7 /* BubbleChartDataProvider.swift */; }; - A7B0F819748AA709A4A07CB513A82CDB /* SENDFUStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = BD44693C7E0B8358080C8A17D34E5238 /* SENDFUStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7D06815D938581AE5DAADE13E32C2C7 /* Analytics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B3DA3B0841D6336AC189A14783AC326B /* Analytics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7E80324ECCF5E0C59D7DFDD693A9FB7 /* NSString+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C069AA43B53609013F4D06A226EE20 /* NSString+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A801934246A266E52EC1F02D13326877 /* RLMArray.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8F908176A50B46CA9C74FAAFF76E0FF4 /* RLMArray.h */; }; - A82100B4D722FEB8E2A363F65FE5A77A /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDB01191B147BB8DFF216B66779B2E55 /* ScatterChartDataSet.swift */; }; - A83B070E2E55E4B1EED26C6F5FA3A563 /* SENAPIAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B03BB94A953FB613A3D17B47F1B137 /* SENAPIAccount.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A8452DF49D51EB73E238DFE6BB16A431 /* KWContainMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = EEB3C2CF34C83353123649627A27A1F5 /* KWContainMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A876038A6D3320B2B5545E3C2B6BAB1B /* LegacyDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72B74F03AC58A3B6983EA983A09182C5 /* LegacyDFUServiceInitiator.swift */; }; - A8A87980C2BB6DA002A26828FAA607E4 /* NSURLRequest+LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5815BFB466C831217D81F909BCC540DE /* NSURLRequest+LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8DA39F1CC7C8F522C96177B97C845B7 /* SENAPITimeline.h in Headers */ = {isa = PBXBuildFile; fileRef = 472F59F3C73071959717856818AA3C42 /* SENAPITimeline.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A90DC5C2846194D86976DADD7AF6AB43 /* FBSDKAccessTokenCacheV3_17.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B25AC2CF852796F667653066E60918A /* FBSDKAccessTokenCacheV3_17.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A9297C166A71134DFDB790A76EBC28DA /* KSCrashSentry_CPPException.mm in Sources */ = {isa = PBXBuildFile; fileRef = FD7F5F52651E4A91F2CE8A4D56336F90 /* KSCrashSentry_CPPException.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A93FCAAC03E889EC03874BEA9DC74821 /* SEGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = 60071F199AE82524FB0DAC1CB9A77DFA /* SEGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9504A97CD29623E8C244742F35C60B6 /* KSCrashSentry_User.c in Sources */ = {isa = PBXBuildFile; fileRef = B39E8EE70FCC59A7A678CBA7ED03C60A /* KSCrashSentry_User.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A97B3966EBD1E99C8F228383B68DF684 /* RLMProperty_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = CCD8CAF972FDFA4CC626F3D1783D043E /* RLMProperty_Private.h */; }; - AA0547C464071B8BE006950EADA7EFD7 /* FBSDKBridgeAPIProtocolWebV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AEF158448A1C1544FAE4951B8D0405B /* FBSDKBridgeAPIProtocolWebV1.m */; }; - AA46E3E618BFE83DBDAA7E4588078372 /* SEGReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B55FC0C16710D5EFB7D946FBA47067A /* SEGReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AACA155CDA7A8711D1A26892EE0D7B37 /* ChartDefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A09B7B202A4CDE29DD6C71C0706C87C5 /* ChartDefaultFillFormatter.swift */; }; - AADB5A1BEA899BAE9397B66FD0575AA4 /* KSCrashSentry_User.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CF78509F42760DD61CD157AE9FF35E9 /* KSCrashSentry_User.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AAEBD557C0E4C57AA041D476A6338BAE /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271FAF678376BE95A08994767E77DBBD /* List.swift */; }; - AB13AB0B8907DCCAC8964F9E1D3556DB /* SENSwapStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 587B330F1531CEE195987FD79856BEB7 /* SENSwapStatus.m */; }; - AB2B9B5340D0AD510E7176951FA8F7B9 /* KSMach.c in Sources */ = {isa = PBXBuildFile; fileRef = F0059D77D85FEE3DE2EC9E06727B54C0 /* KSMach.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AB4B8C9D8D0C3607D83BACFD5F3F54BD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - ABB07A3B19C61A788627D6C64CD3E99A /* BFURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AFB153F2FB32B0C428586CB58E47AFE /* BFURL_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ABBD87E341BC8E06D4821F7778EF510A /* DDLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D8708A4FB1C905D339F5BA3AA860923 /* DDLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABD24A994C5831ED8874A7B2DB02436C /* KSZombie.h in Headers */ = {isa = PBXBuildFile; fileRef = 33E16B94637426DD8B521BBE5ADE837D /* KSZombie.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABFBF52B77F6D9F36AF2917A00B11312 /* FBSDKGraphRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AED365EBD19F96BDBA1E25E024D7E26 /* FBSDKGraphRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACC2F3F46295CFB1EB3CDEDA9FDC6E42 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = C9B19350D0DA5D160BB0930BF02CD69C /* BFExecutor.m */; }; - ACFB1F02A4BB9BDE9B96E6DF6C275B81 /* KWMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A730A631115BF7B3FF61B6CF533CDB3C /* KWMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD1570BA7555143AA4598A1F2D1A04B3 /* RLMCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = CF9473861B4B3B96AEA5962AB60AFA14 /* RLMCollection.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - AD1EB47C0583B13CF57FC7BDB49D2E4F /* LSStubResponseDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = EF2F792D0FF3A904FDF12F840C801664 /* LSStubResponseDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AD5791CDCFB3CABB44CDDF69E8D9F4BD /* FBSDKMonotonicTime.m in Sources */ = {isa = PBXBuildFile; fileRef = A7C6F7A8981D14FC0AC6C30B929D02A3 /* FBSDKMonotonicTime.m */; }; - AD8B8575F97C7A5D73826214F238D047 /* FBSDKMaleSilhouetteIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = F44313744AA0586A143839C11294DBDC /* FBSDKMaleSilhouetteIcon.m */; }; - ADB22F7D323D390045030CAC6D14FFE3 /* FBSDKIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CE451BAFD099C1AAB773A80D963D50 /* FBSDKIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ADD1D91B9DA2D2CC6285440E34DDACAF /* Pods-SenseApp-Sense-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C861CCF6FB04DB5D53FF6EC4CE1C2C6D /* Pods-SenseApp-Sense-dummy.m */; }; - AE0E9AC5639E277297BC0535A1636AD5 /* BFAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = FD17CE6C71AD546000EE4985BF1BDFE5 /* BFAppLinkReturnToRefererController.m */; }; - AE1445A7BA157D89E14E9F9B391E3A1E /* FBSDKKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F52E6362F8A6055BA647C3A0B51235BD /* FBSDKKeychainStore.m */; }; - AE3F4A67BEF2DF724AA9936EF13A0666 /* BugsnagCrashReport.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5368988C81FD5B1945594CA1CEFF2A /* BugsnagCrashReport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AE44FC70B8CDAAD98F245A6950AFB18F /* SENAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5E7A6AE591A0786B9C0FF140577F91 /* SENAccount.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE4F7AA3E081C7DBADFA350EFE92E395 /* BugsnagBreadcrumb.m in Sources */ = {isa = PBXBuildFile; fileRef = 23049F14FC6B811C1730AAE5E492A864 /* BugsnagBreadcrumb.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AE593A8CC16421C0149C275D2C61A954 /* SENRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = B296E591DD1116B86A05F4475FFAAAC5 /* SENRemoteImage.m */; }; - AE86998D6394C1FC891DC0D360CA27BA /* RealmPieData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02A4895EE81843D57911C97728A52D06 /* RealmPieData.swift */; }; - AE93351B75171C5ABC4E3C081A63BA52 /* CGFloatType-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EC79BCDD09F0DAD1BAAEA142E442F7AA /* CGFloatType-dummy.m */; }; - AEA632F4FC1561E1DCD260BE2D098F4E /* KWReceiveMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF7D7E2DC6B72F9BA8F55FF45F5E35F /* KWReceiveMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AEDE42DF5B7318C8A93CD1D74B51DB2B /* RLMObjectStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2CBE9638C7535B5A1D07345A235BE6C8 /* RLMObjectStore.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - AEF2EB3BAB7712F2B6BA652F29A0CC36 /* SENAPIAppStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FB551805734C44769002897071557FA /* SENAPIAppStats.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF13F27E9ABAAAC683139AB7EC5E782D /* LSRegexMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = BCBA469F941AA7024ABC60EDD8070DFE /* LSRegexMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF178C6C9DFDE8FC5E3E300B4C2D21E9 /* Bootstrap.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE4F0D5C9D7E0D70CDC64CD67E21AB3 /* Bootstrap.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF1F33CA7CEB572DA654D829BC41BD54 /* RLMRealmConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C92365B992831C7105F20336468C0779 /* RLMRealmConfiguration_Private.h */; }; - AF518C1404C2298480C3E30EBB853752 /* Utilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B6A6423AF01E6B199795EADE844446F2 /* Utilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF9EC1110BAA891D3609FAB567772E87 /* KSSystemInfoC.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B3692CA0D8AD1C21372637BBE1FE96 /* KSSystemInfoC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AFF645753C6571F1665035FB5CA7B9AA /* KWBeIdenticalToMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE585BEA20915E28E0E6D603F3B7136 /* KWBeIdenticalToMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AFF88BCB924B4CBEA5E58B2CEEAE2F5B /* SENSenseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FC6A937C90DB94CFE351E48C0C5C7A /* SENSenseManager.m */; }; - AFFB8E3F3EB9ADB6173973DCFEF25CDA /* SENAPIAppFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = 89034448AC6B2C4FC8F0D397AFC052FE /* SENAPIAppFeedback.m */; }; - B01802026B8FDB8D509903CF1CD5CE6F /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 62BE933B5EA47499AD413A17857E5DED /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B018ABEC6EDE22C5B4969E4E14061FC4 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B037715A730DDBD78E533777AA9FCE /* BFTask.m */; }; - B021B27A81E0C6061F25C79564A53D71 /* FBSDKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 87E39A78413EC902A9F86555B9AF4C39 /* FBSDKIcon.m */; }; - B02E9D60E4E7A2E894118905160D4639 /* KSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2997C72CBD2E2EEAEDEE841C252B2185 /* KSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B03669220562270F57646FC89B06F2BD /* FBSDKTypeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F995FCAE852AA98613D674B5AC680F7 /* FBSDKTypeUtility.m */; }; - B03EFF047468F876FFD1F16D5E5A5D53 /* SENAPIAppStats.m in Sources */ = {isa = PBXBuildFile; fileRef = DC8189F7408FB3A26C4F00D42E86521F /* SENAPIAppStats.m */; }; - B0560FB6067149E28A162F45CA8F1323 /* SENAPIShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 65954D1ECEF526067C2014209F004B1C /* SENAPIShare.m */; }; - B06641B9B538B4ADD7684DD5D1C90649 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9313A34869FF26F92737B5E6A49A06BF /* AFNetworkActivityIndicatorManager.m */; }; - B070B7B5F26E61F285B2474278A52C09 /* SVWebViewControllerNext.png in Resources */ = {isa = PBXBuildFile; fileRef = F751B192247A2C87CFC323A7DF40EFA0 /* SVWebViewControllerNext.png */; }; - B0DECAC9010C9E44FA6289D1FF215FE7 /* Field.h in Headers */ = {isa = PBXBuildFile; fileRef = AA50334877160F0F2ECCB801B5A2D7AC /* Field.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B1297604A3BAFBED1D72877A93EA48D3 /* SEGIdentifyPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = A63714C2408D8A44A6CA8682DC6E9D87 /* SEGIdentifyPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B139561F0B18A476B62937295D601FF9 /* FBSDKLoginKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DB49F0B786CF6030B0D1E0394E20104 /* FBSDKLoginKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B14239B3328627457A40493EE31F651A /* GeneratedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0339C9586241574E408BE851D212C786 /* GeneratedMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B158E11A535620B03FCE366AE998F786 /* ChartMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC387335D57694B3F82B50A98EBD983 /* ChartMarker.swift */; }; - B17FE9A760F5ADD9D7D5FB6E9FCEA5D4 /* KSObjCApple.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A3296304D2422064400F80D1EA9C9E2 /* KSObjCApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B343474AAD02BE608BDB11C9C51F7F29 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - B38F8CEAC3C2FB6F99F4DBC1A476A851 /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43023730F9914CBA6221FF9C029EE628 /* IBarChartDataSet.swift */; }; - B3DDBF11DBD75506CD650CC29766422C /* KWGenericMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A2EAEE7FAED682993269EB0E92896302 /* KWGenericMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B41360BBE19815132C537ECB2774C595 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45B8264885AB593A118BFCDD40F308C /* Error.swift */; }; - B4283DA2577F5B1188E2FFBCBF7AC4CD /* LSNSURLSessionHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F0931F05FEAABBDF4BF55AE4F957D41 /* LSNSURLSessionHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B4685402F825699A9BBC624B9FA54FAF /* LSStubResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A38D727960CCF83F379B9029EF8AD42 /* LSStubResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B46E25B0F32D00875E20E9A482DDF2FF /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81C02D288B1874BF9457C12B9B8F77D2 /* ChartLimitLine.swift */; }; - B4DD419BF44FF99578F30B22369C76F6 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = BBC3F7691EB675FEB8020A6CF68E163C /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4FD5CA4D6A7DAC67F8F0ECA20E35B0E /* FBSDKBoltsMeasurementEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F821475E818002E6FED6ACDD48C53D /* FBSDKBoltsMeasurementEventListener.m */; }; - B537D08ED7201F4A19125BC2E2067E13 /* KSSysCtl.c in Sources */ = {isa = PBXBuildFile; fileRef = B32A10CAFD282C633662C18C5CA6E1DD /* KSSysCtl.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B5463A9DF60476D29A3AC88EC1221BB2 /* KWIntercept.m in Sources */ = {isa = PBXBuildFile; fileRef = 250102B2641534FFFF30D00214484F3B /* KWIntercept.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B594158B3009DEFCCE840DCAD106193F /* FBSDKOrganicDeeplinkHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = E97BAD2FF7962B74F5CB00D0D5E26F6E /* FBSDKOrganicDeeplinkHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5C6F2403BAA5A44D3F63150A853E3F2 /* KWUserDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 95E1E3ACA4E79912EF2ACFD5C87CD71A /* KWUserDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B5EA39984306E42628CE8B9E68945A18 /* FBSDKWebDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = BDF7C060727FAD50A08816F9C03664AB /* FBSDKWebDialogView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5EBA34EA64D1C809B98D4DE2D4A1E32 /* ChartXAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F994C108E1C27A48503143A851C87019 /* ChartXAxisValueFormatter.swift */; }; - B5F53F21DA9A987D8A2A0409C12B6515 /* FBSDKAppEventsDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F9298F526B471B2C3D4D5CA396FA03CA /* FBSDKAppEventsDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B60AA343C3F41B98E72EA34ACC901446 /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */ = {isa = PBXBuildFile; fileRef = B0EC883C206C11468A9A029FA0DB8779 /* FBSDKBridgeAPIProtocolNativeV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6DA57A45A5402F28F0596E76157148A0 /* FBSDKGraphRequestBody.h in Headers */ = {isa = PBXBuildFile; fileRef = FCBF2A7369ED5A7B944F5BB1BBCE5237 /* FBSDKGraphRequestBody.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6DD4F60FBC929C4570B66E477BBF2197 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = B4A366E899A36DA54B0B82222C77462D /* BFCancellationToken.m */; }; + 6DE9DB45D50BE8F0137587705FE7B6F4 /* Pods-SenseApp-Sense-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C861CCF6FB04DB5D53FF6EC4CE1C2C6D /* Pods-SenseApp-Sense-dummy.m */; }; + 6DEA0F735F3FB51ABC3D80F8F8F8A52C /* KSCrashDoctor.h in Headers */ = {isa = PBXBuildFile; fileRef = 01F0306F12D64331DD35EE1B95722119 /* KSCrashDoctor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E1A2048C0319AAFDCCA7310B12ADFDD /* FBSDKAppEventsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8296D1E9EF1DC75837EB04F7D3F69AA3 /* FBSDKAppEventsState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E2877FD997CAA6786E431F052171329 /* LSHTTPRequestDSLRepresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = E1C4924E95F45DB3C36859756C23A879 /* LSHTTPRequestDSLRepresentation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6E7E888A92D8DA158C53B2283B066C1D /* zh-Hant.lproj in Resources */ = {isa = PBXBuildFile; fileRef = B4C2E29333DD23080923425CAEDE8A6D /* zh-Hant.lproj */; }; + 6E9219C16E9BBA071865BED517B90C92 /* SENConditionRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 3553CA11C2BDEA2EE8D6FF9E4D19C36C /* SENConditionRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EE79655C5B88B390FD19713AABD74B8 /* ProtocolBuffers.h in Headers */ = {isa = PBXBuildFile; fileRef = FD419E164900B56221A6CC3516BFA5CE /* ProtocolBuffers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F32E6AFC7B57505B72AD9A511F7B24A /* KWStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABE4D472F478150170F5755D7D6993E /* KWStringUtilities.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6FB825FF8D7C2637067464408AB71060 /* FBSDKLoginConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3BEC3066C3A4DC3322B124B40D5582 /* FBSDKLoginConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6FDA3A5EA9A1E19288889FB19B1D9CF1 /* SENAPIDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = A5D0AD84641D5136CD8C15C9F50D777A /* SENAPIDevice.m */; }; + 704D6B15D16FEE89C20F4C0F85D482E2 /* ZoomChartViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFD13C8B94DAA9A40F90466683E72170 /* ZoomChartViewJob.swift */; }; + 7066F824C867A8F8185E7EDACB6AA933 /* KWGenericMatchingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D6633F7F968321D15B7C11632A70FEBE /* KWGenericMatchingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7084614CB99BBD6985870138B32BEF1F /* FBSDKCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = B0AF0A87E7233D79FBA1D73F215615BA /* FBSDKCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70EF76778F021D1FE7616C4B6998FD29 /* KSBacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 44AFF3A656DC0EB28F9E5E1CD1E6ADCB /* KSBacktrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70FA61E217AF604CD56C983467E6F72B /* DFUStreamBin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6603D111B30BA8C878E34073573719 /* DFUStreamBin.swift */; }; + 7138639CB77C068E00B44EE0D65A030B /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73A122698A5F42AE9943B9827A73084C /* BubbleChartDataEntry.swift */; }; + 71DF4E09B103C2B0371FD6F5DA59F6EC /* FBSDKLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = CA3EB990B3FB64C36E02441F990BE726 /* FBSDKLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 720F9DEBFA33A185199E86D5CF52A721 /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C8474D0C154A507832C8C3A59C4DB952 /* AFAutoPurgingImageCache.m */; }; + 72C442BC4DFA20BD7563DC620938D427 /* Descriptor.pb.h in Headers */ = {isa = PBXBuildFile; fileRef = C65EA4EEA9FD3852D79BCB2263A33654 /* Descriptor.pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 730991AD850D31180306A0178FD127F7 /* LSHTTPRequestDiff.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B6E5CE509D2AE9621028C56C8344091 /* LSHTTPRequestDiff.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7319CA73DA7B8B98B34A0DF25FC499E1 /* SENService.m in Sources */ = {isa = PBXBuildFile; fileRef = 0586A2A4C02F8D34C8CFB47D263453E6 /* SENService.m */; }; + 731D9F81768C450CD3826F7ADB9B9883 /* FBSDKGraphRequestPiggybackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D26F300A92DDD1C81AFB3C1B07150CA6 /* FBSDKGraphRequestPiggybackManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7398612A8F3D1A60875E4093FF85C64F /* SVWebViewControllerBack.png in Resources */ = {isa = PBXBuildFile; fileRef = F5D3CD7ED7A00774201114EDD34FFB92 /* SVWebViewControllerBack.png */; }; + 73C881AD6B7ABB723DE7E39D57DAE3DC /* DFUFirmware.swift in Sources */ = {isa = PBXBuildFile; fileRef = F385BB9FAC9229B8775E94E32473B8AD /* DFUFirmware.swift */; }; + 74428B8970F19AB619C4014EB56CE123 /* Services.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF133ED00BE576251125FF9452AC336 /* Services.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 745A1C317DAA43FBE59C4D153F107F98 /* FBSDKTypeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 233BD021922C9BAF99E2568932DE5EA3 /* FBSDKTypeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 747FAF26070DA8AC38EEC195D8F93E92 /* SoftdeviceBootloaderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE23A993C4C1090E1CDA57251710606 /* SoftdeviceBootloaderInfo.swift */; }; + 750989FD056B85C0EF41717710C87FD4 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AF170D779D94E7073CA0E21DCE1A57A /* Bolts-dummy.m */; }; + 7514741358BAF70E746EAD5CBFD67709 /* FBSDKProfilePictureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 096D1A6B4D4F2D9728BAA3591527DB8F /* FBSDKProfilePictureView.m */; }; + 751CB5EE5AF61B4E8029F3B4FF139F75 /* SENSpeechResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F0B82158E75DD6D1F4A7CF353AD068 /* SENSpeechResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 751E36BAAF83AB556E4801F1258AB4CD /* FBSDKLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E53BF4BD4F41841970E07CF89DBED99 /* FBSDKLogger.m */; }; + 753F025EE33DAEBE3B3BFB1DF9E2AA03 /* WireFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 76A1DAEA2B5769D69C1EB9CAD54DFC3F /* WireFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 755744E1E6BD0F0C6BD09011FB1F0402 /* KSCrashContext.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD02D2E3A4884AD37F49B8A754806F3 /* KSCrashContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 756B3E8603A50B3F58C17DFCB2A4E565 /* FBSDKCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 826A08E0CE1742EE2DCD1B9BB7B83E6B /* FBSDKCrypto.m */; }; + 756B839C3495C14BCCFD936B91AECF77 /* Analytics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EEDA7757980382F904958872DEA755C7 /* Analytics-dummy.m */; }; + 756BBF0C13BBD09FA316E7DBA8727AC1 /* FBSDKServerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 44D57768A94655466F1628B40CE4EBF9 /* FBSDKServerConfiguration.m */; }; + 756DE50F61D50685612360418F7D1611 /* pwd2key.h in Headers */ = {isa = PBXBuildFile; fileRef = 44BA91345B51C5D545A9A6CE9091385C /* pwd2key.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7596C3F4F47D251D4F2BA1FA027E7093 /* aes_via_ace.h in Headers */ = {isa = PBXBuildFile; fileRef = D8FDADEEE0FB09423FB8D3030D5E19F1 /* aes_via_ace.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 759736E341C9294F4DC21A7DACB9E5DD /* KWInvocationCapturer.h in Headers */ = {isa = PBXBuildFile; fileRef = A260DA11D6BC0B6BCD2F5BF3C175646B /* KWInvocationCapturer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75E0DF45EBC1D6AD8B4DDA5543BED2D1 /* KSSysCtl.h in Headers */ = {isa = PBXBuildFile; fileRef = 481A9792966B0F69881FF4C0F2C7C59D /* KSSysCtl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75FF2ADC152EAD954D9944BC9D370BDD /* SENAPIDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AE1CD3FAEA4DB0404B10611CB3DA5FD /* SENAPIDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7650D707CA8A5D638174D3EC655044D2 /* KSCrashState.c in Sources */ = {isa = PBXBuildFile; fileRef = B272BDD08A9E560AA898490D06D07470 /* KSCrashState.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 76CDA5A95C33FCF344EA7720A3584142 /* KSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = FC79A5F0EE9C2AC70DFA52A7CB4F4F1C /* KSLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 772183FF7E0670930F6B02C279AF3F6A /* KSArchSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE5890B03FE71D88FC154792221EE62 /* KSArchSpecific.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 778F9F084A59F0B58B9943FC2E9053CF /* KSCrashSentry.c in Sources */ = {isa = PBXBuildFile; fileRef = 578A306AA4CF12D9B614387DC1E27723 /* KSCrashSentry.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 77D927FAAB951410726B37EBC790E884 /* FBSDKURLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B3BFA78881DE0406A5CD3605D1A78E /* FBSDKURLConnection.m */; }; + 7814413E3435E85FECE273B9760AE526 /* DDLog+LOGV.h in Headers */ = {isa = PBXBuildFile; fileRef = 97C78BFB8AC3CE98AED06E94161F9C21 /* DDLog+LOGV.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7885FA653ED888B5AC9776EFC33260A1 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 251B8765F279E439B91FF6F2DE423526 /* ScatterChartRenderer.swift */; }; + 78FE832F5FD591A091A4C5BB5FE70F49 /* KWBeforeAllNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 56FB2F14FBCE04A3A5C18D4809EF7EE8 /* KWBeforeAllNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7962670960797DC09C84F93C2D0F0EAC /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA412360253A2A71C1EEFC2B51A3763 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 798EAD49D18E63D8514E32C5804B8E07 /* SENConditionRange.m in Sources */ = {isa = PBXBuildFile; fileRef = EF5932F9102DC9F3DD607AB4BBE96E21 /* SENConditionRange.m */; }; + 79A4E1B0A007646762F827AE8F0AF2C3 /* NAPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DB17D53856AEC6F37174A136A5DFAFE /* NAPickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79BDD3EFDA7CA2DCE00D6B8472416B11 /* FBSDKGraphRequestConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = EAD2EBB8019C5DC0C59979ACE18985CE /* FBSDKGraphRequestConnection.m */; }; + 79C65AF2F43E3CB84F82EDE53AACF781 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 79EFF8C43089CF4CD28F2F2E14F4123F /* KSCrashState.h in Headers */ = {isa = PBXBuildFile; fileRef = 60CAF3248C4832B9782CF35E8E5DB984 /* KSCrashState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A5BF6CCEFB1B3A347929D7EB093494E /* Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 61C87EEC783B9C49305471E7207BFDFF /* Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A638147894714C4091A65E783E2E10C /* SENSleepSoundStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE326B4F4BD3881194984CB91021CF /* SENSleepSoundStatus.m */; }; + 7A6667ECD462CB77F77CD269DCA78987 /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65BC73508A3018B573A86518C769E2 /* DDASLLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7A8DDE292F6E2047CAE9031673777029 /* FBSDKGraphRequestMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 3582354A58B50D537947646B51933B6A /* FBSDKGraphRequestMetadata.m */; }; + 7AAFA8A0FDF283338CF50205D1E30432 /* KWExampleDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5902DD6736E2A3DC926027DBC0D63DA1 /* KWExampleDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7ABC691BB31BC8C4B131E4773437168A /* SENSleepPill.h in Headers */ = {isa = PBXBuildFile; fileRef = DF24D097A8A34C52FF2B86097CD6D9EE /* SENSleepPill.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AE36195E3BE539134E0C7F589AA6AB1 /* KWStringPrefixMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 95A79DCD328B0777801ED05E524657BC /* KWStringPrefixMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AF780C2615C8E788C3A0260E05AEF13 /* BFAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = C577604989A799AEC7692B0DFFF5AD70 /* BFAppLinkNavigation.m */; }; + 7B40310604685F79D5CB3DECDA3D380A /* GeneratedMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = D94906412DF4CB50BC1B6DAE52943917 /* GeneratedMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C0CF9D10CDA74A457C9BE2C646110CE /* KWObjCUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D9693FC0517C4471BA2871F056BCD9A /* KWObjCUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C41F0E24216410A0D4014F839A960BE /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A3B9EC76C8547196955D1A70F79C297 /* Security.framework */; }; + 7C6BD93D4C39735083CCA7520779C466 /* WireFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 819997651869171E38B8F88B6C19D6AF /* WireFormat.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 7C8C7A21918AB657BA6E595DC2EF27D1 /* KWObjCUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B61058869909715EF832391CE4BC45E7 /* KWObjCUtilities.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7CAF3352103069C4E6A8424DCBD85DA5 /* FBSDKGraphRequestBody.m in Sources */ = {isa = PBXBuildFile; fileRef = D01AB1931CABCC4F7B0189B06D449E02 /* FBSDKGraphRequestBody.m */; }; + 7D182090F795BB5A83ABB33DD38AB1AD /* aestab.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FF1E7D89366342A8CF9EE0B0DCA9C02 /* aestab.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D3522ED5F0178BE77E5371371BE1E07 /* DDLogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = F61E0C433C5E2334B6D1B9635C749CBF /* DDLogMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DF495EB05AD39E805402DD092980743 /* KWDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B6EAF6ADA7BAFAA5071FF052BB6E6C52 /* KWDeviceInfo.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7E03BB19CA3D612921FECF311766645B /* SENSupportTopic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5283E468C18BE03C90F318828496F39B /* SENSupportTopic.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E10AACF608B23EB483FC17139829792 /* FBSDKServerConfigurationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 136DFC9EB9F50C8683996DEA2E99A2E6 /* FBSDKServerConfigurationManager.m */; }; + 7E11FABB0A882D650C121D394BD56CD0 /* SVWebViewControllerBack@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46FFBBC0CC5C5713DA70A950EC1AC447 /* SVWebViewControllerBack@2x.png */; }; + 7E367369162B666C66214A300A6DEB8F /* SENDevicePairingInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F482A474B88D12D3E2125726E66D4BDE /* SENDevicePairingInfo.m */; }; + 7E5C133FC73237FA4541ACF81A54D9C2 /* LSNocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D8F5B6F669891667ABCA22851A8D0B8 /* LSNocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7E984791E7D3C9646BA8D4F466CE8CC4 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10F133B0AB69B6B14E37431251C76F34 /* ChartViewBase.swift */; }; + 7EDB45AAF9469718FFADA72A53807B0A /* FBSDKTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = E3BE55CECA82576948AB0EA53BD4EA17 /* FBSDKTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F312B73FFF1B91AB36300EC193AF789 /* KWUserDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CABF671E6F4291589BFB54D8938A249 /* KWUserDefinedMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F78A2A2A6BD19A368190096BC627321 /* FBSDKGraphErrorRecoveryProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = E431658F84F6875CC134E3BA9BC5D72B /* FBSDKGraphErrorRecoveryProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FDC0A56488E17A27401334413574484 /* SEGPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7C3374E8E535B2622C7B3693606251 /* SEGPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8005F1F92553DBD28E5EF469A9C7E72D /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DE4D6B098C652E7C2ABB68F50298798 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 809A6DC289BAA7FF1807ED89A4F67747 /* SHSProtoBuf-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DFB3AEA54D13300C7E077B406C04F415 /* SHSProtoBuf-dummy.m */; }; + 80A115A98AAE4D5863B303B6A01C86B0 /* KSCrashSentry_Signal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EA8C9F429D29B30FD517D3E08E6013F /* KSCrashSentry_Signal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 816922AA1A6DF6EF6C41658AAA4E9744 /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 286BC984A80ABB7228ED7F272B72EEDF /* LineScatterCandleRadarChartDataSet.swift */; }; + 81766E6B01BDEE7CB4C540B461883709 /* LSStringMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B60E83817E45086154CE9DB09FF26E4 /* LSStringMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 817F26E9EBE8706B1329221C09C22FBC /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 444E65A5407BEA1DF0F05EA96E05F752 /* PieChartDataSet.swift */; }; + 819C97952F789B49D893D1FA5ED1A948 /* SVWebViewControllerActivitySafari@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4E071F1FD04E011A0809C129B3102D48 /* SVWebViewControllerActivitySafari@2x.png */; }; + 81AB3F1CFC47349F030F585799960B47 /* CBUUID+StringExtraction.m in Sources */ = {isa = PBXBuildFile; fileRef = EFAF329A734DA62AC240F7C25E469096 /* CBUUID+StringExtraction.m */; }; + 81B4A126C45DE378E9EB7B7C9B1479B6 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 92DC9AE9A20D8104F363B91A0250569F /* UIProgressView+AFNetworking.m */; }; + 81F620F20D4D2147EFEE4F6AF790E298 /* NSObject+KiwiMockAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E599B04144A7EACE63030D3FF6C563D5 /* NSObject+KiwiMockAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 821CCDFB755A193244EF7EEE8CD76679 /* entropy.c in Sources */ = {isa = PBXBuildFile; fileRef = A25C987A4AEA6FC3527E578D60ABC5D6 /* entropy.c */; }; + 826841B5E865FE8FDC6A9AC108D1C59A /* SENPairedDevices.m in Sources */ = {isa = PBXBuildFile; fileRef = DB2B12626BF79C2EBE3E1A6C40087F88 /* SENPairedDevices.m */; }; + 829C926B3C003C534E689A485D850915 /* BFURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D52C59B259AF0BC980890E3D1D76B1F /* BFURL.m */; }; + 82CCE291FE379F44ACBCB2F48B997579 /* sha1.h in Headers */ = {isa = PBXBuildFile; fileRef = F7D6B53A202CBED10113D9BE90B020A1 /* sha1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82D304988D6DBA9DBA6D1019E127E85B /* KWFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7058B9F355950BAF6579350B07C98A47 /* KWFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 82D4C1A09ED42F67B74B4F41DF8C131E /* BugsnagIosNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 70AFFD18D538849330A0A5399111B567 /* BugsnagIosNotifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8302C13949ED7A29FF79F68A06269DF1 /* Charts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B77E9EC159500DE759DEBB14A5AE8FA /* Charts-dummy.m */; }; + 832F09AEBBD31B1CFFDCDCEF9C1BBD10 /* ARCSafe_MemMgmt.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B10797B5F2DE2E11B088983B822967E /* ARCSafe_MemMgmt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 83347CCAD82176BCB598146079C3E432 /* FBSDKErrorRecoveryConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF2B5742CF560662983C92059F9920E /* FBSDKErrorRecoveryConfiguration.m */; }; + 833ABCA6C216A8FDE7DF2BDBBFD05A6C /* Bugsnag.m in Sources */ = {isa = PBXBuildFile; fileRef = F294E8FF5D191A431F19CCF42370439D /* Bugsnag.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 83AE9892A672589822DC36DA7CB98CA8 /* MutableField.h in Headers */ = {isa = PBXBuildFile; fileRef = 09BA45663695742B90FF32BC550F2466 /* MutableField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8400CCF977CE10216413E1A02B3FB16A /* LSHTTPClientHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 335013E67B25FDF2F329024853F4B7B4 /* LSHTTPClientHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 84A04D652E36C43FDE641217A3A20FCB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 84D0AB41EAC79FA0188E550D930A62B2 /* KSBacktrace.c in Sources */ = {isa = PBXBuildFile; fileRef = A5EE17D3395CA70AACB8D605575BC5E5 /* KSBacktrace.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 84EE5C0FDB8496F60D65F732F1818C3B /* KSMach_Arm.c in Sources */ = {isa = PBXBuildFile; fileRef = D85CB9893D4BCEC48DF94E1C82888251 /* KSMach_Arm.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 84FED22BD581BC23690EE118774CC303 /* FBSDKLoginError.h in Headers */ = {isa = PBXBuildFile; fileRef = 810895641E2FF14B09D974A80F25A151 /* FBSDKLoginError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 85138E648F05AA95C1E9309D04EF9232 /* NSString+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = 093BD6F2466C276E5DF6F173C291B7B9 /* NSString+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 855E9DB9C98FE29199CF68D6FADDBCCA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 85B0D7D287D247FC6CD822E36AF63F7F /* SEGScreenPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 86227FE61A80A4D7BA1F1A941F7868B0 /* SEGScreenPayload.m */; }; + 85B92D0747D9CC79377EA1BF6162E75E /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 410D33EC6B84F80D2A0D5DF26C5E3753 /* pt.lproj */; }; + 863193E645B6BDBA54CCB149AFC12305 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 79F4899E536B5A9493A3EBF40EB4D5D2 /* AFImageDownloader.m */; }; + 865BA64E47BC6A4C71F95F36A7286CA2 /* brg_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C79BEE3F9C4E4528482337DDC5F6F00 /* brg_endian.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86835D5E61E39A1F387C66E933E1B2AA /* SENAPIPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = 96B44C96B0C03DABA06ADCD6A12F29F2 /* SENAPIPhoto.m */; }; + 86B942B58D92A3C0DBB3AFD575ACEE57 /* SENSense.h in Headers */ = {isa = PBXBuildFile; fileRef = F21A89785E568922E31A576572F2711A /* SENSense.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8710A03578A34A9770D2D5C03545C5A0 /* FBSDKSettings+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BDB84896E11B9C04BC87C30F1727A7 /* FBSDKSettings+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87420D7564A374CAFC877F6318B9A31C /* FBSDKAppEventsState.m in Sources */ = {isa = PBXBuildFile; fileRef = D81782B990C3C48EB11F9EB180609E6F /* FBSDKAppEventsState.m */; }; + 8765062552014BB40B22BC05F94FB294 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 87A1C660DD148AF5F81D469628249523 /* KSJSONCodecObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = AEFACB543EF6823230F49643950A2C40 /* KSJSONCodecObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87AF96EB8ABAD1C188179A56B1EF120C /* NAPickerView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B0F7B3863232C0F4F158904C1E3FB68 /* NAPickerView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 87DAEB9EB7EA7FA3D3BD8F4B4E6B7F35 /* SENAPISleepSounds.h in Headers */ = {isa = PBXBuildFile; fileRef = 272C6160E742755DEC8FB3F2C4609C36 /* SENAPISleepSounds.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 87DBF11EE01F5406EEB99C9818D90111 /* DDTTYLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C12A843003D2BA39D02F96C191F43DA1 /* DDTTYLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 880034CF2B053A1CF99FBAE4D9211044 /* BugsnagConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ED6019008E4C0B4EB33078314CF8BE6 /* BugsnagConfiguration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 883D15756D910CB5835C299149D91979 /* _FBSDKLoginRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = E833C684C22CE60AC54337E91C3EBEC3 /* _FBSDKLoginRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 889743A15847A11C1BC9CBFBFCAAB046 /* NAPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B120066EB344A80959ADD129D540620 /* NAPickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 88C46E2438E04322C8690F07F3C804A4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 88E8B12105F61A66361205D6717084CF /* IntelHex2BinConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 09F85D2AE50EFA1C401CF8D1A893E287 /* IntelHex2BinConverter.m */; }; + 8964F3051DB2BF25A42DC8CFE015670C /* DFUPeripheralSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = A033C59917F1A3214BCB99DCEAAAADDD /* DFUPeripheralSelector.swift */; }; + 8AE0EEEDFA627806340AC3CB36F98B07 /* SEGTrackPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F664F811A04D0CB3425299786E8399 /* SEGTrackPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B02A3572B65DD1A5CB9CFF27649AD6D /* FBSDKCloseIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFAFA65F78EED714809980C431F233D /* FBSDKCloseIcon.m */; }; + 8B8548F45BC16C70AB1FACD26347FFDF /* ChartRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EC1E0036B5DE32DE1E6F23DB41175EB /* ChartRendererBase.swift */; }; + 8BB715E8884807A499E4169A6D14B0EB /* KWBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B3D11E7E09E1D2FA938684C7D5E6459 /* KWBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8BC83A7A9CDF92CA8547583AD6F40D98 /* FBSDKAppEventsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = FA481EAF2A732C71CAE6FAA4D80E0B53 /* FBSDKAppEventsUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BD01C15C66902993368FDA55C85241D /* SEGGroupPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8C4FCD3415CEE75527DC0E85D6DEA5 /* SEGGroupPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8BD5B947A8FFFA1520D594F31CFF193B /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 268B1B39E5E15EB94D8F9A955095AFAF /* IRadarChartDataSet.swift */; }; + 8C0CBCDC06D57B2CE03FA16178458004 /* SEGAnalyticsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E18339728278CB13A92950BBDACBC727 /* SEGAnalyticsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C71B05FCCE6A6ECB433E9169290989D /* LSMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F4821BB04144ED8940BDF07C07CFF98 /* LSMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8C8A4496A43B0C7E885DC7CA6F85545E /* NSObject+KiwiSpyAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9507986D0DAAECDEDDBA61852A2AD25C /* NSObject+KiwiSpyAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8CA3A1E5402E7B8033E818A1A1F39477 /* KWBeZeroMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7494CD35D990A23DD3B407EECE0A1D19 /* KWBeZeroMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CC214F6E3326BE9F63BD0C41FE12469 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 8CDC7C76E7465BA1338CF29D9E4F4930 /* KWSuiteConfigurationBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 89A1733976444DAC31871520AB02A8FF /* KWSuiteConfigurationBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D1A1AC6FFFFE2320E2E136D117FE698 /* SENSensorStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC2BDD0D9F9E36531C28FB8BC6C3127 /* SENSensorStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D4B8F7D67A2B11C7A1440037B545B60 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 8DDB056FCE3CADC39C15E8BE887F3E80 /* SVWebViewControllerActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F2DE2302FA74A2C2F30618133A9B8C /* SVWebViewControllerActivity.m */; }; + 8DE17BF84D3264A988715815513EB999 /* KWRespondToSelectorMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6608A7474DE4A47813D750963FEE1870 /* KWRespondToSelectorMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E05C3708BE44320CC717B5AB3DAC576 /* KWMatchVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 05E6643A0402B632BFD6384471F0D75F /* KWMatchVerifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8E065979ACA235A37A032C553F148EAE /* KSSafeCollections.h in Headers */ = {isa = PBXBuildFile; fileRef = B287A2BE1A7AD6BDE66DD8563A2ED790 /* KSSafeCollections.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8E7374E9AF2509BE26432CE08D59272D /* LSHTTPRequestDSLRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = ECBB6F3F8E26BE96B8A5CD61E252CC8F /* LSHTTPRequestDSLRepresentation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8E7D662955926D47EF19177853B77557 /* ExtendableMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 966DA485EBC38DF48F177A22E4F3A20D /* ExtendableMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F1A06BD70F9A769660BB7D7989EE737 /* AbstractMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 522239ADA850A5938A4D19F5920966FA /* AbstractMessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F55E2069B08C9ABF478F0ECAB42A2C9 /* SVWebViewController.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 352880D70759D7A72B3B78BF540B911B /* SVWebViewController.bundle */; }; + 8FB69F63690474C874694CDFB3FE9F80 /* FBSDKErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BD35BA987831FD01A2C19B7B2470FA /* FBSDKErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 901C74E32774F1819F495242E9BA992C /* KWBeKindOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E96A8BAECE4BDD5E897A9EA3F69E5985 /* KWBeKindOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9033CE13179A69A61E0618797CA50D57 /* KWSharedExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EA7B52007A94752AD8FC7E4D98118AF /* KWSharedExample.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 903C787EC1F4F8731F4D58D9E5C93C9D /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FCBD36EA99405F60B2BC183D05C2862 /* ChartDataSet.swift */; }; + 904468222831561663817A5AAA0BC067 /* SVWebViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E924C2AF486274A46158408B7819E8F5 /* SVWebViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9047DD14AED91EAAFDBADB8B23EDDEFE /* ChartDefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B77A2A1D0F442C8ED67F7759752722 /* ChartDefaultFillFormatter.swift */; }; + 91187A94F1CBF93CA9BEEBBDAC096FFD /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BE7883B82292799A624177A21B0DD1D /* FBSDKBridgeAPIProtocolNativeV1.m */; }; + 913FE38D13FAABE18B26CB1E4D646E96 /* SENAPIPhoto.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DD5E49A1E901490FEA8EF8952DA484C /* SENAPIPhoto.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91794219692BCA840E553CA0391326FC /* FBSDKProfile+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD743EFDE6B6BEAEC6497E9AB2BF8CD /* FBSDKProfile+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 919AF90F1C2027433843A503AC4DBF1E /* KWMessageSpying.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ABE86C1140371028332825C1C3729A9 /* KWMessageSpying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91AE5CD20B078590FF5930A502BADA34 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB84AB5C3DDFEE362988B5074854349 /* AFNetworkReachabilityManager.m */; }; + 91B936777D95E3280FC4198A46A4859E /* FBSDKAppEventsStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 69877F262F2CDFDA8AE1195CF28064A3 /* FBSDKAppEventsStateManager.m */; }; + 9225EF58199BEE15E9EF4E620CA979EF /* KWBackgroundTask.h in Headers */ = {isa = PBXBuildFile; fileRef = EDD24F7D8CABA3EBE82F6CAA3D648FF5 /* KWBackgroundTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 927EE62B41209DD684DACB4186730AAA /* KWGenericMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 88C7CF6476D2EF3E5CD0181C2877967A /* KWGenericMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 928A2261E66B98FE16402CDFC9C5DE78 /* SENSensor.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C8FBF97E749435DF4F0152B722E0DF /* SENSensor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 92CAF2AF4CC92801BE697C4401BDB785 /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 692272386CFEA940CD5C3628FEDEA94F /* ChartBaseDataSet.swift */; }; + 935E2E999EE0208EA3A5380AAFB4F527 /* SENSwapStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA6C62CE63AF4F265D6608C1BBA84EB /* SENSwapStatus.m */; }; + 9362E3B6D847C0B73E4490B0379AC788 /* KWBlockRaiseMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B5173D9D4D28A7CA4A6CC2185A4C1D2 /* KWBlockRaiseMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 936592F8815A0FCD066B6C7C33415CA4 /* LSHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE202EBB431425C25920E1F5651CD48 /* LSHTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93C2513B27A1B7562CA864E4E421A42C /* FBSDKBridgeAPIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 59B8A25EAEC59BE4ED92085A2531580D /* FBSDKBridgeAPIResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93D11514392032885F882068EAED6EFE /* SENAPISleepSounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 98AF60078E43A7D15903B52F1FD01851 /* SENAPISleepSounds.m */; }; + 93D5E62945298C38DE186DB81C916D80 /* Nocilla-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C0775A14635B0A887A13972368D962D /* Nocilla-dummy.m */; }; + 93FC4E068A0EE17880AAE36D900A5B02 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4C58641F4922DE5842CF6544CB4E42 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 93FFE7E28AA8693EC3E4086B28E88724 /* KSMach_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = B9636961E2B85414A07DE1B70094979E /* KSMach_x86_64.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 943C51F4160BDF82AF93D64DCC9E2D2F /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDA4531650228AA3E2BFE32A6F2D9B7 /* BarChartRenderer.swift */; }; + 948F0C0C74EF8C4252550F1FE56E5DA4 /* SVWebViewControllerActivityChrome@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 47C7BDF17390E9CCC27A500C8114D109 /* SVWebViewControllerActivityChrome@2x.png */; }; + 94AACA1D1411DE3ACD9EE9DB704FB685 /* KWStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC1993E6402CACF023EC014AB3756E2 /* KWStringUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94DCB1BE968EBFAEAEE6D358AA1723B3 /* NSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA4571EC4BCF5A6F79E75F1C4298201 /* NSData.swift */; }; + 951D02689B1E6C113F98DC6BF1D75AF8 /* NSDictionary+Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E7F6FB0583C87A8A7B8AEFBCB863CE9 /* NSDictionary+Merge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9532AB04BBB4C914292E63F75ED15B5E /* KWExampleSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A5B5CB06DE8DB224894205439B303E /* KWExampleSuite.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 95E4FA2CB7358427E5AFC6D0BD5D97FD /* LSASIHTTPRequestHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E0830D4308A9E0B7D2C27C8653AEB46 /* LSASIHTTPRequestHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 95EABAA575000DE01C7EFF696174226F /* FBSDKTestUsersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C61DED04A1AB7233DB945D29051B5A /* FBSDKTestUsersManager.m */; }; + 96227211FEE10DD123156CAA27DD8B20 /* Zip-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 90388860430E3B102452B7E437FCB257 /* Zip-dummy.m */; }; + 9635C7F5F33A5C8E9F641F5B96C8B0B0 /* KWAny.m in Sources */ = {isa = PBXBuildFile; fileRef = 54371C5436BE6AED122615ECF2378C00 /* KWAny.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 967FB7CAF237468D97D3D97D80B9BF9F /* ChartSelectionDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E5EFA7E522C712604DB18E2CF36459 /* ChartSelectionDetail.swift */; }; + 972B4F8C8D6C9E8311B097A9FA08551D /* KWRegularExpressionPatternMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F75B6EEB4A8DB116DB60DBBD17F5BE5 /* KWRegularExpressionPatternMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 97337457398388984E1EE8E844FC0BF3 /* FBSDKButton+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB38AC0BF21D846C4E6432BBF165A93 /* FBSDKButton+Subclass.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9759200107D36881C9FADA8F2A742905 /* KWAllTestsSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3C70467DF7321D90C4E8FC9180F28A /* KWAllTestsSuite.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 97751ADF983CB6921D0F72A982136F52 /* FBSDKMaleSilhouetteIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF186582B3F584D41B87026A93E1331 /* FBSDKMaleSilhouetteIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9793DFE164ED1A0878C290D1EF636404 /* NSMethodSignature+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 53AAD7ED40C47A53327B219F4E3DBAF8 /* NSMethodSignature+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9795CEF12A126F200EF7227D5C92D8FF /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D4B1FE6FA0964DEF163C398448BDC8 /* IBarChartDataSet.swift */; }; + 97A34EBA68DA0F79573741B208CD28FF /* FXKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = BD164F4E6BE48EF891649706364C3047 /* FXKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 97B5F17518B0F26A3BC6874355D4C285 /* KWFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 8764C618BDFBA3CAEC8534B54C3F9A32 /* KWFailure.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9818F6483396A6D73B04CE33D5E9159B /* Demangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E071E98FC25DCC43761092EA310250D2 /* Demangle.cpp */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 981E2253E253B9048411B29062459816 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C2BA71CA44560BF1B6EA15CCE4442118 /* BFCancellationTokenSource.m */; }; + 9846C6266BEB148C8F692759A14EF9FE /* FBSDKTimeSpentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 42D3DD5C4F89331D1FB7479558E8F187 /* FBSDKTimeSpentData.m */; }; + 9895F3F157515EBE9B34157D788B665B /* aes.h in Headers */ = {isa = PBXBuildFile; fileRef = 91836A95DBB5D0DB3D9C23522EBC50B3 /* aes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 989E241770AF1B4E95F4F35E8E6E0DD2 /* LSHTTPStubURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = B4C2C6501FACF9561D6F68322EE52204 /* LSHTTPStubURLProtocol.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 98A54B02E8C80628FCA4E9FEF4DF461E /* DDAssertMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E8E197D7E8B967E4BC1FC5B37A27DA2 /* DDAssertMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98AD3CFCCC5B665503A4CEC910FFC582 /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 314999E1715083BFF51274A6219BE775 /* AFNetworking.framework */; }; + 98B0DCDBFD99889C14151E6F283217F6 /* SENAlarmCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 23CD1ED073804FB534DE10938A2AAB56 /* SENAlarmCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98CD9954E10B08ED347FBCCE94E8D87A /* FBSDKApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CB08C85892380A0129EB119BE2588CBA /* FBSDKApplicationDelegate.m */; }; + 990F9DB5C80B5EBB94A5AD5A768CA286 /* SENAPIShare.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A1D799B34509EE2C61314807E88E0EE /* SENAPIShare.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9930C693378100DF860F2F985EAA49AC /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E519CA7E94848A7153051B9E7309DA1 /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9993E40A3B7A256EAAB9127A2D6A3359 /* FBSDKAppEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 20FBCD129AE8EF6F7165704DAFE432C4 /* FBSDKAppEvents.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 999448EC4BCF37A4FB29EF6B28659A68 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20378B4CF3E79FC3266B0D5CC29EA335 /* BarChartData.swift */; }; + 99A5EA309AE6EDABCC8C8FF2DB4D6E59 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + 99CF0E4F37E5F7C1064FC8E26FABBDF6 /* FBSDKDynamicFrameworkLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A503132D207CA579023DA1D6FDF6A83 /* FBSDKDynamicFrameworkLoader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 99E20D2879599AA06D679238F21B4B8F /* KWMatching.h in Headers */ = {isa = PBXBuildFile; fileRef = 257EC5609446DEFC517C05B961224127 /* KWMatching.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A709500E6C7FD075415AEBB625B4779 /* KWBeTrueMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 556AF550F84C796E40AD883E171AD514 /* KWBeTrueMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9A76551006A3561C00765B62C8B6D90A /* KSSignalInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = B4A56A89B3790CB48710AB065FBA99CA /* KSSignalInfo.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9B179332761F40F90E1AE878F8DDB364 /* KSCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = 906DAD0FD9D62D34A8E72DF125899ACA /* KSCrash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B4D49E8B825297AC2CB416745D4A6C1 /* NSObject+KiwiVerifierAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6649252A7474B6DE5BECF5D3D3A87F1C /* NSObject+KiwiVerifierAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9B91D571783E6F97774F530509F497C0 /* KWBeTrueMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C8FC408FF80AA469DE5E6574793A6997 /* KWBeTrueMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C320EE7CE5F3A33BB9C0BF70436F38B /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B2879A7EFE9D7CBF3E59F321F677712 /* zip.c */; }; + 9C64C91C54EC981CFA8B5BB386E17E74 /* hmac.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FE358A549229558DE8BBF8082070B9 /* hmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CADF44F544E0792EA7F9152EE11B56C /* KWHaveMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B235AA53CB14B4B9AFCB1B8E852D84E /* KWHaveMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CFCB2A23C493A698579A4513E15FDBA /* FBSDKGraphRequestDataAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 006825572C773BE4CF09B17EE065FEE6 /* FBSDKGraphRequestDataAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0406F06E94090E99F6475D114CFE26 /* LSASIHTTPRequestAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2507016EAD8568CEE8D002D8A2751B8B /* LSASIHTTPRequestAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D25F0D7674E63F27A5005F350865796 /* Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D58ADA9AD7DE6EA49A1271BBADBBAE8 /* Utilities.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 9D448D9DEFF3CB146E2ADE1956CE04C7 /* SENAlarm.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B129F34426CB81CDEA893B19EBA69D3 /* SENAlarm.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D903AA7A8A056261706E44C6A1851BE /* SEGScreenPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = DF1ED452AC901002591120B957E69A43 /* SEGScreenPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DAA9BE91A0C5451E8078EBBB7F0DDBE /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B3332AFFD18AE12B345C504819DBAB /* BFCancellationTokenRegistration.m */; }; + 9DB0670E503A386044E40D6968B11746 /* es-ES.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2175CA1D1AF5DC51FDB903E9ADB88EC0 /* es-ES.lproj */; }; + 9DC251AF4AFF4FC2E50F0BE5C3E18D69 /* SENDFUStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 2918968283F44207633D746FFFE42143 /* SENDFUStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DC6909AC7B4897CB2E310D4E3C2B600 /* BFAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 665CABBB1FC2D67AE1D7E42E87182C1F /* BFAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E0382CAAE99964042C92EDA6F4C2A82 /* KWExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 7934CDD3582F1106C8CE6024AB38358F /* KWExample.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9E21AE42FE4DAD8284BC1B9B1E61A4D2 /* SENAPISensor.h in Headers */ = {isa = PBXBuildFile; fileRef = CB97AB0BE95A94B2EE41D8D86FCE9B5F /* SENAPISensor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E2EF1E5895B1EA3788DE90FAE1099E3 /* LGService.h in Headers */ = {isa = PBXBuildFile; fileRef = F741884A12A12EAB0D35C911BAED5B5C /* LGService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E62F1253E7330CAC6DBA78608CBF5B0 /* RFC3339DateTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BB3BB34ADCF79B81371A20B98E89ED8 /* RFC3339DateTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9EBA4DA303F8ECAC9134D7852829BCDC /* FBSDKAccessTokenCacheV3_17.m in Sources */ = {isa = PBXBuildFile; fileRef = 23DB7FE8BFA98EF3D457D85E7FB697B8 /* FBSDKAccessTokenCacheV3_17.m */; }; + 9EF4FAFD2899973C7E32BFC127B833DC /* KWHaveValueMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = BD623924F64E5A042EF647B73C77DDBD /* KWHaveValueMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F5038BECCA6AB5C8DA227A7129D526A /* DFUStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C1C82F801AA457F6C4CE0627CE9C69 /* DFUStream.swift */; }; + 9FB77A03839FEBE156A1BE8B065771DA /* KSJSONCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = A0437AC8B01D7529E2537285650D805A /* KSJSONCodec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FEE2C40E84DEC3A3F584DDAFAFE4654 /* FBSDKWebDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = B548023C3A4B5E6CA9B6BFE8BBFDC57E /* FBSDKWebDialog.m */; }; + A04F2690301018039A55C8C396E1ABE0 /* SENAPITimeZone.m in Sources */ = {isa = PBXBuildFile; fileRef = 8805529589DE2C57C7B59679A4089CC0 /* SENAPITimeZone.m */; }; + A0514BA98C067714151307ECE076C07A /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 637BD958B4176FF1EB9163C7C6D1F79E /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A083F345354DD7609D331E2F9547F1FF /* KSCrashC.h in Headers */ = {isa = PBXBuildFile; fileRef = D2FE99E33ED11002641EBBD0E4AD5BAA /* KSCrashC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0D27BCD0270D51F987EDEE321C092AC /* KWMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = 52806E2109391BA6F2938C076231BAAC /* KWMatchers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0DAAFDF40F853F6531D164C4461964E /* ExtendableMessageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = B948FB8E2DB8EA5595223B5FB75B84D4 /* ExtendableMessageBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A10A6561DBB16A2FADD2CA534B7C491F /* ExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = C20B9ECC0A72C786BC17D9A8DFFDE5A2 /* ExtensionRegistry.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A11A6A421D8182751F8A1AFD303AF44C /* SENAPIExpansion.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FC27437F74CAA2A4F7AA4BEB217957B /* SENAPIExpansion.m */; }; + A11B04F23C3193B9FF1E5E5389CC9B68 /* ZipArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 108B12A57F5FDAB304D3E6545083A0FE /* ZipArchive.swift */; }; + A13C36A821CD65DBAF7D98274B24D89C /* iOSDFULibrary-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D8C8AD9539CA43A538BA9689BB8B12E2 /* iOSDFULibrary-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1D9FA5F88B9E8BA11D487F454978322 /* MSDynamicsDrawerStyler.m in Sources */ = {isa = PBXBuildFile; fileRef = B44C454A38C9FA8B45EF2BE3CBAEE80D /* MSDynamicsDrawerStyler.m */; }; + A1F9EDBB8CC207D2202D2D4D4EF978D4 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D42DD7983221CA8879C3EFE7F1BF8E7 /* SystemConfiguration.framework */; }; + A2D0C613E114F44E0A891D1470930315 /* CodedInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = B2458AFA0C2CA5C64D07B816ED4CB626 /* CodedInputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A2DE140E74ABFD1514191A38FE76770F /* NSNumber+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA825F7886DFC1E6F4B8022E9053B09 /* NSNumber+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A2ECBA0A69ACA64412752043F0A01C15 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 44C2598BA22E416BA1FB43CDA00C26D6 /* fr.lproj */; }; + A3399C0A0262A6B36F34C975EA27493C /* KiwiConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = B9457548F12E30C56C8806207E1DD8E2 /* KiwiConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A354CF5FF90E00C223E83BF3E4F0DA9E /* LSStubResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D5A115AB9FDC75A5CCDE63C3B1B9E34 /* LSStubResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3767DA177DD42ADC9C73249FB0236CE /* LSNSURLHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 519D10F4ADFF6920D7D83A7ABDEAF06E /* LSNSURLHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A392EAC51B4D3F9E57D2BF0B4905C47F /* FXKeychain-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BE8BC1AAFB71F4ABD1D5163FAAA0B19 /* FXKeychain-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3AA06F2E7D1887CABB68474F8D112B6 /* KSCrashCallCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = 46BF8C867E50896C323A16000BBE4ECF /* KSCrashCallCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A431A7B2C2F2F451175C32A89ECE854C /* KWBeZeroMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A3C23E5EA2B0B98072C10952A60813A1 /* KWBeZeroMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A44FE40982E8BE6E160F35F2F1CC02BB /* SEGGroupPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 879DFB09BA41B8F1A9EF4D8D9EA00A1B /* SEGGroupPayload.m */; }; + A46AFF21605BC60D1E0EDE160784CC79 /* Model.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E82B23A70D1338E69E756DE2C36B1B6 /* Model.m */; }; + A4745AB7071D4521826BE618C6569B28 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3685CD69131B0C3B478BF837D1050F7A /* CandleChartDataSet.swift */; }; + A48524CA5C8E9FDC9729B7318ED0405D /* SENDFUStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CDA317323536CF2C733E0152A1EEFC3 /* SENDFUStatus.m */; }; + A4AF603098CE02096A17604DA5341FB5 /* SENPeripheralManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DCAD43A3355EE1CFA4D2567C18C2DD9E /* SENPeripheralManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4C257DC2D5B1EA0A393E4CA4596764F /* crc32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459BAF32E23ECC559C603F2B8F7A6E7D /* crc32.swift */; }; + A4FE56E41066F451EE81B9394D754BDD /* MSDynamicsDrawerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CE9588CDCD95889D1FBA3BA24FD685E /* MSDynamicsDrawerViewController.m */; }; + A51CE6F237749C72FC6BFAE1A5136B11 /* NSRegularExpression+Matcheable.h in Headers */ = {isa = PBXBuildFile; fileRef = B2788EF6BBBDF8F8B52DB58F4312DF4A /* NSRegularExpression+Matcheable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A55F8FFF5FEA0FEC7FA1E711BA72352A /* SENAnalyticsLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = FF3D082843AF96E08C5337FE2CC7051E /* SENAnalyticsLogger.m */; }; + A5656FB6C94B63F0D8E2C95E18463026 /* CGFloatType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AE633F115BF716034D81DBB14F6355C /* CGFloatType.framework */; }; + A5A6E6963C431DC278BF1D41F9C62B93 /* KWStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 329ECC8311A4F3EAC0BEB25AC540B704 /* KWStub.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A5C6FFA91B3FE094C2BF2A0CE4868646 /* SEGReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 60A69ACAB8A877160BC310DF237D806D /* SEGReachability.m */; }; + A5F49D63DFF80C09BC8B8BDD81D6F7A2 /* KWSharedExample.h in Headers */ = {isa = PBXBuildFile; fileRef = FBCBC67A30923200901AAD539659AF4B /* KWSharedExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A603825CF93EC4833A25E777FC4D2174 /* KSFileUtils.c in Sources */ = {isa = PBXBuildFile; fileRef = 60D124560A063CCB97750BCF0C14BB64 /* KSFileUtils.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A6BB81CCF1F1A1817E7F40E5E38C09CB /* KWProbe.h in Headers */ = {isa = PBXBuildFile; fileRef = AC0F991E55E421B86F8097B03C102E4B /* KWProbe.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6BDAC8504FB2ABC13AF9D22571479A7 /* SENAlarmCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = A318C6C8B17E0F5137B02715CF24AC1E /* SENAlarmCollection.m */; }; + A6EAB90EDBEE7E79370EC10BDAFB90B3 /* KSMachApple.h in Headers */ = {isa = PBXBuildFile; fileRef = D1CC18044708C01E3D29792316C4167A /* KSMachApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A70C204193C31D2EB5FFC6AACABECECF /* DDASLLogCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E5CD0F66227EEF8E758382025765 /* DDASLLogCapture.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A71499066BDA83E929B6D8260285C487 /* KSCrashReportStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 0826EE3C09A48AB53D6A685C9A0FD3CE /* KSCrashReportStore.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A72CC57F7941BBF0158E34EC50E24436 /* SENSensor.m in Sources */ = {isa = PBXBuildFile; fileRef = BA74C7BB75EF62567B0DBE99D6BC5205 /* SENSensor.m */; }; + A72F7E9E5CDA415B4525C6C03F40DD04 /* KSCrashSentry_CPPException.h in Headers */ = {isa = PBXBuildFile; fileRef = F30978EA0F6BAFCCE54FA78794405E65 /* KSCrashSentry_CPPException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7D06815D938581AE5DAADE13E32C2C7 /* Analytics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D940141C92F38F95FCF7ED6797F3E0F /* Analytics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A7E80324ECCF5E0C59D7DFDD693A9FB7 /* NSString+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F63BE0ABA7E5074872CAABDF275C28E /* NSString+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A82E35C4CA1B082AA33D7B46A10C775E /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 693527D490A57FA868E12DED96BE4BA1 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; + A8452DF49D51EB73E238DFE6BB16A431 /* KWContainMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 386611B40F37AB31206131335BF535DA /* KWContainMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A876038A6D3320B2B5545E3C2B6BAB1B /* LegacyDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A0D9B80FB8DB2FBAB56DFD4D604EE5F /* LegacyDFUServiceInitiator.swift */; }; + A8A6F07CEA7BA98CC9ECECC2953AA33D /* ChartAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1FE0CF9CFD6E80405FBADC50A33AE70 /* ChartAnimator.swift */; }; + A8A87980C2BB6DA002A26828FAA607E4 /* NSURLRequest+LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 31410DA3B995B441BD00103988007BA9 /* NSURLRequest+LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A90DC5C2846194D86976DADD7AF6AB43 /* FBSDKAccessTokenCacheV3_17.h in Headers */ = {isa = PBXBuildFile; fileRef = 63AE5F2F0D4EF47B204BE53E37A472E4 /* FBSDKAccessTokenCacheV3_17.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9297C166A71134DFDB790A76EBC28DA /* KSCrashSentry_CPPException.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7E637C5F801F1624FC526DE028CF0CCB /* KSCrashSentry_CPPException.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A93FCAAC03E889EC03874BEA9DC74821 /* SEGBluetooth.h in Headers */ = {isa = PBXBuildFile; fileRef = 187881157EE7CB69C1C92B37C20EC454 /* SEGBluetooth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9504A97CD29623E8C244742F35C60B6 /* KSCrashSentry_User.c in Sources */ = {isa = PBXBuildFile; fileRef = 8349ED79BED6CDB2031C5B61CD270F8E /* KSCrashSentry_User.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AA0547C464071B8BE006950EADA7EFD7 /* FBSDKBridgeAPIProtocolWebV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 577AD3A216199C5360D3B19053E67FD3 /* FBSDKBridgeAPIProtocolWebV1.m */; }; + AA46E3E618BFE83DBDAA7E4588078372 /* SEGReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = A751D662E333811DED0940694505CF54 /* SEGReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA4E4293979C100E0E0700BEEB47B1D5 /* SENAPIAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = FE24F7B253DD51B1FC2D2BFF975FD6C7 /* SENAPIAccount.m */; }; + AA98C6B08A314F8217A2872A06925127 /* SENSenseMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 95188593BB84471991518BE06582AAF4 /* SENSenseMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AADB5A1BEA899BAE9397B66FD0575AA4 /* KSCrashSentry_User.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD2FBE21678403A7AF2783AEDB11A41 /* KSCrashSentry_User.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB2B9B5340D0AD510E7176951FA8F7B9 /* KSMach.c in Sources */ = {isa = PBXBuildFile; fileRef = 0006076FB1B5E2035EEDB273D3A3DE6D /* KSMach.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AB4B8C9D8D0C3607D83BACFD5F3F54BD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + AB67690DE1D4704C440D2967D8A448C8 /* SENSenseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B44BEA5613A9AD6D1AA81717F7299CF8 /* SENSenseManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AB80296D562B9DEE9ED746CB0362148F /* SENAPITimeline.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAC97ADB2151F3C6DB26E2509A1E6AB /* SENAPITimeline.m */; }; + ABB07A3B19C61A788627D6C64CD3E99A /* BFURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D34294374E409FD2FE6CCCEC5A526B /* BFURL_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABBD87E341BC8E06D4821F7778EF510A /* DDLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 63144A2E58C65F689B89B16FC05EDCE9 /* DDLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ABC3DC78789A5B94458E2C167ADC1082 /* SENExpansion.h in Headers */ = {isa = PBXBuildFile; fileRef = A1D839DEF321F16000778BC8E7DF221D /* SENExpansion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ABD24A994C5831ED8874A7B2DB02436C /* KSZombie.h in Headers */ = {isa = PBXBuildFile; fileRef = 40540C3E2177A59A2713A8C3BBA5550D /* KSZombie.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ABFBF52B77F6D9F36AF2917A00B11312 /* FBSDKGraphRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = E0A1A78EF03BFC506C016A5AE51BB8D2 /* FBSDKGraphRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACC2F3F46295CFB1EB3CDEDA9FDC6E42 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 83D64CBA9B91B0B5B7FAAD50F1811D45 /* BFExecutor.m */; }; + ACFB1F02A4BB9BDE9B96E6DF6C275B81 /* KWMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D2B2B385B67F64E7FCD4C064D5F0F6 /* KWMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD1EB47C0583B13CF57FC7BDB49D2E4F /* LSStubResponseDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = D52596F53F9D3F6464EDCECA65FF9F63 /* LSStubResponseDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AD5791CDCFB3CABB44CDDF69E8D9F4BD /* FBSDKMonotonicTime.m in Sources */ = {isa = PBXBuildFile; fileRef = F0C8AD533F778FC366569278759713D1 /* FBSDKMonotonicTime.m */; }; + AD8B8575F97C7A5D73826214F238D047 /* FBSDKMaleSilhouetteIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 78548CDB5BAE4AD94A85C1855A97DD33 /* FBSDKMaleSilhouetteIcon.m */; }; + ADB22F7D323D390045030CAC6D14FFE3 /* FBSDKIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A0DB194846BADA3CDB8ECBFE67867AC /* FBSDKIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE0E9AC5639E277297BC0535A1636AD5 /* BFAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = 54AEC5271218E15BD196D6B0CFD0498C /* BFAppLinkReturnToRefererController.m */; }; + AE1445A7BA157D89E14E9F9B391E3A1E /* FBSDKKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B7DF4D84F0A2F6511031B969A6077A4 /* FBSDKKeychainStore.m */; }; + AE3F4A67BEF2DF724AA9936EF13A0666 /* BugsnagCrashReport.m in Sources */ = {isa = PBXBuildFile; fileRef = 178FF2BDC4BD7B29A167E94544FD0639 /* BugsnagCrashReport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AE4F7AA3E081C7DBADFA350EFE92E395 /* BugsnagBreadcrumb.m in Sources */ = {isa = PBXBuildFile; fileRef = 98725CAE79E06500E87DF23AECDD07B8 /* BugsnagBreadcrumb.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AE93351B75171C5ABC4E3C081A63BA52 /* CGFloatType-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DBB79136FA8EE8E93579952124697F4 /* CGFloatType-dummy.m */; }; + AEA632F4FC1561E1DCD260BE2D098F4E /* KWReceiveMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = FA4D15CEC00265D6FE38FD57D4F41B87 /* KWReceiveMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AED0E0D785B605A552429D8AA113FA56 /* SENAuthorizationService.h in Headers */ = {isa = PBXBuildFile; fileRef = 37B5502DCC9DEB224ADB2E2BACEBCD31 /* SENAuthorizationService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF02960803A768E9B99E6501184DD4C4 /* SENCondition.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BD47FA2EA51104DC15832BEFCD26C2E /* SENCondition.m */; }; + AF13F27E9ABAAAC683139AB7EC5E782D /* LSRegexMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6213DEFAD38FC99CD891719C48EE862F /* LSRegexMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF178C6C9DFDE8FC5E3E300B4C2D21E9 /* Bootstrap.h in Headers */ = {isa = PBXBuildFile; fileRef = BEAD3A33DC89892A7C16AE5586DEF06D /* Bootstrap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF518C1404C2298480C3E30EBB853752 /* Utilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EBCEC9F5A4F375EE41046076DD007A /* Utilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF5AB277EA0452A29F3920C2197F00D6 /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04EABFA4E1B5EE963878B5982C500BCC /* ILineRadarChartDataSet.swift */; }; + AF9EC1110BAA891D3609FAB567772E87 /* KSSystemInfoC.h in Headers */ = {isa = PBXBuildFile; fileRef = F18B528BCC6B2FF6D971923E55677FE9 /* KSSystemInfoC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AFF645753C6571F1665035FB5CA7B9AA /* KWBeIdenticalToMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D081106E137DB09DEFE5F016C4518CC /* KWBeIdenticalToMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B01802026B8FDB8D509903CF1CD5CE6F /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = DD24CDAC4EBAD7DCE4E079EE54BD245B /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B018ABEC6EDE22C5B4969E4E14061FC4 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = F215E5DAA49538ECFDE7EF349B3C6385 /* BFTask.m */; }; + B021B27A81E0C6061F25C79564A53D71 /* FBSDKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 566F5467EF55F6E1B8946D9B73568C78 /* FBSDKIcon.m */; }; + B02E9D60E4E7A2E894118905160D4639 /* KSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 85D2451F46B4277BE654C9EBDB4CFCDC /* KSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B03669220562270F57646FC89B06F2BD /* FBSDKTypeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = C899B923A8C8A09BF4C83EA7259ADC46 /* FBSDKTypeUtility.m */; }; + B06641B9B538B4ADD7684DD5D1C90649 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AB7EB15421523CDF95524F2F7355678 /* AFNetworkActivityIndicatorManager.m */; }; + B0C54EC923672F74723AFFE56E91F5B2 /* SENTimeline.h in Headers */ = {isa = PBXBuildFile; fileRef = B46F9E6FA5DF85C87375A3ECA0E5B80B /* SENTimeline.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0DECAC9010C9E44FA6289D1FF215FE7 /* Field.h in Headers */ = {isa = PBXBuildFile; fileRef = 12F1CC44977827F8BBD243F834942E98 /* Field.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B1297604A3BAFBED1D72877A93EA48D3 /* SEGIdentifyPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EF9F215684F11D94232185F782F5B79 /* SEGIdentifyPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B139561F0B18A476B62937295D601FF9 /* FBSDKLoginKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BF0EC6A4FFEEB6EA1A3062D74EFC455F /* FBSDKLoginKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B14239B3328627457A40493EE31F651A /* GeneratedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D44664F7A55DBDB36EFE6675BEDCE9F2 /* GeneratedMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B17FE9A760F5ADD9D7D5FB6E9FCEA5D4 /* KSObjCApple.h in Headers */ = {isa = PBXBuildFile; fileRef = 60DF862CA272F10F2986D4708804E39C /* KSObjCApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B220E533E0CFDBF5EF5EDC081636EA99 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 873325F7D0E916BDD9365C4A32E81CE3 /* ILineChartDataSet.swift */; }; + B343474AAD02BE608BDB11C9C51F7F29 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + B3DDBF11DBD75506CD650CC29766422C /* KWGenericMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E28427BBAF9A21B188A1F71400D0C73 /* KWGenericMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B4283DA2577F5B1188E2FFBCBF7AC4CD /* LSNSURLSessionHook.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3E21E1E8860168541DF45D3A197C85 /* LSNSURLSessionHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B4685402F825699A9BBC624B9FA54FAF /* LSStubResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A89F4ECC818A9394FB1C3698A3C58F50 /* LSStubResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B4DD419BF44FF99578F30B22369C76F6 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = CA31891138CC7D3AAB0E5D0973AEDB67 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B4FD5CA4D6A7DAC67F8F0ECA20E35B0E /* FBSDKBoltsMeasurementEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 638054E0C7139CD26C2C5886C739C2DF /* FBSDKBoltsMeasurementEventListener.m */; }; + B50408998BF85276DDADBA851E8A986B /* ChartXAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B2872760E879BC2CB272E2552DD91A3 /* ChartXAxis.swift */; }; + B537D08ED7201F4A19125BC2E2067E13 /* KSSysCtl.c in Sources */ = {isa = PBXBuildFile; fileRef = CD3BF15D56A5301154CEE0A699AB56F1 /* KSSysCtl.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B5463A9DF60476D29A3AC88EC1221BB2 /* KWIntercept.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E09E9FCD89D09AA459D5B463264495E /* KWIntercept.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B594158B3009DEFCCE840DCAD106193F /* FBSDKOrganicDeeplinkHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = B9C23D157A0BC590A95E7EB9E9737022 /* FBSDKOrganicDeeplinkHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5C6F2403BAA5A44D3F63150A853E3F2 /* KWUserDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 201493C758413566BC75C1E6FA95C451 /* KWUserDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B5EA39984306E42628CE8B9E68945A18 /* FBSDKWebDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D9C77D35925D037A80C4F079721E622 /* FBSDKWebDialogView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5F53F21DA9A987D8A2A0409C12B6515 /* FBSDKAppEventsDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F45D418BBD909F4308B372783FEC64 /* FBSDKAppEventsDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B60AA343C3F41B98E72EA34ACC901446 /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */ = {isa = PBXBuildFile; fileRef = DF26FA59FBFD824EBDC5E4F7040E0498 /* FBSDKBridgeAPIProtocolNativeV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; B61CACE4BE7E3CDE750F4263DBAC0844 /* Pods-SenseApp-RoomConditionsExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A858E1D5AB2C29D787B9678C28C3D3B3 /* Pods-SenseApp-RoomConditionsExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B640292891CC52696E5E5E5D9B9052CB /* SENSleepSoundRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = AB62531E618E3133AF2373817B1BAB62 /* SENSleepSoundRequest.m */; }; - B6E26E97287EC3C315F259516A78CCB2 /* NSValue+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B4095F2D8D857B73FFDC8EA9C0A88D5 /* NSValue+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B71820FC86F84C61A8ED884BBF3EF20D /* RLMSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A53528E54202434D76AE1E48CE2C6D68 /* RLMSchema_Private.h */; }; - B76029688E5BCEE550DE10A393E0D894 /* SENAPIQuestions.m in Sources */ = {isa = PBXBuildFile; fileRef = 39031D92AB15EAC70B1ADEE5B5FC39E8 /* SENAPIQuestions.m */; }; - B7B4AFC390097E831A09A3CF7DFAEC68 /* FBSDKApplicationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A68233FC0AE329C25ED434EA34856C0 /* FBSDKApplicationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7BC3F1920789AB0ABE410C7D24FA1D4 /* SENAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 6388690D04EBC314C4BD56DE1CCCC37F /* SENAPIClient.m */; }; - B82DF572429A7F4D551AE72CA1BE63C2 /* BugsnagOSXNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7F333B993AF9FB2C54D157746AC40A /* BugsnagOSXNotifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B832580569099A543E5EC17E80E0AE68 /* markdown_lib.h in Headers */ = {isa = PBXBuildFile; fileRef = F69413B5E202625752A8F92DFF2452CF /* markdown_lib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B833088475EE54DAA9CC743A3CEAEF66 /* KWStringPrefixMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 714445869234D7313CAC207E8E49CB2B /* KWStringPrefixMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B851596A422A90D748CE862E695EAA0C /* RLMObjectSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 3E5212E1D8EA82E7F4B71011A0712DD9 /* RLMObjectSchema.h */; }; - B8ED986AEE77548D637B98009AE7B823 /* RLMObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = BE39766172A99C9580094A7DE6F27F70 /* RLMObjectBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - B915B8A31B21A16B1CE04CF7786E7771 /* ChartLegend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56E7139717B1D03EF24251999AC89711 /* ChartLegend.swift */; }; - B9E814C9E37B769B717126F874F1C713 /* LoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA28C1F157AE297ED4C98A6D547097C1 /* LoggerHelper.swift */; }; - BA05FDBD345A622597AA23626513C0CB /* Kiwi.h in Headers */ = {isa = PBXBuildFile; fileRef = B95884C263A492240D9334B018329EE3 /* Kiwi.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA2C986AA3B0C8E962F7F4C990165E94 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = CFCF625F7E96BBE30F089D79C65F1F09 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA3BC0A290359334FB934D56EA58E870 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB88313660665F0DBCBAC8DC8288EFD8 /* CoreGraphics.framework */; }; - BA4BDA03ABE7F96E9E1923A6053D1248 /* BFAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 498ECB3CB5E13051A3BF927D35D395BF /* BFAppLinkTarget.m */; }; - BAB50C7625AAD910D36038DCBE079AB5 /* FBSDKLoginCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C7D205EDE0F1D13B03F0CFDA221130 /* FBSDKLoginCompletion.m */; }; - BACC33DC4F0172A9D42AD2E2D24257FF /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1D068731EBAE598179BDDAB6F158EF /* UIRefreshControl+AFNetworking.m */; }; - BB23DD0AABDA963FE2405F8855C50C06 /* SENSleepPillManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BEC55AFA404BA27909A0EA5616689D /* SENSleepPillManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB28CA51512E30BB843E3D0BCAA8EC81 /* FBSDKLoginManagerLoginResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 746B62D265688954D555ECD81E6584A6 /* FBSDKLoginManagerLoginResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB2D270A94D9F75793EA6E09378EAB5A /* NSProxy+KiwiVerifierAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A3833F55E13A27F0236EDD1E517126D9 /* NSProxy+KiwiVerifierAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BB3B8E73AAD830DA5F296869075B65FF /* FBSDKConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = BDE8B81B58B2BFF7E97DFBADCDCC78AF /* FBSDKConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB411C1AC5AD46F25DB10BCB6B71ED3F /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88021FAFE8BFAD5158639847DB3AE666 /* ChartBaseDataSet.swift */; }; - BB44953D1FB8D3FD4AB6443FC8C71123 /* NSString+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = BFC8DF115F3837443B19615A9788DE18 /* NSString+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BB562136533E5680B99B535F998FF288 /* SENSleepPillManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F12039BECA8570BFB820E6EAB61C863 /* SENSleepPillManager.m */; }; - BB5987C9E03A905A86FBE78D0504D896 /* MSDynamicsDrawerViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BBB6844B4BB6BFFD7C081613C5523F6 /* MSDynamicsDrawerViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBB1424211B5CE64BAFFD8D765C6E580 /* RLMMigration.mm in Sources */ = {isa = PBXBuildFile; fileRef = DE67BB50B63E63C084DBDA1CEEE7D672 /* RLMMigration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - BBD020302CFB4A8C4EFA607313DBCDE2 /* BFAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F6A6BE172F34383A1308E4B2A7531C1F /* BFAppLink_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BBD118AD007E5EAE20554D7A0B18ED0B /* KWSharedExampleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EB1DC83DB05A4D81887ADD3989C3CF5 /* KWSharedExampleRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC6509F769C6FA1115A2FB45E1A4F137 /* LSHTTPClientHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 699C154D614D17A32548504D0F802768 /* LSHTTPClientHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC810395C10343F81BA504BA6D6A2214 /* SENService.m in Sources */ = {isa = PBXBuildFile; fileRef = F3CFEC0186652BA7859FB72EF9CBDEC1 /* SENService.m */; }; - BC9EC4F108672F0C5FAD07549B132354 /* SORelativeDateTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 679A171C34480355C1BF1DEA6FFA1AAB /* SORelativeDateTransformer.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - BCB3672B4AA513C319B57FC20675E6CF /* RealmCandleDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED590FDCFEF9F81F64FA34EA9F76D7FA /* RealmCandleDataSet.swift */; }; - BCDCA156003585858FA947C6F7532484 /* KWBeKindOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ADF2A839B2B1E771E673FD822371E0C /* KWBeKindOfClassMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD42B01E2260875E4774FF5C31FE1C75 /* SENAlarmCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = 86D176677BF24120F559C89BE66C447E /* SENAlarmCollection.m */; }; - BD53DFD0800C384CD3ADCF655C7BAF5A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - BD63E3430FF5CC961B625D63211A5D2B /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F7F108F8B491BC4AF600225F4712E7D /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BDCFA669BBB768D54B93D8F90C275159 /* prng.c in Sources */ = {isa = PBXBuildFile; fileRef = FBCF108794537CB0E449EC5F08331F07 /* prng.c */; }; - BDF320CF4A39C5AE8322693C603C3170 /* Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 29E037CFD51686027D92461BECAA80CD /* Message.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE55CBF95355B1D92BFF60F96CC2C03F /* ChartRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6D97E5379932D73D987562C209AB4D /* ChartRange.swift */; }; - BEAC49D7FF2826AAECAB81ED9C26B744 /* KSBacktrace_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D8B35A44366533135C7F84176C8858C /* KSBacktrace_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF0359CCCA5C318CEC7373BA5B95AD8F /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 256BAA4F9351B8A26A38D32BDF81261B /* AFNetworking-dummy.m */; }; - BF1A5D67804AEA13B6078D39FF950A23 /* FBSDKAppEventsDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 70263B5FFD43AB54AF0146472E320031 /* FBSDKAppEventsDeviceInfo.m */; }; - BF220D229147E1C17510BB16679A31B6 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACD5EE103029601C772229A70E86D9A /* ScatterChartView.swift */; }; - BF46F56A51FFD01675F2874A82950BC8 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039A269E1BA71A6D450528678E586874 /* PieChartData.swift */; }; - BF5F96051FBFCD656B76B0467B56DE78 /* MSDynamicsDrawerViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 638772E1DB67E0641819A9307CD83016 /* MSDynamicsDrawerViewController-dummy.m */; }; - BFE3DC42D3E18272EBFBBDBB3125B557 /* BFMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 713EB92E338EE67B6A63F7D4C94D31DE /* BFMeasurementEvent.m */; }; - BFF2DA475B8128349D6F37DB0CDFD746 /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 378AC9BA82B9A26A81AFF9CAC6AD02D0 /* DDTTYLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C0122856BD10F2F5B365D5941FBBADE9 /* FBSDKGraphRequestConnection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 58BB187C3ED85059F8B7950705A5FAD3 /* FBSDKGraphRequestConnection+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C11BE471B82483E2BD4A97FA4055E5FD /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = F46BCBC56FA6FE9CB2AF9C25A28DCFA8 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C12B22BE4BE08351CE5B5972003C14EC /* KWPendingNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 268D063A6883AAFA4B2184579DC80DEC /* KWPendingNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C14298B5CC606AC278712E1C9C5CB0BB /* KSDynamicLinker.c in Sources */ = {isa = PBXBuildFile; fileRef = 48B724EB833CF23B95CB4678B9819301 /* KSDynamicLinker.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C145198A5E011D8D137A56C5D481D056 /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = F828F7B5B719FD9D7E1F72838D114BC6 /* ZipUtilities.swift */; }; - C157F28C1A72AFDF430D93911B9F6D73 /* LGCentralManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 924C6847DDBA6A3E5A55B7D93E99557B /* LGCentralManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1646200E22E63C3553180A4629331D7 /* BugsnagOSXNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 797652F0E7C3369AF97E5A640E1F4180 /* BugsnagOSXNotifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C19425B6B45280CC945221757E7C7FF7 /* UICountingLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D23FA25E3DB4E46D8C2BA30B0C3EFC /* UICountingLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1D9CEBC34C00C8D564D922852AF4291 /* KSCrashReport.c in Sources */ = {isa = PBXBuildFile; fileRef = 5F8F0D44028248D41FF5604705886310 /* KSCrashReport.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C21656BC80CA57E119A71618CFAB9085 /* LGPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = D043A9D933BD3924A046BA5834109A83 /* LGPeripheral.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C282CF245C3D80776174D1D3B90D4772 /* API.h in Headers */ = {isa = PBXBuildFile; fileRef = 16122768DFB846CD8A700FEDAC4894D4 /* API.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2A75D306E3E666485A89FF8FBB93662 /* TextFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 48C3F7BF476FC7972EEFE921A2E3F147 /* TextFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2C129A2793A252438D0069DFE5FE205 /* RLMObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = E0D901C9189BED0600BF1FE504386BC2 /* RLMObjectBase.h */; }; - C2E3EC213FF51CCEB9317DF98DB6536F /* markdown_output.m in Sources */ = {isa = PBXBuildFile; fileRef = 339DF02C0CC9AC3812A5411FADDB1872 /* markdown_output.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C30C22C07D40C34FB40EFF2CD5C57595 /* KWSymbolicator.h in Headers */ = {isa = PBXBuildFile; fileRef = BA634CD3FE0CA4FA09967589A58251D9 /* KWSymbolicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C35B11F4F65ED73FD040A3B8753D4244 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1372F7926FA69F18621B5C6B32335CD5 /* Schema.swift */; }; - C3B4A2B2168A3AE154AB2FAD1AF29AEB /* FBSDKOrganicDeeplinkHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3CBB3E1E4F176C925D5CDD890D9CFA /* FBSDKOrganicDeeplinkHelper.m */; }; - C3E1B32B272E50B1CD11BF574C872231 /* KSCrashType.c in Sources */ = {isa = PBXBuildFile; fileRef = 4FDE2FF9AB0B4FEA619393617FAF0C90 /* KSCrashType.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C43D06BB059AE8B9641E0D63235B9781 /* KSMach_Arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = 0D70E172606FA6FF336E593DD8572C8A /* KSMach_Arm64.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C4729DDC0CB28F2F25B14D2A67556111 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 307E2D8F7C0B024D603C98F16D8FF3AA /* AnimatedZoomViewJob.swift */; }; - C499FBDD4A5465C6A75C427766B1FA77 /* SEGAliasPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = BE053981EE1D8032490FD47331E479F5 /* SEGAliasPayload.m */; }; - C5007CCF8F58274D09FEB09D12C7C6EF /* platform.h in Headers */ = {isa = PBXBuildFile; fileRef = B2DCF9C68266D6253840B04701EC5D9B /* platform.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C526335CEC5F6831763B28148CCEA4F2 /* SVWebViewControllerActivitySafari-iPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C2ED0251619F533C9E6B1869245CA2EB /* SVWebViewControllerActivitySafari-iPad@2x.png */; }; - C552CAAF3B7668D2BC27CD2CA129CABC /* LGCharacteristic.h in Headers */ = {isa = PBXBuildFile; fileRef = 309BD224732EDAB0A2F7E9826CAB3BE9 /* LGCharacteristic.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5AA0AA6605F57F626030773EFE6634D /* DFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D4FC595EB099180C494950C4BF5CDA8 /* DFUExecutor.swift */; }; - C662372EFDA103BBB6837A1CEAA4A5A5 /* SEGAliasPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 09BEE9D1E07C0598136DEF7AB86D163C /* SEGAliasPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C675A44867228A72B00AE866A1EEB9BD /* DFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B98EB140582996FA73E90B47544AE92 /* DFUServiceInitiator.swift */; }; - C68115BC2DF6B5B4E98B432C9CE22809 /* CGFloatType-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 556F366C6A9A04A38BEA2A06DAE06D0B /* CGFloatType-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C6B65028F664469DE861F9DCE2172FF4 /* NSInvocation+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 38AAAC7D834864F18DBC14FA0F8167C5 /* NSInvocation+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C6D49EBAE82D5C571E6A2F4C0ED2DE6D /* FBSDKLoginTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 372730A576B11CF21D530093195E52E7 /* FBSDKLoginTooltipView.m */; }; - C6EDB0E51BBC07A42C32E12D77D805C3 /* index_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8051D07C2BA8F363F35B05264A222EEA /* index_set.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - C6FCAABFD994F4C218E42AC1EC35BCDF /* RLMObjectSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D3583A84911414F83CA6504BDF881529 /* RLMObjectSchema_Private.h */; }; - C74E5F3EB2F3794E3E7B54DB143205CB /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25CC3C73DB82D655907AC89B725CE096 /* Util.swift */; }; - C769804E54F7EE3E836BCC004F2E4539 /* Services.h in Headers */ = {isa = PBXBuildFile; fileRef = 27A5CFC6EF5EC568CF76AE4066995FC7 /* Services.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7CABFE295DBC579CCA020AB39548674 /* prng.h in Headers */ = {isa = PBXBuildFile; fileRef = 99748F6D7E7B87C37A5A4E43B498B264 /* prng.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C83DBA8B9CC6048A91661CD368A74F9D /* SHSProtoBuf-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 653C923400640C55F81E91E88B97016C /* SHSProtoBuf-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C88C57A6273DA81241E3392DE4603ADF /* SVWebViewControllerActivityChrome-iPad.png in Resources */ = {isa = PBXBuildFile; fileRef = 0B351672D2D305DB049299AA14432D00 /* SVWebViewControllerActivityChrome-iPad.png */; }; - C8B8D54C297D8BD9404AFB9A1A5A0472 /* SecureDFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF1532D0853445488D31566FADFCB577 /* SecureDFUServiceController.swift */; }; - C90B58FE571E74C022EB367959C61242 /* KWBeSubclassOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 332F394177140A0660C6F663A766B9D1 /* KWBeSubclassOfClassMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C948A11E45B6196EE73EABC8B6FD8F13 /* LSRegexMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 185E1D9306E47ABDB4496940AEDD9703 /* LSRegexMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C97238488939D65091EC2E2A7C30DDBA /* KWReceiveMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE12CC3269477CCFFB8157A10045C9A /* KWReceiveMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C98F7E32841B74549C9531C247D4F05A /* SEGIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A0950F875DB456E503EBBA0886B1F2 /* SEGIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA3ABF826EDDA7F708ABB88B0B4C8E38 /* FBSDKAppEvents+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 443E5711794B9F9B8AB8BE3B3D8C049B /* FBSDKAppEvents+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA48107C825CC037E951E2CF39DD3C18 /* FBSDKBridgeAPIProtocolWebV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 631E7410752DCDA4946454AC79725470 /* FBSDKBridgeAPIProtocolWebV2.m */; }; - CA4953CD219A9437E85BE83CDBFA8115 /* SENSleepSounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 70F12C4E47B0DCA91F49059A08F57F7F /* SENSleepSounds.m */; }; - CAD6614CCDE37051F0FFD455A55C6AC1 /* SENAppStats.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2722775EDE85FEA619515748B72506 /* SENAppStats.m */; }; - CAE755D93AF1E2BF177F3D84CBD23719 /* KSSafeCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E0136B6FBD8E625C2B5CC9003001A6D /* KSSafeCollections.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CB20763034205A991E111CA8E2D95B5C /* FBSDKBridgeAPIProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = BFD52E39591E26673D9185159366E9E8 /* FBSDKBridgeAPIProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB94E95B3C002D2EB8F79858777852F5 /* DDMultiFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = ABA580A70A3D9B5C4BB8200B02A25AF3 /* DDMultiFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CC3BFB295B08302127640720EE16C86F /* RealmBarLineScatterCandleBubbleDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59899282DB3644470A3586597C8C1BF6 /* RealmBarLineScatterCandleBubbleDataSet.swift */; }; - CC722CCB6BC0F5386E3CFF1B0E9E2950 /* FBSDKTriStateBOOL.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A2C4C5062FA29A73AB5A1AC477CEFD /* FBSDKTriStateBOOL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCE358CDD0139F70088FF2AEC41589B3 /* collection_notifications.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8911F50285694C539E26AA3E67731364 /* collection_notifications.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - CCF2758FCD42E39B96D79642EF72855A /* DDDispatchQueueLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = ECBFBE3EF17D61164083CD99EFF0C452 /* DDDispatchQueueLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD4FC3BF0C81DC2A63D82C846F83B769 /* SENSensor.m in Sources */ = {isa = PBXBuildFile; fileRef = 044F8A858D46276A25B96EBBCCCA1092 /* SENSensor.m */; }; - CD6AEE09E4DC0C4F14EE9E0C9E720E4C /* FBSDKAccessTokenCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B38116E145FFDE350DCE9982C147F4 /* FBSDKAccessTokenCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CDADD78DC1083400455DEC507C72A36B /* ChartPlatform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2948E157D4E5DD98074295C9BF2CCDA4 /* ChartPlatform.swift */; }; - CE3DCAC27131D219800E31FEC927E720 /* FBSDKLoginButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C5154AD506DFB34AB4E36194B4A8103C /* FBSDKLoginButton.m */; }; - CF4BBAAFDA237C5437A3C9A8095AD41B /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D7200B60EC6D284FDE491DC1FB8D751 /* CoreBluetooth.framework */; }; - CF5D598C940DE9893F871450CB6831E5 /* list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F0368AF3218B3899A55211A5596F35D0 /* list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - CF8234C1D41A4617CFC974760EAF4800 /* DDFileLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D644CD9C4DAB0655B1F910A82164BF /* DDFileLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CF83498E61DDDE882F8DEA58BA245850 /* SENPillMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 68F3A5E5F4B87B0A9AD951EDBE22A82C /* SENPillMetadata.m */; }; - D00B025BE1B96D45B2AE723A7FA24F18 /* FBSDKSystemAccountStoreAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF2B65FFB7C1018EF67E81775880C43 /* FBSDKSystemAccountStoreAdapter.m */; }; - D01AAF38BAD8E41F78E8951AA1E16E39 /* weak_realm_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CA0ED56CFAE220C52D700043059E4E52 /* weak_realm_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - D0473CD5F42347C3B798593F93E33CA5 /* NSMethodSignature+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CB613EAE00447E96C112162DC5BFAC0C /* NSMethodSignature+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D09AAE74309B99CEC05AAFEF6132D4B5 /* RLMProperty_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CCD8CAF972FDFA4CC626F3D1783D043E /* RLMProperty_Private.h */; }; - D0AE9F92EAE84DECC4A49A983A690941 /* KWSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = C30C42E83D625842CA51E14A352A1730 /* KWSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1178970B3261A14CA8B323ED5033AAE /* KSCrashC.c in Sources */ = {isa = PBXBuildFile; fileRef = 56ADDC1C84254928EF7E862206BBCDA8 /* KSCrashC.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D121CDA082F277A7C5E075F1F2DE34B4 /* collection_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0D611FFF1063BD2248126F95DF96D6BA /* collection_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - D1319E6DB469539FADA706FC3C330BEC /* FBSDKLoginManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B38793DD2472E0D6274592EC7ACC8E7 /* FBSDKLoginManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1A7564F4FF13F8D3C63581DDB02679A /* BFWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 981A7AAF7027CB6B16675263DBF3ACBF /* BFWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1F75758609EF3C25D5D970280882768 /* SENSensorDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F11A8E2DCEB70A737F52BA3E64378CD2 /* SENSensorDataRequest.m */; }; - D2A3AADB3E3B74D3199B6E37BA0A9388 /* SEGSegmentIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C21682B579A44D8AE1BE5BFF7C3EB0B /* SEGSegmentIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2BDEFE2F49FAE82EBB7C066E7555FE7 /* KSCrashSentry_MachException.h in Headers */ = {isa = PBXBuildFile; fileRef = 271D9C8810174C3C23632B09561A4CB9 /* KSCrashSentry_MachException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2D7D034F45F19FA0F9B7998E75EFDBB /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AF2E001ECE0A0277DC2FE0249923BE1 /* CoreText.framework */; }; - D2DD151D2232CE085D1ECC5CEB6B6179 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - D310CE00849AAAAD4B93C826D616617E /* KiwiMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 41C2BE15144870E3A35C2B8D8F0C939D /* KiwiMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D33921593FB443298BAEB053C8DAABC1 /* FBSDKColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 49423C1E7BF9B9A4AA23815A87928735 /* FBSDKColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D34841F908C45F27436E5D67A8970182 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCE13DFDDBA3DD328D00621249CFE4B /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3664329FAF71CB1270DECFE64B21EDE /* SenseKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 36DC9F89D1FD632E59BCCD2786F12DB0 /* SenseKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3760D24AD8BA7A017F1F1FB5343B1E8 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 169700962DF874B51CC81D6039E17B33 /* CandleChartDataSet.swift */; }; - D3C25A444F73578689F16B8B363551D2 /* BFAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = C2F5322C590B5B678C52F7EF6928CC56 /* BFAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3F9697B0D5D990CCB0AE4E0262E7FA6 /* CodedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 675D9A7BD582906AE368C09FE475C0F1 /* CodedOutputStream.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D4531A890597466A6B36C2A7B79B5965 /* KWCountType.h in Headers */ = {isa = PBXBuildFile; fileRef = CD00FC7C0D4F5986EC95FF1930E6E0B4 /* KWCountType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4569F8AF9E20D5283B40B1D607C48C4 /* FBSDKLoginError.m in Sources */ = {isa = PBXBuildFile; fileRef = 94D30172350592A4199C7114DDAE9778 /* FBSDKLoginError.m */; }; - D45D5D8A0DBAAA4B31A4468197E2A391 /* LinkingObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3AFE13327AC637D3CEB920C4A59CA5 /* LinkingObjects.swift */; }; - D47B21C101D13BF94C21705159EADDBC /* KWNull.h in Headers */ = {isa = PBXBuildFile; fileRef = 777842B9BA230B2B733783D7627054E4 /* KWNull.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D490170519014A6FA50A59F7F5DF7FA4 /* AbstractMessageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ECCA6FEAAA1AAC449A8CBE2F2B56FF5 /* AbstractMessageBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D4FEAA42814FC8585B3C0CCE68E34C54 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D54DE91260CFD1DB2BCA0A551928D51 /* CombinedChartView.swift */; }; - D526FC0387C25D4401A863712A466874 /* ChartHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA812F2F3090BFE20491E1529E4EE60 /* ChartHighlight.swift */; }; - D55869AFC1BE984F54ACD57EB710338C /* CocoaLumberjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F62587536D786976EE0039F33CD92DD /* CocoaLumberjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D55A9D1D02F3C7A8D1514BA6A8E38B78 /* KWBeEmptyMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA89222B70B52D08CE9E1CBDBA1B60E /* KWBeEmptyMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5EA2D6516BCC5D48D197B4F0B3632B7 /* LSNSURLHook.m in Sources */ = {isa = PBXBuildFile; fileRef = F6EFD6459AC799BB8CA3B25D72317E23 /* LSNSURLHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D619BD3D7082C00071C886193D0E6E17 /* ChartXAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C22D09ABE206F759F7DA8F62AA26A9 /* ChartXAxisRendererHorizontalBarChart.swift */; }; - D624245FA9010EDB51E036D60265C009 /* Pods-SenseApp-Sense-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B2B537B643AD04ACDAE44DF3CA5E31 /* Pods-SenseApp-Sense-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6622A5B09BC542F29AE41AA937223E9 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0258069E600E4BEB6692995CA70B464C /* AFSecurityPolicy.m */; }; - D667D68D8020E9FF95FFE316249A534F /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = C341F65DE52369067D9C66C37CAD0A48 /* Zip.swift */; }; - D67F189B43E33DBA64F98C47AB44A6A4 /* LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 52CBE632BE765DE7EED5265695694B0E /* LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D67FD7BC7571E92B68660280EBE36C0F /* ChartRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A1C9D49F2EA59E9F19D227A38986DCC /* ChartRendererBase.swift */; }; - D6838078F8C9101540A3CA124A6C3F71 /* KWBeforeAllNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C03F4BAC93824E05E6ABEC1D888654 /* KWBeforeAllNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6A8FEFB483F2114C1016A17BF2BDD8A /* NSObject+KiwiStubAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C9C59BEEF33305597D72116E6F50099 /* NSObject+KiwiStubAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6BB742D67C9763C58E0A1D73855AC81 /* SENAPITrends.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E8DA7DCA912EDF67EB154E65CA4540 /* SENAPITrends.m */; }; - D72EF55F449164D259139F781C7075EF /* FBSDKBridgeAPIProtocolWebV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ABECD7C45630381EA11AADE0FE6DD3F /* FBSDKBridgeAPIProtocolWebV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D746887AABB2D3B254FC4A3D73CBDFF7 /* LSASIHTTPRequestAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 78D7A724E9CBF9958150007671ECA798 /* LSASIHTTPRequestAdapter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D7AAD65E3E3CB6E46165BF2B7CC0873F /* KWMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 87295E3B2C6AD956D0AB92AFEABCA935 /* KWMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D7AEF0EBB2AC999ABF333CEFC1CC68F0 /* FBSDKUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B805EA4AD76264F31032B95423EE98 /* FBSDKUtility.m */; }; - D7C3596988B351BEE6270638038F4CF3 /* FBSDKBridgeAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D3CFEE1A970839519D114DDB2BB634AD /* FBSDKBridgeAPIRequest.m */; }; - D7EA60C19C8322D39BBCF6B838165BD1 /* KWBeMemberOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 4896262640F4491075A7A54038B3F9F5 /* KWBeMemberOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D847D12807EDEB62E5F04DEA703A7119 /* KWBeSubclassOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F950BDE46EC97645511AE62FFFFE084 /* KWBeSubclassOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D8533721B90E0B20C2C0B35ED4A131BC /* aesopt.h in Headers */ = {isa = PBXBuildFile; fileRef = 237D07FD65E690AD02D7EE212671B7E2 /* aesopt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D87C8BA320C687BB5D690258E14E313C /* KSCrashReportWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BCA2FBFD8FF314B3B64038CBFA83765 /* KSCrashReportWriter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D89C2616A42CEEF09AECE90CA5648604 /* NSNumber+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 65D65B91DEE2D37C88E4D0F151ABBB8E /* NSNumber+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D93EDD99842A0C28FAA242556AA58987 /* BFAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B6330290D2F9804B9A1DC2C49560C59 /* BFAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9678D5CFC1B5F819BE79E81FB32CD68 /* NSValue+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F3F23D55832D16C9B6128C5C802ADD82 /* NSValue+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D9B7C0F4AFBD7D4E6186294F78E02356 /* Realm.h in Headers */ = {isa = PBXBuildFile; fileRef = B5235C57044F575D2ABD326A11DA9A55 /* Realm.h */; }; - D9CC26E9423065F1AA784191F0151386 /* NSJSONSerialization+RemovingNulls.m in Sources */ = {isa = PBXBuildFile; fileRef = 251EC77501ACBB7288DA893D54E5DE50 /* NSJSONSerialization+RemovingNulls.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D9F4E9404FB1BC933E1A338014BC56F7 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D23A4407EE4CC5C3E277E363AC312970 /* de.lproj */; }; - D9F88DA51DED74F66F84251A0224CBB9 /* KWDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 005B2B1D99C70566603A831CE339476D /* KWDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA0B4B49A537D62C09EB06B8AD3D34FA /* KWContainStringMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C371DADD680E8526B1D22A68954751F /* KWContainStringMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DA3F7A6C8AB5FFC0D9257B764A48D68B /* KWRegularExpressionPatternMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A4239702652A6FC912E672FC68B3A4 /* KWRegularExpressionPatternMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DADACD3082D728BADED6222FC1E9BB65 /* Realm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B5235C57044F575D2ABD326A11DA9A55 /* Realm.h */; }; - DB952D69AFEBA2947C5A873F7B0718DC /* BFMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 489904E0154895DFA08909594232620E /* BFMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DB971431A1016872FDA55972A37FEBA8 /* SENKeyedArchiver.h in Headers */ = {isa = PBXBuildFile; fileRef = C1898C759AAA9843A8AA87C33AFA9331 /* SENKeyedArchiver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC2B37B2E0BF5F6953D3236F1E557476 /* FBSDKLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 54DD822F57C9E7B795E04EF4C38983ED /* FBSDKLoginManager.m */; }; - DC33BBEF12E2FE20480B2B37155A9274 /* RLMObjectSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = D3583A84911414F83CA6504BDF881529 /* RLMObjectSchema_Private.h */; }; - DC4046042ED5663C054613E486FD05C1 /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75434EE36F7983EF544FB0510766932 /* ChartDataProvider.swift */; }; - DC81C967FB6410B27BE6F1F3E5F723FB /* KWMessagePattern.m in Sources */ = {isa = PBXBuildFile; fileRef = F1BAEFA5425B4E8E923F257743648A58 /* KWMessagePattern.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DCA37456B2E3B2863ED79B86B67356E9 /* TextFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = A4DBEAD799BE1CAAD7A7757326154726 /* TextFormat.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - DD3D5F30C6C828426DFF129141930F83 /* SENAPIClient.h in Headers */ = {isa = PBXBuildFile; fileRef = D1044210613C63C718F999F23BADA7B5 /* SENAPIClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD43B880E18A2AD7D044CE4E9E0DCA93 /* DDASLLogCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = BC47BE2DFB64403960CC4AF92A6AC8A1 /* DDASLLogCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD7FBCB0E1380F9450BA0D22B8BA3531 /* BugsnagConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 02555F1AF4720EFD3347A76FF7BA263B /* BugsnagConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE3DC9E1C11B1CF52E69D1C89A7089DC /* SEGPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = BD5679E692B089CF3CA1F0A1B5B8D7E1 /* SEGPayload.m */; }; - DEC162ACBB48A2692EA9AC81E0C59BD6 /* KWLet.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EFE1FEF36B081CD1CF0B5B53AB7572A /* KWLet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF1D0AF8E5A3647EB568E37E5A056D67 /* KWReporting.h in Headers */ = {isa = PBXBuildFile; fileRef = 2075DE20452D70AF4C8F0608C89F0D01 /* KWReporting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF4B91D7322187FA6AB197AB6820F02E /* FBSDKBoltsMeasurementEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = B1F3314F26DDA2E29D408923288B858B /* FBSDKBoltsMeasurementEventListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF8A6F9EF6FA0773F9590BAE8BA4603A /* FBSDKBridgeAPIProtocolType.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C23BDDFC27ECAF4C8FB7E29659161E /* FBSDKBridgeAPIProtocolType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFBC1D7C81DE9EAB706994453A5C67B9 /* SENTimelineMetric.m in Sources */ = {isa = PBXBuildFile; fileRef = CC33C3DF83AA2F39AC400E7CA6175C95 /* SENTimelineMetric.m */; }; - DFC1984CDFF905B0B0349E9B51B08DD7 /* ForwardDeclarations.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A28B594CC4634F78E47D27751D4126 /* ForwardDeclarations.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DFC27DE923CAED74A81FBEECB7C86010 /* RLMMigration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C90DEAAC7E43975EEFEC32AC254A8C3 /* RLMMigration_Private.h */; }; - DFC6504E250D9577E5A0E97AC6ADCEE1 /* NAPickerView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BB07605523D68AB6C17519A2B85EB41 /* NAPickerView-dummy.m */; }; - E002F994C0BCBA0924F0DA9E20F1FB8F /* SecureDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96DA89B871B765D381CF4A8E2B40C304 /* SecureDFUPeripheral.swift */; }; - E007674AB922365892B1382C798BADCC /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ED64CDE026F413DA22B9645F9844BE45 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E00B98474607B5DBF673BFA15458DAEE /* FBSDKBridgeAPIProtocolWebV2.h in Headers */ = {isa = PBXBuildFile; fileRef = A61B3B50BEDD30CE6124F4A3D9E922DF /* FBSDKBridgeAPIProtocolWebV2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E01A4F165D4BA9195ABE7B015B85185E /* FBSDKAccessTokenCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = 804037B80A1EFDF9670DF335BACA7E1E /* FBSDKAccessTokenCaching.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E0209D95E735A096C7863F504E61D36B /* Bugsnag-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4393B733BC72D50B72652C5963D4876 /* Bugsnag-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0539CB4CB356A2014061F83CD8D80F9 /* SENSupportTopic.m in Sources */ = {isa = PBXBuildFile; fileRef = C8E061633FE56969C17377D512533075 /* SENSupportTopic.m */; }; - E069194F5C0AB75B1471DBD06DE6AADB /* FBSDKKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BB0EF1B46C914BCE52F06AAE38323907 /* FBSDKKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E0F970B45227BF9CB87E487FE37775CB /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3664EF64EBB999443CB5DB44AAE2B2B1 /* Bolts.framework */; }; - E1375CA2DABC969AB5798BFBE8458763 /* markdown_lib.m in Sources */ = {isa = PBXBuildFile; fileRef = F680178296030B2F6D0F10E5DF948055 /* markdown_lib.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E186A5B8E30BD9A92E4887D535C9A908 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 2874C89EA5EBAA35B0A799C1A3CAEB32 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E19ED038B883AFCB18830240F7C685FC /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F2D63ED47F5E82B16DF5240BD7488385 /* UIActivityIndicatorView+AFNetworking.m */; }; - E1C54226E74B2BB450E27EEE0C88F788 /* KSCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = DE9BCB56B974CBA921D9DE4130DEE9BD /* KSCrash.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E1D05443575FFFD869726616E06F27C9 /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 4B9563C351D478DF7EA8305059C3A09F /* da.lproj */; }; - E1D795F1C7A10198A9A45789C08D6FF6 /* KSMach.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FEC7C9FEB834149ECA850E017AADC32 /* KSMach.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1EFF0079610395EFF32CFBDF1F4A6B7 /* FBSDKDialogConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 474D5A3A9FB1F7C6294946611EAF7115 /* FBSDKDialogConfiguration.m */; }; - E1FC6E82E7935A1DB12C45E13A3327D4 /* RealmChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B378688643C1F08E81B2A312313D22BE /* RealmChartUtils.swift */; }; - E214AF16988C7A706A5308F384E1F2C0 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 58976ED944C88D7AE6BEC810C3F13DA6 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E247271FA996FFDD698E1FE73E766CF7 /* RLMResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = DF5DA8D4B3161C2465169F0398D514AB /* RLMResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - E2640580AEA3349B72E8162AE3F72CBF /* ChartYAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B71D12E26C28C453777049CEC3FFAD1 /* ChartYAxisRenderer.swift */; }; - E285EB4FC1DB5EB7C4EA818C15E152D2 /* object_schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1664253ED9906177B4C2C4F75A2E3E8C /* object_schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - E2C86771E10C809A5A4E473F68D911F3 /* KSString.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B840FFC0E8488ADD5153CF1157D2C73 /* KSString.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E303B55C9F7029A87B1C24FB19D9F097 /* DDContextFilterLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 350A9813498B8BA8E395D25069CB0B49 /* DDContextFilterLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E31BEFE9879B4E2D208F95CA0A19AE64 /* DDASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 84642CA926CF6D5766F1E09510366E2E /* DDASLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E340B5DB247012D978364432DE5FD6B2 /* entropy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F69DEEA14E86FA1AC1D1A8D88BC4BE9 /* entropy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E34C155E1A899C6BB4618281C1DE12F9 /* Realm-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FD7AADF311E52773A5DEAB8B6068293 /* Realm-dummy.m */; }; - E3578B7A70AC7A31B461EAFA67E42083 /* FBSDKServerConfigurationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3945A7783E097BDC44BF8B4C9A2EB28D /* FBSDKServerConfigurationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E39C4CC42EF3F5BDA5604BC62DA92469 /* SortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1982541F8C3BB1C17AA2089B12A9287 /* SortDescriptor.swift */; }; - E3AC9C3442CB3E1EF5C5EDA9B42330DD /* RLMCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 01CF1D31B6F4DB345C202E6A2CD2041C /* RLMCollection.h */; }; - E413140D374114255B8A08883B630598 /* KWPendingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 05BBC8716924B099B24DED9011BA83CF /* KWPendingNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E446959248A3E0C1BEC877AC2F4BBEA1 /* LSStubRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 20C9E277B36138FB92DBDB4222096514 /* LSStubRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E47DA7AA41D4E54A84F9B5030B8B4A11 /* aestab.c in Sources */ = {isa = PBXBuildFile; fileRef = CE0A13C7DC1F81FEEB2F304E46BD03E3 /* aestab.c */; }; - E4B58AB395BA7373E378EE333DAE1BDD /* FBSDKAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 53040C83295E673DFE1A879CA261BDD5 /* FBSDKAppLinkResolver.m */; }; - E4D7D0B902EEDD56577EAD41BF44F07B /* SENAPIAppFeedback.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CB94DFCF37770D9CD7668014CC1C47A /* SENAPIAppFeedback.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4FF225B033DCEFA7C5518717D68D583 /* SENSupportTopic.h in Headers */ = {isa = PBXBuildFile; fileRef = 42AE4D71406AE7EFFA9FB1E9B26369B8 /* SENSupportTopic.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E504702E3DF7F41F352A998D6CDF5861 /* NSData+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F754BE6874F52C0AEE481C4014DF92F /* NSData+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E521F10AB8761E1F46111F9ADBA42C58 /* Results.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB17583C3D6042671CC586691BA86609 /* Results.swift */; }; - E55485BE0005A36D83A1A8EFCD75A1B1 /* LoggerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA99B75535DA6509E52FE68FDF855106 /* LoggerDelegate.swift */; }; - E5828C832FF3AB312CFB0970EBBAB9A6 /* KSDynamicLinker.h in Headers */ = {isa = PBXBuildFile; fileRef = B4A57255F49E31065267F6D57E66D936 /* KSDynamicLinker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5AD4CF57BECC7BF08B9752229B76183 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68BCD4F77F990C4E98DD87E9EDE72AB6 /* Security.framework */; }; - E5B7913C06EB2A9DE71141C0B4AB3DA5 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF00F5E3F7CB1DCDB79D6689731A768E /* MobileCoreServices.framework */; }; - E61BCED91D5ADAFDF5710AEEA28C8A6E /* SENSpeechResult.m in Sources */ = {isa = PBXBuildFile; fileRef = ABDC7007B2C41C129E628C6DDB5E9F56 /* SENSpeechResult.m */; }; - E6315828C6C5E277586D3EA6F9E113E3 /* RealmLineData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F8E1CE134F23713530CA294632D5098 /* RealmLineData.swift */; }; - E64341AC569BBC2C8CB84D006532D660 /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CF9DD1D82033CBA76AB6A889049011 /* CandleStickChartView.swift */; }; - E6A10C353F984AF7FECE1AC7DEAEBB21 /* KWVerifying.h in Headers */ = {isa = PBXBuildFile; fileRef = DC0048376B27012F8AC78D94BF4FB425 /* KWVerifying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E6B68E40FDC70D5A12E76109F5761537 /* KSCrashSentry_NSException.m in Sources */ = {isa = PBXBuildFile; fileRef = 3771A3F3495620D6215F1A5E8FF62289 /* KSCrashSentry_NSException.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E6FD6352B2D6E9DFC10A104834C2AF76 /* MessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B4D01F1D8BC2011FAC7D0FE1FC4A27 /* MessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E754F14AD87331B7ED13BC622C01EBF7 /* KWRegisterMatchersNode.h in Headers */ = {isa = PBXBuildFile; fileRef = B3E57C099AFB0284A34812A14D60C736 /* KWRegisterMatchersNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7619620B7AE11A4E8F582D9C495DBFC /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 280582CE66C4AE1AC5C09C4E389AA9BE /* BarChartData.swift */; }; - E79DF6B92AE3FCBC0B691A0FC76AFEE1 /* shared_realm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61A1E6D553108B06E6683EAF3BE2BC6F /* shared_realm.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - E7B685C173EDBED25BEEA6C97632C4BF /* SORelativeDateTransformer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F7DEA9641F3FAF36133DBCEB122629B /* SORelativeDateTransformer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7C0EC3255F4CBE832A8D34A226203E3 /* RLMAnalytics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2F3F1B27A8FB48B85FD7CE63A1FFA5BD /* RLMAnalytics.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; - E800CA2E7D4E047BF1534BF39FF753F4 /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = F5FF4F55F79F165A240E8A7B9CDDFA55 /* _FBSDKTemporaryErrorRecoveryAttempter.m */; }; - E905651068E2352E1CE25ECD8F291943 /* LSNSURLSessionHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D9420B97D73FDEA67CDA023923E6EF5 /* LSNSURLSessionHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E90665D6ED3975B80FDB4705774722D9 /* aeskey.c in Sources */ = {isa = PBXBuildFile; fileRef = 7FA610537B2D9D3E09C6FA7FB85B3A36 /* aeskey.c */; }; - E94C3046759B58BE51D01F888615C710 /* FBSDKAccessTokenCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D69EA37424320E5C549936C680278EA8 /* FBSDKAccessTokenCache.m */; }; - E9796FC70C8E762C506172DB0C417341 /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F22D724D4EF34566CE2957BC89FAA1F /* RadarChartView.swift */; }; - EA210FCD97B7CB86E150F85CD833A100 /* BugsnagSink.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD661C4430C2FCCA9C275729E82AB7E /* BugsnagSink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA3168D188D3E47DAFAF028EAD911D2E /* FBSDKButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B59B4B6D25A4E8BFA815CAB9625D6DB /* FBSDKButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA6DD5350665CA98DD08CFA8D9736DDC /* BFAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = 41912B1F63B05B3A28DCE2573B7A3A97 /* BFAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA7315BD16C07F01756A5FD91EB9C0D4 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB88313660665F0DBCBAC8DC8288EFD8 /* CoreGraphics.framework */; }; - EA84841A80DF327B601675AFC6475984 /* FBSDKTriStateBOOL.m in Sources */ = {isa = PBXBuildFile; fileRef = 842116B5E0B6068DE878250C98265AA2 /* FBSDKTriStateBOOL.m */; }; - EAA57B5A589ABAA2E2064862676E461E /* UIImage+ImageEffects.m in Sources */ = {isa = PBXBuildFile; fileRef = 306C2064D9FDEE09F3E3EEA0AEF6F1EA /* UIImage+ImageEffects.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B6E26E97287EC3C315F259516A78CCB2 /* NSValue+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AC8B9D9F31A6F232AD9D0B49ECA21B3C /* NSValue+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7AD3CDDF3752EBF1D5D541613DC1FA4 /* LineScatterCandleRadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5995C78D79381C316E623B9B791B600 /* LineScatterCandleRadarChartRenderer.swift */; }; + B7B4AFC390097E831A09A3CF7DFAEC68 /* FBSDKApplicationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 92282AD8E58547A9785E8D7F2F12DF25 /* FBSDKApplicationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B82DF572429A7F4D551AE72CA1BE63C2 /* BugsnagOSXNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = B938F7A66925104D69C8C9E24FC0BFBB /* BugsnagOSXNotifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B832580569099A543E5EC17E80E0AE68 /* markdown_lib.h in Headers */ = {isa = PBXBuildFile; fileRef = 493C825024681A121C856067D0D2C087 /* markdown_lib.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B833088475EE54DAA9CC743A3CEAEF66 /* KWStringPrefixMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = B0E885BAD449E7E85F44CAF78E9C27FC /* KWStringPrefixMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B8B545FBAB911616BC964D730C46B442 /* SVWebViewControllerActivitySafari.h in Headers */ = {isa = PBXBuildFile; fileRef = 359C9813E7319A9FE4EE8A299F1777F9 /* SVWebViewControllerActivitySafari.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B8D0FA1538AD9326FB52AD4B740963AE /* Pods-SenseApp-Sense-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B2B537B643AD04ACDAE44DF3CA5E31 /* Pods-SenseApp-Sense-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B9504691C318A82B5576FD0FFBE06470 /* ChartYAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8107E2849F3C4F546D26073D8BCEC249 /* ChartYAxisRenderer.swift */; }; + B966651FFB4EFC558B59956AFF660C3A /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EEE836337F65A7F7D52049880D6E835 /* ChartLimitLine.swift */; }; + B99EBB8C2EA43388879AFDEF15596F5D /* SENSleepSoundsState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7076755D76989F4EA9F2DA4A59AA97A6 /* SENSleepSoundsState.m */; }; + B9E814C9E37B769B717126F874F1C713 /* LoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8323BD7F1422E912A2BD34AF05248DC2 /* LoggerHelper.swift */; }; + BA05FDBD345A622597AA23626513C0CB /* Kiwi.h in Headers */ = {isa = PBXBuildFile; fileRef = 554E49C12527F52EB998770EB32E1769 /* Kiwi.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA2C986AA3B0C8E962F7F4C990165E94 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 80693764189B5FF79C720997A8BECB77 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA3BC0A290359334FB934D56EA58E870 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 679FD495DB088FC7B13B0E45B95EDD43 /* CoreGraphics.framework */; }; + BA4BDA03ABE7F96E9E1923A6053D1248 /* BFAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F38C0FD5F401CEEE7A2898DDFD45A81 /* BFAppLinkTarget.m */; }; + BAB50C7625AAD910D36038DCBE079AB5 /* FBSDKLoginCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = 70CE9A83B7A293A1316C7DFE714A6C0D /* FBSDKLoginCompletion.m */; }; + BACC33DC4F0172A9D42AD2E2D24257FF /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DDFA79FEF9EA4E6B5D4E4B6E1694EF4 /* UIRefreshControl+AFNetworking.m */; }; + BB28CA51512E30BB843E3D0BCAA8EC81 /* FBSDKLoginManagerLoginResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 77013EB7E0DB69980DBAAFA3895A6C0F /* FBSDKLoginManagerLoginResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB2D270A94D9F75793EA6E09378EAB5A /* NSProxy+KiwiVerifierAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 278F3039D70C10B865E73E2A39EF878C /* NSProxy+KiwiVerifierAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BB3B8E73AAD830DA5F296869075B65FF /* FBSDKConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 45BF10EAD9B3F6CA148EC3172E67C720 /* FBSDKConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB44953D1FB8D3FD4AB6443FC8C71123 /* NSString+Nocilla.m in Sources */ = {isa = PBXBuildFile; fileRef = 01245847AACFC2E85F0FE06B0708C485 /* NSString+Nocilla.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BB5987C9E03A905A86FBE78D0504D896 /* MSDynamicsDrawerViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BDCBBF6468D2782C44943997A9EDA568 /* MSDynamicsDrawerViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBA18D8929353AEB0E19F72FC27345C6 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9537C83D4FC4E2F74632CA4089BB3385 /* ChartData.swift */; }; + BBD020302CFB4A8C4EFA607313DBCDE2 /* BFAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D35E9F130F7A6721D9CA8B54B8D923C /* BFAppLink_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BBD118AD007E5EAE20554D7A0B18ED0B /* KWSharedExampleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = CE01BF63EC59C374C87F187DC491E58E /* KWSharedExampleRegistry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC29D6CF8F4671DBC08BFE201502AA90 /* SVWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E1633A988CD49932F1E3FFFE51C7233E /* SVWebViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC5F1D06067FB30C63D4ADB7A6D1F38B /* SENAPISpeech.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DAF130518B588AADEB747194C84E57 /* SENAPISpeech.m */; }; + BC6509F769C6FA1115A2FB45E1A4F137 /* LSHTTPClientHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 31614EC17C1634C477A707935176004E /* LSHTTPClientHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC9EC4F108672F0C5FAD07549B132354 /* SORelativeDateTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F34BE2951CA75E3D6179586E63E03D0 /* SORelativeDateTransformer.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + BCDCA156003585858FA947C6F7532484 /* KWBeKindOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = DE748DD78759EA2058ABAF0671E5625E /* KWBeKindOfClassMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCF5CDE9B571F584A1B27E0C2EDA4DE2 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54BF83A5156888CF00F6FFC8BD30979F /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; + BD35C704EC5642A1FD917893B912E77E /* ChartAxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A16A9F1A7B0DFCA14764EEE820ABA6D /* ChartAxisBase.swift */; }; + BD63E3430FF5CC961B625D63211A5D2B /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D4DFD4B2273EB0B62250F643DBDEE3A /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BDCFA669BBB768D54B93D8F90C275159 /* prng.c in Sources */ = {isa = PBXBuildFile; fileRef = B077F26C0025994A305A8B3F2FB7378C /* prng.c */; }; + BDE1589F684491D087199D2A5AFFEB11 /* SenseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E247502633F14FD7BB8B6EADD9AE600 /* SenseKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BDF320CF4A39C5AE8322693C603C3170 /* Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A2100938B5C885B13454A9B6EFE1CAC /* Message.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE1A986F2B669082A2BC8BDA17AD2C51 /* SENPillMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 73820AE304E327C7EC3889A146127BF1 /* SENPillMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BEAC49D7FF2826AAECAB81ED9C26B744 /* KSBacktrace_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3520846824D1F7B314C3061342829B8A /* KSBacktrace_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BEB5987B7730316A9DA09992922C73B4 /* ChartYAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = A575A02EF502781D0742F7221BD5A17B /* ChartYAxisRendererHorizontalBarChart.swift */; }; + BF0359CCCA5C318CEC7373BA5B95AD8F /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD116CE3F5D968D1005C7EA7FC7E732F /* AFNetworking-dummy.m */; }; + BF1A5D67804AEA13B6078D39FF950A23 /* FBSDKAppEventsDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FD791C34D3B709A59E1B9F9EE0D1AB8 /* FBSDKAppEventsDeviceInfo.m */; }; + BF5F96051FBFCD656B76B0467B56DE78 /* MSDynamicsDrawerViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2319FF9B83BC200A79114E0DDBF06EF4 /* MSDynamicsDrawerViewController-dummy.m */; }; + BF832B25872EC370E2DFD35FD8ADB454 /* SENSenseVoiceSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D9C3689B28A6FFF88817132B5FA889A /* SENSenseVoiceSettings.m */; }; + BF9FBAEBFCDF704A5AACA68A97A8AC24 /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9886661FCF8FFAD5AB68C2FC940F6955 /* BubbleChartView.swift */; }; + BFC44C72DAF8F59B4150CEA83CD9EADC /* SENSleepPill.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BAA246DE42493986223E37A5FAB1CE2 /* SENSleepPill.m */; }; + BFE3DC42D3E18272EBFBBDBB3125B557 /* BFMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 77169B93EF58F57065D4109090936A12 /* BFMeasurementEvent.m */; }; + BFF2DA475B8128349D6F37DB0CDFD746 /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 23A2CB868492E07B4E11D59DF62C0F6F /* DDTTYLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C0122856BD10F2F5B365D5941FBBADE9 /* FBSDKGraphRequestConnection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C705E8F445FFB463511B342BA27875B /* FBSDKGraphRequestConnection+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0971046EE9B0D18F3730A62AAF93D78 /* SENSleepSoundDurations.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0D64E3601E7231337F22FB0308713C /* SENSleepSoundDurations.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C11BE471B82483E2BD4A97FA4055E5FD /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 878C5D33E1D5169732EFCEFF043F9EA8 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C12B22BE4BE08351CE5B5972003C14EC /* KWPendingNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 027EE36F4F9D34BE7ED014E939D85FEF /* KWPendingNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C13CFD64685F3EB48EE4D0E20B92C5E8 /* ChartYAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8787195BD5D62DA9D74CE8162926E700 /* ChartYAxis.swift */; }; + C14298B5CC606AC278712E1C9C5CB0BB /* KSDynamicLinker.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7B798B041C898DB6BA8ECC89296D6 /* KSDynamicLinker.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C145198A5E011D8D137A56C5D481D056 /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 442FA759919BC6FBE46B2AA578233281 /* ZipUtilities.swift */; }; + C157F28C1A72AFDF430D93911B9F6D73 /* LGCentralManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3951ADA500CB23F69ED8E388B5FE1362 /* LGCentralManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C15886EE113998695AD397ADB37B8567 /* SENSerializable.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F33198A974BEBF7EEC346A04323C10E /* SENSerializable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1646200E22E63C3553180A4629331D7 /* BugsnagOSXNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E07024377EBB01DB177D127402D8C8E /* BugsnagOSXNotifier.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C1D9CEBC34C00C8D564D922852AF4291 /* KSCrashReport.c in Sources */ = {isa = PBXBuildFile; fileRef = 62B973EFF5A253B2FF5728B11E57D53D /* KSCrashReport.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C21656BC80CA57E119A71618CFAB9085 /* LGPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC21CAEAFD586731B598F62753B141A /* LGPeripheral.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2A75D306E3E666485A89FF8FBB93662 /* TextFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1469C1A0D82CB693F7AC2521108CF393 /* TextFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2BD31B3A8342040AD532955096D3C62 /* SENAPITimeline.h in Headers */ = {isa = PBXBuildFile; fileRef = 0011E17669A8C12F1E65B5EC20167A89 /* SENAPITimeline.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2E3EC213FF51CCEB9317DF98DB6536F /* markdown_output.m in Sources */ = {isa = PBXBuildFile; fileRef = E2B1FEFFE90D026A75C9499AE4D46C0A /* markdown_output.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C30C22C07D40C34FB40EFF2CD5C57595 /* KWSymbolicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B5742B45011A8B89A0A4C0F2031AFFB /* KWSymbolicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3973A4EC490AAA52693E2B5F5CBD958 /* SENSensorDataRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD4AB286987E116BD933718676D63FD /* SENSensorDataRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3B4A2B2168A3AE154AB2FAD1AF29AEB /* FBSDKOrganicDeeplinkHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 28CA2D9A4C560401E18541A1CDA7AA20 /* FBSDKOrganicDeeplinkHelper.m */; }; + C3E1B32B272E50B1CD11BF574C872231 /* KSCrashType.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C41251AD8917AE75847686D0918674E /* KSCrashType.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C43D06BB059AE8B9641E0D63235B9781 /* KSMach_Arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = 7E88A4161640BAB97EACD27E68A9EAE8 /* KSMach_Arm64.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C499FBDD4A5465C6A75C427766B1FA77 /* SEGAliasPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 17175B0CD77F0BB867113288F804A887 /* SEGAliasPayload.m */; }; + C4EF9DD92EEF3E3B46D73A5FBA10FFC6 /* SVWebViewControllerActivitySafari-iPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5D2B89CD9830D5AFA26D97C8A4D913D9 /* SVWebViewControllerActivitySafari-iPad@2x.png */; }; + C5007CCF8F58274D09FEB09D12C7C6EF /* platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 9841CEB92D3DFA6FC2A0B176E3B89EF1 /* platform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C552CAAF3B7668D2BC27CD2CA129CABC /* LGCharacteristic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F32E88337347DBE8B0AFF6293CB01CE /* LGCharacteristic.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C58AC132E03B33468E0773FFBCBCB766 /* SENAPIInsight.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4633BD5DD68B69C96B991FE24B66A4 /* SENAPIInsight.m */; }; + C5AA0AA6605F57F626030773EFE6634D /* DFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0D986BD1B6B1A6048C4828E582E07B /* DFUExecutor.swift */; }; + C662372EFDA103BBB6837A1CEAA4A5A5 /* SEGAliasPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = A05AEB6716867C43869332E440DD373E /* SEGAliasPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C675A44867228A72B00AE866A1EEB9BD /* DFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EA522A34D494369588DC424E3BE34A6 /* DFUServiceInitiator.swift */; }; + C68115BC2DF6B5B4E98B432C9CE22809 /* CGFloatType-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A00450CA43702F847DCF3C9FD344967 /* CGFloatType-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C687EF7F4E513E010A37C249E7925F74 /* SENAppStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F703851ED8C3EAA394E858DA8AC16F8 /* SENAppStats.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C6B65028F664469DE861F9DCE2172FF4 /* NSInvocation+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DEEFBC8C93F4824B8536E33FFBA3617F /* NSInvocation+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C6D49EBAE82D5C571E6A2F4C0ED2DE6D /* FBSDKLoginTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE2B94847544BEB6DACA055959AC44A /* FBSDKLoginTooltipView.m */; }; + C7008A532177CC0AEC4C5F71BBCA82C6 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E0599D1759BE8CC0F4F3756D5B193C /* ILineScatterCandleRadarChartDataSet.swift */; }; + C770C09B8F38619177E573E60F87A5C8 /* SENSleepSoundRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AAF481E56F9F937954FEE4988A23F3A /* SENSleepSoundRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C7CABFE295DBC579CCA020AB39548674 /* prng.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DFB8ADA4771AB21B8138896787075EE /* prng.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C83DBA8B9CC6048A91661CD368A74F9D /* SHSProtoBuf-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 795A325DEEDDA69FDE7F941B96807820 /* SHSProtoBuf-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8B8D54C297D8BD9404AFB9A1A5A0472 /* SecureDFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 914BD9515C6ECEC5BDBCA44CA21A6F35 /* SecureDFUServiceController.swift */; }; + C90B58FE571E74C022EB367959C61242 /* KWBeSubclassOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B934AC9229258C81200912A1A60E4BD /* KWBeSubclassOfClassMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C948A11E45B6196EE73EABC8B6FD8F13 /* LSRegexMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AF50D984B2B6E1AA04EBF3E51FEA2D6 /* LSRegexMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C97238488939D65091EC2E2A7C30DDBA /* KWReceiveMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = FD7449A228BC96409D0C8C1066F06B0E /* KWReceiveMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C98F7E32841B74549C9531C247D4F05A /* SEGIntegrationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E382A1BA00D9F5FFA4D5DA7CACF23AA /* SEGIntegrationFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9D1E60D86B0D4C00329496DFCA12F10 /* ChartXAxisRendererBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818EF93AB7B9BF31DAE60FF0F1288E7A /* ChartXAxisRendererBarChart.swift */; }; + C9F3DA5C7D6F40C59E166EDA25BF3C1A /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7256D5CF6C7C5FE3C50B8A4C15E174B /* IBubbleChartDataSet.swift */; }; + CA399B082482578E1CB624BEB297CD04 /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 53AFC84570A1B0B02FE57DD5DAC93FE2 /* es.lproj */; }; + CA3ABF826EDDA7F708ABB88B0B4C8E38 /* FBSDKAppEvents+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C16CC6E5176D8501D92D233BBA31EBA /* FBSDKAppEvents+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CA48107C825CC037E951E2CF39DD3C18 /* FBSDKBridgeAPIProtocolWebV2.m in Sources */ = {isa = PBXBuildFile; fileRef = B478A2E9A9DC455E6EDE8393BECD17AF /* FBSDKBridgeAPIProtocolWebV2.m */; }; + CA5A32377AABB6E85D362D9EA665A5DB /* SENAPINotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EDE38C326B0C9D774F94439E262F693 /* SENAPINotification.m */; }; + CAE755D93AF1E2BF177F3D84CBD23719 /* KSSafeCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = 158B00826E913ADA8ECF519AE076B3F5 /* KSSafeCollections.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CB20763034205A991E111CA8E2D95B5C /* FBSDKBridgeAPIProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = F612842F95EA8CF9471BA8781FD937ED /* FBSDKBridgeAPIProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB85CAF0EB5369E5348119B2D26B0912 /* SVWebViewControllerActivityChrome-iPad.png in Resources */ = {isa = PBXBuildFile; fileRef = 41FBCADE91D5D803B09BDFD2E6E73F07 /* SVWebViewControllerActivityChrome-iPad.png */; }; + CB94E95B3C002D2EB8F79858777852F5 /* DDMultiFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E0E24BA079C1A220065D1EDB65EE38 /* DDMultiFormatter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CBAFF3A7256FA503D10B7D7F5BF5E7D7 /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0336F12C33198D824C6FF0108B84B408 /* BarLineChartViewBase.swift */; }; + CC722CCB6BC0F5386E3CFF1B0E9E2950 /* FBSDKTriStateBOOL.h in Headers */ = {isa = PBXBuildFile; fileRef = 73FA3FF5FE5F90411F3F313B0A585CA6 /* FBSDKTriStateBOOL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CCF2758FCD42E39B96D79642EF72855A /* DDDispatchQueueLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = ABA1CB344BA9A8F8E667F23B2F5B9F34 /* DDDispatchQueueLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD6AEE09E4DC0C4F14EE9E0C9E720E4C /* FBSDKAccessTokenCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 70C8376152869595E9A48C6D0CD2452F /* FBSDKAccessTokenCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD723D3BA84641F47609CF108E633ED5 /* SVWebViewControllerActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A5F06257EDF79473630CEFF86AFA989 /* SVWebViewControllerActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE3DCAC27131D219800E31FEC927E720 /* FBSDKLoginButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E7081614C2096F58D9C5D6AEB46476F2 /* FBSDKLoginButton.m */; }; + CECD6CEBEB80365E8EBC696AE6536A7A /* SENSleepSoundsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 968CE57254DB2370C0F508C5828916E8 /* SENSleepSoundsState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CED3659D0D4E9D7DB8D3A9FCDDE84256 /* SENAPIAppStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A9091656D7C2A6A7B67007E49E7D06 /* SENAPIAppStats.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF4BBAAFDA237C5437A3C9A8095AD41B /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D5D53C55CC6490E4A4287F9A564E49A /* CoreBluetooth.framework */; }; + CF60BC8ED7039DCEB12964B5B98AD3DD /* ChartRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE603BBB8A791F77CE20556BF34289E /* ChartRange.swift */; }; + CF8234C1D41A4617CFC974760EAF4800 /* DDFileLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = BEB27B45E17C43A9ED91EDF86678695C /* DDFileLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D00B025BE1B96D45B2AE723A7FA24F18 /* FBSDKSystemAccountStoreAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A28DD9048855D1727BA0B4D1BAD1C5 /* FBSDKSystemAccountStoreAdapter.m */; }; + D0473CD5F42347C3B798593F93E33CA5 /* NSMethodSignature+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D7E61C08F82642A1835AC06D146B9368 /* NSMethodSignature+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D09994A9D4F5AE06CF20C68FDE787706 /* ChartAxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC836FBD87E70EE5DD7B95250A119383 /* ChartAxisRendererBase.swift */; }; + D0AE9F92EAE84DECC4A49A983A690941 /* KWSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 9876B9C93E97E20C7A9DC2BFAB47B44A /* KWSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0BE6C2EA1D3D682C829607E5ECD4316 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = EB440CA4A303A6CE6E43DE42B1A93C30 /* de.lproj */; }; + D1178970B3261A14CA8B323ED5033AAE /* KSCrashC.c in Sources */ = {isa = PBXBuildFile; fileRef = F856F7FF124E28955B3433171CB8A6D0 /* KSCrashC.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D12B1F723E9E50C2DCEF01C7AD5E2D3E /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480C9FB24E9FE0DC77289B3500B9F004 /* AnimatedZoomViewJob.swift */; }; + D12FEBE16C53D9B434FF830C2B9AEE24 /* SVWebViewControllerActivitySafari.m in Sources */ = {isa = PBXBuildFile; fileRef = E0BB15CD6DEDE20E2D0E1D7EE41DE109 /* SVWebViewControllerActivitySafari.m */; }; + D1319E6DB469539FADA706FC3C330BEC /* FBSDKLoginManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D577930CE95CCA4261A388D6C1C1C3 /* FBSDKLoginManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1A7564F4FF13F8D3C63581DDB02679A /* BFWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCB1CE2BBCB4EA18DF751BC7B9003AC /* BFWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D1D7E05928C9111950CF92DB08FBB690 /* SENQuestion.m in Sources */ = {isa = PBXBuildFile; fileRef = 84C2D75F50A903CF3C0EFFC67797FAB8 /* SENQuestion.m */; }; + D29463616231ED167062F6D7089DF83D /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B425EE66C3D03E49AFBDC1F7975534 /* RadarChartView.swift */; }; + D2A3AADB3E3B74D3199B6E37BA0A9388 /* SEGSegmentIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 128488C38054F586D717EEFE4A150F47 /* SEGSegmentIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D2BDEFE2F49FAE82EBB7C066E7555FE7 /* KSCrashSentry_MachException.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEAB4674B5208451B69ED2D917B4E21 /* KSCrashSentry_MachException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2D7D034F45F19FA0F9B7998E75EFDBB /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EA4E89B0D99D7D44D4C33804130F6FC /* CoreText.framework */; }; + D310CE00849AAAAD4B93C826D616617E /* KiwiMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 71C68B3BBE91BAC6B8028735239AF219 /* KiwiMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D33921593FB443298BAEB053C8DAABC1 /* FBSDKColor.h in Headers */ = {isa = PBXBuildFile; fileRef = B263072E68DB8DC95577D5018913E8BE /* FBSDKColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D34841F908C45F27436E5D67A8970182 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = ADA83585D50C3E84B6CCDD35ECC9272A /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D37C1D7E1CC66B91C545E60565848CCB /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 833B5B603D7AF938E239998CEA5392F9 /* BarChartDataEntry.swift */; }; + D3C25A444F73578689F16B8B363551D2 /* BFAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A10225050C3CCB2041EE5055A99AE6 /* BFAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D3F9697B0D5D990CCB0AE4E0262E7FA6 /* CodedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F838261058F587D9687E72CC790FC380 /* CodedOutputStream.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D4531A890597466A6B36C2A7B79B5965 /* KWCountType.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F7FF47080AF5A3C6B5C136BC708CBFD /* KWCountType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D4569F8AF9E20D5283B40B1D607C48C4 /* FBSDKLoginError.m in Sources */ = {isa = PBXBuildFile; fileRef = B1E32E3EB1CB4E38E069F7A5B9EB241B /* FBSDKLoginError.m */; }; + D47B21C101D13BF94C21705159EADDBC /* KWNull.h in Headers */ = {isa = PBXBuildFile; fileRef = 55EFAD7CE8C2FFC816EAEC49196FEC7B /* KWNull.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D48F5DC589D8C5E58FE002620A9910E2 /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857471347D498C2F5091242CA8EF2F49 /* AnimatedViewPortJob.swift */; }; + D490170519014A6FA50A59F7F5DF7FA4 /* AbstractMessageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB6730DB8554D0134E147C9391C46AD /* AbstractMessageBuilder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D4DCD448AA2C2AE0DFF7419EEF63D08C /* SENTimeline.m in Sources */ = {isa = PBXBuildFile; fileRef = AC7773E468D75EB09A0F98A2693E2849 /* SENTimeline.m */; }; + D55869AFC1BE984F54ACD57EB710338C /* CocoaLumberjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 779498A6ABD2D124A9BD9BD17AF0F3B6 /* CocoaLumberjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D55A9D1D02F3C7A8D1514BA6A8E38B78 /* KWBeEmptyMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 749739E40CE9937DFECA3F01767E38E5 /* KWBeEmptyMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D5EA2D6516BCC5D48D197B4F0B3632B7 /* LSNSURLHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 1013530ECEF0D1CEFF9FC1A9EEB8F3FC /* LSNSURLHook.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D618B276A096BB11B0E144DB8CB4443F /* API.h in Headers */ = {isa = PBXBuildFile; fileRef = F8AB6AF093C72657C7120589DC6C9272 /* API.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6622A5B09BC542F29AE41AA937223E9 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA18FC666C3D52D60860404E6189215 /* AFSecurityPolicy.m */; }; + D667D68D8020E9FF95FFE316249A534F /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FF9B04A631E27F0EA56025C0BB21FC6 /* Zip.swift */; }; + D67F189B43E33DBA64F98C47AB44A6A4 /* LSHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 500AA771FB841D53FE045763D4D10599 /* LSHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6838078F8C9101540A3CA124A6C3F71 /* KWBeforeAllNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 62535C65657B6DFFAE34330A0B3BBE6F /* KWBeforeAllNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D69A839CC048787ECF89DE776CCC6022 /* SENAPIAppFeedback.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CA597D4B5F3A3FCE19B187AD3031B1A /* SENAPIAppFeedback.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6A8FEFB483F2114C1016A17BF2BDD8A /* NSObject+KiwiStubAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E1919ED6D2223D65B6075DDC7BC0F9C /* NSObject+KiwiStubAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D72EF55F449164D259139F781C7075EF /* FBSDKBridgeAPIProtocolWebV1.h in Headers */ = {isa = PBXBuildFile; fileRef = EE4AE286F72527BD63F3D86337F997B2 /* FBSDKBridgeAPIProtocolWebV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D746887AABB2D3B254FC4A3D73CBDFF7 /* LSASIHTTPRequestAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5466EEDCDCC2D644C5EA367E208A8545 /* LSASIHTTPRequestAdapter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D7AAD65E3E3CB6E46165BF2B7CC0873F /* KWMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A011C0D37A27D2C707AEBA03B0039C5E /* KWMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D7AEF0EBB2AC999ABF333CEFC1CC68F0 /* FBSDKUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 56BE43E682E953A1355F695B873CA97E /* FBSDKUtility.m */; }; + D7C3596988B351BEE6270638038F4CF3 /* FBSDKBridgeAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A9FBF3A41BB41293579F93FD9159897 /* FBSDKBridgeAPIRequest.m */; }; + D7EA60C19C8322D39BBCF6B838165BD1 /* KWBeMemberOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F26CF3AE4D0472784F1251C18670EE /* KWBeMemberOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D847D12807EDEB62E5F04DEA703A7119 /* KWBeSubclassOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 169C39D904AAB90FEBFE281CB20B20B7 /* KWBeSubclassOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D8533721B90E0B20C2C0B35ED4A131BC /* aesopt.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B82D4AD8E4F0D1D5FE346B4C14E8DE9 /* aesopt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D87C8BA320C687BB5D690258E14E313C /* KSCrashReportWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2265AA51C2046E171043AF808512ED79 /* KSCrashReportWriter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D89C2616A42CEEF09AECE90CA5648604 /* NSNumber+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AEB6D0D368F9960B71C2DC23527A1EFE /* NSNumber+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D93EDD99842A0C28FAA242556AA58987 /* BFAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = B7202A72567CF4E609B357ABA20C08D5 /* BFAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9678D5CFC1B5F819BE79E81FB32CD68 /* NSValue+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0A79BDD2DA855CBE7BD32952C1A42F /* NSValue+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D9CC26E9423065F1AA784191F0151386 /* NSJSONSerialization+RemovingNulls.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D1EE5B9BD79692F1B032B55FED2399F /* NSJSONSerialization+RemovingNulls.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D9F88DA51DED74F66F84251A0224CBB9 /* KWDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 23CE39A7D99F68679286EDCFD6B44759 /* KWDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA0B4B49A537D62C09EB06B8AD3D34FA /* KWContainStringMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = AE35CC8436761D3E73E85B11422ED006 /* KWContainStringMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DA3F7A6C8AB5FFC0D9257B764A48D68B /* KWRegularExpressionPatternMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B9C772F1E55C8A05672A9D4B175931A /* KWRegularExpressionPatternMatcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DAE881D26E4097A5540D71F7F285CEF2 /* UICountingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 81880B70B63CABAAA841A0AB9E6B4679 /* UICountingLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DB0D689D9C790E2791196E959B790A0E /* SENAPIClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC30E6C0D1C941F536F4B398F960CB31 /* SENAPIClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB952D69AFEBA2947C5A873F7B0718DC /* BFMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF02C0A5D15037F5C56816281942444 /* BFMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC1AD65307287BAD0C55747209B35CDA /* SENTimelineSegment.h in Headers */ = {isa = PBXBuildFile; fileRef = 933D27431333F936A55ADD3CE04237BC /* SENTimelineSegment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC2B37B2E0BF5F6953D3236F1E557476 /* FBSDKLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F5FC5B50EFC0CC03D5AEEE5B9F831997 /* FBSDKLoginManager.m */; }; + DC81C967FB6410B27BE6F1F3E5F723FB /* KWMessagePattern.m in Sources */ = {isa = PBXBuildFile; fileRef = 30233AAFF56A1C8795963B6244C2C936 /* KWMessagePattern.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DCA37456B2E3B2863ED79B86B67356E9 /* TextFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = EFF3D08E918CA2C48176117C20957517 /* TextFormat.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + DD43B880E18A2AD7D044CE4E9E0DCA93 /* DDASLLogCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 7263CE090D8B823DB8DAE44133226E1E /* DDASLLogCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD7FBCB0E1380F9450BA0D22B8BA3531 /* BugsnagConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = ECC1C2215B7499EA36CB5480EE8A5327 /* BugsnagConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE3DC9E1C11B1CF52E69D1C89A7089DC /* SEGPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = F83F6D217C69DC0AEADEE9A4FD360280 /* SEGPayload.m */; }; + DE4CB480F434FD246BD7D9031521F140 /* SENDeviceMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 12A39994900A4BC9A0CEACF5A24A20FB /* SENDeviceMetadata.m */; }; + DE92A1E8A79BDD915C23185BCE9DF1A1 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A873369AB97A87DC132F20B6FF3DBC8 /* LineChartView.swift */; }; + DEC162ACBB48A2692EA9AC81E0C59BD6 /* KWLet.h in Headers */ = {isa = PBXBuildFile; fileRef = FA62982D52BA4CCCDEBD2F0A8CE57207 /* KWLet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF1D0AF8E5A3647EB568E37E5A056D67 /* KWReporting.h in Headers */ = {isa = PBXBuildFile; fileRef = 52CCF6B3465A8C9784F6E8C9BAB9118B /* KWReporting.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF4B91D7322187FA6AB197AB6820F02E /* FBSDKBoltsMeasurementEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = F0705D1C927CB46EF728389209E1FDB1 /* FBSDKBoltsMeasurementEventListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF622B2F3639836C35B994045015754E /* BarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274DFFA7FB3CB2C289E47EE2D2E9E492 /* BarChartHighlighter.swift */; }; + DF8A6F9EF6FA0773F9590BAE8BA4603A /* FBSDKBridgeAPIProtocolType.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DB186D59153078078E269CC12CA2703 /* FBSDKBridgeAPIProtocolType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFC1984CDFF905B0B0349E9B51B08DD7 /* ForwardDeclarations.h in Headers */ = {isa = PBXBuildFile; fileRef = F78D6D26855D9C96D17B39864AAE9BF0 /* ForwardDeclarations.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DFC6504E250D9577E5A0E97AC6ADCEE1 /* NAPickerView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AB5D7461B216FE2AE433AD45349F9C8 /* NAPickerView-dummy.m */; }; + E002F994C0BCBA0924F0DA9E20F1FB8F /* SecureDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0C6AFB7B9285CE5D210F569B4BBC384 /* SecureDFUPeripheral.swift */; }; + E007674AB922365892B1382C798BADCC /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A7CAB3B040202264CE83447B8455DF5 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E00B98474607B5DBF673BFA15458DAEE /* FBSDKBridgeAPIProtocolWebV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B30EA00A02896180D867FEB80C3E6E0 /* FBSDKBridgeAPIProtocolWebV2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E01A4F165D4BA9195ABE7B015B85185E /* FBSDKAccessTokenCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = 72C68BA0D692007B78E5496C24AAA619 /* FBSDKAccessTokenCaching.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0209D95E735A096C7863F504E61D36B /* Bugsnag-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FA274ACC34935782F49ACB8DEDE6332D /* Bugsnag-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E069194F5C0AB75B1471DBD06DE6AADB /* FBSDKKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7083FEB26BB5D6669D97D4F1F20BBA3A /* FBSDKKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E07AFC3465D6B92F7C33B280364D3AB8 /* SENSleepSounds.h in Headers */ = {isa = PBXBuildFile; fileRef = A1249F91B227A4F1FFA12A90FE32175F /* SENSleepSounds.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E0F970B45227BF9CB87E487FE37775CB /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B62DB8621AC21C867659B21483A2705E /* Bolts.framework */; }; + E1375CA2DABC969AB5798BFBE8458763 /* markdown_lib.m in Sources */ = {isa = PBXBuildFile; fileRef = 397536234C03276B2E981D4B78E91240 /* markdown_lib.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E186A5B8E30BD9A92E4887D535C9A908 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 71AC4726874D4FFCC177EFA8F5174CD6 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E19ED038B883AFCB18830240F7C685FC /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E87AEE243740BA2FF0880132DC204C25 /* UIActivityIndicatorView+AFNetworking.m */; }; + E1C54226E74B2BB450E27EEE0C88F788 /* KSCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = 708D5018FDD710A7CA8829585A282BE1 /* KSCrash.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E1D795F1C7A10198A9A45789C08D6FF6 /* KSMach.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ABB8BC7F773D7FB3FEEBA6B1E708BAB /* KSMach.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E1EFF0079610395EFF32CFBDF1F4A6B7 /* FBSDKDialogConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CDBE3E461EFEDB2C6D8A353DFBEC88F7 /* FBSDKDialogConfiguration.m */; }; + E214AF16988C7A706A5308F384E1F2C0 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 70A8433D2E31F37A6432D055283902F9 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E230EEC1D8D0723096AF904BB39FF384 /* UIImageEffects-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B9DC380322702BC559633FE8ECE41EC2 /* UIImageEffects-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2C86771E10C809A5A4E473F68D911F3 /* KSString.h in Headers */ = {isa = PBXBuildFile; fileRef = AC62CE1461BF02A54CDB746F29570C8F /* KSString.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2E5E9204052864BED56EB4EB9E6E237 /* SENAPISensor.m in Sources */ = {isa = PBXBuildFile; fileRef = B672E0707772C68D3F70EE0B741AC92C /* SENAPISensor.m */; }; + E303B55C9F7029A87B1C24FB19D9F097 /* DDContextFilterLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0924E45750440DCC9F908217D04F4FFB /* DDContextFilterLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E305ED2F4EA517CC2E9EC0CAA306BCC9 /* Model.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C37B90582C3E3F245FA10AB9DE54723 /* Model.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E31BEFE9879B4E2D208F95CA0A19AE64 /* DDASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 75CDDC0B351DE7BCD88EE204F53032D0 /* DDASLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E31D71A665A3BF7059D5886A744DA397 /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02124129F566CC1185ECC38993662970 /* ScatterChartData.swift */; }; + E340B5DB247012D978364432DE5FD6B2 /* entropy.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A08B8550B62166FEE79A6348999E212 /* entropy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E3578B7A70AC7A31B461EAFA67E42083 /* FBSDKServerConfigurationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 54AA065526FE6A10ED8D25EE015B1E98 /* FBSDKServerConfigurationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E36093FA5F89E3C19ED5D03FA9A6DD6A /* SENSense.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E3B39E09E9ADB033F775C9C50586021 /* SENSense.m */; }; + E36670E60FBCCDD90D50CEFE120CB0C7 /* UIImage+ImageEffects.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F0E7152AC45C5C7FD619A8C0FDBB461 /* UIImage+ImageEffects.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3AC11115F7C13D6C49F5D7AF814BAF2 /* SENAPITrends.h in Headers */ = {isa = PBXBuildFile; fileRef = 37801A0C94F9634CC7DC5F57DD626F22 /* SENAPITrends.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E413140D374114255B8A08883B630598 /* KWPendingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F88F8D15BB56F8131446B2A9E0EEAA8 /* KWPendingNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E446959248A3E0C1BEC877AC2F4BBEA1 /* LSStubRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 677FCE0E4C8C6CCD3C8F0EC119032BC4 /* LSStubRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E45E644700390AF017FB63D9A4193F1C /* ChartComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CEA6A9F6B648704C0D5675E6B7AEEF /* ChartComponentBase.swift */; }; + E47DA7AA41D4E54A84F9B5030B8B4A11 /* aestab.c in Sources */ = {isa = PBXBuildFile; fileRef = 1D00FE9032C51019529EBA8F69AAC579 /* aestab.c */; }; + E4B58AB395BA7373E378EE333DAE1BDD /* FBSDKAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 1255E0CF0EA90644C5F4155A1E349C42 /* FBSDKAppLinkResolver.m */; }; + E504702E3DF7F41F352A998D6CDF5861 /* NSData+Nocilla.h in Headers */ = {isa = PBXBuildFile; fileRef = 56540D103ABD57110ABB078856E08B6F /* NSData+Nocilla.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E55485BE0005A36D83A1A8EFCD75A1B1 /* LoggerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D885C5F59B246F982976891079D69425 /* LoggerDelegate.swift */; }; + E57F4238FB990AB600B8E9217E88CE43 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E3D22C18C326C6B59EEC55C55085D1E /* ScatterChartView.swift */; }; + E5828C832FF3AB312CFB0970EBBAB9A6 /* KSDynamicLinker.h in Headers */ = {isa = PBXBuildFile; fileRef = 1613FBF6DF3BF714DAAB36DDEBBF977C /* KSDynamicLinker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5AD4CF57BECC7BF08B9752229B76183 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A3B9EC76C8547196955D1A70F79C297 /* Security.framework */; }; + E5B7913C06EB2A9DE71141C0B4AB3DA5 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8006B7CF34AC0DB78CE0F90413BCDE4A /* MobileCoreServices.framework */; }; + E6A10C353F984AF7FECE1AC7DEAEBB21 /* KWVerifying.h in Headers */ = {isa = PBXBuildFile; fileRef = EB182FE499AC0D17F21B84311BC929D8 /* KWVerifying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6B3119C1E089809C10F10CF03DB29FE /* SVWebViewControllerActivityChrome.h in Headers */ = {isa = PBXBuildFile; fileRef = 45A9B7CE498180BD7A7C657843BC6D22 /* SVWebViewControllerActivityChrome.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6B68E40FDC70D5A12E76109F5761537 /* KSCrashSentry_NSException.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DB621DA32F0730F1B77EAFBD633E87D /* KSCrashSentry_NSException.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E6FD6352B2D6E9DFC10A104834C2AF76 /* MessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 71B2339DE3DAE62FB7364C06EA772127 /* MessageBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E754F14AD87331B7ED13BC622C01EBF7 /* KWRegisterMatchersNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FFBBE960B9D3B54218FFE4077204089 /* KWRegisterMatchersNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E7B685C173EDBED25BEEA6C97632C4BF /* SORelativeDateTransformer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D6184D228AF28FE41B35876324FDA0D /* SORelativeDateTransformer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E7ED8BFBADDEAEC0BCF88F26DAEAC1D5 /* SENSenseWiFiStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B3995F17CC1328A354F5B75E7EFA16 /* SENSenseWiFiStatus.m */; }; + E800CA2E7D4E047BF1534BF39FF753F4 /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = BE99E39937708AD868B1E6B6E35B34CE /* _FBSDKTemporaryErrorRecoveryAttempter.m */; }; + E8E0B5CE6CF85308FD171C983667DA27 /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0859ED35A3EA501812EF454D78D3CFA7 /* LineChartDataProvider.swift */; }; + E905651068E2352E1CE25ECD8F291943 /* LSNSURLSessionHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 801B69BCCE8BF7A61CE833C17D700356 /* LSNSURLSessionHook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E90665D6ED3975B80FDB4705774722D9 /* aeskey.c in Sources */ = {isa = PBXBuildFile; fileRef = E14536EB2479F6F6779015BAA6911527 /* aeskey.c */; }; + E90E0C1628AD91EFE6C0E2AB29335D51 /* ChartDataBaseFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775CC733D89E2F4D062E46C262AC9A61 /* ChartDataBaseFilter.swift */; }; + E94C3046759B58BE51D01F888615C710 /* FBSDKAccessTokenCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C5258EC223D5B5B93A3AAC25B2875954 /* FBSDKAccessTokenCache.m */; }; + E984BF50998CE72B59B23F2E53727ED6 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A00E473363BF939DEBB36321C927837D /* BubbleChartData.swift */; }; + E99105B015B27FF3ADEF1770E816775B /* SENSenseVoiceSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 4882D3EAB830C27ED2BA643A97F9A8E7 /* SENSenseVoiceSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E9D18989D2FAE7B47FF74FC49D380CB8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + EA210FCD97B7CB86E150F85CD833A100 /* BugsnagSink.h in Headers */ = {isa = PBXBuildFile; fileRef = FC2041DB3D4C8F0D9A7A8C6CEC0B653B /* BugsnagSink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA3168D188D3E47DAFAF028EAD911D2E /* FBSDKButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD7883B0017BEC47AB57158C1FA4F6A /* FBSDKButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA6DD5350665CA98DD08CFA8D9736DDC /* BFAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = 199EC598028F2B6B40C31E70E7A9D202 /* BFAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA7315BD16C07F01756A5FD91EB9C0D4 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 679FD495DB088FC7B13B0E45B95EDD43 /* CoreGraphics.framework */; }; + EA84841A80DF327B601675AFC6475984 /* FBSDKTriStateBOOL.m in Sources */ = {isa = PBXBuildFile; fileRef = C381CAF8DA86A54A7BF25FCE22E4A25E /* FBSDKTriStateBOOL.m */; }; EB238A3D3D4022AE04F900CF73D186CD /* Pods-SenseApp-RoomConditionsExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2428629412D16F2C0282266DF35B50CB /* Pods-SenseApp-RoomConditionsExtension-dummy.m */; }; - EB2BD84DDABF596882B8173C2F6D0F9B /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = D7A2F79250AEAC604564C721BB8B16B8 /* BFTaskCompletionSource.m */; }; - EB35B3D4A949594435E9EC449D457937 /* FBSDKSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 58277242E7C0A67915AE1FF58EA29256 /* FBSDKSettings.m */; }; - EB6AF014FDDB51A01222795D330D4985 /* FBSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C5161941D4B52D86CD0F226B120CEF6 /* FBSDKError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EB8777C294E76CDD31A25DFF0CDAC29D /* SENSenseWiFiStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = BE3281985C96F6D05CC3260FC5E4D36E /* SENSenseWiFiStatus.m */; }; - EBA997C21296B0A4A646E906D2B7EE1D /* KWNilMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = AE51716D452A7AA7CAF27A010B3B1B17 /* KWNilMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBCE449F12F7CFCDF892234FC2947AC4 /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 90496A03943A411ABC5742C7D97D4BFE /* pt.lproj */; }; - EC29120242DD201EDA7C5C63B26E6C01 /* SENCondition.m in Sources */ = {isa = PBXBuildFile; fileRef = 23EBF85C035E122F72215384D3EDCC46 /* SENCondition.m */; }; - EC6C65F976350467D08C28FE29128ACD /* KSZombie.m in Sources */ = {isa = PBXBuildFile; fileRef = DCE45307653E8DC485A6D201A40DE9AB /* KSZombie.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - EC757A70CBADDF2EB75A001CF8929E32 /* ChartSelectionDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FCDC1CDDD4B21C057D0DFCE9A1A67DF /* ChartSelectionDetail.swift */; }; - ECA509E9EC5D010D5C516D8B38DC2509 /* NALabelCell.h in Headers */ = {isa = PBXBuildFile; fileRef = B25E7DBAD27FA79D553B249898D1D102 /* NALabelCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECD13CF31DEC95A8F1090222B2B71DA4 /* FBSDKAccessTokenCacheV3_21.h in Headers */ = {isa = PBXBuildFile; fileRef = 06F4DF0AF3A045BAEAF5EC87EFF31E82 /* FBSDKAccessTokenCacheV3_21.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECF117A02A501D475427E013FAE38E3D /* DDAbstractDatabaseLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E9DB316F651364523CD50A74EE6F49A /* DDAbstractDatabaseLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - ECF1E648632ACC68990C0608BBCB1F56 /* FBSDKAppEventsStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DBF3FB68F28E2561850518033AA1CD2 /* FBSDKAppEventsStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED0201364AAD932430119877F56C66C1 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E5C58A7F6D21D353C7FD57B075F75561 /* AFHTTPSessionManager.m */; }; - ED23CA1178914677F667491BE25F536B /* FBSDKKeychainStoreViaBundleID.m in Sources */ = {isa = PBXBuildFile; fileRef = 301477D4BCABE9A2A0FBEBBEBC98542E /* FBSDKKeychainStoreViaBundleID.m */; }; - ED61D56FE03B8155899071ED1F481377 /* KSJSONCodec.c in Sources */ = {isa = PBXBuildFile; fileRef = AD9E0F75381358758A138816CE677450 /* KSJSONCodec.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - ED85FADAFE1812CE4498FC6B27FCA28D /* KWNotificationMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C4678787E1AB54ED9E5C916D5D2740C1 /* KWNotificationMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED933BC9533E673F59E4513A3BCD7434 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 9599EFC9C05837EDAD1594B8C76CB251 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE0E91927876601BA21B9833F95AE628 /* LSStubRequestDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = B50AA473C6B75880C16C9A5ED62CD985 /* LSStubRequestDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - EE38BA8F118D5CFF5232C4A1EEE30863 /* RLMOptionalBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 1115EC9B096C79695A87AB541442A2F4 /* RLMOptionalBase.h */; }; - EE3A6BF1C7372693E081BCB81133CAEC /* SVWebViewControllerActivityChrome.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BA1F5034D2497276F9AD4D4FE66BCD3 /* SVWebViewControllerActivityChrome.m */; }; - EE604C01AA31F890A779F1E80A96C81E /* FBSDKWebDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D5D8FE7FA4462E41204C6195011C640 /* FBSDKWebDialogView.m */; }; - EED538BBD20A819C860E967690D0E380 /* FBSDKUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = ECACDA06202D22EF9A33EF409AB8251B /* FBSDKUIUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF241C586E4512260C22CF33CDC0E990 /* SecureDFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F1366E53AEF4B25B11AFC54CF6B5562 /* SecureDFUServiceDelegate.swift */; }; - EF533B597E390016A2D127DB0BBD0B71 /* SENDeviceMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 4618E9C243127A44515E9922635D1D90 /* SENDeviceMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EF7DDBFF65C3BE5593CAB977147B48A3 /* NSInvocation+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4534E92144113514FF781D329C0DC14A /* NSInvocation+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EFC9F1D6B3DD028B7AD7C715D6B53A88 /* FBSDKLoginManagerLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 54A6B9865AB5B17EBFE21847F5885CF7 /* FBSDKLoginManagerLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F03D9B7BF02FE8125E59275ACC97766A /* FBSDKAudioResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A1C0CD2E9517CD6F383925189A9EEEF /* FBSDKAudioResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F076F9F2C35390D5A38D9B2F4F06A91A /* CGFloatType.h in Headers */ = {isa = PBXBuildFile; fileRef = F0025D66413864F415755CAA75F4C6D0 /* CGFloatType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0792934797C85C24F52316BBE96585A /* FBSDKAppLinkUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 258972CDDC074D01FE00281ABD84DBB8 /* FBSDKAppLinkUtility.m */; }; - F0F73F99ED6EC1E4627C4EDE96018916 /* NSError+SimpleConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD0BB8A35BC54B61F87561028EB4B6A /* NSError+SimpleConstructor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F14F3AB346A6BDAF832079CFF946030B /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D583BA6DB4261965F402C56C91B242AB /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F195B74C3BBF9090FF78E574C6585500 /* FBSDKCoreKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D13766CE4A4C8AA2B8336726CE3D0B8 /* FBSDKCoreKit-dummy.m */; }; - F199128201E885A1613AE1C924D6753D /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5FAA00ADDA0D7D963EA3CB511067BD6 /* SwiftVersion.swift */; }; - F1AAFAF4E5B885B67EFA7D951F88C30D /* KSSystemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = FA6FD443027BDABFA606A45A8C4CF004 /* KSSystemInfo.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F1C5CEA096E1F34F3470B219C779F7E4 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AB880A8C48AC159788588F671239917 /* AFURLRequestSerialization.m */; }; - F1E4683A53E9DB306E60AEB09B1AFDDF /* KWMatchVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E7989161CF752A49A85942E5EAD81C /* KWMatchVerifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F20B72C35290D28BCBA819B5925CE64D /* KWSuiteConfigurationBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BD0189544899A0ECC6922F98ABA4A58 /* KWSuiteConfigurationBase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F21BDC63818B6B1A1AA3FEFE70E6D53C /* FBSDKLoginKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8929DB04C153CA2EDDF309284261E0DF /* FBSDKLoginKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F22235CA3F96E281484F948F40D365A4 /* FBSDKServerConfigurationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B134D4C47EBA64C3E047D1BD2543C215 /* FBSDKServerConfigurationManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F22CFA8214C121BE925BAFE92B4999B4 /* KWBlockNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A37C4F1E9D00A3E5B7A2C278A69F5DA /* KWBlockNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F250286DBF28A92D5E8F9DE442DE2C9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021438A38FEF5D3419456723C651A751 /* Foundation.framework */; }; - F2529ED0C81CFF2FC0E7FFAF439B939C /* KWValue.m in Sources */ = {isa = PBXBuildFile; fileRef = DA46D3F27032D6EB1DB22E0B94CA9C13 /* KWValue.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F2934C6C97BC575EE4C41513606AC455 /* KSCrashAdvanced.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E994B030917EFFDD4EBA37B7647DBF /* KSCrashAdvanced.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F29E2AE18138C2FE113DF524CE58ACF9 /* FBSDKBridgeAPICrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = A348F93D5D6965A472DFD8814CBF646C /* FBSDKBridgeAPICrypto.m */; }; - F2E777DBBD942977B4AD8B5617E24727 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CBA54F2786BB648E5CE6D80BB38922C /* ILineScatterCandleRadarChartDataSet.swift */; }; - F2EAD75ED7536C0A1EE0BF5DAA2780C7 /* FBSDKConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BF71069AF0D88E560683A5F4DE8CA61 /* FBSDKConstants.m */; }; - F311953E5A0FE807A05B6199BD61FC5A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83A513B597AC9A1DF923AA9C3F84D698 /* XCTest.framework */; }; - F393FFC61210F84AC02EE77C8BA6B403 /* KWFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E8E343BD4901132D1662E1B71A5C8B /* KWFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3A7BF2690048AB357FE6D85F20D6CB9 /* SENSenseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F0FDA1AA40AEA0FA8464B667AFFBBD /* SENSenseManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3A9C5CC053F22739E58DCB755B43E17 /* RLMListBase.h in Headers */ = {isa = PBXBuildFile; fileRef = DDEF373FD2A99B534F6323C5074812F0 /* RLMListBase.h */; }; - F3EEDF387DD7FD2FB239A2B5B7490C59 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = EFA6FA1BF7F1C8C86B1EBD29F953DB25 /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3F4F0AA5E2CE4569BEF2386FB95ED10 /* FBSDKContainerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01027B38EAFB49B95055CA7BE10FCE12 /* FBSDKContainerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F42F3CDEE24F361D4CEA194BFC0B0DB3 /* SVModalWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A7AC6B4D48D03E7C9D2029EB53778FE /* SVModalWebViewController.m */; }; - F44183DEC8336B0AED57E5743197C906 /* KWExample.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CEDB82BE87A9DE947ADCBB986F7F0E2 /* KWExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4EEA2EEF9D7A3E19EA43492CBC032B8 /* SENAPIInsight.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A4E7A2C25B2FE0BF15CA953EC9EB0B /* SENAPIInsight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4F407EE6E9F0556DFB3A120FDE31BBC /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 6697D0A95E74EF1100F11DFA77000401 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F55C636D464A48D73748E0071C441853 /* FBSDKProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D5A05DFE7030C8802AE042A9DEDB65F /* FBSDKProfile.m */; }; - F5FC1FDC696231EC114B320DAB8C8C95 /* LegacyDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5DB9E58AEA5FCDCFAA3BF3E583A2C33 /* LegacyDFUPeripheral.swift */; }; - F61FBB6AEED4A3EC3943EAE1A1F03FC4 /* SVModalWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C757146847A7817E5D77F11908B3B35 /* SVModalWebViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F62395FD2BF691C51FFA1B2E624A2DA6 /* FBSDKServerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B4628CE64078C60122F7FDF0480B684 /* FBSDKServerConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F62B55C3FC88F669D83A26BEF972B336 /* SecureDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263B6E237A87CBC9668E1399050AE914 /* SecureDFUService.swift */; }; - F6552E1AE712A5072FF7EF6FB5E1F6A7 /* SENAPIExpansion.m in Sources */ = {isa = PBXBuildFile; fileRef = 27222261D0E6C37F341D434014800C9F /* SENAPIExpansion.m */; }; - F698599D32C1A67CCB07067E4C3B4E55 /* SENAlarm.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F20E287244779869881887C7A8DF6DB /* SENAlarm.m */; }; - F6B8265F8CCC9B666D46903E29E6DA74 /* SENPairedDevices.h in Headers */ = {isa = PBXBuildFile; fileRef = E2031D03983653A2B934573E0F177E75 /* SENPairedDevices.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F72EA75FDADEB1C175EC148BBC589137 /* RealmBarData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DB036E652081BB062C18E5EBAE5F81 /* RealmBarData.swift */; }; - F75B6E5B00A89A6A0B97DD35E7B068C2 /* FBSDKBridgeAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 74FFE9AD85BBC0E98D59E0361ABFBA5B /* FBSDKBridgeAPIRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F77F15BF7E0E4761E06CA84166ACEFA5 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC216A79855FDEFB694CBF5E8E9F13F /* FBSDKGraphErrorRecoveryProcessor.m */; }; - F790147DDDA2D9A95785C959760D8B67 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7FF401A31973A2630448A9C6288B0A /* ScatterChartRenderer.swift */; }; - F7B99668E629CA7F5F618FEBF36C43F2 /* KWExistVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = FB68D2A2826E6E9A98D2D20CBF950058 /* KWExistVerifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7C00878EDCB31AFF4FE37E07699BAA3 /* SENInsight.h in Headers */ = {isa = PBXBuildFile; fileRef = ED2BAE3CD8E94C2AD4FE91FB1E631384 /* SENInsight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F81690FB8491769AAEFEEBF95919329F /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E15915B88DF249C3B3FB5DB8F0F4FAA9 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8436C0A96E2FDE1FF78658B821A7849 /* RealmCandleData.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6D43BD32B1717C089D31AE97657B1D /* RealmCandleData.swift */; }; - F854D78823AD782877CA144B34F8CDB6 /* SENTimeline.h in Headers */ = {isa = PBXBuildFile; fileRef = E0A103BC050150F23A7CD9C49433C5C1 /* SENTimeline.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F862ECB9E8F53D225F662F136AF2E37A /* Nocilla-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F58548DE3927A52C154C905DA0E099 /* Nocilla-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9156DAF77D388C5458B8816B07EC8A0 /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1ABDAF6FB72664333B8D47C4AF20DD8 /* ScatterChartData.swift */; }; - F9557CEA0915AD26C0F1251A0A382065 /* ChartXAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 679CB3A1EE0425F819F8549E0F44CCE8 /* ChartXAxisRenderer.swift */; }; - F95FC2657C197CDC98BD5B9842B88B72 /* LSHTTPBody.h in Headers */ = {isa = PBXBuildFile; fileRef = A87C8B6885A8911D7F01568BCC944F75 /* LSHTTPBody.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F96395C71A0A695B3FC649C9655FDAF8 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 398DD7E08BE607EACECBD0E8D169569E /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F963DE930A5259A43D3F5ADD45C09FC0 /* FBSDKAccessTokenCacheV4.m in Sources */ = {isa = PBXBuildFile; fileRef = 93FDD84DFD8B5056C0534DAE22AC8FAD /* FBSDKAccessTokenCacheV4.m */; }; - F98EFA8A4E2A5BFA9884A96739B48969 /* KWAny.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B44503BE91EBBA82B7213407C04BC84 /* KWAny.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9E8B2AF3D565EE6C45B2F806EF5D168 /* KWSymbolicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4620A2EFECC91D5B2BC57408ACB88FF3 /* KWSymbolicator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - FA14905A3A5F70806B3F522E70A2CF69 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF2642DBB345C190B7CE7BC91B8F21E /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA4CE0E7364493E53A58DEBAA07EC2E1 /* LGBluetooth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 577A300F0C8F1B83A2303FEC0FA26A60 /* LGBluetooth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA873C6D6E350942F695DBC03314ECF8 /* SenseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 79256F8A146F1F13059B89A99BBD914D /* SenseKit-dummy.m */; }; - FAAB761209DBEC677FCE1E9657F8B468 /* SENAPISpeech.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BB4458ED22BE2B71962676406F0B196 /* SENAPISpeech.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FAE4A46A8E3651C9ABDB15DD35637338 /* KSCrashDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDC7A36AA1912CAB21AF81B1B666E06 /* KSCrashDoctor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - FB24E88B411EDA52814119D3945FF981 /* FBSDKLoginConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A3772A52A46D64EF0AEFC337494A854 /* FBSDKLoginConstants.m */; }; - FB3E0864D1F529186BE54A1A2EFA346D /* SENAPIDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 66B12314E4FA6036C8B3CAF26A5C4099 /* SENAPIDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FBAF891B24680915BDFE0BEC89C87BAF /* NSString+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D38765DAABD4F915E1A8A14DA7DAC1A /* NSString+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - FBEA48B7B4530F694D2D2B500832F665 /* KWSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = C5A4255923576850B742DA28725168D4 /* KWSpec.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - FBF64CB07512F0DC7B4B419FE6030429 /* Charts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 96689834A1656B634865B9D2B6FE3B29 /* Charts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FC00C3E65C6766A899F7B5A79A5E0FB2 /* LSHTTPRequestDiff.h in Headers */ = {isa = PBXBuildFile; fileRef = C061FA8DD99967961A9B3AF55D8F0905 /* LSHTTPRequestDiff.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FC051E7892E5FD3006CE7ED4279BA0CF /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0DB22B5F8DE0AB034FC6711F7F6937BE /* es.lproj */; }; - FC071D04F927821D6CAE049FA1365D39 /* DDLegacyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F29DD49E47FC8F794453A1D1988D3D /* DDLegacyMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FC2EBC676798E5B154594ADE3D7E1B68 /* ChartViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62CAB9A269FD4FC7C2CCDD51BCE98011 /* ChartViewPortHandler.swift */; }; - FCB398241D7EDEDBFC27A8F5D4B76120 /* KWBeIdenticalToMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC699492C1CC80E35AF85EC1CC5A706 /* KWBeIdenticalToMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FCE9EDD9C96EEF1CBEF907C002FEC776 /* RLMRealm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F21E7E32B4472CA43D29215E48C84B67 /* RLMRealm.h */; }; - FD98F87F77473566FDEA32FDB1640474 /* SENAPITimeline.m in Sources */ = {isa = PBXBuildFile; fileRef = 0450A8F860D285BBFD4B4B6A4A4D23F5 /* SENAPITimeline.m */; }; - FE45132FF649E2A6AC38613B8E3210BB /* SENFeatures.m in Sources */ = {isa = PBXBuildFile; fileRef = D067724BE34717E0632F22D33A6D26DB /* SENFeatures.m */; }; - FE6155115B331CF27F3B2BEB7DAF48EF /* KSCrashSentry_Deadlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B75AADA89DE37AAA46AA2C368F36510 /* KSCrashSentry_Deadlock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - FEAC3CDAACC4D65B85BA3858E0C442BC /* RLMRealmConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = E7404CD34249A0353A4078A868E7C182 /* RLMRealmConfiguration.h */; }; - FF5AF3E931DD3C0EBFB49A71F1336B55 /* FBSDKGraphRequestConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = C2E64F1C39347C677FCB624E77AF5192 /* FBSDKGraphRequestConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF758988BEF297177291598304936EBE /* ChartViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B709D0F19DE9F3EFF0B2A27ECA30D45 /* ChartViewPortJob.swift */; }; - FFBF11CCD188ED3B11EC391033E52426 /* FBSDKGraphRequestDataAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 6934C23F14EA87A17610D030ED823B49 /* FBSDKGraphRequestDataAttachment.m */; }; - FFCBE742A096AFB760CD15C3A48365DD /* list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CFB6A8F6F998C9F78344D5A9D118B7C /* list.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"0.103.2\"' -D__ASSERTMACROS__"; }; }; + EB2BD84DDABF596882B8173C2F6D0F9B /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C1A5E3BC30B7CD8AD61C82BD54FE3918 /* BFTaskCompletionSource.m */; }; + EB35B3D4A949594435E9EC449D457937 /* FBSDKSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FE76DCC04B3C571E9D847F7E7EE7276 /* FBSDKSettings.m */; }; + EB6AF014FDDB51A01222795D330D4985 /* FBSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = B3899D8CB902FA62222DC77906DDCCD4 /* FBSDKError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBA997C21296B0A4A646E906D2B7EE1D /* KWNilMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AA751B34FB400C5B546D77E4091BE0A /* KWNilMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC09522A281E73622A80EEAA1ABB2EE4 /* SVWebViewControllerNext@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 296F68D613A9301963A54573178CF63B /* SVWebViewControllerNext@2x.png */; }; + EC69681E12EA32A99B328E9761E0E10B /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90C9EF713486C5E3D09C401BD90B8294 /* PieRadarChartViewBase.swift */; }; + EC6C65F976350467D08C28FE29128ACD /* KSZombie.m in Sources */ = {isa = PBXBuildFile; fileRef = F856F12A54EB6C3CB356E916B1605310 /* KSZombie.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + ECA509E9EC5D010D5C516D8B38DC2509 /* NALabelCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 57FE76F8C1B919EDF7834D12A9E28037 /* NALabelCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ECD13CF31DEC95A8F1090222B2B71DA4 /* FBSDKAccessTokenCacheV3_21.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B9DF7AF156E9282089ED2E5493D517 /* FBSDKAccessTokenCacheV3_21.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ECF117A02A501D475427E013FAE38E3D /* DDAbstractDatabaseLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F3E49F8020BE6057ECD9C892FD27F50 /* DDAbstractDatabaseLogger.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + ECF1E648632ACC68990C0608BBCB1F56 /* FBSDKAppEventsStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C5D31ECF9061C083E82D38A5BD686630 /* FBSDKAppEventsStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED0201364AAD932430119877F56C66C1 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C835FC7E70537FD8FBF2EE51F14397E /* AFHTTPSessionManager.m */; }; + ED1F101F3F544110F4F113EB58A5BAA0 /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B72C4ACA101B02455B5CCF182A5A5A83 /* CandleStickChartView.swift */; }; + ED23CA1178914677F667491BE25F536B /* FBSDKKeychainStoreViaBundleID.m in Sources */ = {isa = PBXBuildFile; fileRef = 0259857B668118533EE9E37B60658541 /* FBSDKKeychainStoreViaBundleID.m */; }; + ED38CE334C2B80DAB7A4228E12E156AE /* SENSound.h in Headers */ = {isa = PBXBuildFile; fileRef = 09570FC8499F25FC15C64F62F9D749FB /* SENSound.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED61D56FE03B8155899071ED1F481377 /* KSJSONCodec.c in Sources */ = {isa = PBXBuildFile; fileRef = BBA59FECB49246815EFACF0CB5B2016A /* KSJSONCodec.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + ED717C41C3753C0090292B83FC3479CC /* SENDeviceMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = FB027B3A4B2544691F64969AE6D79075 /* SENDeviceMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED85FADAFE1812CE4498FC6B27FCA28D /* KWNotificationMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 397FFCA503522A78D78E14F3B58FF0BC /* KWNotificationMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED933BC9533E673F59E4513A3BCD7434 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 117ECB5E58F2855177D4DC718148D718 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE0E91927876601BA21B9833F95AE628 /* LSStubRequestDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 363BD4FFC3C021BD93FF1FB3FD4D310D /* LSStubRequestDSL.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + EE604C01AA31F890A779F1E80A96C81E /* FBSDKWebDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FF66C331A4B071035D0EF7544480956 /* FBSDKWebDialogView.m */; }; + EED14D1532F4DC63F6282CA052D80E17 /* SENDevicePairingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE5145F8BBD2B5DA3EA12FF7DFE61C5 /* SENDevicePairingInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EED538BBD20A819C860E967690D0E380 /* FBSDKUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D33829F632C7CADB7502D4A6043BBF0 /* FBSDKUIUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF241C586E4512260C22CF33CDC0E990 /* SecureDFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C332DE91E9235F317E87D6EA66629FA5 /* SecureDFUServiceDelegate.swift */; }; + EF2CD25D2B81DF04BE71B293DC433BBF /* SENAnswer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CCD672DDBDFB0746DF5FA22F86B0A1F /* SENAnswer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF7DDBFF65C3BE5593CAB977147B48A3 /* NSInvocation+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FD2BFD4021153753ACACBB5028DDCCB3 /* NSInvocation+KiwiAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EFC9F1D6B3DD028B7AD7C715D6B53A88 /* FBSDKLoginManagerLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F7A1B6192BD03B9F76426FE53E690DF /* FBSDKLoginManagerLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F03D9B7BF02FE8125E59275ACC97766A /* FBSDKAudioResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5583FE08968E6F67A39529F00C89AB8F /* FBSDKAudioResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F076F9F2C35390D5A38D9B2F4F06A91A /* CGFloatType.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A5BCD98AB673AD8E1E1CE44FD2E84A5 /* CGFloatType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0792934797C85C24F52316BBE96585A /* FBSDKAppLinkUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 542865803CD6FA7A085599D45EC70088 /* FBSDKAppLinkUtility.m */; }; + F0F73F99ED6EC1E4627C4EDE96018916 /* NSError+SimpleConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = CE2D2CB20706824F0D67B9118408F871 /* NSError+SimpleConstructor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F14F3AB346A6BDAF832079CFF946030B /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AE369D6F2CD413C7F0BF0BC3D23780E /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F195B74C3BBF9090FF78E574C6585500 /* FBSDKCoreKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AD0C0D6A0DE992C9F184FEDCA3E209A0 /* FBSDKCoreKit-dummy.m */; }; + F1AAFAF4E5B885B67EFA7D951F88C30D /* KSSystemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F923AAB0BBDFE200C428565AB663175 /* KSSystemInfo.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F1C5CEA096E1F34F3470B219C779F7E4 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 27F5BB66498F247594D268A221C78808 /* AFURLRequestSerialization.m */; }; + F1E4683A53E9DB306E60AEB09B1AFDDF /* KWMatchVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 06A60658B80E97003F81B7536AFFA818 /* KWMatchVerifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F20574500AF3A593EF13831B2B650AEA /* SVWebViewControllerNext.png in Resources */ = {isa = PBXBuildFile; fileRef = DE5BE835291F238ABF69F6C40F4F277D /* SVWebViewControllerNext.png */; }; + F20B72C35290D28BCBA819B5925CE64D /* KWSuiteConfigurationBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 586B161D7F124B1832EAC22D38D6AE4E /* KWSuiteConfigurationBase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F21BDC63818B6B1A1AA3FEFE70E6D53C /* FBSDKLoginKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BAE7F11897517987478A031E6CC725B /* FBSDKLoginKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F22235CA3F96E281484F948F40D365A4 /* FBSDKServerConfigurationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE5052156B42AF52E4EED57B9BBB15A /* FBSDKServerConfigurationManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F22CFA8214C121BE925BAFE92B4999B4 /* KWBlockNode.m in Sources */ = {isa = PBXBuildFile; fileRef = F03D1FC6902C2FD632405F8ABD2002D8 /* KWBlockNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F247D6D642B2895C92A753D1537CBA9B /* SVModalWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DD50B016337FED19D37D9B23CBEB93 /* SVModalWebViewController.m */; }; + F250286DBF28A92D5E8F9DE442DE2C9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */; }; + F2529ED0C81CFF2FC0E7FFAF439B939C /* KWValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 65711872A53C43C694E444E338CE8CD6 /* KWValue.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F2934C6C97BC575EE4C41513606AC455 /* KSCrashAdvanced.h in Headers */ = {isa = PBXBuildFile; fileRef = F85F57A36107073A3A0B2D3EE09B305B /* KSCrashAdvanced.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F29E2AE18138C2FE113DF524CE58ACF9 /* FBSDKBridgeAPICrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FE310CC0A35048AB1D02B26B9D6EBC /* FBSDKBridgeAPICrypto.m */; }; + F2EAD75ED7536C0A1EE0BF5DAA2780C7 /* FBSDKConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7F4A4F55D1D9C6C5EE271DBEB194E5 /* FBSDKConstants.m */; }; + F311953E5A0FE807A05B6199BD61FC5A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A32FE458FADB3A745044F88FA78C77CF /* XCTest.framework */; }; + F354575E5BDE93238A2551B2F086FAA0 /* ChartFill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 701ED8A98D736C0AC5D16EC63EAFED59 /* ChartFill.swift */; }; + F35B7CC135DD93D84789E4AB0AF200CC /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46BFB457414BD79E1049A8F9FB161065 /* RadarChartData.swift */; }; + F393FFC61210F84AC02EE77C8BA6B403 /* KWFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D3826F75A050FDDD99E2AA1026D23A7 /* KWFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3EEDF387DD7FD2FB239A2B5B7490C59 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8876B15AC282A70BF68402C49803C7C0 /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F4F0AA5E2CE4569BEF2386FB95ED10 /* FBSDKContainerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A264FAB216C8E49BEC23000BE80861DB /* FBSDKContainerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F44183DEC8336B0AED57E5743197C906 /* KWExample.h in Headers */ = {isa = PBXBuildFile; fileRef = 48152DCAD62AEB3D67FB32C8CB5CBCD2 /* KWExample.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4F407EE6E9F0556DFB3A120FDE31BBC /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A0CA5AADF122A7FA4BFD04381253475E /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F55C636D464A48D73748E0071C441853 /* FBSDKProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = FF8110F5690424A120910C2B1D5E2A73 /* FBSDKProfile.m */; }; + F56CC71AA185739207BD822B756D2C45 /* SENExpansion.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F86BB5D6B3D572BCC6AEB1536F7536F /* SENExpansion.m */; }; + F5FC1FDC696231EC114B320DAB8C8C95 /* LegacyDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D319E44A49DDA87FC884541388E515E /* LegacyDFUPeripheral.swift */; }; + F608C920A45581DAA235EC62E1004054 /* SENTrends.m in Sources */ = {isa = PBXBuildFile; fileRef = 12C118E5E3E39A6631796F642CCA6335 /* SENTrends.m */; }; + F61B00FDC506324D017BE512D61C44A1 /* SENAPISupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D8C6EBA727E624BFF2C67DD2660C94 /* SENAPISupport.m */; }; + F62395FD2BF691C51FFA1B2E624A2DA6 /* FBSDKServerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BC0C583A4CD135ED0E927C4103D1F73 /* FBSDKServerConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F62B55C3FC88F669D83A26BEF972B336 /* SecureDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF18C63133667E3BBFA83A1BF47594C /* SecureDFUService.swift */; }; + F75B6E5B00A89A6A0B97DD35E7B068C2 /* FBSDKBridgeAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A904440301767F48C58C4FC9046C987A /* FBSDKBridgeAPIRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F77F15BF7E0E4761E06CA84166ACEFA5 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = FA2FB92C26F66DFBC177BEAF5ABD99F2 /* FBSDKGraphErrorRecoveryProcessor.m */; }; + F7B99668E629CA7F5F618FEBF36C43F2 /* KWExistVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 03A595AC6DAD1A9EC3A9C7046FE873BB /* KWExistVerifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F81690FB8491769AAEFEEBF95919329F /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 38514F6F71F64477E4BF179360972222 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F862ECB9E8F53D225F662F136AF2E37A /* Nocilla-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 447AF55543EA9BBE3D11EFFAEDE17372 /* Nocilla-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F8C277D5FA2B0EE214251AA827361AD5 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3883A07175AAC39A2E7F8985E56293C3 /* HorizontalBarChartView.swift */; }; + F92EDBFB60DE5B0DCBC3C9AC4961DD17 /* SENInsight.m in Sources */ = {isa = PBXBuildFile; fileRef = B847424FD83034868397BF616422582F /* SENInsight.m */; }; + F9349EE3BB9B604B9623F194ACD7582B /* UICountingLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 59BBACBE70BDA52BFDDDA5FBDFCA0FA2 /* UICountingLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F95FC2657C197CDC98BD5B9842B88B72 /* LSHTTPBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 545AF44DF7365757E250BD89EF6D321E /* LSHTTPBody.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F96395C71A0A695B3FC649C9655FDAF8 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = D8C5D5E6414EC2370A123B21C80572F8 /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F963DE930A5259A43D3F5ADD45C09FC0 /* FBSDKAccessTokenCacheV4.m in Sources */ = {isa = PBXBuildFile; fileRef = 562B728D03EB20E8CEE01043B76EF472 /* FBSDKAccessTokenCacheV4.m */; }; + F98EFA8A4E2A5BFA9884A96739B48969 /* KWAny.h in Headers */ = {isa = PBXBuildFile; fileRef = 956D813AE504B7F67A87FDB13C17F9B1 /* KWAny.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F9E8B2AF3D565EE6C45B2F806EF5D168 /* KWSymbolicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 65BE41455511744E43181C0589A265AF /* KWSymbolicator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FA14905A3A5F70806B3F522E70A2CF69 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = F8BC693527FD08C9A8FBF3C0079CA9D1 /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA4CE0E7364493E53A58DEBAA07EC2E1 /* LGBluetooth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B09019AD5CD56C40A9347D137ACA8FA2 /* LGBluetooth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA8264D66BA4B474492FC6E2B08BEC45 /* SENSleepSoundStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A275D2A2635E9FFECD76DF7D8FBEDBA /* SENSleepSoundStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FAE4A46A8E3651C9ABDB15DD35637338 /* KSCrashDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = A01EEF23BE949E270CA6F6F31DA4D5C1 /* KSCrashDoctor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FB24E88B411EDA52814119D3945FF981 /* FBSDKLoginConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F533FAAE7403F666C967A6DA59CF6642 /* FBSDKLoginConstants.m */; }; + FBAF891B24680915BDFE0BEC89C87BAF /* NSString+Matcheable.m in Sources */ = {isa = PBXBuildFile; fileRef = 69C14FC0724F35141F62185ECAB1B686 /* NSString+Matcheable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FBEA48B7B4530F694D2D2B500832F665 /* KWSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F900352B0F5A4653207338C819BF803 /* KWSpec.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FC00C3E65C6766A899F7B5A79A5E0FB2 /* LSHTTPRequestDiff.h in Headers */ = {isa = PBXBuildFile; fileRef = D82D1C78F053951B1893D8F3264AFA20 /* LSHTTPRequestDiff.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC071D04F927821D6CAE049FA1365D39 /* DDLegacyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = B48F0F4869C522556C265F7C4D5ADDFC /* DDLegacyMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FCB398241D7EDEDBFC27A8F5D4B76120 /* KWBeIdenticalToMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 00D01699204800B0583662DE1EFC5842 /* KWBeIdenticalToMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD185A0FF8598808DEE11C4933B0B76A /* BLE.h in Headers */ = {isa = PBXBuildFile; fileRef = F959A2A7FF2888E35438C56D576A316F /* BLE.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD27E6797D2A872D927E32E41680C06D /* ChartXAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0838AA7D610E547598C73534362C2FB /* ChartXAxisValueFormatter.swift */; }; + FD92164449F91940A494D58E186E27F2 /* SENAppUnreadStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AFCE3AECEE7DADEC095A5319B3ACA10 /* SENAppUnreadStats.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FDF1DA24DD6C7E6A9D6DEA04C3D50C2E /* SENSleepPillManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3778014587015543B9683F038960CD39 /* SENSleepPillManager.m */; }; + FE0D5DB6E2D65952A03F2F165D9E4565 /* SENLocalPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 2757CFB5CBAA4B88872867C2C7B06649 /* SENLocalPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE6155115B331CF27F3B2BEB7DAF48EF /* KSCrashSentry_Deadlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 84675832C6F2CBB629CD9389FA681AC6 /* KSCrashSentry_Deadlock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FE8174F2DEF60DC90811B7104D9B0868 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66CE9739342D2744EC6F55CFB0BE9629 /* LineChartDataSet.swift */; }; + FF1F14EB68DD3A2C6559B610815F56FA /* SENRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F94C26FC04F2E72B6A42B1D458F101 /* SENRemoteImage.m */; }; + FF5AF3E931DD3C0EBFB49A71F1336B55 /* FBSDKGraphRequestConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 6417190502C8B65AF0EC31F1D132CED1 /* FBSDKGraphRequestConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFBF11CCD188ED3B11EC391033E52426 /* FBSDKGraphRequestDataAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E89E71C33F8F68A84C745883AD83DAE /* FBSDKGraphRequestDataAttachment.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0621D29CB59B0803A51553D2BD0FF4A3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = ACC2EB3A7DE1ACA36F11D6CA8488A964; - remoteInfo = UICountingLabel; - }; 078C5EA3947638CF7E839563A4FFCF7C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -1402,13 +1248,6 @@ remoteGlobalIDString = 730EF7B05CE1CB004A9A126445D48E56; remoteInfo = CGFloatType; }; - 0FBB708263645AE5DC799EA444E9435E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; - remoteInfo = iOSDFULibrary; - }; 11A87C9DD9F665C26FF49A76C5EFF105 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -1423,69 +1262,55 @@ remoteGlobalIDString = 5EA3D107E3080517B451F7519F5E405F; remoteInfo = Zip; }; - 180EF2822B6357137016449073B1BFDC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = DDBA9850F8AEC97961C9DE92AE2DC9D2; - remoteInfo = FBSDKCoreKit; - }; - 24DA3E16ADB0888A19F4F4D7A65145B3 /* PBXContainerItemProxy */ = { + 17B41D8093684024E29EDFE3FB9972E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E441A490F40188C03703E83906EF2B63; - remoteInfo = FBSDKLoginKit; + remoteGlobalIDString = 81DA8EB8F3108C6E4CE73E356C3DFF8E; + remoteInfo = FXKeychain; }; - 29E35C0A20658032DF967534802D0F9B /* PBXContainerItemProxy */ = { + 1C7A63A5625DCC90A448891161B8E396 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 80DAA5388079E5D54703FD0568B03AA1; - remoteInfo = SORelativeDateTransformer; + remoteGlobalIDString = ACBE2D2764258B455DA501C193F6C25C; + remoteInfo = Charts; }; - 2D5F12534D34E7E79FFE24C73883B3F6 /* PBXContainerItemProxy */ = { + 1E61F5C649334F93388E49F2EC5D548A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = EE2F101D8B2CC64C1B1DF5F4F855C811; - remoteInfo = Bugsnag; + remoteGlobalIDString = E441A490F40188C03703E83906EF2B63; + remoteInfo = FBSDKLoginKit; }; - 35AF597F5BAD02B750B69CB42CB2DBFD /* PBXContainerItemProxy */ = { + 250E48B6FAD4F87F648AFD8B562C3CCC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AEF700BE3EA90D15DD0835283F4FE074; - remoteInfo = Realm; + remoteGlobalIDString = 180C74C9AD29DA8202520CCB38154CEB; + remoteInfo = Bolts; }; - 4381ABE95FB1250D7047B4CEA63330D4 /* PBXContainerItemProxy */ = { + 29E35C0A20658032DF967534802D0F9B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 8E62987DA364AB3DEC75EE0AADC0C3C2; - remoteInfo = "NSJSONSerialization-NSNullRemoval"; + remoteGlobalIDString = 80DAA5388079E5D54703FD0568B03AA1; + remoteInfo = SORelativeDateTransformer; }; - 49DB740B58032D567BD47AC7FB0B9605 /* PBXContainerItemProxy */ = { + 2B9AA2802E0118FFA1B1E6246A616138 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 43465475F37EC62ADE3092ED068C504C; - remoteInfo = CocoaLumberjack; + remoteGlobalIDString = 5EA3D107E3080517B451F7519F5E405F; + remoteInfo = Zip; }; - 4C0C3769DC53044F516798A84442456A /* PBXContainerItemProxy */ = { + 2FCCDC9BC29E5F680E3BB2BF41884650 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9CAA963C631202F8930C0D0E26A8CDCC; + remoteGlobalIDString = 7C6BF3ECBCC956A018BE1C7BCFE8E9E5; remoteInfo = SVWebViewController; }; - 4DC9339DA656B9C48B53738A4B5BEE97 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 44171DDB1F024801E01F769FA8AD75E1; - remoteInfo = NAPickerView; - }; 4F4459F277522690E63EFD1329CECEB9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -1500,28 +1325,14 @@ remoteGlobalIDString = 5EA3D107E3080517B451F7519F5E405F; remoteInfo = Zip; }; - 574A5E49B3EAF969684619A68F3DA3A3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 55BC9D00E350D5F95374448845486B0C; - remoteInfo = RealmSwift; - }; - 57D2DF3DC2CD94AD6A5C6AFB93C63A90 /* PBXContainerItemProxy */ = { + 51C0A5C06C7172958A7A97FB3A74AD24 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 0E2DD52E665500ADD41D73D15C008781; remoteInfo = SHSProtoBuf; }; - 5ABBD55F95F55BB4E3CDC594CDD0B30E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 57DB68A490C560AC049B0DE8B33F6B70; - remoteInfo = LGBluetooth; - }; - 5B8C42DFA5490C175A54E74B8744CB89 /* PBXContainerItemProxy */ = { + 57D2DF3DC2CD94AD6A5C6AFB93C63A90 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; @@ -1535,13 +1346,6 @@ remoteGlobalIDString = 5EA3D107E3080517B451F7519F5E405F; remoteInfo = Zip; }; - 62AFB02BC9B665DB0F36C920573C02D3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 180C74C9AD29DA8202520CCB38154CEB; - remoteInfo = Bolts; - }; 63043B2EADA09C39B34C41FE0778926C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -1556,26 +1360,26 @@ remoteGlobalIDString = E8EE80E8AA1F3FEE99B108EF5EE36D11; remoteInfo = AFNetworking; }; - 6CD943302997DD9408423751923E8A3C /* PBXContainerItemProxy */ = { + 6C505A3628B335DC1A3D55616AC9CAD2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = B8A5CE68297837372BF12AC806EAAB35; - remoteInfo = Charts; + remoteGlobalIDString = 80DAA5388079E5D54703FD0568B03AA1; + remoteInfo = SORelativeDateTransformer; }; - 6F95074878200AE03C9250922FF50F74 /* PBXContainerItemProxy */ = { + 6D09B7C63FA8CDC0E4FD5DDB0E8E849F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 81DA8EB8F3108C6E4CE73E356C3DFF8E; - remoteInfo = FXKeychain; + remoteGlobalIDString = AC395942252777533D3F18E430F23762; + remoteInfo = AttributedMarkdown; }; - 727DA0893035F035A206F611950F1601 /* PBXContainerItemProxy */ = { + 6F95074878200AE03C9250922FF50F74 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E8EE80E8AA1F3FEE99B108EF5EE36D11; - remoteInfo = AFNetworking; + remoteGlobalIDString = 81DA8EB8F3108C6E4CE73E356C3DFF8E; + remoteInfo = FXKeychain; }; 768B116E28C0562CD2F86160B5A6300C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1598,19 +1402,19 @@ remoteGlobalIDString = 57DB68A490C560AC049B0DE8B33F6B70; remoteInfo = LGBluetooth; }; - 7D785E0A609DF98935F6BA53A26A7293 /* PBXContainerItemProxy */ = { + 7B82B1C2F3644AD6DE5BF2A8F43D528F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 43465475F37EC62ADE3092ED068C504C; - remoteInfo = CocoaLumberjack; + remoteGlobalIDString = 57DB68A490C560AC049B0DE8B33F6B70; + remoteInfo = LGBluetooth; }; - 7F80F639E042F469D3D0824B721E2FA3 /* PBXContainerItemProxy */ = { + 7D785E0A609DF98935F6BA53A26A7293 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D4366019FDFD4968B0EE7D6057DFCEF3; - remoteInfo = Analytics; + remoteGlobalIDString = 43465475F37EC62ADE3092ED068C504C; + remoteInfo = CocoaLumberjack; }; 7FF8923DCB7379A2BEF3C700990B59CD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1619,12 +1423,12 @@ remoteGlobalIDString = 180C74C9AD29DA8202520CCB38154CEB; remoteInfo = Bolts; }; - 86C56FB6510D9F965E4005A3338653F1 /* PBXContainerItemProxy */ = { + 8307A453AB36CA596EC3DD7571241582 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 55BC9D00E350D5F95374448845486B0C; - remoteInfo = RealmSwift; + remoteGlobalIDString = 730EF7B05CE1CB004A9A126445D48E56; + remoteInfo = CGFloatType; }; 8727DA2F94DA1DDC45432D3A80A18C8E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1633,6 +1437,13 @@ remoteGlobalIDString = 730EF7B05CE1CB004A9A126445D48E56; remoteInfo = CGFloatType; }; + 876698420F8167CD40FE01B05B89A530 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5AF841D1919CF5A0DE7EBBE1D9EE5E3E; + remoteInfo = UICountingLabel; + }; 8C328A343A680AA955587AA47E05CEE3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -1640,26 +1451,33 @@ remoteGlobalIDString = 43465475F37EC62ADE3092ED068C504C; remoteInfo = CocoaLumberjack; }; - 8D02AC6B67BABE44831638DD82766FD1 /* PBXContainerItemProxy */ = { + 8DEA7846C7797F3B41DB6A8AB6286DE5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 5EA3D107E3080517B451F7519F5E405F; - remoteInfo = Zip; + remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; + remoteInfo = iOSDFULibrary; }; - 91A6A57DC9870FD233C443E2BC7A7973 /* PBXContainerItemProxy */ = { + 8E08945BE5C9DA37EB7841487078B607 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; - remoteInfo = iOSDFULibrary; + remoteGlobalIDString = F3A20E6B58DE3EDAD15785CDFC1F6E3D; + remoteInfo = SenseKit; }; - 9368011C05B3C31A871E6CD56B0E32E5 /* PBXContainerItemProxy */ = { + 91881BB5EC0F3B8D09EE29296E35D50E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AC395942252777533D3F18E430F23762; - remoteInfo = AttributedMarkdown; + remoteGlobalIDString = E8EE80E8AA1F3FEE99B108EF5EE36D11; + remoteInfo = AFNetworking; + }; + 91A6A57DC9870FD233C443E2BC7A7973 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; + remoteInfo = iOSDFULibrary; }; 95997191175911B3FE4490ED3E9193A1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1703,33 +1521,26 @@ remoteGlobalIDString = 81DA8EB8F3108C6E4CE73E356C3DFF8E; remoteInfo = FXKeychain; }; - A0B5406AD465ECAB33920BB595A1AC10 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = AEF700BE3EA90D15DD0835283F4FE074; - remoteInfo = Realm; - }; - A5747A4D3230261524CE5FAC8DA874E3 /* PBXContainerItemProxy */ = { + B34D279F816DB787B53D78464095F189 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 730EF7B05CE1CB004A9A126445D48E56; - remoteInfo = CGFloatType; + remoteGlobalIDString = 9F216D3986D254F5B2BC8865A910D7DD; + remoteInfo = Kiwi; }; - AA75CB0E5D3A12D3BF5DDE3E27B6599C /* PBXContainerItemProxy */ = { + B5A1509907C61A762984CE047043CA70 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E3A76DDBE03839E9C02B77A70E4A98A6; - remoteInfo = UIImageEffects; + remoteGlobalIDString = 44171DDB1F024801E01F769FA8AD75E1; + remoteInfo = NAPickerView; }; - B34D279F816DB787B53D78464095F189 /* PBXContainerItemProxy */ = { + B6E9DCC7E4A9D537B2B4EB371B80B944 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9F216D3986D254F5B2BC8865A910D7DD; - remoteInfo = Kiwi; + remoteGlobalIDString = D4366019FDFD4968B0EE7D6057DFCEF3; + remoteInfo = Analytics; }; BFFED1487FF60041315DAA16ADBEA5FF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1745,12 +1556,12 @@ remoteGlobalIDString = 80DAA5388079E5D54703FD0568B03AA1; remoteInfo = SORelativeDateTransformer; }; - C8253E6F1BF408B65C306648E6D91A7F /* PBXContainerItemProxy */ = { + C98EC3DB28D8D5F99187E48E73D34EC0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F9B3EDAD702849F696C3C6A5E4DDFD2C; - remoteInfo = MSDynamicsDrawerViewController; + remoteGlobalIDString = 8FCEDA0478734E091CCE0A493479AFC7; + remoteInfo = UIImageEffects; }; CB806849B9638376ADCB3496D3A6242E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1766,6 +1577,13 @@ remoteGlobalIDString = 180C74C9AD29DA8202520CCB38154CEB; remoteInfo = Bolts; }; + CF44F33F8BD66BB092184B853AC93D41 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = F9B3EDAD702849F696C3C6A5E4DDFD2C; + remoteInfo = MSDynamicsDrawerViewController; + }; D20DDD666F46D92E1D63B82DF5049C37 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -1780,61 +1598,61 @@ remoteGlobalIDString = 0E2DD52E665500ADD41D73D15C008781; remoteInfo = SHSProtoBuf; }; - D71460618C47E58CAD109C756E58AB4E /* PBXContainerItemProxy */ = { + E3988FD7BE92314BB20779298C914C12 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 81DA8EB8F3108C6E4CE73E356C3DFF8E; - remoteInfo = FXKeychain; + remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; + remoteInfo = iOSDFULibrary; }; - DA5C9B90906FD3C7279AD52813540257 /* PBXContainerItemProxy */ = { + E3F61148C7777BF5F8FE4913F01983EE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F3A20E6B58DE3EDAD15785CDFC1F6E3D; - remoteInfo = SenseKit; + remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; + remoteInfo = iOSDFULibrary; }; - E3988FD7BE92314BB20779298C914C12 /* PBXContainerItemProxy */ = { + E9FE05799F1EA277797F495566AD92B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; - remoteInfo = iOSDFULibrary; + remoteGlobalIDString = E8EE80E8AA1F3FEE99B108EF5EE36D11; + remoteInfo = AFNetworking; }; - E3F61148C7777BF5F8FE4913F01983EE /* PBXContainerItemProxy */ = { + EC224CB1E8E25C07CF281C5C1D5F1F3E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D775D9186B6AFF1580872BD70FDE395E; - remoteInfo = iOSDFULibrary; + remoteGlobalIDString = EE2F101D8B2CC64C1B1DF5F4F855C811; + remoteInfo = Bugsnag; }; - E53387E21EC90729536855BC9FDFF0F2 /* PBXContainerItemProxy */ = { + EEB4DFC7B77EB5380103D93154D77CBA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 80DAA5388079E5D54703FD0568B03AA1; - remoteInfo = SORelativeDateTransformer; + remoteGlobalIDString = D0F8C4B87B4F439921BC3DD8E32A0A58; + remoteInfo = Nocilla; }; - E9696FA118631F445736E6D51D6A278F /* PBXContainerItemProxy */ = { + EFFAB5F7C3BF703AE8DF1156F84DE18F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AEF700BE3EA90D15DD0835283F4FE074; - remoteInfo = Realm; + remoteGlobalIDString = 8E62987DA364AB3DEC75EE0AADC0C3C2; + remoteInfo = "NSJSONSerialization-NSNullRemoval"; }; - E9FE05799F1EA277797F495566AD92B8 /* PBXContainerItemProxy */ = { + F16FD231BAF89131A350B8C2C6210F24 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E8EE80E8AA1F3FEE99B108EF5EE36D11; - remoteInfo = AFNetworking; + remoteGlobalIDString = 43465475F37EC62ADE3092ED068C504C; + remoteInfo = CocoaLumberjack; }; - EEB4DFC7B77EB5380103D93154D77CBA /* PBXContainerItemProxy */ = { + F83BB77F1BCD005A83B18C6923FC8741 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D0F8C4B87B4F439921BC3DD8E32A0A58; - remoteInfo = Nocilla; + remoteGlobalIDString = DDBA9850F8AEC97961C9DE92AE2DC9D2; + remoteInfo = FBSDKCoreKit; }; F94351FAA364203ED9E5EE0CA01BD7C8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1845,1533 +1663,1355 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - 0C7069EB81D9658642ED68A5C79B2E55 /* Copy . Private Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - 1E4B31D52936ED8DE2F1932EFC0BB529 /* RLMAccessor.h in Copy . Private Headers */, - 937C2B3B4B387A190CA45A2D3746F530 /* RLMArray_Private.h in Copy . Private Headers */, - 5B11AB71D1E5E48ACCC60BB974743C55 /* RLMListBase.h in Copy . Private Headers */, - 4FA48CD19611E2EAE3D4D77624FB6CA0 /* RLMMigration_Private.h in Copy . Private Headers */, - 8289C2CC287BEA9647D291144C4035FC /* RLMObject_Private.h in Copy . Private Headers */, - DC33BBEF12E2FE20480B2B37155A9274 /* RLMObjectSchema_Private.h in Copy . Private Headers */, - 2B598EEEA7EBBA91ED8E204DD932F2CB /* RLMObjectStore.h in Copy . Private Headers */, - 4842AF40956CA08AB0D0A5A95668EBDE /* RLMOptionalBase.h in Copy . Private Headers */, - A97B3966EBD1E99C8F228383B68DF684 /* RLMProperty_Private.h in Copy . Private Headers */, - 6DE6CAF9B2259269C70012D0232FBA3B /* RLMRealm_Private.h in Copy . Private Headers */, - 590D591C36CD2C30A4CFB7C3A4151D47 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */, - 4819F1498A73A3ECCCCA856C5F9816EC /* RLMResults_Private.h in Copy . Private Headers */, - 6B776CB7580F90D48E25A595CE3E6569 /* RLMSchema_Private.h in Copy . Private Headers */, - ); - name = "Copy . Private Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - 38DBA75776A60AF729F9C3F05E9F2359 /* Copy . Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - DADACD3082D728BADED6222FC1E9BB65 /* Realm.h in Copy . Public Headers */, - A801934246A266E52EC1F02D13326877 /* RLMArray.h in Copy . Public Headers */, - 1DF26D7BD6FFB43FB72D348216182801 /* RLMCollection.h in Copy . Public Headers */, - 6B640A7634ED7633E46B52AA734D61B3 /* RLMConstants.h in Copy . Public Headers */, - 9EDBCBC0A90DD562B7210847757DDE8F /* RLMListBase.h in Copy . Public Headers */, - 4829D36A44AF602CD4C5534DE809867C /* RLMMigration.h in Copy . Public Headers */, - 49BCE4A13083FE938123A6B160D75911 /* RLMObject.h in Copy . Public Headers */, - 2C4FF5851493895CA6E3A36EDA24C547 /* RLMObjectBase.h in Copy . Public Headers */, - 0A463FE893495A0F985027D07E1C136D /* RLMObjectBase_Dynamic.h in Copy . Public Headers */, - B851596A422A90D748CE862E695EAA0C /* RLMObjectSchema.h in Copy . Public Headers */, - 7C3776A589EC42E671EC5AF412046DAF /* RLMOptionalBase.h in Copy . Public Headers */, - 8B356C82B96EA7C795C00733CE1DB5BB /* RLMPlatform.h in Copy . Public Headers */, - 8D8D4F376F3BDB9E7B07FE65466227DB /* RLMProperty.h in Copy . Public Headers */, - FCE9EDD9C96EEF1CBEF907C002FEC776 /* RLMRealm.h in Copy . Public Headers */, - 61F5586A47814335184D1ACFBA0CF884 /* RLMRealm_Dynamic.h in Copy . Public Headers */, - 639B22AD2782F5A99A20C06E69BF5644 /* RLMRealmConfiguration.h in Copy . Public Headers */, - 3268896DED700D82D9D608B31267F373 /* RLMResults.h in Copy . Public Headers */, - 06C5D0030A7912F65E4069569401B325 /* RLMSchema.h in Copy . Public Headers */, - ); - name = "Copy . Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ - 0016455B4CB134F7ED16412109AF5560 /* CBUUID+StringExtraction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CBUUID+StringExtraction.m"; path = "LGBluetooth/CBUUID+StringExtraction.m"; sourceTree = ""; }; - 005B2B1D99C70566603A831CE339476D /* KWDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWDeviceInfo.h; path = Classes/Core/KWDeviceInfo.h; sourceTree = ""; }; - 00ECFBB350D722DDA57D616AFB36B008 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - 01027B38EAFB49B95055CA7BE10FCE12 /* FBSDKContainerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKContainerViewController.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h; sourceTree = ""; }; - 0161F67DC2844FD7838D57AE889DBBFC /* FBSDKLogo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m; sourceTree = ""; }; - 0199501A652AF0056C6F91909403D23A /* KWProbe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWProbe.h; path = Classes/Core/KWProbe.h; sourceTree = ""; }; - 01A5A0D73E06BCA9AB5C5164E8812CE0 /* KSCrashCallCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashCallCompletion.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSCrashCallCompletion.h; sourceTree = ""; }; - 01CF1D31B6F4DB345C202E6A2CD2041C /* RLMCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection.h; path = include/RLMCollection.h; sourceTree = ""; }; - 01E3F894B967F1C59EFECD2496A32C93 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Charts/Classes/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; - 01EBF0C337277D28D7B7CE89D7294EF6 /* LSStubResponseDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponseDSL.h; path = Nocilla/DSL/LSStubResponseDSL.h; sourceTree = ""; }; - 021438A38FEF5D3419456723C651A751 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 023A98720CB8290A9E37BE0AA9305F25 /* MutableField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MutableField.h; path = src/runtime/Classes/MutableField.h; sourceTree = ""; }; - 02555F1AF4720EFD3347A76FF7BA263B /* BugsnagConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagConfiguration.h; path = Source/Bugsnag/BugsnagConfiguration.h; sourceTree = ""; }; - 0258069E600E4BEB6692995CA70B464C /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - 02657CB0B2CB9ACA034D5C661E99D6D3 /* SEGAnalyticsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAnalyticsUtils.h; path = Pod/Classes/Internal/SEGAnalyticsUtils.h; sourceTree = ""; }; - 028AF39A2DEB4483CF2888C56FC12EC7 /* KSCrashState.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashState.c; path = KSCrash/Source/KSCrash/Recording/KSCrashState.c; sourceTree = ""; }; - 029FDEB55587E1FEF6A37FEEF9F3B49C /* KWStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStub.m; path = Classes/Stubbing/KWStub.m; sourceTree = ""; }; - 02A4895EE81843D57911C97728A52D06 /* RealmPieData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmPieData.swift; path = ChartsRealm/Classes/Data/RealmPieData.swift; sourceTree = ""; }; - 02D16758C5BB5EC2393520DEBC866A4D /* FBSDKLoginKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FBSDKLoginKit.modulemap; sourceTree = ""; }; + 0006076FB1B5E2035EEDB273D3A3DE6D /* KSMach.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach.c; sourceTree = ""; }; + 0011E17669A8C12F1E65B5EC20167A89 /* SENAPITimeline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPITimeline.h; path = Pod/Classes/API/SENAPITimeline.h; sourceTree = ""; }; + 006825572C773BE4CF09B17EE065FEE6 /* FBSDKGraphRequestDataAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestDataAttachment.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h; sourceTree = ""; }; + 00D01699204800B0583662DE1EFC5842 /* KWBeIdenticalToMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeIdenticalToMatcher.h; path = Classes/Matchers/KWBeIdenticalToMatcher.h; sourceTree = ""; }; + 00F0B82158E75DD6D1F4A7CF353AD068 /* SENSpeechResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSpeechResult.h; path = Pod/Classes/Model/SENSpeechResult.h; sourceTree = ""; }; + 01187E4F31F62A38C1230F596E0CA953 /* Double.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Double.swift; path = iOSDFULibrary/Classes/Utilities/Double.swift; sourceTree = ""; }; + 01245847AACFC2E85F0FE06B0708C485 /* NSString+Nocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Nocilla.m"; path = "Nocilla/Categories/NSString+Nocilla.m"; sourceTree = ""; }; + 0147AEC32573F4ED372109CA7860F7CA /* NAPickerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NAPickerCell.m; path = NASources/NAPickerCell.m; sourceTree = ""; }; + 015EE0A07A34B40175947D1DB3A2B48B /* LGService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGService.m; path = LGBluetooth/LGService.m; sourceTree = ""; }; + 01CDACD4FF75BB9835E050FC04DAA049 /* UIImageEffects-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImageEffects-prefix.pch"; sourceTree = ""; }; + 01F0306F12D64331DD35EE1B95722119 /* KSCrashDoctor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashDoctor.h; path = KSCrash/Source/KSCrash/Recording/KSCrashDoctor.h; sourceTree = ""; }; + 02124129F566CC1185ECC38993662970 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Charts/Classes/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; + 0259857B668118533EE9E37B60658541 /* FBSDKKeychainStoreViaBundleID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStoreViaBundleID.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m; sourceTree = ""; }; + 027EE36F4F9D34BE7ED014E939D85FEF /* KWPendingNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWPendingNode.m; path = Classes/Nodes/KWPendingNode.m; sourceTree = ""; }; + 02A9A73627703300108A74BEA7E5847B /* FBSDKPaymentObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKPaymentObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKPaymentObserver.h; sourceTree = ""; }; + 02B95771F7E77C8A17B997F98D098908 /* FBSDKErrorConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m; sourceTree = ""; }; + 02D07B006380ADCB51A9C444CD0A9A37 /* SENAPIQuestions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIQuestions.m; path = Pod/Classes/API/SENAPIQuestions.m; sourceTree = ""; }; 030FA63A4A49B175BA76AAF8FF9F250C /* Pods-SenseApp-Sense.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Sense.dev.xcconfig"; sourceTree = ""; }; - 0339C9586241574E408BE851D212C786 /* GeneratedMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GeneratedMessage.h; path = src/runtime/Classes/GeneratedMessage.h; sourceTree = ""; }; - 039A269E1BA71A6D450528678E586874 /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Charts/Classes/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; - 04083689DEE81844F8C805D0E8F2C9F0 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Charts/Classes/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; - 044F8A858D46276A25B96EBBCCCA1092 /* SENSensor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSensor.m; path = Pod/Classes/Model/SENSensor.m; sourceTree = ""; }; - 0450A8F860D285BBFD4B4B6A4A4D23F5 /* SENAPITimeline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPITimeline.m; path = Pod/Classes/API/SENAPITimeline.m; sourceTree = ""; }; - 045A06AFF8CE942DB74ED390A102ACE6 /* RealmBubbleData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmBubbleData.swift; path = ChartsRealm/Classes/Data/RealmBubbleData.swift; sourceTree = ""; }; - 048E483362A21348B8DBFCAA1DEBDFE3 /* SENConditionRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENConditionRange.h; path = Pod/Classes/Model/SENConditionRange.h; sourceTree = ""; }; - 05413D01DAA48E6980978FAF24CC19AE /* NAPickerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NAPickerView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 056EBDF9E23B7D4FB58A07344131EEED /* RLMProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty.h; path = include/RLMProperty.h; sourceTree = ""; }; - 05845E36629366233189702305E5FB35 /* FBSDKError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKError.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m; sourceTree = ""; }; - 05AE9CF44CA1255D38C2B6B0058EFED2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 05BBC8716924B099B24DED9011BA83CF /* KWPendingNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWPendingNode.h; path = Classes/Nodes/KWPendingNode.h; sourceTree = ""; }; - 061E8FAA2ADB6C8E786802191CA84735 /* SENService+Protected.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SENService+Protected.h"; path = "Pod/Classes/Service/SENService+Protected.h"; sourceTree = ""; }; - 0626363125CDD5D9D261AEB8583BA659 /* KWValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWValue.h; path = Classes/Core/KWValue.h; sourceTree = ""; }; - 0637C05359E6854277967F4A9DE4B6AC /* FBSDKLoginCompletion+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginCompletion+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h"; sourceTree = ""; }; - 06B20C0BA0BBD6B926FCAA236E5A1F05 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 06F4DF0AF3A045BAEAF5EC87EFF31E82 /* FBSDKAccessTokenCacheV3_21.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_21.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h; sourceTree = ""; }; - 06FA1FC32C2DA69F84B54ADF66001D79 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 071A2CDAF8D4CE490A79446640CBE1B1 /* LSStubResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponse.h; path = Nocilla/Stubs/LSStubResponse.h; sourceTree = ""; }; - 073F61C7D7ACBDEE644202FADA6CB3E0 /* DDContextFilterLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDContextFilterLogFormatter.m; path = Classes/Extensions/DDContextFilterLogFormatter.m; sourceTree = ""; }; - 077AA11A892C49D3A1D490C67F9F3B2B /* Zip.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Zip.xcconfig; sourceTree = ""; }; - 07B3D8645480F8427B9CDB1A9677A59E /* FBSDKAppEventsUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsUtility.h; sourceTree = ""; }; - 07BEC55AFA404BA27909A0EA5616689D /* SENSleepPillManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepPillManager.h; path = Pod/Classes/BLE/SENSleepPillManager.h; sourceTree = ""; }; - 07E52B4F8804AE5AFA3F87E18A8A6CC9 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 07E9BF537F5E7AA38216A336B51A7DDD /* KWBlockNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlockNode.h; path = Classes/Nodes/KWBlockNode.h; sourceTree = ""; }; - 082161FFBBBEDB9362B0C68D3DFDB42C /* KSArchSpecific.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSArchSpecific.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSArchSpecific.h; sourceTree = ""; }; - 08339E85C1D080E7B0116701EBF0EAED /* SEGBluetooth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGBluetooth.m; path = Pod/Classes/Internal/SEGBluetooth.m; sourceTree = ""; }; - 0887EBCF1CBF974E276C517B22A0C2B3 /* RLMObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject.h; path = include/RLMObject.h; sourceTree = ""; }; - 08F136554A09DFFF8E1C72473C50B55F /* DFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUPacket.swift; sourceTree = ""; }; - 091F6533D95D3F82D1D73EB24DE13117 /* KWMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMock.m; path = Classes/Mocking/KWMock.m; sourceTree = ""; }; - 0921B996155F3A82122C92738B12A970 /* RLMSwiftSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSwiftSupport.m; path = Realm/RLMSwiftSupport.m; sourceTree = ""; }; - 096211E0EF1287E256B6F5F5F376D6F1 /* FBSDKLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogger.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m; sourceTree = ""; }; + 0336F12C33198D824C6FF0108B84B408 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Charts/Classes/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; + 039953BBD1A7BDB50F1CF23E11BE2F0A /* LGCentralManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGCentralManager.m; path = LGBluetooth/LGCentralManager.m; sourceTree = ""; }; + 03A595AC6DAD1A9EC3A9C7046FE873BB /* KWExistVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExistVerifier.h; path = Classes/Verifiers/KWExistVerifier.h; sourceTree = ""; }; + 03CA1DE94F3242A107C6A8414B5F77FB /* Analytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Analytics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 040836341333C0543FD6FD42CFBE8E4C /* Analytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Analytics.h; path = Pod/Classes/Analytics/Analytics.h; sourceTree = ""; }; + 04719E3076B558A7721780984373914D /* FBSDKMath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMath.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m; sourceTree = ""; }; + 0487202A7D8ECC666D6BD2D403764B0B /* SENAPIShare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIShare.m; path = Pod/Classes/API/SENAPIShare.m; sourceTree = ""; }; + 04B26C6B81B9203812D47870622621E0 /* GeneratedMessageBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GeneratedMessageBuilder.m; path = src/runtime/Classes/GeneratedMessageBuilder.m; sourceTree = ""; }; + 04EABFA4E1B5EE963878B5982C500BCC /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; + 04F7B798B041C898DB6BA8ECC89296D6 /* KSDynamicLinker.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSDynamicLinker.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSDynamicLinker.c; sourceTree = ""; }; + 0522709B19C00435C3811705B511FE71 /* Bugsnag.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Bugsnag.modulemap; sourceTree = ""; }; + 0586A2A4C02F8D34C8CFB47D263453E6 /* SENService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENService.m; path = Pod/Classes/Service/SENService.m; sourceTree = ""; }; + 05E6643A0402B632BFD6384471F0D75F /* KWMatchVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatchVerifier.m; path = Classes/Verifiers/KWMatchVerifier.m; sourceTree = ""; }; + 05EEB90E6DE25224009F5ED21A86873C /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; + 061640276642C3CE835A044AAFC10F3E /* SENAuthorizationService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAuthorizationService.m; path = Pod/Classes/API/SENAuthorizationService.m; sourceTree = ""; }; + 063AA0FEDE1FD7DD48DDDE31831C09EC /* FBSDKLoginCompletion+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginCompletion+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h"; sourceTree = ""; }; + 064FF3868F8D2ED780F3AA5BD5240AEF /* KWInequalityMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWInequalityMatcher.h; path = Classes/Matchers/KWInequalityMatcher.h; sourceTree = ""; }; + 0657F361303B31C0CC0BAAC164BB403A /* Analytics-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Analytics-prefix.pch"; sourceTree = ""; }; + 0660408A46E7644069931E095ECCAF53 /* SecureDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUExecutor.swift; sourceTree = ""; }; + 0673D42FA41D39342278B4D19320D824 /* BFTask+Exceptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Exceptions.h"; path = "Bolts/Common/BFTask+Exceptions.h"; sourceTree = ""; }; + 06A60658B80E97003F81B7536AFFA818 /* KWMatchVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatchVerifier.h; path = Classes/Verifiers/KWMatchVerifier.h; sourceTree = ""; }; + 06DCE2BC1E366352525EB7796FE23C62 /* FBSDKAccessToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessToken.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h; sourceTree = ""; }; + 06E5FF3AAFACAF5BFA9972E8CF9C0C98 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0759DDF9BE9A454DFC5FE80C921B3F7F /* DDFileLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDFileLogger.h; path = Classes/DDFileLogger.h; sourceTree = ""; }; + 07B6454F780277243C8BBC786380065F /* ConcreteExtensionField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcreteExtensionField.h; path = src/runtime/Classes/ConcreteExtensionField.h; sourceTree = ""; }; + 07FDE05A4C4273BDF0B4F808A1AB3CFC /* FBSDKCoreKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKCoreKit.xcconfig; sourceTree = ""; }; + 0826EE3C09A48AB53D6A685C9A0FD3CE /* KSCrashReportStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashReportStore.m; path = KSCrash/Source/KSCrash/Recording/KSCrashReportStore.m; sourceTree = ""; }; + 0859ED35A3EA501812EF454D78D3CFA7 /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Charts/Classes/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; + 088282086B91CEAD1CDFA33D9B2E5A9E /* NAPickerView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NAPickerView-prefix.pch"; sourceTree = ""; }; + 08885FBD94476FBA6ADBDFB35AC19255 /* Charts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Charts.modulemap; sourceTree = ""; }; + 08A9091656D7C2A6A7B67007E49E7D06 /* SENAPIAppStats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAppStats.h; path = Pod/Classes/API/SENAPIAppStats.h; sourceTree = ""; }; + 0924E45750440DCC9F908217D04F4FFB /* DDContextFilterLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDContextFilterLogFormatter.h; path = Classes/Extensions/DDContextFilterLogFormatter.h; sourceTree = ""; }; + 093BD6F2466C276E5DF6F173C291B7B9 /* NSString+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Matcheable.h"; path = "Nocilla/Matchers/NSString+Matcheable.h"; sourceTree = ""; }; + 09523D7F5BDACB18BAF98AB8708F9C9B /* LSASIHTTPRequestHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSASIHTTPRequestHook.h; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.h; sourceTree = ""; }; + 09536F2CDB53EF1F89923BCE0A5E7066 /* ChartYAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxisRendererRadarChart.swift; path = Charts/Classes/Renderers/ChartYAxisRendererRadarChart.swift; sourceTree = ""; }; + 09570FC8499F25FC15C64F62F9D749FB /* SENSound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSound.h; path = Pod/Classes/Model/SENSound.h; sourceTree = ""; }; + 096D1A6B4D4F2D9728BAA3591527DB8F /* FBSDKProfilePictureView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfilePictureView.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m; sourceTree = ""; }; + 09AB4F17064ECDBD7527EC2D5FB64927 /* SORelativeDateTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SORelativeDateTransformer.h; path = SORelativeDateTransformer/SORelativeDateTransformer.h; sourceTree = ""; }; 09B2B537B643AD04ACDAE44DF3CA5E31 /* Pods-SenseApp-Sense-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SenseApp-Sense-umbrella.h"; sourceTree = ""; }; - 09BEE9D1E07C0598136DEF7AB86D163C /* SEGAliasPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAliasPayload.h; path = Pod/Classes/Integrations/SEGAliasPayload.h; sourceTree = ""; }; - 09F0DE7277068BDD933F79CC61695BCD /* BFMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent_Internal.h; path = Bolts/iOS/Internal/BFMeasurementEvent_Internal.h; sourceTree = ""; }; - 0A1C0CD2E9517CD6F383925189A9EEEF /* FBSDKAudioResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAudioResourceLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h; sourceTree = ""; }; - 0A3772A52A46D64EF0AEFC337494A854 /* FBSDKLoginConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginConstants.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m; sourceTree = ""; }; - 0A522DA25116D8184D09800C645CE093 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0AA2B7AC1281E6558D7E0CCB248C122E /* FBSDKSystemAccountStoreAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSystemAccountStoreAdapter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h; sourceTree = ""; }; - 0B08539F9B110139ABE0D9EADE8207FA /* KWIntercept.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWIntercept.h; path = Classes/Stubbing/KWIntercept.h; sourceTree = ""; }; - 0B201480098CE38EDB14C7D2ED45764D /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RealmSwift/Optional.swift; sourceTree = ""; }; - 0B351672D2D305DB049299AA14432D00 /* SVWebViewControllerActivityChrome-iPad.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivityChrome-iPad.png"; path = "SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad.png"; sourceTree = ""; }; - 0B7967FD069C45DE48FCC4BA1863138A /* FBSDKBridgeAPIRequest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKBridgeAPIRequest+Private.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h"; sourceTree = ""; }; - 0B884F348DE9E36837CEC0A765E9ED27 /* ChartYAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxisRendererRadarChart.swift; path = Charts/Classes/Renderers/ChartYAxisRendererRadarChart.swift; sourceTree = ""; }; - 0BBB6844B4BB6BFFD7C081613C5523F6 /* MSDynamicsDrawerViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MSDynamicsDrawerViewController-umbrella.h"; sourceTree = ""; }; - 0BCA2FBFD8FF314B3B64038CBFA83765 /* KSCrashReportWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportWriter.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReportWriter.h; sourceTree = ""; }; - 0BCCA8BD658C2A1DA7E51EAACEF94C27 /* RealmBubbleDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmBubbleDataSet.swift; path = ChartsRealm/Classes/Data/RealmBubbleDataSet.swift; sourceTree = ""; }; - 0BD85498E1F4C5EA089E3FFE9D69A3E5 /* FBSDKURLConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLConnection.m; sourceTree = ""; }; - 0BE12CC3269477CCFFB8157A10045C9A /* KWReceiveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWReceiveMatcher.h; path = Classes/Matchers/KWReceiveMatcher.h; sourceTree = ""; }; - 0BFE25F0699CD7125219BE452703A025 /* Bugsnag-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bugsnag-prefix.pch"; sourceTree = ""; }; - 0C47D8C824060B7E625E75C2428D6855 /* KWBeTrueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeTrueMatcher.m; path = Classes/Matchers/KWBeTrueMatcher.m; sourceTree = ""; }; - 0C5161941D4B52D86CD0F226B120CEF6 /* FBSDKError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKError.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h; sourceTree = ""; }; - 0C63331516B883A2713CC5D72061E092 /* NSJSONSerialization-NSNullRemoval-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization-NSNullRemoval-dummy.m"; sourceTree = ""; }; - 0CC05AFECB18C9ED7FEF3DC1CE084AD9 /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 0D4D6DEB70DE71E7A988AF707FC8140F /* NAPickerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NAPickerCell.m; path = NASources/NAPickerCell.m; sourceTree = ""; }; - 0D611FFF1063BD2248126F95DF96D6BA /* collection_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifier.cpp; path = Realm/ObjectStore/impl/collection_notifier.cpp; sourceTree = ""; }; - 0D70E172606FA6FF336E593DD8572C8A /* KSMach_Arm64.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_Arm64.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_Arm64.c; sourceTree = ""; }; - 0D818A955A6046CC93BA65B931C589FC /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - 0D91C962347595E33BF484F5E48CFCA5 /* FBSDKTestUsersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTestUsersManager.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m; sourceTree = ""; }; - 0D9420B97D73FDEA67CDA023923E6EF5 /* LSNSURLSessionHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLSessionHook.h; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h; sourceTree = ""; }; - 0DA11B64BF64D3009D2534C91770FAC2 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+Merge.h"; sourceTree = ""; }; - 0DB22B5F8DE0AB034FC6711F7F6937BE /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = es.lproj; path = SVWebViewController/es.lproj; sourceTree = ""; }; - 0DF9BF10A42F842B493FA264362A7A29 /* SENAnswer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnswer.h; path = Pod/Classes/Model/SENAnswer.h; sourceTree = ""; }; - 0E4FDE1BC725ED63F0B6A523CDABC50A /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Charts/Classes/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; - 0E9DB316F651364523CD50A74EE6F49A /* DDAbstractDatabaseLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDAbstractDatabaseLogger.m; path = Classes/DDAbstractDatabaseLogger.m; sourceTree = ""; }; - 0EEC159F830EEE800640B42432953ABA /* RealmScatterData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmScatterData.swift; path = ChartsRealm/Classes/Data/RealmScatterData.swift; sourceTree = ""; }; - 0F12039BECA8570BFB820E6EAB61C863 /* SENSleepPillManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepPillManager.m; path = Pod/Classes/BLE/SENSleepPillManager.m; sourceTree = ""; }; - 0F4BC952C0F87F7F8522F247E273D330 /* FBSDKErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h; sourceTree = ""; }; - 0F5F32160CA718EE51EE6B984770A4D9 /* NSDictionary+Merge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Merge.m"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+Merge.m"; sourceTree = ""; }; - 0F69DEEA14E86FA1AC1D1A8D88BC4BE9 /* entropy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = entropy.h; path = Zip/minizip/aes/entropy.h; sourceTree = ""; }; - 1037326861389367976F7BA2407675D1 /* schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = schema.cpp; path = Realm/ObjectStore/schema.cpp; sourceTree = ""; }; - 1038F32B1CC64BF30E355903AE62D804 /* SENTimelineSegment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTimelineSegment.m; path = Pod/Classes/Model/SENTimelineSegment.m; sourceTree = ""; }; - 1075FAB8E5B0A48DDC269427463CC204 /* Charts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-prefix.pch"; sourceTree = ""; }; - 10D91DB778382B4F50B88A4EF2DB42EB /* SENServiceDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENServiceDevice.m; path = Pod/Classes/Service/SENServiceDevice.m; sourceTree = ""; }; - 1115EC9B096C79695A87AB541442A2F4 /* RLMOptionalBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMOptionalBase.h; path = include/RLMOptionalBase.h; sourceTree = ""; }; - 113B405957DD754242F314CF4B943722 /* UIImageEffects-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIImageEffects-dummy.m"; sourceTree = ""; }; - 1180B07916D0126946E26CDC9A60AD86 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 11B037715A730DDBD78E533777AA9FCE /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - 12D644CD9C4DAB0655B1F910A82164BF /* DDFileLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDFileLogger.m; path = Classes/DDFileLogger.m; sourceTree = ""; }; - 131AB0F3F0872740AE3904D986800138 /* FBSDKURLConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLConnection.h; sourceTree = ""; }; - 132F81F12EAFD58A6A82D474C46E0371 /* SENService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENService.h; path = Pod/Classes/Service/SENService.h; sourceTree = ""; }; - 1372F7926FA69F18621B5C6B32335CD5 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = RealmSwift/Schema.swift; sourceTree = ""; }; - 13854BD203A5D61B5169225A3291D5D9 /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Charts/Classes/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; - 13A915E9CF8B4341DD83EF6ED1D98D9E /* FBSDKMaleSilhouetteIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMaleSilhouetteIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h; sourceTree = ""; }; - 1491750C1A4C5B573357CF0168C4EC2C /* SENDevicePairingInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENDevicePairingInfo.h; path = Pod/Classes/Model/SENDevicePairingInfo.h; sourceTree = ""; }; - 149DB644C51BFBF99DBFA2585D550170 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = SVWebViewController/en.lproj; sourceTree = ""; }; - 150CED8952F15D90BD416EC8034C5D4F /* Pods_SenseApp_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SenseApp_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 156B62BCCB956217CBE64076766F767C /* KWUserDefinedMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWUserDefinedMatcher.h; path = Classes/Matchers/KWUserDefinedMatcher.h; sourceTree = ""; }; - 15E901D886A7536E03D975DCD717B02E /* pwd2key.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = pwd2key.h; path = Zip/minizip/aes/pwd2key.h; sourceTree = ""; }; - 15F7FC63041B13CC887C5154D8B825D7 /* LSStubRequestDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequestDSL.h; path = Nocilla/DSL/LSStubRequestDSL.h; sourceTree = ""; }; - 1600FCEC5FB251E98E48C7B8C2B54B11 /* SENSerializable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSerializable.h; path = Pod/Classes/Model/SENSerializable.h; sourceTree = ""; }; - 16122768DFB846CD8A700FEDAC4894D4 /* API.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = API.h; path = Pod/Classes/API/API.h; sourceTree = ""; }; - 164B6172F43D9DD2FB14C9FC3E465B61 /* KWMessagePattern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessagePattern.h; path = Classes/Core/KWMessagePattern.h; sourceTree = ""; }; - 1664253ED9906177B4C2C4F75A2E3E8C /* object_schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_schema.cpp; path = Realm/ObjectStore/object_schema.cpp; sourceTree = ""; }; - 169700962DF874B51CC81D6039E17B33 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; - 16FC710F1F548B45252783CA16EB5C9E /* NSData+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Matcheable.m"; path = "Nocilla/Matchers/NSData+Matcheable.m"; sourceTree = ""; }; - 17C31B0AB211A6C1B79CC7DBA8E001E2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 185E1D9306E47ABDB4496940AEDD9703 /* LSRegexMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSRegexMatcher.m; path = Nocilla/Matchers/LSRegexMatcher.m; sourceTree = ""; }; - 1877410E6715856F10925CB3697A26C3 /* FXKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FXKeychain.h; path = FXKeychain/FXKeychain.h; sourceTree = ""; }; - 18A47DB46C31C28B1E051710C9AB9B4D /* FBSDKLoginManagerLoginResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManagerLoginResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h"; sourceTree = ""; }; - 18CF903871CE24C7CD5136EAFF2107ED /* SENShareable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENShareable.h; path = Pod/Classes/Model/SENShareable.h; sourceTree = ""; }; - 18F2870658350BE4773DECBD042D4A42 /* FBSDKLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogger.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h; sourceTree = ""; }; - 190B1F4C850F944F149392D338627D60 /* Field.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Field.m; path = src/runtime/Classes/Field.m; sourceTree = ""; }; - 1A5856EE930464E2D35F3DD82A4EE37C /* BFAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererView.m; path = Bolts/iOS/BFAppLinkReturnToRefererView.m; sourceTree = ""; }; - 1A8176005DC3CAAC81E287FF2A387496 /* SenseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SenseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1A9F819292239D287998FAF9D4B5CA71 /* Demangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Demangle.h; path = KSCrash/Source/KSCrash/Recording/Tools/Demangle.h; sourceTree = ""; }; - 1AA6DB4138821E78C6808DCE198ABD2D /* KSCrashSentry_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_Private.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Private.h; sourceTree = ""; }; - 1AAEE9AF28B505B549FC52F3F2D94FAD /* SENSenseMessage.pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseMessage.pb.h; path = Pod/Classes/BLE/SENSenseMessage.pb.h; sourceTree = ""; }; - 1AFB153F2FB32B0C428586CB58E47AFE /* BFURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL_Internal.h; path = Bolts/iOS/Internal/BFURL_Internal.h; sourceTree = ""; }; - 1B1BEB4892CE731D4E254642292B6794 /* KWGenericMatchEvaluator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatchEvaluator.m; path = Classes/Matchers/KWGenericMatchEvaluator.m; sourceTree = ""; }; - 1B378F5B3A6A21072BCE37454600DA6A /* Descriptor.pb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Descriptor.pb.m; path = src/runtime/Classes/Descriptor/Descriptor.pb.m; sourceTree = ""; }; - 1B55FC0C16710D5EFB7D946FBA47067A /* SEGReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGReachability.h; path = Pod/Classes/Internal/SEGReachability.h; sourceTree = ""; }; - 1B59B4B6D25A4E8BFA815CAB9625D6DB /* FBSDKButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKButton.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h; sourceTree = ""; }; - 1BEA6A7624D9109C8253BB4B3526F6FA /* KWMatcherFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatcherFactory.m; path = Classes/Core/KWMatcherFactory.m; sourceTree = ""; }; - 1CB46C5F2DCE3A88C23EDF3AF4E6E5D0 /* FBSDKDialogConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDialogConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h; sourceTree = ""; }; - 1CB94DFCF37770D9CD7668014CC1C47A /* SENAPIAppFeedback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAppFeedback.h; path = Pod/Classes/API/SENAPIAppFeedback.h; sourceTree = ""; }; - 1CE1E02CFA4F13F5CE2D31F02529D3E4 /* RLMObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectStore.h; path = include/RLMObjectStore.h; sourceTree = ""; }; - 1D532CAA6C3A2CF3CBDCCC50F02C57E9 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; - 1D6BA5B9E35F33E11A90F5B214869F81 /* KWStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStub.h; path = Classes/Stubbing/KWStub.h; sourceTree = ""; }; - 1DB30C71FC6B027EDAC2A7233178C453 /* FBSDKAccessTokenCacheV3_21.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_21.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m; sourceTree = ""; }; - 1DE3845FC5C7F310A88812775F3D0B8A /* SORelativeDateTransformer.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SORelativeDateTransformer.bundle; path = SORelativeDateTransformer/SORelativeDateTransformer.bundle; sourceTree = ""; }; - 1E5E75B1C4DB4709B6B72E65354BB5CB /* KWBeforeEachNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeforeEachNode.h; path = Classes/Nodes/KWBeforeEachNode.h; sourceTree = ""; }; - 1E80F685869AB9F6D7CFA2BE7BD16CEF /* FBSDKApplicationDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKApplicationDelegate.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m; sourceTree = ""; }; - 1EDAE5FAE10A9D80DA0C1B2AE57F8946 /* FBSDKTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h; sourceTree = ""; }; - 1EFE1FEF36B081CD1CF0B5B53AB7572A /* KWLet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWLet.h; path = Classes/Core/KWLet.h; sourceTree = ""; }; - 1F04225D6CECBF78785D681F2E4C0178 /* LGBluetooth.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LGBluetooth.xcconfig; sourceTree = ""; }; - 1F62587536D786976EE0039F33CD92DD /* CocoaLumberjack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CocoaLumberjack.h; path = Classes/CocoaLumberjack.h; sourceTree = ""; }; - 1F80FDC592C3D9E2AC5977E1143379DD /* ChartAxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAxisRendererBase.swift; path = Charts/Classes/Renderers/ChartAxisRendererBase.swift; sourceTree = ""; }; - 1F950BDE46EC97645511AE62FFFFE084 /* KWBeSubclassOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeSubclassOfClassMatcher.m; path = Classes/Matchers/KWBeSubclassOfClassMatcher.m; sourceTree = ""; }; - 1FD7BD8D8587E668D455BEDDDE49E356 /* KSObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSObjC.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSObjC.h; sourceTree = ""; }; - 204B0E37E91052C9827449336E47F44D /* Property.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Property.swift; path = RealmSwift/Property.swift; sourceTree = ""; }; - 20503DA09C397104B780E49C3E683447 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2075DE20452D70AF4C8F0608C89F0D01 /* KWReporting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWReporting.h; path = Classes/Core/KWReporting.h; sourceTree = ""; }; - 20821F17C4996D30BF385DA5EC9CC331 /* BugsnagBreadcrumb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagBreadcrumb.h; path = Source/Bugsnag/BugsnagBreadcrumb.h; sourceTree = ""; }; - 20A01CDFA0AFBC89ECBC46D1EEB2BB83 /* FBSDKCoreKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKCoreKit+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h"; sourceTree = ""; }; - 20A8EEFA215E4D2CFD3A6FF42592DDD4 /* ManifestFirmwareInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ManifestFirmwareInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/ManifestFirmwareInfo.swift; sourceTree = ""; }; - 20C9E277B36138FB92DBDB4222096514 /* LSStubRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequest.h; path = Nocilla/Stubs/LSStubRequest.h; sourceTree = ""; }; - 20E7825114030EC9A4A442E427F8FC65 /* Realm-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Realm-prefix.pch"; sourceTree = ""; }; - 219FC34893A78F8F315338331D7F2DF4 /* KWBlockRaiseMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlockRaiseMatcher.h; path = Classes/Matchers/KWBlockRaiseMatcher.h; sourceTree = ""; }; - 21D681969EE3A5E95D3CAE03AAA4098E /* FBSDKLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h; sourceTree = ""; }; - 21FE4323122965E78215E3D8DDDE4E30 /* LGPeripheral.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGPeripheral.m; path = LGBluetooth/LGPeripheral.m; sourceTree = ""; }; - 22DC5E202A7CEE76CF750011FD48DE91 /* SenseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SenseKit.xcconfig; sourceTree = ""; }; - 22F35C9B1DC4DFD29A29D7E3CB7099E1 /* iOSDFULibrary.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iOSDFULibrary.xcconfig; sourceTree = ""; }; - 23049F14FC6B811C1730AAE5E492A864 /* BugsnagBreadcrumb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagBreadcrumb.m; path = Source/Bugsnag/BugsnagBreadcrumb.m; sourceTree = ""; }; - 230511BE1F38D84E3EB831384C3E3BFB /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; - 234A0A8855A407594657E217BC6F84A1 /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2359FCA43EDCD88146BF63025778B1EF /* KSSystemInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSystemInfo.h; path = KSCrash/Source/KSCrash/Recording/KSSystemInfo.h; sourceTree = ""; }; - 2365B12F7B60A480DF052355767E5FCB /* RLMQueryUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMQueryUtil.mm; path = Realm/RLMQueryUtil.mm; sourceTree = ""; }; - 237D07FD65E690AD02D7EE212671B7E2 /* aesopt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aesopt.h; path = Zip/minizip/aes/aesopt.h; sourceTree = ""; }; - 23B2D2FCFF2ABA43422B0A001A96F021 /* UICountingLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UICountingLabel.h; sourceTree = ""; }; - 23B3362A6ED08DF78E22202739F1B852 /* KSCrash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrash.h; path = KSCrash/Source/KSCrash/Recording/KSCrash.h; sourceTree = ""; }; - 23BE046FA812475047E30B1D89141394 /* RLMObjectSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectSchema.mm; path = Realm/RLMObjectSchema.mm; sourceTree = ""; }; - 23EBF85C035E122F72215384D3EDCC46 /* SENCondition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENCondition.m; path = Pod/Classes/Model/SENCondition.m; sourceTree = ""; }; - 2426136105757DBE499DDB795FF756F2 /* KWBeforeEachNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeforeEachNode.m; path = Classes/Nodes/KWBeforeEachNode.m; sourceTree = ""; }; + 09BA45663695742B90FF32BC550F2466 /* MutableField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MutableField.h; path = src/runtime/Classes/MutableField.h; sourceTree = ""; }; + 09F85D2AE50EFA1C401CF8D1A893E287 /* IntelHex2BinConverter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IntelHex2BinConverter.m; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.m; sourceTree = ""; }; + 0A16A9F1A7B0DFCA14764EEE820ABA6D /* ChartAxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAxisBase.swift; path = Charts/Classes/Components/ChartAxisBase.swift; sourceTree = ""; }; + 0A2100938B5C885B13454A9B6EFE1CAC /* Message.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Message.h; path = src/runtime/Classes/Message.h; sourceTree = ""; }; + 0A6B143E9A57A4649C38827C1B8071DB /* CocoaLumberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A8A4A14EB44665E3CD34F24781A802A /* iOSDFULibrary-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-prefix.pch"; sourceTree = ""; }; + 0AAF481E56F9F937954FEE4988A23F3A /* SENSleepSoundRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundRequest.h; path = Pod/Classes/Model/SENSleepSoundRequest.h; sourceTree = ""; }; + 0B235AA53CB14B4B9AFCB1B8E852D84E /* KWHaveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWHaveMatcher.h; path = Classes/Matchers/KWHaveMatcher.h; sourceTree = ""; }; + 0B3B4356B970C68D54FD6491DC926774 /* SENAPITimeZone.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPITimeZone.h; path = Pod/Classes/API/SENAPITimeZone.h; sourceTree = ""; }; + 0B3D11E7E09E1D2FA938684C7D5E6459 /* KWBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlock.h; path = Classes/Core/KWBlock.h; sourceTree = ""; }; + 0B82D4AD8E4F0D1D5FE346B4C14E8DE9 /* aesopt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aesopt.h; path = Zip/minizip/aes/aesopt.h; sourceTree = ""; }; + 0B890BEACA084FB576CE274B117B912A /* SenseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SenseKit-dummy.m"; sourceTree = ""; }; + 0B92E956F8ECA8E03243AAE63D0FF692 /* Descriptor.pb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Descriptor.pb.m; path = src/runtime/Classes/Descriptor/Descriptor.pb.m; sourceTree = ""; }; + 0C705E8F445FFB463511B342BA27875B /* FBSDKGraphRequestConnection+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequestConnection+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h"; sourceTree = ""; }; + 0C835FC7E70537FD8FBF2EE51F14397E /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 0C9E1CB8926D98B02FE2EC003C21F2A2 /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crypt.h; path = Zip/minizip/crypt.h; sourceTree = ""; }; + 0D1851F66D673002D364E8A24C02704A /* FBSDKCoreKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKCoreKit+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h"; sourceTree = ""; }; + 0D447E1562FF6E9DBC77D2DC5B733F5C /* SENAPITrends.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPITrends.m; path = Pod/Classes/API/SENAPITrends.m; sourceTree = ""; }; + 0D58ADA9AD7DE6EA49A1271BBADBBAE8 /* Utilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Utilities.m; path = src/runtime/Classes/Utilities.m; sourceTree = ""; }; + 0D5A115AB9FDC75A5CCDE63C3B1B9E34 /* LSStubResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponse.h; path = Nocilla/Stubs/LSStubResponse.h; sourceTree = ""; }; + 0D9C77D35925D037A80C4F079721E622 /* FBSDKWebDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h; sourceTree = ""; }; + 0E1DEA844A07E5EF01AD8ACA051362C0 /* FBSDKAccessToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessToken.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m; sourceTree = ""; }; + 0EA4E89B0D99D7D44D4C33804130F6FC /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; + 0EBE826E33376456D9C3460EAA988334 /* ChartXAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRenderer.swift; path = Charts/Classes/Renderers/ChartXAxisRenderer.swift; sourceTree = ""; }; + 0ED638A9C3BF6397AADB4BBE296DBE6C /* iOSDFULibrary.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iOSDFULibrary.xcconfig; sourceTree = ""; }; + 0F1BE33C162AA57174076E5F169DCB4F /* MSDynamicsDrawerViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = MSDynamicsDrawerViewController.modulemap; sourceTree = ""; }; + 0F739AB4FCC5638EE4F6886A7DB8296B /* BugsnagIosNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagIosNotifier.m; path = Source/Bugsnag/BugsnagIosNotifier.m; sourceTree = ""; }; + 0F923AAB0BBDFE200C428565AB663175 /* KSSystemInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSSystemInfo.m; path = KSCrash/Source/KSCrash/Recording/KSSystemInfo.m; sourceTree = ""; }; + 0FA2BE27CEC8725B76FDB87EBBD04E8B /* NALabelCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NALabelCell.m; path = NASources/NALabelCell.m; sourceTree = ""; }; + 0FB38AC0BF21D846C4E6432BBF165A93 /* FBSDKButton+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKButton+Subclass.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h"; sourceTree = ""; }; + 0FCBD36EA99405F60B2BC183D05C2862 /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; + 0FE5052156B42AF52E4EED57B9BBB15A /* FBSDKServerConfigurationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfigurationManager+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h"; sourceTree = ""; }; + 0FF8D0E42B7F6B7193F61ED22E159643 /* FBSDKLoginManagerLoginResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManagerLoginResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h"; sourceTree = ""; }; + 0FFBBE960B9D3B54218FFE4077204089 /* KWRegisterMatchersNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRegisterMatchersNode.h; path = Classes/Nodes/KWRegisterMatchersNode.h; sourceTree = ""; }; + 1013530ECEF0D1CEFF9FC1A9EEB8F3FC /* LSNSURLHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLHook.m; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.m; sourceTree = ""; }; + 102CA30E607EB7CEA0450E020B99A59A /* BugsnagNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagNotifier.h; path = Source/Bugsnag/BugsnagNotifier.h; sourceTree = ""; }; + 103B358B0E7ADFC1C07E1A3182A247B8 /* SENServiceDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENServiceDevice.h; path = Pod/Classes/Service/SENServiceDevice.h; sourceTree = ""; }; + 108B12A57F5FDAB304D3E6545083A0FE /* ZipArchive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipArchive.swift; path = iOSDFULibrary/Classes/Utilities/ZipArchive.swift; sourceTree = ""; }; + 10C5A8F688C4E47EE12F0B75DAFF31B4 /* SENAPIPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIPreferences.m; path = Pod/Classes/API/SENAPIPreferences.m; sourceTree = ""; }; + 10F133B0AB69B6B14E37431251C76F34 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Charts/Classes/Charts/ChartViewBase.swift; sourceTree = ""; }; + 10F8B00D916C7502F128E953BC4C6C02 /* SHSProtoBuf.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SHSProtoBuf.modulemap; sourceTree = ""; }; + 1120EE82EEACB70AFBDA72644B470C6D /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + 1150FCB3B7D281D554FBADF0F9BBC6CB /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; + 117ECB5E58F2855177D4DC718148D718 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = Zip/minizip/ioapi.h; sourceTree = ""; }; + 1255E0CF0EA90644C5F4155A1E349C42 /* FBSDKAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkResolver.m; sourceTree = ""; }; + 128488C38054F586D717EEFE4A150F47 /* SEGSegmentIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGSegmentIntegration.h; path = Pod/Classes/Internal/SEGSegmentIntegration.h; sourceTree = ""; }; + 12A39994900A4BC9A0CEACF5A24A20FB /* SENDeviceMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENDeviceMetadata.m; path = Pod/Classes/Model/SENDeviceMetadata.m; sourceTree = ""; }; + 12BDB84896E11B9C04BC87C30F1727A7 /* FBSDKSettings+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKSettings+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h"; sourceTree = ""; }; + 12C118E5E3E39A6631796F642CCA6335 /* SENTrends.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTrends.m; path = Pod/Classes/Model/SENTrends.m; sourceTree = ""; }; + 12F1CC44977827F8BBD243F834942E98 /* Field.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Field.h; path = src/runtime/Classes/Field.h; sourceTree = ""; }; + 13238306B1C43C7867055268CA2F657D /* SENAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAnalytics.m; path = Pod/Classes/Analytics/SENAnalytics.m; sourceTree = ""; }; + 135043D102C75AA30101BAC3EB989A97 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 136DFC9EB9F50C8683996DEA2E99A2E6 /* FBSDKServerConfigurationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfigurationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m; sourceTree = ""; }; + 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 1415153B5A66DB82C17A725410D94BA4 /* KWBlockRaiseMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlockRaiseMatcher.h; path = Classes/Matchers/KWBlockRaiseMatcher.h; sourceTree = ""; }; + 1417666017EB86762AFA2AC6D0CFD84F /* MutableField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MutableField.m; path = src/runtime/Classes/MutableField.m; sourceTree = ""; }; + 1469C1A0D82CB693F7AC2521108CF393 /* TextFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextFormat.h; path = src/runtime/Classes/TextFormat.h; sourceTree = ""; }; + 14A9240D697CA4370259AF2724EBAA83 /* DFUPeripheralSelectorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelectorDelegate.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheralSelectorDelegate.swift; sourceTree = ""; }; + 14C5B8109B13BB75C6C86615EE9C0DB8 /* LGCharacteristic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGCharacteristic.m; path = LGBluetooth/LGCharacteristic.m; sourceTree = ""; }; + 157A512529D22EB51F08254049103506 /* SENAccount.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAccount.h; path = Pod/Classes/Model/SENAccount.h; sourceTree = ""; }; + 157D0B40A96BC232559268267CE3A25C /* SENSenseWiFiStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseWiFiStatus.h; path = Pod/Classes/Model/SENSenseWiFiStatus.h; sourceTree = ""; }; + 158B00826E913ADA8ECF519AE076B3F5 /* KSSafeCollections.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSSafeCollections.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSSafeCollections.m; sourceTree = ""; }; + 15E9A58EC2FA0B8E7E1806E7B1AE089F /* iOSDFULibrary-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iOSDFULibrary-dummy.m"; sourceTree = ""; }; + 15EB6F14E701C35227E100E0C00E90A5 /* FBSDKCoreKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-umbrella.h"; sourceTree = ""; }; + 1613FBF6DF3BF714DAAB36DDEBBF977C /* KSDynamicLinker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSDynamicLinker.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSDynamicLinker.h; sourceTree = ""; }; + 16729C10532A4A859DD48B8C2D542B5A /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 168E65A84E317B5F232002F9CB3DE015 /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Charts/Classes/Renderers/LineChartRenderer.swift; sourceTree = ""; }; + 169C39D904AAB90FEBFE281CB20B20B7 /* KWBeSubclassOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeSubclassOfClassMatcher.m; path = Classes/Matchers/KWBeSubclassOfClassMatcher.m; sourceTree = ""; }; + 16C03B5E0A641A6613D0DDE836B65155 /* NAPickerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NAPickerCell.h; path = NASources/NAPickerCell.h; sourceTree = ""; }; + 16E0E24BA079C1A220065D1EDB65EE38 /* DDMultiFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMultiFormatter.m; path = Classes/Extensions/DDMultiFormatter.m; sourceTree = ""; }; + 16FC4E490708591F17E677060E19FD0E /* Kiwi.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kiwi.xcconfig; sourceTree = ""; }; + 17175B0CD77F0BB867113288F804A887 /* SEGAliasPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAliasPayload.m; path = Pod/Classes/Integrations/SEGAliasPayload.m; sourceTree = ""; }; + 17437E1514E23069EE0787BB8CAA769F /* Kiwi-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kiwi-dummy.m"; sourceTree = ""; }; + 178FAA65CF0DE85DABDC927C91AC7C57 /* Nocilla.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nocilla.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 178FF2BDC4BD7B29A167E94544FD0639 /* BugsnagCrashReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCrashReport.m; path = Source/Bugsnag/BugsnagCrashReport.m; sourceTree = ""; }; + 179343D1E144800218C9FE56D64F8856 /* KiwiBlockMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiBlockMacros.h; path = Classes/Core/KiwiBlockMacros.h; sourceTree = ""; }; + 17ADD41EA3F05B532353E5E1EDA618F8 /* LSStubRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubRequest.m; path = Nocilla/Stubs/LSStubRequest.m; sourceTree = ""; }; + 17E28D16AFC828EAE023AEBB5C948E20 /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Charts/Classes/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; + 180B1246D297BF6F5E129F56DFAF2285 /* BFAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererView.m; path = Bolts/iOS/BFAppLinkReturnToRefererView.m; sourceTree = ""; }; + 187881157EE7CB69C1C92B37C20EC454 /* SEGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGBluetooth.h; path = Pod/Classes/Internal/SEGBluetooth.h; sourceTree = ""; }; + 18D577930CE95CCA4261A388D6C1C1C3 /* FBSDKLoginManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManager+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h"; sourceTree = ""; }; + 18D9ACFC3C2AC96A447DFB11AC3EB23D /* CGFloatType.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CGFloatType.xcconfig; sourceTree = ""; }; + 18DD6368EE2B20ED3DC43E4B02655EC2 /* SENTimelineSegment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTimelineSegment.m; path = Pod/Classes/Model/SENTimelineSegment.m; sourceTree = ""; }; + 18EBCEC9F5A4F375EE41046076DD007A /* Utilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Utilities.h; path = src/runtime/Classes/Utilities.h; sourceTree = ""; }; + 199EC598028F2B6B40C31E70E7A9D202 /* BFAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView.h; path = Bolts/iOS/BFAppLinkReturnToRefererView.h; sourceTree = ""; }; + 1A016502AA2726AB5399BA3B8B2119A2 /* KWMatcherFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatcherFactory.m; path = Classes/Core/KWMatcherFactory.m; sourceTree = ""; }; + 1A4633BD5DD68B69C96B991FE24B66A4 /* SENAPIInsight.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIInsight.m; path = Pod/Classes/API/SENAPIInsight.m; sourceTree = ""; }; + 1AC1993E6402CACF023EC014AB3756E2 /* KWStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringUtilities.h; path = Classes/Core/KWStringUtilities.h; sourceTree = ""; }; + 1ADB58A30AB4367DA57BC46CBEFBC836 /* SENSwapStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSwapStatus.h; path = Pod/Classes/Model/SENSwapStatus.h; sourceTree = ""; }; + 1B0F7B3863232C0F4F158904C1E3FB68 /* NAPickerView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NAPickerView-umbrella.h"; sourceTree = ""; }; + 1B5742B45011A8B89A0A4C0F2031AFFB /* KWSymbolicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSymbolicator.h; path = Classes/Core/KWSymbolicator.h; sourceTree = ""; }; + 1B9EB61766FC11C05A738B7E9A350200 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 1BD47FA2EA51104DC15832BEFCD26C2E /* SENCondition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENCondition.m; path = Pod/Classes/Model/SENCondition.m; sourceTree = ""; }; + 1BF6B6C623F530B0ADE1AE864C18084B /* SVWebViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SVWebViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C2D2C27946143A9678BD1BD8B11F1C5 /* SORelativeDateTransformer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SORelativeDateTransformer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1CA4DF27302FEBF5CBE4AEC7EA80EC3A /* SecureDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheralDelegate.swift; sourceTree = ""; }; + 1CB6E2BBABD8C780EDC41B467A54838C /* KWExampleSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExampleSuiteBuilder.m; path = Classes/Core/KWExampleSuiteBuilder.m; sourceTree = ""; }; + 1CCD672DDBDFB0746DF5FA22F86B0A1F /* SENAnswer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnswer.h; path = Pod/Classes/Model/SENAnswer.h; sourceTree = ""; }; + 1CF2B5742CF560662983C92059F9920E /* FBSDKErrorRecoveryConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m; sourceTree = ""; }; + 1D00FE9032C51019529EBA8F69AAC579 /* aestab.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = aestab.c; path = Zip/minizip/aes/aestab.c; sourceTree = ""; }; + 1D58A7C7AA9658B96DE93BF728411133 /* FBSDKServerConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfiguration+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h"; sourceTree = ""; }; + 1D8F5B6F669891667ABCA22851A8D0B8 /* LSNocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNocilla.m; path = Nocilla/LSNocilla.m; sourceTree = ""; }; + 1D9C3689B28A6FFF88817132B5FA889A /* SENSenseVoiceSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseVoiceSettings.m; path = Pod/Classes/Model/SENSenseVoiceSettings.m; sourceTree = ""; }; + 1DB17D53856AEC6F37174A136A5DFAFE /* NAPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NAPickerView.h; path = NASources/NAPickerView.h; sourceTree = ""; }; + 1DE4D6B098C652E7C2ABB68F50298798 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 1E8E8267834CC1C9A5F1BF7C604A5943 /* KWExampleSuiteBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleSuiteBuilder.h; path = Classes/Core/KWExampleSuiteBuilder.h; sourceTree = ""; }; + 1EA8C9F429D29B30FD517D3E08E6013F /* KSCrashSentry_Signal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_Signal.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Signal.h; sourceTree = ""; }; + 1EDE38C326B0C9D774F94439E262F693 /* SENAPINotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPINotification.m; path = Pod/Classes/API/SENAPINotification.m; sourceTree = ""; }; + 1EF186582B3F584D41B87026A93E1331 /* FBSDKMaleSilhouetteIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMaleSilhouetteIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h; sourceTree = ""; }; + 1F0E7152AC45C5C7FD619A8C0FDBB461 /* UIImage+ImageEffects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImage+ImageEffects.h"; sourceTree = ""; }; + 1F243912EE7B8A7980530B9394755198 /* SVWebViewControllerActivityChrome-iPad@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivityChrome-iPad@2x.png"; path = "SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad@2x.png"; sourceTree = ""; }; + 1F38C0FD5F401CEEE7A2898DDFD45A81 /* BFAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkTarget.m; path = Bolts/iOS/BFAppLinkTarget.m; sourceTree = ""; }; + 1F4754BD1D3D32E359DFB2AA5FCB949E /* FBSDKLoginUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginUtility.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h; sourceTree = ""; }; + 1F7C3374E8E535B2622C7B3693606251 /* SEGPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGPayload.h; path = Pod/Classes/Integrations/SEGPayload.h; sourceTree = ""; }; + 1FA4571EC4BCF5A6F79E75F1C4298201 /* NSData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSData.swift; path = iOSDFULibrary/Classes/Utilities/NSData.swift; sourceTree = ""; }; + 1FBAD0B0A37A9499F453632CCAD49715 /* CocoaLumberjack.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.xcconfig; sourceTree = ""; }; + 1FCB1CE2BBCB4EA18DF751BC7B9003AC /* BFWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFWebViewAppLinkResolver.h; path = Bolts/iOS/BFWebViewAppLinkResolver.h; sourceTree = ""; }; + 1FDCC5A57BB7D1BD0BDFABB3A6911CA4 /* KWHaveMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWHaveMatcher.m; path = Classes/Matchers/KWHaveMatcher.m; sourceTree = ""; }; + 1FE603BBB8A791F77CE20556BF34289E /* ChartRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartRange.swift; path = Charts/Classes/Highlight/ChartRange.swift; sourceTree = ""; }; + 1FFAFA65F78EED714809980C431F233D /* FBSDKCloseIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCloseIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m; sourceTree = ""; }; + 201493C758413566BC75C1E6FA95C451 /* KWUserDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWUserDefinedMatcher.m; path = Classes/Matchers/KWUserDefinedMatcher.m; sourceTree = ""; }; + 20378B4CF3E79FC3266B0D5CC29EA335 /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Charts/Classes/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; + 2054A824AD715E77D855119B82CEEFD3 /* FBSDKTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m; sourceTree = ""; }; + 207E1E6317C4ED0DA0FB90B954FF45AC /* FBSDKLoginManagerLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLogger.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m; sourceTree = ""; }; + 2080CCF73CCE217085343EEA9CF93DA5 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; + 20A446714ED9D089EBF19A50A27819E7 /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Charts/Classes/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; + 20B202493D1DDDCD89417EAB06B075B0 /* SENPillMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPillMetadata.m; path = Pod/Classes/Model/SENPillMetadata.m; sourceTree = ""; }; + 20CCD2CBAACDED93F1C5DBBAEB831C3F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 20D7EB3E7AEB235451731EDCFC29D3E7 /* SENSenseMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseMetadata.m; path = Pod/Classes/Model/SENSenseMetadata.m; sourceTree = ""; }; + 20E70512C3FE1C9529CB4A76C8650B9A /* KWNull.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNull.m; path = Classes/Core/KWNull.m; sourceTree = ""; }; + 20FBCD129AE8EF6F7165704DAFE432C4 /* FBSDKAppEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEvents.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppEvents.h; sourceTree = ""; }; + 210538C99A7800DC6EBE06C85F0CCFB8 /* SENSleepSoundDurations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundDurations.m; path = Pod/Classes/Model/SENSleepSoundDurations.m; sourceTree = ""; }; + 2131D24970D52A5961E65D0AABF0CA73 /* da.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = da.lproj; path = SVWebViewController/da.lproj; sourceTree = ""; }; + 2175CA1D1AF5DC51FDB903E9ADB88EC0 /* es-ES.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "es-ES.lproj"; path = "SVWebViewController/es-ES.lproj"; sourceTree = ""; }; + 21956A82AF3D8BDD286799D63D8FF209 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + 21AAD66A77BEBCE185B9704AA2C72EC6 /* SENQuestion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENQuestion.h; path = Pod/Classes/Model/SENQuestion.h; sourceTree = ""; }; + 21C9E6C6C368258FE15B3B33A7C895ED /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2265AA51C2046E171043AF808512ED79 /* KSCrashReportWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportWriter.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReportWriter.h; sourceTree = ""; }; + 2271DF5221B362C529B87179CA152846 /* ExtensionField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtensionField.h; path = src/runtime/Classes/ExtensionField.h; sourceTree = ""; }; + 22A2A5BF931391F6B0816EFA293ED748 /* MSDynamicsDrawerViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MSDynamicsDrawerViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2319FF9B83BC200A79114E0DDBF06EF4 /* MSDynamicsDrawerViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MSDynamicsDrawerViewController-dummy.m"; sourceTree = ""; }; + 233BD021922C9BAF99E2568932DE5EA3 /* FBSDKTypeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTypeUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h; sourceTree = ""; }; + 23A2CB868492E07B4E11D59DF62C0F6F /* DDTTYLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDTTYLogger.m; path = Classes/DDTTYLogger.m; sourceTree = ""; }; + 23CD1ED073804FB534DE10938A2AAB56 /* SENAlarmCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAlarmCollection.h; path = Pod/Classes/Model/SENAlarmCollection.h; sourceTree = ""; }; + 23CE39A7D99F68679286EDCFD6B44759 /* KWDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWDeviceInfo.h; path = Classes/Core/KWDeviceInfo.h; sourceTree = ""; }; + 23D6B991A588BED5011F6109C3DCB8AF /* pwd2key.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = pwd2key.c; path = Zip/minizip/aes/pwd2key.c; sourceTree = ""; }; + 23DB7FE8BFA98EF3D457D85E7FB697B8 /* FBSDKAccessTokenCacheV3_17.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_17.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m; sourceTree = ""; }; + 23DD2D50796358B39F913E73ECEA2947 /* FBSDKURLOpening.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLOpening.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h; sourceTree = ""; }; + 23F794C220CA11EDACFAB2F06256A4A9 /* FBSDKGraphRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m; sourceTree = ""; }; 2428629412D16F2C0282266DF35B50CB /* Pods-SenseApp-RoomConditionsExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SenseApp-RoomConditionsExtension-dummy.m"; sourceTree = ""; }; - 2430F14AF4E02491DB99ECEF0EB9D7B8 /* KWStringContainsMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringContainsMatcher.h; path = Classes/Matchers/KWStringContainsMatcher.h; sourceTree = ""; }; - 24C040B68C3BAF84AF8781072235D9D9 /* CGFloatType.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CGFloatType.xcconfig; sourceTree = ""; }; - 24CBB6B4CB79C7920FD6F3483A20EF26 /* SENAPIAlarms.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAlarms.h; path = Pod/Classes/API/SENAPIAlarms.h; sourceTree = ""; }; - 250102B2641534FFFF30D00214484F3B /* KWIntercept.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWIntercept.m; path = Classes/Stubbing/KWIntercept.m; sourceTree = ""; }; - 251EC77501ACBB7288DA893D54E5DE50 /* NSJSONSerialization+RemovingNulls.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSJSONSerialization+RemovingNulls.m"; path = "Source/NSJSONSerialization+RemovingNulls.m"; sourceTree = ""; }; - 2529986B25C4D9A988086319005BCFA3 /* FXKeychain-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FXKeychain-umbrella.h"; sourceTree = ""; }; - 253D01D55616A1B7E029A0374A9CF9AA /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Charts/Classes/Charts/BubbleChartView.swift; sourceTree = ""; }; - 25688C8318A800941558DE9D7B6CC38B /* NSRegularExpression+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRegularExpression+Matcheable.h"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.h"; sourceTree = ""; }; - 256BAA4F9351B8A26A38D32BDF81261B /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 258972CDDC074D01FE00281ABD84DBB8 /* FBSDKAppLinkUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkUtility.m; sourceTree = ""; }; - 25ADEEF93515CFBCA1E0CAFD839F5D46 /* sha1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sha1.h; path = Zip/minizip/aes/sha1.h; sourceTree = ""; }; - 25CC3C73DB82D655907AC89B725CE096 /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = RealmSwift/Util.swift; sourceTree = ""; }; - 25D614E54E91170B89219ABE409F1A20 /* FBSDKLoginKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.xcconfig; sourceTree = ""; }; - 25DADC976206B05A4E61599B67744C10 /* ProtocolBuffers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ProtocolBuffers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2458305175DE118921D31A89BEC2FDBB /* KWConformToProtocolMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWConformToProtocolMatcher.h; path = Classes/Matchers/KWConformToProtocolMatcher.h; sourceTree = ""; }; + 24D2967C42884D8E1829D31633DF1539 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2507016EAD8568CEE8D002D8A2751B8B /* LSASIHTTPRequestAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSASIHTTPRequestAdapter.h; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h; sourceTree = ""; }; + 251B8765F279E439B91FF6F2DE423526 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Charts/Classes/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; + 257EC5609446DEFC517C05B961224127 /* KWMatching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatching.h; path = Classes/Core/KWMatching.h; sourceTree = ""; }; + 26246BECFAC539F5BE23BD7DB8CBDF1E /* KSCrashReportStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportStore.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReportStore.h; sourceTree = ""; }; 262E1792ECF489C93BB854AA12856710 /* Pods-SenseApp-Sense-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SenseApp-Sense-resources.sh"; sourceTree = ""; }; - 263B6E237A87CBC9668E1399050AE914 /* SecureDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUService.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Services/SecureDFUService.swift; sourceTree = ""; }; - 266E37D12C6FB3B5DC302EA90C7DFD4A /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Charts/Classes/Renderers/PieChartRenderer.swift; sourceTree = ""; }; - 268D063A6883AAFA4B2184579DC80DEC /* KWPendingNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWPendingNode.m; path = Classes/Nodes/KWPendingNode.m; sourceTree = ""; }; - 2690FC1B30A2D2D19DFF0EF41AA03E01 /* SEGLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGLocation.h; path = Pod/Classes/Internal/SEGLocation.h; sourceTree = ""; }; - 271D9C8810174C3C23632B09561A4CB9 /* KSCrashSentry_MachException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_MachException.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_MachException.h; sourceTree = ""; }; - 271FAF678376BE95A08994767E77DBBD /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = RealmSwift/List.swift; sourceTree = ""; }; - 27222261D0E6C37F341D434014800C9F /* SENAPIExpansion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIExpansion.m; path = Pod/Classes/API/SENAPIExpansion.m; sourceTree = ""; }; - 2743333FCBD6A81D45F5025E40D48BDB /* SENSleepSoundStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundStatus.h; path = Pod/Classes/Model/SENSleepSoundStatus.h; sourceTree = ""; }; - 27A5CFC6EF5EC568CF76AE4066995FC7 /* Services.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Services.h; path = Pod/Classes/Service/Services.h; sourceTree = ""; }; - 27AF0EAF2CAFBCCAB587A437853FF1E5 /* SENAPIShare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIShare.h; path = Pod/Classes/API/SENAPIShare.h; sourceTree = ""; }; - 280582CE66C4AE1AC5C09C4E389AA9BE /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Charts/Classes/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; - 28354B33C53B68B3861A74EAECA42164 /* FBSDKAppEventsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsState.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsState.h; sourceTree = ""; }; - 2874C89EA5EBAA35B0A799C1A3CAEB32 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 2887F8172CD2C634B8FDC08C714BD553 /* RealmScatterDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmScatterDataSet.swift; path = ChartsRealm/Classes/Data/RealmScatterDataSet.swift; sourceTree = ""; }; - 289C3CBA88646F173BCD450FCF1D275F /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; - 28A7D26D4AC87B19F73E601A08E8C79C /* NALabelCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NALabelCell.m; path = NASources/NALabelCell.m; sourceTree = ""; }; - 28A8D8869E24B2D51141E5A393CDFD66 /* PBArray.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PBArray.m; path = src/runtime/Classes/PBArray.m; sourceTree = ""; }; - 28B74ADD60DB542478B8887878D37BEA /* NAPickerView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NAPickerView-umbrella.h"; sourceTree = ""; }; - 28DE4D734A1BC4136083B5D672517EAC /* iOSDFULibrary-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-umbrella.h"; sourceTree = ""; }; - 28E86BA05425BBA62D2C1C26C9911362 /* KSSignalInfo.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSSignalInfo.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSSignalInfo.c; sourceTree = ""; }; - 2948E157D4E5DD98074295C9BF2CCDA4 /* ChartPlatform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartPlatform.swift; path = Charts/Classes/Utils/ChartPlatform.swift; sourceTree = ""; }; - 295440090B8CA95FD8E7292D0BF14C6D /* SEGLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGLocation.m; path = Pod/Classes/Internal/SEGLocation.m; sourceTree = ""; }; - 29600C36BEFAE8B37668222A60ACA6AA /* FBSDKSettings+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKSettings+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h"; sourceTree = ""; }; - 2997C72CBD2E2EEAEDEE841C252B2185 /* KSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSLogger.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSLogger.h; sourceTree = ""; }; - 29B5839545D825BF05E4ABD2A4FD7902 /* NAPickerView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NAPickerView-prefix.pch"; sourceTree = ""; }; - 29E037CFD51686027D92461BECAA80CD /* Message.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Message.h; path = src/runtime/Classes/Message.h; sourceTree = ""; }; - 2A3296304D2422064400F80D1EA9C9E2 /* KSObjCApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSObjCApple.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSObjCApple.h; sourceTree = ""; }; - 2A84362EAE244EA14455DA44B16BDA27 /* KWFutureObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFutureObject.m; path = Classes/Core/KWFutureObject.m; sourceTree = ""; }; - 2ABF28B21E98F739F501AB6A42DD0A19 /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; - 2AC838FD7A644F3A846B795C7C0EBBAC /* SENAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnalytics.h; path = Pod/Classes/Analytics/SENAnalytics.h; sourceTree = ""; }; - 2AE3618AF3A807E30640D29B9D62A0FD /* KWNilMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNilMatcher.m; path = Classes/Matchers/KWNilMatcher.m; sourceTree = ""; }; - 2AED365EBD19F96BDBA1E25E024D7E26 /* FBSDKGraphRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h; sourceTree = ""; }; - 2AF7B706B95365925BA0AE7DF234FCFC /* SENSenseMessage.pb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseMessage.pb.m; path = Pod/Classes/BLE/SENSenseMessage.pb.m; sourceTree = ""; }; - 2B04F16632A8A8BC661A23FAEA803404 /* RLMRealmUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmUtil.mm; path = Realm/RLMRealmUtil.mm; sourceTree = ""; }; - 2B1EF599B587AAD87E70A9B4AD43EA38 /* pwd2key.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = pwd2key.c; path = Zip/minizip/aes/pwd2key.c; sourceTree = ""; }; - 2B4628CE64078C60122F7FDF0480B684 /* FBSDKServerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h; sourceTree = ""; }; - 2B5E74CA2A074C3F13CEC87EFA252774 /* markdown_parser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = markdown_parser.m; sourceTree = ""; }; - 2B675485F28C9736A967223AF34FC024 /* SVWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewController.m; path = SVWebViewController/SVWebViewController.m; sourceTree = ""; }; - 2BC3E3FC8FBF455A73B91A3C25C02720 /* SENTrendsGraph.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTrendsGraph.m; path = Pod/Classes/Model/SENTrendsGraph.m; sourceTree = ""; }; - 2BE3000B2EFC03130811B011E36D2291 /* KSCrashSentry_Signal.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry_Signal.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Signal.c; sourceTree = ""; }; - 2BEB4854EF31AF4FEC6FE6A0685729FD /* SecureDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceInitiator.swift; sourceTree = ""; }; - 2C5051891CB782676EF93C0714FC8A18 /* LSMatcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSMatcheable.h; path = Nocilla/Matchers/LSMatcheable.h; sourceTree = ""; }; - 2C556B12960500C187E7C7094222477F /* GeneratedMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GeneratedMessage.m; path = src/runtime/Classes/GeneratedMessage.m; sourceTree = ""; }; - 2C5F51770EAA8583FC653A0FCC4DEBD9 /* AttributedMarkdown-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AttributedMarkdown-prefix.pch"; sourceTree = ""; }; - 2C71303AEC4231931093C3E72FE1E3FC /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 2C7905D25FCB5938BEF9953ED273D55F /* BFTask+Exceptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Exceptions.m"; path = "Bolts/Common/BFTask+Exceptions.m"; sourceTree = ""; }; - 2C9012CD72EBAA464DDACCCBCF3BD9D6 /* iOSDFULibrary-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-prefix.pch"; sourceTree = ""; }; - 2CBE9638C7535B5A1D07345A235BE6C8 /* RLMObjectStore.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectStore.mm; path = Realm/RLMObjectStore.mm; sourceTree = ""; }; + 268B1B39E5E15EB94D8F9A955095AFAF /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; + 272C6160E742755DEC8FB3F2C4609C36 /* SENAPISleepSounds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISleepSounds.h; path = Pod/Classes/API/SENAPISleepSounds.h; sourceTree = ""; }; + 274DFFA7FB3CB2C289E47EE2D2E9E492 /* BarChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartHighlighter.swift; path = Charts/Classes/Highlight/BarChartHighlighter.swift; sourceTree = ""; }; + 2757CFB5CBAA4B88872867C2C7B06649 /* SENLocalPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENLocalPreferences.h; path = Pod/Classes/Model/SENLocalPreferences.h; sourceTree = ""; }; + 278F3039D70C10B865E73E2A39EF878C /* NSProxy+KiwiVerifierAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSProxy+KiwiVerifierAdditions.m"; path = "Classes/Core/NSProxy+KiwiVerifierAdditions.m"; sourceTree = ""; }; + 27BB3CCDB5C3766D6C07FCD7F0ADB82D /* KSString.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSString.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSString.c; sourceTree = ""; }; + 27C8FBF97E749435DF4F0152B722E0DF /* SENSensor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSensor.h; path = Pod/Classes/Model/SENSensor.h; sourceTree = ""; }; + 27F5BB66498F247594D268A221C78808 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 2818C263556F2A9E90B5C9AFC588D1F5 /* FXKeychain-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FXKeychain-prefix.pch"; sourceTree = ""; }; + 286BC984A80ABB7228ED7F272B72EEDF /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + 286BDBAC72AA751062B90DB32E87663C /* ChartXAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRendererRadarChart.swift; path = Charts/Classes/Renderers/ChartXAxisRendererRadarChart.swift; sourceTree = ""; }; + 28CA2D9A4C560401E18541A1CDA7AA20 /* FBSDKOrganicDeeplinkHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKOrganicDeeplinkHelper.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKOrganicDeeplinkHelper.m; sourceTree = ""; }; + 28CD68C2FFBA07F44ACC8A15161C7BEA /* FBSDKButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m; sourceTree = ""; }; + 28F94C48734A41114106DC04AFD23F7F /* FBSDKErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m; sourceTree = ""; }; + 2918968283F44207633D746FFFE42143 /* SENDFUStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENDFUStatus.h; path = Pod/Classes/Model/SENDFUStatus.h; sourceTree = ""; }; + 292A2DA2D66D340A98E9835EF141BC95 /* KWIntercept.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWIntercept.h; path = Classes/Stubbing/KWIntercept.h; sourceTree = ""; }; + 293A9493CDC3F6F9CC651F580C5A1DB3 /* SEGIdentifyPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGIdentifyPayload.m; path = Pod/Classes/Integrations/SEGIdentifyPayload.m; sourceTree = ""; }; + 296F68D613A9301963A54573178CF63B /* SVWebViewControllerNext@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerNext@2x.png"; path = "SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext@2x.png"; sourceTree = ""; }; + 29AF42ED7441FE0FB92725F1A36EEBB1 /* DDDispatchQueueLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDDispatchQueueLogFormatter.m; path = Classes/Extensions/DDDispatchQueueLogFormatter.m; sourceTree = ""; }; + 2A275D2A2635E9FFECD76DF7D8FBEDBA /* SENSleepSoundStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundStatus.h; path = Pod/Classes/Model/SENSleepSoundStatus.h; sourceTree = ""; }; + 2AD743EFDE6B6BEAEC6497E9AB2BF8CD /* FBSDKProfile+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKProfile+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h"; sourceTree = ""; }; + 2AE633F115BF716034D81DBB14F6355C /* CGFloatType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CGFloatType.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B10797B5F2DE2E11B088983B822967E /* ARCSafe_MemMgmt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ARCSafe_MemMgmt.h; path = KSCrash/Source/KSCrash/Recording/Tools/ARCSafe_MemMgmt.h; sourceTree = ""; }; + 2B615BB0F0330CB731738E7214F94219 /* FBSDKColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKColor.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m; sourceTree = ""; }; + 2BD2FBE21678403A7AF2783AEDB11A41 /* KSCrashSentry_User.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_User.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_User.h; sourceTree = ""; }; + 2C2A4E41C2EA67D3151AC851726EDDF5 /* AttributedMarkdown-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AttributedMarkdown-prefix.pch"; sourceTree = ""; }; + 2C65BC73508A3018B573A86518C769E2 /* DDASLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogger.m; path = Classes/DDASLLogger.m; sourceTree = ""; }; + 2C79BEE3F9C4E4528482337DDC5F6F00 /* brg_endian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = brg_endian.h; path = Zip/minizip/aes/brg_endian.h; sourceTree = ""; }; + 2CB894AE3E9D213449BF0EA77B843187 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Charts/Classes/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; + 2CC2BDD0D9F9E36531C28FB8BC6C3127 /* SENSensorStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSensorStatus.h; path = Pod/Classes/Model/SENSensorStatus.h; sourceTree = ""; }; 2CDFC3770EE604FE4884E238D2FF601C /* Pods-SenseApp-RoomConditionsExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-RoomConditionsExtension.release.xcconfig"; sourceTree = ""; }; - 2D7023EBE773E75FE5A2C06A22C166A7 /* RLMSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema.h; path = include/RLMSchema.h; sourceTree = ""; }; - 2D7200B60EC6D284FDE491DC1FB8D751 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; - 2D781BA5638003AB2B5ACE9B80FC9363 /* SENTrends.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTrends.h; path = Pod/Classes/Model/SENTrends.h; sourceTree = ""; }; - 2D8708A4FB1C905D339F5BA3AA860923 /* DDLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLog.h; path = Classes/DDLog.h; sourceTree = ""; }; - 2D8AAACFBC67DB2EAD6544A9609EC5D5 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2DE47B1235F6A11ADB1A53C9D9BF60B5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2EDA071190ED33394E0D695AC4E61C6B /* Charts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Charts-dummy.m"; sourceTree = ""; }; - 2EEBD9F1687B0620EC7BB066E3BDBD2A /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Charts/Classes/Charts/BarChartView.swift; sourceTree = ""; }; - 2EF9FA8F0EA981BF7F9C5F88168CF579 /* RealmRadarData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmRadarData.swift; path = ChartsRealm/Classes/Data/RealmRadarData.swift; sourceTree = ""; }; - 2F1366E53AEF4B25B11AFC54CF6B5562 /* SecureDFUServiceDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceDelegate.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceDelegate.swift; sourceTree = ""; }; - 2F2AFA5E5B0143B940801E67E8EF94B1 /* FBSDKCoreKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-umbrella.h"; sourceTree = ""; }; - 2F32C89EBA3DDFBD3FA65A5B18F1A713 /* LSASIHTTPRequestHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSASIHTTPRequestHook.h; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.h; sourceTree = ""; }; - 2F3F1B27A8FB48B85FD7CE63A1FFA5BD /* RLMAnalytics.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAnalytics.mm; path = Realm/RLMAnalytics.mm; sourceTree = ""; }; - 2F8E1CE134F23713530CA294632D5098 /* RealmLineData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmLineData.swift; path = ChartsRealm/Classes/Data/RealmLineData.swift; sourceTree = ""; }; - 2FEC7C9FEB834149ECA850E017AADC32 /* KSMach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSMach.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach.h; sourceTree = ""; }; - 301477D4BCABE9A2A0FBEBBEBC98542E /* FBSDKKeychainStoreViaBundleID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStoreViaBundleID.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m; sourceTree = ""; }; - 3025464D4B1E2E30718CB0EF2A19A342 /* RLMRealm_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Private.h; path = include/RLMRealm_Private.h; sourceTree = ""; }; - 305EBF95F8DC4875A2E84657BC94C421 /* KWAllTestsSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAllTestsSuite.m; path = Classes/Config/KWAllTestsSuite.m; sourceTree = ""; }; - 306C2064D9FDEE09F3E3EEA0AEF6F1EA /* UIImage+ImageEffects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ImageEffects.m"; sourceTree = ""; }; - 30750BFCC9674FBE36A2B6CE2C105549 /* Utilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Utilities.m; path = src/runtime/Classes/Utilities.m; sourceTree = ""; }; - 307E2D8F7C0B024D603C98F16D8FF3AA /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Charts/Classes/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; - 307E9CB2EDA641AF0D44C5C9ABBB06D4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 309BD224732EDAB0A2F7E9826CAB3BE9 /* LGCharacteristic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGCharacteristic.h; path = LGBluetooth/LGCharacteristic.h; sourceTree = ""; }; + 2D1EE5B9BD79692F1B032B55FED2399F /* NSJSONSerialization+RemovingNulls.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSJSONSerialization+RemovingNulls.m"; path = "Source/NSJSONSerialization+RemovingNulls.m"; sourceTree = ""; }; + 2D9CBE43CDD883F76008C74100FBAE83 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Charts/Classes/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; + 2DD7883B0017BEC47AB57158C1FA4F6A /* FBSDKButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKButton.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h; sourceTree = ""; }; + 2E32E3649C5910A056CEFE9932C35A42 /* SEGBluetooth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGBluetooth.m; path = Pod/Classes/Internal/SEGBluetooth.m; sourceTree = ""; }; + 2E3A0C0986FA43D5BFB98DDC4850F37F /* ZendeskSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZendeskSDK.framework; sourceTree = ""; }; + 2E3EB19CF459D83889124F4219854EE9 /* ConcreteExtensionField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ConcreteExtensionField.m; path = src/runtime/Classes/ConcreteExtensionField.m; sourceTree = ""; }; + 2E499F30C3EC67C802D5090A88C418DE /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; + 2E88FDFB3D10A018204CD31FF848B2C2 /* ChartViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewPortHandler.swift; path = Charts/Classes/Utils/ChartViewPortHandler.swift; sourceTree = ""; }; + 2EA522A34D494369588DC424E3BE34A6 /* DFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUServiceInitiator.swift; sourceTree = ""; }; + 2ED6019008E4C0B4EB33078314CF8BE6 /* BugsnagConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagConfiguration.m; path = Source/Bugsnag/BugsnagConfiguration.m; sourceTree = ""; }; + 2F0D64E3601E7231337F22FB0308713C /* SENSleepSoundDurations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundDurations.h; path = Pod/Classes/Model/SENSleepSoundDurations.h; sourceTree = ""; }; + 2F16FE05CE6FC0A0A8FA158B370CAB9B /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + 2F214394C0485371E194EA56958FF704 /* AttributedMarkdown.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AttributedMarkdown.xcconfig; sourceTree = ""; }; + 2F3E49F8020BE6057ECD9C892FD27F50 /* DDAbstractDatabaseLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDAbstractDatabaseLogger.m; path = Classes/DDAbstractDatabaseLogger.m; sourceTree = ""; }; + 2F626315F30E7A0962B2623DBD460988 /* SEGSegmentIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGSegmentIntegration.m; path = Pod/Classes/Internal/SEGSegmentIntegration.m; sourceTree = ""; }; + 2F703851ED8C3EAA394E858DA8AC16F8 /* SENAppStats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAppStats.h; path = Pod/Classes/Model/SENAppStats.h; sourceTree = ""; }; + 2FC27437F74CAA2A4F7AA4BEB217957B /* SENAPIExpansion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIExpansion.m; path = Pod/Classes/API/SENAPIExpansion.m; sourceTree = ""; }; + 2FE23A993C4C1090E1CDA57251710606 /* SoftdeviceBootloaderInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SoftdeviceBootloaderInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/SoftdeviceBootloaderInfo.swift; sourceTree = ""; }; + 2FF1E7D89366342A8CF9EE0B0DCA9C02 /* aestab.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aestab.h; path = Zip/minizip/aes/aestab.h; sourceTree = ""; }; + 30233AAFF56A1C8795963B6244C2C936 /* KWMessagePattern.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMessagePattern.m; path = Classes/Core/KWMessagePattern.m; sourceTree = ""; }; + 3036D4112488A0AD401B373418122EEE /* KWRegisterMatchersNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRegisterMatchersNode.m; path = Classes/Nodes/KWRegisterMatchersNode.m; sourceTree = ""; }; + 305D04DEE78E70DF2B7009D7299EC15F /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Charts/Classes/Charts/BarChartView.swift; sourceTree = ""; }; + 3089D73EE4A415E1964BB9CF250BCB4C /* SENAPIExpansion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIExpansion.h; path = Pod/Classes/API/SENAPIExpansion.h; sourceTree = ""; }; + 30C2ABAF468B78660BAC589B7727DC7E /* ASIHTTPRequestStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ASIHTTPRequestStub.m; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m; sourceTree = ""; }; 30ED9B3030ADC892B5CC6F8F2ED567BD /* Pods-SenseApp-Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SenseApp-Tests-umbrella.h"; sourceTree = ""; }; - 3119DB2C9924D0EB34FC7C1D07AD6D73 /* FBSDKErrorRecoveryConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m; sourceTree = ""; }; - 311A2B2ADE06B57A046EBFFF7EDC3538 /* SENSenseMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseMetadata.h; path = Pod/Classes/Model/SENSenseMetadata.h; sourceTree = ""; }; - 3131AA6BB1825657038B27B52388EF1E /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Charts/Classes/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; - 318AD9D95E3D61B34F9E41FAE77C5C66 /* SoftdeviceBootloaderInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SoftdeviceBootloaderInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/SoftdeviceBootloaderInfo.swift; sourceTree = ""; }; - 31DDB832F39B94D22A96572AA28E031B /* ARCSafe_MemMgmt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ARCSafe_MemMgmt.h; path = KSCrash/Source/KSCrash/Recording/Tools/ARCSafe_MemMgmt.h; sourceTree = ""; }; - 322F1CA0447465952BB9CC4720DBEEF4 /* GeneratedMessageBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GeneratedMessageBuilder.m; path = src/runtime/Classes/GeneratedMessageBuilder.m; sourceTree = ""; }; - 3271DE4046C0E295B9ACEF6734EB4379 /* KWSuiteConfigurationBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSuiteConfigurationBase.h; path = Classes/Config/KWSuiteConfigurationBase.h; sourceTree = ""; }; - 328EBA3C72607647E986829A56A5E492 /* IntelHex2BinConverter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IntelHex2BinConverter.m; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.m; sourceTree = ""; }; - 32F172F72E1A8490664556E91D4AD45B /* SENSleepSounds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSounds.h; path = Pod/Classes/Model/SENSleepSounds.h; sourceTree = ""; }; - 32F75FFE1483BAD2A9B1F1E6F2DEC3ED /* KWExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExample.m; path = Classes/Core/KWExample.m; sourceTree = ""; }; - 332F394177140A0660C6F663A766B9D1 /* KWBeSubclassOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeSubclassOfClassMatcher.h; path = Classes/Matchers/KWBeSubclassOfClassMatcher.h; sourceTree = ""; }; - 3331DCF2E8B41E64526109D6710C8D54 /* FBSDKCoreKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKCoreKit.xcconfig; sourceTree = ""; }; - 339DF02C0CC9AC3812A5411FADDB1872 /* markdown_output.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = markdown_output.m; sourceTree = ""; }; - 33E16B94637426DD8B521BBE5ADE837D /* KSZombie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSZombie.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSZombie.h; sourceTree = ""; }; + 31410DA3B995B441BD00103988007BA9 /* NSURLRequest+LSHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+LSHTTPRequest.h"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.h"; sourceTree = ""; }; + 314999E1715083BFF51274A6219BE775 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 31614EC17C1634C477A707935176004E /* LSHTTPClientHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPClientHook.h; path = Nocilla/Hooks/LSHTTPClientHook.h; sourceTree = ""; }; + 31DE0A3FE8004360305FCD43B2B35A0F /* KWMessageTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMessageTracker.m; path = Classes/Core/KWMessageTracker.m; sourceTree = ""; }; + 329C361316CF8102A2543074CAF2DD04 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 329D9A466D625A0457B170849DAC81F5 /* KWCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCallSite.h; path = Classes/Core/KWCallSite.h; sourceTree = ""; }; + 329ECC8311A4F3EAC0BEB25AC540B704 /* KWStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStub.m; path = Classes/Stubbing/KWStub.m; sourceTree = ""; }; + 32BEFB96E2614FF65FDDF14C81E8AF17 /* NSJSONSerialization-NSNullRemoval-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization-NSNullRemoval-umbrella.h"; sourceTree = ""; }; + 335013E67B25FDF2F329024853F4B7B4 /* LSHTTPClientHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPClientHook.m; path = Nocilla/Hooks/LSHTTPClientHook.m; sourceTree = ""; }; + 3359706735C31C851683C69413394ECA /* SENTrends.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTrends.h; path = Pod/Classes/Model/SENTrends.h; sourceTree = ""; }; + 338ED2C90049EC473778979E9607192B /* SENAPISpeech.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISpeech.h; path = Pod/Classes/API/SENAPISpeech.h; sourceTree = ""; }; + 33CEA6A9F6B648704C0D5675E6B7AEEF /* ChartComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartComponentBase.swift; path = Charts/Classes/Components/ChartComponentBase.swift; sourceTree = ""; }; 3400DDE4CCCB6608BE14D4C4D6F1D1D4 /* Pods-SenseApp-RoomConditionsExtension.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-RoomConditionsExtension.beta.xcconfig"; sourceTree = ""; }; - 344AEE2192AEC655787DAF36F912DB85 /* _FBSDKLoginRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKLoginRecoveryAttempter.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m; sourceTree = ""; }; - 347E7A4754F4C8F04FA4B5158345D216 /* SENSensorStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSensorStatus.m; path = Pod/Classes/Model/SENSensorStatus.m; sourceTree = ""; }; - 34A220D7A86A2205A220F38D442D7C14 /* RLMObjectBase_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Dynamic.h; path = include/RLMObjectBase_Dynamic.h; sourceTree = ""; }; - 34A2B11FA2B504E89F88996817BE108A /* ExtendableMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtendableMessage.h; path = src/runtime/Classes/ExtendableMessage.h; sourceTree = ""; }; - 34C4653CF80652A9EE0E0D943D4AFC74 /* BLE.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BLE.h; path = Pod/Classes/BLE/BLE.h; sourceTree = ""; }; - 34F4577B72E2A217DDC844D53E8644DF /* FXKeychain.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FXKeychain.xcconfig; sourceTree = ""; }; - 350A9813498B8BA8E395D25069CB0B49 /* DDContextFilterLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDContextFilterLogFormatter.h; path = Classes/Extensions/DDContextFilterLogFormatter.h; sourceTree = ""; }; - 352688CA996308E146C72F275037790C /* RLMConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMConstants.h; path = include/RLMConstants.h; sourceTree = ""; }; - 35B30D1774BD1708AC810597124BF185 /* CGFloatType-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGFloatType-prefix.pch"; sourceTree = ""; }; - 360215B27D8ACD8FC6F32AE1CDE860E8 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Charts/Classes/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; - 362CDCFE77556406F9B21FA11D6B6430 /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Charts/Classes/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; - 3664EF64EBB999443CB5DB44AAE2B2B1 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 367738D81AEBA2DE2A02CC551AA91F5D /* BFTask+Exceptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Exceptions.h"; path = "Bolts/Common/BFTask+Exceptions.h"; sourceTree = ""; }; - 36DC9F89D1FD632E59BCCD2786F12DB0 /* SenseKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SenseKit-umbrella.h"; sourceTree = ""; }; - 37013046A154CEF2B86D4029D6F1AB9B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 372730A576B11CF21D530093195E52E7 /* FBSDKLoginTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m; sourceTree = ""; }; - 37394911A3AF8E38CA88B4C3443D7B42 /* FBSDKCoreKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-prefix.pch"; sourceTree = ""; }; - 3768AB85D4571640B894A0B8D5FE7370 /* SENInsight.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENInsight.m; path = Pod/Classes/Model/SENInsight.m; sourceTree = ""; }; - 3771A3F3495620D6215F1A5E8FF62289 /* KSCrashSentry_NSException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashSentry_NSException.m; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_NSException.m; sourceTree = ""; }; - 378AC9BA82B9A26A81AFF9CAC6AD02D0 /* DDTTYLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDTTYLogger.m; path = Classes/DDTTYLogger.m; sourceTree = ""; }; - 379561B30CCAB3FB1EB207E401FE70E3 /* Aliases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Aliases.swift; path = RealmSwift/Aliases.swift; sourceTree = ""; }; - 382C6AB7BD5403500A3596D3DB318BE8 /* KSCrashSentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry.h; sourceTree = ""; }; - 38505529998FB202659CA539EC306551 /* Kiwi-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kiwi-umbrella.h"; sourceTree = ""; }; - 38AAAC7D834864F18DBC14FA0F8167C5 /* NSInvocation+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+KiwiAdditions.m"; path = "Classes/Core/NSInvocation+KiwiAdditions.m"; sourceTree = ""; }; - 38E098F2FAC2D57E85E3E9A437427A9E /* RLMRealmConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmConfiguration.mm; path = Realm/RLMRealmConfiguration.mm; sourceTree = ""; }; - 38E0FA76EACC964A3F7330D4210DF747 /* FXKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FXKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 39031D92AB15EAC70B1ADEE5B5FC39E8 /* SENAPIQuestions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIQuestions.m; path = Pod/Classes/API/SENAPIQuestions.m; sourceTree = ""; }; - 3945A7783E097BDC44BF8B4C9A2EB28D /* FBSDKServerConfigurationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfigurationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h; sourceTree = ""; }; - 394C5BB9EB063884B08BCEF26C3B4E82 /* SVWebViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVWebViewController-prefix.pch"; sourceTree = ""; }; - 394CDCA718E8E592358D3A7BF05C2F43 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 394E0EB34426E65DB842FF98AB517BEC /* FBSDKWebDialog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialog.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m; sourceTree = ""; }; - 395C8AE3248EE3357FAB8DD25746154C /* FBSDKBridgeAPICrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPICrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h; sourceTree = ""; }; - 396816D9E5F31F28CF8E53ACD9B5EAF0 /* KWGenericMatchEvaluator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatchEvaluator.h; path = Classes/Matchers/KWGenericMatchEvaluator.h; sourceTree = ""; }; - 398DD7E08BE607EACECBD0E8D169569E /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unzip.h; path = Zip/minizip/unzip.h; sourceTree = ""; }; + 34A828EA9B38152969146189DAD0DBD2 /* FBSDKLoginTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h; sourceTree = ""; }; + 34EC324A69F18EF7179316270B698642 /* SENAPIAccount.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAccount.h; path = Pod/Classes/API/SENAPIAccount.h; sourceTree = ""; }; + 3520846824D1F7B314C3061342829B8A /* KSBacktrace_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSBacktrace_Private.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSBacktrace_Private.h; sourceTree = ""; }; + 352880D70759D7A72B3B78BF540B911B /* SVWebViewController.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVWebViewController.bundle; path = SVWebViewController/SVWebViewController.bundle; sourceTree = ""; }; + 3553CA11C2BDEA2EE8D6FF9E4D19C36C /* SENConditionRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENConditionRange.h; path = Pod/Classes/Model/SENConditionRange.h; sourceTree = ""; }; + 3582354A58B50D537947646B51933B6A /* FBSDKGraphRequestMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestMetadata.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m; sourceTree = ""; }; + 35867910FA69B21B57FD62C553A82794 /* BugsnagMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagMetaData.h; path = Source/Bugsnag/BugsnagMetaData.h; sourceTree = ""; }; + 359C9813E7319A9FE4EE8A299F1777F9 /* SVWebViewControllerActivitySafari.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewControllerActivitySafari.h; path = SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.h; sourceTree = ""; }; + 35D34294374E409FD2FE6CCCEC5A526B /* BFURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL_Internal.h; path = Bolts/iOS/Internal/BFURL_Internal.h; sourceTree = ""; }; + 35F26CF3AE4D0472784F1251C18670EE /* KWBeMemberOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeMemberOfClassMatcher.m; path = Classes/Matchers/KWBeMemberOfClassMatcher.m; sourceTree = ""; }; + 363BD4FFC3C021BD93FF1FB3FD4D310D /* LSStubRequestDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubRequestDSL.m; path = Nocilla/DSL/LSStubRequestDSL.m; sourceTree = ""; }; + 3685CD69131B0C3B478BF837D1050F7A /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; + 3696AC0249E3CE3453DD4A17872587B4 /* Kiwi-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kiwi-prefix.pch"; sourceTree = ""; }; + 36C21A79DA12F0AB84FF3F8831F4CC03 /* FBSDKBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBase64.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m; sourceTree = ""; }; + 37051E34E2EB632A81CD15F3097CBB78 /* RFC3339DateTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RFC3339DateTool.h; path = KSCrash/Source/KSCrash/Recording/Tools/RFC3339DateTool.h; sourceTree = ""; }; + 3778014587015543B9683F038960CD39 /* SENSleepPillManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepPillManager.m; path = Pod/Classes/BLE/SENSleepPillManager.m; sourceTree = ""; }; + 37801A0C94F9634CC7DC5F57DD626F22 /* SENAPITrends.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPITrends.h; path = Pod/Classes/API/SENAPITrends.h; sourceTree = ""; }; + 37B5502DCC9DEB224ADB2E2BACEBCD31 /* SENAuthorizationService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAuthorizationService.h; path = Pod/Classes/API/SENAuthorizationService.h; sourceTree = ""; }; + 38514F6F71F64477E4BF179360972222 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 386611B40F37AB31206131335BF535DA /* KWContainMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContainMatcher.m; path = Classes/Matchers/KWContainMatcher.m; sourceTree = ""; }; + 3881FEC60346A6F70CF179183F93E8ED /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; + 3883A07175AAC39A2E7F8985E56293C3 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Charts/Classes/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; + 38E0599D1759BE8CC0F4F3756D5B193C /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + 38E96CC1B497B3CF3028562A18075B3D /* NSJSONSerialization-NSNullRemoval-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization-NSNullRemoval-dummy.m"; sourceTree = ""; }; + 390CA19A4CE2FB3E2A03B170BB53AF15 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 391F8C6E1E5A398A2DCD74B39E1DE3AC /* KWExpectationType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExpectationType.h; path = Classes/Core/KWExpectationType.h; sourceTree = ""; }; + 392D67CFCA1BA91AF1C9AD183AD13346 /* KWMatchers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatchers.m; path = Classes/Core/KWMatchers.m; sourceTree = ""; }; + 3932D23C9F30AFDBDDDD8245F0F33542 /* PBArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PBArray.h; path = src/runtime/Classes/PBArray.h; sourceTree = ""; }; + 3951ADA500CB23F69ED8E388B5FE1362 /* LGCentralManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGCentralManager.h; path = LGBluetooth/LGCentralManager.h; sourceTree = ""; }; + 397536234C03276B2E981D4B78E91240 /* markdown_lib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = markdown_lib.m; sourceTree = ""; }; + 397FFCA503522A78D78E14F3B58FF0BC /* KWNotificationMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNotificationMatcher.h; path = Classes/Matchers/KWNotificationMatcher.h; sourceTree = ""; }; 39A64C0D03B150FE9086F1F722796FEC /* Pods-SenseApp-RoomConditionsExtension-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SenseApp-RoomConditionsExtension-frameworks.sh"; sourceTree = ""; }; - 39B3692CA0D8AD1C21372637BBE1FE96 /* KSSystemInfoC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSystemInfoC.h; path = KSCrash/Source/KSCrash/Recording/KSSystemInfoC.h; sourceTree = ""; }; - 39F58548DE3927A52C154C905DA0E099 /* Nocilla-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-umbrella.h"; sourceTree = ""; }; - 3A37C4F1E9D00A3E5B7A2C278A69F5DA /* KWBlockNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlockNode.m; path = Classes/Nodes/KWBlockNode.m; sourceTree = ""; }; - 3A4E663E522108DE20E3999BC02C2836 /* iOSDFULibrary.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = iOSDFULibrary.modulemap; sourceTree = ""; }; - 3A7A7B023786D33B8C0FEA4C3A1DFAF5 /* SENAPIDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIDevice.m; path = Pod/Classes/API/SENAPIDevice.m; sourceTree = ""; }; - 3AB880A8C48AC159788588F671239917 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - 3ADF2A839B2B1E771E673FD822371E0C /* KWBeKindOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeKindOfClassMatcher.h; path = Classes/Matchers/KWBeKindOfClassMatcher.h; sourceTree = ""; }; - 3AE2101F1A2949E7ECCBF41F705B7920 /* NSRegularExpression+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRegularExpression+Matcheable.m"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.m"; sourceTree = ""; }; - 3B2AB40083C0C529D770B6144B94BCFA /* SVWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewController.h; path = SVWebViewController/SVWebViewController.h; sourceTree = ""; }; - 3B85A7E99977BBC2BF8FD9AFDCB21B34 /* ZipArchive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipArchive.swift; path = iOSDFULibrary/Classes/Utilities/ZipArchive.swift; sourceTree = ""; }; - 3B97743BBDE3BB4DB6073F3CDC1FA52A /* CBUUID+StringExtraction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CBUUID+StringExtraction.h"; path = "LGBluetooth/CBUUID+StringExtraction.h"; sourceTree = ""; }; + 39A9E4A126C24102F72599C7E39CD8AF /* FBSDKLogo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h; sourceTree = ""; }; + 39B41AC23A04748735DE8A52869084ED /* SENAPIInsight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIInsight.h; path = Pod/Classes/API/SENAPIInsight.h; sourceTree = ""; }; + 39BD35BA987831FD01A2C19B7B2470FA /* FBSDKErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h; sourceTree = ""; }; + 39C5EB2B5A1E49FDABE43CCBCA85BE2C /* FBSDKProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfile.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h; sourceTree = ""; }; + 39D81DF619B7E8E6A9E43F8601826360 /* SENAccount.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAccount.m; path = Pod/Classes/Model/SENAccount.m; sourceTree = ""; }; + 3A1D799B34509EE2C61314807E88E0EE /* SENAPIShare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIShare.h; path = Pod/Classes/API/SENAPIShare.h; sourceTree = ""; }; + 3A8AF84CA850A0EA1D7A82F5604FEA27 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Charts/Classes/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; + 3ABEF28E8C14FA6D58C9E7E820841C60 /* SEGSegmentIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGSegmentIntegrationFactory.h; path = Pod/Classes/Internal/SEGSegmentIntegrationFactory.h; sourceTree = ""; }; + 3AE369D6F2CD413C7F0BF0BC3D23780E /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + 3AE9CC709CA19997AD684E09C8103671 /* SEGAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAnalytics.h; path = Pod/Classes/SEGAnalytics.h; sourceTree = ""; }; + 3B6D706477B3B1EE4BE36F03AEDAAD55 /* FBSDKInternalUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInternalUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m; sourceTree = ""; }; + 3B6E5CE509D2AE9621028C56C8344091 /* LSHTTPRequestDiff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPRequestDiff.m; path = Nocilla/Diff/LSHTTPRequestDiff.m; sourceTree = ""; }; 3B9DB1A7D1E33AAA8098F888E28732A4 /* Pods-SenseApp-Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Tests.debug.xcconfig"; sourceTree = ""; }; - 3BF9ACB2AE022D16234D321A2FACA6B3 /* KWMatchers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatchers.m; path = Classes/Core/KWMatchers.m; sourceTree = ""; }; - 3C41BC30D694F4FC6FE51A07C5F75083 /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; - 3C4B7CADF45E3F6BCDDD1DAE47BAE034 /* ProtocolBuffers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ProtocolBuffers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3CA454E0972A3CB1E4AD4B29D82AC7EE /* FBSDKViewImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewImpressionTracker.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m; sourceTree = ""; }; - 3CBA366FBAA63B1100D364B49843D89F /* FBSDKColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKColor.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m; sourceTree = ""; }; - 3CF687EEB9DDA09F954D0D375CC584FA /* KWAfterEachNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAfterEachNode.m; path = Classes/Nodes/KWAfterEachNode.m; sourceTree = ""; }; - 3CF72A303C626BC569AFC4040E1D7BFE /* RealmLineDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmLineDataSet.swift; path = ChartsRealm/Classes/Data/RealmLineDataSet.swift; sourceTree = ""; }; - 3CF78509F42760DD61CD157AE9FF35E9 /* KSCrashSentry_User.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_User.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_User.h; sourceTree = ""; }; - 3D13B076048438E69F04E0A95CF94DB7 /* SENTimeline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTimeline.m; path = Pod/Classes/Model/SENTimeline.m; sourceTree = ""; }; - 3D4FC595EB099180C494950C4BF5CDA8 /* DFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift; sourceTree = ""; }; - 3D5368988C81FD5B1945594CA1CEFF2A /* BugsnagCrashReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCrashReport.m; path = Source/Bugsnag/BugsnagCrashReport.m; sourceTree = ""; }; - 3DB2D9C308B85AF3857571F9E49E2FEB /* FBSDKUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h; sourceTree = ""; }; - 3E067C9724D3FB66EF4F59200B447C7B /* FBSDKCoreKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCoreKit.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h; sourceTree = ""; }; - 3E1909A1D15E078A32DEB12E59BDCC8F /* BFAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView_Internal.h; path = Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; - 3E5212E1D8EA82E7F4B71011A0712DD9 /* RLMObjectSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema.h; path = include/RLMObjectSchema.h; sourceTree = ""; }; - 3E6659ADFE03C7252077F4B2EF285011 /* RLMObject_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject_Private.h; path = include/RLMObject_Private.h; sourceTree = ""; }; - 3EBC65802B3889D5CCE698F4CFDB9D3A /* SEGAnalyticsRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAnalyticsRequest.h; path = Pod/Classes/Internal/SEGAnalyticsRequest.h; sourceTree = ""; }; - 3EC0FBFC18DCBAEAF3A9FB952D35BBCB /* Bugsnag.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bugsnag.m; path = Source/Bugsnag/Bugsnag.m; sourceTree = ""; }; - 3ECCA6FEAAA1AAC449A8CBE2F2B56FF5 /* AbstractMessageBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractMessageBuilder.m; path = src/runtime/Classes/AbstractMessageBuilder.m; sourceTree = ""; }; - 3F001682AB9E7CD5287D55B50A5C228B /* SENSleepSoundStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundStatus.m; path = Pod/Classes/Model/SENSleepSoundStatus.m; sourceTree = ""; }; - 3F3141B93F93E788E70D60984F4D40EA /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = RealmSwift/Object.swift; sourceTree = ""; }; - 3F7E36BDCB77935F11604F7E9E44AC9A /* RLMAccessor.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAccessor.mm; path = Realm/RLMAccessor.mm; sourceTree = ""; }; - 3F8939771F418C11A6B2FF500695E955 /* SVWebViewControllerActivitySafari.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewControllerActivitySafari.m; path = SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.m; sourceTree = ""; }; - 3FCCC9CF13B0DC37EB35B68FE45FD83D /* FBSDKAppEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEvents.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppEvents.h; sourceTree = ""; }; - 3FD7AADF311E52773A5DEAB8B6068293 /* Realm-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Realm-dummy.m"; sourceTree = ""; }; - 3FDD529B0406017631A464B302260B16 /* SVWebViewControllerActivitySafari-iPad.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivitySafari-iPad.png"; path = "SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari-iPad.png"; sourceTree = ""; }; - 3FEEE63E7874C0B3980123F6EFB0E0BD /* RealmSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.xcconfig; sourceTree = ""; }; - 403524B87617B8662E5F1ED7CAC93DE1 /* KWMatchVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatchVerifier.m; path = Classes/Verifiers/KWMatchVerifier.m; sourceTree = ""; }; - 4049DFF9C10ABF004AFAA1E4CF061B43 /* ZendeskProviderSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZendeskProviderSDK.framework; sourceTree = ""; }; - 40D07985590F3465BF7441417DC22D5B /* SVWebViewController.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVWebViewController.bundle; path = SVWebViewController/SVWebViewController.bundle; sourceTree = ""; }; - 413122A5B5E5978EE70E06D00D50CF37 /* KWBeforeAllNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeforeAllNode.m; path = Classes/Nodes/KWBeforeAllNode.m; sourceTree = ""; }; - 41438E2D786CC1426B9E9D9551117362 /* BFAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLink.m; path = Bolts/iOS/BFAppLink.m; sourceTree = ""; }; - 415701F3DD9247A5DB2A4F6AA89BC606 /* ExtensionField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtensionField.h; path = src/runtime/Classes/ExtensionField.h; sourceTree = ""; }; - 4176A18E901462C0F22443A9F23AFC0C /* BugsnagCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCrashReport.h; path = Source/Bugsnag/BugsnagCrashReport.h; sourceTree = ""; }; - 41912B1F63B05B3A28DCE2573B7A3A97 /* BFAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView.h; path = Bolts/iOS/BFAppLinkReturnToRefererView.h; sourceTree = ""; }; - 4199D51823267B1943DDA5756E7B2C07 /* FXKeychain-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FXKeychain-prefix.pch"; sourceTree = ""; }; - 41C2BE15144870E3A35C2B8D8F0C939D /* KiwiMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiMacros.h; path = Classes/Core/KiwiMacros.h; sourceTree = ""; }; - 41CFA0D780B185E82A207841FCCB5B06 /* Charts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Charts.modulemap; sourceTree = ""; }; - 42321C76A3C559EFCBD6C1982B454783 /* RealmConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmConfiguration.swift; path = RealmSwift/RealmConfiguration.swift; sourceTree = ""; }; - 42352B7B711278F174EEEC51E9A0DE29 /* SENFeatures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENFeatures.h; path = Pod/Classes/Model/SENFeatures.h; sourceTree = ""; }; - 4250230E6D5B30045A7D38B40A3B3E92 /* BFAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkNavigation.m; path = Bolts/iOS/BFAppLinkNavigation.m; sourceTree = ""; }; - 4276046567CF117EC1B5B6B4E6407776 /* FBSDKTestUsersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTestUsersManager.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h; sourceTree = ""; }; - 42AE4D71406AE7EFFA9FB1E9B26369B8 /* SENSupportTopic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSupportTopic.h; path = Pod/Classes/Model/SENSupportTopic.h; sourceTree = ""; }; - 42C22D09ABE206F759F7DA8F62AA26A9 /* ChartXAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRendererHorizontalBarChart.swift; path = Charts/Classes/Renderers/ChartXAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 43023730F9914CBA6221FF9C029EE628 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; - 43DBC2FE41F75192E4C3490FA3EE1A4C /* realm_coordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = realm_coordinator.cpp; path = Realm/ObjectStore/impl/realm_coordinator.cpp; sourceTree = ""; }; - 43F93CF1CFCB4456B8457EEA5D5F0E4A /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; - 44107D2EA44667BB3BA20640AABDB4E9 /* FBSDKBridgeAPIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIResponse.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m; sourceTree = ""; }; - 441A79F1A7DBC078C484FEBEA1B3DEFD /* LSHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPResponse.h; path = Nocilla/Model/LSHTTPResponse.h; sourceTree = ""; }; - 443E5711794B9F9B8AB8BE3B3D8C049B /* FBSDKAppEvents+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKAppEvents+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEvents+Internal.h"; sourceTree = ""; }; - 44AA5E431DBA0E358AEF48CF73B54899 /* BFURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFURL.m; path = Bolts/iOS/BFURL.m; sourceTree = ""; }; - 4506EFAC6385F3E257F0D033FFAF92F0 /* ConcreteExtensionField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcreteExtensionField.h; path = src/runtime/Classes/ConcreteExtensionField.h; sourceTree = ""; }; - 4534E92144113514FF781D329C0DC14A /* NSInvocation+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+KiwiAdditions.h"; path = "Classes/Core/NSInvocation+KiwiAdditions.h"; sourceTree = ""; }; - 455360A2E0C59FB3C6CDE2A2531E4E5B /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - 457FAE524E2BC6AA3CF57860CA365B44 /* ChartDefaultXAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDefaultXAxisValueFormatter.swift; path = Charts/Classes/Formatters/ChartDefaultXAxisValueFormatter.swift; sourceTree = ""; }; - 458A99512363C4C0D888ECC9DF1D54E0 /* SENAPIAccount.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAccount.m; path = Pod/Classes/API/SENAPIAccount.m; sourceTree = ""; }; - 45E3C60ED0FF7A483AE3638B79338121 /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; - 45E4D820020E565CCEAB317B99850629 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 460723190BA7F0D643AB0BDAADE7A89A /* MoveChartViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveChartViewJob.swift; path = Charts/Classes/Jobs/MoveChartViewJob.swift; sourceTree = ""; }; - 4618E9C243127A44515E9922635D1D90 /* SENDeviceMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENDeviceMetadata.h; path = Pod/Classes/Model/SENDeviceMetadata.h; sourceTree = ""; }; - 4620A2EFECC91D5B2BC57408ACB88FF3 /* KWSymbolicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSymbolicator.m; path = Classes/Core/KWSymbolicator.m; sourceTree = ""; }; - 46265E4111BCFEFEBCFAB223A62378DF /* KSJSONCodecObjC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSJSONCodecObjC.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodecObjC.m; sourceTree = ""; }; - 46B86E66AA435568334605881B45FD53 /* SHSProtoBuf-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SHSProtoBuf-dummy.m"; sourceTree = ""; }; - 46D3E1708E60EBB4BFF3099B85B4242A /* MSDynamicsDrawerViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MSDynamicsDrawerViewController.xcconfig; sourceTree = ""; }; - 46D92206BEF592ED99DEE9594733D78C /* FBSDKAppEventsStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsStateManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsStateManager.m; sourceTree = ""; }; - 46DEA32748F549E71BFF5B43CEC77F0E /* SENAPISleepSounds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISleepSounds.h; path = Pod/Classes/API/SENAPISleepSounds.h; sourceTree = ""; }; - 46EC79EC0D8719E670C7493468455FDB /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - 46FCE7E8956D0F39DA0D6A4890E11FE4 /* FBSDKProfile+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKProfile+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h"; sourceTree = ""; }; - 471EBCF5DA125B0717508451EE5AA0BC /* RealmSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RealmSwift-dummy.m"; sourceTree = ""; }; - 472F59F3C73071959717856818AA3C42 /* SENAPITimeline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPITimeline.h; path = Pod/Classes/API/SENAPITimeline.h; sourceTree = ""; }; - 474D5A3A9FB1F7C6294946611EAF7115 /* FBSDKDialogConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDialogConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m; sourceTree = ""; }; - 475FBA20839C3E2451CB8F21BE446BD9 /* FBSDKMath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMath.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m; sourceTree = ""; }; + 3BB8A240CFA1BA939D684FBAD2ED1A7A /* SENSleepSounds.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSounds.m; path = Pod/Classes/Model/SENSleepSounds.m; sourceTree = ""; }; + 3C0775A14635B0A887A13972368D962D /* Nocilla-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nocilla-dummy.m"; sourceTree = ""; }; + 3C16CC6E5176D8501D92D233BBA31EBA /* FBSDKAppEvents+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKAppEvents+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEvents+Internal.h"; sourceTree = ""; }; + 3C89B5FA6B75ED13B4FB069103EA2907 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3CA597D4B5F3A3FCE19B187AD3031B1A /* SENAPIAppFeedback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAppFeedback.h; path = Pod/Classes/API/SENAPIAppFeedback.h; sourceTree = ""; }; + 3CA6C62CE63AF4F265D6608C1BBA84EB /* SENSwapStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSwapStatus.m; path = Pod/Classes/Model/SENSwapStatus.m; sourceTree = ""; }; + 3CDA317323536CF2C733E0152A1EEFC3 /* SENDFUStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENDFUStatus.m; path = Pod/Classes/Model/SENDFUStatus.m; sourceTree = ""; }; + 3D017B78C486965C62D66F01029D5C1F /* FXKeychain.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FXKeychain.xcconfig; sourceTree = ""; }; + 3D081106E137DB09DEFE5F016C4518CC /* KWBeIdenticalToMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeIdenticalToMatcher.m; path = Classes/Matchers/KWBeIdenticalToMatcher.m; sourceTree = ""; }; + 3D1FBDE7BA010291EDCBB5E933A4B330 /* NSProxy+KiwiVerifierAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSProxy+KiwiVerifierAdditions.h"; path = "Classes/Core/NSProxy+KiwiVerifierAdditions.h"; sourceTree = ""; }; + 3D4406BB72FE5703EA91E7B41D600D2E /* FBSDKLoginUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginUtility.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m; sourceTree = ""; }; + 3D4DFD4B2273EB0B62250F643DBDEE3A /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; + 3DC3EB78DD01D02892615FE843B09E26 /* NSInvocation+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+OCMAdditions.m"; path = "Classes/Core/NSInvocation+OCMAdditions.m"; sourceTree = ""; }; + 3DD5E49A1E901490FEA8EF8952DA484C /* SENAPIPhoto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIPhoto.h; path = Pod/Classes/API/SENAPIPhoto.h; sourceTree = ""; }; + 3DE821E241CB73C5A384F34453A70503 /* SenseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SenseKit.xcconfig; sourceTree = ""; }; + 3DFB8ADA4771AB21B8138896787075EE /* prng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = prng.h; path = Zip/minizip/aes/prng.h; sourceTree = ""; }; + 3E07024377EBB01DB177D127402D8C8E /* BugsnagOSXNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagOSXNotifier.m; path = Source/Bugsnag/BugsnagOSXNotifier.m; sourceTree = ""; }; + 3E28427BBAF9A21B188A1F71400D0C73 /* KWGenericMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatcher.m; path = Classes/Matchers/KWGenericMatcher.m; sourceTree = ""; }; + 3E5022725DC199D74BCE68B2612CB0A6 /* SENAPIQuestions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIQuestions.h; path = Pod/Classes/API/SENAPIQuestions.h; sourceTree = ""; }; + 3E8E197D7E8B967E4BC1FC5B37A27DA2 /* DDAssertMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAssertMacros.h; path = Classes/DDAssertMacros.h; sourceTree = ""; }; + 3E93DDB331A6DB2E47563F5B02868A4F /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; + 3ED168F9C1BCBDF1B0B4691AC0C053FB /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3ED7E392376C5A535DBD75805DBE156F /* MoveChartViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveChartViewJob.swift; path = Charts/Classes/Jobs/MoveChartViewJob.swift; sourceTree = ""; }; + 3EF9F215684F11D94232185F782F5B79 /* SEGIdentifyPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGIdentifyPayload.h; path = Pod/Classes/Integrations/SEGIdentifyPayload.h; sourceTree = ""; }; + 3F3514F5512423AD843EE18BF163A231 /* KWWorkarounds.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWWorkarounds.m; path = Classes/Core/KWWorkarounds.m; sourceTree = ""; }; + 3F7A1B6192BD03B9F76426FE53E690DF /* FBSDKLoginManagerLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLogger.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h; sourceTree = ""; }; + 3F8CBC9AA0CF7A1E700BA11D93853B73 /* NAPickerView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NAPickerView.xcconfig; sourceTree = ""; }; + 3FE5145F8BBD2B5DA3EA12FF7DFE61C5 /* SENDevicePairingInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENDevicePairingInfo.h; path = Pod/Classes/Model/SENDevicePairingInfo.h; sourceTree = ""; }; + 3FF66C331A4B071035D0EF7544480956 /* FBSDKWebDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m; sourceTree = ""; }; + 400F6D1754AE6A3A1EC3585774096C38 /* NSJSONSerialization_NSNullRemoval.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NSJSONSerialization_NSNullRemoval.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 40540C3E2177A59A2713A8C3BBA5550D /* KSZombie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSZombie.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSZombie.h; sourceTree = ""; }; + 40914E439C718D21121B3CAC91F4B922 /* KWMatcherFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatcherFactory.h; path = Classes/Core/KWMatcherFactory.h; sourceTree = ""; }; + 4098DC5F9F0D0C731FFE442A6519001F /* SENTrendsGraph.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTrendsGraph.h; path = Pod/Classes/Model/SENTrendsGraph.h; sourceTree = ""; }; + 40A5F229C5CA7A123CA54A0029901039 /* KSCrashType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashType.h; path = KSCrash/Source/KSCrash/Recording/KSCrashType.h; sourceTree = ""; }; + 40C9E3E6DF31D20A0E27ACAE16B49165 /* FBSDKAppLinkUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkUtility.h; sourceTree = ""; }; + 410D33EC6B84F80D2A0D5DF26C5E3753 /* pt.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = pt.lproj; path = SVWebViewController/pt.lproj; sourceTree = ""; }; + 413FE6CBBACA1DEE75628ED8624B4962 /* KWAfterEachNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAfterEachNode.h; path = Classes/Nodes/KWAfterEachNode.h; sourceTree = ""; }; + 4198B0C8219AED58787CEB919A08D23D /* SENAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnalytics.h; path = Pod/Classes/Analytics/SENAnalytics.h; sourceTree = ""; }; + 41FBCADE91D5D803B09BDFD2E6E73F07 /* SVWebViewControllerActivityChrome-iPad.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivityChrome-iPad.png"; path = "SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad.png"; sourceTree = ""; }; + 42D3DD5C4F89331D1FB7479558E8F187 /* FBSDKTimeSpentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTimeSpentData.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKTimeSpentData.m; sourceTree = ""; }; + 431FB0FFD71A077F1971596CCF2FEE04 /* _FBSDKTemporaryErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKTemporaryErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h; sourceTree = ""; }; + 434271472FB3533B6CA52F27AC3FA4BF /* SENShareable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENShareable.h; path = Pod/Classes/Model/SENShareable.h; sourceTree = ""; }; + 4356D5A707051C87E953BE5607D4A4FA /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; + 438EE7A86ADA2186AA85F8229086D52F /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Charts/Classes/Renderers/PieChartRenderer.swift; sourceTree = ""; }; + 43A8F1943126E03896C116045BF22E6B /* Charts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-prefix.pch"; sourceTree = ""; }; + 43DCCEEF90A5DC41614FC95D6AC67F70 /* FBSDKDialogConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDialogConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h; sourceTree = ""; }; + 441E689DD4E4DA59EEF161755F254216 /* FBSDKTestUsersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTestUsersManager.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h; sourceTree = ""; }; + 442FA759919BC6FBE46B2AA578233281 /* ZipUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipUtilities.swift; path = Zip/ZipUtilities.swift; sourceTree = ""; }; + 444E65A5407BEA1DF0F05EA96E05F752 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; + 447AF55543EA9BBE3D11EFFAEDE17372 /* Nocilla-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-umbrella.h"; sourceTree = ""; }; + 44AFF3A656DC0EB28F9E5E1CD1E6ADCB /* KSBacktrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSBacktrace.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSBacktrace.h; sourceTree = ""; }; + 44BA91345B51C5D545A9A6CE9091385C /* pwd2key.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = pwd2key.h; path = Zip/minizip/aes/pwd2key.h; sourceTree = ""; }; + 44C2598BA22E416BA1FB43CDA00C26D6 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = fr.lproj; path = SVWebViewController/fr.lproj; sourceTree = ""; }; + 44D57768A94655466F1628B40CE4EBF9 /* FBSDKServerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m; sourceTree = ""; }; + 452476D587ADE3F8A137D1AC7E137581 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = AFNetworking.modulemap; sourceTree = ""; }; + 459BAF32E23ECC559C603F2B8F7A6E7D /* crc32.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = crc32.swift; path = iOSDFULibrary/Classes/Utilities/crc32.swift; sourceTree = ""; }; + 45A5B5CB06DE8DB224894205439B303E /* KWExampleSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExampleSuite.m; path = Classes/Core/KWExampleSuite.m; sourceTree = ""; }; + 45A9B7CE498180BD7A7C657843BC6D22 /* SVWebViewControllerActivityChrome.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewControllerActivityChrome.h; path = SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.h; sourceTree = ""; }; + 45BF10EAD9B3F6CA148EC3172E67C720 /* FBSDKConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKConstants.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h; sourceTree = ""; }; + 4600DBB61767E5E90887A50E71CAE170 /* KWFailure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFailure.h; path = Classes/Core/KWFailure.h; sourceTree = ""; }; + 4605B515FCB47357C239F30A7F8C781E /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4615F3FFD343186A7DB5A5E8C25BDA55 /* Analytics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Analytics.modulemap; sourceTree = ""; }; + 46546C5F806A200FB107642610F07BBC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4665849D23B47A9390AF86A657357B35 /* SENAPIAlarms.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAlarms.m; path = Pod/Classes/API/SENAPIAlarms.m; sourceTree = ""; }; + 46BF8C867E50896C323A16000BBE4ECF /* KSCrashCallCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashCallCompletion.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSCrashCallCompletion.h; sourceTree = ""; }; + 46BFB457414BD79E1049A8F9FB161065 /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Charts/Classes/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; + 46CCD8B212E1195A63718F808E7903E4 /* CocoaLumberjack-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaLumberjack-dummy.m"; sourceTree = ""; }; + 46FFBBC0CC5C5713DA70A950EC1AC447 /* SVWebViewControllerBack@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerBack@2x.png"; path = "SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack@2x.png"; sourceTree = ""; }; + 470DA3D68044AD2DB774565387E24B36 /* MSDynamicsDrawerViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MSDynamicsDrawerViewController-prefix.pch"; sourceTree = ""; }; + 47368075F361B69C9AF1269602984E50 /* LGBluetooth-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LGBluetooth-prefix.pch"; sourceTree = ""; }; 479903CA8927D86F16A03F5B9C21B776 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 479D309CA8E1BEF620799415713816C0 /* KWRespondToSelectorMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRespondToSelectorMatcher.m; path = Classes/Matchers/KWRespondToSelectorMatcher.m; sourceTree = ""; }; - 47A974B4C27F7AABED58019FD291980A /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; - 47D66EC4E15C120723D7D405E44F8EC1 /* SENAPISensor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISensor.h; path = Pod/Classes/API/SENAPISensor.h; sourceTree = ""; }; - 47EA9ACEA078CB001C8A170866F672BE /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 483D61B7DC464B491ECE51436D3496AC /* crc32.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = crc32.swift; path = iOSDFULibrary/Classes/Utilities/crc32.swift; sourceTree = ""; }; - 4896262640F4491075A7A54038B3F9F5 /* KWBeMemberOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeMemberOfClassMatcher.m; path = Classes/Matchers/KWBeMemberOfClassMatcher.m; sourceTree = ""; }; - 489904E0154895DFA08909594232620E /* BFMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent.h; path = Bolts/iOS/BFMeasurementEvent.h; sourceTree = ""; }; - 48B724EB833CF23B95CB4678B9819301 /* KSDynamicLinker.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSDynamicLinker.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSDynamicLinker.c; sourceTree = ""; }; - 48C3F7BF476FC7972EEFE921A2E3F147 /* TextFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextFormat.h; path = src/runtime/Classes/TextFormat.h; sourceTree = ""; }; - 48DAF3A169A34E643FA514298E6052C3 /* Analytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Analytics.h; path = Pod/Classes/Analytics/Analytics.h; sourceTree = ""; }; - 48E8DA7DCA912EDF67EB154E65CA4540 /* SENAPITrends.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPITrends.m; path = Pod/Classes/API/SENAPITrends.m; sourceTree = ""; }; - 4937D016E516753DABCDEAB1CFA30DCF /* sha1.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = sha1.c; path = Zip/minizip/aes/sha1.c; sourceTree = ""; }; - 49423C1E7BF9B9A4AA23815A87928735 /* FBSDKColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKColor.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h; sourceTree = ""; }; - 4984747F3B91403391EA4EE69C0CA727 /* NSJSONSerialization_NSNullRemoval.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NSJSONSerialization_NSNullRemoval.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 498ECB3CB5E13051A3BF927D35D395BF /* BFAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkTarget.m; path = Bolts/iOS/BFAppLinkTarget.m; sourceTree = ""; }; - 499F7F8F5A854B43846F3BC9DEB7B6C6 /* RealmRadarDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmRadarDataSet.swift; path = ChartsRealm/Classes/Data/RealmRadarDataSet.swift; sourceTree = ""; }; - 49F570A599EA8D01C7EE4EA310F87243 /* ProtocolBuffers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ProtocolBuffers.h; path = src/runtime/Classes/ProtocolBuffers.h; sourceTree = ""; }; - 49FF41778899642202567A04C468C457 /* KSCrashSentry.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry.c; sourceTree = ""; }; - 4A1407A9A22DB3CB922052C22157AFA5 /* LSStringMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStringMatcher.h; path = Nocilla/Matchers/LSStringMatcher.h; sourceTree = ""; }; - 4A43D53160B65F7FFF029B08E95A414D /* zh-Hant.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "zh-Hant.lproj"; path = "SVWebViewController/zh-Hant.lproj"; sourceTree = ""; }; - 4A45A23E2773710E17C6C6496897FC1C /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Charts/Classes/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; - 4A7EECA374FB96F84890E050F40530FE /* KiwiBlockMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiBlockMacros.h; path = Classes/Core/KiwiBlockMacros.h; sourceTree = ""; }; - 4AAFA0BD5323BFAD73A8E8DA29F913B1 /* SENSleepPill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepPill.h; path = Pod/Classes/BLE/SENSleepPill.h; sourceTree = ""; }; - 4AB0E6EFE9387F5E284B70600C89EE5D /* QuickZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickZip.swift; path = Zip/QuickZip.swift; sourceTree = ""; }; - 4AEBDA28C5CBB72A7345A1E4D7E2FDA6 /* NSJSONSerialization+RemovingNulls.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSJSONSerialization+RemovingNulls.h"; path = "Source/NSJSONSerialization+RemovingNulls.h"; sourceTree = ""; }; - 4B38793DD2472E0D6274592EC7ACC8E7 /* FBSDKLoginManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManager+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h"; sourceTree = ""; }; - 4B9563C351D478DF7EA8305059C3A09F /* da.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = da.lproj; path = SVWebViewController/da.lproj; sourceTree = ""; }; - 4BA5BE56AFA4D7F4B7DA04851D6A1C64 /* ChartAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimator.swift; path = Charts/Classes/Animation/ChartAnimator.swift; sourceTree = ""; }; - 4BB8032107E61D92BFF991CC150532F3 /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; - 4BC892654DE790A354F2D76045A0735A /* FBSDKBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBase64.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m; sourceTree = ""; }; - 4BF71069AF0D88E560683A5F4DE8CA61 /* FBSDKConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKConstants.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m; sourceTree = ""; }; - 4C028BF2D23F57736C00892BD00A7409 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4C757146847A7817E5D77F11908B3B35 /* SVModalWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVModalWebViewController.h; path = SVWebViewController/SVModalWebViewController.h; sourceTree = ""; }; - 4C7667E0B307A05264E424C2BC2A1752 /* KWInvocationCapturer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWInvocationCapturer.h; path = Classes/Core/KWInvocationCapturer.h; sourceTree = ""; }; - 4D8B35A44366533135C7F84176C8858C /* KSBacktrace_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSBacktrace_Private.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSBacktrace_Private.h; sourceTree = ""; }; - 4DCD2E1F65F90F5F885C5DD004E94E12 /* RFC3339DateTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RFC3339DateTool.h; path = KSCrash/Source/KSCrash/Recording/Tools/RFC3339DateTool.h; sourceTree = ""; }; - 4DCE13DFDDBA3DD328D00621249CFE4B /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - 4DFDE33FFBF7254EC8954EE648367886 /* FBSDKButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m; sourceTree = ""; }; - 4E099CA07DDDA02E8018BE1743BD049C /* AbstractMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractMessage.m; path = src/runtime/Classes/AbstractMessage.m; sourceTree = ""; }; - 4EAAA276DB85A8E711C7AD0FE4B0CF05 /* DDLogMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLogMacros.h; path = Classes/DDLogMacros.h; sourceTree = ""; }; - 4F025C1E2DF6A110E4C269AFC5C6F531 /* DDMultiFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMultiFormatter.h; path = Classes/Extensions/DDMultiFormatter.h; sourceTree = ""; }; - 4F03B102941518C1C5A69BDFF4958AA9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4F22D724D4EF34566CE2957BC89FAA1F /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Charts/Classes/Charts/RadarChartView.swift; sourceTree = ""; }; - 4F6F271A834494DA6F56EF87823EB31E /* KSCrashSentry_MachException.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry_MachException.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_MachException.c; sourceTree = ""; }; - 4F7DEA9641F3FAF36133DBCEB122629B /* SORelativeDateTransformer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SORelativeDateTransformer-umbrella.h"; sourceTree = ""; }; - 4F7F04ADE9DA46E4EA71E64A06C4F4EA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4FD4341E9FF07150CA9C2328E7798588 /* NSJSONSerialization-NSNullRemoval-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization-NSNullRemoval-umbrella.h"; sourceTree = ""; }; - 4FDE2FF9AB0B4FEA619393617FAF0C90 /* KSCrashType.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashType.c; path = KSCrash/Source/KSCrash/Recording/KSCrashType.c; sourceTree = ""; }; - 50068D9320D4A7DD473479CFD0097DC4 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - 502601D84C141A5DAC514B6A66B229B4 /* ExtendableMessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtendableMessageBuilder.h; path = src/runtime/Classes/ExtendableMessageBuilder.h; sourceTree = ""; }; - 507C6D5B825799DB9A162E5A23612658 /* NSURLRequest+LSHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+LSHTTPRequest.m"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m"; sourceTree = ""; }; - 5083863E50CCB06D2B8E5C43C0F09D3D /* LSASIHTTPRequestHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestHook.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m; sourceTree = ""; }; - 5090AD051FCC9F02DE41901D46683F3B /* NSProxy+KiwiVerifierAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSProxy+KiwiVerifierAdditions.h"; path = "Classes/Core/NSProxy+KiwiVerifierAdditions.h"; sourceTree = ""; }; - 50B8E94366FB82BADDB196B452EA42D7 /* DFUStream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStream.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStream.swift; sourceTree = ""; }; - 50E4DEFF17669D4CA0A29D104B5CA76B /* unzip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = Zip/minizip/unzip.c; sourceTree = ""; }; - 5118EEBDA728C28FF4004BC58E86A1A7 /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = ja.lproj; path = SVWebViewController/ja.lproj; sourceTree = ""; }; - 51A2C4C5062FA29A73AB5A1AC477CEFD /* FBSDKTriStateBOOL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTriStateBOOL.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h; sourceTree = ""; }; - 51B178AD2E4A0CB47CECA64B09CE780F /* NSData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSData.swift; path = iOSDFULibrary/Classes/Utilities/NSData.swift; sourceTree = ""; }; - 5205DE995F06B6EF3B32EB06BEBCFC79 /* FBSDKProfilePictureView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfilePictureView.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m; sourceTree = ""; }; - 520F57FF107102F2A5AA9F070A7964CC /* SENTimelineMetric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTimelineMetric.h; path = Pod/Classes/Model/SENTimelineMetric.h; sourceTree = ""; }; - 52A4D5F564B5DCFF8CC82F4CDF01D02D /* CocoaLumberjack.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.xcconfig; sourceTree = ""; }; - 52BAE834B2409B01110EB6C7D136C07E /* Model.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Model.m; path = Pod/Classes/Model/Model.m; sourceTree = ""; }; - 52C57E961DAF09764469888401BA801F /* KWBeBetweenMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeBetweenMatcher.m; path = Classes/Matchers/KWBeBetweenMatcher.m; sourceTree = ""; }; - 52CBE632BE765DE7EED5265695694B0E /* LSHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequest.h; path = Nocilla/Model/LSHTTPRequest.h; sourceTree = ""; }; - 53040C83295E673DFE1A879CA261BDD5 /* FBSDKAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkResolver.m; sourceTree = ""; }; - 5307A942D3605AD171DFFF9647438D42 /* SORelativeDateTransformer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SORelativeDateTransformer.xcconfig; sourceTree = ""; }; - 5315385AB126C983262A4C35B649DA0D /* NSInvocation+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+OCMAdditions.m"; path = "Classes/Core/NSInvocation+OCMAdditions.m"; sourceTree = ""; }; - 5321532F1A1907F189EB5B32982326EB /* CGFloatType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CGFloatType.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 532DFAE1DAAB438F6721626EDFFAEA37 /* MSDynamicsDrawerStyler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MSDynamicsDrawerStyler.h; path = MSDynamicsDrawerViewController/MSDynamicsDrawerStyler.h; sourceTree = ""; }; - 539E8856D8A5AA9ECD4884ED94C025FC /* LGCharacteristic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGCharacteristic.m; path = LGBluetooth/LGCharacteristic.m; sourceTree = ""; }; + 47B445E85B04E79A462D18921BB20230 /* PBArray.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PBArray.m; path = src/runtime/Classes/PBArray.m; sourceTree = ""; }; + 47C34F887255DD70812D037D439C2F38 /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Bolts.modulemap; sourceTree = ""; }; + 47C7BDF17390E9CCC27A500C8114D109 /* SVWebViewControllerActivityChrome@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivityChrome@2x.png"; path = "SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome@2x.png"; sourceTree = ""; }; + 47CE672AF5CF07053A6FA69CAB6F2CB3 /* KWEqualMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWEqualMatcher.m; path = Classes/Matchers/KWEqualMatcher.m; sourceTree = ""; }; + 47FE310CC0A35048AB1D02B26B9D6EBC /* FBSDKBridgeAPICrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPICrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m; sourceTree = ""; }; + 480C9FB24E9FE0DC77289B3500B9F004 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Charts/Classes/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; + 48152DCAD62AEB3D67FB32C8CB5CBCD2 /* KWExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExample.h; path = Classes/Core/KWExample.h; sourceTree = ""; }; + 481A9792966B0F69881FF4C0F2C7C59D /* KSSysCtl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSysCtl.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSysCtl.h; sourceTree = ""; }; + 4882D3EAB830C27ED2BA643A97F9A8E7 /* SENSenseVoiceSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseVoiceSettings.h; path = Pod/Classes/Model/SENSenseVoiceSettings.h; sourceTree = ""; }; + 492ADC11C9C24A59465F0D33556DD92E /* SENSensorDataRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSensorDataRequest.m; path = Pod/Classes/Model/SENSensorDataRequest.m; sourceTree = ""; }; + 493C825024681A121C856067D0D2C087 /* markdown_lib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = markdown_lib.h; sourceTree = ""; }; + 4949918605DD8965D300B1B5E77EBE72 /* FBSDKViewImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewImpressionTracker.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h; sourceTree = ""; }; + 494DACF56937AA4BEEEE90F23B69896D /* UIImage+ImageEffects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ImageEffects.m"; sourceTree = ""; }; + 49B64E9767A3DA4E78D83A1BA3A9A191 /* FBSDKViewImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewImpressionTracker.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m; sourceTree = ""; }; + 4A3261EDFB84127F7801CAC189A98F0F /* KWExampleNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleNode.h; path = Classes/Nodes/KWExampleNode.h; sourceTree = ""; }; + 4A44DA38619CB209B949A04B2BE62B1A /* FBSDKLogo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m; sourceTree = ""; }; + 4A503132D207CA579023DA1D6FDF6A83 /* FBSDKDynamicFrameworkLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDynamicFrameworkLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m; sourceTree = ""; }; + 4A5F06257EDF79473630CEFF86AFA989 /* SVWebViewControllerActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewControllerActivity.h; path = SVWebViewController/UIActivities/SVWebViewControllerActivity.h; sourceTree = ""; }; + 4A9F057A2FBE7362106F14F7291E5533 /* KWAfterAllNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAfterAllNode.h; path = Classes/Nodes/KWAfterAllNode.h; sourceTree = ""; }; + 4B2879A7EFE9D7CBF3E59F321F677712 /* zip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = zip.c; path = Zip/minizip/zip.c; sourceTree = ""; }; + 4B95149C26B5D6D62AEAD1BA82E1EB01 /* SENAnalyticsProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnalyticsProvider.h; path = Pod/Classes/Analytics/SENAnalyticsProvider.h; sourceTree = ""; }; + 4BACA21575B977B810A42B28A2875F08 /* ChartDefaultXAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDefaultXAxisValueFormatter.swift; path = Charts/Classes/Formatters/ChartDefaultXAxisValueFormatter.swift; sourceTree = ""; }; + 4BB3BB34ADCF79B81371A20B98E89ED8 /* RFC3339DateTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RFC3339DateTool.m; path = KSCrash/Source/KSCrash/Recording/Tools/RFC3339DateTool.m; sourceTree = ""; }; + 4BD854D75F99835EB41DE7EC3FDD8A71 /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C0862016D3FCD28EC338BF9BA8816ED /* DFUStreamHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamHex.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamHex.swift; sourceTree = ""; }; + 4C0B9EB4F70A6CCDE94EC3871F40B238 /* NSJSONSerialization+RemovingNulls.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSJSONSerialization+RemovingNulls.h"; path = "Source/NSJSONSerialization+RemovingNulls.h"; sourceTree = ""; }; + 4C1BFB91BA98EBD8BEC804B650A85AD7 /* DFUVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUVersion.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUVersion.swift; sourceTree = ""; }; + 4C41251AD8917AE75847686D0918674E /* KSCrashType.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashType.c; path = KSCrash/Source/KSCrash/Recording/KSCrashType.c; sourceTree = ""; }; + 4CB4223460579BFE16D404A5FC1311DF /* NSJSONSerialization-NSNullRemoval.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "NSJSONSerialization-NSNullRemoval.modulemap"; sourceTree = ""; }; + 4CE17660AC31FE0987045850038FB2F8 /* NSURLRequest+LSHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+LSHTTPRequest.m"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.m"; sourceTree = ""; }; + 4D12CF15450F50DE832E75202ABCCFAB /* CocoaLumberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4D35E9F130F7A6721D9CA8B54B8D923C /* BFAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink_Internal.h; path = Bolts/iOS/Internal/BFAppLink_Internal.h; sourceTree = ""; }; + 4D3826F75A050FDDD99E2AA1026D23A7 /* KWFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFormatter.h; path = Classes/Core/KWFormatter.h; sourceTree = ""; }; + 4D42DD7983221CA8879C3EFE7F1BF8E7 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 4D4C58641F4922DE5842CF6544CB4E42 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 4D6184D228AF28FE41B35876324FDA0D /* SORelativeDateTransformer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SORelativeDateTransformer-umbrella.h"; sourceTree = ""; }; + 4D6ED7ADEF238CA17F1256200766D13B /* BFAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView_Internal.h; path = Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; + 4D893DDD5CD7E1E75666C3C60FFC1173 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Charts/Classes/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; + 4D940141C92F38F95FCF7ED6797F3E0F /* Analytics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Analytics-umbrella.h"; sourceTree = ""; }; + 4DF18C63133667E3BBFA83A1BF47594C /* SecureDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUService.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Services/SecureDFUService.swift; sourceTree = ""; }; + 4E071F1FD04E011A0809C129B3102D48 /* SVWebViewControllerActivitySafari@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivitySafari@2x.png"; path = "SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari@2x.png"; sourceTree = ""; }; + 4E247502633F14FD7BB8B6EADD9AE600 /* SenseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SenseKit.h; path = Pod/Classes/SenseKit.h; sourceTree = ""; }; + 4E6603D111B30BA8C878E34073573719 /* DFUStreamBin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamBin.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamBin.swift; sourceTree = ""; }; + 4E89E71C33F8F68A84C745883AD83DAE /* FBSDKGraphRequestDataAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestDataAttachment.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m; sourceTree = ""; }; + 4EA5C5D6E04F5ED50301DE2D18E1FEDF /* LGBluetooth.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LGBluetooth.xcconfig; sourceTree = ""; }; + 4F75B6EEB4A8DB116DB60DBBD17F5BE5 /* KWRegularExpressionPatternMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRegularExpressionPatternMatcher.h; path = Classes/Matchers/KWRegularExpressionPatternMatcher.h; sourceTree = ""; }; + 500AA771FB841D53FE045763D4D10599 /* LSHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequest.h; path = Nocilla/Model/LSHTTPRequest.h; sourceTree = ""; }; + 5013BDC7156651A56275AEF6EFF16FCC /* FBSDKBridgeAPIRequest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKBridgeAPIRequest+Private.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h"; sourceTree = ""; }; + 519D10F4ADFF6920D7D83A7ABDEAF06E /* LSNSURLHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLHook.h; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.h; sourceTree = ""; }; + 520B1A2F022DA8E2DA6FA7949B9E1E4E /* KWChangeMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWChangeMatcher.m; path = Classes/Matchers/KWChangeMatcher.m; sourceTree = ""; }; + 522239ADA850A5938A4D19F5920966FA /* AbstractMessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractMessageBuilder.h; path = src/runtime/Classes/AbstractMessageBuilder.h; sourceTree = ""; }; + 52806E2109391BA6F2938C076231BAAC /* KWMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatchers.h; path = Classes/Core/KWMatchers.h; sourceTree = ""; }; + 5283E468C18BE03C90F318828496F39B /* SENSupportTopic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSupportTopic.h; path = Pod/Classes/Model/SENSupportTopic.h; sourceTree = ""; }; + 52BE9E5F8F58FB77AB70F9316672E5C2 /* LGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGUtils.h; path = LGBluetooth/LGUtils.h; sourceTree = ""; }; + 52CCF6B3465A8C9784F6E8C9BAB9118B /* KWReporting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWReporting.h; path = Classes/Core/KWReporting.h; sourceTree = ""; }; + 536C999EE8C6AE244FF77A1A998AB39E /* CGFloatType.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = CGFloatType.modulemap; sourceTree = ""; }; + 537805D689B845335B86408CF45FBCD2 /* SEGAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAnalytics.m; path = Pod/Classes/SEGAnalytics.m; sourceTree = ""; }; + 53A0327E5EB9274A01276F114F304C43 /* Kiwi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kiwi.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 53AAD7ED40C47A53327B219F4E3DBAF8 /* NSMethodSignature+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMethodSignature+KiwiAdditions.h"; path = "Classes/Core/NSMethodSignature+KiwiAdditions.h"; sourceTree = ""; }; + 53AFC84570A1B0B02FE57DD5DAC93FE2 /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = es.lproj; path = SVWebViewController/es.lproj; sourceTree = ""; }; + 53D555A5DB2B7E0F58BCC1ABC00F778B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 53E762F024ED5470594EC84A5D636FF3 /* FBSDKSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSettings.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h; sourceTree = ""; }; 5408649DE9A2A760A94BA626F208ED4F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5434F81128FD57F297E131179B0ED5CB /* FBSDKMonotonicTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMonotonicTime.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h; sourceTree = ""; }; - 54A6B9865AB5B17EBFE21847F5885CF7 /* FBSDKLoginManagerLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLogger.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h; sourceTree = ""; }; - 54DD822F57C9E7B795E04EF4C38983ED /* FBSDKLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m; sourceTree = ""; }; - 54F18837E2F4DE450ABB011630A4E017 /* NSError+SimpleConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+SimpleConstructor.h"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSError+SimpleConstructor.h"; sourceTree = ""; }; - 556F366C6A9A04A38BEA2A06DAE06D0B /* CGFloatType-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGFloatType-umbrella.h"; sourceTree = ""; }; + 542865803CD6FA7A085599D45EC70088 /* FBSDKAppLinkUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkUtility.m; sourceTree = ""; }; + 54371C5436BE6AED122615ECF2378C00 /* KWAny.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAny.m; path = Classes/Core/KWAny.m; sourceTree = ""; }; + 545AF44DF7365757E250BD89EF6D321E /* LSHTTPBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPBody.h; path = Nocilla/Model/LSHTTPBody.h; sourceTree = ""; }; + 5466EEDCDCC2D644C5EA367E208A8545 /* LSASIHTTPRequestAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestAdapter.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m; sourceTree = ""; }; + 54AA065526FE6A10ED8D25EE015B1E98 /* FBSDKServerConfigurationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfigurationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h; sourceTree = ""; }; + 54AEC5271218E15BD196D6B0CFD0498C /* BFAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererController.m; path = Bolts/iOS/BFAppLinkReturnToRefererController.m; sourceTree = ""; }; + 54BF83A5156888CF00F6FFC8BD30979F /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + 554E49C12527F52EB998770EB32E1769 /* Kiwi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kiwi.h; path = Classes/Core/Kiwi.h; sourceTree = ""; }; + 556AF550F84C796E40AD883E171AD514 /* KWBeTrueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeTrueMatcher.m; path = Classes/Matchers/KWBeTrueMatcher.m; sourceTree = ""; }; + 5581D3DBBFE4D9235DD856ABD83B11F1 /* SENSpeechResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSpeechResult.m; path = Pod/Classes/Model/SENSpeechResult.m; sourceTree = ""; }; + 5583FE08968E6F67A39529F00C89AB8F /* FBSDKAudioResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAudioResourceLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h; sourceTree = ""; }; 55A97E0BA1EC302C359FD1C8DDB2C9C2 /* Pods-SenseApp-RoomConditionsExtension.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-RoomConditionsExtension.dev.xcconfig"; sourceTree = ""; }; - 55CAA81803BC6BCCFDE945EF268F8771 /* KWConformToProtocolMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWConformToProtocolMatcher.m; path = Classes/Matchers/KWConformToProtocolMatcher.m; sourceTree = ""; }; - 5668CE9A95E8B73045D823DAD8A11EF4 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; - 56ADDC1C84254928EF7E862206BBCDA8 /* KSCrashC.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashC.c; path = KSCrash/Source/KSCrash/Recording/KSCrashC.c; sourceTree = ""; }; - 56E7139717B1D03EF24251999AC89711 /* ChartLegend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLegend.swift; path = Charts/Classes/Components/ChartLegend.swift; sourceTree = ""; }; - 56FCB45617BA3C7B88428D416CD0CAC6 /* LGBluetooth-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LGBluetooth-prefix.pch"; sourceTree = ""; }; - 57364D41C712DB122B049108E3AA9C29 /* LSHTTPStubURLProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPStubURLProtocol.m; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m; sourceTree = ""; }; - 5740D4AE9F17AC1109ED3E102909EA5F /* KSMach_x86_64.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_x86_64.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_x86_64.c; sourceTree = ""; }; - 577A300F0C8F1B83A2303FEC0FA26A60 /* LGBluetooth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LGBluetooth-umbrella.h"; sourceTree = ""; }; - 579BB90E90E847558E887432F7EC5FAF /* SENSound.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSound.m; path = Pod/Classes/Model/SENSound.m; sourceTree = ""; }; - 57C7D205EDE0F1D13B03F0CFDA221130 /* FBSDKLoginCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginCompletion.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m; sourceTree = ""; }; - 5815BFB466C831217D81F909BCC540DE /* NSURLRequest+LSHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+LSHTTPRequest.h"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+LSHTTPRequest.h"; sourceTree = ""; }; - 58277242E7C0A67915AE1FF58EA29256 /* FBSDKSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSettings.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m; sourceTree = ""; }; - 582D1BA91C91848BAA7679EC5B0DDC5B /* KWContextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContextNode.m; path = Classes/Nodes/KWContextNode.m; sourceTree = ""; }; - 5830AD37E44D720C4FDD0256F5221BEF /* KSBacktrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSBacktrace.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSBacktrace.h; sourceTree = ""; }; - 587B330F1531CEE195987FD79856BEB7 /* SENSwapStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSwapStatus.m; path = Pod/Classes/Model/SENSwapStatus.m; sourceTree = ""; }; - 58976ED944C88D7AE6BEC810C3F13DA6 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 58BB187C3ED85059F8B7950705A5FAD3 /* FBSDKGraphRequestConnection+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequestConnection+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h"; sourceTree = ""; }; - 58BC6DEB04DE9B4F6923B667C4EB3527 /* DDAssertMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAssertMacros.h; path = Classes/DDAssertMacros.h; sourceTree = ""; }; - 58BDE08F62F4EC9EF98457424D803AB8 /* NAPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NAPickerView.m; path = NASources/NAPickerView.m; sourceTree = ""; }; - 5906CB5FC09F19839C430232840BFB37 /* librealm-ios.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "librealm-ios.a"; path = "core/librealm-ios.a"; sourceTree = ""; }; - 59899282DB3644470A3586597C8C1BF6 /* RealmBarLineScatterCandleBubbleDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmBarLineScatterCandleBubbleDataSet.swift; path = ChartsRealm/Classes/Data/RealmBarLineScatterCandleBubbleDataSet.swift; sourceTree = ""; }; - 59B805EA4AD76264F31032B95423EE98 /* FBSDKUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m; sourceTree = ""; }; - 5A40D58BB3EE05658ABDA4BF915783FB /* SENSleepPill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepPill.m; path = Pod/Classes/BLE/SENSleepPill.m; sourceTree = ""; }; - 5AA2E774CC695F4D1FC8017794F492E8 /* FBSDKAccessTokenCacheV3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h; sourceTree = ""; }; - 5ACD5EE103029601C772229A70E86D9A /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Charts/Classes/Charts/ScatterChartView.swift; sourceTree = ""; }; - 5AEF158448A1C1544FAE4951B8D0405B /* FBSDKBridgeAPIProtocolWebV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m; sourceTree = ""; }; - 5B000FD8B040A661021569476ACE6C7C /* KWSharedExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSharedExample.h; path = "Classes/Shared Examples/KWSharedExample.h"; sourceTree = ""; }; - 5B3720BF8EA93EFFA30CBA3BDAC576C9 /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; - 5B41B62E7EC756C61C1DED1008FEC6BB /* NSData+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Matcheable.h"; path = "Nocilla/Matchers/NSData+Matcheable.h"; sourceTree = ""; }; - 5B539DA027D44B349C7B05CAA534A325 /* DFUServiceDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceDelegate.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFU/DFUServiceDelegate.swift; sourceTree = ""; }; - 5B66BEA723662314E9899CC7EBC665DD /* Descriptor.pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Descriptor.pb.h; path = src/runtime/Classes/Descriptor/Descriptor.pb.h; sourceTree = ""; }; - 5B6FECDCE58BCACC63263B1DDF19DD7A /* KWExampleSuiteBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleSuiteBuilder.h; path = Classes/Core/KWExampleSuiteBuilder.h; sourceTree = ""; }; - 5B71D12E26C28C453777049CEC3FFAD1 /* ChartYAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxisRenderer.swift; path = Charts/Classes/Renderers/ChartYAxisRenderer.swift; sourceTree = ""; }; - 5B9D09F20527D6638C08509066A5E8B3 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Charts/Classes/Highlight/ChartHighlighter.swift; sourceTree = ""; }; - 5BA2ABF5831039B90E361528BB2EF38B /* KSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSLogger.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSLogger.m; sourceTree = ""; }; - 5BB07605523D68AB6C17519A2B85EB41 /* NAPickerView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NAPickerView-dummy.m"; sourceTree = ""; }; - 5BBB0A692F98C76EB787D49F38CED885 /* RLMConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMConstants.m; path = Realm/RLMConstants.m; sourceTree = ""; }; - 5BBDB1C055F3B30366412F82EBDE8EA5 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - 5C3A44A90FDE032EECE4BEDCD85DE400 /* BugsnagMetaData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagMetaData.m; path = Source/Bugsnag/BugsnagMetaData.m; sourceTree = ""; }; - 5C981EE111B8AB22794FD8001A3D1F65 /* RLMOptionalBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMOptionalBase.mm; path = Realm/RLMOptionalBase.mm; sourceTree = ""; }; - 5C9C59BEEF33305597D72116E6F50099 /* NSObject+KiwiStubAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiStubAdditions.h"; path = "Classes/Stubbing/NSObject+KiwiStubAdditions.h"; sourceTree = ""; }; - 5CBA54F2786BB648E5CE6D80BB38922C /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 5CFB6A8F6F998C9F78344D5A9D118B7C /* list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list.cpp; path = Realm/ObjectStore/list.cpp; sourceTree = ""; }; - 5CFFE2785D9F2F65C82E56FD39695358 /* CodedOutputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CodedOutputStream.h; path = src/runtime/Classes/CodedOutputStream.h; sourceTree = ""; }; - 5D2A4492906C8804E9037E8C37A83872 /* SenseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SenseKit.h; path = Pod/Classes/SenseKit.h; sourceTree = ""; }; - 5D5A05DFE7030C8802AE042A9DEDB65F /* FBSDKProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfile.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m; sourceTree = ""; }; - 5D5D8FE7FA4462E41204C6195011C640 /* FBSDKWebDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m; sourceTree = ""; }; - 5DAED22ABD4630AAC5624E8941E2AEF6 /* Bugsnag.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Bugsnag.modulemap; sourceTree = ""; }; - 5DB49F0B786CF6030B0D1E0394E20104 /* FBSDKLoginKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginKit+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h"; sourceTree = ""; }; - 5DBF3FB68F28E2561850518033AA1CD2 /* FBSDKAppEventsStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsStateManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsStateManager.h; sourceTree = ""; }; - 5DE39AA6C157ECA49038240FB2A44D05 /* KSCrashSentry_Deadlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_Deadlock.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Deadlock.h; sourceTree = ""; }; - 5E696696914668BB093AC96F6D5BB503 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5E8813B3C19A117CA6B7E5306B6FAE90 /* Nocilla-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-prefix.pch"; sourceTree = ""; }; - 5EA47F3D2BD0EF87289F7E25CA8E949E /* SenseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SenseKit-prefix.pch"; sourceTree = ""; }; - 5EB043608664B82E0858325DFAAB25AB /* FBSDKCloseIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCloseIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m; sourceTree = ""; }; - 5EEC8A34B0F02B1085F5F8AA5BB95F7B /* DFUPeripheralSelectorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelectorDelegate.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheralSelectorDelegate.swift; sourceTree = ""; }; - 5F10AA50F9D808E14A651D36400073CE /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; - 5F26F60C58B5086675213C03F68C69EF /* KSJSONCodec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSJSONCodec.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodec.h; sourceTree = ""; }; - 5F39C2A497DAD3BE8C125CC8E093A366 /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Charts/Classes/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; - 5F3EBBB4A57E622A6B8CF82D635EB581 /* ExtensionRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExtensionRegistry.m; path = src/runtime/Classes/ExtensionRegistry.m; sourceTree = ""; }; - 5F754BE6874F52C0AEE481C4014DF92F /* NSData+Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Nocilla.h"; path = "Nocilla/Categories/NSData+Nocilla.h"; sourceTree = ""; }; - 5F8F0D44028248D41FF5604705886310 /* KSCrashReport.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashReport.c; path = KSCrash/Source/KSCrash/Recording/KSCrashReport.c; sourceTree = ""; }; - 5FF2642DBB345C190B7CE7BC91B8F21E /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 5FF6104D3C5057AEFCFB3E9F7B08D70B /* KWStringContainsMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringContainsMatcher.m; path = Classes/Matchers/KWStringContainsMatcher.m; sourceTree = ""; }; - 60071F199AE82524FB0DAC1CB9A77DFA /* SEGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGBluetooth.h; path = Pod/Classes/Internal/SEGBluetooth.h; sourceTree = ""; }; - 602D5B4A2D3EC283C37AA6C0DB230566 /* Bugsnag.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bugsnag.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6033BB43F23BE5497C2A0999EA5F2600 /* SENSound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSound.h; path = Pod/Classes/Model/SENSound.h; sourceTree = ""; }; - 60D88DACC44919B6B3E7584D3C3CA1EF /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Charts/Classes/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; + 55AE8998353601799D2740928FE4402E /* SENAPIPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIPreferences.h; path = Pod/Classes/API/SENAPIPreferences.h; sourceTree = ""; }; + 55AEC813726AA06144D720DF0C3225D8 /* UIImageEffects.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = UIImageEffects.modulemap; sourceTree = ""; }; + 55E4DB52402B80899F03DA775C4E63B2 /* BFMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent_Internal.h; path = Bolts/iOS/Internal/BFMeasurementEvent_Internal.h; sourceTree = ""; }; + 55EFAD7CE8C2FFC816EAEC49196FEC7B /* KWNull.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNull.h; path = Classes/Core/KWNull.h; sourceTree = ""; }; + 562A59A1D697000971D3D4824CD652C2 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + 562B728D03EB20E8CEE01043B76EF472 /* FBSDKAccessTokenCacheV4.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV4.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m; sourceTree = ""; }; + 56540D103ABD57110ABB078856E08B6F /* NSData+Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Nocilla.h"; path = "Nocilla/Categories/NSData+Nocilla.h"; sourceTree = ""; }; + 566F5467EF55F6E1B8946D9B73568C78 /* FBSDKIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m; sourceTree = ""; }; + 56ADAFA6A1FC7B8F320A871724643A2A /* GeneratedMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GeneratedMessage.m; path = src/runtime/Classes/GeneratedMessage.m; sourceTree = ""; }; + 56BE43E682E953A1355F695B873CA97E /* FBSDKUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m; sourceTree = ""; }; + 56C2291681C0717149BFC6AB25CF1D7A /* SENInsight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENInsight.h; path = Pod/Classes/Model/SENInsight.h; sourceTree = ""; }; + 56FB2F14FBCE04A3A5C18D4809EF7EE8 /* KWBeforeAllNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeforeAllNode.m; path = Classes/Nodes/KWBeforeAllNode.m; sourceTree = ""; }; + 5715B688519632150FD089870E3568E9 /* KSCrashSentry_MachException.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry_MachException.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_MachException.c; sourceTree = ""; }; + 5733E7174C5642A79A106C64E052CB2B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 57728E10035748ABF43FA69BE0133486 /* SENAppUnreadStats.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAppUnreadStats.m; path = Pod/Classes/Model/SENAppUnreadStats.m; sourceTree = ""; }; + 577AD3A216199C5360D3B19053E67FD3 /* FBSDKBridgeAPIProtocolWebV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m; sourceTree = ""; }; + 578A306AA4CF12D9B614387DC1E27723 /* KSCrashSentry.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry.c; sourceTree = ""; }; + 578E473A81534879A7754662CBF5C7AE /* MSDynamicsDrawerViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MSDynamicsDrawerViewController.xcconfig; sourceTree = ""; }; + 57DD91F5A5E61905A04638AA5D2A57CE /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Charts/Classes/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; + 57FE76F8C1B919EDF7834D12A9E28037 /* NALabelCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NALabelCell.h; path = NASources/NALabelCell.h; sourceTree = ""; }; + 586B161D7F124B1832EAC22D38D6AE4E /* KWSuiteConfigurationBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSuiteConfigurationBase.m; path = Classes/Config/KWSuiteConfigurationBase.m; sourceTree = ""; }; + 588E5D57CACD475B1D7DCB42022C710F /* KWCaptureSpy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWCaptureSpy.m; path = Classes/Core/KWCaptureSpy.m; sourceTree = ""; }; + 5902DD6736E2A3DC926027DBC0D63DA1 /* KWExampleDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleDelegate.h; path = Classes/Core/KWExampleDelegate.h; sourceTree = ""; }; + 59B8A25EAEC59BE4ED92085A2531580D /* FBSDKBridgeAPIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIResponse.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h; sourceTree = ""; }; + 59BBACBE70BDA52BFDDDA5FBDFCA0FA2 /* UICountingLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICountingLabel-umbrella.h"; sourceTree = ""; }; + 59C9E91FC0BD682884FCAA489ACD39B2 /* NSJSONSerialization_NSNullRemoval.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NSJSONSerialization_NSNullRemoval.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 59D8C6EBA727E624BFF2C67DD2660C94 /* SENAPISupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISupport.m; path = Pod/Classes/API/SENAPISupport.m; sourceTree = ""; }; + 5A0D5FF1E2EB16464EA2AFC9745D6FF5 /* UIImageEffects.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UIImageEffects.xcconfig; sourceTree = ""; }; + 5A0DB194846BADA3CDB8ECBFE67867AC /* FBSDKIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h; sourceTree = ""; }; + 5A9FBF3A41BB41293579F93FD9159897 /* FBSDKBridgeAPIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m; sourceTree = ""; }; + 5AA751B34FB400C5B546D77E4091BE0A /* KWNilMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNilMatcher.h; path = Classes/Matchers/KWNilMatcher.h; sourceTree = ""; }; + 5AB5D7461B216FE2AE433AD45349F9C8 /* NAPickerView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NAPickerView-dummy.m"; sourceTree = ""; }; + 5AE1CD3FAEA4DB0404B10611CB3DA5FD /* SENAPIDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIDevice.h; path = Pod/Classes/API/SENAPIDevice.h; sourceTree = ""; }; + 5AF50D984B2B6E1AA04EBF3E51FEA2D6 /* LSRegexMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSRegexMatcher.m; path = Nocilla/Matchers/LSRegexMatcher.m; sourceTree = ""; }; + 5AFCE3AECEE7DADEC095A5319B3ACA10 /* SENAppUnreadStats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAppUnreadStats.h; path = Pod/Classes/Model/SENAppUnreadStats.h; sourceTree = ""; }; + 5B129F34426CB81CDEA893B19EBA69D3 /* SENAlarm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAlarm.h; path = Pod/Classes/Model/SENAlarm.h; sourceTree = ""; }; + 5B30EA00A02896180D867FEB80C3E6E0 /* FBSDKBridgeAPIProtocolWebV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV2.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h; sourceTree = ""; }; + 5B5173D9D4D28A7CA4A6CC2185A4C1D2 /* KWBlockRaiseMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlockRaiseMatcher.m; path = Classes/Matchers/KWBlockRaiseMatcher.m; sourceTree = ""; }; + 5B8914DE772464FD283DA5E4B7715788 /* ChartFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartFillFormatter.swift; path = Charts/Classes/Formatters/ChartFillFormatter.swift; sourceTree = ""; }; + 5BACCE8024411ACAA3C99E28FCECE38F /* SVWebViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SVWebViewController.modulemap; sourceTree = ""; }; + 5BF13ADAFC3E7C4B57616F73AEC98308 /* KWProbePoller.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWProbePoller.m; path = Classes/Core/KWProbePoller.m; sourceTree = ""; }; + 5C15D030E1F39F0F0BDDB581CDE2DB8D /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5C2710DF4D9619BAEEEBEF96602BAC20 /* ZendeskProviderSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZendeskProviderSDK.framework; sourceTree = ""; }; + 5D2B89CD9830D5AFA26D97C8A4D913D9 /* SVWebViewControllerActivitySafari-iPad@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivitySafari-iPad@2x.png"; path = "SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari-iPad@2x.png"; sourceTree = ""; }; + 5D33829F632C7CADB7502D4A6043BBF0 /* FBSDKUIUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUIUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h; sourceTree = ""; }; + 5D50003F2E50559A0D5B67AB301DB57D /* SENKeyedArchiver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENKeyedArchiver.m; path = Pod/Classes/Model/SENKeyedArchiver.m; sourceTree = ""; }; + 5D784F6F1C9E83D679B31CE8B95F4C6F /* iOSDFULibrary.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = iOSDFULibrary.modulemap; sourceTree = ""; }; + 5D8C4FCD3415CEE75527DC0E85D6DEA5 /* SEGGroupPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGGroupPayload.h; path = Pod/Classes/Integrations/SEGGroupPayload.h; sourceTree = ""; }; + 5DABF3094B32A3845F36C8D867FBAC1C /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; + 5DB07497258DCEC7996C83186C394878 /* SENSupportTopic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSupportTopic.m; path = Pod/Classes/Model/SENSupportTopic.m; sourceTree = ""; }; + 5DB621DA32F0730F1B77EAFBD633E87D /* KSCrashSentry_NSException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashSentry_NSException.m; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_NSException.m; sourceTree = ""; }; + 5DEBE4581193B14746B8A112829E2EA2 /* DDAbstractDatabaseLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAbstractDatabaseLogger.h; path = Classes/DDAbstractDatabaseLogger.h; sourceTree = ""; }; + 5E545C042660025FA73C4AF01B6C0A90 /* FXKeychain-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FXKeychain-dummy.m"; sourceTree = ""; }; + 5E83BBA151286AA81933299A0C0957DD /* KWBeWithinMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeWithinMatcher.m; path = Classes/Matchers/KWBeWithinMatcher.m; sourceTree = ""; }; + 5E94D7029E29FCDB95CE98BBE37E069D /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Charts/Classes/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; + 5EA7B52007A94752AD8FC7E4D98118AF /* KWSharedExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSharedExample.m; path = "Classes/Shared Examples/KWSharedExample.m"; sourceTree = ""; }; + 5EC1E0036B5DE32DE1E6F23DB41175EB /* ChartRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartRendererBase.swift; path = Charts/Classes/Renderers/ChartRendererBase.swift; sourceTree = ""; }; + 5EF1444B5384BE14AE6FD51C9E74E370 /* ProtocolBuffers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ProtocolBuffers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5F2E3AD097EEEA586973D064EBC782DE /* AttributedMarkdown.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = AttributedMarkdown.modulemap; sourceTree = ""; }; + 5F32E88337347DBE8B0AFF6293CB01CE /* LGCharacteristic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGCharacteristic.h; path = LGBluetooth/LGCharacteristic.h; sourceTree = ""; }; + 5F34BE2951CA75E3D6179586E63E03D0 /* SORelativeDateTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SORelativeDateTransformer.m; path = SORelativeDateTransformer/SORelativeDateTransformer.m; sourceTree = ""; }; + 5F4821BB04144ED8940BDF07C07CFF98 /* LSMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSMatcher.m; path = Nocilla/Matchers/LSMatcher.m; sourceTree = ""; }; + 5F63BE0ABA7E5074872CAABDF275C28E /* NSString+Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Nocilla.h"; path = "Nocilla/Categories/NSString+Nocilla.h"; sourceTree = ""; }; + 5FD791C34D3B709A59E1B9F9EE0D1AB8 /* FBSDKAppEventsDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsDeviceInfo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsDeviceInfo.m; sourceTree = ""; }; + 5FE202EBB431425C25920E1F5651CD48 /* LSHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPResponse.h; path = Nocilla/Model/LSHTTPResponse.h; sourceTree = ""; }; + 5FEAB4674B5208451B69ED2D917B4E21 /* KSCrashSentry_MachException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_MachException.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_MachException.h; sourceTree = ""; }; + 60A69ACAB8A877160BC310DF237D806D /* SEGReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGReachability.m; path = Pod/Classes/Internal/SEGReachability.m; sourceTree = ""; }; + 60CAF3248C4832B9782CF35E8E5DB984 /* KSCrashState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashState.h; path = KSCrash/Source/KSCrash/Recording/KSCrashState.h; sourceTree = ""; }; + 60CE51DC8FFC5DFBA5B185CDB7CD41CD /* LegacyDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift; sourceTree = ""; }; + 60D124560A063CCB97750BCF0C14BB64 /* KSFileUtils.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSFileUtils.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSFileUtils.c; sourceTree = ""; }; 60DA02C91A08AC6FC38103E8A8FE111A /* Pods-SenseApp-Sense-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SenseApp-Sense-acknowledgements.markdown"; sourceTree = ""; }; - 6161161C06255A6379BAEC3C86EBFF8D /* SENServiceDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENServiceDevice.h; path = Pod/Classes/Service/SENServiceDevice.h; sourceTree = ""; }; - 6174478BA6EE6A953F6FFC15DA9729F3 /* RLMResults_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults_Private.h; path = include/RLMResults_Private.h; sourceTree = ""; }; - 61A1E6D553108B06E6683EAF3BE2BC6F /* shared_realm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = shared_realm.cpp; path = Realm/ObjectStore/shared_realm.cpp; sourceTree = ""; }; - 61E142489F11A879A0E5DC8A5F0F8386 /* SENKeyedArchiver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENKeyedArchiver.m; path = Pod/Classes/Model/SENKeyedArchiver.m; sourceTree = ""; }; - 62205BEB74365EF935AECC9C2EF7216A /* SENPairedDevices.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPairedDevices.m; path = Pod/Classes/Model/SENPairedDevices.m; sourceTree = ""; }; - 62547BE0EFFB6746BF8AC77A5898CCAA /* CGFloatType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CGFloatType.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 62606A139E993335CF0244A75E4EC9EF /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = RealmSwift/Migration.swift; sourceTree = ""; }; - 629C45EE701953B7826B41C1B0FDCCF1 /* KWAfterAllNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAfterAllNode.h; path = Classes/Nodes/KWAfterAllNode.h; sourceTree = ""; }; - 62BE933B5EA47499AD413A17857E5DED /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 62CAB9A269FD4FC7C2CCDD51BCE98011 /* ChartViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewPortHandler.swift; path = Charts/Classes/Utils/ChartViewPortHandler.swift; sourceTree = ""; }; - 63045B87CEEAF155EE592331C59AAD98 /* NAPickerView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = NAPickerView.modulemap; sourceTree = ""; }; - 63102E9D1BAD528C6073AD67C094792E /* SenseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SenseKit.modulemap; sourceTree = ""; }; - 631E7410752DCDA4946454AC79725470 /* FBSDKBridgeAPIProtocolWebV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV2.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m; sourceTree = ""; }; - 6326D73027A9EC184921AD33CC1F466E /* Kiwi.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Kiwi.modulemap; sourceTree = ""; }; - 633A1FDF6D0021D30D2F203562C5EB14 /* RealmSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-prefix.pch"; sourceTree = ""; }; - 638772E1DB67E0641819A9307CD83016 /* MSDynamicsDrawerViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MSDynamicsDrawerViewController-dummy.m"; sourceTree = ""; }; - 6388690D04EBC314C4BD56DE1CCCC37F /* SENAPIClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIClient.m; path = Pod/Classes/API/SENAPIClient.m; sourceTree = ""; }; - 63ABC3FCAA000FE323E79ED296369073 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6474085461E7ED2A41152B5AE3C3F6FC /* KSCrashReportFields.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportFields.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReportFields.h; sourceTree = ""; }; - 64822BCB87843EA567B82449B79CB693 /* RealmLineRadarDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmLineRadarDataSet.swift; path = ChartsRealm/Classes/Data/RealmLineRadarDataSet.swift; sourceTree = ""; }; - 64C98FBE189C77CD73282BF1BB7AD897 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 64E5BC801F935D39BB5BF067CC439D69 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Charts/Classes/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; - 6502818CA0708FD3224E8472F19AA786 /* SENDevicePairingInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENDevicePairingInfo.m; path = Pod/Classes/Model/SENDevicePairingInfo.m; sourceTree = ""; }; - 653C923400640C55F81E91E88B97016C /* SHSProtoBuf-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SHSProtoBuf-umbrella.h"; sourceTree = ""; }; - 65954D1ECEF526067C2014209F004B1C /* SENAPIShare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIShare.m; path = Pod/Classes/API/SENAPIShare.m; sourceTree = ""; }; - 65A0FCF518BE46B622A82AB43330FF47 /* LSHTTPStubURLProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPStubURLProtocol.h; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h; sourceTree = ""; }; - 65A4E7A2C25B2FE0BF15CA953EC9EB0B /* SENAPIInsight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIInsight.h; path = Pod/Classes/API/SENAPIInsight.h; sourceTree = ""; }; - 65C565E593EEF0089FFA3636DA0BE986 /* LGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGBluetooth.h; path = LGBluetooth/LGBluetooth.h; sourceTree = ""; }; - 65D65B91DEE2D37C88E4D0F151ABBB8E /* NSNumber+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+KiwiAdditions.h"; path = "Classes/Core/NSNumber+KiwiAdditions.h"; sourceTree = ""; }; - 6603FC8A49B4C964878043FAAA77940F /* SENAPITrends.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPITrends.h; path = Pod/Classes/API/SENAPITrends.h; sourceTree = ""; }; - 66883D36D43D00686334C468BE503B7B /* SENAPISensor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISensor.m; path = Pod/Classes/API/SENAPISensor.m; sourceTree = ""; }; - 668A01F2C20E055DFF1703F9A0A60501 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Charts/Classes/Utils/ChartColorTemplates.swift; sourceTree = ""; }; - 6697D0A95E74EF1100F11DFA77000401 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - 66B12314E4FA6036C8B3CAF26A5C4099 /* SENAPIDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIDevice.h; path = Pod/Classes/API/SENAPIDevice.h; sourceTree = ""; }; - 67040C8BF6DC80D5F9618891B4BC2804 /* LSHTTPClientHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPClientHook.m; path = Nocilla/Hooks/LSHTTPClientHook.m; sourceTree = ""; }; - 674B6ECCBB669641E988B28569DB8E36 /* SHSProtoBuf-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SHSProtoBuf-prefix.pch"; sourceTree = ""; }; - 675D9A7BD582906AE368C09FE475C0F1 /* CodedOutputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CodedOutputStream.m; path = src/runtime/Classes/CodedOutputStream.m; sourceTree = ""; }; - 679A171C34480355C1BF1DEA6FFA1AAB /* SORelativeDateTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SORelativeDateTransformer.m; path = SORelativeDateTransformer/SORelativeDateTransformer.m; sourceTree = ""; }; - 679CB3A1EE0425F819F8549E0F44CCE8 /* ChartXAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRenderer.swift; path = Charts/Classes/Renderers/ChartXAxisRenderer.swift; sourceTree = ""; }; - 67A8CFD94754CF8F4D07C4325B36361F /* KWMessageSpying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessageSpying.h; path = Classes/Core/KWMessageSpying.h; sourceTree = ""; }; - 67E8F919116392AF6FAB2B45DE755555 /* SENAPISleepSounds.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISleepSounds.m; path = Pod/Classes/API/SENAPISleepSounds.m; sourceTree = ""; }; - 67F0CCB02DE8228ACACBFCF514176539 /* KSCrashCallCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashCallCompletion.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSCrashCallCompletion.m; sourceTree = ""; }; - 6814C42194D485A8BEAE02C4161BCB57 /* SENExpansion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENExpansion.m; path = Pod/Classes/Model/SENExpansion.m; sourceTree = ""; }; - 686293D6D891D055AEB9EEBCBBE4D899 /* KWInequalityMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWInequalityMatcher.h; path = Classes/Matchers/KWInequalityMatcher.h; sourceTree = ""; }; - 6889A08C817AB661A9EC94B5BE533329 /* LSDataMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSDataMatcher.h; path = Nocilla/Matchers/LSDataMatcher.h; sourceTree = ""; }; - 68BCD4F77F990C4E98DD87E9EDE72AB6 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 68D0FB0E6E371B2B3A35AA08B4AB4A6F /* results.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results.cpp; path = Realm/ObjectStore/results.cpp; sourceTree = ""; }; - 68F3A5E5F4B87B0A9AD951EDBE22A82C /* SENPillMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPillMetadata.m; path = Pod/Classes/Model/SENPillMetadata.m; sourceTree = ""; }; - 68FD22DF751636116A33BC1F94A20AB4 /* ZendeskSDKStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = ZendeskSDKStrings.bundle; sourceTree = ""; }; - 6934C23F14EA87A17610D030ED823B49 /* FBSDKGraphRequestDataAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestDataAttachment.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m; sourceTree = ""; }; - 697B3DE7E213C6C547675708C5C67796 /* Zip-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Zip-dummy.m"; sourceTree = ""; }; - 698C7003143F532A17E15DEBBE2917EE /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 698FA93A9EF89582DACB9D50F8EB2BB8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 699C154D614D17A32548504D0F802768 /* LSHTTPClientHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPClientHook.h; path = Nocilla/Hooks/LSHTTPClientHook.h; sourceTree = ""; }; - 699CDB7937D77DF7EDE9519C053160B5 /* SENSenseMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseMetadata.m; path = Pod/Classes/Model/SENSenseMetadata.m; sourceTree = ""; }; - 699CF37DE2AC1AEA8F5B8AC9BC46ACF6 /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = zip.h; path = Zip/minizip/zip.h; sourceTree = ""; }; - 69A364A0200A2D14090DAB5368826363 /* NSURLRequest+DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+DSL.m"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.m"; sourceTree = ""; }; - 6A0D6BE5A1A3D083857535B59130F22F /* KWContainStringMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContainStringMatcher.h; path = Classes/Matchers/KWContainStringMatcher.h; sourceTree = ""; }; - 6A2077CC4C2A1D14FAD7ABE86410B6A0 /* Analytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Analytics.xcconfig; sourceTree = ""; }; - 6A7AC6B4D48D03E7C9D2029EB53778FE /* SVModalWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVModalWebViewController.m; path = SVWebViewController/SVModalWebViewController.m; sourceTree = ""; }; - 6A91063E89AF470C783E9B7148C2C30F /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; - 6ABECD7C45630381EA11AADE0FE6DD3F /* FBSDKBridgeAPIProtocolWebV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h; sourceTree = ""; }; - 6AD0BE7933819256E1A9074AD9997E3D /* SEGGroupPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGGroupPayload.h; path = Pod/Classes/Integrations/SEGGroupPayload.h; sourceTree = ""; }; - 6AF2E001ECE0A0277DC2FE0249923BE1 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 6B80F435FEAADE9F4D67CAE032388C50 /* SENLocalPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENLocalPreferences.h; path = Pod/Classes/Model/SENLocalPreferences.h; sourceTree = ""; }; - 6B840FFC0E8488ADD5153CF1157D2C73 /* KSString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSString.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSString.h; sourceTree = ""; }; - 6BA98C5109DF92A7091500CA9F577985 /* KWSharedExampleRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSharedExampleRegistry.m; path = "Classes/Shared Examples/KWSharedExampleRegistry.m"; sourceTree = ""; }; - 6BCF7E95B63229910FC0BAB98CC2162F /* KWItNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWItNode.m; path = Classes/Nodes/KWItNode.m; sourceTree = ""; }; - 6BF7A4A8A151D05D3F15BB7655ADB9BB /* KSMachApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSMachApple.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSMachApple.h; sourceTree = ""; }; - 6C21682B579A44D8AE1BE5BFF7C3EB0B /* SEGSegmentIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGSegmentIntegration.h; path = Pod/Classes/Internal/SEGSegmentIntegration.h; sourceTree = ""; }; - 6C4B11940DC6C84BB45B21E54993B612 /* MSDynamicsDrawerViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MSDynamicsDrawerViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6C4F2BB11602D30A924E4B7CDAB32B1F /* SEGReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGReachability.m; path = Pod/Classes/Internal/SEGReachability.m; sourceTree = ""; }; - 6C7FF401A31973A2630448A9C6288B0A /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Charts/Classes/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; - 6C9C97E718BF92CF39FC1EDD65906410 /* KWBeWithinMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeWithinMatcher.h; path = Classes/Matchers/KWBeWithinMatcher.h; sourceTree = ""; }; - 6CA1374168936E98895A7E75F1042053 /* RealmBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmBaseDataSet.swift; path = ChartsRealm/Classes/Data/RealmBaseDataSet.swift; sourceTree = ""; }; - 6CC784A42750512714DD58D23E7F9B15 /* SEGSegmentIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGSegmentIntegration.m; path = Pod/Classes/Internal/SEGSegmentIntegration.m; sourceTree = ""; }; - 6CD7D7E88843005C11857E774ECD69D2 /* FBSDKTimeSpentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTimeSpentData.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKTimeSpentData.m; sourceTree = ""; }; - 6CEEC7DD92FE839914255D0B1A4E2ED1 /* CodedInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CodedInputStream.h; path = src/runtime/Classes/CodedInputStream.h; sourceTree = ""; }; - 6D09A59114787B42FD5795CECE6D8CB5 /* KWExampleSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExampleSuite.m; path = Classes/Core/KWExampleSuite.m; sourceTree = ""; }; - 6D13766CE4A4C8AA2B8336726CE3D0B8 /* FBSDKCoreKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKCoreKit-dummy.m"; sourceTree = ""; }; - 6D38765DAABD4F915E1A8A14DA7DAC1A /* NSString+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Matcheable.m"; path = "Nocilla/Matchers/NSString+Matcheable.m"; sourceTree = ""; }; - 6D52A23829C3D8FF8EBAB3DA32B4A028 /* SVWebViewControllerActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewControllerActivity.h; path = SVWebViewController/UIActivities/SVWebViewControllerActivity.h; sourceTree = ""; }; - 6D54DE91260CFD1DB2BCA0A551928D51 /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Charts/Classes/Charts/CombinedChartView.swift; sourceTree = ""; }; - 6D5CD2562B76BBBF989C2ABA8E5DDEA6 /* SENAPISupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISupport.h; path = Pod/Classes/API/SENAPISupport.h; sourceTree = ""; }; - 6DC0843C0B94B968DB11E2D23CFF2A6B /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; - 6DD8958EE63D9B1C2BA06BF41068CD14 /* _FBSDKTemporaryErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKTemporaryErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h; sourceTree = ""; }; - 6E0A1F2FE6088C78D389F1C13973785C /* KWBeBetweenMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeBetweenMatcher.h; path = Classes/Matchers/KWBeBetweenMatcher.h; sourceTree = ""; }; - 6E4833113746957048616673A068E48F /* LSStringMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStringMatcher.m; path = Nocilla/Matchers/LSStringMatcher.m; sourceTree = ""; }; - 6E6B2E492FF069C9245A7B2097E6BD74 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; - 6E79ECBA479AFE37BDD2F49E161B9EA9 /* KWHaveValueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWHaveValueMatcher.m; path = Classes/Matchers/KWHaveValueMatcher.m; sourceTree = ""; }; - 6E8BD4235F01DC878576F7B168C13D70 /* KWLetNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWLetNode.m; path = Classes/Nodes/KWLetNode.m; sourceTree = ""; }; - 6E98215128C662955799889F2CAA71EA /* SecureDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUExecutor.swift; sourceTree = ""; }; - 6E9FD9B97D7F1A7934D7FD48FA78E7D7 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Charts/Classes/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; - 6EAD5F21D5593EE03643EF45EFC5B689 /* KSCrashState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashState.h; path = KSCrash/Source/KSCrash/Recording/KSCrashState.h; sourceTree = ""; }; - 6EB1DC83DB05A4D81887ADD3989C3CF5 /* KWSharedExampleRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSharedExampleRegistry.h; path = "Classes/Shared Examples/KWSharedExampleRegistry.h"; sourceTree = ""; }; - 6ECD9BC2A8DC61B32F26B5EDF97826CD /* FBSDKAccessTokenCacheV3.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m; sourceTree = ""; }; - 6EE13E5DA0F4A0981D13C487DE6D5A11 /* FBSDKServerConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfiguration+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h"; sourceTree = ""; }; - 6F20E287244779869881887C7A8DF6DB /* SENAlarm.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAlarm.m; path = Pod/Classes/Model/SENAlarm.m; sourceTree = ""; }; - 6F97CC12789586DFE38ABE4D2DABB1D4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6FAD384CA61220FC6C0EBDCF71887A59 /* LGService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGService.h; path = LGBluetooth/LGService.h; sourceTree = ""; }; - 6FD22AE258AA2FA099963A6BC59483FF /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - 6FFF7643372191487B450718C0086636 /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Charts/Classes/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; - 70263B5FFD43AB54AF0146472E320031 /* FBSDKAppEventsDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsDeviceInfo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsDeviceInfo.m; sourceTree = ""; }; - 70F12C4E47B0DCA91F49059A08F57F7F /* SENSleepSounds.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSounds.m; path = Pod/Classes/Model/SENSleepSounds.m; sourceTree = ""; }; - 712D9029FB3B2BDBD3B69D8F64A8BFA6 /* ChartXAxisRendererBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRendererBarChart.swift; path = Charts/Classes/Renderers/ChartXAxisRendererBarChart.swift; sourceTree = ""; }; - 713EB92E338EE67B6A63F7D4C94D31DE /* BFMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFMeasurementEvent.m; path = Bolts/iOS/BFMeasurementEvent.m; sourceTree = ""; }; - 714445869234D7313CAC207E8E49CB2B /* KWStringPrefixMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringPrefixMatcher.m; path = Classes/Matchers/KWStringPrefixMatcher.m; sourceTree = ""; }; - 71BD86D01EFADE5A9861DE5E07627F9E /* FBSDKGraphRequestPiggybackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestPiggybackManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h; sourceTree = ""; }; - 71FAA6A49C10BD7210902FAC87D9CA4C /* KWBeZeroMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeZeroMatcher.h; path = Classes/Matchers/KWBeZeroMatcher.h; sourceTree = ""; }; - 72660C036C0D3B1AD0A983C7DA52EC88 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 726C3601B462991860E1B038EB6F814F /* SENTrends.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTrends.m; path = Pod/Classes/Model/SENTrends.m; sourceTree = ""; }; - 727E989FEB0057A0A1DDE266B09916B6 /* NSMethodSignature+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMethodSignature+KiwiAdditions.h"; path = "Classes/Core/NSMethodSignature+KiwiAdditions.h"; sourceTree = ""; }; - 72B74F03AC58A3B6983EA983A09182C5 /* LegacyDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUServiceInitiator.swift; sourceTree = ""; }; - 72CF37D4A62C5744F55ECA38FC6C55A1 /* Nocilla.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Nocilla.modulemap; sourceTree = ""; }; - 72DCB5A45D848E4F873A3FDBAD5123DB /* SecureDFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUControlPoint.swift; sourceTree = ""; }; - 731F2C72F18E5784B41C850B9E1254BD /* FBSDKCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h; sourceTree = ""; }; - 73F5E6099D39E4AE83E60F568E5C8AE3 /* FBSDKPaymentObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKPaymentObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKPaymentObserver.m; sourceTree = ""; }; - 743782D72B1ED071CAE9BC1503AB3EB7 /* results_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results_notifier.cpp; path = Realm/ObjectStore/impl/results_notifier.cpp; sourceTree = ""; }; - 746B62D265688954D555ECD81E6584A6 /* FBSDKLoginManagerLoginResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLoginResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h; sourceTree = ""; }; - 749A89177E5F0B042DF7AE566C9AE00E /* KWBeEmptyMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeEmptyMatcher.m; path = Classes/Matchers/KWBeEmptyMatcher.m; sourceTree = ""; }; - 74B38116E145FFDE350DCE9982C147F4 /* FBSDKAccessTokenCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCache.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h; sourceTree = ""; }; - 74D70D31A0FF212F8D9D641720DBD63A /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Charts/Classes/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; - 74FFE9AD85BBC0E98D59E0361ABFBA5B /* FBSDKBridgeAPIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h; sourceTree = ""; }; - 75AB2EA628467348AC7BA9E59878CA7A /* MutableExtensionRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MutableExtensionRegistry.m; path = src/runtime/Classes/MutableExtensionRegistry.m; sourceTree = ""; }; - 75C9A5239F5E5B11C78F7DBEBB4E8965 /* FBSDKErrorConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m; sourceTree = ""; }; + 60DF862CA272F10F2986D4708804E39C /* KSObjCApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSObjCApple.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSObjCApple.h; sourceTree = ""; }; + 6132AF44FDD8061CA3C9D82D66F577B9 /* SORelativeDateTransformer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SORelativeDateTransformer-prefix.pch"; sourceTree = ""; }; + 615328B5C4B686245B253ECD664D68AE /* Nocilla.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nocilla.xcconfig; sourceTree = ""; }; + 61B9DF7AF156E9282089ED2E5493D517 /* FBSDKAccessTokenCacheV3_21.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_21.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h; sourceTree = ""; }; + 61C87EEC783B9C49305471E7207BFDFF /* Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nocilla.h; path = Nocilla/Nocilla.h; sourceTree = ""; }; + 6213DEFAD38FC99CD891719C48EE862F /* LSRegexMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSRegexMatcher.h; path = Nocilla/Matchers/LSRegexMatcher.h; sourceTree = ""; }; + 62535C65657B6DFFAE34330A0B3BBE6F /* KWBeforeAllNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeforeAllNode.h; path = Classes/Nodes/KWBeforeAllNode.h; sourceTree = ""; }; + 62B973EFF5A253B2FF5728B11E57D53D /* KSCrashReport.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashReport.c; path = KSCrash/Source/KSCrash/Recording/KSCrashReport.c; sourceTree = ""; }; + 62EAE1B4A2C02F71986EF9A5BB8069ED /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 63144A2E58C65F689B89B16FC05EDCE9 /* DDLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLog.h; path = Classes/DDLog.h; sourceTree = ""; }; + 6318A0CCA38CE2AFD16C9FD64A153241 /* aescrypt.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = aescrypt.c; path = Zip/minizip/aes/aescrypt.c; sourceTree = ""; }; + 637BD958B4176FF1EB9163C7C6D1F79E /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 638054E0C7139CD26C2C5886C739C2DF /* FBSDKBoltsMeasurementEventListener.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBoltsMeasurementEventListener.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKBoltsMeasurementEventListener.m; sourceTree = ""; }; + 63AE5F2F0D4EF47B204BE53E37A472E4 /* FBSDKAccessTokenCacheV3_17.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_17.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h; sourceTree = ""; }; + 63E0071E67D171F0988844A161EB396C /* HorizontalBarChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartHighlighter.swift; path = Charts/Classes/Highlight/HorizontalBarChartHighlighter.swift; sourceTree = ""; }; + 64060F6F355865A32BE1F71C69EE2C1B /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6417190502C8B65AF0EC31F1D132CED1 /* FBSDKGraphRequestConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h; sourceTree = ""; }; + 648520DAE61105BB0EF4E15CF98FEEA6 /* KWStringContainsMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringContainsMatcher.m; path = Classes/Matchers/KWStringContainsMatcher.m; sourceTree = ""; }; + 648FB8BDDBFC2009FB0953B20F61FE96 /* ExtendableMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtendableMessage.h; path = src/runtime/Classes/ExtendableMessage.h; sourceTree = ""; }; + 6528415ECA2228EEC66563ED33B20895 /* Bugsnag-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bugsnag-dummy.m"; sourceTree = ""; }; + 654980C250A209F92EDD89C370A53C8C /* KWMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMock.h; path = Classes/Mocking/KWMock.h; sourceTree = ""; }; + 65711872A53C43C694E444E338CE8CD6 /* KWValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWValue.m; path = Classes/Core/KWValue.m; sourceTree = ""; }; + 65A10225050C3CCB2041EE5055A99AE6 /* BFAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererController.h; path = Bolts/iOS/BFAppLinkReturnToRefererController.h; sourceTree = ""; }; + 65BE41455511744E43181C0589A265AF /* KWSymbolicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSymbolicator.m; path = Classes/Core/KWSymbolicator.m; sourceTree = ""; }; + 6608A7474DE4A47813D750963FEE1870 /* KWRespondToSelectorMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRespondToSelectorMatcher.h; path = Classes/Matchers/KWRespondToSelectorMatcher.h; sourceTree = ""; }; + 6649252A7474B6DE5BECF5D3D3A87F1C /* NSObject+KiwiVerifierAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiVerifierAdditions.m"; path = "Classes/Core/NSObject+KiwiVerifierAdditions.m"; sourceTree = ""; }; + 665CABBB1FC2D67AE1D7E42E87182C1F /* BFAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkTarget.h; path = Bolts/iOS/BFAppLinkTarget.h; sourceTree = ""; }; + 66CE9739342D2744EC6F55CFB0BE9629 /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; + 66EBA0556CBC5C94EC161FCA1CDA42A0 /* LegacyDFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUServiceController.swift; sourceTree = ""; }; + 67766D8DAD9E1221E70CC3BBB244FE57 /* KWBeforeEachNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeforeEachNode.m; path = Classes/Nodes/KWBeforeEachNode.m; sourceTree = ""; }; + 677FCE0E4C8C6CCD3C8F0EC119032BC4 /* LSStubRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequest.h; path = Nocilla/Stubs/LSStubRequest.h; sourceTree = ""; }; + 679FD495DB088FC7B13B0E45B95EDD43 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 67E79741E2A35C72B8D8DE88FD37F900 /* CGFloatType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CGFloatType.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6826E19A38CE2C9451C669B5A0B03E09 /* BugsnagBreadcrumb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagBreadcrumb.h; path = Source/Bugsnag/BugsnagBreadcrumb.h; sourceTree = ""; }; + 68DA0FF5F2704BCA2382CC476CA2A74B /* UnknownFieldSetBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnknownFieldSetBuilder.h; path = src/runtime/Classes/UnknownFieldSetBuilder.h; sourceTree = ""; }; + 68FE950065EFC2079C9CEC56B11DC411 /* UnknownFieldSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UnknownFieldSet.m; path = src/runtime/Classes/UnknownFieldSet.m; sourceTree = ""; }; + 690E8B60BA5A74CA606F6BA1EAFB4512 /* SENAPISupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISupport.h; path = Pod/Classes/API/SENAPISupport.h; sourceTree = ""; }; + 692272386CFEA940CD5C3628FEDEA94F /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Charts/Classes/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; + 693527D490A57FA868E12DED96BE4BA1 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Charts/Classes/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; + 6944DFF218B86D54786D9B6EFE8929AF /* NSObject+KiwiVerifierAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiVerifierAdditions.h"; path = "Classes/Core/NSObject+KiwiVerifierAdditions.h"; sourceTree = ""; }; + 69877F262F2CDFDA8AE1195CF28064A3 /* FBSDKAppEventsStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsStateManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsStateManager.m; sourceTree = ""; }; + 69C14FC0724F35141F62185ECAB1B686 /* NSString+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Matcheable.m"; path = "Nocilla/Matchers/NSString+Matcheable.m"; sourceTree = ""; }; + 6A00450CA43702F847DCF3C9FD344967 /* CGFloatType-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGFloatType-umbrella.h"; sourceTree = ""; }; + 6A873369AB97A87DC132F20B6FF3DBC8 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Charts/Classes/Charts/LineChartView.swift; sourceTree = ""; }; + 6AB6A26D0EC85C92AC8A47CCEA760E25 /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; + 6ABE4D472F478150170F5755D7D6993E /* KWStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringUtilities.m; path = Classes/Core/KWStringUtilities.m; sourceTree = ""; }; + 6B120066EB344A80959ADD129D540620 /* NAPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NAPickerView.m; path = NASources/NAPickerView.m; sourceTree = ""; }; + 6B12E317A11DB60199C7854A9F2AC9E0 /* SHSProtoBuf.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SHSProtoBuf.xcconfig; sourceTree = ""; }; + 6B288CA94E516BD12D019D42E8471ABE /* KWGenericMatchEvaluator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatchEvaluator.h; path = Classes/Matchers/KWGenericMatchEvaluator.h; sourceTree = ""; }; + 6B30B74EC9369440BAAF252DC3AD2C61 /* ASIHTTPRequestStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ASIHTTPRequestStub.h; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h; sourceTree = ""; }; + 6B316E2FCCC7F3967DB531EBB1BC9A2B /* SenseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SenseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B8709C22DA5CBBB213CCEBDF61E61AD /* SEGLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGLocation.h; path = Pod/Classes/Internal/SEGLocation.h; sourceTree = ""; }; + 6B9C772F1E55C8A05672A9D4B175931A /* KWRegularExpressionPatternMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRegularExpressionPatternMatcher.m; path = Classes/Matchers/KWRegularExpressionPatternMatcher.m; sourceTree = ""; }; + 6BAE7F11897517987478A031E6CC725B /* FBSDKLoginKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-umbrella.h"; sourceTree = ""; }; + 6BC0C583A4CD135ED0E927C4103D1F73 /* FBSDKServerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h; sourceTree = ""; }; + 6BD4AB286987E116BD933718676D63FD /* SENSensorDataRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSensorDataRequest.h; path = Pod/Classes/Model/SENSensorDataRequest.h; sourceTree = ""; }; + 6C4C05B41AA902BDE02CAA2A5CA6CF97 /* SENSleepPillManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepPillManager.h; path = Pod/Classes/BLE/SENSleepPillManager.h; sourceTree = ""; }; + 6C52C16FDF3452C375D66CD6691BC6C8 /* KWSharedExampleRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSharedExampleRegistry.m; path = "Classes/Shared Examples/KWSharedExampleRegistry.m"; sourceTree = ""; }; + 6CA825F7886DFC1E6F4B8022E9053B09 /* NSNumber+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+KiwiAdditions.m"; path = "Classes/Core/NSNumber+KiwiAdditions.m"; sourceTree = ""; }; + 6CC974D9021F7EBE4956030F00A920A6 /* KWWorkarounds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWWorkarounds.h; path = Classes/Core/KWWorkarounds.h; sourceTree = ""; }; + 6CD6773FE4014D790B7AC1F2986F5805 /* KSCrashSentry_Signal.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry_Signal.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Signal.c; sourceTree = ""; }; + 6D06764DC8654BCEE6DAA0B227536ACD /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = SVWebViewController/en.lproj; sourceTree = ""; }; + 6DB759A309ED61A81CC30A0F9927C8C3 /* SecureDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceInitiator.swift; sourceTree = ""; }; + 6DDFA79FEF9EA4E6B5D4E4B6E1694EF4 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + 6DF46AEFF8A62696E8B67DB4F29B52BB /* AttributedMarkdown-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AttributedMarkdown-dummy.m"; sourceTree = ""; }; + 6DFE5A0DC97CF8E53CD39FA2A5CE7009 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6E1D986AB04C62A132CD0F8AD7A98512 /* DFUStreamZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamZip.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamZip.swift; sourceTree = ""; }; + 6E519CA7E94848A7153051B9E7309DA1 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 6E6D30614AAEBD016227B2962E602C24 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Charts/Classes/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; + 6EA18FC666C3D52D60860404E6189215 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + 6EE5890B03FE71D88FC154792221EE62 /* KSArchSpecific.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSArchSpecific.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSArchSpecific.h; sourceTree = ""; }; + 6F900352B0F5A4653207338C819BF803 /* KWSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSpec.m; path = Classes/Core/KWSpec.m; sourceTree = ""; }; + 6FF9B04A631E27F0EA56025C0BB21FC6 /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = Zip/Zip.swift; sourceTree = ""; }; + 701ED8A98D736C0AC5D16EC63EAFED59 /* ChartFill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartFill.swift; path = Charts/Classes/Utils/ChartFill.swift; sourceTree = ""; }; + 7058B9F355950BAF6579350B07C98A47 /* KWFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFormatter.m; path = Classes/Core/KWFormatter.m; sourceTree = ""; }; + 7076755D76989F4EA9F2DA4A59AA97A6 /* SENSleepSoundsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundsState.m; path = Pod/Classes/Model/SENSleepSoundsState.m; sourceTree = ""; }; + 7078A20ECA04DECD402A7BAD1252EBC3 /* SENTimelineMetric.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTimelineMetric.m; path = Pod/Classes/Model/SENTimelineMetric.m; sourceTree = ""; }; + 7083FEB26BB5D6669D97D4F1F20BBA3A /* FBSDKKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStore.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h; sourceTree = ""; }; + 708D5018FDD710A7CA8829585A282BE1 /* KSCrash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrash.m; path = KSCrash/Source/KSCrash/Recording/KSCrash.m; sourceTree = ""; }; + 709283AE668F1BC1B9EB5A2D8864146B /* FBSDKCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h; sourceTree = ""; }; + 70A8433D2E31F37A6432D055283902F9 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 70AFFD18D538849330A0A5399111B567 /* BugsnagIosNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagIosNotifier.h; path = Source/Bugsnag/BugsnagIosNotifier.h; sourceTree = ""; }; + 70C70C3A54EC362526B16C3FFA52B735 /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 70C8376152869595E9A48C6D0CD2452F /* FBSDKAccessTokenCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCache.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h; sourceTree = ""; }; + 70CE9A83B7A293A1316C7DFE714A6C0D /* FBSDKLoginCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginCompletion.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m; sourceTree = ""; }; + 70D4BBDD46DF10849A1B199EC4C81A0D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 713CD36A92527DF40A2E07D59A5FE404 /* KWBeWithinMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeWithinMatcher.h; path = Classes/Matchers/KWBeWithinMatcher.h; sourceTree = ""; }; + 7173D15CEE9538607C61F57B5726B009 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Charts/Classes/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; + 71AC4726874D4FFCC177EFA8F5174CD6 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 71B2339DE3DAE62FB7364C06EA772127 /* MessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageBuilder.h; path = src/runtime/Classes/MessageBuilder.h; sourceTree = ""; }; + 71B338959780FB7A9328D16A8717F90D /* KSSignalInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSignalInfo.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSignalInfo.h; sourceTree = ""; }; + 71C68B3BBE91BAC6B8028735239AF219 /* KiwiMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiMacros.h; path = Classes/Core/KiwiMacros.h; sourceTree = ""; }; + 71CB5F8DCEA6BC36ACD6318A78E938F0 /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Charts/Classes/Charts/PieChartView.swift; sourceTree = ""; }; + 7263CE090D8B823DB8DAE44133226E1E /* DDASLLogCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogCapture.h; path = Classes/DDASLLogCapture.h; sourceTree = ""; }; + 729F58CC5730FA85519844F0AFA19BB9 /* CGFloatType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CGFloatType.m; path = CGFloatType/CGFloatType.m; sourceTree = ""; }; + 72C68BA0D692007B78E5496C24AAA619 /* FBSDKAccessTokenCaching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCaching.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h; sourceTree = ""; }; + 72D1683657A763EE42197B76A9717F61 /* BFURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL.h; path = Bolts/iOS/BFURL.h; sourceTree = ""; }; + 73333867F2E3DF7460199601A0428751 /* KWContextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContextNode.h; path = Classes/Nodes/KWContextNode.h; sourceTree = ""; }; + 7357B28B445072BDC2324E9CE165FC69 /* SENSenseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseManager.m; path = Pod/Classes/BLE/SENSenseManager.m; sourceTree = ""; }; + 73820AE304E327C7EC3889A146127BF1 /* SENPillMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPillMetadata.h; path = Pod/Classes/Model/SENPillMetadata.h; sourceTree = ""; }; + 73A122698A5F42AE9943B9827A73084C /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; + 73FA3FF5FE5F90411F3F313B0A585CA6 /* FBSDKTriStateBOOL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTriStateBOOL.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h; sourceTree = ""; }; + 7494CD35D990A23DD3B407EECE0A1D19 /* KWBeZeroMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeZeroMatcher.h; path = Classes/Matchers/KWBeZeroMatcher.h; sourceTree = ""; }; + 749739E40CE9937DFECA3F01767E38E5 /* KWBeEmptyMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeEmptyMatcher.h; path = Classes/Matchers/KWBeEmptyMatcher.h; sourceTree = ""; }; + 7556E2613DAC78B968776F661F320021 /* ChartTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartTransformer.swift; path = Charts/Classes/Utils/ChartTransformer.swift; sourceTree = ""; }; + 7573F218997372DF6C922BC1C1FDFE7E /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Charts/Classes/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; + 75CDDC0B351DE7BCD88EE204F53032D0 /* DDASLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogger.h; path = Classes/DDASLLogger.h; sourceTree = ""; }; + 75D09FC8C0B0D65B401AB2A03AF90305 /* KSCrashReportFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportFilter.h; path = KSCrash/Source/KSCrash/Reporting/Filters/KSCrashReportFilter.h; sourceTree = ""; }; 75DA5934AD51BEFDC49D76842971BCE4 /* Pods-SenseApp-Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SenseApp-Tests.modulemap"; sourceTree = ""; }; - 7616EFB9F5F1639402CC9AC0C5E353CC /* RLMMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration.h; path = include/RLMMigration.h; sourceTree = ""; }; - 762B308598A35E1F8271A22397E3A249 /* KWFailure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFailure.h; path = Classes/Core/KWFailure.h; sourceTree = ""; }; - 7644891F16855D475219EF10C38A17B8 /* SENAnswer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAnswer.m; path = Pod/Classes/Model/SENAnswer.m; sourceTree = ""; }; - 76816CB9FD872D56978B1245866EC284 /* ChartLegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLegendRenderer.swift; path = Charts/Classes/Renderers/ChartLegendRenderer.swift; sourceTree = ""; }; - 769716EFAEAB6B5B82EF275FDBDFE5CD /* KWExampleDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleDelegate.h; path = Classes/Core/KWExampleDelegate.h; sourceTree = ""; }; - 76B9B5C63938E9738C3E592A1789B848 /* KWBlockRaiseMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlockRaiseMatcher.m; path = Classes/Matchers/KWBlockRaiseMatcher.m; sourceTree = ""; }; - 76C23BDDFC27ECAF4C8FB7E29659161E /* FBSDKBridgeAPIProtocolType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolType.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h; sourceTree = ""; }; - 770F39C7C5B4DA0EDF9436BD64A28EB2 /* SENAPIPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIPreferences.h; path = Pod/Classes/API/SENAPIPreferences.h; sourceTree = ""; }; - 777842B9BA230B2B733783D7627054E4 /* KWNull.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNull.h; path = Classes/Core/KWNull.h; sourceTree = ""; }; - 777AE39430DF91025EC3A6110D996E06 /* UICountingLabel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UICountingLabel.xcconfig; sourceTree = ""; }; - 779318520299B237A12EADD4E82EA994 /* KWCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWCallSite.m; path = Classes/Core/KWCallSite.m; sourceTree = ""; }; - 7796091DF6A11C61913B960E3A3D6F6B /* RLMArrayLinkView.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMArrayLinkView.mm; path = Realm/RLMArrayLinkView.mm; sourceTree = ""; }; - 77A1FDD29683DEF29D837960B8445F33 /* FBSDKBridgeAPIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIResponse.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h; sourceTree = ""; }; - 77AAA51322E2BCA46E4D48A2DF760432 /* NSObject+KiwiSpyAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiSpyAdditions.m"; path = "Classes/Core/NSObject+KiwiSpyAdditions.m"; sourceTree = ""; }; - 77C03F4BAC93824E05E6ABEC1D888654 /* KWBeforeAllNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeforeAllNode.h; path = Classes/Nodes/KWBeforeAllNode.h; sourceTree = ""; }; - 77E181FB001DAB7E09FB02BB9F5F8610 /* iOSDFULibrary-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iOSDFULibrary-dummy.m"; sourceTree = ""; }; - 78056ABA94955BCD9A275D1D09C54AC1 /* FBSDKDynamicFrameworkLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDynamicFrameworkLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m; sourceTree = ""; }; - 785A6061EBF846C22D32C454D75D72C8 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; - 786DBB3D1F79F530BDF99E5341613264 /* Zip-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-umbrella.h"; sourceTree = ""; }; - 7877AB20B2ECD5CF8FA2088732C3E1AD /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Charts/Classes/Charts/ChartViewBase.swift; sourceTree = ""; }; - 789582586C33A6BCC215BA4D6AA12DBA /* KWFutureObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFutureObject.h; path = Classes/Core/KWFutureObject.h; sourceTree = ""; }; - 78A05BAC6F99C00B16DC9BF8714CB64C /* SEGScreenPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGScreenPayload.m; path = Pod/Classes/Integrations/SEGScreenPayload.m; sourceTree = ""; }; - 78CDE200E2E6FBC7396ADC2768D206E8 /* SEGIdentifyPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGIdentifyPayload.m; path = Pod/Classes/Integrations/SEGIdentifyPayload.m; sourceTree = ""; }; - 78D03B60D8BE2DCD60B4D9DBF222F1BD /* KWCaptureSpy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCaptureSpy.h; path = Classes/Core/KWCaptureSpy.h; sourceTree = ""; }; - 78D7A724E9CBF9958150007671ECA798 /* LSASIHTTPRequestAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestAdapter.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.m; sourceTree = ""; }; - 78F60CA651949BE629E319BE82D49441 /* SVWebViewControllerActivitySafari.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewControllerActivitySafari.h; path = SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.h; sourceTree = ""; }; - 79256F8A146F1F13059B89A99BBD914D /* SenseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SenseKit-dummy.m"; sourceTree = ""; }; - 797652F0E7C3369AF97E5A640E1F4180 /* BugsnagOSXNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagOSXNotifier.m; path = Source/Bugsnag/BugsnagOSXNotifier.m; sourceTree = ""; }; - 797A1965BCADDE793A1985B9FC7B4D3D /* SENSensorDataRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSensorDataRequest.h; path = Pod/Classes/Model/SENSensorDataRequest.h; sourceTree = ""; }; - 79B4D01F1D8BC2011FAC7D0FE1FC4A27 /* MessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageBuilder.h; path = src/runtime/Classes/MessageBuilder.h; sourceTree = ""; }; - 79C29EAF45C835A0C947EBE5AECDAF4B /* ExtensionRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtensionRegistry.h; path = src/runtime/Classes/ExtensionRegistry.h; sourceTree = ""; }; - 79E119E5B456D9715BDE3A4F7E1ED930 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 7A0723EBA63ED0EE86CDEB22B933B3AA /* ChartYAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxisRendererHorizontalBarChart.swift; path = Charts/Classes/Renderers/ChartYAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 7A49493E2FDDF15FA2E657168E2559C9 /* hmac.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hmac.h; path = Zip/minizip/aes/hmac.h; sourceTree = ""; }; - 7A4BBD0DEDAE9900534393675E25AD24 /* fileenc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fileenc.h; path = Zip/minizip/aes/fileenc.h; sourceTree = ""; }; - 7A6C4BA71CBDF218F88737B3E39F99A2 /* SENAPINotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPINotification.m; path = Pod/Classes/API/SENAPINotification.m; sourceTree = ""; }; - 7A6D83EF96DF0651EEB4D1CC55C1520C /* KWBeZeroMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeZeroMatcher.m; path = Classes/Matchers/KWBeZeroMatcher.m; sourceTree = ""; }; - 7AE29341239991F2189F4F9CBA3510BC /* SORelativeDateTransformer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SORelativeDateTransformer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B44503BE91EBBA82B7213407C04BC84 /* KWAny.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAny.h; path = Classes/Core/KWAny.h; sourceTree = ""; }; - 7B54660EB99686B4ECBB9FE6B56EF9F3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7B5550DFE4FB9AC96647ABAA12C4D9AF /* KWCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCallSite.h; path = Classes/Core/KWCallSite.h; sourceTree = ""; }; - 7B6330290D2F9804B9A1DC2C49560C59 /* BFAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkResolving.h; path = Bolts/iOS/BFAppLinkResolving.h; sourceTree = ""; }; - 7B75AADA89DE37AAA46AA2C368F36510 /* KSCrashSentry_Deadlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashSentry_Deadlock.m; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Deadlock.m; sourceTree = ""; }; - 7B98EB140582996FA73E90B47544AE92 /* DFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUServiceInitiator.swift; sourceTree = ""; }; - 7BB4458ED22BE2B71962676406F0B196 /* SENAPISpeech.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISpeech.h; path = Pod/Classes/API/SENAPISpeech.h; sourceTree = ""; }; - 7BC5FE6235AC9424CC9199E1F42DCBAD /* DFUPeripheralSelector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelector.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheralSelector.swift; sourceTree = ""; }; - 7BD0189544899A0ECC6922F98ABA4A58 /* KWSuiteConfigurationBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSuiteConfigurationBase.m; path = Classes/Config/KWSuiteConfigurationBase.m; sourceTree = ""; }; - 7C371DADD680E8526B1D22A68954751F /* KWContainStringMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContainStringMatcher.m; path = Classes/Matchers/KWContainStringMatcher.m; sourceTree = ""; }; - 7C5CB28B621DA15A8BBA82D2358CAD2B /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; - 7C5D232433B8193471CA138255302B9A /* FXKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FXKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7CD742FAA64C39D5ACD3C727AD3605D7 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 7CFB6A624AA5FF897966C6FB11315910 /* DFUFirmware.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUFirmware.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFU/DFUFirmware.swift; sourceTree = ""; }; - 7DD5A92764853FEEA688048ADEE7D25A /* KSSingleton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSingleton.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSingleton.h; sourceTree = ""; }; - 7DDF821E9A777A2E7AD71B40534BB2E1 /* SENAPIFeature.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIFeature.h; path = Pod/Classes/API/SENAPIFeature.h; sourceTree = ""; }; - 7E0136B6FBD8E625C2B5CC9003001A6D /* KSSafeCollections.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSSafeCollections.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSSafeCollections.m; sourceTree = ""; }; - 7E2CAE9CEA184EE79FF584EBF073D467 /* UIImageEffects-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImageEffects-umbrella.h"; sourceTree = ""; }; - 7E6D3327F6F0FBC131AE30865BD2C537 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; - 7E9C2FFEDD4135FC31D3E302AF193592 /* RLMObservation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObservation.mm; path = Realm/RLMObservation.mm; sourceTree = ""; }; - 7EA6AB5FDE3F232D957BB6AF846E62F7 /* SENPillMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPillMetadata.h; path = Pod/Classes/Model/SENPillMetadata.h; sourceTree = ""; }; - 7EBC339B21403BB6A98F3D743D1E288F /* SENTimelineSegment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTimelineSegment.h; path = Pod/Classes/Model/SENTimelineSegment.h; sourceTree = ""; }; - 7F0B4184D7F66E016122243C45FBDAF3 /* FBSDKGraphRequestDataAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestDataAttachment.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h; sourceTree = ""; }; - 7FA610537B2D9D3E09C6FA7FB85B3A36 /* aeskey.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = aeskey.c; path = Zip/minizip/aes/aeskey.c; sourceTree = ""; }; - 7FCDC1CDDD4B21C057D0DFCE9A1A67DF /* ChartSelectionDetail.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartSelectionDetail.swift; path = Charts/Classes/Utils/ChartSelectionDetail.swift; sourceTree = ""; }; - 7FF693E807E4131E1228248EB11151F8 /* SVWebViewControllerActivityChrome-iPad@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivityChrome-iPad@2x.png"; path = "SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad@2x.png"; sourceTree = ""; }; - 800CC42D515D97B2D648097DB325B14D /* Model.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Model.h; path = Pod/Classes/Model/Model.h; sourceTree = ""; }; - 804037B80A1EFDF9670DF335BACA7E1E /* FBSDKAccessTokenCaching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCaching.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h; sourceTree = ""; }; - 804668236F9469976216B0979EE3650B /* FBSDKSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSettings.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h; sourceTree = ""; }; - 8051D07C2BA8F363F35B05264A222EEA /* index_set.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_set.cpp; path = Realm/ObjectStore/index_set.cpp; sourceTree = ""; }; - 807D313FF605EBE87CCED81694156D1F /* DDASLLogCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogCapture.m; path = Classes/DDASLLogCapture.m; sourceTree = ""; }; - 80BE88147C827E65BADD584EEAB06ED6 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = AFNetworking.modulemap; sourceTree = ""; }; - 80E8E343BD4901132D1662E1B71A5C8B /* KWFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFormatter.h; path = Classes/Core/KWFormatter.h; sourceTree = ""; }; - 80ECC86A32A116B365ACD72F5D72C920 /* collection_change_builder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_change_builder.cpp; path = Realm/ObjectStore/impl/collection_change_builder.cpp; sourceTree = ""; }; - 813F43BD23D99B83C1A4AF020FC0EB1D /* CGFloatType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CGFloatType.m; path = CGFloatType/CGFloatType.m; sourceTree = ""; }; - 8166A9D1D696B47D30A50D0E1BA35872 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Charts/Classes/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; - 81C02D288B1874BF9457C12B9B8F77D2 /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Charts/Classes/Components/ChartLimitLine.swift; sourceTree = ""; }; - 825B2F6ABC6A6B3D402284B000EF4E8A /* FBSDKCoreKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FBSDKCoreKit.modulemap; sourceTree = ""; }; - 826496B75CB1AF11F94E871F9C9D603A /* FBSDKGraphRequestBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestBody.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h; sourceTree = ""; }; - 82DCBBD507FE882B07E008A011D31601 /* SORelativeDateTransformer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SORelativeDateTransformer-prefix.pch"; sourceTree = ""; }; - 82F3638EB723E869445800DF0D8FD6DD /* FBSDKAppLinkUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkUtility.h; sourceTree = ""; }; - 8332263C10292596E6B7766DA111683F /* CocoaLumberjack.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = CocoaLumberjack.modulemap; sourceTree = ""; }; - 83A513B597AC9A1DF923AA9C3F84D698 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 83BA65DAED72206C36D888EF9C937094 /* Kiwi.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kiwi.xcconfig; sourceTree = ""; }; - 83BBE0F5DF8AEA0C4D305A94FA20F4A1 /* ExtendableMessageBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExtendableMessageBuilder.m; path = src/runtime/Classes/ExtendableMessageBuilder.m; sourceTree = ""; }; - 83D0FAF174D9BCEA32F60271107267A1 /* FBSDKServerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m; sourceTree = ""; }; - 83D4705738C250F49F87637B3B3915F0 /* Zip-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-prefix.pch"; sourceTree = ""; }; + 76A1DAEA2B5769D69C1EB9CAD54DFC3F /* WireFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WireFormat.h; path = src/runtime/Classes/WireFormat.h; sourceTree = ""; }; + 76ADAAE601541283E0881E8E1BA97BE7 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + 76B3332AFFD18AE12B345C504819DBAB /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + 76E021734DAC9A375097773DD9045B92 /* LSMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSMatcher.h; path = Nocilla/Matchers/LSMatcher.h; sourceTree = ""; }; + 76E7D4C62B86E9DCC49F46204CFE5F41 /* KWExistVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExistVerifier.m; path = Classes/Verifiers/KWExistVerifier.m; sourceTree = ""; }; + 77013EB7E0DB69980DBAAFA3895A6C0F /* FBSDKLoginManagerLoginResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLoginResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h; sourceTree = ""; }; + 7705E21E06FA97EB44F0E1102DC37757 /* Nocilla-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nocilla-prefix.pch"; sourceTree = ""; }; + 77169B93EF58F57065D4109090936A12 /* BFMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFMeasurementEvent.m; path = Bolts/iOS/BFMeasurementEvent.m; sourceTree = ""; }; + 775CC733D89E2F4D062E46C262AC9A61 /* ChartDataBaseFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataBaseFilter.swift; path = Charts/Classes/Filters/ChartDataBaseFilter.swift; sourceTree = ""; }; + 7769AB92618B8FB41B20209CE32C05F4 /* FBSDKDynamicFrameworkLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDynamicFrameworkLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h; sourceTree = ""; }; + 778997680AAAA44D951304AB035354F0 /* KWExampleSuite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleSuite.h; path = Classes/Core/KWExampleSuite.h; sourceTree = ""; }; + 779498A6ABD2D124A9BD9BD17AF0F3B6 /* CocoaLumberjack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CocoaLumberjack.h; path = Classes/CocoaLumberjack.h; sourceTree = ""; }; + 783A4394DC4195056589A42D7FA3BF34 /* SEGAnalyticsRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAnalyticsRequest.m; path = Pod/Classes/Internal/SEGAnalyticsRequest.m; sourceTree = ""; }; + 78548CDB5BAE4AD94A85C1855A97DD33 /* FBSDKMaleSilhouetteIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMaleSilhouetteIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m; sourceTree = ""; }; + 79218965E79D7BA4DED4F8E81470D772 /* BFTask+Exceptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Exceptions.m"; path = "Bolts/Common/BFTask+Exceptions.m"; sourceTree = ""; }; + 792D0BC877DBDC1C57B796BA04FA5520 /* UnknownFieldSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnknownFieldSet.h; path = src/runtime/Classes/UnknownFieldSet.h; sourceTree = ""; }; + 7934CDD3582F1106C8CE6024AB38358F /* KWExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExample.m; path = Classes/Core/KWExample.m; sourceTree = ""; }; + 795A325DEEDDA69FDE7F941B96807820 /* SHSProtoBuf-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SHSProtoBuf-umbrella.h"; sourceTree = ""; }; + 79CBFE68228B7B7E5F6C566D58C72D09 /* KSCrashSentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry.h; sourceTree = ""; }; + 79F4899E536B5A9493A3EBF40EB4D5D2 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; + 7A339FBD99325A2182A7E666E8308003 /* ExtensionRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtensionRegistry.h; path = src/runtime/Classes/ExtensionRegistry.h; sourceTree = ""; }; + 7A5DF0DB4095254520A647C06FCD4618 /* FBSDKCoreKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FBSDKCoreKit.modulemap; sourceTree = ""; }; + 7A87507ECFF5737557202573FE409125 /* KWCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWCallSite.m; path = Classes/Core/KWCallSite.m; sourceTree = ""; }; + 7AC97D798FEF26A9653147C2B70443DA /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 7ADC518676737574D1E6CA926389CBE7 /* FBSDKError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKError.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m; sourceTree = ""; }; + 7AF170D779D94E7073CA0E21DCE1A57A /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + 7B1036B1F55857FBF26051272706DBFF /* KSJSONCodecObjC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSJSONCodecObjC.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodecObjC.m; sourceTree = ""; }; + 7B60E83817E45086154CE9DB09FF26E4 /* LSStringMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStringMatcher.h; path = Nocilla/Matchers/LSStringMatcher.h; sourceTree = ""; }; + 7B7DF4D84F0A2F6511031B969A6077A4 /* FBSDKKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStore.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m; sourceTree = ""; }; + 7BAA246DE42493986223E37A5FAB1CE2 /* SENSleepPill.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepPill.m; path = Pod/Classes/BLE/SENSleepPill.m; sourceTree = ""; }; + 7BE7883B82292799A624177A21B0DD1D /* FBSDKBridgeAPIProtocolNativeV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolNativeV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m; sourceTree = ""; }; + 7BE9F5A8861B7867DB739C3FFDACA5F6 /* KWProbePoller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWProbePoller.h; path = Classes/Core/KWProbePoller.h; sourceTree = ""; }; + 7C09952189B9370CBB5C1F4D1967E053 /* SVWebViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVWebViewController-prefix.pch"; sourceTree = ""; }; + 7C1AAB9BB7D26C44C63BF4681A516477 /* KWStringContainsMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringContainsMatcher.h; path = Classes/Matchers/KWStringContainsMatcher.h; sourceTree = ""; }; + 7C37B90582C3E3F245FA10AB9DE54723 /* Model.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Model.h; path = Pod/Classes/Model/Model.h; sourceTree = ""; }; + 7CDA4531650228AA3E2BFE32A6F2D9B7 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Charts/Classes/Renderers/BarChartRenderer.swift; sourceTree = ""; }; + 7CE9588CDCD95889D1FBA3BA24FD685E /* MSDynamicsDrawerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MSDynamicsDrawerViewController.m; path = MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.m; sourceTree = ""; }; + 7D2C39738904B957AFF03826909D3D2B /* KWChangeMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWChangeMatcher.h; path = Classes/Matchers/KWChangeMatcher.h; sourceTree = ""; }; + 7D52C59B259AF0BC980890E3D1D76B1F /* BFURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFURL.m; path = Bolts/iOS/BFURL.m; sourceTree = ""; }; + 7D6D937E5387A7010571E80B92382053 /* NSJSONSerialization-NSNullRemoval-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization-NSNullRemoval-prefix.pch"; sourceTree = ""; }; + 7DB00858903EC8A12C224228B14E0EF7 /* CodedOutputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CodedOutputStream.h; path = src/runtime/Classes/CodedOutputStream.h; sourceTree = ""; }; + 7DB186D59153078078E269CC12CA2703 /* FBSDKBridgeAPIProtocolType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolType.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h; sourceTree = ""; }; + 7DCE2C3E986B798D1ADAF4CD7BC078AD /* FBSDKLoginManagerLoginResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLoginResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m; sourceTree = ""; }; + 7DD6919BF046455CCAE54A940F9C2E9C /* FBSDKWebDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialog.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h; sourceTree = ""; }; + 7DE2B94847544BEB6DACA055959AC44A /* FBSDKLoginTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m; sourceTree = ""; }; + 7E1F449019FE8245EBB6475F006BC75B /* SENKeyedArchiver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENKeyedArchiver.h; path = Pod/Classes/Model/SENKeyedArchiver.h; sourceTree = ""; }; + 7E382A1BA00D9F5FFA4D5DA7CACF23AA /* SEGIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGIntegrationFactory.h; path = Pod/Classes/Integrations/SEGIntegrationFactory.h; sourceTree = ""; }; + 7E3B39E09E9ADB033F775C9C50586021 /* SENSense.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSense.m; path = Pod/Classes/BLE/SENSense.m; sourceTree = ""; }; + 7E3D22C18C326C6B59EEC55C55085D1E /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Charts/Classes/Charts/ScatterChartView.swift; sourceTree = ""; }; + 7E637C5F801F1624FC526DE028CF0CCB /* KSCrashSentry_CPPException.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = KSCrashSentry_CPPException.mm; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_CPPException.mm; sourceTree = ""; }; + 7E7F6FB0583C87A8A7B8AEFBCB863CE9 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+Merge.h"; sourceTree = ""; }; + 7E88A4161640BAB97EACD27E68A9EAE8 /* KSMach_Arm64.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_Arm64.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_Arm64.c; sourceTree = ""; }; + 7F1F6C643394771272A4C855A6EE4B32 /* LGBluetooth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LGBluetooth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7F33198A974BEBF7EEC346A04323C10E /* SENSerializable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSerializable.h; path = Pod/Classes/Model/SENSerializable.h; sourceTree = ""; }; + 7F439A712D796F9F97ADBE689E5F2719 /* UICountingLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UICountingLabel.h; sourceTree = ""; }; + 7F5F5C46D019193274B86430867DEAB5 /* Bugsnag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bugsnag.h; path = Source/Bugsnag/Bugsnag.h; sourceTree = ""; }; + 7F7FF47080AF5A3C6B5C136BC708CBFD /* KWCountType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCountType.h; path = Classes/Core/KWCountType.h; sourceTree = ""; }; + 7F88F8D15BB56F8131446B2A9E0EEAA8 /* KWPendingNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWPendingNode.h; path = Classes/Nodes/KWPendingNode.h; sourceTree = ""; }; + 7F8E7A35D74B7C87D42ED9199FB81052 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Charts/Classes/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; + 80005E65CBE03057B5AA0BCB5A955561 /* ChartMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartMarker.swift; path = Charts/Classes/Components/ChartMarker.swift; sourceTree = ""; }; + 8006B7CF34AC0DB78CE0F90413BCDE4A /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 801B69BCCE8BF7A61CE833C17D700356 /* LSNSURLSessionHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLSessionHook.h; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.h; sourceTree = ""; }; + 8040D76005E51B3ECD3E61693985ED77 /* SENSleepSoundRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundRequest.m; path = Pod/Classes/Model/SENSleepSoundRequest.m; sourceTree = ""; }; + 8064D813E014441F166CC4DB093598EC /* Pods_SenseApp_Sense.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SenseApp_Sense.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 80693764189B5FF79C720997A8BECB77 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + 8107E2849F3C4F546D26073D8BCEC249 /* ChartYAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxisRenderer.swift; path = Charts/Classes/Renderers/ChartYAxisRenderer.swift; sourceTree = ""; }; + 810895641E2FF14B09D974A80F25A151 /* FBSDKLoginError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginError.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h; sourceTree = ""; }; + 815F49EE90B872FF8C89C51CE8FF5C78 /* SVWebViewControllerActivityChrome.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewControllerActivityChrome.m; path = SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.m; sourceTree = ""; }; + 81880B70B63CABAAA841A0AB9E6B4679 /* UICountingLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UICountingLabel.m; sourceTree = ""; }; + 818EF93AB7B9BF31DAE60FF0F1288E7A /* ChartXAxisRendererBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRendererBarChart.swift; path = Charts/Classes/Renderers/ChartXAxisRendererBarChart.swift; sourceTree = ""; }; + 819997651869171E38B8F88B6C19D6AF /* WireFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WireFormat.m; path = src/runtime/Classes/WireFormat.m; sourceTree = ""; }; + 81F1B90EE3238831B1358F92F950C2C3 /* Bugsnag.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bugsnag.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 82362D7CC19D3752067197B71A0CBEBA /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Charts/Classes/Utils/ChartColorTemplates.swift; sourceTree = ""; }; + 826A08E0CE1742EE2DCD1B9BB7B83E6B /* FBSDKCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m; sourceTree = ""; }; + 8296D1E9EF1DC75837EB04F7D3F69AA3 /* FBSDKAppEventsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsState.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsState.h; sourceTree = ""; }; + 83050E7BEEEF5B0F9C8454D60332B369 /* _FBSDKLoginRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKLoginRecoveryAttempter.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m; sourceTree = ""; }; + 8323BD7F1422E912A2BD34AF05248DC2 /* LoggerHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerHelper.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerHelper.swift; sourceTree = ""; }; + 833B5B603D7AF938E239998CEA5392F9 /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; + 8349ED79BED6CDB2031C5B61CD270F8E /* KSCrashSentry_User.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry_User.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_User.c; sourceTree = ""; }; + 8368864842AB12218119E28A262B1823 /* markdown_parser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = markdown_parser.m; sourceTree = ""; }; + 83ACB32BA762182880FA1132D9D71D19 /* SENAnswer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAnswer.m; path = Pod/Classes/Model/SENAnswer.m; sourceTree = ""; }; + 83AF15827193595FCEC3E271AC14623F /* FBSDKErrorRecoveryConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h; sourceTree = ""; }; + 83D64CBA9B91B0B5B7FAAD50F1811D45 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; 83DB80C47A7C0868FA305660FA1EAA32 /* Pods-SenseApp-Sense.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SenseApp-Sense.modulemap"; sourceTree = ""; }; - 842116B5E0B6068DE878250C98265AA2 /* FBSDKTriStateBOOL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTriStateBOOL.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m; sourceTree = ""; }; - 8438E722662ECB830B77290473FEC6E8 /* BugsnagMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagMetaData.h; path = Source/Bugsnag/BugsnagMetaData.h; sourceTree = ""; }; - 8446D771AF2D73E31887FBBA49A49C77 /* RealmPieDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmPieDataSet.swift; path = ChartsRealm/Classes/Data/RealmPieDataSet.swift; sourceTree = ""; }; - 84642CA926CF6D5766F1E09510366E2E /* DDASLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogger.h; path = Classes/DDASLLogger.h; sourceTree = ""; }; - 84BAA1017D960A876DD404AD2C5F0475 /* BFAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink.h; path = Bolts/iOS/BFAppLink.h; sourceTree = ""; }; - 85821E34AEF91F6AFF06ACC82D86C97B /* Kiwi-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kiwi-prefix.pch"; sourceTree = ""; }; - 858596D1E2B6DDD117D916BDC840B0F3 /* KWContainMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContainMatcher.h; path = Classes/Matchers/KWContainMatcher.h; sourceTree = ""; }; - 85AC2324CE1145F91D753495DDF9A7F8 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 85B11FF98D80AAFE830D5E4620473777 /* ChartDataBaseFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataBaseFilter.swift; path = Charts/Classes/Filters/ChartDataBaseFilter.swift; sourceTree = ""; }; - 85C61B96BDEF7D0E930877D9369EC840 /* LSNSURLHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNSURLHook.h; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.h; sourceTree = ""; }; - 85F3DF8C72277558573A937B100C62E4 /* SENAnalyticsProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnalyticsProvider.h; path = Pod/Classes/Analytics/SENAnalyticsProvider.h; sourceTree = ""; }; - 8642D7D4AADC81D472797FFB93639AB8 /* AttributedMarkdown.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AttributedMarkdown.xcconfig; sourceTree = ""; }; - 8666736B6E4F8EFC924EA2175D618D86 /* KWLetNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWLetNode.h; path = Classes/Nodes/KWLetNode.h; sourceTree = ""; }; - 867F3CB573393447D96859033DDA4979 /* aes_via_ace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aes_via_ace.h; path = Zip/minizip/aes/aes_via_ace.h; sourceTree = ""; }; - 86B43C5F5B1F2318C7C9A02EDFA71075 /* FXKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FXKeychain.m; path = FXKeychain/FXKeychain.m; sourceTree = ""; }; - 86C1D6F5D3425F46E5897FD29102DB98 /* KSCrashReportStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashReportStore.m; path = KSCrash/Source/KSCrash/Recording/KSCrashReportStore.m; sourceTree = ""; }; - 86C8E159F7A6C40EE9DE942739549EBD /* LGBluetooth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LGBluetooth-dummy.m"; sourceTree = ""; }; - 86D176677BF24120F559C89BE66C447E /* SENAlarmCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAlarmCollection.m; path = Pod/Classes/Model/SENAlarmCollection.m; sourceTree = ""; }; - 87295E3B2C6AD956D0AB92AFEABCA935 /* KWMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatcher.m; path = Classes/Core/KWMatcher.m; sourceTree = ""; }; - 872B230FC2991F157DC100D8ECE2C2D5 /* zh-Hans.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "zh-Hans.lproj"; path = "SVWebViewController/zh-Hans.lproj"; sourceTree = ""; }; - 87D2CF46F047959C528641BFFA363C2F /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Charts/Classes/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; - 87E39A78413EC902A9F86555B9AF4C39 /* FBSDKIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m; sourceTree = ""; }; - 88021FAFE8BFAD5158639847DB3AE666 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Charts/Classes/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; - 882A9EA1F12A4657158D4D879F932DB2 /* SEGTrackPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGTrackPayload.m; path = Pod/Classes/Integrations/SEGTrackPayload.m; sourceTree = ""; }; - 883C0D45AD0831BFD8D6D8C8D9FFA0D8 /* SENAlarm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAlarm.h; path = Pod/Classes/Model/SENAlarm.h; sourceTree = ""; }; - 885159B118BD562C1CE7FD160D67C55E /* BugsnagNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagNotifier.m; path = Source/Bugsnag/BugsnagNotifier.m; sourceTree = ""; }; - 88A2B8605A5D14362F50C692FF620077 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 88B76869DF89B12E860589F9CEC84695 /* FBSDKLogo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h; sourceTree = ""; }; - 88DD1317EFFABA61A48B82A8498BFB89 /* AttributedMarkdown-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AttributedMarkdown-umbrella.h"; sourceTree = ""; }; - 88DD9EE3D84A36D7E110CEF4CE795153 /* KSSafeCollections.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSafeCollections.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSafeCollections.h; sourceTree = ""; }; - 88DFD3DFFA391BCDBBC16ACB3DE28328 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - 88FF2C710E7733681C75C23AE227162E /* KSCrashType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashType.h; path = KSCrash/Source/KSCrash/Recording/KSCrashType.h; sourceTree = ""; }; - 89034448AC6B2C4FC8F0D397AFC052FE /* SENAPIAppFeedback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAppFeedback.m; path = Pod/Classes/API/SENAPIAppFeedback.m; sourceTree = ""; }; - 8911F50285694C539E26AA3E67731364 /* collection_notifications.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifications.cpp; path = Realm/ObjectStore/collection_notifications.cpp; sourceTree = ""; }; - 8929DB04C153CA2EDDF309284261E0DF /* FBSDKLoginKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-umbrella.h"; sourceTree = ""; }; - 8962D5CD8DD0D2A516004004A37BF2CF /* KWBeWithinMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeWithinMatcher.m; path = Classes/Matchers/KWBeWithinMatcher.m; sourceTree = ""; }; - 8980A88B008BF729F0D7C9B33BF2C0C1 /* SENRemoteImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENRemoteImage.h; path = Pod/Classes/Model/SENRemoteImage.h; sourceTree = ""; }; - 89D83AA22D59EEEF5F6E81C978EEB906 /* KWBackgroundTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBackgroundTask.h; path = Classes/Core/KWBackgroundTask.h; sourceTree = ""; }; - 89E7989161CF752A49A85942E5EAD81C /* KWMatchVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatchVerifier.h; path = Classes/Verifiers/KWMatchVerifier.h; sourceTree = ""; }; - 8A022B45BD0209C4747305F178F94CFA /* Realm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Realm.swift; path = RealmSwift/Realm.swift; sourceTree = ""; }; - 8A1C9D49F2EA59E9F19D227A38986DCC /* ChartRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartRendererBase.swift; path = Charts/Classes/Renderers/ChartRendererBase.swift; sourceTree = ""; }; - 8A38D727960CCF83F379B9029EF8AD42 /* LSStubResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubResponse.m; path = Nocilla/Stubs/LSStubResponse.m; sourceTree = ""; }; - 8A68233FC0AE329C25ED434EA34856C0 /* FBSDKApplicationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationDelegate.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h; sourceTree = ""; }; - 8AF2B65FFB7C1018EF67E81775880C43 /* FBSDKSystemAccountStoreAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSystemAccountStoreAdapter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m; sourceTree = ""; }; - 8B67B0775D82B5C15863218E0D6B6BD0 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Charts/Classes/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; - 8B6DCE4105E52FDD0E15AC74850E940C /* LGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGUtils.h; path = LGBluetooth/LGUtils.h; sourceTree = ""; }; - 8B709D0F19DE9F3EFF0B2A27ECA30D45 /* ChartViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewPortJob.swift; path = Charts/Classes/Jobs/ChartViewPortJob.swift; sourceTree = ""; }; + 84675832C6F2CBB629CD9389FA681AC6 /* KSCrashSentry_Deadlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashSentry_Deadlock.m; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Deadlock.m; sourceTree = ""; }; + 84C2D75F50A903CF3C0EFFC67797FAB8 /* SENQuestion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENQuestion.m; path = Pod/Classes/Model/SENQuestion.m; sourceTree = ""; }; + 84D34460B2200B26D6FB7453C9781AA5 /* KWBeEmptyMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeEmptyMatcher.m; path = Classes/Matchers/KWBeEmptyMatcher.m; sourceTree = ""; }; + 84EE4A5BAB3BA8B64CF81CC4B234C1AC /* KWHaveValueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWHaveValueMatcher.m; path = Classes/Matchers/KWHaveValueMatcher.m; sourceTree = ""; }; + 84FE7F01CA8C6C3438AE9FF8FC5E69AD /* SENAPIAppStats.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAppStats.m; path = Pod/Classes/API/SENAPIAppStats.m; sourceTree = ""; }; + 85556CE56A0ADF19D1E420E310E6ED89 /* FBSDKInternalUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInternalUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h; sourceTree = ""; }; + 856FACF4C8125F5C460812DC28E44213 /* KSCrashCallCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashCallCompletion.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSCrashCallCompletion.m; sourceTree = ""; }; + 857471347D498C2F5091242CA8EF2F49 /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Charts/Classes/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; + 858B40CA84F0B040F24FF9F6CE4A39FC /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKLoginKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 85B7F55AA41CE550B665DD7C779D6C2E /* sha1.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = sha1.c; path = Zip/minizip/aes/sha1.c; sourceTree = ""; }; + 85D2451F46B4277BE654C9EBDB4CFCDC /* KSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSLogger.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSLogger.h; sourceTree = ""; }; + 85F6816AC60C3A8827754D3016808127 /* KWBeMemberOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeMemberOfClassMatcher.h; path = Classes/Matchers/KWBeMemberOfClassMatcher.h; sourceTree = ""; }; + 86227FE61A80A4D7BA1F1A941F7868B0 /* SEGScreenPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGScreenPayload.m; path = Pod/Classes/Integrations/SEGScreenPayload.m; sourceTree = ""; }; + 873325F7D0E916BDD9365C4A32E81CE3 /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Charts/Classes/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; + 873A4DF4591F28FBE2F1FD007FFD35B2 /* KWEqualMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWEqualMatcher.h; path = Classes/Matchers/KWEqualMatcher.h; sourceTree = ""; }; + 8764C618BDFBA3CAEC8534B54C3F9A32 /* KWFailure.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFailure.m; path = Classes/Core/KWFailure.m; sourceTree = ""; }; + 8787195BD5D62DA9D74CE8162926E700 /* ChartYAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxis.swift; path = Charts/Classes/Components/ChartYAxis.swift; sourceTree = ""; }; + 878C5D33E1D5169732EFCEFF043F9EA8 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 879DFB09BA41B8F1A9EF4D8D9EA00A1B /* SEGGroupPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGGroupPayload.m; path = Pod/Classes/Integrations/SEGGroupPayload.m; sourceTree = ""; }; + 8802FFBD754B09370D9EDF65EC13AED1 /* SVWebViewControllerActivitySafari-iPad.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivitySafari-iPad.png"; path = "SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari-iPad.png"; sourceTree = ""; }; + 8805529589DE2C57C7B59679A4089CC0 /* SENAPITimeZone.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPITimeZone.m; path = Pod/Classes/API/SENAPITimeZone.m; sourceTree = ""; }; + 8876B15AC282A70BF68402C49803C7C0 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + 88A77755F9611E7073442779AEE0F18E /* KWLetNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWLetNode.m; path = Classes/Nodes/KWLetNode.m; sourceTree = ""; }; + 88C7CF6476D2EF3E5CD0181C2877967A /* KWGenericMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatcher.h; path = Classes/Matchers/KWGenericMatcher.h; sourceTree = ""; }; + 88DD50B016337FED19D37D9B23CBEB93 /* SVModalWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVModalWebViewController.m; path = SVWebViewController/SVModalWebViewController.m; sourceTree = ""; }; + 8910F9DCA675A283F8AF8CA4EDB19286 /* KWCaptureSpy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCaptureSpy.h; path = Classes/Core/KWCaptureSpy.h; sourceTree = ""; }; + 8971602E085776CC9D064C4B81CEF864 /* SEGIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGIntegration.h; path = Pod/Classes/Integrations/SEGIntegration.h; sourceTree = ""; }; + 89A1733976444DAC31871520AB02A8FF /* KWSuiteConfigurationBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSuiteConfigurationBase.h; path = Classes/Config/KWSuiteConfigurationBase.h; sourceTree = ""; }; + 89A7B3B704066D9A3551450C8FDB7C57 /* NSData+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Matcheable.m"; path = "Nocilla/Matchers/NSData+Matcheable.m"; sourceTree = ""; }; + 89B966434EB68EE0DDAFE7E1A32C017F /* KWGenericMatchingAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatchingAdditions.m; path = Classes/Matchers/KWGenericMatchingAdditions.m; sourceTree = ""; }; + 89D84CFFB404CAC88E4EEA0A50CC7955 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Charts/Classes/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; + 89F1C43F665FC573D8ED92D99AF5F5A6 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8A08B8550B62166FEE79A6348999E212 /* entropy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = entropy.h; path = Zip/minizip/aes/entropy.h; sourceTree = ""; }; + 8A3A92CA63ECA800458DB9D7A5D950CD /* Manifest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manifest.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/Manifest.swift; sourceTree = ""; }; + 8A3AF312F9662D66A8FA5B81DF298B33 /* FBSDKLoginKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKLoginKit-dummy.m"; sourceTree = ""; }; + 8A5BCD98AB673AD8E1E1CE44FD2E84A5 /* CGFloatType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CGFloatType.h; path = CGFloatType/CGFloatType.h; sourceTree = ""; }; + 8A747FDD01504AFC744D3C2C36C2CA9C /* KSSingleton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSingleton.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSingleton.h; sourceTree = ""; }; + 8A7CAB3B040202264CE83447B8455DF5 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + 8A9FD0924F61B550AE27D475388F684A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8AA5448927A1F08E807D80A5A0AAB46F /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; + 8AB7EB15421523CDF95524F2F7355678 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 8ABB8BC7F773D7FB3FEEBA6B1E708BAB /* KSMach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSMach.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach.h; sourceTree = ""; }; + 8AD3B15C978F14BA92C2F5BB22F9410B /* LGUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGUtils.m; path = LGBluetooth/LGUtils.m; sourceTree = ""; }; + 8B08208FE309800B233859C9064BA64B /* BugsnagCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCrashReport.h; path = Source/Bugsnag/BugsnagCrashReport.h; sourceTree = ""; }; + 8B2872760E879BC2CB272E2552DD91A3 /* ChartXAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxis.swift; path = Charts/Classes/Components/ChartXAxis.swift; sourceTree = ""; }; + 8B77E9EC159500DE759DEBB14A5AE8FA /* Charts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Charts-dummy.m"; sourceTree = ""; }; 8B8B9C91490F4A7D23EE19601C2DE9D8 /* Pods-SenseApp-Sense.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Sense.beta.xcconfig"; sourceTree = ""; }; - 8B8D15485FBA0D33480F9745E7B2EB49 /* SVWebViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SVWebViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8BA1F5034D2497276F9AD4D4FE66BCD3 /* SVWebViewControllerActivityChrome.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewControllerActivityChrome.m; path = SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.m; sourceTree = ""; }; - 8C23E8D09BA0D573548361DB6B47CEBC /* NSObject+KiwiVerifierAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiVerifierAdditions.h"; path = "Classes/Core/NSObject+KiwiVerifierAdditions.h"; sourceTree = ""; }; - 8C2722775EDE85FEA619515748B72506 /* SENAppStats.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAppStats.m; path = Pod/Classes/Model/SENAppStats.m; sourceTree = ""; }; - 8C90DEAAC7E43975EEFEC32AC254A8C3 /* RLMMigration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration_Private.h; path = include/RLMMigration_Private.h; sourceTree = ""; }; - 8CA84B5FA9D73FD6CB45C4F39F55B453 /* NSJSONSerialization-NSNullRemoval-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization-NSNullRemoval-prefix.pch"; sourceTree = ""; }; - 8CD058EF88EAED9466F60D6ECB8F6D5C /* FBSDKCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m; sourceTree = ""; }; - 8CD55CA9C0D332AFF961F4D9578FF8AA /* FXKeychain.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FXKeychain.modulemap; sourceTree = ""; }; - 8D3D76AC723DAAAFF606C864826338F1 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - 8D475E214297E4F594F394FB1131FB02 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Charts/Classes/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; - 8D7BF5BD599F43EE5E29A26BE7280B25 /* entropy.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = entropy.c; path = Zip/minizip/aes/entropy.c; sourceTree = ""; }; - 8D854254F6DCF603A8348ED5B5FF5791 /* SENAPISupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISupport.m; path = Pod/Classes/API/SENAPISupport.m; sourceTree = ""; }; - 8D9A3AB57BEE632BFED61A51258EB938 /* LGUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGUtils.m; path = LGBluetooth/LGUtils.m; sourceTree = ""; }; - 8DA7F76A646A79747674ED14ADEDFC78 /* SEGPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGPayload.h; path = Pod/Classes/Integrations/SEGPayload.h; sourceTree = ""; }; - 8DF572F72B15DEDEB397E66DFFC329F6 /* DDAbstractDatabaseLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAbstractDatabaseLogger.h; path = Classes/DDAbstractDatabaseLogger.h; sourceTree = ""; }; - 8E1D61AD7EBA83D17C86A162D21728AC /* FBSDKLoginManagerLoginResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLoginResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m; sourceTree = ""; }; - 8E270D7A8C3278212C51A9AE9875DFA0 /* KWObjCUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWObjCUtilities.h; path = Classes/Core/KWObjCUtilities.h; sourceTree = ""; }; - 8E72EF9B0D2B303574EDF366AD3DD237 /* SVWebViewControllerNext@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerNext@2x.png"; path = "SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext@2x.png"; sourceTree = ""; }; - 8E92EC7F975F0B25127B1A6938F6C115 /* aes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aes.h; path = Zip/minizip/aes/aes.h; sourceTree = ""; }; - 8F0931F05FEAABBDF4BF55AE4F957D41 /* LSNSURLSessionHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLSessionHook.m; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m; sourceTree = ""; }; - 8F493463FC4B0044D0FB099F33BE588F /* SENAPINotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPINotification.h; path = Pod/Classes/API/SENAPINotification.h; sourceTree = ""; }; - 8F4E64E46DD16E6A5D22D3582C8C4580 /* KSSysCtl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSysCtl.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSysCtl.h; sourceTree = ""; }; - 8F730358F306A911B5448A85D161326A /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Charts/Classes/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; - 8F908176A50B46CA9C74FAAFF76E0FF4 /* RLMArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray.h; path = include/RLMArray.h; sourceTree = ""; }; - 8F995FCAE852AA98613D674B5AC680F7 /* FBSDKTypeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTypeUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m; sourceTree = ""; }; - 8FC6041281E1E2C5BE2C45DF4DC3180B /* aestab.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aestab.h; path = Zip/minizip/aes/aestab.h; sourceTree = ""; }; - 8FD524E231DBF0BB410424DE1686F787 /* SVWebViewControllerActivitySafari@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivitySafari@2x.png"; path = "SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari@2x.png"; sourceTree = ""; }; - 8FE1485642DB13300ACBD27C010405BB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 90254E16969090DD11255755A1757503 /* Nocilla.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nocilla.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 90496A03943A411ABC5742C7D97D4BFE /* pt.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = pt.lproj; path = SVWebViewController/pt.lproj; sourceTree = ""; }; - 90825536944A5CED7B9E3877BAB8D344 /* NSData+Nocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Nocilla.m"; path = "Nocilla/Categories/NSData+Nocilla.m"; sourceTree = ""; }; - 9099CDD9FBB2D911BBAE5B1ED7744C2D /* SENAPIQuestions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIQuestions.h; path = Pod/Classes/API/SENAPIQuestions.h; sourceTree = ""; }; - 911E1A07274A2E7D1A0662B6C7B2730F /* RLMSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSchema.mm; path = Realm/RLMSchema.mm; sourceTree = ""; }; - 9157BD7A05C708E4691A92D45A1946C8 /* MSDynamicsDrawerStyler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MSDynamicsDrawerStyler.m; path = MSDynamicsDrawerViewController/MSDynamicsDrawerStyler.m; sourceTree = ""; }; - 91A8CC54A1F4CB30DD5CD7469DFB4964 /* KSFileUtils.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSFileUtils.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSFileUtils.c; sourceTree = ""; }; - 91C34C4AAF07AB370560C70814CFB51A /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Charts/Classes/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; - 91D9336743B0D10B1C24EB632D7BF650 /* SENSleepSoundsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundsState.h; path = Pod/Classes/Model/SENSleepSoundsState.h; sourceTree = ""; }; - 91DE1D587EDEAE63B8D98DA7450848E7 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - 91EFFB7AFE5CE38A52DFA66AF3D55512 /* RLMRealm_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Dynamic.h; path = include/RLMRealm_Dynamic.h; sourceTree = ""; }; - 91F045C7FBE712D986B3AE68AC3A8066 /* KWWorkarounds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWWorkarounds.h; path = Classes/Core/KWWorkarounds.h; sourceTree = ""; }; - 924C6847DDBA6A3E5A55B7D93E99557B /* LGCentralManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGCentralManager.h; path = LGBluetooth/LGCentralManager.h; sourceTree = ""; }; - 924C8965A2FEDC6E2C1BCB1491F0BB07 /* FBSDKAppEventsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsState.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsState.m; sourceTree = ""; }; - 926C92405677E6A568F20B151D672F0A /* SEGAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAnalytics.h; path = Pod/Classes/SEGAnalytics.h; sourceTree = ""; }; - 9294F07846629BC4D9512925A0FA82AD /* UICountingLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UICountingLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 92F5C6A6CEDD8A4829229A67BE43018A /* FBSDKAccessToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessToken.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h; sourceTree = ""; }; - 9313A34869FF26F92737B5E6A49A06BF /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 9334EE7C53BC332D5955639985417FD4 /* KWBeKindOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeKindOfClassMatcher.m; path = Classes/Matchers/KWBeKindOfClassMatcher.m; sourceTree = ""; }; - 936CCD433FE6F6D3B62564C136C65711 /* FBSDKLoginCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginCompletion.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h; sourceTree = ""; }; - 939C98732E4DB722B9555EF05098DEF5 /* Bugsnag.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugsnag.xcconfig; sourceTree = ""; }; + 8BD843BBA8721DCB017B1D347B1FDF07 /* KWNotificationMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNotificationMatcher.m; path = Classes/Matchers/KWNotificationMatcher.m; sourceTree = ""; }; + 8C2A7221A296BBF89F59D0640F774566 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 8CA0D0F56C727A79C953933607C354F8 /* FBSDKLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h; sourceTree = ""; }; + 8CABF671E6F4291589BFB54D8938A249 /* KWUserDefinedMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWUserDefinedMatcher.h; path = Classes/Matchers/KWUserDefinedMatcher.h; sourceTree = ""; }; + 8D148113F671646174A7DA73C5AD7DDB /* FBSDKAppEventsUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsUtility.m; sourceTree = ""; }; + 8D319E44A49DDA87FC884541388E515E /* LegacyDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift; sourceTree = ""; }; + 8D9693FC0517C4471BA2871F056BCD9A /* KWObjCUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWObjCUtilities.h; path = Classes/Core/KWObjCUtilities.h; sourceTree = ""; }; + 8DAA9EF8BE5258D2374F7E1E8223BE8A /* NAPickerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NAPickerView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8DC7166A9433D8C12D284143DE805CD0 /* ChartHighlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlight.swift; path = Charts/Classes/Highlight/ChartHighlight.swift; sourceTree = ""; }; + 8E0830D4308A9E0B7D2C27C8653AEB46 /* LSASIHTTPRequestHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSASIHTTPRequestHook.m; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestHook.m; sourceTree = ""; }; + 8E09E9FCD89D09AA459D5B463264495E /* KWIntercept.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWIntercept.m; path = Classes/Stubbing/KWIntercept.m; sourceTree = ""; }; + 8E5CB79CF17F03244FEFC425D2DBE396 /* KWConformToProtocolMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWConformToProtocolMatcher.m; path = Classes/Matchers/KWConformToProtocolMatcher.m; sourceTree = ""; }; + 8E82B23A70D1338E69E756DE2C36B1B6 /* Model.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Model.m; path = Pod/Classes/Model/Model.m; sourceTree = ""; }; + 8ED1F1E467DD5E24C74EF39F1F877114 /* Bugsnag.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugsnag.xcconfig; sourceTree = ""; }; + 8F86BB5D6B3D572BCC6AEB1536F7536F /* SENExpansion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENExpansion.m; path = Pod/Classes/Model/SENExpansion.m; sourceTree = ""; }; + 90388860430E3B102452B7E437FCB257 /* Zip-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Zip-dummy.m"; sourceTree = ""; }; + 9039E31D96D74894021EEC416041977B /* KSCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReport.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReport.h; sourceTree = ""; }; + 906DAD0FD9D62D34A8E72DF125899ACA /* KSCrash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrash.h; path = KSCrash/Source/KSCrash/Recording/KSCrash.h; sourceTree = ""; }; + 90A0CDD44C88ABABF8E2581159187211 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 90C9EF713486C5E3D09C401BD90B8294 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Charts/Classes/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; + 90D468058BB021EA15FB55D7544E1B7B /* DFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift; sourceTree = ""; }; + 914BD9515C6ECEC5BDBCA44CA21A6F35 /* SecureDFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceController.swift; sourceTree = ""; }; + 91836A95DBB5D0DB3D9C23522EBC50B3 /* aes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aes.h; path = Zip/minizip/aes/aes.h; sourceTree = ""; }; + 91AC8B7166E4A9E01A95B4E5598A0621 /* SENLocalPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENLocalPreferences.m; path = Pod/Classes/Model/SENLocalPreferences.m; sourceTree = ""; }; + 92282AD8E58547A9785E8D7F2F12DF25 /* FBSDKApplicationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationDelegate.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h; sourceTree = ""; }; + 92CBA1F68EA93C64AC9E0050E7CB1836 /* NSJSONSerialization-NSNullRemoval.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "NSJSONSerialization-NSNullRemoval.xcconfig"; sourceTree = ""; }; + 92D8F03AFE82FEA5AD31AA1EDC177DCA /* SecureDFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUPacket.swift; sourceTree = ""; }; + 92DC9AE9A20D8104F363B91A0250569F /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + 93105FCBACC69AFE4CCE4AF5C735EC58 /* FBSDKUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h; sourceTree = ""; }; + 9322212EC63E6098AEE7C2F12B1241C3 /* BFWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFWebViewAppLinkResolver.m; path = Bolts/iOS/BFWebViewAppLinkResolver.m; sourceTree = ""; }; + 933D27431333F936A55ADD3CE04237BC /* SENTimelineSegment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTimelineSegment.h; path = Pod/Classes/Model/SENTimelineSegment.h; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 93CF9DD1D82033CBA76AB6A889049011 /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Charts/Classes/Charts/CandleStickChartView.swift; sourceTree = ""; }; - 93FDD84DFD8B5056C0534DAE22AC8FAD /* FBSDKAccessTokenCacheV4.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV4.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m; sourceTree = ""; }; - 949A70DB8E11899DDED15530CD90755A /* UICountingLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICountingLabel-prefix.pch"; sourceTree = ""; }; - 94B5510D678670CE5C1EC353B4F05BEF /* FBSDKGraphRequestPiggybackManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestPiggybackManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m; sourceTree = ""; }; - 94D1A6D1B3C59B62B40736404D82D977 /* FBSDKCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h; sourceTree = ""; }; - 94D30172350592A4199C7114DDAE9778 /* FBSDKLoginError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginError.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m; sourceTree = ""; }; - 950220B45A8D01237BEFE09BFB6D995F /* FBSDKProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfile.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h; sourceTree = ""; }; - 9599EFC9C05837EDAD1594B8C76CB251 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = Zip/minizip/ioapi.h; sourceTree = ""; }; - 95BEF081DD85201D6C0773869F33DFB2 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKLoginKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 95CFB49A2BC3C7EA331A9D06AA687884 /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Charts/Classes/Charts/PieChartView.swift; sourceTree = ""; }; - 95E1E3ACA4E79912EF2ACFD5C87CD71A /* KWUserDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWUserDefinedMatcher.m; path = Classes/Matchers/KWUserDefinedMatcher.m; sourceTree = ""; }; - 95FDB508F989809C95E644C94DC9340F /* aescrypt.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = aescrypt.c; path = Zip/minizip/aes/aescrypt.c; sourceTree = ""; }; - 9608C3E1620EBF92E324A433F8B653BF /* KSFileUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSFileUtils.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSFileUtils.h; sourceTree = ""; }; - 96689834A1656B634865B9D2B6FE3B29 /* Charts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-umbrella.h"; sourceTree = ""; }; - 96797E2BDE8A29F38585529A09CC31F5 /* SENCondition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENCondition.h; path = Pod/Classes/Model/SENCondition.h; sourceTree = ""; }; - 969D9B15E2FC9C49D3C86CE6895D497F /* FBSDKGraphRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m; sourceTree = ""; }; - 96DA89B871B765D381CF4A8E2B40C304 /* SecureDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheral.swift; sourceTree = ""; }; - 96F58F6C98C2A01F1BFCF4DCE95678F4 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - 96FC6A937C90DB94CFE351E48C0C5C7A /* SENSenseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseManager.m; path = Pod/Classes/BLE/SENSenseManager.m; sourceTree = ""; }; - 97210ED1AFAB4C3F60529067E5222778 /* LSHTTPRequestDSLRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDSLRepresentation.h; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.h; sourceTree = ""; }; - 972420E4F7B3DD29C24E86992C6B2A00 /* DFUVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUVersion.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUVersion.swift; sourceTree = ""; }; + 94253083B651F74F38BC2D8D73E35593 /* FBSDKAccessTokenCacheV3_21.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_21.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m; sourceTree = ""; }; + 9463EBB8ABA1D0B1EE47AC89D5892044 /* KWBeBetweenMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeBetweenMatcher.h; path = Classes/Matchers/KWBeBetweenMatcher.h; sourceTree = ""; }; + 947D0354D7F5F1D3DBA51BC8B9A1CDCB /* KWFutureObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFutureObject.h; path = Classes/Core/KWFutureObject.h; sourceTree = ""; }; + 948030C51C2CA2421DEB4282CDCA0A48 /* LSStubResponseDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubResponseDSL.h; path = Nocilla/DSL/LSStubResponseDSL.h; sourceTree = ""; }; + 94C83F4D5AC687E14CC0768704F50A3F /* LSMatcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSMatcheable.h; path = Nocilla/Matchers/LSMatcheable.h; sourceTree = ""; }; + 9507986D0DAAECDEDDBA61852A2AD25C /* NSObject+KiwiSpyAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiSpyAdditions.m"; path = "Classes/Core/NSObject+KiwiSpyAdditions.m"; sourceTree = ""; }; + 95188593BB84471991518BE06582AAF4 /* SENSenseMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseMetadata.h; path = Pod/Classes/Model/SENSenseMetadata.h; sourceTree = ""; }; + 95222582FE3DFEC1320BF7A329F4F2AD /* LSNocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNocilla.h; path = Nocilla/LSNocilla.h; sourceTree = ""; }; + 9537C83D4FC4E2F74632CA4089BB3385 /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Charts/Classes/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; + 954914C5496DBC1A6DAFB34632F47607 /* DDMultiFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMultiFormatter.h; path = Classes/Extensions/DDMultiFormatter.h; sourceTree = ""; }; + 956D813AE504B7F67A87FDB13C17F9B1 /* KWAny.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAny.h; path = Classes/Core/KWAny.h; sourceTree = ""; }; + 956E15AAFA5D668DB7C0B9705F2B68BB /* ZendeskSDK.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = ZendeskSDK.bundle; sourceTree = ""; }; + 95A79DCD328B0777801ED05E524657BC /* KWStringPrefixMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringPrefixMatcher.h; path = Classes/Matchers/KWStringPrefixMatcher.h; sourceTree = ""; }; + 95D974FD45184163CA88E1B79604829A /* Zip-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-umbrella.h"; sourceTree = ""; }; + 95EEE8255E4785B16734B24989DD0B26 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 95F07ED41C831E574107AA8715075BF3 /* NSData+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Matcheable.h"; path = "Nocilla/Matchers/NSData+Matcheable.h"; sourceTree = ""; }; + 95FDF5C839A4C707BBB3195007A4E9BA /* ioapi.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ioapi.c; path = Zip/minizip/ioapi.c; sourceTree = ""; }; + 966DA485EBC38DF48F177A22E4F3A20D /* ExtendableMessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExtendableMessageBuilder.h; path = src/runtime/Classes/ExtendableMessageBuilder.h; sourceTree = ""; }; + 968CE57254DB2370C0F508C5828916E8 /* SENSleepSoundsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundsState.h; path = Pod/Classes/Model/SENSleepSoundsState.h; sourceTree = ""; }; + 968D1ABD70DBB0F1A3E187AA4C24E4CE /* FBSDKAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkResolver.h; sourceTree = ""; }; + 96B44C96B0C03DABA06ADCD6A12F29F2 /* SENAPIPhoto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIPhoto.m; path = Pod/Classes/API/SENAPIPhoto.m; sourceTree = ""; }; 97302BF392366E9046C4DA1FF96FC02A /* Pods-SenseApp-RoomConditionsExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-RoomConditionsExtension.debug.xcconfig"; sourceTree = ""; }; - 975F48037B79F5DF4525B45541960875 /* Analytics-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Analytics-prefix.pch"; sourceTree = ""; }; - 981A7AAF7027CB6B16675263DBF3ACBF /* BFWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFWebViewAppLinkResolver.h; path = Bolts/iOS/BFWebViewAppLinkResolver.h; sourceTree = ""; }; - 983A6472808FDAE6AFBC8F2459323DE2 /* FBSDKBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBase64.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h; sourceTree = ""; }; - 98ACEC38FF17A6210FC4460370C6511A /* KWStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringUtilities.h; path = Classes/Core/KWStringUtilities.h; sourceTree = ""; }; - 98B03BB94A953FB613A3D17B47F1B137 /* SENAPIAccount.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAccount.h; path = Pod/Classes/API/SENAPIAccount.h; sourceTree = ""; }; - 98CC1334B32283077BD3F97AF8D33551 /* SENAPITimeZone.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPITimeZone.h; path = Pod/Classes/API/SENAPITimeZone.h; sourceTree = ""; }; - 9910FFA362C7000CFE52FCF04AAFD6CC /* SEGSegmentIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGSegmentIntegrationFactory.h; path = Pod/Classes/Internal/SEGSegmentIntegrationFactory.h; sourceTree = ""; }; - 99748F6D7E7B87C37A5A4E43B498B264 /* prng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = prng.h; path = Zip/minizip/aes/prng.h; sourceTree = ""; }; - 999EB44050E298BABA027437E5D4EA40 /* Zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Zip.h; path = Zip/Zip.h; sourceTree = ""; }; - 99A6002400FA68B946C4B7D7584990DD /* DDFileLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDFileLogger.h; path = Classes/DDFileLogger.h; sourceTree = ""; }; - 99F53054DB1F2904A5D1C8EEFA5E4871 /* NSObject+KiwiMockAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiMockAdditions.h"; path = "Classes/Mocking/NSObject+KiwiMockAdditions.h"; sourceTree = ""; }; - 9A4BCF6CC098A824958EC389B5B282A2 /* SENAPIPhoto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIPhoto.h; path = Pod/Classes/API/SENAPIPhoto.h; sourceTree = ""; }; - 9A7CFF90D6ADD6462393FA92422B7254 /* KSCrashReportStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportStore.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReportStore.h; sourceTree = ""; }; - 9A7DAAD1AD5D1B8A0F1EE46D36B90281 /* BugsnagNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagNotifier.h; path = Source/Bugsnag/BugsnagNotifier.h; sourceTree = ""; }; - 9AB9781F43392FCD793A11A849D0FD35 /* FBSDKAudioResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAudioResourceLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m; sourceTree = ""; }; - 9ACA314E0143ADB6E97BD655EE5CF15F /* KWFailure.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFailure.m; path = Classes/Core/KWFailure.m; sourceTree = ""; }; - 9B25AC2CF852796F667653066E60918A /* FBSDKAccessTokenCacheV3_17.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_17.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h; sourceTree = ""; }; - 9B328593408CB3F1D619A8AB46709C90 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 9B4095F2D8D857B73FFDC8EA9C0A88D5 /* NSValue+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+KiwiAdditions.h"; path = "Classes/Core/NSValue+KiwiAdditions.h"; sourceTree = ""; }; + 9749983D6D18A0665F5748243D95A437 /* FXKeychain.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FXKeychain.modulemap; sourceTree = ""; }; + 9764B0461832699549599577CAA19A87 /* SORelativeDateTransformer.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SORelativeDateTransformer.bundle; path = SORelativeDateTransformer/SORelativeDateTransformer.bundle; sourceTree = ""; }; + 97C78BFB8AC3CE98AED06E94161F9C21 /* DDLog+LOGV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDLog+LOGV.h"; path = "Classes/DDLog+LOGV.h"; sourceTree = ""; }; + 97D028723C1059AFD3C90932B98056A8 /* FBSDKAppEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEvents.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppEvents.m; sourceTree = ""; }; + 98156C9BB85902474629FE99F7CC9722 /* FXKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FXKeychain.m; path = FXKeychain/FXKeychain.m; sourceTree = ""; }; + 9841CEB92D3DFA6FC2A0B176E3B89EF1 /* platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = platform.h; sourceTree = ""; }; + 98725CAE79E06500E87DF23AECDD07B8 /* BugsnagBreadcrumb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagBreadcrumb.m; path = Source/Bugsnag/BugsnagBreadcrumb.m; sourceTree = ""; }; + 9876B9C93E97E20C7A9DC2BFAB47B44A /* KWSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSpec.h; path = Classes/Core/KWSpec.h; sourceTree = ""; }; + 9886661FCF8FFAD5AB68C2FC940F6955 /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Charts/Classes/Charts/BubbleChartView.swift; sourceTree = ""; }; + 98AF60078E43A7D15903B52F1FD01851 /* SENAPISleepSounds.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISleepSounds.m; path = Pod/Classes/API/SENAPISleepSounds.m; sourceTree = ""; }; + 98C374B99BDEB336B2EE786741167878 /* Analytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Analytics.xcconfig; sourceTree = ""; }; + 98DADAE4E0DB5915769C46A669D1C998 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 994819FE2E1A6B29E13964BBF1925435 /* KWItNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWItNode.m; path = Classes/Nodes/KWItNode.m; sourceTree = ""; }; + 99F03E450A33A8C3D431576B35EB835B /* LSDataMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSDataMatcher.m; path = Nocilla/Matchers/LSDataMatcher.m; sourceTree = ""; }; + 99F94C26FC04F2E72B6A42B1D458F101 /* SENRemoteImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENRemoteImage.m; path = Pod/Classes/Model/SENRemoteImage.m; sourceTree = ""; }; + 9A0D9B80FB8DB2FBAB56DFD4D604EE5F /* LegacyDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUServiceInitiator.swift; sourceTree = ""; }; + 9A13E65214B0F18021C4414743E0364E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9A3B9EC76C8547196955D1A70F79C297 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 9AA412360253A2A71C1EEFC2B51A3763 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + 9ABE86C1140371028332825C1C3729A9 /* KWMessageSpying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessageSpying.h; path = Classes/Core/KWMessageSpying.h; sourceTree = ""; }; + 9AC9967AA9E3DE817AA00DD18D314C44 /* ManifestFirmwareInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ManifestFirmwareInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/ManifestFirmwareInfo.swift; sourceTree = ""; }; + 9ADAA50F2A799E9CDA41BD7218C4E3F0 /* SENService+Protected.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SENService+Protected.h"; path = "Pod/Classes/Service/SENService+Protected.h"; sourceTree = ""; }; + 9B47DD74621B271EBEA7E413EF170FA4 /* AbstractMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractMessage.m; path = src/runtime/Classes/AbstractMessage.m; sourceTree = ""; }; + 9B934AC9229258C81200912A1A60E4BD /* KWBeSubclassOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeSubclassOfClassMatcher.h; path = Classes/Matchers/KWBeSubclassOfClassMatcher.h; sourceTree = ""; }; + 9BB6730DB8554D0134E147C9391C46AD /* AbstractMessageBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractMessageBuilder.m; path = src/runtime/Classes/AbstractMessageBuilder.m; sourceTree = ""; }; 9BBF67A3D8C2347A066506F6B1C3A214 /* Pods-SenseApp-Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Tests.release.xcconfig"; sourceTree = ""; }; - 9BEA9B50EDFA2F74A059D27B589BE696 /* RLMProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMProperty.mm; path = Realm/RLMProperty.mm; sourceTree = ""; }; - 9C51F169E76464090A693CBD7C5A9773 /* HorizontalBarChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartHighlighter.swift; path = Charts/Classes/Highlight/HorizontalBarChartHighlighter.swift; sourceTree = ""; }; - 9C5A27CE556AEA44B4EE4D1B4672AE5C /* FBSDKAccessTokenCacheV4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV4.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h; sourceTree = ""; }; - 9C7C14B40677F5286300B3B695329782 /* markdown_peg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = markdown_peg.h; sourceTree = ""; }; - 9CEDB82BE87A9DE947ADCBB986F7F0E2 /* KWExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExample.h; path = Classes/Core/KWExample.h; sourceTree = ""; }; - 9CFA44F36DBC6892BD7243055AEC976A /* SENSenseWiFiStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseWiFiStatus.h; path = Pod/Classes/Model/SENSenseWiFiStatus.h; sourceTree = ""; }; - 9D03431772826192EF874FE02B43EF2B /* SVWebViewControllerActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewControllerActivity.m; path = SVWebViewController/UIActivities/SVWebViewControllerActivity.m; sourceTree = ""; }; - 9D073A3E2B880A947591E200CFE0A6D4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E14F05F393D35754B7C2996D641112B /* MSDynamicsDrawerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MSDynamicsDrawerViewController.m; path = MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.m; sourceTree = ""; }; - 9E3131CA4CBB5B5641969B3F35142087 /* LineRadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartRenderer.swift; path = Charts/Classes/Renderers/LineRadarChartRenderer.swift; sourceTree = ""; }; - 9E79DEDFE7AC7A63BADCF82A35866944 /* MutableExtensionRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MutableExtensionRegistry.h; path = src/runtime/Classes/MutableExtensionRegistry.h; sourceTree = ""; }; - 9F73A65E98CE2A8D7DAD127AE3719994 /* Kiwi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kiwi.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9F7F108F8B491BC4AF600225F4712E7D /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; - 9F9D4AFC996EBB5E22A2908EF9000901 /* LSNocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSNocilla.h; path = Nocilla/LSNocilla.h; sourceTree = ""; }; - 9FB551805734C44769002897071557FA /* SENAPIAppStats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAppStats.h; path = Pod/Classes/API/SENAPIAppStats.h; sourceTree = ""; }; - 9FBAE1FE402267FB2C39A1958F1042D6 /* SENSleepSoundDurations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundDurations.h; path = Pod/Classes/Model/SENSleepSoundDurations.h; sourceTree = ""; }; - 9FCC3BDD292F775D82BC3C795A30BF34 /* ASIHTTPRequestStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ASIHTTPRequestStub.h; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.h; sourceTree = ""; }; - 9FE7AC9AABCA6C6F5A927CB39CAB193C /* NAPickerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NAPickerCell.h; path = NASources/NAPickerCell.h; sourceTree = ""; }; - 9FF15AE5DEF758BC43077DF37993803B /* Manifest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manifest.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/Manifest.swift; sourceTree = ""; }; - 9FF3579692DBBB12636E3485570C421D /* ConcreteExtensionField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ConcreteExtensionField.m; path = src/runtime/Classes/ConcreteExtensionField.m; sourceTree = ""; }; - A02A6FE511E50FEC0B8C6F581191AB0C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A02B82C757E31D0161B1B192C858E93F /* RLMUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUtil.mm; path = Realm/RLMUtil.mm; sourceTree = ""; }; - A04CD6EE458BA81865538857CF32E412 /* SVWebViewControllerBack.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = SVWebViewControllerBack.png; path = SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack.png; sourceTree = ""; }; - A0811B6D61467BAE276C023BD6578D1B /* NAPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NAPickerView.h; path = NASources/NAPickerView.h; sourceTree = ""; }; - A09B7B202A4CDE29DD6C71C0706C87C5 /* ChartDefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDefaultFillFormatter.swift; path = Charts/Classes/Formatters/ChartDefaultFillFormatter.swift; sourceTree = ""; }; - A0A5B21D389A22E667549291387E93B7 /* FBSDKButton+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKButton+Subclass.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h"; sourceTree = ""; }; - A0EAA3BFCF14A4D3744864C1DA137F0D /* SENSleepSoundsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundsState.m; path = Pod/Classes/Model/SENSleepSoundsState.m; sourceTree = ""; }; - A1337DF38526F185F50A16F85F46755B /* NSJSONSerialization-NSNullRemoval.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "NSJSONSerialization-NSNullRemoval.modulemap"; sourceTree = ""; }; - A145A750A808AAABE7EB44FFDD278DDA /* DFUStreamZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamZip.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamZip.swift; sourceTree = ""; }; - A154113516ACADBF9F352648684E151D /* FBSDKLoginButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginButton.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h; sourceTree = ""; }; - A1AA55BA7D4E8D01106AE351F059026C /* NSInvocation+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+OCMAdditions.h"; path = "Classes/Core/NSInvocation+OCMAdditions.h"; sourceTree = ""; }; - A1ABDAF6FB72664333B8D47C4AF20DD8 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Charts/Classes/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; - A1CF3AA9F41807F1BE2138FE326BFAF7 /* SENSleepSoundDurations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundDurations.m; path = Pod/Classes/Model/SENSleepSoundDurations.m; sourceTree = ""; }; - A2769B768ED530E2032755694EB60551 /* SENAPIPhoto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIPhoto.m; path = Pod/Classes/API/SENAPIPhoto.m; sourceTree = ""; }; - A2778AEB40AF025FB2E53B856D4C7F22 /* KWAsyncVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAsyncVerifier.m; path = Classes/Verifiers/KWAsyncVerifier.m; sourceTree = ""; }; - A2EAEE7FAED682993269EB0E92896302 /* KWGenericMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatcher.m; path = Classes/Matchers/KWGenericMatcher.m; sourceTree = ""; }; - A2F24E265F6F8AA64DC3DBEFC10AE7E3 /* ObjectSchema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectSchema.swift; path = RealmSwift/ObjectSchema.swift; sourceTree = ""; }; - A2F99575BF7F5D721ABB6205858CC8B6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - A33262FF7DE4C584A2C5D6EBF7D24AD8 /* LGBluetooth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = LGBluetooth.modulemap; sourceTree = ""; }; - A33BE84F045A4545AF199098F5603094 /* FBSDKURLOpening.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLOpening.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h; sourceTree = ""; }; - A348F93D5D6965A472DFD8814CBF646C /* FBSDKBridgeAPICrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPICrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m; sourceTree = ""; }; + 9BE8BC1AAFB71F4ABD1D5163FAAA0B19 /* FXKeychain-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FXKeychain-umbrella.h"; sourceTree = ""; }; + 9D5D53C55CC6490E4A4287F9A564E49A /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + 9DBB79136FA8EE8E93579952124697F4 /* CGFloatType-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGFloatType-dummy.m"; sourceTree = ""; }; + 9DFCF8812B865E209C89385C6FD1C1B7 /* ChartPlatform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartPlatform.swift; path = Charts/Classes/Utils/ChartPlatform.swift; sourceTree = ""; }; + 9E1919ED6D2223D65B6075DDC7BC0F9C /* NSObject+KiwiStubAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiStubAdditions.h"; path = "Classes/Stubbing/NSObject+KiwiStubAdditions.h"; sourceTree = ""; }; + 9E53BF4BD4F41841970E07CF89DBED99 /* FBSDKLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogger.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m; sourceTree = ""; }; + 9EEE836337F65A7F7D52049880D6E835 /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Charts/Classes/Components/ChartLimitLine.swift; sourceTree = ""; }; + 9F413F480320BD0F9F9F636D338E4D32 /* KWNilMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNilMatcher.m; path = Classes/Matchers/KWNilMatcher.m; sourceTree = ""; }; + 9F5B584F7F2113D3A15A9FD6EB6530E8 /* KWValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWValue.h; path = Classes/Core/KWValue.h; sourceTree = ""; }; + 9F70DF06F258A6025B5B0021FBFF04B1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9F93BFC92ACA16300522876B64064BE1 /* NSDictionary+Merge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Merge.m"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+Merge.m"; sourceTree = ""; }; + 9FE76DCC04B3C571E9D847F7E7EE7276 /* FBSDKSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSettings.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m; sourceTree = ""; }; + A00E473363BF939DEBB36321C927837D /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Charts/Classes/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; + A011C0D37A27D2C707AEBA03B0039C5E /* KWMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatcher.m; path = Classes/Core/KWMatcher.m; sourceTree = ""; }; + A01EEF23BE949E270CA6F6F31DA4D5C1 /* KSCrashDoctor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashDoctor.m; path = KSCrash/Source/KSCrash/Recording/KSCrashDoctor.m; sourceTree = ""; }; + A033C59917F1A3214BCB99DCEAAAADDD /* DFUPeripheralSelector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelector.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheralSelector.swift; sourceTree = ""; }; + A0437AC8B01D7529E2537285650D805A /* KSJSONCodec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSJSONCodec.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodec.h; sourceTree = ""; }; + A05AEB6716867C43869332E440DD373E /* SEGAliasPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAliasPayload.h; path = Pod/Classes/Integrations/SEGAliasPayload.h; sourceTree = ""; }; + A0858C20B44828570EDC2D33D92ACD02 /* FBSDKLoginCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginCompletion.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h; sourceTree = ""; }; + A0B2CC9566C4D61577D305714BC8BBBE /* FBSDKAudioResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAudioResourceLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m; sourceTree = ""; }; + A0C942BFC28612A4A232B21B6ADC7C51 /* ZendeskSDKStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = ZendeskSDKStrings.bundle; sourceTree = ""; }; + A0CA5AADF122A7FA4BFD04381253475E /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + A1249F91B227A4F1FFA12A90FE32175F /* SENSleepSounds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSounds.h; path = Pod/Classes/Model/SENSleepSounds.h; sourceTree = ""; }; + A127923E0EE00AAFEF206588C2F1E110 /* SenseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SenseKit-prefix.pch"; sourceTree = ""; }; + A12E073B44EBB53A19AD3C5D708A3759 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A15DAC441C5D0F1EFC8CB3BD7F3C7553 /* KSFileUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSFileUtils.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSFileUtils.h; sourceTree = ""; }; + A1D839DEF321F16000778BC8E7DF221D /* SENExpansion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENExpansion.h; path = Pod/Classes/Model/SENExpansion.h; sourceTree = ""; }; + A25C987A4AEA6FC3527E578D60ABC5D6 /* entropy.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = entropy.c; path = Zip/minizip/aes/entropy.c; sourceTree = ""; }; + A260DA11D6BC0B6BCD2F5BF3C175646B /* KWInvocationCapturer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWInvocationCapturer.h; path = Classes/Core/KWInvocationCapturer.h; sourceTree = ""; }; + A264FAB216C8E49BEC23000BE80861DB /* FBSDKContainerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKContainerViewController.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h; sourceTree = ""; }; + A27423CD90B88205B4321C95931B1810 /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Charts/Classes/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; + A318C6C8B17E0F5137B02715CF24AC1E /* SENAlarmCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAlarmCollection.m; path = Pod/Classes/Model/SENAlarmCollection.m; sourceTree = ""; }; + A32FE458FADB3A745044F88FA78C77CF /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; A3779A406BFEB3D7B25FC1EDBF05A1E2 /* Pods-SenseApp-Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SenseApp-Tests-frameworks.sh"; sourceTree = ""; }; - A3833F55E13A27F0236EDD1E517126D9 /* NSProxy+KiwiVerifierAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSProxy+KiwiVerifierAdditions.m"; path = "Classes/Core/NSProxy+KiwiVerifierAdditions.m"; sourceTree = ""; }; - A3A386A03E4D3BDE46EFBAE96535DD2E /* SENAccount.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAccount.m; path = Pod/Classes/Model/SENAccount.m; sourceTree = ""; }; - A43F76C853D0AA1BA8528D2F2939C9A4 /* SENPeripheralManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPeripheralManager.h; path = Pod/Classes/BLE/SENPeripheralManager.h; sourceTree = ""; }; - A49958D5405D897A327B3F52F7844D06 /* FBSDKLoginKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginKit.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h; sourceTree = ""; }; - A49BFF2C63D52B930D2FD2BEDD2ACE86 /* SENAnalyticsLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnalyticsLogger.h; path = Pod/Classes/Analytics/SENAnalyticsLogger.h; sourceTree = ""; }; + A3C23E5EA2B0B98072C10952A60813A1 /* KWBeZeroMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeZeroMatcher.m; path = Classes/Matchers/KWBeZeroMatcher.m; sourceTree = ""; }; + A3DAF130518B588AADEB747194C84E57 /* SENAPISpeech.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISpeech.m; path = Pod/Classes/API/SENAPISpeech.m; sourceTree = ""; }; A49F9E8DD0D68C7AC31C76A0E4AF9417 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A4DBEAD799BE1CAAD7A7757326154726 /* TextFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TextFormat.m; path = src/runtime/Classes/TextFormat.m; sourceTree = ""; }; - A5020AFD5A78F7A182935EA06EC4AAD8 /* SENDeviceMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENDeviceMetadata.m; path = Pod/Classes/Model/SENDeviceMetadata.m; sourceTree = ""; }; - A53528E54202434D76AE1E48CE2C6D68 /* RLMSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema_Private.h; path = include/RLMSchema_Private.h; sourceTree = ""; }; - A568AC7FC33DE9EFB950561F940F69D6 /* Realm.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.xcconfig; sourceTree = ""; }; - A58EAB835EAB1A16A2E243058FF69AC0 /* LegacyDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift; sourceTree = ""; }; - A5F7A864B5FA2EE2A78B104AE49E1E52 /* SENExpansion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENExpansion.h; path = Pod/Classes/Model/SENExpansion.h; sourceTree = ""; }; - A61B3B50BEDD30CE6124F4A3D9E922DF /* FBSDKBridgeAPIProtocolWebV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV2.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h; sourceTree = ""; }; - A63714C2408D8A44A6CA8682DC6E9D87 /* SEGIdentifyPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGIdentifyPayload.h; path = Pod/Classes/Integrations/SEGIdentifyPayload.h; sourceTree = ""; }; + A4EFDD2FBB6B904D5C411C2B5FE70EBF /* KWMessageTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessageTracker.h; path = Classes/Core/KWMessageTracker.h; sourceTree = ""; }; + A536B7426BF438AB598E0EEC6E014CE3 /* KWContextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContextNode.m; path = Classes/Nodes/KWContextNode.m; sourceTree = ""; }; + A55C2E3AA3AFB9C418934BA82CF578EF /* BugsnagMetaData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagMetaData.m; path = Source/Bugsnag/BugsnagMetaData.m; sourceTree = ""; }; + A575A02EF502781D0742F7221BD5A17B /* ChartYAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxisRendererHorizontalBarChart.swift; path = Charts/Classes/Renderers/ChartYAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + A5D0AD84641D5136CD8C15C9F50D777A /* SENAPIDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIDevice.m; path = Pod/Classes/API/SENAPIDevice.m; sourceTree = ""; }; + A5EE17D3395CA70AACB8D605575BC5E5 /* KSBacktrace.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSBacktrace.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSBacktrace.c; sourceTree = ""; }; + A6251DD8BA043A333E7C56023B773E1E /* FBSDKContainerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKContainerViewController.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m; sourceTree = ""; }; + A63FAD576C28157516E1F1E5A69B26D6 /* FBSDKBridgeAPIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIResponse.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m; sourceTree = ""; }; + A64DDABAC0922737B74A7484CFB1E06E /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Charts/Classes/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; + A64F29CD1043CC1D2F657760ED3B8D8C /* fileenc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fileenc.h; path = Zip/minizip/aes/fileenc.h; sourceTree = ""; }; + A654263015F2F3095665B4A8E1D660DA /* KWBeBetweenMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeBetweenMatcher.m; path = Classes/Matchers/KWBeBetweenMatcher.m; sourceTree = ""; }; + A67835EBE6C6510004FDBF26325C46FB /* FBSDKLoginKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-prefix.pch"; sourceTree = ""; }; A69C038CDEEA16334B2C31B3E3A9802C /* Pods-SenseApp-Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SenseApp-Tests-acknowledgements.markdown"; sourceTree = ""; }; - A70F3EB906FC60FD9691CEAA6C29B605 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - A71CABA464BFD4C3AFDDA6634B2843EE /* SENAPIPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIPreferences.m; path = Pod/Classes/API/SENAPIPreferences.m; sourceTree = ""; }; - A730A631115BF7B3FF61B6CF533CDB3C /* KWMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatcher.h; path = Classes/Core/KWMatcher.h; sourceTree = ""; }; + A751D662E333811DED0940694505CF54 /* SEGReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGReachability.h; path = Pod/Classes/Internal/SEGReachability.h; sourceTree = ""; }; + A76CF42A1CD0175C41D21F236AF04156 /* AttributedMarkdown.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AttributedMarkdown.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A7AFA83F50ED668B1B23FDA919D4EFD3 /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Charts/Classes/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; A7AFD44927EF15F4D95586E4F9B8D9E1 /* Pods-SenseApp-Sense-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SenseApp-Sense-acknowledgements.plist"; sourceTree = ""; }; - A7C6F7A8981D14FC0AC6C30B929D02A3 /* FBSDKMonotonicTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMonotonicTime.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m; sourceTree = ""; }; - A7CE26D858384B890FF3081E99C3A434 /* KSCrashContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashContext.h; path = KSCrash/Source/KSCrash/Recording/KSCrashContext.h; sourceTree = ""; }; - A82C5490B8E3FE6AB660F4D7CEA93E81 /* SENDFUStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENDFUStatus.m; path = Pod/Classes/Model/SENDFUStatus.m; sourceTree = ""; }; + A83D1221B0622098E9078EF5DEF320C2 /* SENPreference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPreference.h; path = Pod/Classes/Model/SENPreference.h; sourceTree = ""; }; A858E1D5AB2C29D787B9678C28C3D3B3 /* Pods-SenseApp-RoomConditionsExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SenseApp-RoomConditionsExtension-umbrella.h"; sourceTree = ""; }; - A87C8B6885A8911D7F01568BCC944F75 /* LSHTTPBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPBody.h; path = Nocilla/Model/LSHTTPBody.h; sourceTree = ""; }; - A9A28B594CC4634F78E47D27751D4126 /* ForwardDeclarations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ForwardDeclarations.h; path = src/runtime/Classes/ForwardDeclarations.h; sourceTree = ""; }; - A9E57EC15DCD0A56C88E7D36D5F7CE7D /* KWBeTrueMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeTrueMatcher.h; path = Classes/Matchers/KWBeTrueMatcher.h; sourceTree = ""; }; - AA07824339A6A84D8F4C1DB85E88CCB6 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Charts/Classes/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; - AA103A261B0D58C0B9F2DD18509B174E /* UICountingLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UICountingLabel-dummy.m"; sourceTree = ""; }; - AA1846E0ED0F8C10D7B4D96FD34C6C06 /* KWBeMemberOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeMemberOfClassMatcher.h; path = Classes/Matchers/KWBeMemberOfClassMatcher.h; sourceTree = ""; }; - AA50334877160F0F2ECCB801B5A2D7AC /* Field.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Field.h; path = src/runtime/Classes/Field.h; sourceTree = ""; }; - AAA6E1AC6422CB894FD1D5D3A151727B /* RLMAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMAccessor.h; path = include/RLMAccessor.h; sourceTree = ""; }; - AADB919FE63FD68D85C9FF9C673DBE0F /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Charts/Classes/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; - AAE755C4D2B948424407327B2D2526BB /* KWExampleSuite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleSuite.h; path = Classes/Core/KWExampleSuite.h; sourceTree = ""; }; - AB17583C3D6042671CC586691BA86609 /* Results.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Results.swift; path = RealmSwift/Results.swift; sourceTree = ""; }; - AB62531E618E3133AF2373817B1BAB62 /* SENSleepSoundRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundRequest.m; path = Pod/Classes/Model/SENSleepSoundRequest.m; sourceTree = ""; }; - AB7CA6BBB13D63DC23395C26709F0C42 /* DDDispatchQueueLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDDispatchQueueLogFormatter.m; path = Classes/Extensions/DDDispatchQueueLogFormatter.m; sourceTree = ""; }; - AB90A3337BC09697B9653E56DB3D784D /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABA580A70A3D9B5C4BB8200B02A25AF3 /* DDMultiFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMultiFormatter.m; path = Classes/Extensions/DDMultiFormatter.m; sourceTree = ""; }; - ABC04AA4297C9708E61239353401AB6A /* NSObject+KiwiMockAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiMockAdditions.m"; path = "Classes/Mocking/NSObject+KiwiMockAdditions.m"; sourceTree = ""; }; - ABDC7007B2C41C129E628C6DDB5E9F56 /* SENSpeechResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSpeechResult.m; path = Pod/Classes/Model/SENSpeechResult.m; sourceTree = ""; }; - ABDEB0F11E04C8FB7507E90467A41E6F /* FBSDKTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m; sourceTree = ""; }; - AC494697EA56ED1E575363203F683F77 /* LSMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSMatcher.h; path = Nocilla/Matchers/LSMatcher.h; sourceTree = ""; }; - AC4F9A3DFED49917418F278A1D2929A9 /* LegacyDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUService.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Services/LegacyDFUService.swift; sourceTree = ""; }; - ACB89D8088A295DA0B4CCEE519D7D99D /* SENAPIInsight.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIInsight.m; path = Pod/Classes/API/SENAPIInsight.m; sourceTree = ""; }; - ACDD0537F75052C75C3016FF1A02CAE5 /* FBSDKServerConfigurationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfigurationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m; sourceTree = ""; }; - ACEBBEC96319425EFEFC0ED18823C7E8 /* FBSDKContainerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKContainerViewController.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m; sourceTree = ""; }; - AD1D068731EBAE598179BDDAB6F158EF /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - AD2F68E6129489347B17C3D6BF637029 /* SHSProtoBuf.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SHSProtoBuf.modulemap; sourceTree = ""; }; - AD6E3487ACC59104E99DE2AB325E7AE8 /* SENQuestion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENQuestion.m; path = Pod/Classes/Model/SENQuestion.m; sourceTree = ""; }; - AD74B2E969701909132AA134CFDB5F75 /* SVWebViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVWebViewController-umbrella.h"; sourceTree = ""; }; - AD9E0F75381358758A138816CE677450 /* KSJSONCodec.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSJSONCodec.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodec.c; sourceTree = ""; }; - ADB4EBD1C58434E6333C4324E900CC11 /* LGService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGService.m; path = LGBluetooth/LGService.m; sourceTree = ""; }; - ADD0BB8A35BC54B61F87561028EB4B6A /* NSError+SimpleConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+SimpleConstructor.m"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSError+SimpleConstructor.m"; sourceTree = ""; }; - ADFA4F91940EA8911338A8C2D1DD4C6E /* RLMObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObject.mm; path = Realm/RLMObject.mm; sourceTree = ""; }; - AE06D149017B2BF174DAA5B09DF24D57 /* UIImageEffects.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIImageEffects.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AE3045AEE8D6EDED754A17E19FDFD496 /* FBSDKLoginError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginError.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h; sourceTree = ""; }; - AE51716D452A7AA7CAF27A010B3B1B17 /* KWNilMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNilMatcher.h; path = Classes/Matchers/KWNilMatcher.h; sourceTree = ""; }; - AE6D43BD32B1717C089D31AE97657B1D /* RealmCandleData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCandleData.swift; path = ChartsRealm/Classes/Data/RealmCandleData.swift; sourceTree = ""; }; - AE8899350AB3A97F4BC2D8915B5B00D7 /* KWBackgroundTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBackgroundTask.m; path = Classes/Core/KWBackgroundTask.m; sourceTree = ""; }; - AEACBFA67BABBD7E7D1B8A46D4DB1D18 /* WireFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WireFormat.m; path = src/runtime/Classes/WireFormat.m; sourceTree = ""; }; - AEE5F2567784E4799FD9723D7A1125BC /* KWAfterEachNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAfterEachNode.h; path = Classes/Nodes/KWAfterEachNode.h; sourceTree = ""; }; - AF04CD68158F2D4256C253EDE16EFB45 /* DDTTYLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDTTYLogger.h; path = Classes/DDTTYLogger.h; sourceTree = ""; }; - AF1532D0853445488D31566FADFCB577 /* SecureDFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceController.swift; sourceTree = ""; }; - AF1E68C22C7CE433159BB87B4AA4057C /* KWWorkarounds.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWWorkarounds.m; path = Classes/Core/KWWorkarounds.m; sourceTree = ""; }; - AF2FC4E21424EBFF595AF6803851853B /* SEGScreenPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGScreenPayload.h; path = Pod/Classes/Integrations/SEGScreenPayload.h; sourceTree = ""; }; - AF434524A0B0E561DDD21D498F2B4C2D /* FBSDKAppEventsUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsUtility.m; sourceTree = ""; }; - AF8AD4F597FDE31FA4568204559DEF92 /* NSObject+KiwiVerifierAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiVerifierAdditions.m"; path = "Classes/Core/NSObject+KiwiVerifierAdditions.m"; sourceTree = ""; }; - AFDE6F82CB52A18ECC7100C7E94F2E36 /* FBSDKApplicationDelegate+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKApplicationDelegate+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h"; sourceTree = ""; }; - AFF014B25AC33E01302E05E6C3825341 /* es-ES.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "es-ES.lproj"; path = "SVWebViewController/es-ES.lproj"; sourceTree = ""; }; - B00880DF28E0D41001B33FE00D350750 /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Bolts.modulemap; sourceTree = ""; }; - B029CE1A0D08FE143C70FF775D2D2577 /* KWStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringUtilities.m; path = Classes/Core/KWStringUtilities.m; sourceTree = ""; }; - B09ACB8314F136282B01D565C75F35DF /* FBSDKProfilePictureView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfilePictureView.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h; sourceTree = ""; }; - B0EC883C206C11468A9A029FA0DB8779 /* FBSDKBridgeAPIProtocolNativeV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolNativeV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h; sourceTree = ""; }; - B0FBE0E730228CA633C1B16380307456 /* brg_endian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = brg_endian.h; path = Zip/minizip/aes/brg_endian.h; sourceTree = ""; }; - B12610BFFAFA7634F7CA2F6F8ED21622 /* KWMatching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatching.h; path = Classes/Core/KWMatching.h; sourceTree = ""; }; - B12DC5955AE75B90D7B424A24F73429F /* KWExampleNodeVisitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleNodeVisitor.h; path = Classes/Core/KWExampleNodeVisitor.h; sourceTree = ""; }; - B12F8B7A5356FFFD7B0AF261DCFA8CD7 /* WireFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WireFormat.h; path = src/runtime/Classes/WireFormat.h; sourceTree = ""; }; - B134D4C47EBA64C3E047D1BD2543C215 /* FBSDKServerConfigurationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfigurationManager+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h"; sourceTree = ""; }; - B1456F0BB470014478425ADCB04FC1AE /* LGBluetooth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LGBluetooth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B1A2DD12E72C761BC4028096B8CA9AE3 /* FBSDKMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMath.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h; sourceTree = ""; }; - B1CFDDF0F67EB52CE4F3D85BB955871E /* hmac.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = hmac.c; path = Zip/minizip/aes/hmac.c; sourceTree = ""; }; - B1F3314F26DDA2E29D408923288B858B /* FBSDKBoltsMeasurementEventListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBoltsMeasurementEventListener.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKBoltsMeasurementEventListener.h; sourceTree = ""; }; - B25E7DBAD27FA79D553B249898D1D102 /* NALabelCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NALabelCell.h; path = NASources/NALabelCell.h; sourceTree = ""; }; + A89F4ECC818A9394FB1C3698A3C58F50 /* LSStubResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubResponse.m; path = Nocilla/Stubs/LSStubResponse.m; sourceTree = ""; }; + A904440301767F48C58C4FC9046C987A /* FBSDKBridgeAPIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h; sourceTree = ""; }; + A991275F9EC93E54F2F8DF55641B2991 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + A9A10463CC2F13EE58B586BB7EEF9B9F /* AbstractMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractMessage.h; path = src/runtime/Classes/AbstractMessage.h; sourceTree = ""; }; + A9C61DED04A1AB7233DB945D29051B5A /* FBSDKTestUsersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTestUsersManager.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m; sourceTree = ""; }; + A9F45D418BBD909F4308B372783FEC64 /* FBSDKAppEventsDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsDeviceInfo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsDeviceInfo.h; sourceTree = ""; }; + AA5D9FAEAC598D1EEE2A92A6586278EC /* SEGAnalyticsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAnalyticsUtils.m; path = Pod/Classes/Internal/SEGAnalyticsUtils.m; sourceTree = ""; }; + AA896EB127524B7BF10DDB69B8E03DD6 /* KWBeforeEachNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeforeEachNode.h; path = Classes/Nodes/KWBeforeEachNode.h; sourceTree = ""; }; + AAAF4CEB62B079179A74B5C618E7DB61 /* NSObject+KiwiMockAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiMockAdditions.h"; path = "Classes/Mocking/NSObject+KiwiMockAdditions.h"; sourceTree = ""; }; + AB9268ADCC28DE0D1663EE5931202858 /* KWInequalityMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWInequalityMatcher.m; path = Classes/Matchers/KWInequalityMatcher.m; sourceTree = ""; }; + ABA1CB344BA9A8F8E667F23B2F5B9F34 /* DDDispatchQueueLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDDispatchQueueLogFormatter.h; path = Classes/Extensions/DDDispatchQueueLogFormatter.h; sourceTree = ""; }; + AC0F991E55E421B86F8097B03C102E4B /* KWProbe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWProbe.h; path = Classes/Core/KWProbe.h; sourceTree = ""; }; + AC62CE1461BF02A54CDB746F29570C8F /* KSString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSString.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSString.h; sourceTree = ""; }; + AC7773E468D75EB09A0F98A2693E2849 /* SENTimeline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTimeline.m; path = Pod/Classes/Model/SENTimeline.m; sourceTree = ""; }; + AC836FBD87E70EE5DD7B95250A119383 /* ChartAxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAxisRendererBase.swift; path = Charts/Classes/Renderers/ChartAxisRendererBase.swift; sourceTree = ""; }; + AC8B9D9F31A6F232AD9D0B49ECA21B3C /* NSValue+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+KiwiAdditions.h"; path = "Classes/Core/NSValue+KiwiAdditions.h"; sourceTree = ""; }; + ACD1C7B3B14F9BBE34ADD176481A9FD3 /* hmac.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = hmac.c; path = Zip/minizip/aes/hmac.c; sourceTree = ""; }; + AD0C0D6A0DE992C9F184FEDCA3E209A0 /* FBSDKCoreKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKCoreKit-dummy.m"; sourceTree = ""; }; + AD404C7804C7199F464CEC9DE7D0AA26 /* Zip.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Zip.modulemap; sourceTree = ""; }; + ADA83585D50C3E84B6CCDD35ECC9272A /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + ADEB8F3EDFFF0AAFCAAF993099B794E8 /* UICountingLabel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UICountingLabel.xcconfig; sourceTree = ""; }; + AE35CC8436761D3E73E85B11422ED006 /* KWContainStringMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContainStringMatcher.m; path = Classes/Matchers/KWContainStringMatcher.m; sourceTree = ""; }; + AE6B1F73939D3BEE52BF710E1B0ED454 /* FBSDKTimeSpentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTimeSpentData.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKTimeSpentData.h; sourceTree = ""; }; + AE6C6F2F87ACCA520E2BF96AA8086D7D /* KWAsyncVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAsyncVerifier.h; path = Classes/Verifiers/KWAsyncVerifier.h; sourceTree = ""; }; + AEB6D0D368F9960B71C2DC23527A1EFE /* NSNumber+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+KiwiAdditions.h"; path = "Classes/Core/NSNumber+KiwiAdditions.h"; sourceTree = ""; }; + AEE0159DC4A3EBE535582DB2791469AB /* Zip.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Zip.xcconfig; sourceTree = ""; }; + AEFACB543EF6823230F49643950A2C40 /* KSJSONCodecObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSJSONCodecObjC.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodecObjC.h; sourceTree = ""; }; + AF1F5291602B09E82E87C5357B79F762 /* Kiwi-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kiwi-umbrella.h"; sourceTree = ""; }; + AFF6C1CE913BF27C12E0FE437BB8B60B /* SENSound.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSound.m; path = Pod/Classes/Model/SENSound.m; sourceTree = ""; }; + B0183AC85783EB3AB775C3734559D88D /* DDContextFilterLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDContextFilterLogFormatter.m; path = Classes/Extensions/DDContextFilterLogFormatter.m; sourceTree = ""; }; + B0636DE3AD6EF589C07424F51872BFEE /* Bugsnag-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bugsnag-prefix.pch"; sourceTree = ""; }; + B077F26C0025994A305A8B3F2FB7378C /* prng.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = prng.c; path = Zip/minizip/aes/prng.c; sourceTree = ""; }; + B09019AD5CD56C40A9347D137ACA8FA2 /* LGBluetooth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LGBluetooth-umbrella.h"; sourceTree = ""; }; + B0AF0A87E7233D79FBA1D73F215615BA /* FBSDKCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h; sourceTree = ""; }; + B0DE7A4AC0F689755048279AAB498BF1 /* KSObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSObjC.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSObjC.h; sourceTree = ""; }; + B0E885BAD449E7E85F44CAF78E9C27FC /* KWStringPrefixMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringPrefixMatcher.m; path = Classes/Matchers/KWStringPrefixMatcher.m; sourceTree = ""; }; + B1E32E3EB1CB4E38E069F7A5B9EB241B /* FBSDKLoginError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginError.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m; sourceTree = ""; }; + B2458AFA0C2CA5C64D07B816ED4CB626 /* CodedInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CodedInputStream.h; path = src/runtime/Classes/CodedInputStream.h; sourceTree = ""; }; + B263072E68DB8DC95577D5018913E8BE /* FBSDKColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKColor.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h; sourceTree = ""; }; B26344C076FD7E2D21A273849832381A /* Pods-SenseApp-Sense-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SenseApp-Sense-frameworks.sh"; sourceTree = ""; }; - B2675CC7C04F565CA4E23255C1FC8823 /* SEGSegmentIntegrationFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGSegmentIntegrationFactory.m; path = Pod/Classes/Internal/SEGSegmentIntegrationFactory.m; sourceTree = ""; }; - B296E591DD1116B86A05F4475FFAAAC5 /* SENRemoteImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENRemoteImage.m; path = Pod/Classes/Model/SENRemoteImage.m; sourceTree = ""; }; + B272BDD08A9E560AA898490D06D07470 /* KSCrashState.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashState.c; path = KSCrash/Source/KSCrash/Recording/KSCrashState.c; sourceTree = ""; }; + B2788EF6BBBDF8F8B52DB58F4312DF4A /* NSRegularExpression+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRegularExpression+Matcheable.h"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.h"; sourceTree = ""; }; + B287A2BE1A7AD6BDE66DD8563A2ED790 /* KSSafeCollections.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSafeCollections.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSafeCollections.h; sourceTree = ""; }; B2ABCCAAA20E4BA8ADE406D5F5DDBE36 /* Pods-SenseApp-Tests.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Tests.beta.xcconfig"; sourceTree = ""; }; - B2C8A58A3763022C07A0A2665FBD355D /* KWFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFormatter.m; path = Classes/Core/KWFormatter.m; sourceTree = ""; }; - B2D7387A2F28AAC72471D0B490A2F7A6 /* SENSleepSoundRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepSoundRequest.h; path = Pod/Classes/Model/SENSleepSoundRequest.h; sourceTree = ""; }; - B2DCF9C68266D6253840B04701EC5D9B /* platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = platform.h; sourceTree = ""; }; - B31D7E5A84257EAC900D64457D6F7A64 /* RealmSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-umbrella.h"; sourceTree = ""; }; - B31E512A805E296CFB496B487DCBDE0F /* MSDynamicsDrawerViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = MSDynamicsDrawerViewController.modulemap; sourceTree = ""; }; - B32A10CAFD282C633662C18C5CA6E1DD /* KSSysCtl.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSSysCtl.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSSysCtl.c; sourceTree = ""; }; - B34120FCA27B8399BC044D3E163B2B9E /* KWExampleSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExampleSuiteBuilder.m; path = Classes/Core/KWExampleSuiteBuilder.m; sourceTree = ""; }; - B378688643C1F08E81B2A312313D22BE /* RealmChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmChartUtils.swift; path = ChartsRealm/Classes/Utils/RealmChartUtils.swift; sourceTree = ""; }; - B39E8EE70FCC59A7A678CBA7ED03C60A /* KSCrashSentry_User.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashSentry_User.c; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_User.c; sourceTree = ""; }; - B3AD34109298E7EE4A73219F718D934C /* FBSDKViewImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewImpressionTracker.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h; sourceTree = ""; }; - B3B509EDBF4385EE250C8040B0605E39 /* object_store.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_store.cpp; path = Realm/ObjectStore/object_store.cpp; sourceTree = ""; }; - B3DA3B0841D6336AC189A14783AC326B /* Analytics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Analytics-umbrella.h"; sourceTree = ""; }; - B3E57C099AFB0284A34812A14D60C736 /* KWRegisterMatchersNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRegisterMatchersNode.h; path = Classes/Nodes/KWRegisterMatchersNode.h; sourceTree = ""; }; - B3E653CD21988F08329882B68700E1D9 /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; - B40031E7B23BF1AFE32642D32E988539 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B300B6AA072EB96AF5CE9ED9F8A71E0A /* ChartViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewPortJob.swift; path = Charts/Classes/Jobs/ChartViewPortJob.swift; sourceTree = ""; }; + B37D5DC92DE0A2EEE57C278D18331C40 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B3899D8CB902FA62222DC77906DDCCD4 /* FBSDKError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKError.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h; sourceTree = ""; }; + B3ED77A7082EE7DEB2BB85D722E7415C /* LSHTTPStubURLProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPStubURLProtocol.h; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.h; sourceTree = ""; }; B4199426BAD9EFB819F3D03262AC189C /* Pods-SenseApp-Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SenseApp-Tests-dummy.m"; sourceTree = ""; }; - B46CB5025509B41C774FBCE0C501D108 /* SEGAnalyticsRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAnalyticsRequest.m; path = Pod/Classes/Internal/SEGAnalyticsRequest.m; sourceTree = ""; }; - B4A57255F49E31065267F6D57E66D936 /* KSDynamicLinker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSDynamicLinker.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSDynamicLinker.h; sourceTree = ""; }; - B4BA7242D55F0FC06C212275CAFB3827 /* FBSDKInternalUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInternalUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m; sourceTree = ""; }; - B4C513BACCFD6AE8174E71CC77BDAF87 /* SENSensorStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSensorStatus.h; path = Pod/Classes/Model/SENSensorStatus.h; sourceTree = ""; }; - B50AA473C6B75880C16C9A5ED62CD985 /* LSStubRequestDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubRequestDSL.m; path = Nocilla/DSL/LSStubRequestDSL.m; sourceTree = ""; }; - B5235C57044F575D2ABD326A11DA9A55 /* Realm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Realm.h; path = include/Realm.h; sourceTree = ""; }; - B52C742FA379E2286DEFAA0BB51F2FCA /* external_commit_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = external_commit_helper.cpp; path = Realm/ObjectStore/impl/apple/external_commit_helper.cpp; sourceTree = ""; }; - B52CB2BD44757D092247CA3F696A9F66 /* UICountingLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = UICountingLabel.modulemap; sourceTree = ""; }; - B62C7E4807F62D1EB0E4BF7FAD8D54E8 /* Charts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.xcconfig; sourceTree = ""; }; - B6A4239702652A6FC912E672FC68B3A4 /* KWRegularExpressionPatternMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRegularExpressionPatternMatcher.m; path = Classes/Matchers/KWRegularExpressionPatternMatcher.m; sourceTree = ""; }; - B6A6423AF01E6B199795EADE844446F2 /* Utilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Utilities.h; path = src/runtime/Classes/Utilities.h; sourceTree = ""; }; - B6CA54F0DCE8A883BE5CC87A795CBFCE /* SENAppUnreadStats.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAppUnreadStats.m; path = Pod/Classes/Model/SENAppUnreadStats.m; sourceTree = ""; }; - B6E5E99BF727DCDEF7EF9B40DAF977C6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B6EE9730ACD1B5598D6B641BEFD33E3D /* SecureDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheralDelegate.swift; sourceTree = ""; }; - B715FE6A4033EA20B19BFC9BC3C524C5 /* SENAnalyticsLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAnalyticsLogger.m; path = Pod/Classes/Analytics/SENAnalyticsLogger.m; sourceTree = ""; }; - B71EB212C20D3F5EB9E5FEB14DAF2BE7 /* FBSDKBridgeAPIProtocolNativeV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolNativeV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m; sourceTree = ""; }; - B759BB603C5A3BC6A1EAAA4D7DE9D85D /* _FBSDKLoginRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKLoginRecoveryAttempter.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h; sourceTree = ""; }; - B7A2600C97DC456E250225D8427B2495 /* KSString.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSString.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSString.c; sourceTree = ""; }; - B7AE59CB52BFF46497C4094B08282B86 /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; - B7EE9EF973C8EFB261C9D37135660D85 /* SORelativeDateTransformer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SORelativeDateTransformer-dummy.m"; sourceTree = ""; }; - B84D8BA86B1E36D7B3D3E3B47FDC2E68 /* ChartDataApproximatorFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataApproximatorFilter.swift; path = Charts/Classes/Filters/ChartDataApproximatorFilter.swift; sourceTree = ""; }; - B873D145FC904746DF7DA313C46B54DE /* SecureDFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUPacket.swift; sourceTree = ""; }; - B8801421677871FB911850D9684B19FC /* KWAsyncVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAsyncVerifier.h; path = Classes/Verifiers/KWAsyncVerifier.h; sourceTree = ""; }; - B89ED9C2EDA6BCF9DBAE94B86381735A /* MSDynamicsDrawerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MSDynamicsDrawerViewController.h; path = MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.h; sourceTree = ""; }; - B8A0D469D156594B23F99DE30D8B4C33 /* RLMPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMPlatform.h; path = include/RLMPlatform.h; sourceTree = ""; }; - B8D0719063563070957BA6B5EBB2894E /* SENAuthorizationService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAuthorizationService.m; path = Pod/Classes/API/SENAuthorizationService.m; sourceTree = ""; }; - B8DFE631CADF34C50ADD879FF7778AA0 /* BugsnagIosNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagIosNotifier.h; path = Source/Bugsnag/BugsnagIosNotifier.h; sourceTree = ""; }; - B8E13A122407533E3C3CDE955DC23EA3 /* CocoaLumberjack-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaLumberjack-prefix.pch"; sourceTree = ""; }; - B95884C263A492240D9334B018329EE3 /* Kiwi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kiwi.h; path = Classes/Core/Kiwi.h; sourceTree = ""; }; - B9E0A3D2926DF0BFB3B42AB06B648B6A /* BFWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFWebViewAppLinkResolver.m; path = Bolts/iOS/BFWebViewAppLinkResolver.m; sourceTree = ""; }; - BA07EC8239AD89716CB7AE126DA29843 /* SENPreference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPreference.m; path = Pod/Classes/Model/SENPreference.m; sourceTree = ""; }; - BA1FD4A1FD166FCDC6F44EA7857FC737 /* FBSDKErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m; sourceTree = ""; }; - BA634CD3FE0CA4FA09967589A58251D9 /* KWSymbolicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSymbolicator.h; path = Classes/Core/KWSymbolicator.h; sourceTree = ""; }; + B44BEA5613A9AD6D1AA81717F7299CF8 /* SENSenseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseManager.h; path = Pod/Classes/BLE/SENSenseManager.h; sourceTree = ""; }; + B44C454A38C9FA8B45EF2BE3CBAEE80D /* MSDynamicsDrawerStyler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MSDynamicsDrawerStyler.m; path = MSDynamicsDrawerViewController/MSDynamicsDrawerStyler.m; sourceTree = ""; }; + B44E21AEEF1D1003DCFEEAEC0870931A /* KWMessagePattern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessagePattern.h; path = Classes/Core/KWMessagePattern.h; sourceTree = ""; }; + B46F9E6FA5DF85C87375A3ECA0E5B80B /* SENTimeline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTimeline.h; path = Pod/Classes/Model/SENTimeline.h; sourceTree = ""; }; + B478A2E9A9DC455E6EDE8393BECD17AF /* FBSDKBridgeAPIProtocolWebV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV2.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m; sourceTree = ""; }; + B48F0F4869C522556C265F7C4D5ADDFC /* DDLegacyMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLegacyMacros.h; path = Classes/DDLegacyMacros.h; sourceTree = ""; }; + B4A366E899A36DA54B0B82222C77462D /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + B4A56A89B3790CB48710AB065FBA99CA /* KSSignalInfo.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSSignalInfo.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSSignalInfo.c; sourceTree = ""; }; + B4C2C6501FACF9561D6F68322EE52204 /* LSHTTPStubURLProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPStubURLProtocol.m; path = Nocilla/Hooks/NSURLRequest/LSHTTPStubURLProtocol.m; sourceTree = ""; }; + B4C2E29333DD23080923425CAEDE8A6D /* zh-Hant.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "zh-Hant.lproj"; path = "SVWebViewController/zh-Hant.lproj"; sourceTree = ""; }; + B548023C3A4B5E6CA9B6BFE8BBFDC57E /* FBSDKWebDialog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialog.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m; sourceTree = ""; }; + B5995C78D79381C316E623B9B791B600 /* LineScatterCandleRadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartRenderer.swift; path = Charts/Classes/Renderers/LineScatterCandleRadarChartRenderer.swift; sourceTree = ""; }; + B5B3F5544592C5B95E150873AE34B576 /* ExtendableMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExtendableMessage.m; path = src/runtime/Classes/ExtendableMessage.m; sourceTree = ""; }; + B61058869909715EF832391CE4BC45E7 /* KWObjCUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWObjCUtilities.m; path = Classes/Core/KWObjCUtilities.m; sourceTree = ""; }; + B62DB8621AC21C867659B21483A2705E /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B672E0707772C68D3F70EE0B741AC92C /* SENAPISensor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISensor.m; path = Pod/Classes/API/SENAPISensor.m; sourceTree = ""; }; + B68AA96572EC87DE3E5F5CD49C93342C /* SENCondition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENCondition.h; path = Pod/Classes/Model/SENCondition.h; sourceTree = ""; }; + B6C1C82F801AA457F6C4CE0627CE9C69 /* DFUStream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStream.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStream.swift; sourceTree = ""; }; + B6C44E5B88EF647FF4BBA897881D7353 /* FBSDKLoginButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginButton.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h; sourceTree = ""; }; + B6D2B2B385B67F64E7FCD4C064D5F0F6 /* KWMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatcher.h; path = Classes/Core/KWMatcher.h; sourceTree = ""; }; + B6D57ED45F147FEAB44C65AF543B572C /* SENTimelineMetric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTimelineMetric.h; path = Pod/Classes/Model/SENTimelineMetric.h; sourceTree = ""; }; + B6EAF6ADA7BAFAA5071FF052BB6E6C52 /* KWDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWDeviceInfo.m; path = Classes/Core/KWDeviceInfo.m; sourceTree = ""; }; + B7202A72567CF4E609B357ABA20C08D5 /* BFAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkResolving.h; path = Bolts/iOS/BFAppLinkResolving.h; sourceTree = ""; }; + B72C4ACA101B02455B5CCF182A5A5A83 /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Charts/Classes/Charts/CandleStickChartView.swift; sourceTree = ""; }; + B744C8493B2DB3AA5BE32B17AE706C38 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B74C83B214B9246C4CCD2B14BDD3A2CB /* SENPairedDevices.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPairedDevices.h; path = Pod/Classes/Model/SENPairedDevices.h; sourceTree = ""; }; + B847424FD83034868397BF616422582F /* SENInsight.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENInsight.m; path = Pod/Classes/Model/SENInsight.m; sourceTree = ""; }; + B852A764E7F54B50530F7A88C25FE288 /* SENPeripheralManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPeripheralManager.m; path = Pod/Classes/BLE/SENPeripheralManager.m; sourceTree = ""; }; + B86937AF5F90ECD087A9D1EF577EB204 /* KWAsyncVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAsyncVerifier.m; path = Classes/Verifiers/KWAsyncVerifier.m; sourceTree = ""; }; + B8EAD03FA744E7019C9DF4B6894E007F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B8FF85448A0D0205322455A104E16FCC /* UnknownFieldSetBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UnknownFieldSetBuilder.m; path = src/runtime/Classes/UnknownFieldSetBuilder.m; sourceTree = ""; }; + B906BC429B071335CEC1F1AADDFB92D3 /* SENServiceDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENServiceDevice.m; path = Pod/Classes/Service/SENServiceDevice.m; sourceTree = ""; }; + B938F7A66925104D69C8C9E24FC0BFBB /* BugsnagOSXNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagOSXNotifier.h; path = Source/Bugsnag/BugsnagOSXNotifier.h; sourceTree = ""; }; + B9457548F12E30C56C8806207E1DD8E2 /* KiwiConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiConfiguration.h; path = Classes/Core/KiwiConfiguration.h; sourceTree = ""; }; + B948FB8E2DB8EA5595223B5FB75B84D4 /* ExtendableMessageBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExtendableMessageBuilder.m; path = src/runtime/Classes/ExtendableMessageBuilder.m; sourceTree = ""; }; + B9636961E2B85414A07DE1B70094979E /* KSMach_x86_64.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_x86_64.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_x86_64.c; sourceTree = ""; }; + B9C23D157A0BC590A95E7EB9E9737022 /* FBSDKOrganicDeeplinkHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKOrganicDeeplinkHelper.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKOrganicDeeplinkHelper.h; sourceTree = ""; }; + B9DC380322702BC559633FE8ECE41EC2 /* UIImageEffects-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImageEffects-umbrella.h"; sourceTree = ""; }; + B9E5EFA7E522C712604DB18E2CF36459 /* ChartSelectionDetail.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartSelectionDetail.swift; path = Charts/Classes/Utils/ChartSelectionDetail.swift; sourceTree = ""; }; + BA74C7BB75EF62567B0DBE99D6BC5205 /* SENSensor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSensor.m; path = Pod/Classes/Model/SENSensor.m; sourceTree = ""; }; + BA86812AFC5FF190B31D67097ABB54D8 /* FBSDKKeychainStoreViaBundleID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStoreViaBundleID.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h; sourceTree = ""; }; BA8B471CF9D546DB5EB7DA3D2C84140B /* Pods-SenseApp-Sense.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Sense.debug.xcconfig"; sourceTree = ""; }; - BAF493C1F292DD955F857868FC41686F /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - BB0EF1B46C914BCE52F06AAE38323907 /* FBSDKKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStore.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h; sourceTree = ""; }; - BB48CB8F493F3B714762A97DE65FEA4B /* KSCrashReportFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportFilter.h; path = KSCrash/Source/KSCrash/Reporting/Filters/KSCrashReportFilter.h; sourceTree = ""; }; - BB6D97E5379932D73D987562C209AB4D /* ChartRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartRange.swift; path = Charts/Classes/Highlight/ChartRange.swift; sourceTree = ""; }; - BB706E450F552995910DFC91FA714DDC /* UnknownFieldSetBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnknownFieldSetBuilder.h; path = src/runtime/Classes/UnknownFieldSetBuilder.h; sourceTree = ""; }; - BB882793B9DBCF0897148003653A77EA /* KWProbePoller.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWProbePoller.m; path = Classes/Core/KWProbePoller.m; sourceTree = ""; }; - BB88313660665F0DBCBAC8DC8288EFD8 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - BB901024AB3EBEB24EE1595B0B601EB7 /* AbstractMessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractMessageBuilder.h; path = src/runtime/Classes/AbstractMessageBuilder.h; sourceTree = ""; }; - BBC3F7691EB675FEB8020A6CF68E163C /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - BBD9584B1F762014EEA0374D27999328 /* KSObjC.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSObjC.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSObjC.c; sourceTree = ""; }; - BBE75D28D4CB06EBC7024B379BFB0E75 /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Charts/Classes/Utils/ChartUtils.swift; sourceTree = ""; }; - BBFBAF35E05A49890D4AEF7040123E02 /* Pods_SenseApp_Sense.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SenseApp_Sense.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BC47BE2DFB64403960CC4AF92A6AC8A1 /* DDASLLogCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogCapture.h; path = Classes/DDASLLogCapture.h; sourceTree = ""; }; - BCBA469F941AA7024ABC60EDD8070DFE /* LSRegexMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSRegexMatcher.h; path = Nocilla/Matchers/LSRegexMatcher.h; sourceTree = ""; }; - BCC699492C1CC80E35AF85EC1CC5A706 /* KWBeIdenticalToMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeIdenticalToMatcher.h; path = Classes/Matchers/KWBeIdenticalToMatcher.h; sourceTree = ""; }; + BA92B725F460A614353D537F8B8F775E /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + BBA59FECB49246815EFACF0CB5B2016A /* KSJSONCodec.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSJSONCodec.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodec.c; sourceTree = ""; }; + BBC21A823C05D778E937BEEB187942B6 /* LSDataMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSDataMatcher.h; path = Nocilla/Matchers/LSDataMatcher.h; sourceTree = ""; }; + BBEB0B4911E4BA048520B6E56D353F9D /* Field.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Field.m; path = src/runtime/Classes/Field.m; sourceTree = ""; }; + BC30E6C0D1C941F536F4B398F960CB31 /* SENAPIClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIClient.h; path = Pod/Classes/API/SENAPIClient.h; sourceTree = ""; }; + BCAC97ADB2151F3C6DB26E2509A1E6AB /* SENAPITimeline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPITimeline.m; path = Pod/Classes/API/SENAPITimeline.m; sourceTree = ""; }; BCCB65B558D45D3235A38F82AA92A57B /* Pods-SenseApp-RoomConditionsExtension-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SenseApp-RoomConditionsExtension-resources.sh"; sourceTree = ""; }; - BD03D4C2ADECB0ED12C9078606F93039 /* SENAPIExpansion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIExpansion.h; path = Pod/Classes/API/SENAPIExpansion.h; sourceTree = ""; }; - BD0B2928C9B2463922CF4C4F38287070 /* NAPickerView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NAPickerView.xcconfig; sourceTree = ""; }; - BD44693C7E0B8358080C8A17D34E5238 /* SENDFUStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENDFUStatus.h; path = Pod/Classes/Model/SENDFUStatus.h; sourceTree = ""; }; - BD5679E692B089CF3CA1F0A1B5B8D7E1 /* SEGPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGPayload.m; path = Pod/Classes/Integrations/SEGPayload.m; sourceTree = ""; }; - BD59293105D66C25A6ACB9AEA6F99E7C /* RLMPredicateUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMPredicateUtil.mm; path = Realm/RLMPredicateUtil.mm; sourceTree = ""; }; - BD65285F62F97A519BB9E5B9AB0D261E /* FBSDKLoginUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginUtility.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m; sourceTree = ""; }; - BDA89222B70B52D08CE9E1CBDBA1B60E /* KWBeEmptyMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeEmptyMatcher.h; path = Classes/Matchers/KWBeEmptyMatcher.h; sourceTree = ""; }; - BDB01191B147BB8DFF216B66779B2E55 /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; - BDE8B81B58B2BFF7E97DFBADCDCC78AF /* FBSDKConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKConstants.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h; sourceTree = ""; }; - BDEA75DCD03866CB6CBB0D5D7BAE9765 /* Demangle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Demangle.cpp; path = KSCrash/Source/KSCrash/Recording/Tools/Demangle.cpp; sourceTree = ""; }; - BDF7C060727FAD50A08816F9C03664AB /* FBSDKWebDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h; sourceTree = ""; }; - BE053981EE1D8032490FD47331E479F5 /* SEGAliasPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAliasPayload.m; path = Pod/Classes/Integrations/SEGAliasPayload.m; sourceTree = ""; }; - BE3281985C96F6D05CC3260FC5E4D36E /* SENSenseWiFiStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseWiFiStatus.m; path = Pod/Classes/Model/SENSenseWiFiStatus.m; sourceTree = ""; }; - BE39766172A99C9580094A7DE6F27F70 /* RLMObjectBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectBase.mm; path = Realm/RLMObjectBase.mm; sourceTree = ""; }; - BE556820FEF482B55D54FF9712B9DE92 /* RLMResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults.h; path = include/RLMResults.h; sourceTree = ""; }; - BEBD80DF3001F0E519472171109002B8 /* SHSProtoBuf.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SHSProtoBuf.xcconfig; sourceTree = ""; }; - BEF242371E8BB627FD5DF25603DC3E30 /* ZendeskSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZendeskSDK.framework; sourceTree = ""; }; - BF00F5E3F7CB1DCDB79D6689731A768E /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - BF387B7A4990626BC6F7DC470DA60A8D /* KWAfterAllNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAfterAllNode.m; path = Classes/Nodes/KWAfterAllNode.m; sourceTree = ""; }; - BF76B44BE95F7E991F6B22F3BFE9A6F5 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFA9ECC9AC50E75EE7FE66078136510E /* Bugsnag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bugsnag.h; path = Source/Bugsnag/Bugsnag.h; sourceTree = ""; }; - BFAC397DE1A16F31A42F848466BE711B /* KWHaveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWHaveMatcher.h; path = Classes/Matchers/KWHaveMatcher.h; sourceTree = ""; }; - BFC8DF115F3837443B19615A9788DE18 /* NSString+Nocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Nocilla.m"; path = "Nocilla/Categories/NSString+Nocilla.m"; sourceTree = ""; }; - BFD52E39591E26673D9185159366E9E8 /* FBSDKBridgeAPIProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocol.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h; sourceTree = ""; }; - C061FA8DD99967961A9B3AF55D8F0905 /* LSHTTPRequestDiff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDiff.h; path = Nocilla/Diff/LSHTTPRequestDiff.h; sourceTree = ""; }; - C08BA21DAE13DB22364E1550DE467B47 /* BFAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkTarget.h; path = Bolts/iOS/BFAppLinkTarget.h; sourceTree = ""; }; - C0B2A42E9324BEDCDD5CB72B7F475E4E /* SEGTrackPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGTrackPayload.h; path = Pod/Classes/Integrations/SEGTrackPayload.h; sourceTree = ""; }; - C112C97E027A098AE197B591946E9767 /* FBSDKInternalUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInternalUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h; sourceTree = ""; }; - C14C16A57DC940366F62208F7DE68933 /* DFUStreamHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamHex.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamHex.swift; sourceTree = ""; }; - C15B40389E9A71548B62106C4294EED6 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - C1898C759AAA9843A8AA87C33AFA9331 /* SENKeyedArchiver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENKeyedArchiver.h; path = Pod/Classes/Model/SENKeyedArchiver.h; sourceTree = ""; }; - C1982541F8C3BB1C17AA2089B12A9287 /* SortDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SortDescriptor.swift; path = RealmSwift/SortDescriptor.swift; sourceTree = ""; }; - C21E65C55224447113887CE1795BD36E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C2779E9B5EDAD5139A6FDD1E3608F7DB /* Analytics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Analytics.modulemap; sourceTree = ""; }; - C2E64F1C39347C677FCB624E77AF5192 /* FBSDKGraphRequestConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h; sourceTree = ""; }; - C2ED0251619F533C9E6B1869245CA2EB /* SVWebViewControllerActivitySafari-iPad@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivitySafari-iPad@2x.png"; path = "SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari-iPad@2x.png"; sourceTree = ""; }; - C2F5322C590B5B678C52F7EF6928CC56 /* BFAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererController.h; path = Bolts/iOS/BFAppLinkReturnToRefererController.h; sourceTree = ""; }; - C30AD39E22162EF38C6190CBCF697460 /* UIImageEffects.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = UIImageEffects.modulemap; sourceTree = ""; }; - C30C42E83D625842CA51E14A352A1730 /* KWSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSpec.h; path = Classes/Core/KWSpec.h; sourceTree = ""; }; - C341F65DE52369067D9C66C37CAD0A48 /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = Zip/Zip.swift; sourceTree = ""; }; - C357FA281AE30B3AEDD3EA1BC1FF7278 /* LegacyDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheralDelegate.swift; sourceTree = ""; }; - C35DAA49885257E3E384EEE04BE7C04E /* ChartTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartTransformer.swift; path = Charts/Classes/Utils/ChartTransformer.swift; sourceTree = ""; }; - C3896122BC24C844F44D2FC4DC6FDE95 /* ChartYAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartYAxis.swift; path = Charts/Classes/Components/ChartYAxis.swift; sourceTree = ""; }; - C3AE766D3F5FA42C513D1346B47AD786 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - C3C701635A98AD9C6780BB85C54F3E5A /* KSCrashSentry_CPPException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_CPPException.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_CPPException.h; sourceTree = ""; }; - C3C73599A171B04402135F0045DB6440 /* KWNull.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNull.m; path = Classes/Core/KWNull.m; sourceTree = ""; }; - C3CE451BAFD099C1AAB773A80D963D50 /* FBSDKIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h; sourceTree = ""; }; - C3E31A10909090D07F9DDC8388999166 /* KWExistVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExistVerifier.m; path = Classes/Verifiers/KWExistVerifier.m; sourceTree = ""; }; - C418DE088F434FF892318642B807D860 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; - C43AB72E7C87091A781126BB6E4D31FB /* SEGAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAnalytics.m; path = Pod/Classes/SEGAnalytics.m; sourceTree = ""; }; - C4474248A2BA8640ADC97479A8446ABB /* LSHTTPRequestDiff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPRequestDiff.m; path = Nocilla/Diff/LSHTTPRequestDiff.m; sourceTree = ""; }; - C4678787E1AB54ED9E5C916D5D2740C1 /* KWNotificationMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNotificationMatcher.h; path = Classes/Matchers/KWNotificationMatcher.h; sourceTree = ""; }; - C4926766361AECCFA6BF257B7294EB1C /* Pods_SenseApp_RoomConditionsExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SenseApp_RoomConditionsExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4A7A4FA6E6E9B63047D57763B264421 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + BCDE5E4D0AF22B1A081B5F811320FA53 /* FBSDKAccessTokenCacheV3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h; sourceTree = ""; }; + BCFE326B4F4BD3881194984CB91021CF /* SENSleepSoundStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSleepSoundStatus.m; path = Pod/Classes/Model/SENSleepSoundStatus.m; sourceTree = ""; }; + BD164F4E6BE48EF891649706364C3047 /* FXKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FXKeychain.h; path = FXKeychain/FXKeychain.h; sourceTree = ""; }; + BD623924F64E5A042EF647B73C77DDBD /* KWHaveValueMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWHaveValueMatcher.h; path = Classes/Matchers/KWHaveValueMatcher.h; sourceTree = ""; }; + BDA8289B0FF07BF0CB87F4B7C9C6FA8A /* SENAnalyticsLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAnalyticsLogger.h; path = Pod/Classes/Analytics/SENAnalyticsLogger.h; sourceTree = ""; }; + BDCBBF6468D2782C44943997A9EDA568 /* MSDynamicsDrawerViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MSDynamicsDrawerViewController-umbrella.h"; sourceTree = ""; }; + BDFB20BEF0D88EF7ECF730479CC23309 /* fileenc.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fileenc.c; path = Zip/minizip/aes/fileenc.c; sourceTree = ""; }; + BDFED5A4F565CE76E1560649AE37263E /* KWInvocationCapturer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWInvocationCapturer.m; path = Classes/Core/KWInvocationCapturer.m; sourceTree = ""; }; + BE99E39937708AD868B1E6B6E35B34CE /* _FBSDKTemporaryErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKTemporaryErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m; sourceTree = ""; }; + BEAD3A33DC89892A7C16AE5586DEF06D /* Bootstrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bootstrap.h; path = src/runtime/Classes/Bootstrap.h; sourceTree = ""; }; + BEB27B45E17C43A9ED91EDF86678695C /* DDFileLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDFileLogger.m; path = Classes/DDFileLogger.m; sourceTree = ""; }; + BEB7D908F341B8EC9E5DB660EBA99588 /* MutableExtensionRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MutableExtensionRegistry.m; path = src/runtime/Classes/MutableExtensionRegistry.m; sourceTree = ""; }; + BF0EC6A4FFEEB6EA1A3062D74EFC455F /* FBSDKLoginKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginKit+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h"; sourceTree = ""; }; + BF65420693CE005B8A6AC725F407C6EF /* KWMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMock.m; path = Classes/Mocking/KWMock.m; sourceTree = ""; }; + BFA9F303109B4389F27AC8F0BF5D83DF /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Charts/Classes/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; + BFB371350B65D32D5C5234E3DE9647D9 /* CGFloatType-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CGFloatType-prefix.pch"; sourceTree = ""; }; + BFF5F2B44921E5B6DEAC58CCEA659119 /* KWExampleNodeVisitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleNodeVisitor.h; path = Classes/Core/KWExampleNodeVisitor.h; sourceTree = ""; }; + C05561ABB3BB9566626F6D3D9F2BD5B3 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; + C05CFC459869641413E249FA0FA0DDC3 /* brg_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = brg_types.h; path = Zip/minizip/aes/brg_types.h; sourceTree = ""; }; + C062B11BD21931FD957112EA04672617 /* Charts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-umbrella.h"; sourceTree = ""; }; + C0838AA7D610E547598C73534362C2FB /* ChartXAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisValueFormatter.swift; path = Charts/Classes/Formatters/ChartXAxisValueFormatter.swift; sourceTree = ""; }; + C12A843003D2BA39D02F96C191F43DA1 /* DDTTYLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDTTYLogger.h; path = Classes/DDTTYLogger.h; sourceTree = ""; }; + C12BDF33CA9C47581367FC8B6C96A96F /* FBSDKGraphRequestPiggybackManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestPiggybackManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m; sourceTree = ""; }; + C13441E19CCE51D61DF236B1B579D677 /* UIImageEffects.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIImageEffects.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C15594F3622AF4FAEAE37A3E5EFC4E0D /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Charts/Classes/Charts/CombinedChartView.swift; sourceTree = ""; }; + C1A5E3BC30B7CD8AD61C82BD54FE3918 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + C1A645DEFB922F621304951E595D361C /* KSObjC.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSObjC.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSObjC.c; sourceTree = ""; }; + C1B3995F17CC1328A354F5B75E7EFA16 /* SENSenseWiFiStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseWiFiStatus.m; path = Pod/Classes/Model/SENSenseWiFiStatus.m; sourceTree = ""; }; + C1B3BFA78881DE0406A5CD3605D1A78E /* FBSDKURLConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLConnection.m; sourceTree = ""; }; + C20B9ECC0A72C786BC17D9A8DFFDE5A2 /* ExtensionRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExtensionRegistry.m; path = src/runtime/Classes/ExtensionRegistry.m; sourceTree = ""; }; + C2BA71CA44560BF1B6EA15CCE4442118 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + C2BB420BF33F147B25BD984C483C3D78 /* NSInvocation+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+OCMAdditions.h"; path = "Classes/Core/NSInvocation+OCMAdditions.h"; sourceTree = ""; }; + C332DE91E9235F317E87D6EA66629FA5 /* SecureDFUServiceDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceDelegate.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceDelegate.swift; sourceTree = ""; }; + C33EDCA79BB3E76F47FF05E2A0DB0BD2 /* LegacyDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUService.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Services/LegacyDFUService.swift; sourceTree = ""; }; + C381CAF8DA86A54A7BF25FCE22E4A25E /* FBSDKTriStateBOOL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTriStateBOOL.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m; sourceTree = ""; }; + C3839B6328882FAB12D505A08E8CA1F7 /* Zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Zip.h; path = Zip/Zip.h; sourceTree = ""; }; + C3A1F2470E70BEB4C0D126F6FB61CFEC /* FBSDKBridgeAPICrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPICrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h; sourceTree = ""; }; + C3AEBC0306BDA990EBA13BE0EF681A14 /* KWItNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWItNode.h; path = Classes/Nodes/KWItNode.h; sourceTree = ""; }; + C4A793BE5031FFAB00309D1CA5219025 /* KSSystemInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSystemInfo.h; path = KSCrash/Source/KSCrash/Recording/KSSystemInfo.h; sourceTree = ""; }; C4F144807325488E20C751422908849B /* Pods-SenseApp-RoomConditionsExtension-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SenseApp-RoomConditionsExtension-acknowledgements.markdown"; sourceTree = ""; }; - C4F9C5CDB57240F9482E003C84877A8C /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Charts/Classes/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; - C5154AD506DFB34AB4E36194B4A8103C /* FBSDKLoginButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginButton.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m; sourceTree = ""; }; - C58094B9497A83E4B8BEE88FE590E716 /* KSCrashSentry_Signal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_Signal.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Signal.h; sourceTree = ""; }; - C5A4255923576850B742DA28725168D4 /* KWSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSpec.m; path = Classes/Core/KWSpec.m; sourceTree = ""; }; - C5FBA85D548D02A296BF546FAA181C19 /* KSCrashC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashC.h; path = KSCrash/Source/KSCrash/Recording/KSCrashC.h; sourceTree = ""; }; - C62EC939F96FC6519DB4B733F2727F61 /* Analytics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Analytics-dummy.m"; sourceTree = ""; }; - C72B822D3386376C668B51DA41CAD092 /* FBSDKAccessToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessToken.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m; sourceTree = ""; }; - C72C086D6D4DCDDC4F9D4264E15A9BE6 /* SENSwapStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSwapStatus.h; path = Pod/Classes/Model/SENSwapStatus.h; sourceTree = ""; }; - C75434EE36F7983EF544FB0510766932 /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Charts/Classes/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; + C51F9EF1950D1AB41E9E3737ED8B3159 /* SVWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewController.m; path = SVWebViewController/SVWebViewController.m; sourceTree = ""; }; + C5258EC223D5B5B93A3AAC25B2875954 /* FBSDKAccessTokenCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCache.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m; sourceTree = ""; }; + C57005B0A8C8536DCB31A9BF8DB5131D /* LGBluetooth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = LGBluetooth.modulemap; sourceTree = ""; }; + C577604989A799AEC7692B0DFFF5AD70 /* BFAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkNavigation.m; path = Bolts/iOS/BFAppLinkNavigation.m; sourceTree = ""; }; + C5D31ECF9061C083E82D38A5BD686630 /* FBSDKAppEventsStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsStateManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsStateManager.h; sourceTree = ""; }; + C5E91D6179B80CD3C97E0D1CE39E3975 /* KSCrashSentry_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_Private.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Private.h; sourceTree = ""; }; + C65EA4EEA9FD3852D79BCB2263A33654 /* Descriptor.pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Descriptor.pb.h; path = src/runtime/Classes/Descriptor/Descriptor.pb.h; sourceTree = ""; }; + C7350467646C636DB48FDB8282C9ED46 /* AttributedMarkdown-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AttributedMarkdown-umbrella.h"; sourceTree = ""; }; + C74660D095E15BEB998BAA21735D63EE /* KSCrashSentry_Deadlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_Deadlock.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_Deadlock.h; sourceTree = ""; }; + C75E92075E11C522CAE6BDC96D6A9619 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; + C76CA027D521DFD2D4F49C78859F9130 /* SENAPIClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIClient.m; path = Pod/Classes/API/SENAPIClient.m; sourceTree = ""; }; + C8474D0C154A507832C8C3A59C4DB952 /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; C861CCF6FB04DB5D53FF6EC4CE1C2C6D /* Pods-SenseApp-Sense-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SenseApp-Sense-dummy.m"; sourceTree = ""; }; - C898E026C3A67FD7515039C23FF66F4C /* FBSDKWebDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialog.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h; sourceTree = ""; }; - C8E061633FE56969C17377D512533075 /* SENSupportTopic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSupportTopic.m; path = Pod/Classes/Model/SENSupportTopic.m; sourceTree = ""; }; - C92365B992831C7105F20336468C0779 /* RLMRealmConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration_Private.h; path = include/RLMRealmConfiguration_Private.h; sourceTree = ""; }; - C926D5E8A6D0BF65D5FC7FDB938BA015 /* UnknownFieldSetBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UnknownFieldSetBuilder.m; path = src/runtime/Classes/UnknownFieldSetBuilder.m; sourceTree = ""; }; - C943C74D5EBFCFC5D7C7D87F26B6916D /* MSDynamicsDrawerViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MSDynamicsDrawerViewController-prefix.pch"; sourceTree = ""; }; - C95E297CA057EE7F95758D5DFF81D67D /* LineScatterCandleRadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartRenderer.swift; path = Charts/Classes/Renderers/LineScatterCandleRadarChartRenderer.swift; sourceTree = ""; }; - C9B19350D0DA5D160BB0930BF02CD69C /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - C9F2ED922FD2CF3C67AABCC6052265BB /* SENSense.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSense.m; path = Pod/Classes/BLE/SENSense.m; sourceTree = ""; }; - C9FBAC712B92DD64B902DC636670893A /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - CA0ED56CFAE220C52D700043059E4E52 /* weak_realm_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = weak_realm_notifier.cpp; path = Realm/ObjectStore/impl/apple/weak_realm_notifier.cpp; sourceTree = ""; }; - CA15364124A35A523861701A737B2050 /* KWExampleNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleNode.h; path = Classes/Nodes/KWExampleNode.h; sourceTree = ""; }; - CA28C1F157AE297ED4C98A6D547097C1 /* LoggerHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerHelper.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerHelper.swift; sourceTree = ""; }; - CA484951371BF3FB96E02CF1C8E305BF /* DFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUServiceController.swift; sourceTree = ""; }; - CA72AEE0A8F8ABF9AAA416ADFE366A95 /* FBSDKPaymentObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKPaymentObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKPaymentObserver.h; sourceTree = ""; }; - CA99B75535DA6509E52FE68FDF855106 /* LoggerDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerDelegate.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerDelegate.swift; sourceTree = ""; }; - CAA4D5D7BF941C0E2813DF459D54348B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CAB87C234E9F5F32F3102C793D55E52A /* KWAny.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAny.m; path = Classes/Core/KWAny.m; sourceTree = ""; }; - CB1F3A34E3FCF4DE49CE18604061E40D /* SORelativeDateTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SORelativeDateTransformer.h; path = SORelativeDateTransformer/SORelativeDateTransformer.h; sourceTree = ""; }; - CB4312433C11C86855F279DDE8F86082 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CB613EAE00447E96C112162DC5BFAC0C /* NSMethodSignature+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMethodSignature+KiwiAdditions.m"; path = "Classes/Core/NSMethodSignature+KiwiAdditions.m"; sourceTree = ""; }; - CB7988659B8D0453862C8DBFEE1BCF01 /* KWRegularExpressionPatternMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRegularExpressionPatternMatcher.h; path = Classes/Matchers/KWRegularExpressionPatternMatcher.h; sourceTree = ""; }; - CBC765FE50D0FCC549A08777CB1FE992 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CBE4F0D5C9D7E0D70CDC64CD67E21AB3 /* Bootstrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bootstrap.h; path = src/runtime/Classes/Bootstrap.h; sourceTree = ""; }; - CC33C3DF83AA2F39AC400E7CA6175C95 /* SENTimelineMetric.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTimelineMetric.m; path = Pod/Classes/Model/SENTimelineMetric.m; sourceTree = ""; }; - CC48BA090A9D69EAF16688A27B0F3511 /* AttributedMarkdown-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AttributedMarkdown-dummy.m"; sourceTree = ""; }; - CC842E1ADC9A4495DEA155AB31DDF3BF /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - CC89499D0EADD7F0CE370CD9EBE09692 /* LSStubRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubRequest.m; path = Nocilla/Stubs/LSStubRequest.m; sourceTree = ""; }; - CCA812F2F3090BFE20491E1529E4EE60 /* ChartHighlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlight.swift; path = Charts/Classes/Highlight/ChartHighlight.swift; sourceTree = ""; }; - CCD8CAF972FDFA4CC626F3D1783D043E /* RLMProperty_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty_Private.h; path = include/RLMProperty_Private.h; sourceTree = ""; }; - CD00FC7C0D4F5986EC95FF1930E6E0B4 /* KWCountType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCountType.h; path = Classes/Core/KWCountType.h; sourceTree = ""; }; - CD0F71730B9D6AB69DE19F033F66855A /* AttributedMarkdown.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AttributedMarkdown.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD46B84345EF4F585F321C40C2E77227 /* FBSDKLoginKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKLoginKit-dummy.m"; sourceTree = ""; }; - CDB9393C6942884F8F37594AC2D053CD /* KWRegisterMatchersNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRegisterMatchersNode.m; path = Classes/Nodes/KWRegisterMatchersNode.m; sourceTree = ""; }; - CDF2449BE02177B0A63946EC025F1D5A /* UIImageEffects.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UIImageEffects.xcconfig; sourceTree = ""; }; - CE0A13C7DC1F81FEEB2F304E46BD03E3 /* aestab.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = aestab.c; path = Zip/minizip/aes/aestab.c; sourceTree = ""; }; - CE40A5CC23FEB7D99E1DC5874D90404C /* LSDataMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSDataMatcher.m; path = Nocilla/Matchers/LSDataMatcher.m; sourceTree = ""; }; - CE866FA00A46EB798B09CAA11FF6186E /* SVWebViewControllerActivityChrome.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewControllerActivityChrome.h; path = SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.h; sourceTree = ""; }; - CEAAF653B4986B348CDD2348D1AC71EC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CEDC7A36AA1912CAB21AF81B1B666E06 /* KSCrashDoctor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrashDoctor.m; path = KSCrash/Source/KSCrash/Recording/KSCrashDoctor.m; sourceTree = ""; }; - CEDE43F45B14ECCC87F3D0557CD027DA /* FBSDKDynamicFrameworkLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDynamicFrameworkLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h; sourceTree = ""; }; - CF1F61B8147F56675FCB7D2838DD7D69 /* NSURLRequest+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+DSL.h"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.h"; sourceTree = ""; }; - CF3DD6AFD541E64496711EE75B8733A1 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; - CF435333A91C367E2676AD864CFB66FF /* DDASLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogger.m; path = Classes/DDASLLogger.m; sourceTree = ""; }; - CF55E61471959D87F924F81CD8A1B489 /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crypt.h; path = Zip/minizip/crypt.h; sourceTree = ""; }; - CF6F8C3BC53E13F137F43AC78C8C60CB /* KWMatcherFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatcherFactory.h; path = Classes/Core/KWMatcherFactory.h; sourceTree = ""; }; - CF9473861B4B3B96AEA5962AB60AFA14 /* RLMCollection.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMCollection.mm; path = Realm/RLMCollection.mm; sourceTree = ""; }; + C874E6B266FC8D70DDDD304AB031F9FA /* FBSDKMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMath.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h; sourceTree = ""; }; + C899B923A8C8A09BF4C83EA7259ADC46 /* FBSDKTypeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTypeUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m; sourceTree = ""; }; + C8F3EDA544E796D8A53D73EBBF6E863B /* KWContainStringMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContainStringMatcher.h; path = Classes/Matchers/KWContainStringMatcher.h; sourceTree = ""; }; + C8FC408FF80AA469DE5E6574793A6997 /* KWBeTrueMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeTrueMatcher.h; path = Classes/Matchers/KWBeTrueMatcher.h; sourceTree = ""; }; + C9B1AABAC8AB7B7AD2CC254E35894C08 /* SENSenseMessage.pb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSenseMessage.pb.m; path = Pod/Classes/BLE/SENSenseMessage.pb.m; sourceTree = ""; }; + C9C749AC111AAB71D3F7C27A38F979FB /* SEGSegmentIntegrationFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGSegmentIntegrationFactory.m; path = Pod/Classes/Internal/SEGSegmentIntegrationFactory.m; sourceTree = ""; }; + C9E6B349D1158A12BAB0F514F97DD4C2 /* FBSDKURLConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLConnection.h; sourceTree = ""; }; + C9F664F811A04D0CB3425299786E8399 /* SEGTrackPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGTrackPayload.h; path = Pod/Classes/Integrations/SEGTrackPayload.h; sourceTree = ""; }; + CA2B034F117073CB7F38EE1F66887A0E /* FBSDKAccessTokenCacheV3.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m; sourceTree = ""; }; + CA31891138CC7D3AAB0E5D0973AEDB67 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + CA3EB990B3FB64C36E02441F990BE726 /* FBSDKLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogger.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h; sourceTree = ""; }; + CAAE7588E17B834E174E234999E91715 /* NSError+SimpleConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+SimpleConstructor.h"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSError+SimpleConstructor.h"; sourceTree = ""; }; + CAB038E29C8E3EEA4F4A4FF85F52B80D /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Charts/Classes/Highlight/ChartHighlighter.swift; sourceTree = ""; }; + CB08C85892380A0129EB119BE2588CBA /* FBSDKApplicationDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKApplicationDelegate.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m; sourceTree = ""; }; + CB97AB0BE95A94B2EE41D8D86FCE9B5F /* SENAPISensor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPISensor.h; path = Pod/Classes/API/SENAPISensor.h; sourceTree = ""; }; + CC1E469B040EFC3EFA7B95B1A7031568 /* NAPickerView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = NAPickerView.modulemap; sourceTree = ""; }; + CCA9E99C870067DDD91D2787CBA9276D /* ChartDataApproximatorFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataApproximatorFilter.swift; path = Charts/Classes/Filters/ChartDataApproximatorFilter.swift; sourceTree = ""; }; + CD3BF15D56A5301154CEE0A699AB56F1 /* KSSysCtl.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSSysCtl.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSSysCtl.c; sourceTree = ""; }; + CDA54E1FAEF332FE9945DD1AD9CBB7D4 /* LSStringMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStringMatcher.m; path = Nocilla/Matchers/LSStringMatcher.m; sourceTree = ""; }; + CDBE3E461EFEDB2C6D8A353DFBEC88F7 /* FBSDKDialogConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDialogConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m; sourceTree = ""; }; + CDC21CAEAFD586731B598F62753B141A /* LGPeripheral.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGPeripheral.h; path = LGBluetooth/LGPeripheral.h; sourceTree = ""; }; + CE01BF63EC59C374C87F187DC491E58E /* KWSharedExampleRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSharedExampleRegistry.h; path = "Classes/Shared Examples/KWSharedExampleRegistry.h"; sourceTree = ""; }; + CE12BEF0DFF2604482654B65CA46C720 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CE2D2CB20706824F0D67B9118408F871 /* NSError+SimpleConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+SimpleConstructor.m"; path = "KSCrash/Source/KSCrash/Recording/Tools/NSError+SimpleConstructor.m"; sourceTree = ""; }; CFCF39770FBB45F04806E69844A071CD /* Pods-SenseApp-RoomConditionsExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-SenseApp-RoomConditionsExtension.modulemap"; sourceTree = ""; }; - CFCF625F7E96BBE30F089D79C65F1F09 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - CFF7D7E2DC6B72F9BA8F55FF45F5E35F /* KWReceiveMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWReceiveMatcher.m; path = Classes/Matchers/KWReceiveMatcher.m; sourceTree = ""; }; - D043A9D933BD3924A046BA5834109A83 /* LGPeripheral.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGPeripheral.h; path = LGBluetooth/LGPeripheral.h; sourceTree = ""; }; - D067724BE34717E0632F22D33A6D26DB /* SENFeatures.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENFeatures.m; path = Pod/Classes/Model/SENFeatures.m; sourceTree = ""; }; - D083BC66915B806689F8C88A39D248A8 /* RealmBarDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmBarDataSet.swift; path = ChartsRealm/Classes/Data/RealmBarDataSet.swift; sourceTree = ""; }; - D0BC3F75A68A4AA83C7DE5053A9B5E54 /* KWMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatchers.h; path = Classes/Core/KWMatchers.h; sourceTree = ""; }; - D0D192C8D3AE142298F46B44605769FD /* ChartAxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAxisBase.swift; path = Charts/Classes/Components/ChartAxisBase.swift; sourceTree = ""; }; - D0E994B030917EFFDD4EBA37B7647DBF /* KSCrashAdvanced.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashAdvanced.h; path = KSCrash/Source/KSCrash/Recording/KSCrashAdvanced.h; sourceTree = ""; }; - D0F5EAE3FEFD7D16931D94440C5C2640 /* KWProbePoller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWProbePoller.h; path = Classes/Core/KWProbePoller.h; sourceTree = ""; }; - D1044210613C63C718F999F23BADA7B5 /* SENAPIClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIClient.h; path = Pod/Classes/API/SENAPIClient.h; sourceTree = ""; }; - D148EBF9273C5525BADE14B1F0DD55FA /* ioapi.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ioapi.c; path = Zip/minizip/ioapi.c; sourceTree = ""; }; - D152AEB7136DEE033A8B5ED7405720FA /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Charts/Classes/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; - D15538B5BBB8256397187AD0F14ABDFE /* UICountingLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = UICountingLabel.m; sourceTree = ""; }; - D158C97FFD48A08C7426663F2FE20A96 /* FBSDKAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppLinkResolver.h; sourceTree = ""; }; - D19218D03D052E41A01F27F4779AB208 /* LegacyDFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUServiceController.swift; sourceTree = ""; }; - D1AE4C206A7735991E5E1A338F5034F5 /* ASIHTTPRequestStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ASIHTTPRequestStub.m; path = Nocilla/Hooks/ASIHTTPRequest/ASIHTTPRequestStub.m; sourceTree = ""; }; + D00DA087369EE5930D3CA1247F296A3B /* FBSDKCoreKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-prefix.pch"; sourceTree = ""; }; + D01AB1931CABCC4F7B0189B06D449E02 /* FBSDKGraphRequestBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestBody.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m; sourceTree = ""; }; + D0603FF17E999B9FDF36A64E0D1B40D5 /* SENPreference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPreference.m; path = Pod/Classes/Model/SENPreference.m; sourceTree = ""; }; + D08965420294621F032CCF8B27C92828 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + D0B77A2A1D0F442C8ED67F7759752722 /* ChartDefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDefaultFillFormatter.swift; path = Charts/Classes/Formatters/ChartDefaultFillFormatter.swift; sourceTree = ""; }; + D0D4B1FE6FA0964DEF163C398448BDC8 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; + D17C2A4C054230FE487F1779D00EA527 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Charts/Classes/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; + D1C751528243A5815954B21F8CCAA091 /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; + D1CC18044708C01E3D29792316C4167A /* KSMachApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSMachApple.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSMachApple.h; sourceTree = ""; }; D1EE5838B878144AA570318EA3AE8E1E /* Pods-SenseApp-Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SenseApp-Tests-acknowledgements.plist"; sourceTree = ""; }; - D1FA879988DFBD1E79A73C4857F67A88 /* KSCrashSentry_NSException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_NSException.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_NSException.h; sourceTree = ""; }; - D201354927E36484B3CC6785ACC69028 /* SENAPIFeature.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIFeature.m; path = Pod/Classes/API/SENAPIFeature.m; sourceTree = ""; }; - D229AF94243497EF72260BD2AAFFC6E7 /* ChartTransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartTransformerHorizontalBarChart.swift; path = Charts/Classes/Utils/ChartTransformerHorizontalBarChart.swift; sourceTree = ""; }; - D23A4407EE4CC5C3E277E363AC312970 /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = de.lproj; path = SVWebViewController/de.lproj; sourceTree = ""; }; - D291DDF35A6059DE824CCF32AA88642F /* SVWebViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SVWebViewController.xcconfig; sourceTree = ""; }; - D29AE152234D7E9ED6BB9E268E360342 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D3198520D520DF1AEACD4CF55E0809E6 /* CocoaLumberjack-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaLumberjack-dummy.m"; sourceTree = ""; }; - D33165EED7E093B5F3CD4906A251CE48 /* SENLocalPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENLocalPreferences.m; path = Pod/Classes/Model/SENLocalPreferences.m; sourceTree = ""; }; - D3583A84911414F83CA6504BDF881529 /* RLMObjectSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema_Private.h; path = include/RLMObjectSchema_Private.h; sourceTree = ""; }; - D3CFEE1A970839519D114DDB2BB634AD /* FBSDKBridgeAPIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m; sourceTree = ""; }; - D3E5B49E71FBC5D3D57A69A2847FC244 /* KWEqualMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWEqualMatcher.m; path = Classes/Matchers/KWEqualMatcher.m; sourceTree = ""; }; - D3FDB6AA039FFBE479D3B6BE00ECDDB2 /* KWConformToProtocolMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWConformToProtocolMatcher.h; path = Classes/Matchers/KWConformToProtocolMatcher.h; sourceTree = ""; }; + D1FE0CF9CFD6E80405FBADC50A33AE70 /* ChartAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimator.swift; path = Charts/Classes/Animation/ChartAnimator.swift; sourceTree = ""; }; + D2364A6A8A0AC2BFE8962CBB64A52388 /* KWContainMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContainMatcher.h; path = Classes/Matchers/KWContainMatcher.h; sourceTree = ""; }; + D26F300A92DDD1C81AFB3C1B07150CA6 /* FBSDKGraphRequestPiggybackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestPiggybackManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h; sourceTree = ""; }; + D2FE99E33ED11002641EBBD0E4AD5BAA /* KSCrashC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashC.h; path = KSCrash/Source/KSCrash/Recording/KSCrashC.h; sourceTree = ""; }; + D31F27AEC63E575BB5015E22C0FA371C /* FBSDKLoginKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FBSDKLoginKit.modulemap; sourceTree = ""; }; + D3759F826E836CD87D3A4364B90F602D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D37677D65E67015A8A4DC83951896D73 /* NSURLRequest+DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+DSL.m"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.m"; sourceTree = ""; }; + D3F73622B73978F427E08F7C8BC4CD07 /* NSObject+KiwiStubAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiStubAdditions.m"; path = "Classes/Stubbing/NSObject+KiwiStubAdditions.m"; sourceTree = ""; }; D411902F616C40B5B48C65DC7A851302 /* Pods-SenseApp-Tests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Tests.dev.xcconfig"; sourceTree = ""; }; - D4393B733BC72D50B72652C5963D4876 /* Bugsnag-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bugsnag-umbrella.h"; sourceTree = ""; }; - D44FBC623F518AAB5B5DD1096AD5EFD0 /* SENTrendsGraph.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTrendsGraph.h; path = Pod/Classes/Model/SENTrendsGraph.h; sourceTree = ""; }; - D4CCB5380C318DA6FD34315DBB1D4517 /* RingBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RingBuffer.h; path = src/runtime/Classes/RingBuffer.h; sourceTree = ""; }; - D5364E0BE46106CF182B9C1EDF7F88D0 /* KSBacktrace.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSBacktrace.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSBacktrace.c; sourceTree = ""; }; - D54A7DCC95C3F8A140402B38295D1F65 /* FXKeychain-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FXKeychain-dummy.m"; sourceTree = ""; }; - D560944F2A2A901B1DF5FC8346D61D5B /* RLMArray_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray_Private.h; path = include/RLMArray_Private.h; sourceTree = ""; }; - D583BA6DB4261965F402C56C91B242AB /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - D5DB9E58AEA5FCDCFAA3BF3E583A2C33 /* LegacyDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift; sourceTree = ""; }; - D61C6C86AABCCC84AF06921650258251 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; - D63A68E9BF35E6497E88105C11A4B68D /* UIImageEffects-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImageEffects-prefix.pch"; sourceTree = ""; }; - D65BA82B9215214508E5B15A2A1EC79F /* DDLog+LOGV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDLog+LOGV.h"; path = "Classes/DDLog+LOGV.h"; sourceTree = ""; }; - D674097F2A8397C64C5F24C8B7B541E0 /* KWExpectationType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExpectationType.h; path = Classes/Core/KWExpectationType.h; sourceTree = ""; }; - D69EA37424320E5C549936C680278EA8 /* FBSDKAccessTokenCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCache.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m; sourceTree = ""; }; - D6C4F429C0126DECEA4DA4314B621E0A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D6D23FA25E3DB4E46D8C2BA30B0C3EFC /* UICountingLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICountingLabel-umbrella.h"; sourceTree = ""; }; - D6EB92A3A24C1AEDC5AD9761DE3CD772 /* FBSDKLoginConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginConstants.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h; sourceTree = ""; }; - D70C23C533DC22F89703DC29BB47B58E /* Nocilla-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nocilla-dummy.m"; sourceTree = ""; }; - D7A2F79250AEAC604564C721BB8B16B8 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - D7BEBD4F61691991021861B81046A727 /* SVWebViewControllerActivityChrome@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerActivityChrome@2x.png"; path = "SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome@2x.png"; sourceTree = ""; }; - D7DB036E652081BB062C18E5EBAE5F81 /* RealmBarData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmBarData.swift; path = ChartsRealm/Classes/Data/RealmBarData.swift; sourceTree = ""; }; - D81F931D893AB2A61601A60D9A6CA848 /* KSMach_x86_32.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_x86_32.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_x86_32.c; sourceTree = ""; }; - D8B5E5F4E32E581C1ABAAD89745181CC /* KWBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlock.h; path = Classes/Core/KWBlock.h; sourceTree = ""; }; - D8CE609D130706D34C02C120D2DE1506 /* ChartFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartFillFormatter.swift; path = Charts/Classes/Formatters/ChartFillFormatter.swift; sourceTree = ""; }; - D924FB5F733AB5EC0E82DF64F8F13044 /* KSCrashDoctor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashDoctor.h; path = KSCrash/Source/KSCrash/Recording/KSCrashDoctor.h; sourceTree = ""; }; - D92D06468DC49EDC5BA31EA1EE0AAA90 /* SENAlarmCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAlarmCollection.h; path = Pod/Classes/Model/SENAlarmCollection.h; sourceTree = ""; }; - D949ADD152BD58709168BC535C232214 /* NSNumber+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+KiwiAdditions.m"; path = "Classes/Core/NSNumber+KiwiAdditions.m"; sourceTree = ""; }; - D9564F5E22B256425B03C43A3844736B /* FBSDKMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h; sourceTree = ""; }; - DA2EE90055A8B82253B93119890AE3D3 /* KWInequalityMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWInequalityMatcher.m; path = Classes/Matchers/KWInequalityMatcher.m; sourceTree = ""; }; - DA3CBB3E1E4F176C925D5CDD890D9CFA /* FBSDKOrganicDeeplinkHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKOrganicDeeplinkHelper.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKOrganicDeeplinkHelper.m; sourceTree = ""; }; - DA46D3F27032D6EB1DB22E0B94CA9C13 /* KWValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWValue.m; path = Classes/Core/KWValue.m; sourceTree = ""; }; - DA52669FD65213799D11C65DCA2558C0 /* NSJSONSerialization-NSNullRemoval.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "NSJSONSerialization-NSNullRemoval.xcconfig"; sourceTree = ""; }; - DA63EB735C260E3F5B92A994DB037D12 /* NSObject+KiwiSpyAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiSpyAdditions.h"; path = "Classes/Core/NSObject+KiwiSpyAdditions.h"; sourceTree = ""; }; - DA9260C33C370E027566D4CE95B8F4C2 /* Realm.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Realm.modulemap; sourceTree = ""; }; - DA93A159498D6FCD5D960A5DA1EB14D3 /* FBSDKGraphRequestMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestMetadata.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h; sourceTree = ""; }; - DAD107FCBC43B0B4A8DA0C43B2444C95 /* KiwiConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiConfiguration.h; path = Classes/Core/KiwiConfiguration.h; sourceTree = ""; }; - DAD661C4430C2FCCA9C275729E82AB7E /* BugsnagSink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSink.h; path = Source/Bugsnag/BugsnagSink.h; sourceTree = ""; }; - DBC387335D57694B3F82B50A98EBD983 /* ChartMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartMarker.swift; path = Charts/Classes/Components/ChartMarker.swift; sourceTree = ""; }; - DC0048376B27012F8AC78D94BF4FB425 /* KWVerifying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWVerifying.h; path = Classes/Verifiers/KWVerifying.h; sourceTree = ""; }; - DC8189F7408FB3A26C4F00D42E86521F /* SENAPIAppStats.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAppStats.m; path = Pod/Classes/API/SENAPIAppStats.m; sourceTree = ""; }; - DCAE0DF73FD39C1E33EE1CFCBE756C24 /* RealmCollectionType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCollectionType.swift; path = RealmSwift/RealmCollectionType.swift; sourceTree = ""; }; - DCE45307653E8DC485A6D201A40DE9AB /* KSZombie.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSZombie.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSZombie.m; sourceTree = ""; }; - DCF2F458B5E2C3E3F9D6EAB4F1D621E1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DD18038F8539D3309E1488FA979135B4 /* FBSDKErrorConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h; sourceTree = ""; }; - DD2AAEB6DA7B7520B291D70302E7D140 /* FBSDKLoginManagerLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLogger.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m; sourceTree = ""; }; - DDEF373FD2A99B534F6323C5074812F0 /* RLMListBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMListBase.h; path = include/RLMListBase.h; sourceTree = ""; }; - DE13E02126DB15BB9DE464A31A2D2FA2 /* RealmLineScatterCandleRadarDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmLineScatterCandleRadarDataSet.swift; path = ChartsRealm/Classes/Data/RealmLineScatterCandleRadarDataSet.swift; sourceTree = ""; }; - DE5927FC06FDE015414D7663342B11C0 /* ChartXAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxis.swift; path = Charts/Classes/Components/ChartXAxis.swift; sourceTree = ""; }; - DE67BB50B63E63C084DBDA1CEEE7D672 /* RLMMigration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMMigration.mm; path = Realm/RLMMigration.mm; sourceTree = ""; }; - DE9BCB56B974CBA921D9DE4130DEE9BD /* KSCrash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSCrash.m; path = KSCrash/Source/KSCrash/Recording/KSCrash.m; sourceTree = ""; }; - DEC126DD8F4E08A66070C1085D65C817 /* RLMUpdateChecker.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUpdateChecker.mm; path = Realm/RLMUpdateChecker.mm; sourceTree = ""; }; - DEE6991791F459B32F37235A8C527271 /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Charts/Classes/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; - DEE98A438638D16FADB378EDF7E60177 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = fr.lproj; path = SVWebViewController/fr.lproj; sourceTree = ""; }; - DF5B8D64BAB3EBE249136D06FAC640CC /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; - DF5DA8D4B3161C2465169F0398D514AB /* RLMResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMResults.mm; path = Realm/RLMResults.mm; sourceTree = ""; }; - E002E7CD326BCE8ACE06F6B30535A66A /* Nocilla.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nocilla.xcconfig; sourceTree = ""; }; - E0A103BC050150F23A7CD9C49433C5C1 /* SENTimeline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENTimeline.h; path = Pod/Classes/Model/SENTimeline.h; sourceTree = ""; }; - E0BDD90E29E8597BE2EF2A831740F21A /* LSNocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNocilla.m; path = Nocilla/LSNocilla.m; sourceTree = ""; }; - E0D901C9189BED0600BF1FE504386BC2 /* RLMObjectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase.h; path = include/RLMObjectBase.h; sourceTree = ""; }; - E0F673B029B2755BFCC231456FEF11E9 /* FBSDKLoginUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginUtility.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h; sourceTree = ""; }; - E15915B88DF249C3B3FB5DB8F0F4FAA9 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - E18404D92E3E8D3AD39C11C5C7BF32BC /* RealmSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = RealmSwift.modulemap; sourceTree = ""; }; - E1AA21C16F518FCC31B91D0C8121A32B /* KWContextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContextNode.h; path = Classes/Nodes/KWContextNode.h; sourceTree = ""; }; - E1F28597EF7599C6B424C8BBB7E2AE31 /* FBSDKErrorRecoveryConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h; sourceTree = ""; }; - E2031D03983653A2B934573E0F177E75 /* SENPairedDevices.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPairedDevices.h; path = Pod/Classes/Model/SENPairedDevices.h; sourceTree = ""; }; - E24F275242E58CA92B37368F47AC7017 /* LSHTTPRequestDSLRepresentation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPRequestDSLRepresentation.m; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.m; sourceTree = ""; }; - E279FCF41429C8312BCDFC5D94ACCD7F /* SENAPISpeech.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPISpeech.m; path = Pod/Classes/API/SENAPISpeech.m; sourceTree = ""; }; - E3A0950F875DB456E503EBBA0886B1F2 /* SEGIntegrationFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGIntegrationFactory.h; path = Pod/Classes/Integrations/SEGIntegrationFactory.h; sourceTree = ""; }; - E3B3C1DDC863179F93AEA5C8616CF7C4 /* SENSense.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSense.h; path = Pod/Classes/BLE/SENSense.h; sourceTree = ""; }; - E3D9CE4361AC371112DCB74EC913794E /* BugsnagConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagConfiguration.m; path = Source/Bugsnag/BugsnagConfiguration.m; sourceTree = ""; }; - E3ECC77519D5DA8970A9C32D46694452 /* KWGenericMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatcher.h; path = Classes/Matchers/KWGenericMatcher.h; sourceTree = ""; }; - E3F29DD49E47FC8F794453A1D1988D3D /* DDLegacyMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLegacyMacros.h; path = Classes/DDLegacyMacros.h; sourceTree = ""; }; - E41CB6C4639F6C33D667107B56B3993F /* KSCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReport.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReport.h; sourceTree = ""; }; - E45B8264885AB593A118BFCDD40F308C /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RealmSwift/Error.swift; sourceTree = ""; }; - E4689514D0A2494BC57ECA59F432A75B /* ExtendableMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExtendableMessage.m; path = src/runtime/Classes/ExtendableMessage.m; sourceTree = ""; }; - E49F52513E02D80F4462FA863A4C2FF3 /* SENAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAnalytics.m; path = Pod/Classes/Analytics/SENAnalytics.m; sourceTree = ""; }; - E4B361998344DBBBC59B2480A7BEC642 /* Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nocilla.h; path = Nocilla/Nocilla.h; sourceTree = ""; }; - E4F0FDA1AA40AEA0FA8464B667AFFBBD /* SENSenseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseManager.h; path = Pod/Classes/BLE/SENSenseManager.h; sourceTree = ""; }; - E4F44AAF964656661411470D1324D043 /* CocoaLumberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E51929AB20E40F6E319DDF46C95AA7B0 /* Zip.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Zip.modulemap; sourceTree = ""; }; - E523603AB7DC4A455D331D2514FFE1DB /* RLMArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMArray.mm; path = Realm/RLMArray.mm; sourceTree = ""; }; - E52A6E9BF4A75001CC02B0491680200C /* SENAuthorizationService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAuthorizationService.h; path = Pod/Classes/API/SENAuthorizationService.h; sourceTree = ""; }; - E5C58A7F6D21D353C7FD57B075F75561 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - E5F86BBD69DF5E4F46EECFB3DCA1DBC3 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Charts/Classes/Renderers/BarChartRenderer.swift; sourceTree = ""; }; - E61014AC0F89AB3912B578F179235264 /* NSJSONSerialization_NSNullRemoval.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NSJSONSerialization_NSNullRemoval.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E684D1B252C10EFB914CE0E6542D5BEC /* KWBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlock.m; path = Classes/Core/KWBlock.m; sourceTree = ""; }; - E6FC56EEE5B1C1F9A0AFD28641200159 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E7404CD34249A0353A4078A868E7C182 /* RLMRealmConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration.h; path = include/RLMRealmConfiguration.h; sourceTree = ""; }; - E74716B643BEA5FA2D8EC5CCB78B62C4 /* KWCaptureSpy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWCaptureSpy.m; path = Classes/Core/KWCaptureSpy.m; sourceTree = ""; }; - E771B10D73A6F5AE6CEA426921272D8B /* fileenc.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fileenc.c; path = Zip/minizip/aes/fileenc.c; sourceTree = ""; }; - E79830219A71B40D6AC209583D4FD966 /* FBSDKGraphRequest+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequest+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h"; sourceTree = ""; }; - E7A4781CCC9CADF2AFAC7B754107A54E /* SEGGroupPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGGroupPayload.m; path = Pod/Classes/Integrations/SEGGroupPayload.m; sourceTree = ""; }; - E8110A97D1EDBFFEEB005A252C4AE48B /* KWSharedExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSharedExample.m; path = "Classes/Shared Examples/KWSharedExample.m"; sourceTree = ""; }; - E82FF4A575E4222229AEC661F431B869 /* SENAppStats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAppStats.h; path = Pod/Classes/Model/SENAppStats.h; sourceTree = ""; }; - E84C9E7F0C2A3D2B4FEFDADB324E751F /* KWRespondToSelectorMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRespondToSelectorMatcher.h; path = Classes/Matchers/KWRespondToSelectorMatcher.h; sourceTree = ""; }; - E86A93AF6C2718BB4A8BF5D3C3078303 /* KSJSONCodecObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSJSONCodecObjC.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSJSONCodecObjC.h; sourceTree = ""; }; - E8AF6DC856D2DAC2A1D6740CCDE1C715 /* MutableField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MutableField.m; path = src/runtime/Classes/MutableField.m; sourceTree = ""; }; - E8C24778164233CB3E4B5642BA6F3CF7 /* SVWebViewControllerBack@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "SVWebViewControllerBack@2x.png"; path = "SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack@2x.png"; sourceTree = ""; }; - E91D6F73DA55A103ADF9D6A33C0C5753 /* SENQuestion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENQuestion.h; path = Pod/Classes/Model/SENQuestion.h; sourceTree = ""; }; - E93ECBAA87570F7E5126A9DD8D7BBFED /* FBSDKGraphRequestConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m; sourceTree = ""; }; - E96623A7AF38B47D17A8413AD8C25758 /* SVWebViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SVWebViewController.modulemap; sourceTree = ""; }; - E97BAD2FF7962B74F5CB00D0D5E26F6E /* FBSDKOrganicDeeplinkHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKOrganicDeeplinkHelper.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKOrganicDeeplinkHelper.h; sourceTree = ""; }; - E9DF6924BF3EBCFF69AA04D8B408644E /* SENPreference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPreference.h; path = Pod/Classes/Model/SENPreference.h; sourceTree = ""; }; - E9E4CE6073A0C1A57A58937E3B454904 /* IntelHex2BinConverter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IntelHex2BinConverter.h; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.h; sourceTree = ""; }; + D44664F7A55DBDB36EFE6675BEDCE9F2 /* GeneratedMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GeneratedMessage.h; path = src/runtime/Classes/GeneratedMessage.h; sourceTree = ""; }; + D4A2E9373AFF9645443332143D65B7EB /* QuickZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickZip.swift; path = Zip/QuickZip.swift; sourceTree = ""; }; + D5212ED3AC00461C878C00E60CFE3E49 /* SEGTrackPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGTrackPayload.m; path = Pod/Classes/Integrations/SEGTrackPayload.m; sourceTree = ""; }; + D52596F53F9D3F6464EDCECA65FF9F63 /* LSStubResponseDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubResponseDSL.m; path = Nocilla/DSL/LSStubResponseDSL.m; sourceTree = ""; }; + D55836AC01421E874A4C8DBAE4FF05D1 /* FBSDKAccessTokenCacheV4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV4.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h; sourceTree = ""; }; + D57B3716E7601A56E914D1878DEC86B3 /* FXKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FXKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D6630ABC61E3F2835A7A7477826C92D2 /* RingBuffer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RingBuffer.m; path = src/runtime/Classes/RingBuffer.m; sourceTree = ""; }; + D6633F7F968321D15B7C11632A70FEBE /* KWGenericMatchingAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatchingAdditions.h; path = Classes/Matchers/KWGenericMatchingAdditions.h; sourceTree = ""; }; + D6A15A7A4358888C621562F09F441B2B /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + D6C7AEAB11F6E16C0DC593AE33A5EF04 /* ProtocolBuffers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ProtocolBuffers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D6F07098D3082A6483DBE80BB8AFFE3F /* NSRegularExpression+Matcheable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRegularExpression+Matcheable.m"; path = "Nocilla/Matchers/NSRegularExpression+Matcheable.m"; sourceTree = ""; }; + D772589458602A99BA6C118DB28859CD /* LGBluetooth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGBluetooth.h; path = LGBluetooth/LGBluetooth.h; sourceTree = ""; }; + D7CC7988BE465AF55E6D5149E15695F4 /* LGBluetooth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LGBluetooth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D7E61C08F82642A1835AC06D146B9368 /* NSMethodSignature+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMethodSignature+KiwiAdditions.m"; path = "Classes/Core/NSMethodSignature+KiwiAdditions.m"; sourceTree = ""; }; + D7ECAB8E59FDCA6B7D2F0FCBEA7C3774 /* FBSDKCloseIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCloseIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h; sourceTree = ""; }; + D7FD91CE8B11764E7C4EA2482AAB92E3 /* FBSDKApplicationDelegate+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKApplicationDelegate+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h"; sourceTree = ""; }; + D806E96987B3D8849AE2FBC4FDB41232 /* SORelativeDateTransformer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SORelativeDateTransformer.xcconfig; sourceTree = ""; }; + D81782B990C3C48EB11F9EB180609E6F /* FBSDKAppEventsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsState.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsState.m; sourceTree = ""; }; + D82D1C78F053951B1893D8F3264AFA20 /* LSHTTPRequestDiff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDiff.h; path = Nocilla/Diff/LSHTTPRequestDiff.h; sourceTree = ""; }; + D84C7A94F93BFC192E60276A1E767390 /* markdown_peg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = markdown_peg.h; sourceTree = ""; }; + D85CB9893D4BCEC48DF94E1C82888251 /* KSMach_Arm.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_Arm.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_Arm.c; sourceTree = ""; }; + D860F86B8670D19C187EE788C201BAA7 /* SenseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SenseKit.modulemap; sourceTree = ""; }; + D885C5F59B246F982976891079D69425 /* LoggerDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerDelegate.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerDelegate.swift; sourceTree = ""; }; + D8C5D5E6414EC2370A123B21C80572F8 /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unzip.h; path = Zip/minizip/unzip.h; sourceTree = ""; }; + D8C8AD9539CA43A538BA9689BB8B12E2 /* iOSDFULibrary-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-umbrella.h"; sourceTree = ""; }; + D8DF0CBDBC965EF753E5905E5C3C3B6B /* ChartLegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLegendRenderer.swift; path = Charts/Classes/Renderers/ChartLegendRenderer.swift; sourceTree = ""; }; + D8FDADEEE0FB09423FB8D3030D5E19F1 /* aes_via_ace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = aes_via_ace.h; path = Zip/minizip/aes/aes_via_ace.h; sourceTree = ""; }; + D94906412DF4CB50BC1B6DAE52943917 /* GeneratedMessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GeneratedMessageBuilder.h; path = src/runtime/Classes/GeneratedMessageBuilder.h; sourceTree = ""; }; + D962C8823B63CCB85B3467679FC87B11 /* CBUUID+StringExtraction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CBUUID+StringExtraction.h"; path = "LGBluetooth/CBUUID+StringExtraction.h"; sourceTree = ""; }; + D96CCEE00D7E5F67BD281330D8B9461F /* Nocilla.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Nocilla.modulemap; sourceTree = ""; }; + D97836B567BC2BD432A20F8C934953AA /* SENAlarm.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAlarm.m; path = Pod/Classes/Model/SENAlarm.m; sourceTree = ""; }; + D97890DE73939F3A0818E813F574AA5C /* KWBlockNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlockNode.h; path = Classes/Nodes/KWBlockNode.h; sourceTree = ""; }; + D98E33FA2B733DF9E994062270EB8D2A /* ChartLegend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLegend.swift; path = Charts/Classes/Components/ChartLegend.swift; sourceTree = ""; }; + D9E5CC6A588EA57C940CD266BAD4A46F /* FBSDKLoginKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.xcconfig; sourceTree = ""; }; + DA77CEEFBAD60276552391C64D0FAA2B /* FBSDKMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h; sourceTree = ""; }; + DA79267AFF93C4AE75A9B2CE770974D0 /* LegacyDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheralDelegate.swift; sourceTree = ""; }; + DAF34F938B815B8CBD786D373E17930E /* KSCrashReportFields.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashReportFields.h; path = KSCrash/Source/KSCrash/Recording/KSCrashReportFields.h; sourceTree = ""; }; + DB2B12626BF79C2EBE3E1A6C40087F88 /* SENPairedDevices.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPairedDevices.m; path = Pod/Classes/Model/SENPairedDevices.m; sourceTree = ""; }; + DB42B1F55178243311CE1D90375D95FE /* SHSProtoBuf-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SHSProtoBuf-prefix.pch"; sourceTree = ""; }; + DB56A749A812C3A52744509C5BEF34AC /* FBSDKErrorConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h; sourceTree = ""; }; + DB73E0191CD7F6486779293FCAFBD583 /* RingBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RingBuffer.h; path = src/runtime/Classes/RingBuffer.h; sourceTree = ""; }; + DBDF5272C1DF2723E3F8B10E72553380 /* KWGenericMatchEvaluator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatchEvaluator.m; path = Classes/Matchers/KWGenericMatchEvaluator.m; sourceTree = ""; }; + DC0423E405619B9CF08C235FD57B346F /* SENSensorStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSensorStatus.m; path = Pod/Classes/Model/SENSensorStatus.m; sourceTree = ""; }; + DC1C11B6CEF66E80F7D7CC68FB1B8E74 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Charts/Classes/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; + DC3881483ACCFC5FA8A845092A9B7630 /* SORelativeDateTransformer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SORelativeDateTransformer-dummy.m"; sourceTree = ""; }; + DC3C70467DF7321D90C4E8FC9180F28A /* KWAllTestsSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAllTestsSuite.m; path = Classes/Config/KWAllTestsSuite.m; sourceTree = ""; }; + DCAD43A3355EE1CFA4D2567C18C2DD9E /* SENPeripheralManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENPeripheralManager.h; path = Pod/Classes/BLE/SENPeripheralManager.h; sourceTree = ""; }; + DCBAEEC720683EC9D019B25BC7D8FACF /* CodedInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CodedInputStream.m; path = src/runtime/Classes/CodedInputStream.m; sourceTree = ""; }; + DCF02C0A5D15037F5C56816281942444 /* BFMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent.h; path = Bolts/iOS/BFMeasurementEvent.h; sourceTree = ""; }; + DD24CDAC4EBAD7DCE4E079EE54BD245B /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + DD75B82CF72C1E45AE727EAF94627411 /* SVWebViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SVWebViewController-dummy.m"; sourceTree = ""; }; + DD7F4A4F55D1D9C6C5EE271DBEB194E5 /* FBSDKConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKConstants.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m; sourceTree = ""; }; + DD89876610F3E3D8DFC0779D0FBE68CA /* SVModalWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVModalWebViewController.h; path = SVWebViewController/SVModalWebViewController.h; sourceTree = ""; }; + DDD91490D1C3B8169D15425583B2837A /* CocoaLumberjack-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaLumberjack-prefix.pch"; sourceTree = ""; }; + DDE606BB5D2DB432C08B664C5BE90A8D /* FBSDKBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBase64.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h; sourceTree = ""; }; + DDF133ED00BE576251125FF9452AC336 /* Services.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Services.h; path = Pod/Classes/Service/Services.h; sourceTree = ""; }; + DE079CC21EBBD85B949FD1D976C5853F /* unzip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = Zip/minizip/unzip.c; sourceTree = ""; }; + DE5BE835291F238ABF69F6C40F4F277D /* SVWebViewControllerNext.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = SVWebViewControllerNext.png; path = SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext.png; sourceTree = ""; }; + DE748DD78759EA2058ABAF0671E5625E /* KWBeKindOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeKindOfClassMatcher.h; path = Classes/Matchers/KWBeKindOfClassMatcher.h; sourceTree = ""; }; + DEEFBC8C93F4824B8536E33FFBA3617F /* NSInvocation+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+KiwiAdditions.m"; path = "Classes/Core/NSInvocation+KiwiAdditions.m"; sourceTree = ""; }; + DF0A79BDD2DA855CBE7BD32952C1A42F /* NSValue+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+KiwiAdditions.m"; path = "Classes/Core/NSValue+KiwiAdditions.m"; sourceTree = ""; }; + DF1ED452AC901002591120B957E69A43 /* SEGScreenPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGScreenPayload.h; path = Pod/Classes/Integrations/SEGScreenPayload.h; sourceTree = ""; }; + DF24D097A8A34C52FF2B86097CD6D9EE /* SENSleepPill.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSleepPill.h; path = Pod/Classes/BLE/SENSleepPill.h; sourceTree = ""; }; + DF26FA59FBFD824EBDC5E4F7040E0498 /* FBSDKBridgeAPIProtocolNativeV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolNativeV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h; sourceTree = ""; }; + DF6998AC60B65B3755C0DDCBECBA77C1 /* FBSDKPaymentObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKPaymentObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKPaymentObserver.m; sourceTree = ""; }; + DF7B46ADCA7AA57D4B6C44BEFB603573 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + DFB3AEA54D13300C7E077B406C04F415 /* SHSProtoBuf-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SHSProtoBuf-dummy.m"; sourceTree = ""; }; + E071E98FC25DCC43761092EA310250D2 /* Demangle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Demangle.cpp; path = KSCrash/Source/KSCrash/Recording/Tools/Demangle.cpp; sourceTree = ""; }; + E0A1A78EF03BFC506C016A5AE51BB8D2 /* FBSDKGraphRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h; sourceTree = ""; }; + E0BB15CD6DEDE20E2D0E1D7EE41DE109 /* SVWebViewControllerActivitySafari.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewControllerActivitySafari.m; path = SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.m; sourceTree = ""; }; + E0C6AFB7B9285CE5D210F569B4BBC384 /* SecureDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheral.swift; sourceTree = ""; }; + E0EA030BBB5E935AAB37D11C72FF8529 /* KWBackgroundTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBackgroundTask.m; path = Classes/Core/KWBackgroundTask.m; sourceTree = ""; }; + E14536EB2479F6F6779015BAA6911527 /* aeskey.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = aeskey.c; path = Zip/minizip/aes/aeskey.c; sourceTree = ""; }; + E1633A988CD49932F1E3FFFE51C7233E /* SVWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVWebViewController.h; path = SVWebViewController/SVWebViewController.h; sourceTree = ""; }; + E18339728278CB13A92950BBDACBC727 /* SEGAnalyticsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAnalyticsUtils.h; path = Pod/Classes/Internal/SEGAnalyticsUtils.h; sourceTree = ""; }; + E1BD0D41ABA1831315717543BD6157E9 /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = ja.lproj; path = SVWebViewController/ja.lproj; sourceTree = ""; }; + E1C4924E95F45DB3C36859756C23A879 /* LSHTTPRequestDSLRepresentation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSHTTPRequestDSLRepresentation.m; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.m; sourceTree = ""; }; + E23E3D426ECD40F8FAA5FE96CD6FB143 /* SENAPIAppFeedback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAppFeedback.m; path = Pod/Classes/API/SENAPIAppFeedback.m; sourceTree = ""; }; + E2B1FEFFE90D026A75C9499AE4D46C0A /* markdown_output.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = markdown_output.m; sourceTree = ""; }; + E2EDF5D4191EA72CA623932CDAFE1D87 /* KWAfterEachNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAfterEachNode.m; path = Classes/Nodes/KWAfterEachNode.m; sourceTree = ""; }; + E337168F0B5582458F2C4AD06C09BF93 /* KWStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStub.h; path = Classes/Stubbing/KWStub.h; sourceTree = ""; }; + E342D7395C1CC8D4CDE7E88F440BB1D5 /* BugsnagSink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSink.m; path = Source/Bugsnag/BugsnagSink.m; sourceTree = ""; }; + E3BE55CECA82576948AB0EA53BD4EA17 /* FBSDKTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h; sourceTree = ""; }; + E3DEDA73DD39D7936BC34400E5CC5194 /* SENRemoteImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENRemoteImage.h; path = Pod/Classes/Model/SENRemoteImage.h; sourceTree = ""; }; + E431658F84F6875CC134E3BA9BC5D72B /* FBSDKGraphErrorRecoveryProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphErrorRecoveryProcessor.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h; sourceTree = ""; }; + E43A3CFE7C388A925D4016870B17F760 /* UICountingLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UICountingLabel-dummy.m"; sourceTree = ""; }; + E44A4FA4BBE294469FB3141E7780FF56 /* Pods_SenseApp_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SenseApp_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E4DB0242B3531FAE706087F2F7815B28 /* UICountingLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICountingLabel-prefix.pch"; sourceTree = ""; }; + E4FF4EDF44D4B97DA370E3DE2A3FFBDE /* NSData+Nocilla.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Nocilla.m"; path = "Nocilla/Categories/NSData+Nocilla.m"; sourceTree = ""; }; + E54B37D5330ABC478214DBE01C16A472 /* ChartTransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartTransformerHorizontalBarChart.swift; path = Charts/Classes/Utils/ChartTransformerHorizontalBarChart.swift; sourceTree = ""; }; + E5604F788E80E758BEAA63F705B561AB /* MSDynamicsDrawerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MSDynamicsDrawerViewController.h; path = MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.h; sourceTree = ""; }; + E599B04144A7EACE63030D3FF6C563D5 /* NSObject+KiwiMockAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiMockAdditions.m"; path = "Classes/Mocking/NSObject+KiwiMockAdditions.m"; sourceTree = ""; }; + E5B425EE66C3D03E49AFBDC1F7975534 /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Charts/Classes/Charts/RadarChartView.swift; sourceTree = ""; }; + E64032B9D4EEE883358E99E107C9FDE7 /* Zip-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-prefix.pch"; sourceTree = ""; }; + E6970FC083BC7537D1F5F15DA60266CF /* BFAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkNavigation.h; path = Bolts/iOS/BFAppLinkNavigation.h; sourceTree = ""; }; + E7081614C2096F58D9C5D6AEB46476F2 /* FBSDKLoginButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginButton.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m; sourceTree = ""; }; + E833C684C22CE60AC54337E91C3EBEC3 /* _FBSDKLoginRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKLoginRecoveryAttempter.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h; sourceTree = ""; }; + E8785C07FBAE391E05460B833AD978E3 /* Kiwi.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Kiwi.modulemap; sourceTree = ""; }; + E87AEE243740BA2FF0880132DC204C25 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + E924C2AF486274A46158408B7819E8F5 /* SVWebViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVWebViewController-umbrella.h"; sourceTree = ""; }; + E953CEC6F1A7654FBA5E574AA57AAAC4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E96A8BAECE4BDD5E897A9EA3F69E5985 /* KWBeKindOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeKindOfClassMatcher.m; path = Classes/Matchers/KWBeKindOfClassMatcher.m; sourceTree = ""; }; + E9DA9CD07270D1BED2250F66B1BF9EF6 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + E9F2DE2302FA74A2C2F30618133A9B8C /* SVWebViewControllerActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVWebViewControllerActivity.m; path = SVWebViewController/UIActivities/SVWebViewControllerActivity.m; sourceTree = ""; }; E9FA241B5EC687E6F5037385564F4393 /* Pods-SenseApp-RoomConditionsExtension-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SenseApp-RoomConditionsExtension-acknowledgements.plist"; sourceTree = ""; }; - EA067679DACE23737207DCBC5C7A71FE /* KWHaveValueMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWHaveValueMatcher.h; path = Classes/Matchers/KWHaveValueMatcher.h; sourceTree = ""; }; - EA18C15A0442F6F9A446AC983564235A /* SEGAnalyticsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGAnalyticsUtils.m; path = Pod/Classes/Internal/SEGAnalyticsUtils.m; sourceTree = ""; }; - EA44FFCF7920EB3BA56273FF83C3BFA1 /* Kiwi-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kiwi-dummy.m"; sourceTree = ""; }; - EA7333EE1C0E1E680E7F9C08039E5AC6 /* FBSDKAppEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEvents.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAppEvents.m; sourceTree = ""; }; - EA8585B56852B46E508FD08B6C823A46 /* KWChangeMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWChangeMatcher.m; path = Classes/Matchers/KWChangeMatcher.m; sourceTree = ""; }; - EA930A26C8A8E939BFA1DCF44EFD0F2B /* FBSDKLoginKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-prefix.pch"; sourceTree = ""; }; - EAC6E2EF9DB26DDB32E137A07F898A57 /* FBSDKLoginTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h; sourceTree = ""; }; - EAE86106065D2999DA85019B2D43B9D6 /* CocoaLumberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EB0D1682759C19830F3613C2837A11DD /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EB3D3A578534728C9A07046E519E135B /* FBSDKTimeSpentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTimeSpentData.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKTimeSpentData.h; sourceTree = ""; }; - EB5E7A6AE591A0786B9C0FF140577F91 /* SENAccount.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAccount.h; path = Pod/Classes/Model/SENAccount.h; sourceTree = ""; }; - EB836F511FBFE2EFB1E988FA07FAB08F /* LSMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSMatcher.m; path = Nocilla/Matchers/LSMatcher.m; sourceTree = ""; }; - EBCFAAD9305C48E71BA401CCE97EDF47 /* SENConditionRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENConditionRange.m; path = Pod/Classes/Model/SENConditionRange.m; sourceTree = ""; }; - EC79BCDD09F0DAD1BAAEA142E442F7AA /* CGFloatType-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CGFloatType-dummy.m"; sourceTree = ""; }; - EC8DAC76DF33B9749560A11895897597 /* KWGenericMatchingAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatchingAdditions.m; path = Classes/Matchers/KWGenericMatchingAdditions.m; sourceTree = ""; }; - ECACDA06202D22EF9A33EF409AB8251B /* FBSDKUIUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUIUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h; sourceTree = ""; }; - ECBFBE3EF17D61164083CD99EFF0C452 /* DDDispatchQueueLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDDispatchQueueLogFormatter.h; path = Classes/Extensions/DDDispatchQueueLogFormatter.h; sourceTree = ""; }; - ECDF314CAA0359EDC62CBAD7E94689BC /* AttributedMarkdown.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = AttributedMarkdown.modulemap; sourceTree = ""; }; - ECE48B2BD7591E96FD544CAAB991DA2E /* LGCentralManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGCentralManager.m; path = LGBluetooth/LGCentralManager.m; sourceTree = ""; }; - ECE585BEA20915E28E0E6D603F3B7136 /* KWBeIdenticalToMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeIdenticalToMatcher.m; path = Classes/Matchers/KWBeIdenticalToMatcher.m; sourceTree = ""; }; - ED2AA8A577A6D3025F76AFB3BA46E64A /* LGBluetooth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LGBluetooth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED2BAE3CD8E94C2AD4FE91FB1E631384 /* SENInsight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENInsight.h; path = Pod/Classes/Model/SENInsight.h; sourceTree = ""; }; - ED4855FC3015D95F114B2A3760FBD309 /* PBArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PBArray.h; path = src/runtime/Classes/PBArray.h; sourceTree = ""; }; - ED590FDCFEF9F81F64FA34EA9F76D7FA /* RealmCandleDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCandleDataSet.swift; path = ChartsRealm/Classes/Data/RealmCandleDataSet.swift; sourceTree = ""; }; - ED64CDE026F413DA22B9645F9844BE45 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - EDCFAF3040C2DD96AAED36B2E26A803B /* KWMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMock.h; path = Classes/Mocking/KWMock.h; sourceTree = ""; }; - EE355C572E5774EBA9907E33E397E5A5 /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Charts/Classes/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; - EE37F559A1F6F53FFF92B989EB15576F /* FBSDKMutableCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMutableCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h; sourceTree = ""; }; - EEB3C2CF34C83353123649627A27A1F5 /* KWContainMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContainMatcher.m; path = Classes/Matchers/KWContainMatcher.m; sourceTree = ""; }; - EEEAB753BD3BA27455A48E28F235FFC0 /* KWObjCUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWObjCUtilities.m; path = Classes/Core/KWObjCUtilities.m; sourceTree = ""; }; - EF2F792D0FF3A904FDF12F840C801664 /* LSStubResponseDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSStubResponseDSL.m; path = Nocilla/DSL/LSStubResponseDSL.m; sourceTree = ""; }; - EF44F7A0ADA120E73B4AC095C4C72B82 /* ChartComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartComponentBase.swift; path = Charts/Classes/Components/ChartComponentBase.swift; sourceTree = ""; }; - EF57713B63C51E62616E8F951BA597E6 /* SORelativeDateTransformer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SORelativeDateTransformer.modulemap; sourceTree = ""; }; - EF7E804BF9C7328041BF469AAB3C3F94 /* KWDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWDeviceInfo.m; path = Classes/Core/KWDeviceInfo.m; sourceTree = ""; }; - EF847FE61448E5B0851232613E122D59 /* RLMListBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMListBase.mm; path = Realm/RLMListBase.mm; sourceTree = ""; }; - EF8A2B799D8DFC975345B85DC6A22A73 /* RLMRealm.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealm.mm; path = Realm/RLMRealm.mm; sourceTree = ""; }; - EFA6FA1BF7F1C8C86B1EBD29F953DB25 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - EFFED8432011E9B9FEC50E2B7410D525 /* CGFloatType.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = CGFloatType.modulemap; sourceTree = ""; }; - F0025D66413864F415755CAA75F4C6D0 /* CGFloatType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CGFloatType.h; path = CGFloatType/CGFloatType.h; sourceTree = ""; }; - F0031756EB662D6B580E7710A10BDF59 /* BarChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartHighlighter.swift; path = Charts/Classes/Highlight/BarChartHighlighter.swift; sourceTree = ""; }; - F004F52877876F1A61FCEF93560ABE60 /* KWItNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWItNode.h; path = Classes/Nodes/KWItNode.h; sourceTree = ""; }; - F0059D77D85FEE3DE2EC9E06727B54C0 /* KSMach.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach.c; sourceTree = ""; }; - F028C3E4CC6EA374D684FA41A3398E9E /* UnknownFieldSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UnknownFieldSet.m; path = src/runtime/Classes/UnknownFieldSet.m; sourceTree = ""; }; - F02A2E0797EFCBAC0939817CEE5B0E96 /* KSSignalInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSignalInfo.h; path = KSCrash/Source/KSCrash/Recording/Tools/KSSignalInfo.h; sourceTree = ""; }; - F0368AF3218B3899A55211A5596F35D0 /* list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list_notifier.cpp; path = Realm/ObjectStore/impl/list_notifier.cpp; sourceTree = ""; }; - F061183A891A4FF9A47BD9C0848C2C91 /* Analytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Analytics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F0959E606AE870914EB0EADAEE51D4F0 /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; - F09C67F97F6515AEBC58B87BBB0184E5 /* SENPeripheralManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENPeripheralManager.m; path = Pod/Classes/BLE/SENPeripheralManager.m; sourceTree = ""; }; - F0D851B0FFAE82335C3C6110BE387E86 /* FBSDKTypeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTypeUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h; sourceTree = ""; }; - F11A8E2DCEB70A737F52BA3E64378CD2 /* SENSensorDataRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENSensorDataRequest.m; path = Pod/Classes/Model/SENSensorDataRequest.m; sourceTree = ""; }; - F11C99A83EFD1E314EC3EA1AA492D24A /* FBSDKGraphErrorRecoveryProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphErrorRecoveryProcessor.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h; sourceTree = ""; }; - F1BAEFA5425B4E8E923F257743648A58 /* KWMessagePattern.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMessagePattern.m; path = Classes/Core/KWMessagePattern.m; sourceTree = ""; }; - F1F977DF8BCD02FC5A580EB41D6AB3BE /* KWInvocationCapturer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWInvocationCapturer.m; path = Classes/Core/KWInvocationCapturer.m; sourceTree = ""; }; + E9FC241E195FACF562830BE2E117D199 /* KWBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlock.m; path = Classes/Core/KWBlock.m; sourceTree = ""; }; + EABBF47B182BEA69B9C1DE1CC7B899F9 /* UICountingLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UICountingLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EAD2EBB8019C5DC0C59979ACE18985CE /* FBSDKGraphRequestConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m; sourceTree = ""; }; + EB182FE499AC0D17F21B84311BC929D8 /* KWVerifying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWVerifying.h; path = Classes/Verifiers/KWVerifying.h; sourceTree = ""; }; + EB4369868EEB18342D827C4992C8BB2E /* FBSDKGraphRequest+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequest+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h"; sourceTree = ""; }; + EB440CA4A303A6CE6E43DE42B1A93C30 /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = de.lproj; path = SVWebViewController/de.lproj; sourceTree = ""; }; + EB92B64857BD753CAB37875FAFF7F84E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EB98B0F7BF1EB13A4BBDD85DB83CC580 /* FBSDKLoginKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginKit.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h; sourceTree = ""; }; + EBA56A0A44D0448EA6127C0F52C76E78 /* SORelativeDateTransformer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SORelativeDateTransformer.modulemap; sourceTree = ""; }; + EBB84AB5C3DDFEE362988B5074854349 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + EBC5DF030E021A28E9331B3402CC79D8 /* LGBluetooth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LGBluetooth-dummy.m"; sourceTree = ""; }; + EBF4D278AFB07E17D92CDFCCE0D0F6A1 /* NSURLRequest+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+DSL.h"; path = "Nocilla/Hooks/NSURLRequest/NSURLRequest+DSL.h"; sourceTree = ""; }; + EC290D01BC7A83145F8248E0D3824F78 /* zh-Hans.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = "zh-Hans.lproj"; path = "SVWebViewController/zh-Hans.lproj"; sourceTree = ""; }; + ECBB6F3F8E26BE96B8A5CD61E252CC8F /* LSHTTPRequestDSLRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSHTTPRequestDSLRepresentation.h; path = Nocilla/DSL/LSHTTPRequestDSLRepresentation.h; sourceTree = ""; }; + ECC1C2215B7499EA36CB5480EE8A5327 /* BugsnagConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagConfiguration.h; path = Source/Bugsnag/BugsnagConfiguration.h; sourceTree = ""; }; + ECEAD89578B3D497E5A9CCFA31EEBD67 /* FBSDKProfilePictureView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfilePictureView.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h; sourceTree = ""; }; + ECEEBA4778296151676D99C6DEA5B727 /* KSMach_x86_32.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_x86_32.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_x86_32.c; sourceTree = ""; }; + ED0356F59B497D5D73B5F2620AA9A49F /* DFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUServiceController.swift; sourceTree = ""; }; + ED919C7B7CCA5778E68DBB3524999DCC /* KWFutureObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFutureObject.m; path = Classes/Core/KWFutureObject.m; sourceTree = ""; }; + EDD24F7D8CABA3EBE82F6CAA3D648FF5 /* KWBackgroundTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBackgroundTask.h; path = Classes/Core/KWBackgroundTask.h; sourceTree = ""; }; + EDD5615E2A8F11479FCA9144FCE2CC1D /* SENService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENService.h; path = Pod/Classes/Service/SENService.h; sourceTree = ""; }; + EE4AE286F72527BD63F3D86337F997B2 /* FBSDKBridgeAPIProtocolWebV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h; sourceTree = ""; }; + EE8757BAE6C003CF9CB2A7E126FA27E9 /* SENAPINotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPINotification.h; path = Pod/Classes/API/SENAPINotification.h; sourceTree = ""; }; + EED780A52AC270E6570D29E0670F672C /* FXKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FXKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EEDA7757980382F904958872DEA755C7 /* Analytics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Analytics-dummy.m"; sourceTree = ""; }; + EF22420924DD8393D929AA3D1BFD52B9 /* FBSDKMutableCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMutableCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h; sourceTree = ""; }; + EF22B854EB06392B4162B52A420D37D5 /* Pods_SenseApp_RoomConditionsExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SenseApp_RoomConditionsExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EF318401E4C96604EB1759481D1BCACA /* SenseKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SenseKit-umbrella.h"; sourceTree = ""; }; + EF5932F9102DC9F3DD607AB4BBE96E21 /* SENConditionRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENConditionRange.m; path = Pod/Classes/Model/SENConditionRange.m; sourceTree = ""; }; + EF97265121F9DF599FA1067A0C58415E /* KSCrashSentry_NSException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_NSException.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_NSException.h; sourceTree = ""; }; + EFAB6EAEA0A424601044887194D22E03 /* SENAppStats.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAppStats.m; path = Pod/Classes/Model/SENAppStats.m; sourceTree = ""; }; + EFAF329A734DA62AC240F7C25E469096 /* CBUUID+StringExtraction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CBUUID+StringExtraction.m"; path = "LGBluetooth/CBUUID+StringExtraction.m"; sourceTree = ""; }; + EFB610EA4900AE141A19865EE6EB0D4A /* KWRespondToSelectorMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRespondToSelectorMatcher.m; path = Classes/Matchers/KWRespondToSelectorMatcher.m; sourceTree = ""; }; + EFD764EF4EBB82F7A77C4D6562B06B6D /* KWLetNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWLetNode.h; path = Classes/Nodes/KWLetNode.h; sourceTree = ""; }; + EFDEEACA3362C59B22F1245394D5CCC9 /* SecureDFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUControlPoint.swift; sourceTree = ""; }; + EFF3D08E918CA2C48176117C20957517 /* TextFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TextFormat.m; path = src/runtime/Classes/TextFormat.m; sourceTree = ""; }; + F03D1FC6902C2FD632405F8ABD2002D8 /* KWBlockNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlockNode.m; path = Classes/Nodes/KWBlockNode.m; sourceTree = ""; }; + F0705D1C927CB46EF728389209E1FDB1 /* FBSDKBoltsMeasurementEventListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBoltsMeasurementEventListener.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKBoltsMeasurementEventListener.h; sourceTree = ""; }; + F0A457C138C5DF94685611358E63C82A /* SENSenseMessage.pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSenseMessage.pb.h; path = Pod/Classes/BLE/SENSenseMessage.pb.h; sourceTree = ""; }; + F0C8AD533F778FC366569278759713D1 /* FBSDKMonotonicTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMonotonicTime.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m; sourceTree = ""; }; + F0C9278BC8FE54E4B8216EDC68485642 /* LSStubRequestDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSStubRequestDSL.h; path = Nocilla/DSL/LSStubRequestDSL.h; sourceTree = ""; }; + F1340D5A4A12AE74230BA41F8F042C3E /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Charts/Classes/Utils/ChartUtils.swift; sourceTree = ""; }; + F1428579D3CA5FB2A99D7DA42FCC262C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F164A28ADDB474214B13184E8CF28513 /* KWAfterAllNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAfterAllNode.m; path = Classes/Nodes/KWAfterAllNode.m; sourceTree = ""; }; + F18B528BCC6B2FF6D971923E55677FE9 /* KSSystemInfoC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSSystemInfoC.h; path = KSCrash/Source/KSCrash/Recording/KSSystemInfoC.h; sourceTree = ""; }; + F1C153D859ED50EC70844A7570BE5F8F /* SVWebViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SVWebViewController.xcconfig; sourceTree = ""; }; F20341E32B9079A87956F1A407C31361 /* Pods-SenseApp-Sense.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SenseApp-Sense.release.xcconfig"; sourceTree = ""; }; - F21E7E32B4472CA43D29215E48C84B67 /* RLMRealm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm.h; path = include/RLMRealm.h; sourceTree = ""; }; - F26D8568AE7FF12B20F938356EFA3DFA /* KWGenericMatchingAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatchingAdditions.h; path = Classes/Matchers/KWGenericMatchingAdditions.h; sourceTree = ""; }; - F29B4CC36C243159F8861938B4B42120 /* brg_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = brg_types.h; path = Zip/minizip/aes/brg_types.h; sourceTree = ""; }; - F2C3265A9929A6C4E6B6925C390D60A0 /* SENSpeechResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSpeechResult.h; path = Pod/Classes/Model/SENSpeechResult.h; sourceTree = ""; }; - F2D63ED47F5E82B16DF5240BD7488385 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - F2DE7F1E80B0689BC500E7D1F96C2D11 /* NSObject+KiwiStubAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiStubAdditions.m"; path = "Classes/Stubbing/NSObject+KiwiStubAdditions.m"; sourceTree = ""; }; - F2FAF13AF0F884EAE93FBBF3343A6F22 /* Bugsnag-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bugsnag-dummy.m"; sourceTree = ""; }; - F33F7E5696C9DDB06294E1AD0413F7B7 /* SENAPIAlarms.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAlarms.m; path = Pod/Classes/API/SENAPIAlarms.m; sourceTree = ""; }; - F388A276B166D828FCF4FE8B945033A5 /* RFC3339DateTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RFC3339DateTool.m; path = KSCrash/Source/KSCrash/Recording/Tools/RFC3339DateTool.m; sourceTree = ""; }; - F39479450812051FB2E3D2D4963B06B8 /* ZoomChartViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomChartViewJob.swift; path = Charts/Classes/Jobs/ZoomChartViewJob.swift; sourceTree = ""; }; - F3CFEC0186652BA7859FB72EF9CBDEC1 /* SENService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENService.m; path = Pod/Classes/Service/SENService.m; sourceTree = ""; }; - F3D4F1F90A5CDF6DA38E655C5343D6D1 /* KWChangeMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWChangeMatcher.h; path = Classes/Matchers/KWChangeMatcher.h; sourceTree = ""; }; - F3F23D55832D16C9B6128C5C802ADD82 /* NSValue+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+KiwiAdditions.m"; path = "Classes/Core/NSValue+KiwiAdditions.m"; sourceTree = ""; }; - F44313744AA0586A143839C11294DBDC /* FBSDKMaleSilhouetteIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMaleSilhouetteIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m; sourceTree = ""; }; - F45592637FCEE6AF25E3F138E6BBB3DA /* transact_log_handler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = transact_log_handler.cpp; path = Realm/ObjectStore/impl/transact_log_handler.cpp; sourceTree = ""; }; - F46BCBC56FA6FE9CB2AF9C25A28DCFA8 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - F4EE858643009844560E18D026FE4043 /* DDLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLog.m; path = Classes/DDLog.m; sourceTree = ""; }; - F50E0C8E71F7365692F8AF34AF38A01F /* FBSDKGraphRequestMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestMetadata.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m; sourceTree = ""; }; - F519AC571C9DA17373D198C1559AF6F6 /* NSString+Matcheable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Matcheable.h"; path = "Nocilla/Matchers/NSString+Matcheable.h"; sourceTree = ""; }; - F52E6362F8A6055BA647C3A0B51235BD /* FBSDKKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStore.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m; sourceTree = ""; }; - F56EBD677E41DE3C6C42E71FDE6CC20C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F5B5C24B02B667EF57B1226157D65B56 /* SENAppUnreadStats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAppUnreadStats.h; path = Pod/Classes/Model/SENAppUnreadStats.h; sourceTree = ""; }; - F5FAA00ADDA0D7D963EA3CB511067BD6 /* SwiftVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftVersion.swift; path = RealmSwift/SwiftVersion.swift; sourceTree = ""; }; - F5FF4F55F79F165A240E8A7B9CDDFA55 /* _FBSDKTemporaryErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKTemporaryErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m; sourceTree = ""; }; - F680178296030B2F6D0F10E5DF948055 /* markdown_lib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = markdown_lib.m; sourceTree = ""; }; - F69413B5E202625752A8F92DFF2452CF /* markdown_lib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = markdown_lib.h; sourceTree = ""; }; - F6A6BE172F34383A1308E4B2A7531C1F /* BFAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink_Internal.h; path = Bolts/iOS/Internal/BFAppLink_Internal.h; sourceTree = ""; }; - F6A905C155D83A39261866D65F92E9ED /* zip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = zip.c; path = Zip/minizip/zip.c; sourceTree = ""; }; - F6BC56669880182667440F68022DD696 /* KWStringPrefixMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringPrefixMatcher.h; path = Classes/Matchers/KWStringPrefixMatcher.h; sourceTree = ""; }; - F6EFD6459AC799BB8CA3B25D72317E23 /* LSNSURLHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLHook.m; path = Nocilla/Hooks/NSURLRequest/LSNSURLHook.m; sourceTree = ""; }; - F704A1B2C6DB0CBA5FE9CA348766433B /* LSASIHTTPRequestAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LSASIHTTPRequestAdapter.h; path = Nocilla/Hooks/ASIHTTPRequest/LSASIHTTPRequestAdapter.h; sourceTree = ""; }; - F751B192247A2C87CFC323A7DF40EFA0 /* SVWebViewControllerNext.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = SVWebViewControllerNext.png; path = SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext.png; sourceTree = ""; }; - F7C069AA43B53609013F4D06A226EE20 /* NSString+Nocilla.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Nocilla.h"; path = "Nocilla/Categories/NSString+Nocilla.h"; sourceTree = ""; }; - F7C5AC344038EDF3A74044F893F804DA /* CodedInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CodedInputStream.m; path = src/runtime/Classes/CodedInputStream.m; sourceTree = ""; }; - F7F821475E818002E6FED6ACDD48C53D /* FBSDKBoltsMeasurementEventListener.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBoltsMeasurementEventListener.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppLink/FBSDKBoltsMeasurementEventListener.m; sourceTree = ""; }; - F828F7B5B719FD9D7E1F72838D114BC6 /* ZipUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipUtilities.swift; path = Zip/ZipUtilities.swift; sourceTree = ""; }; - F82C8552881345426475003A0B817751 /* FBSDKAccessTokenCacheV3_17.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_17.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m; sourceTree = ""; }; - F88F56BA01E5297E31E0FA3C84F77CD0 /* KWMessageTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessageTracker.h; path = Classes/Core/KWMessageTracker.h; sourceTree = ""; }; - F8964B5A49D2BB43EB10BEEB961A9120 /* DFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift; sourceTree = ""; }; - F8970477CBA0D4CE8AC4CD999A16A89F /* KWEqualMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWEqualMatcher.h; path = Classes/Matchers/KWEqualMatcher.h; sourceTree = ""; }; - F8A26AAC8A614F7C63B9BE262CFF1D4E /* FBSDKKeychainStoreViaBundleID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStoreViaBundleID.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h; sourceTree = ""; }; - F8BC67AE9D6261C228E1F915AEC1D2E9 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - F8CD0DD473CCEBD19518D307D62F812F /* UIImage+ImageEffects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImage+ImageEffects.h"; sourceTree = ""; }; - F8F3E98A9214C3419B90756D35523D66 /* BFAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkNavigation.h; path = Bolts/iOS/BFAppLinkNavigation.h; sourceTree = ""; }; - F9298F526B471B2C3D4D5CA396FA03CA /* FBSDKAppEventsDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsDeviceInfo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsDeviceInfo.h; sourceTree = ""; }; - F949642012589A54A31E789783C8600E /* SENSensor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSensor.h; path = Pod/Classes/Model/SENSensor.h; sourceTree = ""; }; - F981202C5A645974FC60252205341F2F /* BugsnagSink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSink.m; path = Source/Bugsnag/BugsnagSink.m; sourceTree = ""; }; - F994C108E1C27A48503143A851C87019 /* ChartXAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisValueFormatter.swift; path = Charts/Classes/Formatters/ChartXAxisValueFormatter.swift; sourceTree = ""; }; + F215E5DAA49538ECFDE7EF349B3C6385 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + F21A89785E568922E31A576572F2711A /* SENSense.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENSense.h; path = Pod/Classes/BLE/SENSense.h; sourceTree = ""; }; + F2943568A5B4D227DB0F297BF0C07140 /* Demangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Demangle.h; path = KSCrash/Source/KSCrash/Recording/Tools/Demangle.h; sourceTree = ""; }; + F294E8FF5D191A431F19CCF42370439D /* Bugsnag.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bugsnag.m; path = Source/Bugsnag/Bugsnag.m; sourceTree = ""; }; + F30978EA0F6BAFCCE54FA78794405E65 /* KSCrashSentry_CPPException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashSentry_CPPException.h; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_CPPException.h; sourceTree = ""; }; + F32C9E65963C73B0EDD7B5B4DB151BCD /* DFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUPacket.swift; sourceTree = ""; }; + F334BD4C61BDF5283AFFDC093893D79C /* DFUServiceDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceDelegate.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFU/DFUServiceDelegate.swift; sourceTree = ""; }; + F35CAEC6D9081BF80E476524743A77E9 /* MSDynamicsDrawerStyler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MSDynamicsDrawerStyler.h; path = MSDynamicsDrawerViewController/MSDynamicsDrawerStyler.h; sourceTree = ""; }; + F385BB9FAC9229B8775E94E32473B8AD /* DFUFirmware.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUFirmware.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFU/DFUFirmware.swift; sourceTree = ""; }; + F3955FA4C3BE54BBC7947DD23CE1F265 /* Charts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.xcconfig; sourceTree = ""; }; + F39F5BC5DF2255411328E8AC651508A4 /* SENTrendsGraph.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENTrendsGraph.m; path = Pod/Classes/Model/SENTrendsGraph.m; sourceTree = ""; }; + F482A474B88D12D3E2125726E66D4BDE /* SENDevicePairingInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENDevicePairingInfo.m; path = Pod/Classes/Model/SENDevicePairingInfo.m; sourceTree = ""; }; + F4CA450E162860FBA46759FE7707BA8A /* FBSDKGraphRequestMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestMetadata.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h; sourceTree = ""; }; + F4D277A36D3B0D91A889D2AB62A9BD87 /* UICountingLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = UICountingLabel.modulemap; sourceTree = ""; }; + F533FAAE7403F666C967A6DA59CF6642 /* FBSDKLoginConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginConstants.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m; sourceTree = ""; }; + F54092C6F6296BDC5603E44198228594 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + F587A2B11FB490E9BE5C95A2B686C890 /* SENAPIAlarms.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENAPIAlarms.h; path = Pod/Classes/API/SENAPIAlarms.h; sourceTree = ""; }; + F5D3CD7ED7A00774201114EDD34FFB92 /* SVWebViewControllerBack.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = SVWebViewControllerBack.png; path = SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack.png; sourceTree = ""; }; + F5F4822E550E8F3A1FD1506D9A3BB96E /* FBSDKCoreKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCoreKit.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h; sourceTree = ""; }; + F5FC5B50EFC0CC03D5AEEE5B9F831997 /* FBSDKLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m; sourceTree = ""; }; + F612842F95EA8CF9471BA8781FD937ED /* FBSDKBridgeAPIProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocol.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h; sourceTree = ""; }; + F61E0C433C5E2334B6D1B9635C749CBF /* DDLogMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLogMacros.h; path = Classes/DDLogMacros.h; sourceTree = ""; }; + F6F069AE28F5FE66373B327046BBC352 /* CocoaLumberjack.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = CocoaLumberjack.modulemap; sourceTree = ""; }; + F7256D5CF6C7C5FE3C50B8A4C15E174B /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Charts/Classes/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; + F741884A12A12EAB0D35C911BAED5B5C /* LGService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LGService.h; path = LGBluetooth/LGService.h; sourceTree = ""; }; + F74FD5B248F8CA8F665A38023A806C84 /* FBSDKSystemAccountStoreAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSystemAccountStoreAdapter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h; sourceTree = ""; }; + F75E8BF30599CC15197BEC96CF44EB60 /* LineRadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartRenderer.swift; path = Charts/Classes/Renderers/LineRadarChartRenderer.swift; sourceTree = ""; }; + F78D6D26855D9C96D17B39864AAE9BF0 /* ForwardDeclarations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ForwardDeclarations.h; path = src/runtime/Classes/ForwardDeclarations.h; sourceTree = ""; }; + F7A0A975B07D45CA5DDBBFBA5AFAB4A5 /* IntelHex2BinConverter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IntelHex2BinConverter.h; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.h; sourceTree = ""; }; + F7D6B53A202CBED10113D9BE90B020A1 /* sha1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sha1.h; path = Zip/minizip/aes/sha1.h; sourceTree = ""; }; + F7F3E5CD0F66227EEF8E758382025765 /* DDASLLogCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogCapture.m; path = Classes/DDASLLogCapture.m; sourceTree = ""; }; + F838261058F587D9687E72CC790FC380 /* CodedOutputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CodedOutputStream.m; path = src/runtime/Classes/CodedOutputStream.m; sourceTree = ""; }; + F83F6D217C69DC0AEADEE9A4FD360280 /* SEGPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGPayload.m; path = Pod/Classes/Integrations/SEGPayload.m; sourceTree = ""; }; + F856F12A54EB6C3CB356E916B1605310 /* KSZombie.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSZombie.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSZombie.m; sourceTree = ""; }; + F856F7FF124E28955B3433171CB8A6D0 /* KSCrashC.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSCrashC.c; path = KSCrash/Source/KSCrash/Recording/KSCrashC.c; sourceTree = ""; }; + F85F57A36107073A3A0B2D3EE09B305B /* KSCrashAdvanced.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashAdvanced.h; path = KSCrash/Source/KSCrash/Recording/KSCrashAdvanced.h; sourceTree = ""; }; + F8910D15EF5E5B37D431B6AC7A72445F /* BugsnagNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagNotifier.m; path = Source/Bugsnag/BugsnagNotifier.m; sourceTree = ""; }; + F8AB6AF093C72657C7120589DC6C9272 /* API.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = API.h; path = Pod/Classes/API/API.h; sourceTree = ""; }; + F8BC693527FD08C9A8FBF3C0079CA9D1 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + F8D04B31A797E7852B9B23234D38012E /* UIImageEffects-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIImageEffects-dummy.m"; sourceTree = ""; }; + F8FE358A549229558DE8BBF8082070B9 /* hmac.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hmac.h; path = Zip/minizip/aes/hmac.h; sourceTree = ""; }; + F91E7B009BD5CFF0E9D1012E5B201B12 /* DDLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLog.m; path = Classes/DDLog.m; sourceTree = ""; }; + F959A2A7FF2888E35438C56D576A316F /* BLE.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BLE.h; path = Pod/Classes/BLE/BLE.h; sourceTree = ""; }; + F99CE3105CC2CEE881EE46E585C255C3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F9A28DD9048855D1727BA0B4D1BAD1C5 /* FBSDKSystemAccountStoreAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSystemAccountStoreAdapter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m; sourceTree = ""; }; F9C0374DAE9CD680070628E67007F5FD /* Pods-SenseApp-Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SenseApp-Tests-resources.sh"; sourceTree = ""; }; - F9D76E3273FCB253CDD14805240B6609 /* SENAPITimeZone.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPITimeZone.m; path = Pod/Classes/API/SENAPITimeZone.m; sourceTree = ""; }; - FA2180DA463BB8AB24453FE6E9CC6DB2 /* Double.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Double.swift; path = iOSDFULibrary/Classes/Utilities/Double.swift; sourceTree = ""; }; - FA3AFE13327AC637D3CEB920C4A59CA5 /* LinkingObjects.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkingObjects.swift; path = RealmSwift/LinkingObjects.swift; sourceTree = ""; }; - FA6FD443027BDABFA606A45A8C4CF004 /* KSSystemInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSSystemInfo.m; path = KSCrash/Source/KSCrash/Recording/KSSystemInfo.m; sourceTree = ""; }; - FA75C4A76644A7446D33932681D6A909 /* KSMach_Arm.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = KSMach_Arm.c; path = KSCrash/Source/KSCrash/Recording/Tools/KSMach_Arm.c; sourceTree = ""; }; - FAC216A79855FDEFB694CBF5E8E9F13F /* FBSDKGraphErrorRecoveryProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphErrorRecoveryProcessor.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m; sourceTree = ""; }; - FAFD03356CBD28B31A36AF1AEC143B26 /* ChartFill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartFill.swift; path = Charts/Classes/Utils/ChartFill.swift; sourceTree = ""; }; - FB220E0C882EB45400F666838D4A29EF /* UnknownFieldSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnknownFieldSet.h; path = src/runtime/Classes/UnknownFieldSet.h; sourceTree = ""; }; - FB3EFB7F02F037ACD533B0BD9D8FE954 /* FBSDKCloseIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCloseIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h; sourceTree = ""; }; - FB68D2A2826E6E9A98D2D20CBF950058 /* KWExistVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExistVerifier.h; path = Classes/Verifiers/KWExistVerifier.h; sourceTree = ""; }; - FB7FC0161943E9CD406F01F85F122617 /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Charts/Classes/Renderers/LineChartRenderer.swift; sourceTree = ""; }; - FB96793A455B281E265440083C4E8674 /* SVWebViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SVWebViewController-dummy.m"; sourceTree = ""; }; - FBCBAA43137D41C57D8C9F3DCCAE0769 /* BFURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL.h; path = Bolts/iOS/BFURL.h; sourceTree = ""; }; - FBCF108794537CB0E449EC5F08331F07 /* prng.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = prng.c; path = Zip/minizip/aes/prng.c; sourceTree = ""; }; - FBEB97F64BED10022C01ED0007804DCA /* KWHaveMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWHaveMatcher.m; path = Classes/Matchers/KWHaveMatcher.m; sourceTree = ""; }; - FCEF8613DA38B659CEEC235E69F35B99 /* SEGIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGIntegration.h; path = Pod/Classes/Integrations/SEGIntegration.h; sourceTree = ""; }; - FD17CE6C71AD546000EE4985BF1BDFE5 /* BFAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererController.m; path = Bolts/iOS/BFAppLinkReturnToRefererController.m; sourceTree = ""; }; - FD66153A6F2336D277807D2D12111D72 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Charts/Classes/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; - FD75E66D5A9A3309345B75964360E6D3 /* ChartXAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRendererRadarChart.swift; path = Charts/Classes/Renderers/ChartXAxisRendererRadarChart.swift; sourceTree = ""; }; - FD7F5F52651E4A91F2CE8A4D56336F90 /* KSCrashSentry_CPPException.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = KSCrashSentry_CPPException.mm; path = KSCrash/Source/KSCrash/Recording/Sentry/KSCrashSentry_CPPException.mm; sourceTree = ""; }; - FDA779DCC3BD7ACE5FD1535132F62D50 /* KWNotificationMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNotificationMatcher.m; path = Classes/Matchers/KWNotificationMatcher.m; sourceTree = ""; }; - FDAFEE7C119494686BA4F1BCA53175F3 /* KWMessageTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMessageTracker.m; path = Classes/Core/KWMessageTracker.m; sourceTree = ""; }; - FDB9BD6B074A263470C3EC2F8DD63C80 /* ZendeskSDK.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = ZendeskSDK.bundle; sourceTree = ""; }; - FDD1B4F7FD00D7E00CAA6FF5763FF437 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD4975DCDA03C50A9DB9B1C4634BDC5 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Charts/Classes/Charts/LineChartView.swift; sourceTree = ""; }; - FE3088788DB6E65AB7680E3A9C575181 /* AbstractMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractMessage.h; path = src/runtime/Classes/AbstractMessage.h; sourceTree = ""; }; - FE3B4B180D3300E7483CE7795201444F /* GeneratedMessageBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GeneratedMessageBuilder.h; path = src/runtime/Classes/GeneratedMessageBuilder.h; sourceTree = ""; }; - FE970C0616393EDEE93841269AA7B258 /* RingBuffer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RingBuffer.m; path = src/runtime/Classes/RingBuffer.m; sourceTree = ""; }; - FF7F333B993AF9FB2C54D157746AC40A /* BugsnagOSXNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagOSXNotifier.h; path = Source/Bugsnag/BugsnagOSXNotifier.h; sourceTree = ""; }; - FF98F4AEE6DCA028B854D85C53226B31 /* BugsnagIosNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagIosNotifier.m; path = Source/Bugsnag/BugsnagIosNotifier.m; sourceTree = ""; }; - FFC4FD33EE89AFC9C8132DFF093AA464 /* DFUStreamBin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamBin.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamBin.swift; sourceTree = ""; }; - FFEFD3158157423272643EAF4FBDC702 /* FBSDKGraphRequestBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestBody.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m; sourceTree = ""; }; + F9C3275A280F0B1BC08EAC94142A5F21 /* MutableExtensionRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MutableExtensionRegistry.h; path = src/runtime/Classes/MutableExtensionRegistry.h; sourceTree = ""; }; + FA274ACC34935782F49ACB8DEDE6332D /* Bugsnag-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bugsnag-umbrella.h"; sourceTree = ""; }; + FA2FB92C26F66DFBC177BEAF5ABD99F2 /* FBSDKGraphErrorRecoveryProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphErrorRecoveryProcessor.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m; sourceTree = ""; }; + FA3BEC3066C3A4DC3322B124B40D5582 /* FBSDKLoginConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginConstants.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h; sourceTree = ""; }; + FA3E21E1E8860168541DF45D3A197C85 /* LSNSURLSessionHook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LSNSURLSessionHook.m; path = Nocilla/Hooks/NSURLSession/LSNSURLSessionHook.m; sourceTree = ""; }; + FA481EAF2A732C71CAE6FAA4D80E0B53 /* FBSDKAppEventsUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsUtility.h; sourceTree = ""; }; + FA4D15CEC00265D6FE38FD57D4F41B87 /* KWReceiveMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWReceiveMatcher.m; path = Classes/Matchers/KWReceiveMatcher.m; sourceTree = ""; }; + FA574DE99BB78672FDBF84C8722B4BAD /* BFAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLink.m; path = Bolts/iOS/BFAppLink.m; sourceTree = ""; }; + FA62982D52BA4CCCDEBD2F0A8CE57207 /* KWLet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWLet.h; path = Classes/Core/KWLet.h; sourceTree = ""; }; + FA6C5218CC4F9EBDD4BCF4B81B525D67 /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = zip.h; path = Zip/minizip/zip.h; sourceTree = ""; }; + FB027B3A4B2544691F64969AE6D79075 /* SENDeviceMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SENDeviceMetadata.h; path = Pod/Classes/Model/SENDeviceMetadata.h; sourceTree = ""; }; + FB434E995C0FD4373BEE2543621D3288 /* ChartXAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartXAxisRendererHorizontalBarChart.swift; path = Charts/Classes/Renderers/ChartXAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + FB4866EA530FEBC25946B0A0C0188963 /* LGPeripheral.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LGPeripheral.m; path = LGBluetooth/LGPeripheral.m; sourceTree = ""; }; + FBCBC67A30923200901AAD539659AF4B /* KWSharedExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSharedExample.h; path = "Classes/Shared Examples/KWSharedExample.h"; sourceTree = ""; }; + FC2041DB3D4C8F0D9A7A8C6CEC0B653B /* BugsnagSink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSink.h; path = Source/Bugsnag/BugsnagSink.h; sourceTree = ""; }; + FC462AEC4720202E7CA70C6224C05CBC /* SEGLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SEGLocation.m; path = Pod/Classes/Internal/SEGLocation.m; sourceTree = ""; }; + FC4794256070F45472C414ADB99B7B39 /* SEGAnalyticsRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SEGAnalyticsRequest.h; path = Pod/Classes/Internal/SEGAnalyticsRequest.h; sourceTree = ""; }; + FC79A5F0EE9C2AC70DFA52A7CB4F4F1C /* KSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSLogger.m; path = KSCrash/Source/KSCrash/Recording/Tools/KSLogger.m; sourceTree = ""; }; + FC974942349E6F74728F93375686691F /* BFAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink.h; path = Bolts/iOS/BFAppLink.h; sourceTree = ""; }; + FCBF2A7369ED5A7B944F5BB1BBCE5237 /* FBSDKGraphRequestBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestBody.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h; sourceTree = ""; }; + FD116CE3F5D968D1005C7EA7FC7E732F /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + FD1896DB99D8C53FED817DE0CEBCD2CA /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Charts/Classes/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; + FD2BFD4021153753ACACBB5028DDCCB3 /* NSInvocation+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+KiwiAdditions.h"; path = "Classes/Core/NSInvocation+KiwiAdditions.h"; sourceTree = ""; }; + FD32A18F58D4945EF6902BBD362E1700 /* FBSDKMonotonicTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMonotonicTime.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h; sourceTree = ""; }; + FD419E164900B56221A6CC3516BFA5CE /* ProtocolBuffers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ProtocolBuffers.h; path = src/runtime/Classes/ProtocolBuffers.h; sourceTree = ""; }; + FD7449A228BC96409D0C8C1066F06B0E /* KWReceiveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWReceiveMatcher.h; path = Classes/Matchers/KWReceiveMatcher.h; sourceTree = ""; }; + FD8CAF8448164EE70267B97D4069249F /* NSObject+KiwiSpyAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiSpyAdditions.h"; path = "Classes/Core/NSObject+KiwiSpyAdditions.h"; sourceTree = ""; }; + FE0D986BD1B6B1A6048C4828E582E07B /* DFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift; sourceTree = ""; }; + FE24F7B253DD51B1FC2D2BFF975FD6C7 /* SENAPIAccount.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAPIAccount.m; path = Pod/Classes/API/SENAPIAccount.m; sourceTree = ""; }; + FF3D082843AF96E08C5337FE2CC7051E /* SENAnalyticsLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SENAnalyticsLogger.m; path = Pod/Classes/Analytics/SENAnalyticsLogger.m; sourceTree = ""; }; + FF6A7DB98CEA2B4B1D0D39751AC6571B /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + FF8110F5690424A120910C2B1D5E2A73 /* FBSDKProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfile.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m; sourceTree = ""; }; + FFD02D2E3A4884AD37F49B8A754806F3 /* KSCrashContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KSCrashContext.h; path = KSCrash/Source/KSCrash/Recording/KSCrashContext.h; sourceTree = ""; }; + FFD13C8B94DAA9A40F90466683E72170 /* ZoomChartViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomChartViewJob.swift; path = Charts/Classes/Jobs/ZoomChartViewJob.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -3384,20 +3024,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2796410B7DA0F6C3FE787B629697D9FC /* Frameworks */ = { + 27749FEA2343D253063C48B8FCF62A75 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 17685D13725BC80D41774C81B64357AB /* Foundation.framework in Frameworks */, - F311953E5A0FE807A05B6199BD61FC5A /* XCTest.framework in Frameworks */, + 0980824CD06E84980AE97B6674F016E8 /* Accelerate.framework in Frameworks */, + E9D18989D2FAE7B47FF74FC49D380CB8 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 28EC6138E094825A77904F8C304D51CD /* Frameworks */ = { + 2796410B7DA0F6C3FE787B629697D9FC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D2DD151D2232CE085D1ECC5CEB6B6179 /* Foundation.framework in Frameworks */, + 17685D13725BC80D41774C81B64357AB /* Foundation.framework in Frameworks */, + F311953E5A0FE807A05B6199BD61FC5A /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3442,23 +3083,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3E4520D5755FE9E4D61A606A2B349947 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4AA9D28BD4C515F978C24DFAA2DE6175 /* Foundation.framework in Frameworks */, - 0A502D4FAE1DA06116FC2DDB0B2EF24D /* Realm.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3F23746A1435EFA5CD7FB21097E4F381 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BD53DFD0800C384CD3ADCF655C7BAF5A /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 41AFC2A7017D0048F88C06CA3C26A783 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3494,28 +3118,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 554B598DC13B459CFBBF65D617F4040B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 65A9CACD8E0377928344467D754B82AA /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6489E5CF13CA761B708A28A608E90EE3 /* Frameworks */ = { + 6DDD6246D2C2ADCB50FABF29CEC15B96 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4754F1DC5E4640E342DBAEFE1278D20A /* Accelerate.framework in Frameworks */, - 3C2C38C3046948F6967FA573562496DE /* Foundation.framework in Frameworks */, + 1B0BD4AC4A3DAB26683F7AB0C24FE7D9 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6DDD6246D2C2ADCB50FABF29CEC15B96 /* Frameworks */ = { + 6EC42F2FDFC83CAE281656CBE62A7238 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B0BD4AC4A3DAB26683F7AB0C24FE7D9 /* Foundation.framework in Frameworks */, + 5677A70BE22547372AB1331911448784 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3583,21 +3198,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C0551F59D7F0BAE9DB8DE0CF5E84025E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F94B178F0B51E4C9CAF7B84F0FF63F3 /* Foundation.framework in Frameworks */, - 13270BD6A58F6E309AE9811B0835224E /* Realm.framework in Frameworks */, - 597D01F8E1994CDA4B7F4BA38433F868 /* RealmSwift.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E251382FF6C3A034951C524DD8CDE980 /* Frameworks */ = { + D3AD04CF6DC6AC4F05FF3D2C3F8A8AAA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4ECD4BEC475C6294F5C1AC466FC5FF9C /* Foundation.framework in Frameworks */, + 8CC214F6E3326BE9F63BD0C41FE12469 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3618,6 +3223,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F1E930D67E9AF130C6936732FEE9F71E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 39CE944F4A255CD05EF5F699B5CA1302 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F3F8A17124BAE4FF3B560C3474098748 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3645,290 +3258,511 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + FEF57B83C5A467F76B6B77702CA0A7BC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 15ABCD87B022D05D82A45493BDF038F3 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 003B290018CA9946679A189DDD3896AF /* Support Files */ = { + 06003EE40F96B3A22DF4EE350C9A8E60 /* non-arc */ = { isa = PBXGroup; children = ( - 80BE88147C827E65BADD584EEAB06ED6 /* AFNetworking.modulemap */, - F8BC67AE9D6261C228E1F915AEC1D2E9 /* AFNetworking.xcconfig */, - 256BAA4F9351B8A26A38D32BDF81261B /* AFNetworking-dummy.m */, - 88A2B8605A5D14362F50C692FF620077 /* AFNetworking-prefix.pch */, - 96F58F6C98C2A01F1BFCF4DCE95678F4 /* AFNetworking-umbrella.h */, - DCF2F458B5E2C3E3F9D6EAB4F1D621E1 /* Info.plist */, + A9A10463CC2F13EE58B586BB7EEF9B9F /* AbstractMessage.h */, + 9B47DD74621B271EBEA7E413EF170FA4 /* AbstractMessage.m */, + 522239ADA850A5938A4D19F5920966FA /* AbstractMessageBuilder.h */, + 9BB6730DB8554D0134E147C9391C46AD /* AbstractMessageBuilder.m */, + BEAD3A33DC89892A7C16AE5586DEF06D /* Bootstrap.h */, + B2458AFA0C2CA5C64D07B816ED4CB626 /* CodedInputStream.h */, + DCBAEEC720683EC9D019B25BC7D8FACF /* CodedInputStream.m */, + 7DB00858903EC8A12C224228B14E0EF7 /* CodedOutputStream.h */, + F838261058F587D9687E72CC790FC380 /* CodedOutputStream.m */, + 07B6454F780277243C8BBC786380065F /* ConcreteExtensionField.h */, + 2E3EB19CF459D83889124F4219854EE9 /* ConcreteExtensionField.m */, + 648FB8BDDBFC2009FB0953B20F61FE96 /* ExtendableMessage.h */, + B5B3F5544592C5B95E150873AE34B576 /* ExtendableMessage.m */, + 966DA485EBC38DF48F177A22E4F3A20D /* ExtendableMessageBuilder.h */, + B948FB8E2DB8EA5595223B5FB75B84D4 /* ExtendableMessageBuilder.m */, + 2271DF5221B362C529B87179CA152846 /* ExtensionField.h */, + 7A339FBD99325A2182A7E666E8308003 /* ExtensionRegistry.h */, + C20B9ECC0A72C786BC17D9A8DFFDE5A2 /* ExtensionRegistry.m */, + 12F1CC44977827F8BBD243F834942E98 /* Field.h */, + BBEB0B4911E4BA048520B6E56D353F9D /* Field.m */, + F78D6D26855D9C96D17B39864AAE9BF0 /* ForwardDeclarations.h */, + D44664F7A55DBDB36EFE6675BEDCE9F2 /* GeneratedMessage.h */, + 56ADAFA6A1FC7B8F320A871724643A2A /* GeneratedMessage.m */, + D94906412DF4CB50BC1B6DAE52943917 /* GeneratedMessageBuilder.h */, + 04B26C6B81B9203812D47870622621E0 /* GeneratedMessageBuilder.m */, + 0A2100938B5C885B13454A9B6EFE1CAC /* Message.h */, + 71B2339DE3DAE62FB7364C06EA772127 /* MessageBuilder.h */, + F9C3275A280F0B1BC08EAC94142A5F21 /* MutableExtensionRegistry.h */, + BEB7D908F341B8EC9E5DB660EBA99588 /* MutableExtensionRegistry.m */, + 09BA45663695742B90FF32BC550F2466 /* MutableField.h */, + 1417666017EB86762AFA2AC6D0CFD84F /* MutableField.m */, + 3932D23C9F30AFDBDDDD8245F0F33542 /* PBArray.h */, + 47B445E85B04E79A462D18921BB20230 /* PBArray.m */, + FD419E164900B56221A6CC3516BFA5CE /* ProtocolBuffers.h */, + DB73E0191CD7F6486779293FCAFBD583 /* RingBuffer.h */, + D6630ABC61E3F2835A7A7477826C92D2 /* RingBuffer.m */, + 1469C1A0D82CB693F7AC2521108CF393 /* TextFormat.h */, + EFF3D08E918CA2C48176117C20957517 /* TextFormat.m */, + 792D0BC877DBDC1C57B796BA04FA5520 /* UnknownFieldSet.h */, + 68FE950065EFC2079C9CEC56B11DC411 /* UnknownFieldSet.m */, + 68DA0FF5F2704BCA2382CC476CA2A74B /* UnknownFieldSetBuilder.h */, + B8FF85448A0D0205322455A104E16FCC /* UnknownFieldSetBuilder.m */, + 18EBCEC9F5A4F375EE41046076DD007A /* Utilities.h */, + 0D58ADA9AD7DE6EA49A1271BBADBBAE8 /* Utilities.m */, + 76A1DAEA2B5769D69C1EB9CAD54DFC3F /* WireFormat.h */, + 819997651869171E38B8F88B6C19D6AF /* WireFormat.m */, ); - name = "Support Files"; - path = "../Target Support Files/AFNetworking"; + name = "non-arc"; sourceTree = ""; }; - 024B8994AB0BF7FD888F63C489E25BE8 /* Charts */ = { + 0BFB0FD3F63B1A3D640341AF0B66DFE3 /* FXKeychain */ = { isa = PBXGroup; children = ( - E67E9DCE9EDFA8D95D5EC4C0C18FF2B2 /* Core */, - EEB982F1D3FB38AAFD13FF74CC6F39FF /* Realm */, - EAFE7159EA782F0B2D6DFEDC32B1472A /* Support Files */, + BD164F4E6BE48EF891649706364C3047 /* FXKeychain.h */, + 98156C9BB85902474629FE99F7CC9722 /* FXKeychain.m */, + 3112F136BA781565D03CEF0CC7DCC7CA /* Support Files */, ); - path = Charts; + path = FXKeychain; sourceTree = ""; }; - 09519BFFEDDF2FBC44ADEA5C2EC31612 /* Frameworks */ = { + 0FE4EA7D022F7D411BCAD8BEB4D66E24 /* Frameworks */ = { isa = PBXGroup; children = ( - BEF242371E8BB627FD5DF25603DC3E30 /* ZendeskSDK.framework */, + 2E3A0C0986FA43D5BFB98DDC4850F37F /* ZendeskSDK.framework */, ); name = Frameworks; sourceTree = ""; }; - 0AB3756A89E5F17F4802C7490F67142F /* Resources */ = { + 120D442C55611C8CEDD553BC147FFDED /* Support Files */ = { isa = PBXGroup; children = ( + 53D555A5DB2B7E0F58BCC1ABC00F778B /* Info.plist */, + 5BACCE8024411ACAA3C99E28FCECE38F /* SVWebViewController.modulemap */, + F1C153D859ED50EC70844A7570BE5F8F /* SVWebViewController.xcconfig */, + DD75B82CF72C1E45AE727EAF94627411 /* SVWebViewController-dummy.m */, + 7C09952189B9370CBB5C1F4D1967E053 /* SVWebViewController-prefix.pch */, + E924C2AF486274A46158408B7819E8F5 /* SVWebViewController-umbrella.h */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/SVWebViewController"; sourceTree = ""; }; - 0C0C6E5D68EE9645594D785FAEB6C473 /* Providers */ = { + 12E6296EED1FEB3B0B8D8BF819C159E5 /* Pods */ = { isa = PBXGroup; children = ( - 11146BBE7638F3B9DBF0CED3738752FE /* Frameworks */, - 0AB3756A89E5F17F4802C7490F67142F /* Resources */, + C9A8FE151314809FFC324AF3860BB8D1 /* AFNetworking */, + BB0B80CC59DE2C9CAD42FE6427A2A36A /* Analytics */, + 98795731F8EB9B242ACCF9A5E431813F /* AttributedMarkdown */, + B68C03D8A7D7E55A03A095DC66AC06D2 /* Bolts */, + 1B8BCAAEDE4735716CF7AEB7D68A0696 /* Bugsnag */, + BFEE9E8CE856350C717C912B00D86BB2 /* CGFloatType */, + 6E88D9DDEC7EEF13E48A55E8631114A8 /* Charts */, + 506884A2324451FEC68AD0FBB9DC4F82 /* CocoaLumberjack */, + C3C9038EC3EDFF4B62CE08BB48F1E89D /* FBSDKCoreKit */, + BFD507516E128620995A69D1AE10AA02 /* FBSDKLoginKit */, + 0BFB0FD3F63B1A3D640341AF0B66DFE3 /* FXKeychain */, + 697B65DB592AFBBB466F18AAD6C387CF /* iOSDFULibrary */, + 212C5613730947FF57BC43896DE69B6B /* Kiwi */, + 61F7265F1166F8DA2A296C6151204171 /* LGBluetooth */, + 763377DBABAB35E3A1EAA390521F4DBA /* MSDynamicsDrawerViewController */, + 696BC2C16B091775ED7125CB743CB406 /* NAPickerView */, + A57EC28B598BC4BCF0285FCD571F8FDC /* Nocilla */, + 4514D9DA853AB26139429A167E777823 /* NSJSONSerialization-NSNullRemoval */, + B593854B39F28D6772DFEB2BDC075AEA /* SenseKit */, + 584595C7DD6AFD591EDA63B1ADB6B127 /* SHSProtoBuf */, + 92FA36434F5B459DF7C651FDF5F6A627 /* SORelativeDateTransformer */, + A67E51982F47A0F630582A8482605B61 /* SVWebViewController */, + 9151FDB40CC9630FC96BA9E08B10EE37 /* UICountingLabel */, + D694F90C727F5FDF247B15D1D881FF25 /* UIImageEffects */, + 3C3190B407CB5E1B323D103CDCDDF3F6 /* ZendeskSDK */, + 6CC0022EE9B32B38DA4459D498D0A9DD /* Zip */, ); - name = Providers; + name = Pods; sourceTree = ""; }; - 11146BBE7638F3B9DBF0CED3738752FE /* Frameworks */ = { + 13B263E8C75E5EE25519B669437A22AD /* UIKit */ = { isa = PBXGroup; children = ( - 4049DFF9C10ABF004AFAA1E4CF061B43 /* ZendeskProviderSDK.framework */, + 3D4DFD4B2273EB0B62250F643DBDEE3A /* AFAutoPurgingImageCache.h */, + C8474D0C154A507832C8C3A59C4DB952 /* AFAutoPurgingImageCache.m */, + D1C751528243A5815954B21F8CCAA091 /* AFImageDownloader.h */, + 79F4899E536B5A9493A3EBF40EB4D5D2 /* AFImageDownloader.m */, + 8A7CAB3B040202264CE83447B8455DF5 /* AFNetworkActivityIndicatorManager.h */, + 8AB7EB15421523CDF95524F2F7355678 /* AFNetworkActivityIndicatorManager.m */, + 38514F6F71F64477E4BF179360972222 /* UIActivityIndicatorView+AFNetworking.h */, + E87AEE243740BA2FF0880132DC204C25 /* UIActivityIndicatorView+AFNetworking.m */, + 3AE369D6F2CD413C7F0BF0BC3D23780E /* UIButton+AFNetworking.h */, + FF6A7DB98CEA2B4B1D0D39751AC6571B /* UIButton+AFNetworking.m */, + 9AA412360253A2A71C1EEFC2B51A3763 /* UIImage+AFNetworking.h */, + 878C5D33E1D5169732EFCEFF043F9EA8 /* UIImageView+AFNetworking.h */, + E9DA9CD07270D1BED2250F66B1BF9EF6 /* UIImageView+AFNetworking.m */, + A0CA5AADF122A7FA4BFD04381253475E /* UIKit+AFNetworking.h */, + F8BC693527FD08C9A8FBF3C0079CA9D1 /* UIProgressView+AFNetworking.h */, + 92DC9AE9A20D8104F363B91A0250569F /* UIProgressView+AFNetworking.m */, + 1B9EB61766FC11C05A738B7E9A350200 /* UIRefreshControl+AFNetworking.h */, + 6DDFA79FEF9EA4E6B5D4E4B6E1694EF4 /* UIRefreshControl+AFNetworking.m */, + 637BD958B4176FF1EB9163C7C6D1F79E /* UIWebView+AFNetworking.h */, + 76ADAAE601541283E0881E8E1BA97BE7 /* UIWebView+AFNetworking.m */, ); - name = Frameworks; + name = UIKit; sourceTree = ""; }; - 14ACEF659367C07EA3AA549B2F20C515 /* Headers */ = { + 199D6088E799E405369A31E4AE5A28C3 /* Support Files */ = { isa = PBXGroup; children = ( - B5235C57044F575D2ABD326A11DA9A55 /* Realm.h */, - 8F908176A50B46CA9C74FAAFF76E0FF4 /* RLMArray.h */, - 01CF1D31B6F4DB345C202E6A2CD2041C /* RLMCollection.h */, - 352688CA996308E146C72F275037790C /* RLMConstants.h */, - 7616EFB9F5F1639402CC9AC0C5E353CC /* RLMMigration.h */, - 0887EBCF1CBF974E276C517B22A0C2B3 /* RLMObject.h */, - E0D901C9189BED0600BF1FE504386BC2 /* RLMObjectBase.h */, - 34A220D7A86A2205A220F38D442D7C14 /* RLMObjectBase_Dynamic.h */, - 3E5212E1D8EA82E7F4B71011A0712DD9 /* RLMObjectSchema.h */, - B8A0D469D156594B23F99DE30D8B4C33 /* RLMPlatform.h */, - 056EBDF9E23B7D4FB58A07344131EEED /* RLMProperty.h */, - F21E7E32B4472CA43D29215E48C84B67 /* RLMRealm.h */, - 91EFFB7AFE5CE38A52DFA66AF3D55512 /* RLMRealm_Dynamic.h */, - E7404CD34249A0353A4078A868E7C182 /* RLMRealmConfiguration.h */, - BE556820FEF482B55D54FF9712B9DE92 /* RLMResults.h */, - 2D7023EBE773E75FE5A2C06A22C166A7 /* RLMSchema.h */, - ); - name = Headers; + 20CCD2CBAACDED93F1C5DBBAEB831C3F /* Info.plist */, + F4D277A36D3B0D91A889D2AB62A9BD87 /* UICountingLabel.modulemap */, + ADEB8F3EDFFF0AAFCAAF993099B794E8 /* UICountingLabel.xcconfig */, + E43A3CFE7C388A925D4016870B17F760 /* UICountingLabel-dummy.m */, + E4DB0242B3531FAE706087F2F7815B28 /* UICountingLabel-prefix.pch */, + 59BBACBE70BDA52BFDDDA5FBDFCA0FA2 /* UICountingLabel-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/UICountingLabel"; sourceTree = ""; }; - 16C7793E5970AD76A6DABE5860937926 /* Serialization */ = { + 1B8BCAAEDE4735716CF7AEB7D68A0696 /* Bugsnag */ = { isa = PBXGroup; children = ( - 2874C89EA5EBAA35B0A799C1A3CAEB32 /* AFURLRequestSerialization.h */, - 3AB880A8C48AC159788588F671239917 /* AFURLRequestSerialization.m */, - 4DCE13DFDDBA3DD328D00621249CFE4B /* AFURLResponseSerialization.h */, - C3AE766D3F5FA42C513D1346B47AD786 /* AFURLResponseSerialization.m */, + 2B10797B5F2DE2E11B088983B822967E /* ARCSafe_MemMgmt.h */, + 7F5F5C46D019193274B86430867DEAB5 /* Bugsnag.h */, + F294E8FF5D191A431F19CCF42370439D /* Bugsnag.m */, + 6826E19A38CE2C9451C669B5A0B03E09 /* BugsnagBreadcrumb.h */, + 98725CAE79E06500E87DF23AECDD07B8 /* BugsnagBreadcrumb.m */, + ECC1C2215B7499EA36CB5480EE8A5327 /* BugsnagConfiguration.h */, + 2ED6019008E4C0B4EB33078314CF8BE6 /* BugsnagConfiguration.m */, + 8B08208FE309800B233859C9064BA64B /* BugsnagCrashReport.h */, + 178FF2BDC4BD7B29A167E94544FD0639 /* BugsnagCrashReport.m */, + 70AFFD18D538849330A0A5399111B567 /* BugsnagIosNotifier.h */, + 0F739AB4FCC5638EE4F6886A7DB8296B /* BugsnagIosNotifier.m */, + 35867910FA69B21B57FD62C553A82794 /* BugsnagMetaData.h */, + A55C2E3AA3AFB9C418934BA82CF578EF /* BugsnagMetaData.m */, + 102CA30E607EB7CEA0450E020B99A59A /* BugsnagNotifier.h */, + F8910D15EF5E5B37D431B6AC7A72445F /* BugsnagNotifier.m */, + B938F7A66925104D69C8C9E24FC0BFBB /* BugsnagOSXNotifier.h */, + 3E07024377EBB01DB177D127402D8C8E /* BugsnagOSXNotifier.m */, + FC2041DB3D4C8F0D9A7A8C6CEC0B653B /* BugsnagSink.h */, + E342D7395C1CC8D4CDE7E88F440BB1D5 /* BugsnagSink.m */, + E071E98FC25DCC43761092EA310250D2 /* Demangle.cpp */, + F2943568A5B4D227DB0F297BF0C07140 /* Demangle.h */, + 6EE5890B03FE71D88FC154792221EE62 /* KSArchSpecific.h */, + A5EE17D3395CA70AACB8D605575BC5E5 /* KSBacktrace.c */, + 44AFF3A656DC0EB28F9E5E1CD1E6ADCB /* KSBacktrace.h */, + 3520846824D1F7B314C3061342829B8A /* KSBacktrace_Private.h */, + 906DAD0FD9D62D34A8E72DF125899ACA /* KSCrash.h */, + 708D5018FDD710A7CA8829585A282BE1 /* KSCrash.m */, + F85F57A36107073A3A0B2D3EE09B305B /* KSCrashAdvanced.h */, + F856F7FF124E28955B3433171CB8A6D0 /* KSCrashC.c */, + D2FE99E33ED11002641EBBD0E4AD5BAA /* KSCrashC.h */, + 46BF8C867E50896C323A16000BBE4ECF /* KSCrashCallCompletion.h */, + 856FACF4C8125F5C460812DC28E44213 /* KSCrashCallCompletion.m */, + FFD02D2E3A4884AD37F49B8A754806F3 /* KSCrashContext.h */, + 01F0306F12D64331DD35EE1B95722119 /* KSCrashDoctor.h */, + A01EEF23BE949E270CA6F6F31DA4D5C1 /* KSCrashDoctor.m */, + 62B973EFF5A253B2FF5728B11E57D53D /* KSCrashReport.c */, + 9039E31D96D74894021EEC416041977B /* KSCrashReport.h */, + DAF34F938B815B8CBD786D373E17930E /* KSCrashReportFields.h */, + 75D09FC8C0B0D65B401AB2A03AF90305 /* KSCrashReportFilter.h */, + 26246BECFAC539F5BE23BD7DB8CBDF1E /* KSCrashReportStore.h */, + 0826EE3C09A48AB53D6A685C9A0FD3CE /* KSCrashReportStore.m */, + 2265AA51C2046E171043AF808512ED79 /* KSCrashReportWriter.h */, + 578A306AA4CF12D9B614387DC1E27723 /* KSCrashSentry.c */, + 79CBFE68228B7B7E5F6C566D58C72D09 /* KSCrashSentry.h */, + F30978EA0F6BAFCCE54FA78794405E65 /* KSCrashSentry_CPPException.h */, + 7E637C5F801F1624FC526DE028CF0CCB /* KSCrashSentry_CPPException.mm */, + C74660D095E15BEB998BAA21735D63EE /* KSCrashSentry_Deadlock.h */, + 84675832C6F2CBB629CD9389FA681AC6 /* KSCrashSentry_Deadlock.m */, + 5715B688519632150FD089870E3568E9 /* KSCrashSentry_MachException.c */, + 5FEAB4674B5208451B69ED2D917B4E21 /* KSCrashSentry_MachException.h */, + EF97265121F9DF599FA1067A0C58415E /* KSCrashSentry_NSException.h */, + 5DB621DA32F0730F1B77EAFBD633E87D /* KSCrashSentry_NSException.m */, + C5E91D6179B80CD3C97E0D1CE39E3975 /* KSCrashSentry_Private.h */, + 6CD6773FE4014D790B7AC1F2986F5805 /* KSCrashSentry_Signal.c */, + 1EA8C9F429D29B30FD517D3E08E6013F /* KSCrashSentry_Signal.h */, + 8349ED79BED6CDB2031C5B61CD270F8E /* KSCrashSentry_User.c */, + 2BD2FBE21678403A7AF2783AEDB11A41 /* KSCrashSentry_User.h */, + B272BDD08A9E560AA898490D06D07470 /* KSCrashState.c */, + 60CAF3248C4832B9782CF35E8E5DB984 /* KSCrashState.h */, + 4C41251AD8917AE75847686D0918674E /* KSCrashType.c */, + 40A5F229C5CA7A123CA54A0029901039 /* KSCrashType.h */, + 04F7B798B041C898DB6BA8ECC89296D6 /* KSDynamicLinker.c */, + 1613FBF6DF3BF714DAAB36DDEBBF977C /* KSDynamicLinker.h */, + 60D124560A063CCB97750BCF0C14BB64 /* KSFileUtils.c */, + A15DAC441C5D0F1EFC8CB3BD7F3C7553 /* KSFileUtils.h */, + BBA59FECB49246815EFACF0CB5B2016A /* KSJSONCodec.c */, + A0437AC8B01D7529E2537285650D805A /* KSJSONCodec.h */, + AEFACB543EF6823230F49643950A2C40 /* KSJSONCodecObjC.h */, + 7B1036B1F55857FBF26051272706DBFF /* KSJSONCodecObjC.m */, + 85D2451F46B4277BE654C9EBDB4CFCDC /* KSLogger.h */, + FC79A5F0EE9C2AC70DFA52A7CB4F4F1C /* KSLogger.m */, + 0006076FB1B5E2035EEDB273D3A3DE6D /* KSMach.c */, + 8ABB8BC7F773D7FB3FEEBA6B1E708BAB /* KSMach.h */, + D85CB9893D4BCEC48DF94E1C82888251 /* KSMach_Arm.c */, + 7E88A4161640BAB97EACD27E68A9EAE8 /* KSMach_Arm64.c */, + ECEEBA4778296151676D99C6DEA5B727 /* KSMach_x86_32.c */, + B9636961E2B85414A07DE1B70094979E /* KSMach_x86_64.c */, + D1CC18044708C01E3D29792316C4167A /* KSMachApple.h */, + C1A645DEFB922F621304951E595D361C /* KSObjC.c */, + B0DE7A4AC0F689755048279AAB498BF1 /* KSObjC.h */, + 60DF862CA272F10F2986D4708804E39C /* KSObjCApple.h */, + B287A2BE1A7AD6BDE66DD8563A2ED790 /* KSSafeCollections.h */, + 158B00826E913ADA8ECF519AE076B3F5 /* KSSafeCollections.m */, + B4A56A89B3790CB48710AB065FBA99CA /* KSSignalInfo.c */, + 71B338959780FB7A9328D16A8717F90D /* KSSignalInfo.h */, + 8A747FDD01504AFC744D3C2C36C2CA9C /* KSSingleton.h */, + 27BB3CCDB5C3766D6C07FCD7F0ADB82D /* KSString.c */, + AC62CE1461BF02A54CDB746F29570C8F /* KSString.h */, + CD3BF15D56A5301154CEE0A699AB56F1 /* KSSysCtl.c */, + 481A9792966B0F69881FF4C0F2C7C59D /* KSSysCtl.h */, + C4A793BE5031FFAB00309D1CA5219025 /* KSSystemInfo.h */, + 0F923AAB0BBDFE200C428565AB663175 /* KSSystemInfo.m */, + F18B528BCC6B2FF6D971923E55677FE9 /* KSSystemInfoC.h */, + 7E7F6FB0583C87A8A7B8AEFBCB863CE9 /* NSDictionary+Merge.h */, + 9F93BFC92ACA16300522876B64064BE1 /* NSDictionary+Merge.m */, + CAAE7588E17B834E174E234999E91715 /* NSError+SimpleConstructor.h */, + CE2D2CB20706824F0D67B9118408F871 /* NSError+SimpleConstructor.m */, + 37051E34E2EB632A81CD15F3097CBB78 /* RFC3339DateTool.h */, + 4BB3BB34ADCF79B81371A20B98E89ED8 /* RFC3339DateTool.m */, + B807AB6BBFFBFD715F73484E5324F45B /* no-arc */, + 84C9D95F1B380BAA1C9812CAFA030CEB /* Support Files */, ); - name = Serialization; + path = Bugsnag; sourceTree = ""; }; - 1D89C0D14CF599E9C8113112EBCF246E /* AttributedMarkdown */ = { + 1C4B4FB6307E2680CE3C34D8B9B6E3DB /* Resources */ = { isa = PBXGroup; children = ( - F69413B5E202625752A8F92DFF2452CF /* markdown_lib.h */, - F680178296030B2F6D0F10E5DF948055 /* markdown_lib.m */, - 339DF02C0CC9AC3812A5411FADDB1872 /* markdown_output.m */, - 2B5E74CA2A074C3F13CEC87EFA252774 /* markdown_parser.m */, - 9C7C14B40677F5286300B3B695329782 /* markdown_peg.h */, - B2DCF9C68266D6253840B04701EC5D9B /* platform.h */, - E1BCC6FC9A27C264AAFEB3620EB09FC6 /* Support Files */, + A0C942BFC28612A4A232B21B6ADC7C51 /* ZendeskSDKStrings.bundle */, ); - path = AttributedMarkdown; + name = Resources; sourceTree = ""; }; - 1E3BEF660D4E5984EF9C01BE411B9BAE /* NSJSONSerialization-NSNullRemoval */ = { + 212C5613730947FF57BC43896DE69B6B /* Kiwi */ = { isa = PBXGroup; children = ( - 4AEBDA28C5CBB72A7345A1E4D7E2FDA6 /* NSJSONSerialization+RemovingNulls.h */, - 251EC77501ACBB7288DA893D54E5DE50 /* NSJSONSerialization+RemovingNulls.m */, - 5B9ACC753CE7E4DA1E5A7DC0F7410FE7 /* Support Files */, + 554E49C12527F52EB998770EB32E1769 /* Kiwi.h */, + 179343D1E144800218C9FE56D64F8856 /* KiwiBlockMacros.h */, + B9457548F12E30C56C8806207E1DD8E2 /* KiwiConfiguration.h */, + 71C68B3BBE91BAC6B8028735239AF219 /* KiwiMacros.h */, + 4A9F057A2FBE7362106F14F7291E5533 /* KWAfterAllNode.h */, + F164A28ADDB474214B13184E8CF28513 /* KWAfterAllNode.m */, + 413FE6CBBACA1DEE75628ED8624B4962 /* KWAfterEachNode.h */, + E2EDF5D4191EA72CA623932CDAFE1D87 /* KWAfterEachNode.m */, + DC3C70467DF7321D90C4E8FC9180F28A /* KWAllTestsSuite.m */, + 956D813AE504B7F67A87FDB13C17F9B1 /* KWAny.h */, + 54371C5436BE6AED122615ECF2378C00 /* KWAny.m */, + AE6C6F2F87ACCA520E2BF96AA8086D7D /* KWAsyncVerifier.h */, + B86937AF5F90ECD087A9D1EF577EB204 /* KWAsyncVerifier.m */, + EDD24F7D8CABA3EBE82F6CAA3D648FF5 /* KWBackgroundTask.h */, + E0EA030BBB5E935AAB37D11C72FF8529 /* KWBackgroundTask.m */, + 9463EBB8ABA1D0B1EE47AC89D5892044 /* KWBeBetweenMatcher.h */, + A654263015F2F3095665B4A8E1D660DA /* KWBeBetweenMatcher.m */, + 749739E40CE9937DFECA3F01767E38E5 /* KWBeEmptyMatcher.h */, + 84D34460B2200B26D6FB7453C9781AA5 /* KWBeEmptyMatcher.m */, + 62535C65657B6DFFAE34330A0B3BBE6F /* KWBeforeAllNode.h */, + 56FB2F14FBCE04A3A5C18D4809EF7EE8 /* KWBeforeAllNode.m */, + AA896EB127524B7BF10DDB69B8E03DD6 /* KWBeforeEachNode.h */, + 67766D8DAD9E1221E70CC3BBB244FE57 /* KWBeforeEachNode.m */, + 00D01699204800B0583662DE1EFC5842 /* KWBeIdenticalToMatcher.h */, + 3D081106E137DB09DEFE5F016C4518CC /* KWBeIdenticalToMatcher.m */, + DE748DD78759EA2058ABAF0671E5625E /* KWBeKindOfClassMatcher.h */, + E96A8BAECE4BDD5E897A9EA3F69E5985 /* KWBeKindOfClassMatcher.m */, + 85F6816AC60C3A8827754D3016808127 /* KWBeMemberOfClassMatcher.h */, + 35F26CF3AE4D0472784F1251C18670EE /* KWBeMemberOfClassMatcher.m */, + 9B934AC9229258C81200912A1A60E4BD /* KWBeSubclassOfClassMatcher.h */, + 169C39D904AAB90FEBFE281CB20B20B7 /* KWBeSubclassOfClassMatcher.m */, + C8FC408FF80AA469DE5E6574793A6997 /* KWBeTrueMatcher.h */, + 556AF550F84C796E40AD883E171AD514 /* KWBeTrueMatcher.m */, + 713CD36A92527DF40A2E07D59A5FE404 /* KWBeWithinMatcher.h */, + 5E83BBA151286AA81933299A0C0957DD /* KWBeWithinMatcher.m */, + 7494CD35D990A23DD3B407EECE0A1D19 /* KWBeZeroMatcher.h */, + A3C23E5EA2B0B98072C10952A60813A1 /* KWBeZeroMatcher.m */, + 0B3D11E7E09E1D2FA938684C7D5E6459 /* KWBlock.h */, + E9FC241E195FACF562830BE2E117D199 /* KWBlock.m */, + D97890DE73939F3A0818E813F574AA5C /* KWBlockNode.h */, + F03D1FC6902C2FD632405F8ABD2002D8 /* KWBlockNode.m */, + 1415153B5A66DB82C17A725410D94BA4 /* KWBlockRaiseMatcher.h */, + 5B5173D9D4D28A7CA4A6CC2185A4C1D2 /* KWBlockRaiseMatcher.m */, + 329D9A466D625A0457B170849DAC81F5 /* KWCallSite.h */, + 7A87507ECFF5737557202573FE409125 /* KWCallSite.m */, + 8910F9DCA675A283F8AF8CA4EDB19286 /* KWCaptureSpy.h */, + 588E5D57CACD475B1D7DCB42022C710F /* KWCaptureSpy.m */, + 7D2C39738904B957AFF03826909D3D2B /* KWChangeMatcher.h */, + 520B1A2F022DA8E2DA6FA7949B9E1E4E /* KWChangeMatcher.m */, + 2458305175DE118921D31A89BEC2FDBB /* KWConformToProtocolMatcher.h */, + 8E5CB79CF17F03244FEFC425D2DBE396 /* KWConformToProtocolMatcher.m */, + D2364A6A8A0AC2BFE8962CBB64A52388 /* KWContainMatcher.h */, + 386611B40F37AB31206131335BF535DA /* KWContainMatcher.m */, + C8F3EDA544E796D8A53D73EBBF6E863B /* KWContainStringMatcher.h */, + AE35CC8436761D3E73E85B11422ED006 /* KWContainStringMatcher.m */, + 73333867F2E3DF7460199601A0428751 /* KWContextNode.h */, + A536B7426BF438AB598E0EEC6E014CE3 /* KWContextNode.m */, + 7F7FF47080AF5A3C6B5C136BC708CBFD /* KWCountType.h */, + 23CE39A7D99F68679286EDCFD6B44759 /* KWDeviceInfo.h */, + B6EAF6ADA7BAFAA5071FF052BB6E6C52 /* KWDeviceInfo.m */, + 873A4DF4591F28FBE2F1FD007FFD35B2 /* KWEqualMatcher.h */, + 47CE672AF5CF07053A6FA69CAB6F2CB3 /* KWEqualMatcher.m */, + 48152DCAD62AEB3D67FB32C8CB5CBCD2 /* KWExample.h */, + 7934CDD3582F1106C8CE6024AB38358F /* KWExample.m */, + 5902DD6736E2A3DC926027DBC0D63DA1 /* KWExampleDelegate.h */, + 4A3261EDFB84127F7801CAC189A98F0F /* KWExampleNode.h */, + BFF5F2B44921E5B6DEAC58CCEA659119 /* KWExampleNodeVisitor.h */, + 778997680AAAA44D951304AB035354F0 /* KWExampleSuite.h */, + 45A5B5CB06DE8DB224894205439B303E /* KWExampleSuite.m */, + 1E8E8267834CC1C9A5F1BF7C604A5943 /* KWExampleSuiteBuilder.h */, + 1CB6E2BBABD8C780EDC41B467A54838C /* KWExampleSuiteBuilder.m */, + 03A595AC6DAD1A9EC3A9C7046FE873BB /* KWExistVerifier.h */, + 76E7D4C62B86E9DCC49F46204CFE5F41 /* KWExistVerifier.m */, + 391F8C6E1E5A398A2DCD74B39E1DE3AC /* KWExpectationType.h */, + 4600DBB61767E5E90887A50E71CAE170 /* KWFailure.h */, + 8764C618BDFBA3CAEC8534B54C3F9A32 /* KWFailure.m */, + 4D3826F75A050FDDD99E2AA1026D23A7 /* KWFormatter.h */, + 7058B9F355950BAF6579350B07C98A47 /* KWFormatter.m */, + 947D0354D7F5F1D3DBA51BC8B9A1CDCB /* KWFutureObject.h */, + ED919C7B7CCA5778E68DBB3524999DCC /* KWFutureObject.m */, + 88C7CF6476D2EF3E5CD0181C2877967A /* KWGenericMatcher.h */, + 3E28427BBAF9A21B188A1F71400D0C73 /* KWGenericMatcher.m */, + 6B288CA94E516BD12D019D42E8471ABE /* KWGenericMatchEvaluator.h */, + DBDF5272C1DF2723E3F8B10E72553380 /* KWGenericMatchEvaluator.m */, + D6633F7F968321D15B7C11632A70FEBE /* KWGenericMatchingAdditions.h */, + 89B966434EB68EE0DDAFE7E1A32C017F /* KWGenericMatchingAdditions.m */, + 0B235AA53CB14B4B9AFCB1B8E852D84E /* KWHaveMatcher.h */, + 1FDCC5A57BB7D1BD0BDFABB3A6911CA4 /* KWHaveMatcher.m */, + BD623924F64E5A042EF647B73C77DDBD /* KWHaveValueMatcher.h */, + 84EE4A5BAB3BA8B64CF81CC4B234C1AC /* KWHaveValueMatcher.m */, + 064FF3868F8D2ED780F3AA5BD5240AEF /* KWInequalityMatcher.h */, + AB9268ADCC28DE0D1663EE5931202858 /* KWInequalityMatcher.m */, + 292A2DA2D66D340A98E9835EF141BC95 /* KWIntercept.h */, + 8E09E9FCD89D09AA459D5B463264495E /* KWIntercept.m */, + A260DA11D6BC0B6BCD2F5BF3C175646B /* KWInvocationCapturer.h */, + BDFED5A4F565CE76E1560649AE37263E /* KWInvocationCapturer.m */, + C3AEBC0306BDA990EBA13BE0EF681A14 /* KWItNode.h */, + 994819FE2E1A6B29E13964BBF1925435 /* KWItNode.m */, + FA62982D52BA4CCCDEBD2F0A8CE57207 /* KWLet.h */, + EFD764EF4EBB82F7A77C4D6562B06B6D /* KWLetNode.h */, + 88A77755F9611E7073442779AEE0F18E /* KWLetNode.m */, + B6D2B2B385B67F64E7FCD4C064D5F0F6 /* KWMatcher.h */, + A011C0D37A27D2C707AEBA03B0039C5E /* KWMatcher.m */, + 40914E439C718D21121B3CAC91F4B922 /* KWMatcherFactory.h */, + 1A016502AA2726AB5399BA3B8B2119A2 /* KWMatcherFactory.m */, + 52806E2109391BA6F2938C076231BAAC /* KWMatchers.h */, + 392D67CFCA1BA91AF1C9AD183AD13346 /* KWMatchers.m */, + 257EC5609446DEFC517C05B961224127 /* KWMatching.h */, + 06A60658B80E97003F81B7536AFFA818 /* KWMatchVerifier.h */, + 05E6643A0402B632BFD6384471F0D75F /* KWMatchVerifier.m */, + B44E21AEEF1D1003DCFEEAEC0870931A /* KWMessagePattern.h */, + 30233AAFF56A1C8795963B6244C2C936 /* KWMessagePattern.m */, + 9ABE86C1140371028332825C1C3729A9 /* KWMessageSpying.h */, + A4EFDD2FBB6B904D5C411C2B5FE70EBF /* KWMessageTracker.h */, + 31DE0A3FE8004360305FCD43B2B35A0F /* KWMessageTracker.m */, + 654980C250A209F92EDD89C370A53C8C /* KWMock.h */, + BF65420693CE005B8A6AC725F407C6EF /* KWMock.m */, + 5AA751B34FB400C5B546D77E4091BE0A /* KWNilMatcher.h */, + 9F413F480320BD0F9F9F636D338E4D32 /* KWNilMatcher.m */, + 397FFCA503522A78D78E14F3B58FF0BC /* KWNotificationMatcher.h */, + 8BD843BBA8721DCB017B1D347B1FDF07 /* KWNotificationMatcher.m */, + 55EFAD7CE8C2FFC816EAEC49196FEC7B /* KWNull.h */, + 20E70512C3FE1C9529CB4A76C8650B9A /* KWNull.m */, + 8D9693FC0517C4471BA2871F056BCD9A /* KWObjCUtilities.h */, + B61058869909715EF832391CE4BC45E7 /* KWObjCUtilities.m */, + 7F88F8D15BB56F8131446B2A9E0EEAA8 /* KWPendingNode.h */, + 027EE36F4F9D34BE7ED014E939D85FEF /* KWPendingNode.m */, + AC0F991E55E421B86F8097B03C102E4B /* KWProbe.h */, + 7BE9F5A8861B7867DB739C3FFDACA5F6 /* KWProbePoller.h */, + 5BF13ADAFC3E7C4B57616F73AEC98308 /* KWProbePoller.m */, + FD7449A228BC96409D0C8C1066F06B0E /* KWReceiveMatcher.h */, + FA4D15CEC00265D6FE38FD57D4F41B87 /* KWReceiveMatcher.m */, + 0FFBBE960B9D3B54218FFE4077204089 /* KWRegisterMatchersNode.h */, + 3036D4112488A0AD401B373418122EEE /* KWRegisterMatchersNode.m */, + 4F75B6EEB4A8DB116DB60DBBD17F5BE5 /* KWRegularExpressionPatternMatcher.h */, + 6B9C772F1E55C8A05672A9D4B175931A /* KWRegularExpressionPatternMatcher.m */, + 52CCF6B3465A8C9784F6E8C9BAB9118B /* KWReporting.h */, + 6608A7474DE4A47813D750963FEE1870 /* KWRespondToSelectorMatcher.h */, + EFB610EA4900AE141A19865EE6EB0D4A /* KWRespondToSelectorMatcher.m */, + FBCBC67A30923200901AAD539659AF4B /* KWSharedExample.h */, + 5EA7B52007A94752AD8FC7E4D98118AF /* KWSharedExample.m */, + CE01BF63EC59C374C87F187DC491E58E /* KWSharedExampleRegistry.h */, + 6C52C16FDF3452C375D66CD6691BC6C8 /* KWSharedExampleRegistry.m */, + 9876B9C93E97E20C7A9DC2BFAB47B44A /* KWSpec.h */, + 6F900352B0F5A4653207338C819BF803 /* KWSpec.m */, + 7C1AAB9BB7D26C44C63BF4681A516477 /* KWStringContainsMatcher.h */, + 648520DAE61105BB0EF4E15CF98FEEA6 /* KWStringContainsMatcher.m */, + 95A79DCD328B0777801ED05E524657BC /* KWStringPrefixMatcher.h */, + B0E885BAD449E7E85F44CAF78E9C27FC /* KWStringPrefixMatcher.m */, + 1AC1993E6402CACF023EC014AB3756E2 /* KWStringUtilities.h */, + 6ABE4D472F478150170F5755D7D6993E /* KWStringUtilities.m */, + E337168F0B5582458F2C4AD06C09BF93 /* KWStub.h */, + 329ECC8311A4F3EAC0BEB25AC540B704 /* KWStub.m */, + 89A1733976444DAC31871520AB02A8FF /* KWSuiteConfigurationBase.h */, + 586B161D7F124B1832EAC22D38D6AE4E /* KWSuiteConfigurationBase.m */, + 1B5742B45011A8B89A0A4C0F2031AFFB /* KWSymbolicator.h */, + 65BE41455511744E43181C0589A265AF /* KWSymbolicator.m */, + 8CABF671E6F4291589BFB54D8938A249 /* KWUserDefinedMatcher.h */, + 201493C758413566BC75C1E6FA95C451 /* KWUserDefinedMatcher.m */, + 9F5B584F7F2113D3A15A9FD6EB6530E8 /* KWValue.h */, + 65711872A53C43C694E444E338CE8CD6 /* KWValue.m */, + EB182FE499AC0D17F21B84311BC929D8 /* KWVerifying.h */, + 6CC974D9021F7EBE4956030F00A920A6 /* KWWorkarounds.h */, + 3F3514F5512423AD843EE18BF163A231 /* KWWorkarounds.m */, + FD2BFD4021153753ACACBB5028DDCCB3 /* NSInvocation+KiwiAdditions.h */, + DEEFBC8C93F4824B8536E33FFBA3617F /* NSInvocation+KiwiAdditions.m */, + C2BB420BF33F147B25BD984C483C3D78 /* NSInvocation+OCMAdditions.h */, + 3DC3EB78DD01D02892615FE843B09E26 /* NSInvocation+OCMAdditions.m */, + 53AAD7ED40C47A53327B219F4E3DBAF8 /* NSMethodSignature+KiwiAdditions.h */, + D7E61C08F82642A1835AC06D146B9368 /* NSMethodSignature+KiwiAdditions.m */, + AEB6D0D368F9960B71C2DC23527A1EFE /* NSNumber+KiwiAdditions.h */, + 6CA825F7886DFC1E6F4B8022E9053B09 /* NSNumber+KiwiAdditions.m */, + AAAF4CEB62B079179A74B5C618E7DB61 /* NSObject+KiwiMockAdditions.h */, + E599B04144A7EACE63030D3FF6C563D5 /* NSObject+KiwiMockAdditions.m */, + FD8CAF8448164EE70267B97D4069249F /* NSObject+KiwiSpyAdditions.h */, + 9507986D0DAAECDEDDBA61852A2AD25C /* NSObject+KiwiSpyAdditions.m */, + 9E1919ED6D2223D65B6075DDC7BC0F9C /* NSObject+KiwiStubAdditions.h */, + D3F73622B73978F427E08F7C8BC4CD07 /* NSObject+KiwiStubAdditions.m */, + 6944DFF218B86D54786D9B6EFE8929AF /* NSObject+KiwiVerifierAdditions.h */, + 6649252A7474B6DE5BECF5D3D3A87F1C /* NSObject+KiwiVerifierAdditions.m */, + 3D1FBDE7BA010291EDCBB5E933A4B330 /* NSProxy+KiwiVerifierAdditions.h */, + 278F3039D70C10B865E73E2A39EF878C /* NSProxy+KiwiVerifierAdditions.m */, + AC8B9D9F31A6F232AD9D0B49ECA21B3C /* NSValue+KiwiAdditions.h */, + DF0A79BDD2DA855CBE7BD32952C1A42F /* NSValue+KiwiAdditions.m */, + EBF702ECF3D398811FE83DC7D0A0070D /* Support Files */, ); - path = "NSJSONSerialization-NSNullRemoval"; + path = Kiwi; sourceTree = ""; }; - 2108B3C795DAFAEBC81C8F64EEBEE03D /* UIImageEffects */ = { + 3112F136BA781565D03CEF0CC7DCC7CA /* Support Files */ = { isa = PBXGroup; children = ( - F8CD0DD473CCEBD19518D307D62F812F /* UIImage+ImageEffects.h */, - 306C2064D9FDEE09F3E3EEA0AEF6F1EA /* UIImage+ImageEffects.m */, - 659A59F0D2511E57878C1AAEB9FB172A /* Support Files */, - ); - path = UIImageEffects; - sourceTree = ""; - }; - 2532FBFB8B8028A715AC90648E565FED /* Core */ = { - isa = PBXGroup; - children = ( - 8DF572F72B15DEDEB397E66DFFC329F6 /* DDAbstractDatabaseLogger.h */, - 0E9DB316F651364523CD50A74EE6F49A /* DDAbstractDatabaseLogger.m */, - BC47BE2DFB64403960CC4AF92A6AC8A1 /* DDASLLogCapture.h */, - 807D313FF605EBE87CCED81694156D1F /* DDASLLogCapture.m */, - 84642CA926CF6D5766F1E09510366E2E /* DDASLLogger.h */, - CF435333A91C367E2676AD864CFB66FF /* DDASLLogger.m */, - 58BC6DEB04DE9B4F6923B667C4EB3527 /* DDAssertMacros.h */, - 99A6002400FA68B946C4B7D7584990DD /* DDFileLogger.h */, - 12D644CD9C4DAB0655B1F910A82164BF /* DDFileLogger.m */, - E3F29DD49E47FC8F794453A1D1988D3D /* DDLegacyMacros.h */, - 2D8708A4FB1C905D339F5BA3AA860923 /* DDLog.h */, - F4EE858643009844560E18D026FE4043 /* DDLog.m */, - D65BA82B9215214508E5B15A2A1EC79F /* DDLog+LOGV.h */, - 4EAAA276DB85A8E711C7AD0FE4B0CF05 /* DDLogMacros.h */, - AF04CD68158F2D4256C253EDE16EFB45 /* DDTTYLogger.h */, - 378AC9BA82B9A26A81AFF9CAC6AD02D0 /* DDTTYLogger.m */, - ); - name = Core; - sourceTree = ""; - }; - 2704C48F79169DF2B4804E153E956C30 /* Resources */ = { - isa = PBXGroup; - children = ( - 1DE3845FC5C7F310A88812775F3D0B8A /* SORelativeDateTransformer.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 2923119F3E22690DD3AB5E50EF1790B5 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 5906CB5FC09F19839C430232840BFB37 /* librealm-ios.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2DAE93AAA10E5F5219CEEB96F9A087E7 /* Support Files */ = { - isa = PBXGroup; - children = ( - D6C4F429C0126DECEA4DA4314B621E0A /* Info.plist */, - 72CF37D4A62C5744F55ECA38FC6C55A1 /* Nocilla.modulemap */, - E002E7CD326BCE8ACE06F6B30535A66A /* Nocilla.xcconfig */, - D70C23C533DC22F89703DC29BB47B58E /* Nocilla-dummy.m */, - 5E8813B3C19A117CA6B7E5306B6FAE90 /* Nocilla-prefix.pch */, - 39F58548DE3927A52C154C905DA0E099 /* Nocilla-umbrella.h */, + 9749983D6D18A0665F5748243D95A437 /* FXKeychain.modulemap */, + 3D017B78C486965C62D66F01029D5C1F /* FXKeychain.xcconfig */, + 5E545C042660025FA73C4AF01B6C0A90 /* FXKeychain-dummy.m */, + 2818C263556F2A9E90B5C9AFC588D1F5 /* FXKeychain-prefix.pch */, + 9BE8BC1AAFB71F4ABD1D5163FAAA0B19 /* FXKeychain-umbrella.h */, + B8EAD03FA744E7019C9DF4B6894E007F /* Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/Nocilla"; + path = "../Target Support Files/FXKeychain"; sourceTree = ""; }; - 2DC96D14172F1FC631BEE47C154EADB5 /* Service */ = { + 3278647F6A6A1ED8A6D4F4CC44CA7B9C /* Service */ = { isa = PBXGroup; children = ( - 132F81F12EAFD58A6A82D474C46E0371 /* SENService.h */, - F3CFEC0186652BA7859FB72EF9CBDEC1 /* SENService.m */, - 061E8FAA2ADB6C8E786802191CA84735 /* SENService+Protected.h */, - 6161161C06255A6379BAEC3C86EBFF8D /* SENServiceDevice.h */, - 10D91DB778382B4F50B88A4EF2DB42EB /* SENServiceDevice.m */, - 27A5CFC6EF5EC568CF76AE4066995FC7 /* Services.h */, + EDD5615E2A8F11479FCA9144FCE2CC1D /* SENService.h */, + 0586A2A4C02F8D34C8CFB47D263453E6 /* SENService.m */, + 9ADAA50F2A799E9CDA41BD7218C4E3F0 /* SENService+Protected.h */, + 103B358B0E7ADFC1C07E1A3182A247B8 /* SENServiceDevice.h */, + B906BC429B071335CEC1F1AADDFB92D3 /* SENServiceDevice.m */, + DDF133ED00BE576251125FF9452AC336 /* Services.h */, ); name = Service; sourceTree = ""; }; - 2FCC6D3BAA39FB6F02C0DEB782F04A03 /* Model */ = { - isa = PBXGroup; - children = ( - 800CC42D515D97B2D648097DB325B14D /* Model.h */, - 52BAE834B2409B01110EB6C7D136C07E /* Model.m */, - EB5E7A6AE591A0786B9C0FF140577F91 /* SENAccount.h */, - A3A386A03E4D3BDE46EFBAE96535DD2E /* SENAccount.m */, - 883C0D45AD0831BFD8D6D8C8D9FFA0D8 /* SENAlarm.h */, - 6F20E287244779869881887C7A8DF6DB /* SENAlarm.m */, - D92D06468DC49EDC5BA31EA1EE0AAA90 /* SENAlarmCollection.h */, - 86D176677BF24120F559C89BE66C447E /* SENAlarmCollection.m */, - 0DF9BF10A42F842B493FA264362A7A29 /* SENAnswer.h */, - 7644891F16855D475219EF10C38A17B8 /* SENAnswer.m */, - E82FF4A575E4222229AEC661F431B869 /* SENAppStats.h */, - 8C2722775EDE85FEA619515748B72506 /* SENAppStats.m */, - F5B5C24B02B667EF57B1226157D65B56 /* SENAppUnreadStats.h */, - B6CA54F0DCE8A883BE5CC87A795CBFCE /* SENAppUnreadStats.m */, - 96797E2BDE8A29F38585529A09CC31F5 /* SENCondition.h */, - 23EBF85C035E122F72215384D3EDCC46 /* SENCondition.m */, - 048E483362A21348B8DBFCAA1DEBDFE3 /* SENConditionRange.h */, - EBCFAAD9305C48E71BA401CCE97EDF47 /* SENConditionRange.m */, - 4618E9C243127A44515E9922635D1D90 /* SENDeviceMetadata.h */, - A5020AFD5A78F7A182935EA06EC4AAD8 /* SENDeviceMetadata.m */, - 1491750C1A4C5B573357CF0168C4EC2C /* SENDevicePairingInfo.h */, - 6502818CA0708FD3224E8472F19AA786 /* SENDevicePairingInfo.m */, - BD44693C7E0B8358080C8A17D34E5238 /* SENDFUStatus.h */, - A82C5490B8E3FE6AB660F4D7CEA93E81 /* SENDFUStatus.m */, - A5F7A864B5FA2EE2A78B104AE49E1E52 /* SENExpansion.h */, - 6814C42194D485A8BEAE02C4161BCB57 /* SENExpansion.m */, - 42352B7B711278F174EEEC51E9A0DE29 /* SENFeatures.h */, - D067724BE34717E0632F22D33A6D26DB /* SENFeatures.m */, - ED2BAE3CD8E94C2AD4FE91FB1E631384 /* SENInsight.h */, - 3768AB85D4571640B894A0B8D5FE7370 /* SENInsight.m */, - C1898C759AAA9843A8AA87C33AFA9331 /* SENKeyedArchiver.h */, - 61E142489F11A879A0E5DC8A5F0F8386 /* SENKeyedArchiver.m */, - 6B80F435FEAADE9F4D67CAE032388C50 /* SENLocalPreferences.h */, - D33165EED7E093B5F3CD4906A251CE48 /* SENLocalPreferences.m */, - E2031D03983653A2B934573E0F177E75 /* SENPairedDevices.h */, - 62205BEB74365EF935AECC9C2EF7216A /* SENPairedDevices.m */, - 7EA6AB5FDE3F232D957BB6AF846E62F7 /* SENPillMetadata.h */, - 68F3A5E5F4B87B0A9AD951EDBE22A82C /* SENPillMetadata.m */, - E9DF6924BF3EBCFF69AA04D8B408644E /* SENPreference.h */, - BA07EC8239AD89716CB7AE126DA29843 /* SENPreference.m */, - E91D6F73DA55A103ADF9D6A33C0C5753 /* SENQuestion.h */, - AD6E3487ACC59104E99DE2AB325E7AE8 /* SENQuestion.m */, - 8980A88B008BF729F0D7C9B33BF2C0C1 /* SENRemoteImage.h */, - B296E591DD1116B86A05F4475FFAAAC5 /* SENRemoteImage.m */, - 311A2B2ADE06B57A046EBFFF7EDC3538 /* SENSenseMetadata.h */, - 699CDB7937D77DF7EDE9519C053160B5 /* SENSenseMetadata.m */, - 9CFA44F36DBC6892BD7243055AEC976A /* SENSenseWiFiStatus.h */, - BE3281985C96F6D05CC3260FC5E4D36E /* SENSenseWiFiStatus.m */, - F949642012589A54A31E789783C8600E /* SENSensor.h */, - 044F8A858D46276A25B96EBBCCCA1092 /* SENSensor.m */, - 797A1965BCADDE793A1985B9FC7B4D3D /* SENSensorDataRequest.h */, - F11A8E2DCEB70A737F52BA3E64378CD2 /* SENSensorDataRequest.m */, - B4C513BACCFD6AE8174E71CC77BDAF87 /* SENSensorStatus.h */, - 347E7A4754F4C8F04FA4B5158345D216 /* SENSensorStatus.m */, - 1600FCEC5FB251E98E48C7B8C2B54B11 /* SENSerializable.h */, - 18CF903871CE24C7CD5136EAFF2107ED /* SENShareable.h */, - 9FBAE1FE402267FB2C39A1958F1042D6 /* SENSleepSoundDurations.h */, - A1CF3AA9F41807F1BE2138FE326BFAF7 /* SENSleepSoundDurations.m */, - B2D7387A2F28AAC72471D0B490A2F7A6 /* SENSleepSoundRequest.h */, - AB62531E618E3133AF2373817B1BAB62 /* SENSleepSoundRequest.m */, - 32F172F72E1A8490664556E91D4AD45B /* SENSleepSounds.h */, - 70F12C4E47B0DCA91F49059A08F57F7F /* SENSleepSounds.m */, - 91D9336743B0D10B1C24EB632D7BF650 /* SENSleepSoundsState.h */, - A0EAA3BFCF14A4D3744864C1DA137F0D /* SENSleepSoundsState.m */, - 2743333FCBD6A81D45F5025E40D48BDB /* SENSleepSoundStatus.h */, - 3F001682AB9E7CD5287D55B50A5C228B /* SENSleepSoundStatus.m */, - 6033BB43F23BE5497C2A0999EA5F2600 /* SENSound.h */, - 579BB90E90E847558E887432F7EC5FAF /* SENSound.m */, - F2C3265A9929A6C4E6B6925C390D60A0 /* SENSpeechResult.h */, - ABDC7007B2C41C129E628C6DDB5E9F56 /* SENSpeechResult.m */, - 42AE4D71406AE7EFFA9FB1E9B26369B8 /* SENSupportTopic.h */, - C8E061633FE56969C17377D512533075 /* SENSupportTopic.m */, - C72C086D6D4DCDDC4F9D4264E15A9BE6 /* SENSwapStatus.h */, - 587B330F1531CEE195987FD79856BEB7 /* SENSwapStatus.m */, - E0A103BC050150F23A7CD9C49433C5C1 /* SENTimeline.h */, - 3D13B076048438E69F04E0A95CF94DB7 /* SENTimeline.m */, - 520F57FF107102F2A5AA9F070A7964CC /* SENTimelineMetric.h */, - CC33C3DF83AA2F39AC400E7CA6175C95 /* SENTimelineMetric.m */, - 7EBC339B21403BB6A98F3D743D1E288F /* SENTimelineSegment.h */, - 1038F32B1CC64BF30E355903AE62D804 /* SENTimelineSegment.m */, - 2D781BA5638003AB2B5ACE9B80FC9363 /* SENTrends.h */, - 726C3601B462991860E1B038EB6F814F /* SENTrends.m */, - D44FBC623F518AAB5B5DD1096AD5EFD0 /* SENTrendsGraph.h */, - 2BC3E3FC8FBF455A73B91A3C25C02720 /* SENTrendsGraph.m */, - ); - name = Model; - sourceTree = ""; - }; 32BA70E91B9DE1E4370389E442036E1B /* Pods-SenseApp-RoomConditionsExtension */ = { isa = PBXGroup; children = ( @@ -3949,233 +3783,45 @@ path = "Target Support Files/Pods-SenseApp-RoomConditionsExtension"; sourceTree = ""; }; - 34781B13A599ACEC07C80A45DE97B41E /* Kiwi */ = { + 364386F117A23B25CC7FCBCD8E8A5D2A /* Support Files */ = { isa = PBXGroup; children = ( - B95884C263A492240D9334B018329EE3 /* Kiwi.h */, - 4A7EECA374FB96F84890E050F40530FE /* KiwiBlockMacros.h */, - DAD107FCBC43B0B4A8DA0C43B2444C95 /* KiwiConfiguration.h */, - 41C2BE15144870E3A35C2B8D8F0C939D /* KiwiMacros.h */, - 629C45EE701953B7826B41C1B0FDCCF1 /* KWAfterAllNode.h */, - BF387B7A4990626BC6F7DC470DA60A8D /* KWAfterAllNode.m */, - AEE5F2567784E4799FD9723D7A1125BC /* KWAfterEachNode.h */, - 3CF687EEB9DDA09F954D0D375CC584FA /* KWAfterEachNode.m */, - 305EBF95F8DC4875A2E84657BC94C421 /* KWAllTestsSuite.m */, - 7B44503BE91EBBA82B7213407C04BC84 /* KWAny.h */, - CAB87C234E9F5F32F3102C793D55E52A /* KWAny.m */, - B8801421677871FB911850D9684B19FC /* KWAsyncVerifier.h */, - A2778AEB40AF025FB2E53B856D4C7F22 /* KWAsyncVerifier.m */, - 89D83AA22D59EEEF5F6E81C978EEB906 /* KWBackgroundTask.h */, - AE8899350AB3A97F4BC2D8915B5B00D7 /* KWBackgroundTask.m */, - 6E0A1F2FE6088C78D389F1C13973785C /* KWBeBetweenMatcher.h */, - 52C57E961DAF09764469888401BA801F /* KWBeBetweenMatcher.m */, - BDA89222B70B52D08CE9E1CBDBA1B60E /* KWBeEmptyMatcher.h */, - 749A89177E5F0B042DF7AE566C9AE00E /* KWBeEmptyMatcher.m */, - 77C03F4BAC93824E05E6ABEC1D888654 /* KWBeforeAllNode.h */, - 413122A5B5E5978EE70E06D00D50CF37 /* KWBeforeAllNode.m */, - 1E5E75B1C4DB4709B6B72E65354BB5CB /* KWBeforeEachNode.h */, - 2426136105757DBE499DDB795FF756F2 /* KWBeforeEachNode.m */, - BCC699492C1CC80E35AF85EC1CC5A706 /* KWBeIdenticalToMatcher.h */, - ECE585BEA20915E28E0E6D603F3B7136 /* KWBeIdenticalToMatcher.m */, - 3ADF2A839B2B1E771E673FD822371E0C /* KWBeKindOfClassMatcher.h */, - 9334EE7C53BC332D5955639985417FD4 /* KWBeKindOfClassMatcher.m */, - AA1846E0ED0F8C10D7B4D96FD34C6C06 /* KWBeMemberOfClassMatcher.h */, - 4896262640F4491075A7A54038B3F9F5 /* KWBeMemberOfClassMatcher.m */, - 332F394177140A0660C6F663A766B9D1 /* KWBeSubclassOfClassMatcher.h */, - 1F950BDE46EC97645511AE62FFFFE084 /* KWBeSubclassOfClassMatcher.m */, - A9E57EC15DCD0A56C88E7D36D5F7CE7D /* KWBeTrueMatcher.h */, - 0C47D8C824060B7E625E75C2428D6855 /* KWBeTrueMatcher.m */, - 6C9C97E718BF92CF39FC1EDD65906410 /* KWBeWithinMatcher.h */, - 8962D5CD8DD0D2A516004004A37BF2CF /* KWBeWithinMatcher.m */, - 71FAA6A49C10BD7210902FAC87D9CA4C /* KWBeZeroMatcher.h */, - 7A6D83EF96DF0651EEB4D1CC55C1520C /* KWBeZeroMatcher.m */, - D8B5E5F4E32E581C1ABAAD89745181CC /* KWBlock.h */, - E684D1B252C10EFB914CE0E6542D5BEC /* KWBlock.m */, - 07E9BF537F5E7AA38216A336B51A7DDD /* KWBlockNode.h */, - 3A37C4F1E9D00A3E5B7A2C278A69F5DA /* KWBlockNode.m */, - 219FC34893A78F8F315338331D7F2DF4 /* KWBlockRaiseMatcher.h */, - 76B9B5C63938E9738C3E592A1789B848 /* KWBlockRaiseMatcher.m */, - 7B5550DFE4FB9AC96647ABAA12C4D9AF /* KWCallSite.h */, - 779318520299B237A12EADD4E82EA994 /* KWCallSite.m */, - 78D03B60D8BE2DCD60B4D9DBF222F1BD /* KWCaptureSpy.h */, - E74716B643BEA5FA2D8EC5CCB78B62C4 /* KWCaptureSpy.m */, - F3D4F1F90A5CDF6DA38E655C5343D6D1 /* KWChangeMatcher.h */, - EA8585B56852B46E508FD08B6C823A46 /* KWChangeMatcher.m */, - D3FDB6AA039FFBE479D3B6BE00ECDDB2 /* KWConformToProtocolMatcher.h */, - 55CAA81803BC6BCCFDE945EF268F8771 /* KWConformToProtocolMatcher.m */, - 858596D1E2B6DDD117D916BDC840B0F3 /* KWContainMatcher.h */, - EEB3C2CF34C83353123649627A27A1F5 /* KWContainMatcher.m */, - 6A0D6BE5A1A3D083857535B59130F22F /* KWContainStringMatcher.h */, - 7C371DADD680E8526B1D22A68954751F /* KWContainStringMatcher.m */, - E1AA21C16F518FCC31B91D0C8121A32B /* KWContextNode.h */, - 582D1BA91C91848BAA7679EC5B0DDC5B /* KWContextNode.m */, - CD00FC7C0D4F5986EC95FF1930E6E0B4 /* KWCountType.h */, - 005B2B1D99C70566603A831CE339476D /* KWDeviceInfo.h */, - EF7E804BF9C7328041BF469AAB3C3F94 /* KWDeviceInfo.m */, - F8970477CBA0D4CE8AC4CD999A16A89F /* KWEqualMatcher.h */, - D3E5B49E71FBC5D3D57A69A2847FC244 /* KWEqualMatcher.m */, - 9CEDB82BE87A9DE947ADCBB986F7F0E2 /* KWExample.h */, - 32F75FFE1483BAD2A9B1F1E6F2DEC3ED /* KWExample.m */, - 769716EFAEAB6B5B82EF275FDBDFE5CD /* KWExampleDelegate.h */, - CA15364124A35A523861701A737B2050 /* KWExampleNode.h */, - B12DC5955AE75B90D7B424A24F73429F /* KWExampleNodeVisitor.h */, - AAE755C4D2B948424407327B2D2526BB /* KWExampleSuite.h */, - 6D09A59114787B42FD5795CECE6D8CB5 /* KWExampleSuite.m */, - 5B6FECDCE58BCACC63263B1DDF19DD7A /* KWExampleSuiteBuilder.h */, - B34120FCA27B8399BC044D3E163B2B9E /* KWExampleSuiteBuilder.m */, - FB68D2A2826E6E9A98D2D20CBF950058 /* KWExistVerifier.h */, - C3E31A10909090D07F9DDC8388999166 /* KWExistVerifier.m */, - D674097F2A8397C64C5F24C8B7B541E0 /* KWExpectationType.h */, - 762B308598A35E1F8271A22397E3A249 /* KWFailure.h */, - 9ACA314E0143ADB6E97BD655EE5CF15F /* KWFailure.m */, - 80E8E343BD4901132D1662E1B71A5C8B /* KWFormatter.h */, - B2C8A58A3763022C07A0A2665FBD355D /* KWFormatter.m */, - 789582586C33A6BCC215BA4D6AA12DBA /* KWFutureObject.h */, - 2A84362EAE244EA14455DA44B16BDA27 /* KWFutureObject.m */, - E3ECC77519D5DA8970A9C32D46694452 /* KWGenericMatcher.h */, - A2EAEE7FAED682993269EB0E92896302 /* KWGenericMatcher.m */, - 396816D9E5F31F28CF8E53ACD9B5EAF0 /* KWGenericMatchEvaluator.h */, - 1B1BEB4892CE731D4E254642292B6794 /* KWGenericMatchEvaluator.m */, - F26D8568AE7FF12B20F938356EFA3DFA /* KWGenericMatchingAdditions.h */, - EC8DAC76DF33B9749560A11895897597 /* KWGenericMatchingAdditions.m */, - BFAC397DE1A16F31A42F848466BE711B /* KWHaveMatcher.h */, - FBEB97F64BED10022C01ED0007804DCA /* KWHaveMatcher.m */, - EA067679DACE23737207DCBC5C7A71FE /* KWHaveValueMatcher.h */, - 6E79ECBA479AFE37BDD2F49E161B9EA9 /* KWHaveValueMatcher.m */, - 686293D6D891D055AEB9EEBCBBE4D899 /* KWInequalityMatcher.h */, - DA2EE90055A8B82253B93119890AE3D3 /* KWInequalityMatcher.m */, - 0B08539F9B110139ABE0D9EADE8207FA /* KWIntercept.h */, - 250102B2641534FFFF30D00214484F3B /* KWIntercept.m */, - 4C7667E0B307A05264E424C2BC2A1752 /* KWInvocationCapturer.h */, - F1F977DF8BCD02FC5A580EB41D6AB3BE /* KWInvocationCapturer.m */, - F004F52877876F1A61FCEF93560ABE60 /* KWItNode.h */, - 6BCF7E95B63229910FC0BAB98CC2162F /* KWItNode.m */, - 1EFE1FEF36B081CD1CF0B5B53AB7572A /* KWLet.h */, - 8666736B6E4F8EFC924EA2175D618D86 /* KWLetNode.h */, - 6E8BD4235F01DC878576F7B168C13D70 /* KWLetNode.m */, - A730A631115BF7B3FF61B6CF533CDB3C /* KWMatcher.h */, - 87295E3B2C6AD956D0AB92AFEABCA935 /* KWMatcher.m */, - CF6F8C3BC53E13F137F43AC78C8C60CB /* KWMatcherFactory.h */, - 1BEA6A7624D9109C8253BB4B3526F6FA /* KWMatcherFactory.m */, - D0BC3F75A68A4AA83C7DE5053A9B5E54 /* KWMatchers.h */, - 3BF9ACB2AE022D16234D321A2FACA6B3 /* KWMatchers.m */, - B12610BFFAFA7634F7CA2F6F8ED21622 /* KWMatching.h */, - 89E7989161CF752A49A85942E5EAD81C /* KWMatchVerifier.h */, - 403524B87617B8662E5F1ED7CAC93DE1 /* KWMatchVerifier.m */, - 164B6172F43D9DD2FB14C9FC3E465B61 /* KWMessagePattern.h */, - F1BAEFA5425B4E8E923F257743648A58 /* KWMessagePattern.m */, - 67A8CFD94754CF8F4D07C4325B36361F /* KWMessageSpying.h */, - F88F56BA01E5297E31E0FA3C84F77CD0 /* KWMessageTracker.h */, - FDAFEE7C119494686BA4F1BCA53175F3 /* KWMessageTracker.m */, - EDCFAF3040C2DD96AAED36B2E26A803B /* KWMock.h */, - 091F6533D95D3F82D1D73EB24DE13117 /* KWMock.m */, - AE51716D452A7AA7CAF27A010B3B1B17 /* KWNilMatcher.h */, - 2AE3618AF3A807E30640D29B9D62A0FD /* KWNilMatcher.m */, - C4678787E1AB54ED9E5C916D5D2740C1 /* KWNotificationMatcher.h */, - FDA779DCC3BD7ACE5FD1535132F62D50 /* KWNotificationMatcher.m */, - 777842B9BA230B2B733783D7627054E4 /* KWNull.h */, - C3C73599A171B04402135F0045DB6440 /* KWNull.m */, - 8E270D7A8C3278212C51A9AE9875DFA0 /* KWObjCUtilities.h */, - EEEAB753BD3BA27455A48E28F235FFC0 /* KWObjCUtilities.m */, - 05BBC8716924B099B24DED9011BA83CF /* KWPendingNode.h */, - 268D063A6883AAFA4B2184579DC80DEC /* KWPendingNode.m */, - 0199501A652AF0056C6F91909403D23A /* KWProbe.h */, - D0F5EAE3FEFD7D16931D94440C5C2640 /* KWProbePoller.h */, - BB882793B9DBCF0897148003653A77EA /* KWProbePoller.m */, - 0BE12CC3269477CCFFB8157A10045C9A /* KWReceiveMatcher.h */, - CFF7D7E2DC6B72F9BA8F55FF45F5E35F /* KWReceiveMatcher.m */, - B3E57C099AFB0284A34812A14D60C736 /* KWRegisterMatchersNode.h */, - CDB9393C6942884F8F37594AC2D053CD /* KWRegisterMatchersNode.m */, - CB7988659B8D0453862C8DBFEE1BCF01 /* KWRegularExpressionPatternMatcher.h */, - B6A4239702652A6FC912E672FC68B3A4 /* KWRegularExpressionPatternMatcher.m */, - 2075DE20452D70AF4C8F0608C89F0D01 /* KWReporting.h */, - E84C9E7F0C2A3D2B4FEFDADB324E751F /* KWRespondToSelectorMatcher.h */, - 479D309CA8E1BEF620799415713816C0 /* KWRespondToSelectorMatcher.m */, - 5B000FD8B040A661021569476ACE6C7C /* KWSharedExample.h */, - E8110A97D1EDBFFEEB005A252C4AE48B /* KWSharedExample.m */, - 6EB1DC83DB05A4D81887ADD3989C3CF5 /* KWSharedExampleRegistry.h */, - 6BA98C5109DF92A7091500CA9F577985 /* KWSharedExampleRegistry.m */, - C30C42E83D625842CA51E14A352A1730 /* KWSpec.h */, - C5A4255923576850B742DA28725168D4 /* KWSpec.m */, - 2430F14AF4E02491DB99ECEF0EB9D7B8 /* KWStringContainsMatcher.h */, - 5FF6104D3C5057AEFCFB3E9F7B08D70B /* KWStringContainsMatcher.m */, - F6BC56669880182667440F68022DD696 /* KWStringPrefixMatcher.h */, - 714445869234D7313CAC207E8E49CB2B /* KWStringPrefixMatcher.m */, - 98ACEC38FF17A6210FC4460370C6511A /* KWStringUtilities.h */, - B029CE1A0D08FE143C70FF775D2D2577 /* KWStringUtilities.m */, - 1D6BA5B9E35F33E11A90F5B214869F81 /* KWStub.h */, - 029FDEB55587E1FEF6A37FEEF9F3B49C /* KWStub.m */, - 3271DE4046C0E295B9ACEF6734EB4379 /* KWSuiteConfigurationBase.h */, - 7BD0189544899A0ECC6922F98ABA4A58 /* KWSuiteConfigurationBase.m */, - BA634CD3FE0CA4FA09967589A58251D9 /* KWSymbolicator.h */, - 4620A2EFECC91D5B2BC57408ACB88FF3 /* KWSymbolicator.m */, - 156B62BCCB956217CBE64076766F767C /* KWUserDefinedMatcher.h */, - 95E1E3ACA4E79912EF2ACFD5C87CD71A /* KWUserDefinedMatcher.m */, - 0626363125CDD5D9D261AEB8583BA659 /* KWValue.h */, - DA46D3F27032D6EB1DB22E0B94CA9C13 /* KWValue.m */, - DC0048376B27012F8AC78D94BF4FB425 /* KWVerifying.h */, - 91F045C7FBE712D986B3AE68AC3A8066 /* KWWorkarounds.h */, - AF1E68C22C7CE433159BB87B4AA4057C /* KWWorkarounds.m */, - 4534E92144113514FF781D329C0DC14A /* NSInvocation+KiwiAdditions.h */, - 38AAAC7D834864F18DBC14FA0F8167C5 /* NSInvocation+KiwiAdditions.m */, - A1AA55BA7D4E8D01106AE351F059026C /* NSInvocation+OCMAdditions.h */, - 5315385AB126C983262A4C35B649DA0D /* NSInvocation+OCMAdditions.m */, - 727E989FEB0057A0A1DDE266B09916B6 /* NSMethodSignature+KiwiAdditions.h */, - CB613EAE00447E96C112162DC5BFAC0C /* NSMethodSignature+KiwiAdditions.m */, - 65D65B91DEE2D37C88E4D0F151ABBB8E /* NSNumber+KiwiAdditions.h */, - D949ADD152BD58709168BC535C232214 /* NSNumber+KiwiAdditions.m */, - 99F53054DB1F2904A5D1C8EEFA5E4871 /* NSObject+KiwiMockAdditions.h */, - ABC04AA4297C9708E61239353401AB6A /* NSObject+KiwiMockAdditions.m */, - DA63EB735C260E3F5B92A994DB037D12 /* NSObject+KiwiSpyAdditions.h */, - 77AAA51322E2BCA46E4D48A2DF760432 /* NSObject+KiwiSpyAdditions.m */, - 5C9C59BEEF33305597D72116E6F50099 /* NSObject+KiwiStubAdditions.h */, - F2DE7F1E80B0689BC500E7D1F96C2D11 /* NSObject+KiwiStubAdditions.m */, - 8C23E8D09BA0D573548361DB6B47CEBC /* NSObject+KiwiVerifierAdditions.h */, - AF8AD4F597FDE31FA4568204559DEF92 /* NSObject+KiwiVerifierAdditions.m */, - 5090AD051FCC9F02DE41901D46683F3B /* NSProxy+KiwiVerifierAdditions.h */, - A3833F55E13A27F0236EDD1E517126D9 /* NSProxy+KiwiVerifierAdditions.m */, - 9B4095F2D8D857B73FFDC8EA9C0A88D5 /* NSValue+KiwiAdditions.h */, - F3F23D55832D16C9B6128C5C802ADD82 /* NSValue+KiwiAdditions.m */, - 5AB34CCDF324451978E6DCF3E186C602 /* Support Files */, + 47C34F887255DD70812D037D439C2F38 /* Bolts.modulemap */, + 90A0CDD44C88ABABF8E2581159187211 /* Bolts.xcconfig */, + 7AF170D779D94E7073CA0E21DCE1A57A /* Bolts-dummy.m */, + 1120EE82EEACB70AFBDA72644B470C6D /* Bolts-prefix.pch */, + 3881FEC60346A6F70CF179183F93E8ED /* Bolts-umbrella.h */, + 95EEE8255E4785B16734B24989DD0B26 /* Info.plist */, ); - path = Kiwi; + name = "Support Files"; + path = "../Target Support Files/Bolts"; sourceTree = ""; }; - 3666F4D0B393155ADBF6845F5DEAEF0E /* Products */ = { + 36603419F6331477850D3C4D2F3853C6 /* Support Files */ = { isa = PBXGroup; children = ( - D29AE152234D7E9ED6BB9E268E360342 /* AFNetworking.framework */, - F061183A891A4FF9A47BD9C0848C2C91 /* Analytics.framework */, - CD0F71730B9D6AB69DE19F033F66855A /* AttributedMarkdown.framework */, - FDD1B4F7FD00D7E00CAA6FF5763FF437 /* Bolts.framework */, - 602D5B4A2D3EC283C37AA6C0DB230566 /* Bugsnag.framework */, - 62547BE0EFFB6746BF8AC77A5898CCAA /* CGFloatType.framework */, - AB90A3337BC09697B9653E56DB3D784D /* Charts.framework */, - E4F44AAF964656661411470D1324D043 /* CocoaLumberjack.framework */, - CB4312433C11C86855F279DDE8F86082 /* FBSDKCoreKit.framework */, - 95BEF081DD85201D6C0773869F33DFB2 /* FBSDKLoginKit.framework */, - 38E0FA76EACC964A3F7330D4210DF747 /* FXKeychain.framework */, - EB0D1682759C19830F3613C2837A11DD /* iOSDFULibrary.framework */, - 9F73A65E98CE2A8D7DAD127AE3719994 /* Kiwi.framework */, - ED2AA8A577A6D3025F76AFB3BA46E64A /* LGBluetooth.framework */, - 6C4B11940DC6C84BB45B21E54993B612 /* MSDynamicsDrawerViewController.framework */, - 05413D01DAA48E6980978FAF24CC19AE /* NAPickerView.framework */, - 90254E16969090DD11255755A1757503 /* Nocilla.framework */, - E61014AC0F89AB3912B578F179235264 /* NSJSONSerialization_NSNullRemoval.framework */, - C4926766361AECCFA6BF257B7294EB1C /* Pods_SenseApp_RoomConditionsExtension.framework */, - BBFBAF35E05A49890D4AEF7040123E02 /* Pods_SenseApp_Sense.framework */, - 150CED8952F15D90BD416EC8034C5D4F /* Pods_SenseApp_Tests.framework */, - 25DADC976206B05A4E61599B67744C10 /* ProtocolBuffers.framework */, - 47EA9ACEA078CB001C8A170866F672BE /* Realm.framework */, - 2D8AAACFBC67DB2EAD6544A9609EC5D5 /* RealmSwift.framework */, - 1A8176005DC3CAAC81E287FF2A387496 /* SenseKit.framework */, - 7AE29341239991F2189F4F9CBA3510BC /* SORelativeDateTransformer.framework */, - 8B8D15485FBA0D33480F9745E7B2EB49 /* SVWebViewController.framework */, - 9294F07846629BC4D9512925A0FA82AD /* UICountingLabel.framework */, - AE06D149017B2BF174DAA5B09DF24D57 /* UIImageEffects.framework */, - 0A522DA25116D8184D09800C645CE093 /* Zip.framework */, + F6F069AE28F5FE66373B327046BBC352 /* CocoaLumberjack.modulemap */, + 1FBAD0B0A37A9499F453632CCAD49715 /* CocoaLumberjack.xcconfig */, + 46CCD8B212E1195A63718F808E7903E4 /* CocoaLumberjack-dummy.m */, + DDD91490D1C3B8169D15425583B2837A /* CocoaLumberjack-prefix.pch */, + 06E5FF3AAFACAF5BFA9972E8CF9C0C98 /* Info.plist */, ); - name = Products; + name = "Support Files"; + path = "../Target Support Files/CocoaLumberjack"; + sourceTree = ""; + }; + 36B4334743277767A0895EA3138E5246 /* Support Files */ = { + isa = PBXGroup; + children = ( + 536C999EE8C6AE244FF77A1A998AB39E /* CGFloatType.modulemap */, + 18D9ACFC3C2AC96A447DFB11AC3EB23D /* CGFloatType.xcconfig */, + 9DBB79136FA8EE8E93579952124697F4 /* CGFloatType-dummy.m */, + BFB371350B65D32D5C5234E3DE9647D9 /* CGFloatType-prefix.pch */, + 6A00450CA43702F847DCF3C9FD344967 /* CGFloatType-umbrella.h */, + 6DFE5A0DC97CF8E53CD39FA2A5CE7009 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/CGFloatType"; sourceTree = ""; }; 39158816A7D81DA63E32D935451A28E8 /* Pods-SenseApp-Tests */ = { @@ -4198,938 +3844,803 @@ path = "Target Support Files/Pods-SenseApp-Tests"; sourceTree = ""; }; - 3CE6BF1DFEE94FF205840F0641088662 /* Support Files */ = { + 3C3190B407CB5E1B323D103CDCDDF3F6 /* ZendeskSDK */ = { isa = PBXGroup; children = ( - CAA4D5D7BF941C0E2813DF459D54348B /* Info.plist */, - E51929AB20E40F6E319DDF46C95AA7B0 /* Zip.modulemap */, - 077AA11A892C49D3A1D490C67F9F3B2B /* Zip.xcconfig */, - 697B3DE7E213C6C547675708C5C67796 /* Zip-dummy.m */, - 83D4705738C250F49F87637B3B3915F0 /* Zip-prefix.pch */, - 786DBB3D1F79F530BDF99E5341613264 /* Zip-umbrella.h */, + 4D4021657816CD4B416D23CCCFE2DD8D /* Core */, + 921E410E0246CE92C5B3145B30C956A0 /* Localization */, + B2F863348C90AAD9E1EF28821DEEB6BF /* Providers */, ); - name = "Support Files"; - path = "../Target Support Files/Zip"; + path = ZendeskSDK; sourceTree = ""; }; - 400B0E3D91BDD2E283900C157830C3CD /* ZendeskSDK */ = { + 3E26FEAAF65740F9E37DF5262D689C02 /* Extensions */ = { isa = PBXGroup; children = ( - AB85800B79B4EDAB8E9B6A1F68649615 /* Core */, - 8D85FBE198BE29E718B0AB672BB1178D /* Localization */, - 0C0C6E5D68EE9645594D785FAEB6C473 /* Providers */, + 0924E45750440DCC9F908217D04F4FFB /* DDContextFilterLogFormatter.h */, + B0183AC85783EB3AB775C3734559D88D /* DDContextFilterLogFormatter.m */, + ABA1CB344BA9A8F8E667F23B2F5B9F34 /* DDDispatchQueueLogFormatter.h */, + 29AF42ED7441FE0FB92725F1A36EEBB1 /* DDDispatchQueueLogFormatter.m */, + 954914C5496DBC1A6DAFB34632F47607 /* DDMultiFormatter.h */, + 16E0E24BA079C1A220065D1EDB65EE38 /* DDMultiFormatter.m */, ); - path = ZendeskSDK; + name = Extensions; sourceTree = ""; }; - 40133E953D895BA14D7EB96DA44AE66C /* Bugsnag */ = { + 4514D9DA853AB26139429A167E777823 /* NSJSONSerialization-NSNullRemoval */ = { isa = PBXGroup; children = ( - 31DDB832F39B94D22A96572AA28E031B /* ARCSafe_MemMgmt.h */, - BFA9ECC9AC50E75EE7FE66078136510E /* Bugsnag.h */, - 3EC0FBFC18DCBAEAF3A9FB952D35BBCB /* Bugsnag.m */, - 20821F17C4996D30BF385DA5EC9CC331 /* BugsnagBreadcrumb.h */, - 23049F14FC6B811C1730AAE5E492A864 /* BugsnagBreadcrumb.m */, - 02555F1AF4720EFD3347A76FF7BA263B /* BugsnagConfiguration.h */, - E3D9CE4361AC371112DCB74EC913794E /* BugsnagConfiguration.m */, - 4176A18E901462C0F22443A9F23AFC0C /* BugsnagCrashReport.h */, - 3D5368988C81FD5B1945594CA1CEFF2A /* BugsnagCrashReport.m */, - B8DFE631CADF34C50ADD879FF7778AA0 /* BugsnagIosNotifier.h */, - FF98F4AEE6DCA028B854D85C53226B31 /* BugsnagIosNotifier.m */, - 8438E722662ECB830B77290473FEC6E8 /* BugsnagMetaData.h */, - 5C3A44A90FDE032EECE4BEDCD85DE400 /* BugsnagMetaData.m */, - 9A7DAAD1AD5D1B8A0F1EE46D36B90281 /* BugsnagNotifier.h */, - 885159B118BD562C1CE7FD160D67C55E /* BugsnagNotifier.m */, - FF7F333B993AF9FB2C54D157746AC40A /* BugsnagOSXNotifier.h */, - 797652F0E7C3369AF97E5A640E1F4180 /* BugsnagOSXNotifier.m */, - DAD661C4430C2FCCA9C275729E82AB7E /* BugsnagSink.h */, - F981202C5A645974FC60252205341F2F /* BugsnagSink.m */, - BDEA75DCD03866CB6CBB0D5D7BAE9765 /* Demangle.cpp */, - 1A9F819292239D287998FAF9D4B5CA71 /* Demangle.h */, - 082161FFBBBEDB9362B0C68D3DFDB42C /* KSArchSpecific.h */, - D5364E0BE46106CF182B9C1EDF7F88D0 /* KSBacktrace.c */, - 5830AD37E44D720C4FDD0256F5221BEF /* KSBacktrace.h */, - 4D8B35A44366533135C7F84176C8858C /* KSBacktrace_Private.h */, - 23B3362A6ED08DF78E22202739F1B852 /* KSCrash.h */, - DE9BCB56B974CBA921D9DE4130DEE9BD /* KSCrash.m */, - D0E994B030917EFFDD4EBA37B7647DBF /* KSCrashAdvanced.h */, - 56ADDC1C84254928EF7E862206BBCDA8 /* KSCrashC.c */, - C5FBA85D548D02A296BF546FAA181C19 /* KSCrashC.h */, - 01A5A0D73E06BCA9AB5C5164E8812CE0 /* KSCrashCallCompletion.h */, - 67F0CCB02DE8228ACACBFCF514176539 /* KSCrashCallCompletion.m */, - A7CE26D858384B890FF3081E99C3A434 /* KSCrashContext.h */, - D924FB5F733AB5EC0E82DF64F8F13044 /* KSCrashDoctor.h */, - CEDC7A36AA1912CAB21AF81B1B666E06 /* KSCrashDoctor.m */, - 5F8F0D44028248D41FF5604705886310 /* KSCrashReport.c */, - E41CB6C4639F6C33D667107B56B3993F /* KSCrashReport.h */, - 6474085461E7ED2A41152B5AE3C3F6FC /* KSCrashReportFields.h */, - BB48CB8F493F3B714762A97DE65FEA4B /* KSCrashReportFilter.h */, - 9A7CFF90D6ADD6462393FA92422B7254 /* KSCrashReportStore.h */, - 86C1D6F5D3425F46E5897FD29102DB98 /* KSCrashReportStore.m */, - 0BCA2FBFD8FF314B3B64038CBFA83765 /* KSCrashReportWriter.h */, - 49FF41778899642202567A04C468C457 /* KSCrashSentry.c */, - 382C6AB7BD5403500A3596D3DB318BE8 /* KSCrashSentry.h */, - C3C701635A98AD9C6780BB85C54F3E5A /* KSCrashSentry_CPPException.h */, - FD7F5F52651E4A91F2CE8A4D56336F90 /* KSCrashSentry_CPPException.mm */, - 5DE39AA6C157ECA49038240FB2A44D05 /* KSCrashSentry_Deadlock.h */, - 7B75AADA89DE37AAA46AA2C368F36510 /* KSCrashSentry_Deadlock.m */, - 4F6F271A834494DA6F56EF87823EB31E /* KSCrashSentry_MachException.c */, - 271D9C8810174C3C23632B09561A4CB9 /* KSCrashSentry_MachException.h */, - D1FA879988DFBD1E79A73C4857F67A88 /* KSCrashSentry_NSException.h */, - 3771A3F3495620D6215F1A5E8FF62289 /* KSCrashSentry_NSException.m */, - 1AA6DB4138821E78C6808DCE198ABD2D /* KSCrashSentry_Private.h */, - 2BE3000B2EFC03130811B011E36D2291 /* KSCrashSentry_Signal.c */, - C58094B9497A83E4B8BEE88FE590E716 /* KSCrashSentry_Signal.h */, - B39E8EE70FCC59A7A678CBA7ED03C60A /* KSCrashSentry_User.c */, - 3CF78509F42760DD61CD157AE9FF35E9 /* KSCrashSentry_User.h */, - 028AF39A2DEB4483CF2888C56FC12EC7 /* KSCrashState.c */, - 6EAD5F21D5593EE03643EF45EFC5B689 /* KSCrashState.h */, - 4FDE2FF9AB0B4FEA619393617FAF0C90 /* KSCrashType.c */, - 88FF2C710E7733681C75C23AE227162E /* KSCrashType.h */, - 48B724EB833CF23B95CB4678B9819301 /* KSDynamicLinker.c */, - B4A57255F49E31065267F6D57E66D936 /* KSDynamicLinker.h */, - 91A8CC54A1F4CB30DD5CD7469DFB4964 /* KSFileUtils.c */, - 9608C3E1620EBF92E324A433F8B653BF /* KSFileUtils.h */, - AD9E0F75381358758A138816CE677450 /* KSJSONCodec.c */, - 5F26F60C58B5086675213C03F68C69EF /* KSJSONCodec.h */, - E86A93AF6C2718BB4A8BF5D3C3078303 /* KSJSONCodecObjC.h */, - 46265E4111BCFEFEBCFAB223A62378DF /* KSJSONCodecObjC.m */, - 2997C72CBD2E2EEAEDEE841C252B2185 /* KSLogger.h */, - 5BA2ABF5831039B90E361528BB2EF38B /* KSLogger.m */, - F0059D77D85FEE3DE2EC9E06727B54C0 /* KSMach.c */, - 2FEC7C9FEB834149ECA850E017AADC32 /* KSMach.h */, - FA75C4A76644A7446D33932681D6A909 /* KSMach_Arm.c */, - 0D70E172606FA6FF336E593DD8572C8A /* KSMach_Arm64.c */, - D81F931D893AB2A61601A60D9A6CA848 /* KSMach_x86_32.c */, - 5740D4AE9F17AC1109ED3E102909EA5F /* KSMach_x86_64.c */, - 6BF7A4A8A151D05D3F15BB7655ADB9BB /* KSMachApple.h */, - BBD9584B1F762014EEA0374D27999328 /* KSObjC.c */, - 1FD7BD8D8587E668D455BEDDDE49E356 /* KSObjC.h */, - 2A3296304D2422064400F80D1EA9C9E2 /* KSObjCApple.h */, - 88DD9EE3D84A36D7E110CEF4CE795153 /* KSSafeCollections.h */, - 7E0136B6FBD8E625C2B5CC9003001A6D /* KSSafeCollections.m */, - 28E86BA05425BBA62D2C1C26C9911362 /* KSSignalInfo.c */, - F02A2E0797EFCBAC0939817CEE5B0E96 /* KSSignalInfo.h */, - 7DD5A92764853FEEA688048ADEE7D25A /* KSSingleton.h */, - B7A2600C97DC456E250225D8427B2495 /* KSString.c */, - 6B840FFC0E8488ADD5153CF1157D2C73 /* KSString.h */, - B32A10CAFD282C633662C18C5CA6E1DD /* KSSysCtl.c */, - 8F4E64E46DD16E6A5D22D3582C8C4580 /* KSSysCtl.h */, - 2359FCA43EDCD88146BF63025778B1EF /* KSSystemInfo.h */, - FA6FD443027BDABFA606A45A8C4CF004 /* KSSystemInfo.m */, - 39B3692CA0D8AD1C21372637BBE1FE96 /* KSSystemInfoC.h */, - 0DA11B64BF64D3009D2534C91770FAC2 /* NSDictionary+Merge.h */, - 0F5F32160CA718EE51EE6B984770A4D9 /* NSDictionary+Merge.m */, - 54F18837E2F4DE450ABB011630A4E017 /* NSError+SimpleConstructor.h */, - ADD0BB8A35BC54B61F87561028EB4B6A /* NSError+SimpleConstructor.m */, - 4DCD2E1F65F90F5F885C5DD004E94E12 /* RFC3339DateTool.h */, - F388A276B166D828FCF4FE8B945033A5 /* RFC3339DateTool.m */, - 904F2B5223E295A8FD78DD86B266717A /* no-arc */, - BE40A28513D0CEB4E10F1A9CF47EF53E /* Support Files */, + 4C0B9EB4F70A6CCDE94EC3871F40B238 /* NSJSONSerialization+RemovingNulls.h */, + 2D1EE5B9BD79692F1B032B55FED2399F /* NSJSONSerialization+RemovingNulls.m */, + A41481763D590D1A2E18831960CF3ECD /* Support Files */, ); - path = Bugsnag; + path = "NSJSONSerialization-NSNullRemoval"; sourceTree = ""; }; - 4031DE93E1CAD76EF302226F1BB08237 /* Extensions */ = { + 4D4021657816CD4B416D23CCCFE2DD8D /* Core */ = { isa = PBXGroup; children = ( - 350A9813498B8BA8E395D25069CB0B49 /* DDContextFilterLogFormatter.h */, - 073F61C7D7ACBDEE644202FADA6CB3E0 /* DDContextFilterLogFormatter.m */, - ECBFBE3EF17D61164083CD99EFF0C452 /* DDDispatchQueueLogFormatter.h */, - AB7CA6BBB13D63DC23395C26709F0C42 /* DDDispatchQueueLogFormatter.m */, - 4F025C1E2DF6A110E4C269AFC5C6F531 /* DDMultiFormatter.h */, - ABA580A70A3D9B5C4BB8200B02A25AF3 /* DDMultiFormatter.m */, + 0FE4EA7D022F7D411BCAD8BEB4D66E24 /* Frameworks */, + 71379196523F9A26F83D04B454BC2B37 /* Resources */, ); - name = Extensions; + name = Core; sourceTree = ""; }; - 4254CF155EA090C99AE584AFF3F77FD5 /* Resources */ = { + 506884A2324451FEC68AD0FBB9DC4F82 /* CocoaLumberjack */ = { isa = PBXGroup; children = ( - FDB9BD6B074A263470C3EC2F8DD63C80 /* ZendeskSDK.bundle */, + B254B3262433AA601DB4A5C3E340DF46 /* Core */, + AAFF2DF79CB4EF6569EF285986AF4BBC /* Default */, + 3E26FEAAF65740F9E37DF5262D689C02 /* Extensions */, + 36603419F6331477850D3C4D2F3853C6 /* Support Files */, ); - name = Resources; + path = CocoaLumberjack; sourceTree = ""; }; - 44FC344C1572FEB348275E4B1357C455 /* RealmSwift */ = { + 530417399CAF6F45976FA4B00873E3E9 /* Serialization */ = { isa = PBXGroup; children = ( - 379561B30CCAB3FB1EB207E401FE70E3 /* Aliases.swift */, - E45B8264885AB593A118BFCDD40F308C /* Error.swift */, - FA3AFE13327AC637D3CEB920C4A59CA5 /* LinkingObjects.swift */, - 271FAF678376BE95A08994767E77DBBD /* List.swift */, - 62606A139E993335CF0244A75E4EC9EF /* Migration.swift */, - 3F3141B93F93E788E70D60984F4D40EA /* Object.swift */, - A2F24E265F6F8AA64DC3DBEFC10AE7E3 /* ObjectSchema.swift */, - 0B201480098CE38EDB14C7D2ED45764D /* Optional.swift */, - 204B0E37E91052C9827449336E47F44D /* Property.swift */, - 8A022B45BD0209C4747305F178F94CFA /* Realm.swift */, - DCAE0DF73FD39C1E33EE1CFCBE756C24 /* RealmCollectionType.swift */, - 42321C76A3C559EFCBD6C1982B454783 /* RealmConfiguration.swift */, - AB17583C3D6042671CC586691BA86609 /* Results.swift */, - 1372F7926FA69F18621B5C6B32335CD5 /* Schema.swift */, - C1982541F8C3BB1C17AA2089B12A9287 /* SortDescriptor.swift */, - F5FAA00ADDA0D7D963EA3CB511067BD6 /* SwiftVersion.swift */, - 25CC3C73DB82D655907AC89B725CE096 /* Util.swift */, - 68CF2BD40596E699CCA898699B3A649A /* Support Files */, - ); - path = RealmSwift; + 71AC4726874D4FFCC177EFA8F5174CD6 /* AFURLRequestSerialization.h */, + 27F5BB66498F247594D268A221C78808 /* AFURLRequestSerialization.m */, + ADA83585D50C3E84B6CCDD35ECC9272A /* AFURLResponseSerialization.h */, + 135043D102C75AA30101BAC3EB989A97 /* AFURLResponseSerialization.m */, + ); + name = Serialization; sourceTree = ""; }; - 45F031D09CB883C839CF89C78EA7412A /* Pods */ = { + 584595C7DD6AFD591EDA63B1ADB6B127 /* SHSProtoBuf */ = { isa = PBXGroup; children = ( - 53D2BD2A7A57AA8776459285A5CC4795 /* AFNetworking */, - 99AA42FB6CA98DD938BD3F04536A38DF /* Analytics */, - 1D89C0D14CF599E9C8113112EBCF246E /* AttributedMarkdown */, - D0B498002102BDCD1D86322FFC110F08 /* Bolts */, - 40133E953D895BA14D7EB96DA44AE66C /* Bugsnag */, - CD6C7C3236CA609467A91D2B33DBAF91 /* CGFloatType */, - 024B8994AB0BF7FD888F63C489E25BE8 /* Charts */, - 7A3EE7DE00ADB451B6C35183D14DB9C3 /* CocoaLumberjack */, - C717FC5AB921905C104EC7ABB9E85BB1 /* FBSDKCoreKit */, - 80929039C18081B1B00A80F15C810CDF /* FBSDKLoginKit */, - 6D709E3F6CE239BFCE8242C7AD3E4F06 /* FXKeychain */, - E7A6D1751C2632B720781CDCA7801166 /* iOSDFULibrary */, - 34781B13A599ACEC07C80A45DE97B41E /* Kiwi */, - C02CC405C826C63C0096D3364657FAA4 /* LGBluetooth */, - 46EF53325C7F3BD4C53EE80EF9C08A66 /* MSDynamicsDrawerViewController */, - 5391191490EA3E3528E10EE0E55FBFA6 /* NAPickerView */, - EE7B7DD7C668913D044C560194FC304F /* Nocilla */, - 1E3BEF660D4E5984EF9C01BE411B9BAE /* NSJSONSerialization-NSNullRemoval */, - 8EF4192E06AFB9FC6EFA8B5AC173A299 /* Realm */, - 44FC344C1572FEB348275E4B1357C455 /* RealmSwift */, - C74D5EFFE47E39567F8A15B30955E913 /* SenseKit */, - B299F895B340F901A126CC8C71AD8B6D /* SHSProtoBuf */, - CFFE28CE28536558A34C0E4DD7E1400E /* SORelativeDateTransformer */, - B5E94B72E282487E65FCB6FB91EA1336 /* SVWebViewController */, - 797FE2663D67A685DF230EBB803EF284 /* UICountingLabel */, - 2108B3C795DAFAEBC81C8F64EEBEE03D /* UIImageEffects */, - 400B0E3D91BDD2E283900C157830C3CD /* ZendeskSDK */, - 8B251B6AB723B9A60A04E2F30CB4755A /* Zip */, + C65EA4EEA9FD3852D79BCB2263A33654 /* Descriptor.pb.h */, + 0B92E956F8ECA8E03243AAE63D0FF692 /* Descriptor.pb.m */, + 06003EE40F96B3A22DF4EE350C9A8E60 /* non-arc */, + 9A504DAB4837A6E509FC30ED70CB307F /* Support Files */, ); - name = Pods; + path = SHSProtoBuf; sourceTree = ""; }; - 46AB8777D625F0FFFBB2859A9DEF93D9 /* Reachability */ = { + 61F7265F1166F8DA2A296C6151204171 /* LGBluetooth */ = { isa = PBXGroup; children = ( - 45E4D820020E565CCEAB317B99850629 /* AFNetworkReachabilityManager.h */, - 455360A2E0C59FB3C6CDE2A2531E4E5B /* AFNetworkReachabilityManager.m */, + D962C8823B63CCB85B3467679FC87B11 /* CBUUID+StringExtraction.h */, + EFAF329A734DA62AC240F7C25E469096 /* CBUUID+StringExtraction.m */, + D772589458602A99BA6C118DB28859CD /* LGBluetooth.h */, + 3951ADA500CB23F69ED8E388B5FE1362 /* LGCentralManager.h */, + 039953BBD1A7BDB50F1CF23E11BE2F0A /* LGCentralManager.m */, + 5F32E88337347DBE8B0AFF6293CB01CE /* LGCharacteristic.h */, + 14C5B8109B13BB75C6C86615EE9C0DB8 /* LGCharacteristic.m */, + CDC21CAEAFD586731B598F62753B141A /* LGPeripheral.h */, + FB4866EA530FEBC25946B0A0C0188963 /* LGPeripheral.m */, + F741884A12A12EAB0D35C911BAED5B5C /* LGService.h */, + 015EE0A07A34B40175947D1DB3A2B48B /* LGService.m */, + 52BE9E5F8F58FB77AB70F9316672E5C2 /* LGUtils.h */, + 8AD3B15C978F14BA92C2F5BB22F9410B /* LGUtils.m */, + BAA5BF58C2085F4775FD6106FD5B4E02 /* Support Files */, ); - name = Reachability; + path = LGBluetooth; sourceTree = ""; }; - 46EF53325C7F3BD4C53EE80EF9C08A66 /* MSDynamicsDrawerViewController */ = { + 62E85A732593174AE17FD1942FC60222 /* Support Files */ = { isa = PBXGroup; children = ( - 532DFAE1DAAB438F6721626EDFFAEA37 /* MSDynamicsDrawerStyler.h */, - 9157BD7A05C708E4691A92D45A1946C8 /* MSDynamicsDrawerStyler.m */, - B89ED9C2EDA6BCF9DBAE94B86381735A /* MSDynamicsDrawerViewController.h */, - 9E14F05F393D35754B7C2996D641112B /* MSDynamicsDrawerViewController.m */, - EAE16ED38F7AF84CAE7704EE74B773D6 /* Support Files */, + D31F27AEC63E575BB5015E22C0FA371C /* FBSDKLoginKit.modulemap */, + D9E5CC6A588EA57C940CD266BAD4A46F /* FBSDKLoginKit.xcconfig */, + 8A3AF312F9662D66A8FA5B81DF298B33 /* FBSDKLoginKit-dummy.m */, + A67835EBE6C6510004FDBF26325C46FB /* FBSDKLoginKit-prefix.pch */, + 6BAE7F11897517987478A031E6CC725B /* FBSDKLoginKit-umbrella.h */, + E953CEC6F1A7654FBA5E574AA57AAAC4 /* Info.plist */, ); - path = MSDynamicsDrawerViewController; + name = "Support Files"; + path = "../Target Support Files/FBSDKLoginKit"; sourceTree = ""; }; - 483D65D7B4537369CB225B697B2C9453 /* Resources */ = { + 63729D531267E31B7544B7D5ED02F03E /* Support Files */ = { isa = PBXGroup; children = ( - 68FD22DF751636116A33BC1F94A20AB4 /* ZendeskSDKStrings.bundle */, + 4615F3FFD343186A7DB5A5E8C25BDA55 /* Analytics.modulemap */, + 98C374B99BDEB336B2EE786741167878 /* Analytics.xcconfig */, + EEDA7757980382F904958872DEA755C7 /* Analytics-dummy.m */, + 0657F361303B31C0CC0BAAC164BB403A /* Analytics-prefix.pch */, + 4D940141C92F38F95FCF7ED6797F3E0F /* Analytics-umbrella.h */, + 8A9FD0924F61B550AE27D475388F684A /* Info.plist */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/Analytics"; sourceTree = ""; }; - 4E2904BD1DC03598D6BE2234BA004D10 /* Resources */ = { + 656CB99A33464127F6A59C6ECDCC015A /* Resources */ = { isa = PBXGroup; children = ( - 4B9563C351D478DF7EA8305059C3A09F /* da.lproj */, - D23A4407EE4CC5C3E277E363AC312970 /* de.lproj */, - 149DB644C51BFBF99DBFA2585D550170 /* en.lproj */, - 0DB22B5F8DE0AB034FC6711F7F6937BE /* es.lproj */, - AFF014B25AC33E01302E05E6C3825341 /* es-ES.lproj */, - DEE98A438638D16FADB378EDF7E60177 /* fr.lproj */, - 5118EEBDA728C28FF4004BC58E86A1A7 /* ja.lproj */, - 90496A03943A411ABC5742C7D97D4BFE /* pt.lproj */, - 40D07985590F3465BF7441417DC22D5B /* SVWebViewController.bundle */, - 0B351672D2D305DB049299AA14432D00 /* SVWebViewControllerActivityChrome-iPad.png */, - 7FF693E807E4131E1228248EB11151F8 /* SVWebViewControllerActivityChrome-iPad@2x.png */, - D7BEBD4F61691991021861B81046A727 /* SVWebViewControllerActivityChrome@2x.png */, - 3FDD529B0406017631A464B302260B16 /* SVWebViewControllerActivitySafari-iPad.png */, - C2ED0251619F533C9E6B1869245CA2EB /* SVWebViewControllerActivitySafari-iPad@2x.png */, - 8FD524E231DBF0BB410424DE1686F787 /* SVWebViewControllerActivitySafari@2x.png */, - A04CD6EE458BA81865538857CF32E412 /* SVWebViewControllerBack.png */, - E8C24778164233CB3E4B5642BA6F3CF7 /* SVWebViewControllerBack@2x.png */, - F751B192247A2C87CFC323A7DF40EFA0 /* SVWebViewControllerNext.png */, - 8E72EF9B0D2B303574EDF366AD3DD237 /* SVWebViewControllerNext@2x.png */, - 872B230FC2991F157DC100D8ECE2C2D5 /* zh-Hans.lproj */, - 4A43D53160B65F7FFF029B08E95A414D /* zh-Hant.lproj */, + 2131D24970D52A5961E65D0AABF0CA73 /* da.lproj */, + EB440CA4A303A6CE6E43DE42B1A93C30 /* de.lproj */, + 6D06764DC8654BCEE6DAA0B227536ACD /* en.lproj */, + 53AFC84570A1B0B02FE57DD5DAC93FE2 /* es.lproj */, + 2175CA1D1AF5DC51FDB903E9ADB88EC0 /* es-ES.lproj */, + 44C2598BA22E416BA1FB43CDA00C26D6 /* fr.lproj */, + E1BD0D41ABA1831315717543BD6157E9 /* ja.lproj */, + 410D33EC6B84F80D2A0D5DF26C5E3753 /* pt.lproj */, + 352880D70759D7A72B3B78BF540B911B /* SVWebViewController.bundle */, + 41FBCADE91D5D803B09BDFD2E6E73F07 /* SVWebViewControllerActivityChrome-iPad.png */, + 1F243912EE7B8A7980530B9394755198 /* SVWebViewControllerActivityChrome-iPad@2x.png */, + 47C7BDF17390E9CCC27A500C8114D109 /* SVWebViewControllerActivityChrome@2x.png */, + 8802FFBD754B09370D9EDF65EC13AED1 /* SVWebViewControllerActivitySafari-iPad.png */, + 5D2B89CD9830D5AFA26D97C8A4D913D9 /* SVWebViewControllerActivitySafari-iPad@2x.png */, + 4E071F1FD04E011A0809C129B3102D48 /* SVWebViewControllerActivitySafari@2x.png */, + F5D3CD7ED7A00774201114EDD34FFB92 /* SVWebViewControllerBack.png */, + 46FFBBC0CC5C5713DA70A950EC1AC447 /* SVWebViewControllerBack@2x.png */, + DE5BE835291F238ABF69F6C40F4F277D /* SVWebViewControllerNext.png */, + 296F68D613A9301963A54573178CF63B /* SVWebViewControllerNext@2x.png */, + EC290D01BC7A83145F8248E0D3824F78 /* zh-Hans.lproj */, + B4C2E29333DD23080923425CAEDE8A6D /* zh-Hant.lproj */, ); name = Resources; sourceTree = ""; }; - 51B27D773062F3A26636810C2BE7E1EB /* Support Files */ = { + 69151A6948B3A535D6560B734B87A33A /* Support Files */ = { isa = PBXGroup; children = ( - 05AE9CF44CA1255D38C2B6B0058EFED2 /* Info.plist */, - 63045B87CEEAF155EE592331C59AAD98 /* NAPickerView.modulemap */, - BD0B2928C9B2463922CF4C4F38287070 /* NAPickerView.xcconfig */, - 5BB07605523D68AB6C17519A2B85EB41 /* NAPickerView-dummy.m */, - 29B5839545D825BF05E4ABD2A4FD7902 /* NAPickerView-prefix.pch */, - 28B74ADD60DB542478B8887878D37BEA /* NAPickerView-umbrella.h */, + 7A5DF0DB4095254520A647C06FCD4618 /* FBSDKCoreKit.modulemap */, + 07FDE05A4C4273BDF0B4F808A1AB3CFC /* FBSDKCoreKit.xcconfig */, + AD0C0D6A0DE992C9F184FEDCA3E209A0 /* FBSDKCoreKit-dummy.m */, + D00DA087369EE5930D3CA1247F296A3B /* FBSDKCoreKit-prefix.pch */, + 15EB6F14E701C35227E100E0C00E90A5 /* FBSDKCoreKit-umbrella.h */, + 9F70DF06F258A6025B5B0021FBFF04B1 /* Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/NAPickerView"; + path = "../Target Support Files/FBSDKCoreKit"; sourceTree = ""; }; - 5391191490EA3E3528E10EE0E55FBFA6 /* NAPickerView */ = { + 696BC2C16B091775ED7125CB743CB406 /* NAPickerView */ = { isa = PBXGroup; children = ( - B25E7DBAD27FA79D553B249898D1D102 /* NALabelCell.h */, - 28A7D26D4AC87B19F73E601A08E8C79C /* NALabelCell.m */, - 9FE7AC9AABCA6C6F5A927CB39CAB193C /* NAPickerCell.h */, - 0D4D6DEB70DE71E7A988AF707FC8140F /* NAPickerCell.m */, - A0811B6D61467BAE276C023BD6578D1B /* NAPickerView.h */, - 58BDE08F62F4EC9EF98457424D803AB8 /* NAPickerView.m */, - 51B27D773062F3A26636810C2BE7E1EB /* Support Files */, + 57FE76F8C1B919EDF7834D12A9E28037 /* NALabelCell.h */, + 0FA2BE27CEC8725B76FDB87EBBD04E8B /* NALabelCell.m */, + 16C03B5E0A641A6613D0DDE836B65155 /* NAPickerCell.h */, + 0147AEC32573F4ED372109CA7860F7CA /* NAPickerCell.m */, + 1DB17D53856AEC6F37174A136A5DFAFE /* NAPickerView.h */, + 6B120066EB344A80959ADD129D540620 /* NAPickerView.m */, + DE64D0A2A884BF4E1BC137DA55BCC25B /* Support Files */, ); path = NAPickerView; sourceTree = ""; }; - 53D2BD2A7A57AA8776459285A5CC4795 /* AFNetworking */ = { + 697B65DB592AFBBB466F18AAD6C387CF /* iOSDFULibrary */ = { isa = PBXGroup; children = ( - BAF493C1F292DD955F857868FC41686F /* AFNetworking.h */, - CDE39D7C53C0B73D8447B4118146BDEE /* NSURLSession */, - 46AB8777D625F0FFFBB2859A9DEF93D9 /* Reachability */, - EDA688E8A295BF10A07E92C6C5DA8727 /* Security */, - 16C7793E5970AD76A6DABE5860937926 /* Serialization */, - 003B290018CA9946679A189DDD3896AF /* Support Files */, - 7FB2EF43A95B31781E232517DCCD995E /* UIKit */, + 459BAF32E23ECC559C603F2B8F7A6E7D /* crc32.swift */, + 90D468058BB021EA15FB55D7544E1B7B /* DFUControlPoint.swift */, + FE0D986BD1B6B1A6048C4828E582E07B /* DFUExecutor.swift */, + F385BB9FAC9229B8775E94E32473B8AD /* DFUFirmware.swift */, + F32C9E65963C73B0EDD7B5B4DB151BCD /* DFUPacket.swift */, + A033C59917F1A3214BCB99DCEAAAADDD /* DFUPeripheralSelector.swift */, + 14A9240D697CA4370259AF2724EBAA83 /* DFUPeripheralSelectorDelegate.swift */, + ED0356F59B497D5D73B5F2620AA9A49F /* DFUServiceController.swift */, + F334BD4C61BDF5283AFFDC093893D79C /* DFUServiceDelegate.swift */, + 2EA522A34D494369588DC424E3BE34A6 /* DFUServiceInitiator.swift */, + B6C1C82F801AA457F6C4CE0627CE9C69 /* DFUStream.swift */, + 4E6603D111B30BA8C878E34073573719 /* DFUStreamBin.swift */, + 4C0862016D3FCD28EC338BF9BA8816ED /* DFUStreamHex.swift */, + 6E1D986AB04C62A132CD0F8AD7A98512 /* DFUStreamZip.swift */, + 4C1BFB91BA98EBD8BEC804B650A85AD7 /* DFUVersion.swift */, + 01187E4F31F62A38C1230F596E0CA953 /* Double.swift */, + F7A0A975B07D45CA5DDBBFBA5AFAB4A5 /* IntelHex2BinConverter.h */, + 09F85D2AE50EFA1C401CF8D1A893E287 /* IntelHex2BinConverter.m */, + 60CE51DC8FFC5DFBA5B185CDB7CD41CD /* LegacyDFUExecutor.swift */, + 8D319E44A49DDA87FC884541388E515E /* LegacyDFUPeripheral.swift */, + DA79267AFF93C4AE75A9B2CE770974D0 /* LegacyDFUPeripheralDelegate.swift */, + C33EDCA79BB3E76F47FF05E2A0DB0BD2 /* LegacyDFUService.swift */, + 66EBA0556CBC5C94EC161FCA1CDA42A0 /* LegacyDFUServiceController.swift */, + 9A0D9B80FB8DB2FBAB56DFD4D604EE5F /* LegacyDFUServiceInitiator.swift */, + D885C5F59B246F982976891079D69425 /* LoggerDelegate.swift */, + 8323BD7F1422E912A2BD34AF05248DC2 /* LoggerHelper.swift */, + 8A3A92CA63ECA800458DB9D7A5D950CD /* Manifest.swift */, + 9AC9967AA9E3DE817AA00DD18D314C44 /* ManifestFirmwareInfo.swift */, + 1FA4571EC4BCF5A6F79E75F1C4298201 /* NSData.swift */, + EFDEEACA3362C59B22F1245394D5CCC9 /* SecureDFUControlPoint.swift */, + 0660408A46E7644069931E095ECCAF53 /* SecureDFUExecutor.swift */, + 92D8F03AFE82FEA5AD31AA1EDC177DCA /* SecureDFUPacket.swift */, + E0C6AFB7B9285CE5D210F569B4BBC384 /* SecureDFUPeripheral.swift */, + 1CA4DF27302FEBF5CBE4AEC7EA80EC3A /* SecureDFUPeripheralDelegate.swift */, + 4DF18C63133667E3BBFA83A1BF47594C /* SecureDFUService.swift */, + 914BD9515C6ECEC5BDBCA44CA21A6F35 /* SecureDFUServiceController.swift */, + C332DE91E9235F317E87D6EA66629FA5 /* SecureDFUServiceDelegate.swift */, + 6DB759A309ED61A81CC30A0F9927C8C3 /* SecureDFUServiceInitiator.swift */, + 2FE23A993C4C1090E1CDA57251710606 /* SoftdeviceBootloaderInfo.swift */, + 108B12A57F5FDAB304D3E6545083A0FE /* ZipArchive.swift */, + CE524A545782A95022E9316AB40B0A3D /* Support Files */, ); - path = AFNetworking; + path = iOSDFULibrary; sourceTree = ""; }; - 54E2EDFC2980CF8328CF0175DF36008B /* non-arc */ = { + 6CC0022EE9B32B38DA4459D498D0A9DD /* Zip */ = { isa = PBXGroup; children = ( - FE3088788DB6E65AB7680E3A9C575181 /* AbstractMessage.h */, - 4E099CA07DDDA02E8018BE1743BD049C /* AbstractMessage.m */, - BB901024AB3EBEB24EE1595B0B601EB7 /* AbstractMessageBuilder.h */, - 3ECCA6FEAAA1AAC449A8CBE2F2B56FF5 /* AbstractMessageBuilder.m */, - CBE4F0D5C9D7E0D70CDC64CD67E21AB3 /* Bootstrap.h */, - 6CEEC7DD92FE839914255D0B1A4E2ED1 /* CodedInputStream.h */, - F7C5AC344038EDF3A74044F893F804DA /* CodedInputStream.m */, - 5CFFE2785D9F2F65C82E56FD39695358 /* CodedOutputStream.h */, - 675D9A7BD582906AE368C09FE475C0F1 /* CodedOutputStream.m */, - 4506EFAC6385F3E257F0D033FFAF92F0 /* ConcreteExtensionField.h */, - 9FF3579692DBBB12636E3485570C421D /* ConcreteExtensionField.m */, - 34A2B11FA2B504E89F88996817BE108A /* ExtendableMessage.h */, - E4689514D0A2494BC57ECA59F432A75B /* ExtendableMessage.m */, - 502601D84C141A5DAC514B6A66B229B4 /* ExtendableMessageBuilder.h */, - 83BBE0F5DF8AEA0C4D305A94FA20F4A1 /* ExtendableMessageBuilder.m */, - 415701F3DD9247A5DB2A4F6AA89BC606 /* ExtensionField.h */, - 79C29EAF45C835A0C947EBE5AECDAF4B /* ExtensionRegistry.h */, - 5F3EBBB4A57E622A6B8CF82D635EB581 /* ExtensionRegistry.m */, - AA50334877160F0F2ECCB801B5A2D7AC /* Field.h */, - 190B1F4C850F944F149392D338627D60 /* Field.m */, - A9A28B594CC4634F78E47D27751D4126 /* ForwardDeclarations.h */, - 0339C9586241574E408BE851D212C786 /* GeneratedMessage.h */, - 2C556B12960500C187E7C7094222477F /* GeneratedMessage.m */, - FE3B4B180D3300E7483CE7795201444F /* GeneratedMessageBuilder.h */, - 322F1CA0447465952BB9CC4720DBEEF4 /* GeneratedMessageBuilder.m */, - 29E037CFD51686027D92461BECAA80CD /* Message.h */, - 79B4D01F1D8BC2011FAC7D0FE1FC4A27 /* MessageBuilder.h */, - 9E79DEDFE7AC7A63BADCF82A35866944 /* MutableExtensionRegistry.h */, - 75AB2EA628467348AC7BA9E59878CA7A /* MutableExtensionRegistry.m */, - 023A98720CB8290A9E37BE0AA9305F25 /* MutableField.h */, - E8AF6DC856D2DAC2A1D6740CCDE1C715 /* MutableField.m */, - ED4855FC3015D95F114B2A3760FBD309 /* PBArray.h */, - 28A8D8869E24B2D51141E5A393CDFD66 /* PBArray.m */, - 49F570A599EA8D01C7EE4EA310F87243 /* ProtocolBuffers.h */, - D4CCB5380C318DA6FD34315DBB1D4517 /* RingBuffer.h */, - FE970C0616393EDEE93841269AA7B258 /* RingBuffer.m */, - 48C3F7BF476FC7972EEFE921A2E3F147 /* TextFormat.h */, - A4DBEAD799BE1CAAD7A7757326154726 /* TextFormat.m */, - FB220E0C882EB45400F666838D4A29EF /* UnknownFieldSet.h */, - F028C3E4CC6EA374D684FA41A3398E9E /* UnknownFieldSet.m */, - BB706E450F552995910DFC91FA714DDC /* UnknownFieldSetBuilder.h */, - C926D5E8A6D0BF65D5FC7FDB938BA015 /* UnknownFieldSetBuilder.m */, - B6A6423AF01E6B199795EADE844446F2 /* Utilities.h */, - 30750BFCC9674FBE36A2B6CE2C105549 /* Utilities.m */, - B12F8B7A5356FFFD7B0AF261DCFA8CD7 /* WireFormat.h */, - AEACBFA67BABBD7E7D1B8A46D4DB1D18 /* WireFormat.m */, + 91836A95DBB5D0DB3D9C23522EBC50B3 /* aes.h */, + D8FDADEEE0FB09423FB8D3030D5E19F1 /* aes_via_ace.h */, + 6318A0CCA38CE2AFD16C9FD64A153241 /* aescrypt.c */, + E14536EB2479F6F6779015BAA6911527 /* aeskey.c */, + 0B82D4AD8E4F0D1D5FE346B4C14E8DE9 /* aesopt.h */, + 1D00FE9032C51019529EBA8F69AAC579 /* aestab.c */, + 2FF1E7D89366342A8CF9EE0B0DCA9C02 /* aestab.h */, + 2C79BEE3F9C4E4528482337DDC5F6F00 /* brg_endian.h */, + C05CFC459869641413E249FA0FA0DDC3 /* brg_types.h */, + 0C9E1CB8926D98B02FE2EC003C21F2A2 /* crypt.h */, + A25C987A4AEA6FC3527E578D60ABC5D6 /* entropy.c */, + 8A08B8550B62166FEE79A6348999E212 /* entropy.h */, + BDFB20BEF0D88EF7ECF730479CC23309 /* fileenc.c */, + A64F29CD1043CC1D2F657760ED3B8D8C /* fileenc.h */, + ACD1C7B3B14F9BBE34ADD176481A9FD3 /* hmac.c */, + F8FE358A549229558DE8BBF8082070B9 /* hmac.h */, + 95FDF5C839A4C707BBB3195007A4E9BA /* ioapi.c */, + 117ECB5E58F2855177D4DC718148D718 /* ioapi.h */, + B077F26C0025994A305A8B3F2FB7378C /* prng.c */, + 3DFB8ADA4771AB21B8138896787075EE /* prng.h */, + 23D6B991A588BED5011F6109C3DCB8AF /* pwd2key.c */, + 44BA91345B51C5D545A9A6CE9091385C /* pwd2key.h */, + D4A2E9373AFF9645443332143D65B7EB /* QuickZip.swift */, + 85B7F55AA41CE550B665DD7C779D6C2E /* sha1.c */, + F7D6B53A202CBED10113D9BE90B020A1 /* sha1.h */, + DE079CC21EBBD85B949FD1D976C5853F /* unzip.c */, + D8C5D5E6414EC2370A123B21C80572F8 /* unzip.h */, + 4B2879A7EFE9D7CBF3E59F321F677712 /* zip.c */, + FA6C5218CC4F9EBDD4BCF4B81B525D67 /* zip.h */, + C3839B6328882FAB12D505A08E8CA1F7 /* Zip.h */, + 6FF9B04A631E27F0EA56025C0BB21FC6 /* Zip.swift */, + 442FA759919BC6FBE46B2AA578233281 /* ZipUtilities.swift */, + 7A9DD94B442480B1A0D754DF6927BCD2 /* Support Files */, ); - name = "non-arc"; + path = Zip; sourceTree = ""; }; - 59A913451FF6F0DB3508965775219F6F /* API */ = { + 6E88D9DDEC7EEF13E48A55E8631114A8 /* Charts */ = { isa = PBXGroup; children = ( - 16122768DFB846CD8A700FEDAC4894D4 /* API.h */, - 98B03BB94A953FB613A3D17B47F1B137 /* SENAPIAccount.h */, - 458A99512363C4C0D888ECC9DF1D54E0 /* SENAPIAccount.m */, - 24CBB6B4CB79C7920FD6F3483A20EF26 /* SENAPIAlarms.h */, - F33F7E5696C9DDB06294E1AD0413F7B7 /* SENAPIAlarms.m */, - 1CB94DFCF37770D9CD7668014CC1C47A /* SENAPIAppFeedback.h */, - 89034448AC6B2C4FC8F0D397AFC052FE /* SENAPIAppFeedback.m */, - 9FB551805734C44769002897071557FA /* SENAPIAppStats.h */, - DC8189F7408FB3A26C4F00D42E86521F /* SENAPIAppStats.m */, - D1044210613C63C718F999F23BADA7B5 /* SENAPIClient.h */, - 6388690D04EBC314C4BD56DE1CCCC37F /* SENAPIClient.m */, - 66B12314E4FA6036C8B3CAF26A5C4099 /* SENAPIDevice.h */, - 3A7A7B023786D33B8C0FEA4C3A1DFAF5 /* SENAPIDevice.m */, - BD03D4C2ADECB0ED12C9078606F93039 /* SENAPIExpansion.h */, - 27222261D0E6C37F341D434014800C9F /* SENAPIExpansion.m */, - 7DDF821E9A777A2E7AD71B40534BB2E1 /* SENAPIFeature.h */, - D201354927E36484B3CC6785ACC69028 /* SENAPIFeature.m */, - 65A4E7A2C25B2FE0BF15CA953EC9EB0B /* SENAPIInsight.h */, - ACB89D8088A295DA0B4CCEE519D7D99D /* SENAPIInsight.m */, - 8F493463FC4B0044D0FB099F33BE588F /* SENAPINotification.h */, - 7A6C4BA71CBDF218F88737B3E39F99A2 /* SENAPINotification.m */, - 9A4BCF6CC098A824958EC389B5B282A2 /* SENAPIPhoto.h */, - A2769B768ED530E2032755694EB60551 /* SENAPIPhoto.m */, - 770F39C7C5B4DA0EDF9436BD64A28EB2 /* SENAPIPreferences.h */, - A71CABA464BFD4C3AFDDA6634B2843EE /* SENAPIPreferences.m */, - 9099CDD9FBB2D911BBAE5B1ED7744C2D /* SENAPIQuestions.h */, - 39031D92AB15EAC70B1ADEE5B5FC39E8 /* SENAPIQuestions.m */, - 47D66EC4E15C120723D7D405E44F8EC1 /* SENAPISensor.h */, - 66883D36D43D00686334C468BE503B7B /* SENAPISensor.m */, - 27AF0EAF2CAFBCCAB587A437853FF1E5 /* SENAPIShare.h */, - 65954D1ECEF526067C2014209F004B1C /* SENAPIShare.m */, - 46DEA32748F549E71BFF5B43CEC77F0E /* SENAPISleepSounds.h */, - 67E8F919116392AF6FAB2B45DE755555 /* SENAPISleepSounds.m */, - 7BB4458ED22BE2B71962676406F0B196 /* SENAPISpeech.h */, - E279FCF41429C8312BCDFC5D94ACCD7F /* SENAPISpeech.m */, - 6D5CD2562B76BBBF989C2ABA8E5DDEA6 /* SENAPISupport.h */, - 8D854254F6DCF603A8348ED5B5FF5791 /* SENAPISupport.m */, - 472F59F3C73071959717856818AA3C42 /* SENAPITimeline.h */, - 0450A8F860D285BBFD4B4B6A4A4D23F5 /* SENAPITimeline.m */, - 98CC1334B32283077BD3F97AF8D33551 /* SENAPITimeZone.h */, - F9D76E3273FCB253CDD14805240B6609 /* SENAPITimeZone.m */, - 6603FC8A49B4C964878043FAAA77940F /* SENAPITrends.h */, - 48E8DA7DCA912EDF67EB154E65CA4540 /* SENAPITrends.m */, - E52A6E9BF4A75001CC02B0491680200C /* SENAuthorizationService.h */, - B8D0719063563070957BA6B5EBB2894E /* SENAuthorizationService.m */, + C8352919A02C38CDB807BC4A46953D40 /* Core */, + C039809DEF3AD314C5B6E76BB8C96DCF /* Support Files */, ); - name = API; + path = Charts; sourceTree = ""; }; - 5AB34CCDF324451978E6DCF3E186C602 /* Support Files */ = { + 71379196523F9A26F83D04B454BC2B37 /* Resources */ = { isa = PBXGroup; children = ( - 37013046A154CEF2B86D4029D6F1AB9B /* Info.plist */, - 6326D73027A9EC184921AD33CC1F466E /* Kiwi.modulemap */, - 83BA65DAED72206C36D888EF9C937094 /* Kiwi.xcconfig */, - EA44FFCF7920EB3BA56273FF83C3BFA1 /* Kiwi-dummy.m */, - 85821E34AEF91F6AFF06ACC82D86C97B /* Kiwi-prefix.pch */, - 38505529998FB202659CA539EC306551 /* Kiwi-umbrella.h */, + 956E15AAFA5D668DB7C0B9705F2B68BB /* ZendeskSDK.bundle */, ); - name = "Support Files"; - path = "../Target Support Files/Kiwi"; + name = Resources; sourceTree = ""; }; - 5B9ACC753CE7E4DA1E5A7DC0F7410FE7 /* Support Files */ = { + 721CAE8239E96328F72F232EB7643080 /* API */ = { isa = PBXGroup; children = ( - 8FE1485642DB13300ACBD27C010405BB /* Info.plist */, - A1337DF38526F185F50A16F85F46755B /* NSJSONSerialization-NSNullRemoval.modulemap */, - DA52669FD65213799D11C65DCA2558C0 /* NSJSONSerialization-NSNullRemoval.xcconfig */, - 0C63331516B883A2713CC5D72061E092 /* NSJSONSerialization-NSNullRemoval-dummy.m */, - 8CA84B5FA9D73FD6CB45C4F39F55B453 /* NSJSONSerialization-NSNullRemoval-prefix.pch */, - 4FD4341E9FF07150CA9C2328E7798588 /* NSJSONSerialization-NSNullRemoval-umbrella.h */, + F8AB6AF093C72657C7120589DC6C9272 /* API.h */, + 34EC324A69F18EF7179316270B698642 /* SENAPIAccount.h */, + FE24F7B253DD51B1FC2D2BFF975FD6C7 /* SENAPIAccount.m */, + F587A2B11FB490E9BE5C95A2B686C890 /* SENAPIAlarms.h */, + 4665849D23B47A9390AF86A657357B35 /* SENAPIAlarms.m */, + 3CA597D4B5F3A3FCE19B187AD3031B1A /* SENAPIAppFeedback.h */, + E23E3D426ECD40F8FAA5FE96CD6FB143 /* SENAPIAppFeedback.m */, + 08A9091656D7C2A6A7B67007E49E7D06 /* SENAPIAppStats.h */, + 84FE7F01CA8C6C3438AE9FF8FC5E69AD /* SENAPIAppStats.m */, + BC30E6C0D1C941F536F4B398F960CB31 /* SENAPIClient.h */, + C76CA027D521DFD2D4F49C78859F9130 /* SENAPIClient.m */, + 5AE1CD3FAEA4DB0404B10611CB3DA5FD /* SENAPIDevice.h */, + A5D0AD84641D5136CD8C15C9F50D777A /* SENAPIDevice.m */, + 3089D73EE4A415E1964BB9CF250BCB4C /* SENAPIExpansion.h */, + 2FC27437F74CAA2A4F7AA4BEB217957B /* SENAPIExpansion.m */, + 39B41AC23A04748735DE8A52869084ED /* SENAPIInsight.h */, + 1A4633BD5DD68B69C96B991FE24B66A4 /* SENAPIInsight.m */, + EE8757BAE6C003CF9CB2A7E126FA27E9 /* SENAPINotification.h */, + 1EDE38C326B0C9D774F94439E262F693 /* SENAPINotification.m */, + 3DD5E49A1E901490FEA8EF8952DA484C /* SENAPIPhoto.h */, + 96B44C96B0C03DABA06ADCD6A12F29F2 /* SENAPIPhoto.m */, + 55AE8998353601799D2740928FE4402E /* SENAPIPreferences.h */, + 10C5A8F688C4E47EE12F0B75DAFF31B4 /* SENAPIPreferences.m */, + 3E5022725DC199D74BCE68B2612CB0A6 /* SENAPIQuestions.h */, + 02D07B006380ADCB51A9C444CD0A9A37 /* SENAPIQuestions.m */, + CB97AB0BE95A94B2EE41D8D86FCE9B5F /* SENAPISensor.h */, + B672E0707772C68D3F70EE0B741AC92C /* SENAPISensor.m */, + 3A1D799B34509EE2C61314807E88E0EE /* SENAPIShare.h */, + 0487202A7D8ECC666D6BD2D403764B0B /* SENAPIShare.m */, + 272C6160E742755DEC8FB3F2C4609C36 /* SENAPISleepSounds.h */, + 98AF60078E43A7D15903B52F1FD01851 /* SENAPISleepSounds.m */, + 338ED2C90049EC473778979E9607192B /* SENAPISpeech.h */, + A3DAF130518B588AADEB747194C84E57 /* SENAPISpeech.m */, + 690E8B60BA5A74CA606F6BA1EAFB4512 /* SENAPISupport.h */, + 59D8C6EBA727E624BFF2C67DD2660C94 /* SENAPISupport.m */, + 0011E17669A8C12F1E65B5EC20167A89 /* SENAPITimeline.h */, + BCAC97ADB2151F3C6DB26E2509A1E6AB /* SENAPITimeline.m */, + 0B3B4356B970C68D54FD6491DC926774 /* SENAPITimeZone.h */, + 8805529589DE2C57C7B59679A4089CC0 /* SENAPITimeZone.m */, + 37801A0C94F9634CC7DC5F57DD626F22 /* SENAPITrends.h */, + 0D447E1562FF6E9DBC77D2DC5B733F5C /* SENAPITrends.m */, + 37B5502DCC9DEB224ADB2E2BACEBCD31 /* SENAuthorizationService.h */, + 061640276642C3CE835A044AAFC10F3E /* SENAuthorizationService.m */, ); - name = "Support Files"; - path = "../Target Support Files/NSJSONSerialization-NSNullRemoval"; + name = API; sourceTree = ""; }; - 659A59F0D2511E57878C1AAEB9FB172A /* Support Files */ = { + 763377DBABAB35E3A1EAA390521F4DBA /* MSDynamicsDrawerViewController */ = { isa = PBXGroup; children = ( - F56EBD677E41DE3C6C42E71FDE6CC20C /* Info.plist */, - C30AD39E22162EF38C6190CBCF697460 /* UIImageEffects.modulemap */, - CDF2449BE02177B0A63946EC025F1D5A /* UIImageEffects.xcconfig */, - 113B405957DD754242F314CF4B943722 /* UIImageEffects-dummy.m */, - D63A68E9BF35E6497E88105C11A4B68D /* UIImageEffects-prefix.pch */, - 7E2CAE9CEA184EE79FF584EBF073D467 /* UIImageEffects-umbrella.h */, + F35CAEC6D9081BF80E476524743A77E9 /* MSDynamicsDrawerStyler.h */, + B44C454A38C9FA8B45EF2BE3CBAEE80D /* MSDynamicsDrawerStyler.m */, + E5604F788E80E758BEAA63F705B561AB /* MSDynamicsDrawerViewController.h */, + 7CE9588CDCD95889D1FBA3BA24FD685E /* MSDynamicsDrawerViewController.m */, + B4EDBA342695D9F2869FA070C2FB341D /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/UIImageEffects"; + path = MSDynamicsDrawerViewController; sourceTree = ""; }; - 68CF2BD40596E699CCA898699B3A649A /* Support Files */ = { + 7A9DD94B442480B1A0D754DF6927BCD2 /* Support Files */ = { isa = PBXGroup; children = ( - 5E696696914668BB093AC96F6D5BB503 /* Info.plist */, - E18404D92E3E8D3AD39C11C5C7BF32BC /* RealmSwift.modulemap */, - 3FEEE63E7874C0B3980123F6EFB0E0BD /* RealmSwift.xcconfig */, - 471EBCF5DA125B0717508451EE5AA0BC /* RealmSwift-dummy.m */, - 633A1FDF6D0021D30D2F203562C5EB14 /* RealmSwift-prefix.pch */, - B31D7E5A84257EAC900D64457D6F7A64 /* RealmSwift-umbrella.h */, + 24D2967C42884D8E1829D31633DF1539 /* Info.plist */, + AD404C7804C7199F464CEC9DE7D0AA26 /* Zip.modulemap */, + AEE0159DC4A3EBE535582DB2791469AB /* Zip.xcconfig */, + 90388860430E3B102452B7E437FCB257 /* Zip-dummy.m */, + E64032B9D4EEE883358E99E107C9FDE7 /* Zip-prefix.pch */, + 95D974FD45184163CA88E1B79604829A /* Zip-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/RealmSwift"; + path = "../Target Support Files/Zip"; sourceTree = ""; }; - 6C8C4D5485CC65DE942F4246A4E31C53 /* Support Files */ = { + 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( - 825B2F6ABC6A6B3D402284B000EF4E8A /* FBSDKCoreKit.modulemap */, - 3331DCF2E8B41E64526109D6710C8D54 /* FBSDKCoreKit.xcconfig */, - 6D13766CE4A4C8AA2B8336726CE3D0B8 /* FBSDKCoreKit-dummy.m */, - 37394911A3AF8E38CA88B4C3443D7B42 /* FBSDKCoreKit-prefix.pch */, - 2F2AFA5E5B0143B940801E67E8EF94B1 /* FBSDKCoreKit-umbrella.h */, - 4C028BF2D23F57736C00892BD00A7409 /* Info.plist */, + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + F099E3251C019ED74B57188D55B6589F /* Frameworks */, + 12E6296EED1FEB3B0B8D8BF819C159E5 /* Pods */, + BBD4AB17C63DE689F156836D02BB6D0C /* Products */, + AB78921FDC21CAF98F5A0D5850ED4D07 /* Targets Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/FBSDKCoreKit"; sourceTree = ""; }; - 6D709E3F6CE239BFCE8242C7AD3E4F06 /* FXKeychain */ = { + 82C553A5046BCC04DB34606C5005B57F /* AppLinks */ = { isa = PBXGroup; children = ( - 1877410E6715856F10925CB3697A26C3 /* FXKeychain.h */, - 86B43C5F5B1F2318C7C9A02EDFA71075 /* FXKeychain.m */, - BD8D0F3CD1A27CA08A3FDF2838A1B27B /* Support Files */, + FC974942349E6F74728F93375686691F /* BFAppLink.h */, + FA574DE99BB78672FDBF84C8722B4BAD /* BFAppLink.m */, + 4D35E9F130F7A6721D9CA8B54B8D923C /* BFAppLink_Internal.h */, + E6970FC083BC7537D1F5F15DA60266CF /* BFAppLinkNavigation.h */, + C577604989A799AEC7692B0DFFF5AD70 /* BFAppLinkNavigation.m */, + B7202A72567CF4E609B357ABA20C08D5 /* BFAppLinkResolving.h */, + 65A10225050C3CCB2041EE5055A99AE6 /* BFAppLinkReturnToRefererController.h */, + 54AEC5271218E15BD196D6B0CFD0498C /* BFAppLinkReturnToRefererController.m */, + 199EC598028F2B6B40C31E70E7A9D202 /* BFAppLinkReturnToRefererView.h */, + 180B1246D297BF6F5E129F56DFAF2285 /* BFAppLinkReturnToRefererView.m */, + 4D6ED7ADEF238CA17F1256200766D13B /* BFAppLinkReturnToRefererView_Internal.h */, + 665CABBB1FC2D67AE1D7E42E87182C1F /* BFAppLinkTarget.h */, + 1F38C0FD5F401CEEE7A2898DDFD45A81 /* BFAppLinkTarget.m */, + DCF02C0A5D15037F5C56816281942444 /* BFMeasurementEvent.h */, + 77169B93EF58F57065D4109090936A12 /* BFMeasurementEvent.m */, + 55E4DB52402B80899F03DA775C4E63B2 /* BFMeasurementEvent_Internal.h */, + 72D1683657A763EE42197B76A9717F61 /* BFURL.h */, + 7D52C59B259AF0BC980890E3D1D76B1F /* BFURL.m */, + 35D34294374E409FD2FE6CCCEC5A526B /* BFURL_Internal.h */, + 1FCB1CE2BBCB4EA18DF751BC7B9003AC /* BFWebViewAppLinkResolver.h */, + 9322212EC63E6098AEE7C2F12B1241C3 /* BFWebViewAppLinkResolver.m */, ); - path = FXKeychain; + name = AppLinks; sourceTree = ""; }; - 797FE2663D67A685DF230EBB803EF284 /* UICountingLabel */ = { + 84C9D95F1B380BAA1C9812CAFA030CEB /* Support Files */ = { isa = PBXGroup; children = ( - 23B2D2FCFF2ABA43422B0A001A96F021 /* UICountingLabel.h */, - D15538B5BBB8256397187AD0F14ABDFE /* UICountingLabel.m */, - F1AE28513B5F4EBEDE9829FDB8ABADC2 /* Support Files */, + 0522709B19C00435C3811705B511FE71 /* Bugsnag.modulemap */, + 8ED1F1E467DD5E24C74EF39F1F877114 /* Bugsnag.xcconfig */, + 6528415ECA2228EEC66563ED33B20895 /* Bugsnag-dummy.m */, + B0636DE3AD6EF589C07424F51872BFEE /* Bugsnag-prefix.pch */, + FA274ACC34935782F49ACB8DEDE6332D /* Bugsnag-umbrella.h */, + 329C361316CF8102A2543074CAF2DD04 /* Info.plist */, ); - path = UICountingLabel; + name = "Support Files"; + path = "../Target Support Files/Bugsnag"; sourceTree = ""; }; - 7A3EE7DE00ADB451B6C35183D14DB9C3 /* CocoaLumberjack */ = { + 8B0D6C4415C936672CC0C4C2F0EC2973 /* Reachability */ = { isa = PBXGroup; children = ( - 2532FBFB8B8028A715AC90648E565FED /* Core */, - C7C047C930A562DC6EBFBBDAF37E60EA /* Default */, - 4031DE93E1CAD76EF302226F1BB08237 /* Extensions */, - B48D26CEC74A10A3107A4D7286C5204A /* Support Files */, + 8C2A7221A296BBF89F59D0640F774566 /* AFNetworkReachabilityManager.h */, + EBB84AB5C3DDFEE362988B5074854349 /* AFNetworkReachabilityManager.m */, ); - path = CocoaLumberjack; + name = Reachability; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + 8D0CFF7B219BDED5F2C002D05FA8A488 /* Resources */ = { isa = PBXGroup; children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - F9775D43AD1C6940DFC11F2F4F5CF521 /* Frameworks */, - 45F031D09CB883C839CF89C78EA7412A /* Pods */, - 3666F4D0B393155ADBF6845F5DEAEF0E /* Products */, - AB78921FDC21CAF98F5A0D5850ED4D07 /* Targets Support Files */, ); + name = Resources; sourceTree = ""; }; - 7FB2EF43A95B31781E232517DCCD995E /* UIKit */ = { + 9151FDB40CC9630FC96BA9E08B10EE37 /* UICountingLabel */ = { isa = PBXGroup; children = ( - 9F7F108F8B491BC4AF600225F4712E7D /* AFAutoPurgingImageCache.h */, - 45E3C60ED0FF7A483AE3638B79338121 /* AFAutoPurgingImageCache.m */, - 3C41BC30D694F4FC6FE51A07C5F75083 /* AFImageDownloader.h */, - CF3DD6AFD541E64496711EE75B8733A1 /* AFImageDownloader.m */, - ED64CDE026F413DA22B9645F9844BE45 /* AFNetworkActivityIndicatorManager.h */, - 9313A34869FF26F92737B5E6A49A06BF /* AFNetworkActivityIndicatorManager.m */, - E15915B88DF249C3B3FB5DB8F0F4FAA9 /* UIActivityIndicatorView+AFNetworking.h */, - F2D63ED47F5E82B16DF5240BD7488385 /* UIActivityIndicatorView+AFNetworking.m */, - D583BA6DB4261965F402C56C91B242AB /* UIButton+AFNetworking.h */, - 8D3D76AC723DAAAFF606C864826338F1 /* UIButton+AFNetworking.m */, - 88DFD3DFFA391BCDBBC16ACB3DE28328 /* UIImage+AFNetworking.h */, - F46BCBC56FA6FE9CB2AF9C25A28DCFA8 /* UIImageView+AFNetworking.h */, - 91DE1D587EDEAE63B8D98DA7450848E7 /* UIImageView+AFNetworking.m */, - 6697D0A95E74EF1100F11DFA77000401 /* UIKit+AFNetworking.h */, - 5FF2642DBB345C190B7CE7BC91B8F21E /* UIProgressView+AFNetworking.h */, - 46EC79EC0D8719E670C7493468455FDB /* UIProgressView+AFNetworking.m */, - C15B40389E9A71548B62106C4294EED6 /* UIRefreshControl+AFNetworking.h */, - AD1D068731EBAE598179BDDAB6F158EF /* UIRefreshControl+AFNetworking.m */, - 6FD22AE258AA2FA099963A6BC59483FF /* UIWebView+AFNetworking.h */, - 289C3CBA88646F173BCD450FCF1D275F /* UIWebView+AFNetworking.m */, + 7F439A712D796F9F97ADBE689E5F2719 /* UICountingLabel.h */, + 81880B70B63CABAAA841A0AB9E6B4679 /* UICountingLabel.m */, + 199D6088E799E405369A31E4AE5A28C3 /* Support Files */, ); - name = UIKit; + path = UICountingLabel; sourceTree = ""; }; - 80929039C18081B1B00A80F15C810CDF /* FBSDKLoginKit */ = { + 921E410E0246CE92C5B3145B30C956A0 /* Localization */ = { isa = PBXGroup; children = ( - B759BB603C5A3BC6A1EAAA4D7DE9D85D /* _FBSDKLoginRecoveryAttempter.h */, - 344AEE2192AEC655787DAF36F912DB85 /* _FBSDKLoginRecoveryAttempter.m */, - A154113516ACADBF9F352648684E151D /* FBSDKLoginButton.h */, - C5154AD506DFB34AB4E36194B4A8103C /* FBSDKLoginButton.m */, - 936CCD433FE6F6D3B62564C136C65711 /* FBSDKLoginCompletion.h */, - 57C7D205EDE0F1D13B03F0CFDA221130 /* FBSDKLoginCompletion.m */, - 0637C05359E6854277967F4A9DE4B6AC /* FBSDKLoginCompletion+Internal.h */, - D6EB92A3A24C1AEDC5AD9761DE3CD772 /* FBSDKLoginConstants.h */, - 0A3772A52A46D64EF0AEFC337494A854 /* FBSDKLoginConstants.m */, - AE3045AEE8D6EDED754A17E19FDFD496 /* FBSDKLoginError.h */, - 94D30172350592A4199C7114DDAE9778 /* FBSDKLoginError.m */, - A49958D5405D897A327B3F52F7844D06 /* FBSDKLoginKit.h */, - 5DB49F0B786CF6030B0D1E0394E20104 /* FBSDKLoginKit+Internal.h */, - 21D681969EE3A5E95D3CAE03AAA4098E /* FBSDKLoginManager.h */, - 54DD822F57C9E7B795E04EF4C38983ED /* FBSDKLoginManager.m */, - 4B38793DD2472E0D6274592EC7ACC8E7 /* FBSDKLoginManager+Internal.h */, - 54A6B9865AB5B17EBFE21847F5885CF7 /* FBSDKLoginManagerLogger.h */, - DD2AAEB6DA7B7520B291D70302E7D140 /* FBSDKLoginManagerLogger.m */, - 746B62D265688954D555ECD81E6584A6 /* FBSDKLoginManagerLoginResult.h */, - 8E1D61AD7EBA83D17C86A162D21728AC /* FBSDKLoginManagerLoginResult.m */, - 18A47DB46C31C28B1E051710C9AB9B4D /* FBSDKLoginManagerLoginResult+Internal.h */, - EAC6E2EF9DB26DDB32E137A07F898A57 /* FBSDKLoginTooltipView.h */, - 372730A576B11CF21D530093195E52E7 /* FBSDKLoginTooltipView.m */, - E0F673B029B2755BFCC231456FEF11E9 /* FBSDKLoginUtility.h */, - BD65285F62F97A519BB9E5B9AB0D261E /* FBSDKLoginUtility.m */, - 1EDAE5FAE10A9D80DA0C1B2AE57F8946 /* FBSDKTooltipView.h */, - ABDEB0F11E04C8FB7507E90467A41E6F /* FBSDKTooltipView.m */, - A04161570D432A5ADE28B27176AAAFCB /* Support Files */, + 1C4B4FB6307E2680CE3C34D8B9B6E3DB /* Resources */, ); - path = FBSDKLoginKit; + name = Localization; sourceTree = ""; }; - 8A66560A13D75E482BC6BC691AECF6D7 /* Support Files */ = { + 92FA36434F5B459DF7C651FDF5F6A627 /* SORelativeDateTransformer */ = { isa = PBXGroup; children = ( - 72660C036C0D3B1AD0A983C7DA52EC88 /* Info.plist */, - EF57713B63C51E62616E8F951BA597E6 /* SORelativeDateTransformer.modulemap */, - 5307A942D3605AD171DFFF9647438D42 /* SORelativeDateTransformer.xcconfig */, - B7EE9EF973C8EFB261C9D37135660D85 /* SORelativeDateTransformer-dummy.m */, - 82DCBBD507FE882B07E008A011D31601 /* SORelativeDateTransformer-prefix.pch */, - 4F7DEA9641F3FAF36133DBCEB122629B /* SORelativeDateTransformer-umbrella.h */, + 09AB4F17064ECDBD7527EC2D5FB64927 /* SORelativeDateTransformer.h */, + 5F34BE2951CA75E3D6179586E63E03D0 /* SORelativeDateTransformer.m */, + CBBD84C9E35839723D2A5FEC9B6D819B /* Resources */, + CB6EFA131E42ECE658C884ADBFF7DB7B /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SORelativeDateTransformer"; + path = SORelativeDateTransformer; sourceTree = ""; }; - 8B251B6AB723B9A60A04E2F30CB4755A /* Zip */ = { + 98795731F8EB9B242ACCF9A5E431813F /* AttributedMarkdown */ = { isa = PBXGroup; children = ( - 8E92EC7F975F0B25127B1A6938F6C115 /* aes.h */, - 867F3CB573393447D96859033DDA4979 /* aes_via_ace.h */, - 95FDB508F989809C95E644C94DC9340F /* aescrypt.c */, - 7FA610537B2D9D3E09C6FA7FB85B3A36 /* aeskey.c */, - 237D07FD65E690AD02D7EE212671B7E2 /* aesopt.h */, - CE0A13C7DC1F81FEEB2F304E46BD03E3 /* aestab.c */, - 8FC6041281E1E2C5BE2C45DF4DC3180B /* aestab.h */, - B0FBE0E730228CA633C1B16380307456 /* brg_endian.h */, - F29B4CC36C243159F8861938B4B42120 /* brg_types.h */, - CF55E61471959D87F924F81CD8A1B489 /* crypt.h */, - 8D7BF5BD599F43EE5E29A26BE7280B25 /* entropy.c */, - 0F69DEEA14E86FA1AC1D1A8D88BC4BE9 /* entropy.h */, - E771B10D73A6F5AE6CEA426921272D8B /* fileenc.c */, - 7A4BBD0DEDAE9900534393675E25AD24 /* fileenc.h */, - B1CFDDF0F67EB52CE4F3D85BB955871E /* hmac.c */, - 7A49493E2FDDF15FA2E657168E2559C9 /* hmac.h */, - D148EBF9273C5525BADE14B1F0DD55FA /* ioapi.c */, - 9599EFC9C05837EDAD1594B8C76CB251 /* ioapi.h */, - FBCF108794537CB0E449EC5F08331F07 /* prng.c */, - 99748F6D7E7B87C37A5A4E43B498B264 /* prng.h */, - 2B1EF599B587AAD87E70A9B4AD43EA38 /* pwd2key.c */, - 15E901D886A7536E03D975DCD717B02E /* pwd2key.h */, - 4AB0E6EFE9387F5E284B70600C89EE5D /* QuickZip.swift */, - 4937D016E516753DABCDEAB1CFA30DCF /* sha1.c */, - 25ADEEF93515CFBCA1E0CAFD839F5D46 /* sha1.h */, - 50E4DEFF17669D4CA0A29D104B5CA76B /* unzip.c */, - 398DD7E08BE607EACECBD0E8D169569E /* unzip.h */, - F6A905C155D83A39261866D65F92E9ED /* zip.c */, - 699CF37DE2AC1AEA8F5B8AC9BC46ACF6 /* zip.h */, - 999EB44050E298BABA027437E5D4EA40 /* Zip.h */, - C341F65DE52369067D9C66C37CAD0A48 /* Zip.swift */, - F828F7B5B719FD9D7E1F72838D114BC6 /* ZipUtilities.swift */, - 3CE6BF1DFEE94FF205840F0641088662 /* Support Files */, + 493C825024681A121C856067D0D2C087 /* markdown_lib.h */, + 397536234C03276B2E981D4B78E91240 /* markdown_lib.m */, + E2B1FEFFE90D026A75C9499AE4D46C0A /* markdown_output.m */, + 8368864842AB12218119E28A262B1823 /* markdown_parser.m */, + D84C7A94F93BFC192E60276A1E767390 /* markdown_peg.h */, + 9841CEB92D3DFA6FC2A0B176E3B89EF1 /* platform.h */, + A5808EC29F8D7EF882005D45BC261870 /* Support Files */, ); - path = Zip; + path = AttributedMarkdown; sourceTree = ""; }; - 8D85FBE198BE29E718B0AB672BB1178D /* Localization */ = { + 9A504DAB4837A6E509FC30ED70CB307F /* Support Files */ = { isa = PBXGroup; children = ( - 483D65D7B4537369CB225B697B2C9453 /* Resources */, + 5733E7174C5642A79A106C64E052CB2B /* Info.plist */, + 10F8B00D916C7502F128E953BC4C6C02 /* SHSProtoBuf.modulemap */, + 6B12E317A11DB60199C7854A9F2AC9E0 /* SHSProtoBuf.xcconfig */, + DFB3AEA54D13300C7E077B406C04F415 /* SHSProtoBuf-dummy.m */, + DB42B1F55178243311CE1D90375D95FE /* SHSProtoBuf-prefix.pch */, + 795A325DEEDDA69FDE7F941B96807820 /* SHSProtoBuf-umbrella.h */, ); - name = Localization; + name = "Support Files"; + path = "../Target Support Files/SHSProtoBuf"; sourceTree = ""; }; - 8EF4192E06AFB9FC6EFA8B5AC173A299 /* Realm */ = { + 9C38696185ACF691128FA8274A435F14 /* NSURLSession */ = { isa = PBXGroup; children = ( - 80ECC86A32A116B365ACD72F5D72C920 /* collection_change_builder.cpp */, - 8911F50285694C539E26AA3E67731364 /* collection_notifications.cpp */, - 0D611FFF1063BD2248126F95DF96D6BA /* collection_notifier.cpp */, - B52C742FA379E2286DEFAA0BB51F2FCA /* external_commit_helper.cpp */, - 8051D07C2BA8F363F35B05264A222EEA /* index_set.cpp */, - 5CFB6A8F6F998C9F78344D5A9D118B7C /* list.cpp */, - F0368AF3218B3899A55211A5596F35D0 /* list_notifier.cpp */, - 1664253ED9906177B4C2C4F75A2E3E8C /* object_schema.cpp */, - B3B509EDBF4385EE250C8040B0605E39 /* object_store.cpp */, - 43DBC2FE41F75192E4C3490FA3EE1A4C /* realm_coordinator.cpp */, - 68D0FB0E6E371B2B3A35AA08B4AB4A6F /* results.cpp */, - 743782D72B1ED071CAE9BC1503AB3EB7 /* results_notifier.cpp */, - AAA6E1AC6422CB894FD1D5D3A151727B /* RLMAccessor.h */, - 3F7E36BDCB77935F11604F7E9E44AC9A /* RLMAccessor.mm */, - 2F3F1B27A8FB48B85FD7CE63A1FFA5BD /* RLMAnalytics.mm */, - E523603AB7DC4A455D331D2514FFE1DB /* RLMArray.mm */, - D560944F2A2A901B1DF5FC8346D61D5B /* RLMArray_Private.h */, - 7796091DF6A11C61913B960E3A3D6F6B /* RLMArrayLinkView.mm */, - CF9473861B4B3B96AEA5962AB60AFA14 /* RLMCollection.mm */, - 5BBB0A692F98C76EB787D49F38CED885 /* RLMConstants.m */, - DDEF373FD2A99B534F6323C5074812F0 /* RLMListBase.h */, - EF847FE61448E5B0851232613E122D59 /* RLMListBase.mm */, - DE67BB50B63E63C084DBDA1CEEE7D672 /* RLMMigration.mm */, - 8C90DEAAC7E43975EEFEC32AC254A8C3 /* RLMMigration_Private.h */, - ADFA4F91940EA8911338A8C2D1DD4C6E /* RLMObject.mm */, - 3E6659ADFE03C7252077F4B2EF285011 /* RLMObject_Private.h */, - BE39766172A99C9580094A7DE6F27F70 /* RLMObjectBase.mm */, - 23BE046FA812475047E30B1D89141394 /* RLMObjectSchema.mm */, - D3583A84911414F83CA6504BDF881529 /* RLMObjectSchema_Private.h */, - 1CE1E02CFA4F13F5CE2D31F02529D3E4 /* RLMObjectStore.h */, - 2CBE9638C7535B5A1D07345A235BE6C8 /* RLMObjectStore.mm */, - 7E9C2FFEDD4135FC31D3E302AF193592 /* RLMObservation.mm */, - 1115EC9B096C79695A87AB541442A2F4 /* RLMOptionalBase.h */, - 5C981EE111B8AB22794FD8001A3D1F65 /* RLMOptionalBase.mm */, - BD59293105D66C25A6ACB9AEA6F99E7C /* RLMPredicateUtil.mm */, - 9BEA9B50EDFA2F74A059D27B589BE696 /* RLMProperty.mm */, - CCD8CAF972FDFA4CC626F3D1783D043E /* RLMProperty_Private.h */, - 2365B12F7B60A480DF052355767E5FCB /* RLMQueryUtil.mm */, - EF8A2B799D8DFC975345B85DC6A22A73 /* RLMRealm.mm */, - 3025464D4B1E2E30718CB0EF2A19A342 /* RLMRealm_Private.h */, - 38E098F2FAC2D57E85E3E9A437427A9E /* RLMRealmConfiguration.mm */, - C92365B992831C7105F20336468C0779 /* RLMRealmConfiguration_Private.h */, - 2B04F16632A8A8BC661A23FAEA803404 /* RLMRealmUtil.mm */, - DF5DA8D4B3161C2465169F0398D514AB /* RLMResults.mm */, - 6174478BA6EE6A953F6FFC15DA9729F3 /* RLMResults_Private.h */, - 911E1A07274A2E7D1A0662B6C7B2730F /* RLMSchema.mm */, - A53528E54202434D76AE1E48CE2C6D68 /* RLMSchema_Private.h */, - 0921B996155F3A82122C92738B12A970 /* RLMSwiftSupport.m */, - DEC126DD8F4E08A66070C1085D65C817 /* RLMUpdateChecker.mm */, - A02B82C757E31D0161B1B192C858E93F /* RLMUtil.mm */, - 1037326861389367976F7BA2407675D1 /* schema.cpp */, - 61A1E6D553108B06E6683EAF3BE2BC6F /* shared_realm.cpp */, - F45592637FCEE6AF25E3F138E6BBB3DA /* transact_log_handler.cpp */, - CA0ED56CFAE220C52D700043059E4E52 /* weak_realm_notifier.cpp */, - 2923119F3E22690DD3AB5E50EF1790B5 /* Frameworks */, - 14ACEF659367C07EA3AA549B2F20C515 /* Headers */, - D16A822714CBFE1F4788C627536A7DFB /* Support Files */, - ); - path = Realm; + 562A59A1D697000971D3D4824CD652C2 /* AFHTTPSessionManager.h */, + 0C835FC7E70537FD8FBF2EE51F14397E /* AFHTTPSessionManager.m */, + 1DE4D6B098C652E7C2ABB68F50298798 /* AFURLSessionManager.h */, + 390CA19A4CE2FB3E2A03B170BB53AF15 /* AFURLSessionManager.m */, + ); + name = NSURLSession; sourceTree = ""; }; - 904F2B5223E295A8FD78DD86B266717A /* no-arc */ = { + 9C436C6190E9B84C75E27D7C82B51D8A /* Support Files */ = { isa = PBXGroup; children = ( - 33E16B94637426DD8B521BBE5ADE837D /* KSZombie.h */, - DCE45307653E8DC485A6D201A40DE9AB /* KSZombie.m */, + EB92B64857BD753CAB37875FAFF7F84E /* Info.plist */, + D860F86B8670D19C187EE788C201BAA7 /* SenseKit.modulemap */, + 3DE821E241CB73C5A384F34453A70503 /* SenseKit.xcconfig */, + 0B890BEACA084FB576CE274B117B912A /* SenseKit-dummy.m */, + A127923E0EE00AAFEF206588C2F1E110 /* SenseKit-prefix.pch */, + EF318401E4C96604EB1759481D1BCACA /* SenseKit-umbrella.h */, ); - name = "no-arc"; + name = "Support Files"; + path = "../Target Support Files/SenseKit"; sourceTree = ""; }; - 920A574339C7757CE365DFA32AD77EF0 /* Support Files */ = { + 9DF21DE658EBB0204C825D61A4CA101E /* Support Files */ = { isa = PBXGroup; children = ( - 6F97CC12789586DFE38ABE4D2DABB1D4 /* Info.plist */, - A33262FF7DE4C584A2C5D6EBF7D24AD8 /* LGBluetooth.modulemap */, - 1F04225D6CECBF78785D681F2E4C0178 /* LGBluetooth.xcconfig */, - 86C8E159F7A6C40EE9DE942739549EBD /* LGBluetooth-dummy.m */, - 56FCB45617BA3C7B88428D416CD0CAC6 /* LGBluetooth-prefix.pch */, - 577A300F0C8F1B83A2303FEC0FA26A60 /* LGBluetooth-umbrella.h */, + 21C9E6C6C368258FE15B3B33A7C895ED /* Info.plist */, + D96CCEE00D7E5F67BD281330D8B9461F /* Nocilla.modulemap */, + 615328B5C4B686245B253ECD664D68AE /* Nocilla.xcconfig */, + 3C0775A14635B0A887A13972368D962D /* Nocilla-dummy.m */, + 7705E21E06FA97EB44F0E1102DC37757 /* Nocilla-prefix.pch */, + 447AF55543EA9BBE3D11EFFAEDE17372 /* Nocilla-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/LGBluetooth"; + path = "../Target Support Files/Nocilla"; sourceTree = ""; }; - 99AA42FB6CA98DD938BD3F04536A38DF /* Analytics */ = { + 9E6A22DCDD5EAFBFB3459E0F2E124A2F /* Frameworks */ = { isa = PBXGroup; children = ( - 09BEE9D1E07C0598136DEF7AB86D163C /* SEGAliasPayload.h */, - BE053981EE1D8032490FD47331E479F5 /* SEGAliasPayload.m */, - 926C92405677E6A568F20B151D672F0A /* SEGAnalytics.h */, - C43AB72E7C87091A781126BB6E4D31FB /* SEGAnalytics.m */, - 3EBC65802B3889D5CCE698F4CFDB9D3A /* SEGAnalyticsRequest.h */, - B46CB5025509B41C774FBCE0C501D108 /* SEGAnalyticsRequest.m */, - 02657CB0B2CB9ACA034D5C661E99D6D3 /* SEGAnalyticsUtils.h */, - EA18C15A0442F6F9A446AC983564235A /* SEGAnalyticsUtils.m */, - 60071F199AE82524FB0DAC1CB9A77DFA /* SEGBluetooth.h */, - 08339E85C1D080E7B0116701EBF0EAED /* SEGBluetooth.m */, - 6AD0BE7933819256E1A9074AD9997E3D /* SEGGroupPayload.h */, - E7A4781CCC9CADF2AFAC7B754107A54E /* SEGGroupPayload.m */, - A63714C2408D8A44A6CA8682DC6E9D87 /* SEGIdentifyPayload.h */, - 78CDE200E2E6FBC7396ADC2768D206E8 /* SEGIdentifyPayload.m */, - FCEF8613DA38B659CEEC235E69F35B99 /* SEGIntegration.h */, - E3A0950F875DB456E503EBBA0886B1F2 /* SEGIntegrationFactory.h */, - 2690FC1B30A2D2D19DFF0EF41AA03E01 /* SEGLocation.h */, - 295440090B8CA95FD8E7292D0BF14C6D /* SEGLocation.m */, - 8DA7F76A646A79747674ED14ADEDFC78 /* SEGPayload.h */, - BD5679E692B089CF3CA1F0A1B5B8D7E1 /* SEGPayload.m */, - 1B55FC0C16710D5EFB7D946FBA47067A /* SEGReachability.h */, - 6C4F2BB11602D30A924E4B7CDAB32B1F /* SEGReachability.m */, - AF2FC4E21424EBFF595AF6803851853B /* SEGScreenPayload.h */, - 78A05BAC6F99C00B16DC9BF8714CB64C /* SEGScreenPayload.m */, - 6C21682B579A44D8AE1BE5BFF7C3EB0B /* SEGSegmentIntegration.h */, - 6CC784A42750512714DD58D23E7F9B15 /* SEGSegmentIntegration.m */, - 9910FFA362C7000CFE52FCF04AAFD6CC /* SEGSegmentIntegrationFactory.h */, - B2675CC7C04F565CA4E23255C1FC8823 /* SEGSegmentIntegrationFactory.m */, - C0B2A42E9324BEDCDD5CB72B7F475E4E /* SEGTrackPayload.h */, - 882A9EA1F12A4657158D4D879F932DB2 /* SEGTrackPayload.m */, - B91039313F1378A5C869C2DE2EFF4639 /* Support Files */, + 5C2710DF4D9619BAEEEBEF96602BAC20 /* ZendeskProviderSDK.framework */, ); - path = Analytics; + name = Frameworks; sourceTree = ""; }; - 9AB47EE3030C9F3154A8E0CC75BD90A3 /* Support Files */ = { + A1653E306C88E4CD6899BD9210130367 /* Model */ = { isa = PBXGroup; children = ( - C21E65C55224447113887CE1795BD36E /* Info.plist */, - E96623A7AF38B47D17A8413AD8C25758 /* SVWebViewController.modulemap */, - D291DDF35A6059DE824CCF32AA88642F /* SVWebViewController.xcconfig */, - FB96793A455B281E265440083C4E8674 /* SVWebViewController-dummy.m */, - 394C5BB9EB063884B08BCEF26C3B4E82 /* SVWebViewController-prefix.pch */, - AD74B2E969701909132AA134CFDB5F75 /* SVWebViewController-umbrella.h */, + 7C37B90582C3E3F245FA10AB9DE54723 /* Model.h */, + 8E82B23A70D1338E69E756DE2C36B1B6 /* Model.m */, + 157A512529D22EB51F08254049103506 /* SENAccount.h */, + 39D81DF619B7E8E6A9E43F8601826360 /* SENAccount.m */, + 5B129F34426CB81CDEA893B19EBA69D3 /* SENAlarm.h */, + D97836B567BC2BD432A20F8C934953AA /* SENAlarm.m */, + 23CD1ED073804FB534DE10938A2AAB56 /* SENAlarmCollection.h */, + A318C6C8B17E0F5137B02715CF24AC1E /* SENAlarmCollection.m */, + 1CCD672DDBDFB0746DF5FA22F86B0A1F /* SENAnswer.h */, + 83ACB32BA762182880FA1132D9D71D19 /* SENAnswer.m */, + 2F703851ED8C3EAA394E858DA8AC16F8 /* SENAppStats.h */, + EFAB6EAEA0A424601044887194D22E03 /* SENAppStats.m */, + 5AFCE3AECEE7DADEC095A5319B3ACA10 /* SENAppUnreadStats.h */, + 57728E10035748ABF43FA69BE0133486 /* SENAppUnreadStats.m */, + B68AA96572EC87DE3E5F5CD49C93342C /* SENCondition.h */, + 1BD47FA2EA51104DC15832BEFCD26C2E /* SENCondition.m */, + 3553CA11C2BDEA2EE8D6FF9E4D19C36C /* SENConditionRange.h */, + EF5932F9102DC9F3DD607AB4BBE96E21 /* SENConditionRange.m */, + FB027B3A4B2544691F64969AE6D79075 /* SENDeviceMetadata.h */, + 12A39994900A4BC9A0CEACF5A24A20FB /* SENDeviceMetadata.m */, + 3FE5145F8BBD2B5DA3EA12FF7DFE61C5 /* SENDevicePairingInfo.h */, + F482A474B88D12D3E2125726E66D4BDE /* SENDevicePairingInfo.m */, + 2918968283F44207633D746FFFE42143 /* SENDFUStatus.h */, + 3CDA317323536CF2C733E0152A1EEFC3 /* SENDFUStatus.m */, + A1D839DEF321F16000778BC8E7DF221D /* SENExpansion.h */, + 8F86BB5D6B3D572BCC6AEB1536F7536F /* SENExpansion.m */, + 56C2291681C0717149BFC6AB25CF1D7A /* SENInsight.h */, + B847424FD83034868397BF616422582F /* SENInsight.m */, + 7E1F449019FE8245EBB6475F006BC75B /* SENKeyedArchiver.h */, + 5D50003F2E50559A0D5B67AB301DB57D /* SENKeyedArchiver.m */, + 2757CFB5CBAA4B88872867C2C7B06649 /* SENLocalPreferences.h */, + 91AC8B7166E4A9E01A95B4E5598A0621 /* SENLocalPreferences.m */, + B74C83B214B9246C4CCD2B14BDD3A2CB /* SENPairedDevices.h */, + DB2B12626BF79C2EBE3E1A6C40087F88 /* SENPairedDevices.m */, + 73820AE304E327C7EC3889A146127BF1 /* SENPillMetadata.h */, + 20B202493D1DDDCD89417EAB06B075B0 /* SENPillMetadata.m */, + A83D1221B0622098E9078EF5DEF320C2 /* SENPreference.h */, + D0603FF17E999B9FDF36A64E0D1B40D5 /* SENPreference.m */, + 21AAD66A77BEBCE185B9704AA2C72EC6 /* SENQuestion.h */, + 84C2D75F50A903CF3C0EFFC67797FAB8 /* SENQuestion.m */, + E3DEDA73DD39D7936BC34400E5CC5194 /* SENRemoteImage.h */, + 99F94C26FC04F2E72B6A42B1D458F101 /* SENRemoteImage.m */, + 95188593BB84471991518BE06582AAF4 /* SENSenseMetadata.h */, + 20D7EB3E7AEB235451731EDCFC29D3E7 /* SENSenseMetadata.m */, + 4882D3EAB830C27ED2BA643A97F9A8E7 /* SENSenseVoiceSettings.h */, + 1D9C3689B28A6FFF88817132B5FA889A /* SENSenseVoiceSettings.m */, + 157D0B40A96BC232559268267CE3A25C /* SENSenseWiFiStatus.h */, + C1B3995F17CC1328A354F5B75E7EFA16 /* SENSenseWiFiStatus.m */, + 27C8FBF97E749435DF4F0152B722E0DF /* SENSensor.h */, + BA74C7BB75EF62567B0DBE99D6BC5205 /* SENSensor.m */, + 6BD4AB286987E116BD933718676D63FD /* SENSensorDataRequest.h */, + 492ADC11C9C24A59465F0D33556DD92E /* SENSensorDataRequest.m */, + 2CC2BDD0D9F9E36531C28FB8BC6C3127 /* SENSensorStatus.h */, + DC0423E405619B9CF08C235FD57B346F /* SENSensorStatus.m */, + 7F33198A974BEBF7EEC346A04323C10E /* SENSerializable.h */, + 434271472FB3533B6CA52F27AC3FA4BF /* SENShareable.h */, + 2F0D64E3601E7231337F22FB0308713C /* SENSleepSoundDurations.h */, + 210538C99A7800DC6EBE06C85F0CCFB8 /* SENSleepSoundDurations.m */, + 0AAF481E56F9F937954FEE4988A23F3A /* SENSleepSoundRequest.h */, + 8040D76005E51B3ECD3E61693985ED77 /* SENSleepSoundRequest.m */, + A1249F91B227A4F1FFA12A90FE32175F /* SENSleepSounds.h */, + 3BB8A240CFA1BA939D684FBAD2ED1A7A /* SENSleepSounds.m */, + 968CE57254DB2370C0F508C5828916E8 /* SENSleepSoundsState.h */, + 7076755D76989F4EA9F2DA4A59AA97A6 /* SENSleepSoundsState.m */, + 2A275D2A2635E9FFECD76DF7D8FBEDBA /* SENSleepSoundStatus.h */, + BCFE326B4F4BD3881194984CB91021CF /* SENSleepSoundStatus.m */, + 09570FC8499F25FC15C64F62F9D749FB /* SENSound.h */, + AFF6C1CE913BF27C12E0FE437BB8B60B /* SENSound.m */, + 00F0B82158E75DD6D1F4A7CF353AD068 /* SENSpeechResult.h */, + 5581D3DBBFE4D9235DD856ABD83B11F1 /* SENSpeechResult.m */, + 5283E468C18BE03C90F318828496F39B /* SENSupportTopic.h */, + 5DB07497258DCEC7996C83186C394878 /* SENSupportTopic.m */, + 1ADB58A30AB4367DA57BC46CBEFBC836 /* SENSwapStatus.h */, + 3CA6C62CE63AF4F265D6608C1BBA84EB /* SENSwapStatus.m */, + B46F9E6FA5DF85C87375A3ECA0E5B80B /* SENTimeline.h */, + AC7773E468D75EB09A0F98A2693E2849 /* SENTimeline.m */, + B6D57ED45F147FEAB44C65AF543B572C /* SENTimelineMetric.h */, + 7078A20ECA04DECD402A7BAD1252EBC3 /* SENTimelineMetric.m */, + 933D27431333F936A55ADD3CE04237BC /* SENTimelineSegment.h */, + 18DD6368EE2B20ED3DC43E4B02655EC2 /* SENTimelineSegment.m */, + 3359706735C31C851683C69413394ECA /* SENTrends.h */, + 12C118E5E3E39A6631796F642CCA6335 /* SENTrends.m */, + 4098DC5F9F0D0C731FFE442A6519001F /* SENTrendsGraph.h */, + F39F5BC5DF2255411328E8AC651508A4 /* SENTrendsGraph.m */, ); - name = "Support Files"; - path = "../Target Support Files/SVWebViewController"; + name = Model; sourceTree = ""; }; - A04161570D432A5ADE28B27176AAAFCB /* Support Files */ = { + A41481763D590D1A2E18831960CF3ECD /* Support Files */ = { isa = PBXGroup; children = ( - 02D16758C5BB5EC2393520DEBC866A4D /* FBSDKLoginKit.modulemap */, - 25D614E54E91170B89219ABE409F1A20 /* FBSDKLoginKit.xcconfig */, - CD46B84345EF4F585F321C40C2E77227 /* FBSDKLoginKit-dummy.m */, - EA930A26C8A8E939BFA1DCF44EFD0F2B /* FBSDKLoginKit-prefix.pch */, - 8929DB04C153CA2EDDF309284261E0DF /* FBSDKLoginKit-umbrella.h */, - E6FC56EEE5B1C1F9A0AFD28641200159 /* Info.plist */, + F1428579D3CA5FB2A99D7DA42FCC262C /* Info.plist */, + 4CB4223460579BFE16D404A5FC1311DF /* NSJSONSerialization-NSNullRemoval.modulemap */, + 92CBA1F68EA93C64AC9E0050E7CB1836 /* NSJSONSerialization-NSNullRemoval.xcconfig */, + 38E96CC1B497B3CF3028562A18075B3D /* NSJSONSerialization-NSNullRemoval-dummy.m */, + 7D6D937E5387A7010571E80B92382053 /* NSJSONSerialization-NSNullRemoval-prefix.pch */, + 32BEFB96E2614FF65FDDF14C81E8AF17 /* NSJSONSerialization-NSNullRemoval-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/FBSDKLoginKit"; + path = "../Target Support Files/NSJSONSerialization-NSNullRemoval"; sourceTree = ""; }; - A4CBB114862AEEF55F9E83E72BC090E6 /* BLE */ = { + A57EC28B598BC4BCF0285FCD571F8FDC /* Nocilla */ = { isa = PBXGroup; children = ( - 34C4653CF80652A9EE0E0D943D4AFC74 /* BLE.h */, - A43F76C853D0AA1BA8528D2F2939C9A4 /* SENPeripheralManager.h */, - F09C67F97F6515AEBC58B87BBB0184E5 /* SENPeripheralManager.m */, - E3B3C1DDC863179F93AEA5C8616CF7C4 /* SENSense.h */, - C9F2ED922FD2CF3C67AABCC6052265BB /* SENSense.m */, - E4F0FDA1AA40AEA0FA8464B667AFFBBD /* SENSenseManager.h */, - 96FC6A937C90DB94CFE351E48C0C5C7A /* SENSenseManager.m */, - 1AAEE9AF28B505B549FC52F3F2D94FAD /* SENSenseMessage.pb.h */, - 2AF7B706B95365925BA0AE7DF234FCFC /* SENSenseMessage.pb.m */, - 4AAFA0BD5323BFAD73A8E8DA29F913B1 /* SENSleepPill.h */, - 5A40D58BB3EE05658ABDA4BF915783FB /* SENSleepPill.m */, - 07BEC55AFA404BA27909A0EA5616689D /* SENSleepPillManager.h */, - 0F12039BECA8570BFB820E6EAB61C863 /* SENSleepPillManager.m */, + 6B30B74EC9369440BAAF252DC3AD2C61 /* ASIHTTPRequestStub.h */, + 30C2ABAF468B78660BAC589B7727DC7E /* ASIHTTPRequestStub.m */, + 2507016EAD8568CEE8D002D8A2751B8B /* LSASIHTTPRequestAdapter.h */, + 5466EEDCDCC2D644C5EA367E208A8545 /* LSASIHTTPRequestAdapter.m */, + 09523D7F5BDACB18BAF98AB8708F9C9B /* LSASIHTTPRequestHook.h */, + 8E0830D4308A9E0B7D2C27C8653AEB46 /* LSASIHTTPRequestHook.m */, + BBC21A823C05D778E937BEEB187942B6 /* LSDataMatcher.h */, + 99F03E450A33A8C3D431576B35EB835B /* LSDataMatcher.m */, + 545AF44DF7365757E250BD89EF6D321E /* LSHTTPBody.h */, + 31614EC17C1634C477A707935176004E /* LSHTTPClientHook.h */, + 335013E67B25FDF2F329024853F4B7B4 /* LSHTTPClientHook.m */, + 500AA771FB841D53FE045763D4D10599 /* LSHTTPRequest.h */, + D82D1C78F053951B1893D8F3264AFA20 /* LSHTTPRequestDiff.h */, + 3B6E5CE509D2AE9621028C56C8344091 /* LSHTTPRequestDiff.m */, + ECBB6F3F8E26BE96B8A5CD61E252CC8F /* LSHTTPRequestDSLRepresentation.h */, + E1C4924E95F45DB3C36859756C23A879 /* LSHTTPRequestDSLRepresentation.m */, + 5FE202EBB431425C25920E1F5651CD48 /* LSHTTPResponse.h */, + B3ED77A7082EE7DEB2BB85D722E7415C /* LSHTTPStubURLProtocol.h */, + B4C2C6501FACF9561D6F68322EE52204 /* LSHTTPStubURLProtocol.m */, + 94C83F4D5AC687E14CC0768704F50A3F /* LSMatcheable.h */, + 76E021734DAC9A375097773DD9045B92 /* LSMatcher.h */, + 5F4821BB04144ED8940BDF07C07CFF98 /* LSMatcher.m */, + 95222582FE3DFEC1320BF7A329F4F2AD /* LSNocilla.h */, + 1D8F5B6F669891667ABCA22851A8D0B8 /* LSNocilla.m */, + 519D10F4ADFF6920D7D83A7ABDEAF06E /* LSNSURLHook.h */, + 1013530ECEF0D1CEFF9FC1A9EEB8F3FC /* LSNSURLHook.m */, + 801B69BCCE8BF7A61CE833C17D700356 /* LSNSURLSessionHook.h */, + FA3E21E1E8860168541DF45D3A197C85 /* LSNSURLSessionHook.m */, + 6213DEFAD38FC99CD891719C48EE862F /* LSRegexMatcher.h */, + 5AF50D984B2B6E1AA04EBF3E51FEA2D6 /* LSRegexMatcher.m */, + 7B60E83817E45086154CE9DB09FF26E4 /* LSStringMatcher.h */, + CDA54E1FAEF332FE9945DD1AD9CBB7D4 /* LSStringMatcher.m */, + 677FCE0E4C8C6CCD3C8F0EC119032BC4 /* LSStubRequest.h */, + 17ADD41EA3F05B532353E5E1EDA618F8 /* LSStubRequest.m */, + F0C9278BC8FE54E4B8216EDC68485642 /* LSStubRequestDSL.h */, + 363BD4FFC3C021BD93FF1FB3FD4D310D /* LSStubRequestDSL.m */, + 0D5A115AB9FDC75A5CCDE63C3B1B9E34 /* LSStubResponse.h */, + A89F4ECC818A9394FB1C3698A3C58F50 /* LSStubResponse.m */, + 948030C51C2CA2421DEB4282CDCA0A48 /* LSStubResponseDSL.h */, + D52596F53F9D3F6464EDCECA65FF9F63 /* LSStubResponseDSL.m */, + 61C87EEC783B9C49305471E7207BFDFF /* Nocilla.h */, + 95F07ED41C831E574107AA8715075BF3 /* NSData+Matcheable.h */, + 89A7B3B704066D9A3551450C8FDB7C57 /* NSData+Matcheable.m */, + 56540D103ABD57110ABB078856E08B6F /* NSData+Nocilla.h */, + E4FF4EDF44D4B97DA370E3DE2A3FFBDE /* NSData+Nocilla.m */, + B2788EF6BBBDF8F8B52DB58F4312DF4A /* NSRegularExpression+Matcheable.h */, + D6F07098D3082A6483DBE80BB8AFFE3F /* NSRegularExpression+Matcheable.m */, + 093BD6F2466C276E5DF6F173C291B7B9 /* NSString+Matcheable.h */, + 69C14FC0724F35141F62185ECAB1B686 /* NSString+Matcheable.m */, + 5F63BE0ABA7E5074872CAABDF275C28E /* NSString+Nocilla.h */, + 01245847AACFC2E85F0FE06B0708C485 /* NSString+Nocilla.m */, + EBF4D278AFB07E17D92CDFCCE0D0F6A1 /* NSURLRequest+DSL.h */, + D37677D65E67015A8A4DC83951896D73 /* NSURLRequest+DSL.m */, + 31410DA3B995B441BD00103988007BA9 /* NSURLRequest+LSHTTPRequest.h */, + 4CE17660AC31FE0987045850038FB2F8 /* NSURLRequest+LSHTTPRequest.m */, + 9DF21DE658EBB0204C825D61A4CA101E /* Support Files */, ); - name = BLE; + path = Nocilla; sourceTree = ""; }; - AB78921FDC21CAF98F5A0D5850ED4D07 /* Targets Support Files */ = { + A5808EC29F8D7EF882005D45BC261870 /* Support Files */ = { isa = PBXGroup; children = ( - 32BA70E91B9DE1E4370389E442036E1B /* Pods-SenseApp-RoomConditionsExtension */, - B4C19A7CB5623DBF3A35A851A2434B01 /* Pods-SenseApp-Sense */, - 39158816A7D81DA63E32D935451A28E8 /* Pods-SenseApp-Tests */, + 5F2E3AD097EEEA586973D064EBC782DE /* AttributedMarkdown.modulemap */, + 2F214394C0485371E194EA56958FF704 /* AttributedMarkdown.xcconfig */, + 6DF46AEFF8A62696E8B67DB4F29B52BB /* AttributedMarkdown-dummy.m */, + 2C2A4E41C2EA67D3151AC851726EDDF5 /* AttributedMarkdown-prefix.pch */, + C7350467646C636DB48FDB8282C9ED46 /* AttributedMarkdown-umbrella.h */, + CE12BEF0DFF2604482654B65CA46C720 /* Info.plist */, ); - name = "Targets Support Files"; + name = "Support Files"; + path = "../Target Support Files/AttributedMarkdown"; sourceTree = ""; }; - AB85800B79B4EDAB8E9B6A1F68649615 /* Core */ = { + A67E51982F47A0F630582A8482605B61 /* SVWebViewController */ = { isa = PBXGroup; children = ( - 09519BFFEDDF2FBC44ADEA5C2EC31612 /* Frameworks */, - 4254CF155EA090C99AE584AFF3F77FD5 /* Resources */, + DD89876610F3E3D8DFC0779D0FBE68CA /* SVModalWebViewController.h */, + 88DD50B016337FED19D37D9B23CBEB93 /* SVModalWebViewController.m */, + E1633A988CD49932F1E3FFFE51C7233E /* SVWebViewController.h */, + C51F9EF1950D1AB41E9E3737ED8B3159 /* SVWebViewController.m */, + 4A5F06257EDF79473630CEFF86AFA989 /* SVWebViewControllerActivity.h */, + E9F2DE2302FA74A2C2F30618133A9B8C /* SVWebViewControllerActivity.m */, + 45A9B7CE498180BD7A7C657843BC6D22 /* SVWebViewControllerActivityChrome.h */, + 815F49EE90B872FF8C89C51CE8FF5C78 /* SVWebViewControllerActivityChrome.m */, + 359C9813E7319A9FE4EE8A299F1777F9 /* SVWebViewControllerActivitySafari.h */, + E0BB15CD6DEDE20E2D0E1D7EE41DE109 /* SVWebViewControllerActivitySafari.m */, + 656CB99A33464127F6A59C6ECDCC015A /* Resources */, + 120D442C55611C8CEDD553BC147FFDED /* Support Files */, ); - name = Core; + path = SVWebViewController; sourceTree = ""; }; - AF7440483FCCBBC2CE2F312E7BB840A9 /* AppLinks */ = { + AAFF2DF79CB4EF6569EF285986AF4BBC /* Default */ = { isa = PBXGroup; children = ( - 84BAA1017D960A876DD404AD2C5F0475 /* BFAppLink.h */, - 41438E2D786CC1426B9E9D9551117362 /* BFAppLink.m */, - F6A6BE172F34383A1308E4B2A7531C1F /* BFAppLink_Internal.h */, - F8F3E98A9214C3419B90756D35523D66 /* BFAppLinkNavigation.h */, - 4250230E6D5B30045A7D38B40A3B3E92 /* BFAppLinkNavigation.m */, - 7B6330290D2F9804B9A1DC2C49560C59 /* BFAppLinkResolving.h */, - C2F5322C590B5B678C52F7EF6928CC56 /* BFAppLinkReturnToRefererController.h */, - FD17CE6C71AD546000EE4985BF1BDFE5 /* BFAppLinkReturnToRefererController.m */, - 41912B1F63B05B3A28DCE2573B7A3A97 /* BFAppLinkReturnToRefererView.h */, - 1A5856EE930464E2D35F3DD82A4EE37C /* BFAppLinkReturnToRefererView.m */, - 3E1909A1D15E078A32DEB12E59BDCC8F /* BFAppLinkReturnToRefererView_Internal.h */, - C08BA21DAE13DB22364E1550DE467B47 /* BFAppLinkTarget.h */, - 498ECB3CB5E13051A3BF927D35D395BF /* BFAppLinkTarget.m */, - 489904E0154895DFA08909594232620E /* BFMeasurementEvent.h */, - 713EB92E338EE67B6A63F7D4C94D31DE /* BFMeasurementEvent.m */, - 09F0DE7277068BDD933F79CC61695BCD /* BFMeasurementEvent_Internal.h */, - FBCBAA43137D41C57D8C9F3DCCAE0769 /* BFURL.h */, - 44AA5E431DBA0E358AEF48CF73B54899 /* BFURL.m */, - 1AFB153F2FB32B0C428586CB58E47AFE /* BFURL_Internal.h */, - 981A7AAF7027CB6B16675263DBF3ACBF /* BFWebViewAppLinkResolver.h */, - B9E0A3D2926DF0BFB3B42AB06B648B6A /* BFWebViewAppLinkResolver.m */, + 779498A6ABD2D124A9BD9BD17AF0F3B6 /* CocoaLumberjack.h */, ); - name = AppLinks; + name = Default; sourceTree = ""; }; - B1CB943BF8A09D3238FEF293A6F68B8F /* Tasks */ = { + AB78921FDC21CAF98F5A0D5850ED4D07 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 58976ED944C88D7AE6BEC810C3F13DA6 /* BFCancellationToken.h */, - A70F3EB906FC60FD9691CEAA6C29B605 /* BFCancellationToken.m */, - 698C7003143F532A17E15DEBBE2917EE /* BFCancellationTokenRegistration.h */, - 0D818A955A6046CC93BA65B931C589FC /* BFCancellationTokenRegistration.m */, - 85AC2324CE1145F91D753495DDF9A7F8 /* BFCancellationTokenSource.h */, - 50068D9320D4A7DD473479CFD0097DC4 /* BFCancellationTokenSource.m */, - EFA6FA1BF7F1C8C86B1EBD29F953DB25 /* BFExecutor.h */, - C9B19350D0DA5D160BB0930BF02CD69C /* BFExecutor.m */, - CFCF625F7E96BBE30F089D79C65F1F09 /* BFTask.h */, - 11B037715A730DDBD78E533777AA9FCE /* BFTask.m */, - 367738D81AEBA2DE2A02CC551AA91F5D /* BFTask+Exceptions.h */, - 2C7905D25FCB5938BEF9953ED273D55F /* BFTask+Exceptions.m */, - C9FBAC712B92DD64B902DC636670893A /* BFTaskCompletionSource.h */, - D7A2F79250AEAC604564C721BB8B16B8 /* BFTaskCompletionSource.m */, - 62BE933B5EA47499AD413A17857E5DED /* Bolts.h */, - 7CD742FAA64C39D5ACD3C727AD3605D7 /* Bolts.m */, + 32BA70E91B9DE1E4370389E442036E1B /* Pods-SenseApp-RoomConditionsExtension */, + B4C19A7CB5623DBF3A35A851A2434B01 /* Pods-SenseApp-Sense */, + 39158816A7D81DA63E32D935451A28E8 /* Pods-SenseApp-Tests */, ); - name = Tasks; + name = "Targets Support Files"; sourceTree = ""; }; - B266843ACE3AC30D35326E8AD0377208 /* Support Files */ = { + B1AE4F48241519BE63D86495CC3052CC /* Support Files */ = { isa = PBXGroup; children = ( - CBC765FE50D0FCC549A08777CB1FE992 /* Info.plist */, - 3A4E663E522108DE20E3999BC02C2836 /* iOSDFULibrary.modulemap */, - 22F35C9B1DC4DFD29A29D7E3CB7099E1 /* iOSDFULibrary.xcconfig */, - 77E181FB001DAB7E09FB02BB9F5F8610 /* iOSDFULibrary-dummy.m */, - 2C9012CD72EBAA464DDACCCBCF3BD9D6 /* iOSDFULibrary-prefix.pch */, - 28DE4D734A1BC4136083B5D672517EAC /* iOSDFULibrary-umbrella.h */, + 452476D587ADE3F8A137D1AC7E137581 /* AFNetworking.modulemap */, + 21956A82AF3D8BDD286799D63D8FF209 /* AFNetworking.xcconfig */, + FD116CE3F5D968D1005C7EA7FC7E732F /* AFNetworking-dummy.m */, + 7AC97D798FEF26A9653147C2B70443DA /* AFNetworking-prefix.pch */, + F54092C6F6296BDC5603E44198228594 /* AFNetworking-umbrella.h */, + 70D4BBDD46DF10849A1B199EC4C81A0D /* Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/iOSDFULibrary"; + path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; - B299F895B340F901A126CC8C71AD8B6D /* SHSProtoBuf */ = { + B254B3262433AA601DB4A5C3E340DF46 /* Core */ = { isa = PBXGroup; children = ( - 5B66BEA723662314E9899CC7EBC665DD /* Descriptor.pb.h */, - 1B378F5B3A6A21072BCE37454600DA6A /* Descriptor.pb.m */, - 54E2EDFC2980CF8328CF0175DF36008B /* non-arc */, - B96856394ACA86B5D569521B6C66A78C /* Support Files */, + 5DEBE4581193B14746B8A112829E2EA2 /* DDAbstractDatabaseLogger.h */, + 2F3E49F8020BE6057ECD9C892FD27F50 /* DDAbstractDatabaseLogger.m */, + 7263CE090D8B823DB8DAE44133226E1E /* DDASLLogCapture.h */, + F7F3E5CD0F66227EEF8E758382025765 /* DDASLLogCapture.m */, + 75CDDC0B351DE7BCD88EE204F53032D0 /* DDASLLogger.h */, + 2C65BC73508A3018B573A86518C769E2 /* DDASLLogger.m */, + 3E8E197D7E8B967E4BC1FC5B37A27DA2 /* DDAssertMacros.h */, + 0759DDF9BE9A454DFC5FE80C921B3F7F /* DDFileLogger.h */, + BEB27B45E17C43A9ED91EDF86678695C /* DDFileLogger.m */, + B48F0F4869C522556C265F7C4D5ADDFC /* DDLegacyMacros.h */, + 63144A2E58C65F689B89B16FC05EDCE9 /* DDLog.h */, + F91E7B009BD5CFF0E9D1012E5B201B12 /* DDLog.m */, + 97C78BFB8AC3CE98AED06E94161F9C21 /* DDLog+LOGV.h */, + F61E0C433C5E2334B6D1B9635C749CBF /* DDLogMacros.h */, + C12A843003D2BA39D02F96C191F43DA1 /* DDTTYLogger.h */, + 23A2CB868492E07B4E11D59DF62C0F6F /* DDTTYLogger.m */, ); - path = SHSProtoBuf; + name = Core; sourceTree = ""; }; - B48D26CEC74A10A3107A4D7286C5204A /* Support Files */ = { + B2F863348C90AAD9E1EF28821DEEB6BF /* Providers */ = { isa = PBXGroup; children = ( - 8332263C10292596E6B7766DA111683F /* CocoaLumberjack.modulemap */, - 52A4D5F564B5DCFF8CC82F4CDF01D02D /* CocoaLumberjack.xcconfig */, - D3198520D520DF1AEACD4CF55E0809E6 /* CocoaLumberjack-dummy.m */, - B8E13A122407533E3C3CDE955DC23EA3 /* CocoaLumberjack-prefix.pch */, - CEAAF653B4986B348CDD2348D1AC71EC /* Info.plist */, + 9E6A22DCDD5EAFBFB3459E0F2E124A2F /* Frameworks */, + 8D0CFF7B219BDED5F2C002D05FA8A488 /* Resources */, ); - name = "Support Files"; - path = "../Target Support Files/CocoaLumberjack"; + name = Providers; sourceTree = ""; }; B4C19A7CB5623DBF3A35A851A2434B01 /* Pods-SenseApp-Sense */ = { @@ -5152,758 +4663,686 @@ path = "Target Support Files/Pods-SenseApp-Sense"; sourceTree = ""; }; - B5A50164285BD8AA4E92722E90F009D1 /* Analytics */ = { + B4EDBA342695D9F2869FA070C2FB341D /* Support Files */ = { isa = PBXGroup; children = ( - 48DAF3A169A34E643FA514298E6052C3 /* Analytics.h */, - 2AC838FD7A644F3A846B795C7C0EBBAC /* SENAnalytics.h */, - E49F52513E02D80F4462FA863A4C2FF3 /* SENAnalytics.m */, - A49BFF2C63D52B930D2FD2BEDD2ACE86 /* SENAnalyticsLogger.h */, - B715FE6A4033EA20B19BFC9BC3C524C5 /* SENAnalyticsLogger.m */, - 85F3DF8C72277558573A937B100C62E4 /* SENAnalyticsProvider.h */, + 46546C5F806A200FB107642610F07BBC /* Info.plist */, + 0F1BE33C162AA57174076E5F169DCB4F /* MSDynamicsDrawerViewController.modulemap */, + 578E473A81534879A7754662CBF5C7AE /* MSDynamicsDrawerViewController.xcconfig */, + 2319FF9B83BC200A79114E0DDBF06EF4 /* MSDynamicsDrawerViewController-dummy.m */, + 470DA3D68044AD2DB774565387E24B36 /* MSDynamicsDrawerViewController-prefix.pch */, + BDCBBF6468D2782C44943997A9EDA568 /* MSDynamicsDrawerViewController-umbrella.h */, ); - name = Analytics; - sourceTree = ""; - }; - B5E94B72E282487E65FCB6FB91EA1336 /* SVWebViewController */ = { - isa = PBXGroup; - children = ( - 4C757146847A7817E5D77F11908B3B35 /* SVModalWebViewController.h */, - 6A7AC6B4D48D03E7C9D2029EB53778FE /* SVModalWebViewController.m */, - 3B2AB40083C0C529D770B6144B94BCFA /* SVWebViewController.h */, - 2B675485F28C9736A967223AF34FC024 /* SVWebViewController.m */, - 6D52A23829C3D8FF8EBAB3DA32B4A028 /* SVWebViewControllerActivity.h */, - 9D03431772826192EF874FE02B43EF2B /* SVWebViewControllerActivity.m */, - CE866FA00A46EB798B09CAA11FF6186E /* SVWebViewControllerActivityChrome.h */, - 8BA1F5034D2497276F9AD4D4FE66BCD3 /* SVWebViewControllerActivityChrome.m */, - 78F60CA651949BE629E319BE82D49441 /* SVWebViewControllerActivitySafari.h */, - 3F8939771F418C11A6B2FF500695E955 /* SVWebViewControllerActivitySafari.m */, - 4E2904BD1DC03598D6BE2234BA004D10 /* Resources */, - 9AB47EE3030C9F3154A8E0CC75BD90A3 /* Support Files */, - ); - path = SVWebViewController; + name = "Support Files"; + path = "../Target Support Files/MSDynamicsDrawerViewController"; sourceTree = ""; }; - B77C452A70D79B4E997BC12CCD2EDDC9 /* iOS */ = { + B593854B39F28D6772DFEB2BDC075AEA /* SenseKit */ = { isa = PBXGroup; children = ( - 1D532CAA6C3A2CF3CBDCCC50F02C57E9 /* Accelerate.framework */, - 06B20C0BA0BBD6B926FCAA236E5A1F05 /* CFNetwork.framework */, - 2D7200B60EC6D284FDE491DC1FB8D751 /* CoreBluetooth.framework */, - BB88313660665F0DBCBAC8DC8288EFD8 /* CoreGraphics.framework */, - 6AF2E001ECE0A0277DC2FE0249923BE1 /* CoreText.framework */, - 021438A38FEF5D3419456723C651A751 /* Foundation.framework */, - BF00F5E3F7CB1DCDB79D6689731A768E /* MobileCoreServices.framework */, - CC842E1ADC9A4495DEA155AB31DDF3BF /* QuartzCore.framework */, - 68BCD4F77F990C4E98DD87E9EDE72AB6 /* Security.framework */, - 9B328593408CB3F1D619A8AB46709C90 /* SystemConfiguration.framework */, - A2F99575BF7F5D721ABB6205858CC8B6 /* UIKit.framework */, - 83A513B597AC9A1DF923AA9C3F84D698 /* XCTest.framework */, + 4E247502633F14FD7BB8B6EADD9AE600 /* SenseKit.h */, + B9CDE23DB8635D775FD3B739915E7E05 /* Analytics */, + 721CAE8239E96328F72F232EB7643080 /* API */, + E154F51B0E81938E94839B3C53FD1A45 /* BLE */, + A1653E306C88E4CD6899BD9210130367 /* Model */, + 3278647F6A6A1ED8A6D4F4CC44CA7B9C /* Service */, + 9C436C6190E9B84C75E27D7C82B51D8A /* Support Files */, ); - name = iOS; + path = SenseKit; sourceTree = ""; }; - B91039313F1378A5C869C2DE2EFF4639 /* Support Files */ = { + B68C03D8A7D7E55A03A095DC66AC06D2 /* Bolts */ = { isa = PBXGroup; children = ( - C2779E9B5EDAD5139A6FDD1E3608F7DB /* Analytics.modulemap */, - 6A2077CC4C2A1D14FAD7ABE86410B6A0 /* Analytics.xcconfig */, - C62EC939F96FC6519DB4B733F2727F61 /* Analytics-dummy.m */, - 975F48037B79F5DF4525B45541960875 /* Analytics-prefix.pch */, - B3DA3B0841D6336AC189A14783AC326B /* Analytics-umbrella.h */, - 20503DA09C397104B780E49C3E683447 /* Info.plist */, + 82C553A5046BCC04DB34606C5005B57F /* AppLinks */, + 364386F117A23B25CC7FCBCD8E8A5D2A /* Support Files */, + C8F9F5D4C1D3B121BBEB65006E6BF774 /* Tasks */, ); - name = "Support Files"; - path = "../Target Support Files/Analytics"; + path = Bolts; sourceTree = ""; }; - B96856394ACA86B5D569521B6C66A78C /* Support Files */ = { + B807AB6BBFFBFD715F73484E5324F45B /* no-arc */ = { isa = PBXGroup; children = ( - 17C31B0AB211A6C1B79CC7DBA8E001E2 /* Info.plist */, - AD2F68E6129489347B17C3D6BF637029 /* SHSProtoBuf.modulemap */, - BEBD80DF3001F0E519472171109002B8 /* SHSProtoBuf.xcconfig */, - 46B86E66AA435568334605881B45FD53 /* SHSProtoBuf-dummy.m */, - 674B6ECCBB669641E988B28569DB8E36 /* SHSProtoBuf-prefix.pch */, - 653C923400640C55F81E91E88B97016C /* SHSProtoBuf-umbrella.h */, + 40540C3E2177A59A2713A8C3BBA5550D /* KSZombie.h */, + F856F12A54EB6C3CB356E916B1605310 /* KSZombie.m */, ); - name = "Support Files"; - path = "../Target Support Files/SHSProtoBuf"; + name = "no-arc"; sourceTree = ""; }; - B96AA913FF80EE421129769CA637D3A5 /* Support Files */ = { + B9CDE23DB8635D775FD3B739915E7E05 /* Analytics */ = { isa = PBXGroup; children = ( - 4F7F04ADE9DA46E4EA71E64A06C4F4EA /* Info.plist */, - 63102E9D1BAD528C6073AD67C094792E /* SenseKit.modulemap */, - 22DC5E202A7CEE76CF750011FD48DE91 /* SenseKit.xcconfig */, - 79256F8A146F1F13059B89A99BBD914D /* SenseKit-dummy.m */, - 5EA47F3D2BD0EF87289F7E25CA8E949E /* SenseKit-prefix.pch */, - 36DC9F89D1FD632E59BCCD2786F12DB0 /* SenseKit-umbrella.h */, + 040836341333C0543FD6FD42CFBE8E4C /* Analytics.h */, + 4198B0C8219AED58787CEB919A08D23D /* SENAnalytics.h */, + 13238306B1C43C7867055268CA2F657D /* SENAnalytics.m */, + BDA8289B0FF07BF0CB87F4B7C9C6FA8A /* SENAnalyticsLogger.h */, + FF3D082843AF96E08C5337FE2CC7051E /* SENAnalyticsLogger.m */, + 4B95149C26B5D6D62AEAD1BA82E1EB01 /* SENAnalyticsProvider.h */, ); - name = "Support Files"; - path = "../Target Support Files/SenseKit"; + name = Analytics; sourceTree = ""; }; - BD8D0F3CD1A27CA08A3FDF2838A1B27B /* Support Files */ = { + BA07684840A1A0CD0B73180CB689D4A0 /* Security */ = { isa = PBXGroup; children = ( - 8CD55CA9C0D332AFF961F4D9578FF8AA /* FXKeychain.modulemap */, - 34F4577B72E2A217DDC844D53E8644DF /* FXKeychain.xcconfig */, - D54A7DCC95C3F8A140402B38295D1F65 /* FXKeychain-dummy.m */, - 4199D51823267B1943DDA5756E7B2C07 /* FXKeychain-prefix.pch */, - 2529986B25C4D9A988086319005BCFA3 /* FXKeychain-umbrella.h */, - 4F03B102941518C1C5A69BDFF4958AA9 /* Info.plist */, + CA31891138CC7D3AAB0E5D0973AEDB67 /* AFSecurityPolicy.h */, + 6EA18FC666C3D52D60860404E6189215 /* AFSecurityPolicy.m */, ); - name = "Support Files"; - path = "../Target Support Files/FXKeychain"; + name = Security; sourceTree = ""; }; - BE40A28513D0CEB4E10F1A9CF47EF53E /* Support Files */ = { + BAA5BF58C2085F4775FD6106FD5B4E02 /* Support Files */ = { isa = PBXGroup; children = ( - 5DAED22ABD4630AAC5624E8941E2AEF6 /* Bugsnag.modulemap */, - 939C98732E4DB722B9555EF05098DEF5 /* Bugsnag.xcconfig */, - F2FAF13AF0F884EAE93FBBF3343A6F22 /* Bugsnag-dummy.m */, - 0BFE25F0699CD7125219BE452703A025 /* Bugsnag-prefix.pch */, - D4393B733BC72D50B72652C5963D4876 /* Bugsnag-umbrella.h */, - 9D073A3E2B880A947591E200CFE0A6D4 /* Info.plist */, + 98DADAE4E0DB5915769C46A669D1C998 /* Info.plist */, + C57005B0A8C8536DCB31A9BF8DB5131D /* LGBluetooth.modulemap */, + 4EA5C5D6E04F5ED50301DE2D18E1FEDF /* LGBluetooth.xcconfig */, + EBC5DF030E021A28E9331B3402CC79D8 /* LGBluetooth-dummy.m */, + 47368075F361B69C9AF1269602984E50 /* LGBluetooth-prefix.pch */, + B09019AD5CD56C40A9347D137ACA8FA2 /* LGBluetooth-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Bugsnag"; + path = "../Target Support Files/LGBluetooth"; sourceTree = ""; }; - C02CC405C826C63C0096D3364657FAA4 /* LGBluetooth */ = { + BB0B80CC59DE2C9CAD42FE6427A2A36A /* Analytics */ = { isa = PBXGroup; children = ( - 3B97743BBDE3BB4DB6073F3CDC1FA52A /* CBUUID+StringExtraction.h */, - 0016455B4CB134F7ED16412109AF5560 /* CBUUID+StringExtraction.m */, - 65C565E593EEF0089FFA3636DA0BE986 /* LGBluetooth.h */, - 924C6847DDBA6A3E5A55B7D93E99557B /* LGCentralManager.h */, - ECE48B2BD7591E96FD544CAAB991DA2E /* LGCentralManager.m */, - 309BD224732EDAB0A2F7E9826CAB3BE9 /* LGCharacteristic.h */, - 539E8856D8A5AA9ECD4884ED94C025FC /* LGCharacteristic.m */, - D043A9D933BD3924A046BA5834109A83 /* LGPeripheral.h */, - 21FE4323122965E78215E3D8DDDE4E30 /* LGPeripheral.m */, - 6FAD384CA61220FC6C0EBDCF71887A59 /* LGService.h */, - ADB4EBD1C58434E6333C4324E900CC11 /* LGService.m */, - 8B6DCE4105E52FDD0E15AC74850E940C /* LGUtils.h */, - 8D9A3AB57BEE632BFED61A51258EB938 /* LGUtils.m */, - 920A574339C7757CE365DFA32AD77EF0 /* Support Files */, + A05AEB6716867C43869332E440DD373E /* SEGAliasPayload.h */, + 17175B0CD77F0BB867113288F804A887 /* SEGAliasPayload.m */, + 3AE9CC709CA19997AD684E09C8103671 /* SEGAnalytics.h */, + 537805D689B845335B86408CF45FBCD2 /* SEGAnalytics.m */, + FC4794256070F45472C414ADB99B7B39 /* SEGAnalyticsRequest.h */, + 783A4394DC4195056589A42D7FA3BF34 /* SEGAnalyticsRequest.m */, + E18339728278CB13A92950BBDACBC727 /* SEGAnalyticsUtils.h */, + AA5D9FAEAC598D1EEE2A92A6586278EC /* SEGAnalyticsUtils.m */, + 187881157EE7CB69C1C92B37C20EC454 /* SEGBluetooth.h */, + 2E32E3649C5910A056CEFE9932C35A42 /* SEGBluetooth.m */, + 5D8C4FCD3415CEE75527DC0E85D6DEA5 /* SEGGroupPayload.h */, + 879DFB09BA41B8F1A9EF4D8D9EA00A1B /* SEGGroupPayload.m */, + 3EF9F215684F11D94232185F782F5B79 /* SEGIdentifyPayload.h */, + 293A9493CDC3F6F9CC651F580C5A1DB3 /* SEGIdentifyPayload.m */, + 8971602E085776CC9D064C4B81CEF864 /* SEGIntegration.h */, + 7E382A1BA00D9F5FFA4D5DA7CACF23AA /* SEGIntegrationFactory.h */, + 6B8709C22DA5CBBB213CCEBDF61E61AD /* SEGLocation.h */, + FC462AEC4720202E7CA70C6224C05CBC /* SEGLocation.m */, + 1F7C3374E8E535B2622C7B3693606251 /* SEGPayload.h */, + F83F6D217C69DC0AEADEE9A4FD360280 /* SEGPayload.m */, + A751D662E333811DED0940694505CF54 /* SEGReachability.h */, + 60A69ACAB8A877160BC310DF237D806D /* SEGReachability.m */, + DF1ED452AC901002591120B957E69A43 /* SEGScreenPayload.h */, + 86227FE61A80A4D7BA1F1A941F7868B0 /* SEGScreenPayload.m */, + 128488C38054F586D717EEFE4A150F47 /* SEGSegmentIntegration.h */, + 2F626315F30E7A0962B2623DBD460988 /* SEGSegmentIntegration.m */, + 3ABEF28E8C14FA6D58C9E7E820841C60 /* SEGSegmentIntegrationFactory.h */, + C9C749AC111AAB71D3F7C27A38F979FB /* SEGSegmentIntegrationFactory.m */, + C9F664F811A04D0CB3425299786E8399 /* SEGTrackPayload.h */, + D5212ED3AC00461C878C00E60CFE3E49 /* SEGTrackPayload.m */, + 63729D531267E31B7544B7D5ED02F03E /* Support Files */, ); - path = LGBluetooth; + path = Analytics; sourceTree = ""; }; - C717FC5AB921905C104EC7ABB9E85BB1 /* FBSDKCoreKit */ = { + BBD4AB17C63DE689F156836D02BB6D0C /* Products */ = { isa = PBXGroup; children = ( - 6DD8958EE63D9B1C2BA06BF41068CD14 /* _FBSDKTemporaryErrorRecoveryAttempter.h */, - F5FF4F55F79F165A240E8A7B9CDDFA55 /* _FBSDKTemporaryErrorRecoveryAttempter.m */, - 92F5C6A6CEDD8A4829229A67BE43018A /* FBSDKAccessToken.h */, - C72B822D3386376C668B51DA41CAD092 /* FBSDKAccessToken.m */, - 74B38116E145FFDE350DCE9982C147F4 /* FBSDKAccessTokenCache.h */, - D69EA37424320E5C549936C680278EA8 /* FBSDKAccessTokenCache.m */, - 5AA2E774CC695F4D1FC8017794F492E8 /* FBSDKAccessTokenCacheV3.h */, - 6ECD9BC2A8DC61B32F26B5EDF97826CD /* FBSDKAccessTokenCacheV3.m */, - 9B25AC2CF852796F667653066E60918A /* FBSDKAccessTokenCacheV3_17.h */, - F82C8552881345426475003A0B817751 /* FBSDKAccessTokenCacheV3_17.m */, - 06F4DF0AF3A045BAEAF5EC87EFF31E82 /* FBSDKAccessTokenCacheV3_21.h */, - 1DB30C71FC6B027EDAC2A7233178C453 /* FBSDKAccessTokenCacheV3_21.m */, - 9C5A27CE556AEA44B4EE4D1B4672AE5C /* FBSDKAccessTokenCacheV4.h */, - 93FDD84DFD8B5056C0534DAE22AC8FAD /* FBSDKAccessTokenCacheV4.m */, - 804037B80A1EFDF9670DF335BACA7E1E /* FBSDKAccessTokenCaching.h */, - 3FCCC9CF13B0DC37EB35B68FE45FD83D /* FBSDKAppEvents.h */, - EA7333EE1C0E1E680E7F9C08039E5AC6 /* FBSDKAppEvents.m */, - 443E5711794B9F9B8AB8BE3B3D8C049B /* FBSDKAppEvents+Internal.h */, - F9298F526B471B2C3D4D5CA396FA03CA /* FBSDKAppEventsDeviceInfo.h */, - 70263B5FFD43AB54AF0146472E320031 /* FBSDKAppEventsDeviceInfo.m */, - 28354B33C53B68B3861A74EAECA42164 /* FBSDKAppEventsState.h */, - 924C8965A2FEDC6E2C1BCB1491F0BB07 /* FBSDKAppEventsState.m */, - 5DBF3FB68F28E2561850518033AA1CD2 /* FBSDKAppEventsStateManager.h */, - 46D92206BEF592ED99DEE9594733D78C /* FBSDKAppEventsStateManager.m */, - 07B3D8645480F8427B9CDB1A9677A59E /* FBSDKAppEventsUtility.h */, - AF434524A0B0E561DDD21D498F2B4C2D /* FBSDKAppEventsUtility.m */, - 8A68233FC0AE329C25ED434EA34856C0 /* FBSDKApplicationDelegate.h */, - 1E80F685869AB9F6D7CFA2BE7BD16CEF /* FBSDKApplicationDelegate.m */, - AFDE6F82CB52A18ECC7100C7E94F2E36 /* FBSDKApplicationDelegate+Internal.h */, - D158C97FFD48A08C7426663F2FE20A96 /* FBSDKAppLinkResolver.h */, - 53040C83295E673DFE1A879CA261BDD5 /* FBSDKAppLinkResolver.m */, - 82F3638EB723E869445800DF0D8FD6DD /* FBSDKAppLinkUtility.h */, - 258972CDDC074D01FE00281ABD84DBB8 /* FBSDKAppLinkUtility.m */, - 0A1C0CD2E9517CD6F383925189A9EEEF /* FBSDKAudioResourceLoader.h */, - 9AB9781F43392FCD793A11A849D0FD35 /* FBSDKAudioResourceLoader.m */, - 983A6472808FDAE6AFBC8F2459323DE2 /* FBSDKBase64.h */, - 4BC892654DE790A354F2D76045A0735A /* FBSDKBase64.m */, - B1F3314F26DDA2E29D408923288B858B /* FBSDKBoltsMeasurementEventListener.h */, - F7F821475E818002E6FED6ACDD48C53D /* FBSDKBoltsMeasurementEventListener.m */, - 395C8AE3248EE3357FAB8DD25746154C /* FBSDKBridgeAPICrypto.h */, - A348F93D5D6965A472DFD8814CBF646C /* FBSDKBridgeAPICrypto.m */, - BFD52E39591E26673D9185159366E9E8 /* FBSDKBridgeAPIProtocol.h */, - B0EC883C206C11468A9A029FA0DB8779 /* FBSDKBridgeAPIProtocolNativeV1.h */, - B71EB212C20D3F5EB9E5FEB14DAF2BE7 /* FBSDKBridgeAPIProtocolNativeV1.m */, - 76C23BDDFC27ECAF4C8FB7E29659161E /* FBSDKBridgeAPIProtocolType.h */, - 6ABECD7C45630381EA11AADE0FE6DD3F /* FBSDKBridgeAPIProtocolWebV1.h */, - 5AEF158448A1C1544FAE4951B8D0405B /* FBSDKBridgeAPIProtocolWebV1.m */, - A61B3B50BEDD30CE6124F4A3D9E922DF /* FBSDKBridgeAPIProtocolWebV2.h */, - 631E7410752DCDA4946454AC79725470 /* FBSDKBridgeAPIProtocolWebV2.m */, - 74FFE9AD85BBC0E98D59E0361ABFBA5B /* FBSDKBridgeAPIRequest.h */, - D3CFEE1A970839519D114DDB2BB634AD /* FBSDKBridgeAPIRequest.m */, - 0B7967FD069C45DE48FCC4BA1863138A /* FBSDKBridgeAPIRequest+Private.h */, - 77A1FDD29683DEF29D837960B8445F33 /* FBSDKBridgeAPIResponse.h */, - 44107D2EA44667BB3BA20640AABDB4E9 /* FBSDKBridgeAPIResponse.m */, - 1B59B4B6D25A4E8BFA815CAB9625D6DB /* FBSDKButton.h */, - 4DFDE33FFBF7254EC8954EE648367886 /* FBSDKButton.m */, - A0A5B21D389A22E667549291387E93B7 /* FBSDKButton+Subclass.h */, - FB3EFB7F02F037ACD533B0BD9D8FE954 /* FBSDKCloseIcon.h */, - 5EB043608664B82E0858325DFAAB25AB /* FBSDKCloseIcon.m */, - 49423C1E7BF9B9A4AA23815A87928735 /* FBSDKColor.h */, - 3CBA366FBAA63B1100D364B49843D89F /* FBSDKColor.m */, - BDE8B81B58B2BFF7E97DFBADCDCC78AF /* FBSDKConstants.h */, - 4BF71069AF0D88E560683A5F4DE8CA61 /* FBSDKConstants.m */, - 01027B38EAFB49B95055CA7BE10FCE12 /* FBSDKContainerViewController.h */, - ACEBBEC96319425EFEFC0ED18823C7E8 /* FBSDKContainerViewController.m */, - 94D1A6D1B3C59B62B40736404D82D977 /* FBSDKCopying.h */, - 3E067C9724D3FB66EF4F59200B447C7B /* FBSDKCoreKit.h */, - 20A01CDFA0AFBC89ECBC46D1EEB2BB83 /* FBSDKCoreKit+Internal.h */, - 731F2C72F18E5784B41C850B9E1254BD /* FBSDKCrypto.h */, - 8CD058EF88EAED9466F60D6ECB8F6D5C /* FBSDKCrypto.m */, - 1CB46C5F2DCE3A88C23EDF3AF4E6E5D0 /* FBSDKDialogConfiguration.h */, - 474D5A3A9FB1F7C6294946611EAF7115 /* FBSDKDialogConfiguration.m */, - CEDE43F45B14ECCC87F3D0557CD027DA /* FBSDKDynamicFrameworkLoader.h */, - 78056ABA94955BCD9A275D1D09C54AC1 /* FBSDKDynamicFrameworkLoader.m */, - 0C5161941D4B52D86CD0F226B120CEF6 /* FBSDKError.h */, - 05845E36629366233189702305E5FB35 /* FBSDKError.m */, - DD18038F8539D3309E1488FA979135B4 /* FBSDKErrorConfiguration.h */, - 75C9A5239F5E5B11C78F7DBEBB4E8965 /* FBSDKErrorConfiguration.m */, - 0F4BC952C0F87F7F8522F247E273D330 /* FBSDKErrorRecoveryAttempter.h */, - BA1FD4A1FD166FCDC6F44EA7857FC737 /* FBSDKErrorRecoveryAttempter.m */, - E1F28597EF7599C6B424C8BBB7E2AE31 /* FBSDKErrorRecoveryConfiguration.h */, - 3119DB2C9924D0EB34FC7C1D07AD6D73 /* FBSDKErrorRecoveryConfiguration.m */, - F11C99A83EFD1E314EC3EA1AA492D24A /* FBSDKGraphErrorRecoveryProcessor.h */, - FAC216A79855FDEFB694CBF5E8E9F13F /* FBSDKGraphErrorRecoveryProcessor.m */, - 2AED365EBD19F96BDBA1E25E024D7E26 /* FBSDKGraphRequest.h */, - 969D9B15E2FC9C49D3C86CE6895D497F /* FBSDKGraphRequest.m */, - E79830219A71B40D6AC209583D4FD966 /* FBSDKGraphRequest+Internal.h */, - 826496B75CB1AF11F94E871F9C9D603A /* FBSDKGraphRequestBody.h */, - FFEFD3158157423272643EAF4FBDC702 /* FBSDKGraphRequestBody.m */, - C2E64F1C39347C677FCB624E77AF5192 /* FBSDKGraphRequestConnection.h */, - E93ECBAA87570F7E5126A9DD8D7BBFED /* FBSDKGraphRequestConnection.m */, - 58BB187C3ED85059F8B7950705A5FAD3 /* FBSDKGraphRequestConnection+Internal.h */, - 7F0B4184D7F66E016122243C45FBDAF3 /* FBSDKGraphRequestDataAttachment.h */, - 6934C23F14EA87A17610D030ED823B49 /* FBSDKGraphRequestDataAttachment.m */, - DA93A159498D6FCD5D960A5DA1EB14D3 /* FBSDKGraphRequestMetadata.h */, - F50E0C8E71F7365692F8AF34AF38A01F /* FBSDKGraphRequestMetadata.m */, - 71BD86D01EFADE5A9861DE5E07627F9E /* FBSDKGraphRequestPiggybackManager.h */, - 94B5510D678670CE5C1EC353B4F05BEF /* FBSDKGraphRequestPiggybackManager.m */, - C3CE451BAFD099C1AAB773A80D963D50 /* FBSDKIcon.h */, - 87E39A78413EC902A9F86555B9AF4C39 /* FBSDKIcon.m */, - C112C97E027A098AE197B591946E9767 /* FBSDKInternalUtility.h */, - B4BA7242D55F0FC06C212275CAFB3827 /* FBSDKInternalUtility.m */, - BB0EF1B46C914BCE52F06AAE38323907 /* FBSDKKeychainStore.h */, - F52E6362F8A6055BA647C3A0B51235BD /* FBSDKKeychainStore.m */, - F8A26AAC8A614F7C63B9BE262CFF1D4E /* FBSDKKeychainStoreViaBundleID.h */, - 301477D4BCABE9A2A0FBEBBEBC98542E /* FBSDKKeychainStoreViaBundleID.m */, - 18F2870658350BE4773DECBD042D4A42 /* FBSDKLogger.h */, - 096211E0EF1287E256B6F5F5F376D6F1 /* FBSDKLogger.m */, - 88B76869DF89B12E860589F9CEC84695 /* FBSDKLogo.h */, - 0161F67DC2844FD7838D57AE889DBBFC /* FBSDKLogo.m */, - D9564F5E22B256425B03C43A3844736B /* FBSDKMacros.h */, - 13A915E9CF8B4341DD83EF6ED1D98D9E /* FBSDKMaleSilhouetteIcon.h */, - F44313744AA0586A143839C11294DBDC /* FBSDKMaleSilhouetteIcon.m */, - B1A2DD12E72C761BC4028096B8CA9AE3 /* FBSDKMath.h */, - 475FBA20839C3E2451CB8F21BE446BD9 /* FBSDKMath.m */, - 5434F81128FD57F297E131179B0ED5CB /* FBSDKMonotonicTime.h */, - A7C6F7A8981D14FC0AC6C30B929D02A3 /* FBSDKMonotonicTime.m */, - EE37F559A1F6F53FFF92B989EB15576F /* FBSDKMutableCopying.h */, - E97BAD2FF7962B74F5CB00D0D5E26F6E /* FBSDKOrganicDeeplinkHelper.h */, - DA3CBB3E1E4F176C925D5CDD890D9CFA /* FBSDKOrganicDeeplinkHelper.m */, - CA72AEE0A8F8ABF9AAA416ADFE366A95 /* FBSDKPaymentObserver.h */, - 73F5E6099D39E4AE83E60F568E5C8AE3 /* FBSDKPaymentObserver.m */, - 950220B45A8D01237BEFE09BFB6D995F /* FBSDKProfile.h */, - 5D5A05DFE7030C8802AE042A9DEDB65F /* FBSDKProfile.m */, - 46FCE7E8956D0F39DA0D6A4890E11FE4 /* FBSDKProfile+Internal.h */, - B09ACB8314F136282B01D565C75F35DF /* FBSDKProfilePictureView.h */, - 5205DE995F06B6EF3B32EB06BEBCFC79 /* FBSDKProfilePictureView.m */, - 2B4628CE64078C60122F7FDF0480B684 /* FBSDKServerConfiguration.h */, - 83D0FAF174D9BCEA32F60271107267A1 /* FBSDKServerConfiguration.m */, - 6EE13E5DA0F4A0981D13C487DE6D5A11 /* FBSDKServerConfiguration+Internal.h */, - 3945A7783E097BDC44BF8B4C9A2EB28D /* FBSDKServerConfigurationManager.h */, - ACDD0537F75052C75C3016FF1A02CAE5 /* FBSDKServerConfigurationManager.m */, - B134D4C47EBA64C3E047D1BD2543C215 /* FBSDKServerConfigurationManager+Internal.h */, - 804668236F9469976216B0979EE3650B /* FBSDKSettings.h */, - 58277242E7C0A67915AE1FF58EA29256 /* FBSDKSettings.m */, - 29600C36BEFAE8B37668222A60ACA6AA /* FBSDKSettings+Internal.h */, - 0AA2B7AC1281E6558D7E0CCB248C122E /* FBSDKSystemAccountStoreAdapter.h */, - 8AF2B65FFB7C1018EF67E81775880C43 /* FBSDKSystemAccountStoreAdapter.m */, - 4276046567CF117EC1B5B6B4E6407776 /* FBSDKTestUsersManager.h */, - 0D91C962347595E33BF484F5E48CFCA5 /* FBSDKTestUsersManager.m */, - EB3D3A578534728C9A07046E519E135B /* FBSDKTimeSpentData.h */, - 6CD7D7E88843005C11857E774ECD69D2 /* FBSDKTimeSpentData.m */, - 51A2C4C5062FA29A73AB5A1AC477CEFD /* FBSDKTriStateBOOL.h */, - 842116B5E0B6068DE878250C98265AA2 /* FBSDKTriStateBOOL.m */, - F0D851B0FFAE82335C3C6110BE387E86 /* FBSDKTypeUtility.h */, - 8F995FCAE852AA98613D674B5AC680F7 /* FBSDKTypeUtility.m */, - ECACDA06202D22EF9A33EF409AB8251B /* FBSDKUIUtility.h */, - 131AB0F3F0872740AE3904D986800138 /* FBSDKURLConnection.h */, - 0BD85498E1F4C5EA089E3FFE9D69A3E5 /* FBSDKURLConnection.m */, - A33BE84F045A4545AF199098F5603094 /* FBSDKURLOpening.h */, - 3DB2D9C308B85AF3857571F9E49E2FEB /* FBSDKUtility.h */, - 59B805EA4AD76264F31032B95423EE98 /* FBSDKUtility.m */, - B3AD34109298E7EE4A73219F718D934C /* FBSDKViewImpressionTracker.h */, - 3CA454E0972A3CB1E4AD4B29D82AC7EE /* FBSDKViewImpressionTracker.m */, - C898E026C3A67FD7515039C23FF66F4C /* FBSDKWebDialog.h */, - 394E0EB34426E65DB842FF98AB517BEC /* FBSDKWebDialog.m */, - BDF7C060727FAD50A08816F9C03664AB /* FBSDKWebDialogView.h */, - 5D5D8FE7FA4462E41204C6195011C640 /* FBSDKWebDialogView.m */, - 6C8C4D5485CC65DE942F4246A4E31C53 /* Support Files */, + B37D5DC92DE0A2EEE57C278D18331C40 /* AFNetworking.framework */, + 03CA1DE94F3242A107C6A8414B5F77FB /* Analytics.framework */, + A76CF42A1CD0175C41D21F236AF04156 /* AttributedMarkdown.framework */, + 64060F6F355865A32BE1F71C69EE2C1B /* Bolts.framework */, + 81F1B90EE3238831B1358F92F950C2C3 /* Bugsnag.framework */, + 67E79741E2A35C72B8D8DE88FD37F900 /* CGFloatType.framework */, + 3ED168F9C1BCBDF1B0B4691AC0C053FB /* Charts.framework */, + 4D12CF15450F50DE832E75202ABCCFAB /* CocoaLumberjack.framework */, + B744C8493B2DB3AA5BE32B17AE706C38 /* FBSDKCoreKit.framework */, + 858B40CA84F0B040F24FF9F6CE4A39FC /* FBSDKLoginKit.framework */, + EED780A52AC270E6570D29E0670F672C /* FXKeychain.framework */, + 70C70C3A54EC362526B16C3FFA52B735 /* iOSDFULibrary.framework */, + 53A0327E5EB9274A01276F114F304C43 /* Kiwi.framework */, + D7CC7988BE465AF55E6D5149E15695F4 /* LGBluetooth.framework */, + 22A2A5BF931391F6B0816EFA293ED748 /* MSDynamicsDrawerViewController.framework */, + 8DAA9EF8BE5258D2374F7E1E8223BE8A /* NAPickerView.framework */, + 178FAA65CF0DE85DABDC927C91AC7C57 /* Nocilla.framework */, + 59C9E91FC0BD682884FCAA489ACD39B2 /* NSJSONSerialization_NSNullRemoval.framework */, + EF22B854EB06392B4162B52A420D37D5 /* Pods_SenseApp_RoomConditionsExtension.framework */, + 8064D813E014441F166CC4DB093598EC /* Pods_SenseApp_Sense.framework */, + E44A4FA4BBE294469FB3141E7780FF56 /* Pods_SenseApp_Tests.framework */, + D6C7AEAB11F6E16C0DC593AE33A5EF04 /* ProtocolBuffers.framework */, + 6B316E2FCCC7F3967DB531EBB1BC9A2B /* SenseKit.framework */, + 1C2D2C27946143A9678BD1BD8B11F1C5 /* SORelativeDateTransformer.framework */, + 1BF6B6C623F530B0ADE1AE864C18084B /* SVWebViewController.framework */, + EABBF47B182BEA69B9C1DE1CC7B899F9 /* UICountingLabel.framework */, + C13441E19CCE51D61DF236B1B579D677 /* UIImageEffects.framework */, + 89F1C43F665FC573D8ED92D99AF5F5A6 /* Zip.framework */, ); - path = FBSDKCoreKit; + name = Products; sourceTree = ""; }; - C74D5EFFE47E39567F8A15B30955E913 /* SenseKit */ = { + BDB03DB5FD2FD0AD1E2F3DBF63A0612E /* iOS */ = { isa = PBXGroup; children = ( - 5D2A4492906C8804E9037E8C37A83872 /* SenseKit.h */, - B5A50164285BD8AA4E92722E90F009D1 /* Analytics */, - 59A913451FF6F0DB3508965775219F6F /* API */, - A4CBB114862AEEF55F9E83E72BC090E6 /* BLE */, - 2FCC6D3BAA39FB6F02C0DEB782F04A03 /* Model */, - 2DC96D14172F1FC631BEE47C154EADB5 /* Service */, - B96AA913FF80EE421129769CA637D3A5 /* Support Files */, + C05561ABB3BB9566626F6D3D9F2BD5B3 /* Accelerate.framework */, + 16729C10532A4A859DD48B8C2D542B5A /* CFNetwork.framework */, + 9D5D53C55CC6490E4A4287F9A564E49A /* CoreBluetooth.framework */, + 679FD495DB088FC7B13B0E45B95EDD43 /* CoreGraphics.framework */, + 0EA4E89B0D99D7D44D4C33804130F6FC /* CoreText.framework */, + 139D57B9A9EDE38863A9F66D1CBEBA24 /* Foundation.framework */, + 8006B7CF34AC0DB78CE0F90413BCDE4A /* MobileCoreServices.framework */, + A991275F9EC93E54F2F8DF55641B2991 /* QuartzCore.framework */, + 9A3B9EC76C8547196955D1A70F79C297 /* Security.framework */, + 4D42DD7983221CA8879C3EFE7F1BF8E7 /* SystemConfiguration.framework */, + DF7B46ADCA7AA57D4B6C44BEFB603573 /* UIKit.framework */, + A32FE458FADB3A745044F88FA78C77CF /* XCTest.framework */, ); - path = SenseKit; + name = iOS; sourceTree = ""; }; - C7C047C930A562DC6EBFBBDAF37E60EA /* Default */ = { + BFD507516E128620995A69D1AE10AA02 /* FBSDKLoginKit */ = { isa = PBXGroup; children = ( - 1F62587536D786976EE0039F33CD92DD /* CocoaLumberjack.h */, + E833C684C22CE60AC54337E91C3EBEC3 /* _FBSDKLoginRecoveryAttempter.h */, + 83050E7BEEEF5B0F9C8454D60332B369 /* _FBSDKLoginRecoveryAttempter.m */, + B6C44E5B88EF647FF4BBA897881D7353 /* FBSDKLoginButton.h */, + E7081614C2096F58D9C5D6AEB46476F2 /* FBSDKLoginButton.m */, + A0858C20B44828570EDC2D33D92ACD02 /* FBSDKLoginCompletion.h */, + 70CE9A83B7A293A1316C7DFE714A6C0D /* FBSDKLoginCompletion.m */, + 063AA0FEDE1FD7DD48DDDE31831C09EC /* FBSDKLoginCompletion+Internal.h */, + FA3BEC3066C3A4DC3322B124B40D5582 /* FBSDKLoginConstants.h */, + F533FAAE7403F666C967A6DA59CF6642 /* FBSDKLoginConstants.m */, + 810895641E2FF14B09D974A80F25A151 /* FBSDKLoginError.h */, + B1E32E3EB1CB4E38E069F7A5B9EB241B /* FBSDKLoginError.m */, + EB98B0F7BF1EB13A4BBDD85DB83CC580 /* FBSDKLoginKit.h */, + BF0EC6A4FFEEB6EA1A3062D74EFC455F /* FBSDKLoginKit+Internal.h */, + 8CA0D0F56C727A79C953933607C354F8 /* FBSDKLoginManager.h */, + F5FC5B50EFC0CC03D5AEEE5B9F831997 /* FBSDKLoginManager.m */, + 18D577930CE95CCA4261A388D6C1C1C3 /* FBSDKLoginManager+Internal.h */, + 3F7A1B6192BD03B9F76426FE53E690DF /* FBSDKLoginManagerLogger.h */, + 207E1E6317C4ED0DA0FB90B954FF45AC /* FBSDKLoginManagerLogger.m */, + 77013EB7E0DB69980DBAAFA3895A6C0F /* FBSDKLoginManagerLoginResult.h */, + 7DCE2C3E986B798D1ADAF4CD7BC078AD /* FBSDKLoginManagerLoginResult.m */, + 0FF8D0E42B7F6B7193F61ED22E159643 /* FBSDKLoginManagerLoginResult+Internal.h */, + 34A828EA9B38152969146189DAD0DBD2 /* FBSDKLoginTooltipView.h */, + 7DE2B94847544BEB6DACA055959AC44A /* FBSDKLoginTooltipView.m */, + 1F4754BD1D3D32E359DFB2AA5FCB949E /* FBSDKLoginUtility.h */, + 3D4406BB72FE5703EA91E7B41D600D2E /* FBSDKLoginUtility.m */, + E3BE55CECA82576948AB0EA53BD4EA17 /* FBSDKTooltipView.h */, + 2054A824AD715E77D855119B82CEEFD3 /* FBSDKTooltipView.m */, + 62E85A732593174AE17FD1942FC60222 /* Support Files */, ); - name = Default; + path = FBSDKLoginKit; sourceTree = ""; }; - CD6C7C3236CA609467A91D2B33DBAF91 /* CGFloatType */ = { + BFEE9E8CE856350C717C912B00D86BB2 /* CGFloatType */ = { isa = PBXGroup; children = ( - F0025D66413864F415755CAA75F4C6D0 /* CGFloatType.h */, - 813F43BD23D99B83C1A4AF020FC0EB1D /* CGFloatType.m */, - DE57BC6F54D235A63A30B7334D28308E /* Support Files */, + 8A5BCD98AB673AD8E1E1CE44FD2E84A5 /* CGFloatType.h */, + 729F58CC5730FA85519844F0AFA19BB9 /* CGFloatType.m */, + 36B4334743277767A0895EA3138E5246 /* Support Files */, ); path = CGFloatType; sourceTree = ""; }; - CDE39D7C53C0B73D8447B4118146BDEE /* NSURLSession */ = { - isa = PBXGroup; - children = ( - C4A7A4FA6E6E9B63047D57763B264421 /* AFHTTPSessionManager.h */, - E5C58A7F6D21D353C7FD57B075F75561 /* AFHTTPSessionManager.m */, - 79E119E5B456D9715BDE3A4F7E1ED930 /* AFURLSessionManager.h */, - 5BBDB1C055F3B30366412F82EBDE8EA5 /* AFURLSessionManager.m */, - ); - name = NSURLSession; - sourceTree = ""; - }; - CFFE28CE28536558A34C0E4DD7E1400E /* SORelativeDateTransformer */ = { + C039809DEF3AD314C5B6E76BB8C96DCF /* Support Files */ = { isa = PBXGroup; children = ( - CB1F3A34E3FCF4DE49CE18604061E40D /* SORelativeDateTransformer.h */, - 679A171C34480355C1BF1DEA6FFA1AAB /* SORelativeDateTransformer.m */, - 2704C48F79169DF2B4804E153E956C30 /* Resources */, - 8A66560A13D75E482BC6BC691AECF6D7 /* Support Files */, + 08885FBD94476FBA6ADBDFB35AC19255 /* Charts.modulemap */, + F3955FA4C3BE54BBC7947DD23CE1F265 /* Charts.xcconfig */, + 8B77E9EC159500DE759DEBB14A5AE8FA /* Charts-dummy.m */, + 43A8F1943126E03896C116045BF22E6B /* Charts-prefix.pch */, + C062B11BD21931FD957112EA04672617 /* Charts-umbrella.h */, + A12E073B44EBB53A19AD3C5D708A3759 /* Info.plist */, ); - path = SORelativeDateTransformer; + name = "Support Files"; + path = "../Target Support Files/Charts"; sourceTree = ""; }; - D0B498002102BDCD1D86322FFC110F08 /* Bolts */ = { + C3C9038EC3EDFF4B62CE08BB48F1E89D /* FBSDKCoreKit */ = { isa = PBXGroup; children = ( - AF7440483FCCBBC2CE2F312E7BB840A9 /* AppLinks */, - D696A5DCB7EA9D0EA389F7DB6BC3A32E /* Support Files */, - B1CB943BF8A09D3238FEF293A6F68B8F /* Tasks */, + 431FB0FFD71A077F1971596CCF2FEE04 /* _FBSDKTemporaryErrorRecoveryAttempter.h */, + BE99E39937708AD868B1E6B6E35B34CE /* _FBSDKTemporaryErrorRecoveryAttempter.m */, + 06DCE2BC1E366352525EB7796FE23C62 /* FBSDKAccessToken.h */, + 0E1DEA844A07E5EF01AD8ACA051362C0 /* FBSDKAccessToken.m */, + 70C8376152869595E9A48C6D0CD2452F /* FBSDKAccessTokenCache.h */, + C5258EC223D5B5B93A3AAC25B2875954 /* FBSDKAccessTokenCache.m */, + BCDE5E4D0AF22B1A081B5F811320FA53 /* FBSDKAccessTokenCacheV3.h */, + CA2B034F117073CB7F38EE1F66887A0E /* FBSDKAccessTokenCacheV3.m */, + 63AE5F2F0D4EF47B204BE53E37A472E4 /* FBSDKAccessTokenCacheV3_17.h */, + 23DB7FE8BFA98EF3D457D85E7FB697B8 /* FBSDKAccessTokenCacheV3_17.m */, + 61B9DF7AF156E9282089ED2E5493D517 /* FBSDKAccessTokenCacheV3_21.h */, + 94253083B651F74F38BC2D8D73E35593 /* FBSDKAccessTokenCacheV3_21.m */, + D55836AC01421E874A4C8DBAE4FF05D1 /* FBSDKAccessTokenCacheV4.h */, + 562B728D03EB20E8CEE01043B76EF472 /* FBSDKAccessTokenCacheV4.m */, + 72C68BA0D692007B78E5496C24AAA619 /* FBSDKAccessTokenCaching.h */, + 20FBCD129AE8EF6F7165704DAFE432C4 /* FBSDKAppEvents.h */, + 97D028723C1059AFD3C90932B98056A8 /* FBSDKAppEvents.m */, + 3C16CC6E5176D8501D92D233BBA31EBA /* FBSDKAppEvents+Internal.h */, + A9F45D418BBD909F4308B372783FEC64 /* FBSDKAppEventsDeviceInfo.h */, + 5FD791C34D3B709A59E1B9F9EE0D1AB8 /* FBSDKAppEventsDeviceInfo.m */, + 8296D1E9EF1DC75837EB04F7D3F69AA3 /* FBSDKAppEventsState.h */, + D81782B990C3C48EB11F9EB180609E6F /* FBSDKAppEventsState.m */, + C5D31ECF9061C083E82D38A5BD686630 /* FBSDKAppEventsStateManager.h */, + 69877F262F2CDFDA8AE1195CF28064A3 /* FBSDKAppEventsStateManager.m */, + FA481EAF2A732C71CAE6FAA4D80E0B53 /* FBSDKAppEventsUtility.h */, + 8D148113F671646174A7DA73C5AD7DDB /* FBSDKAppEventsUtility.m */, + 92282AD8E58547A9785E8D7F2F12DF25 /* FBSDKApplicationDelegate.h */, + CB08C85892380A0129EB119BE2588CBA /* FBSDKApplicationDelegate.m */, + D7FD91CE8B11764E7C4EA2482AAB92E3 /* FBSDKApplicationDelegate+Internal.h */, + 968D1ABD70DBB0F1A3E187AA4C24E4CE /* FBSDKAppLinkResolver.h */, + 1255E0CF0EA90644C5F4155A1E349C42 /* FBSDKAppLinkResolver.m */, + 40C9E3E6DF31D20A0E27ACAE16B49165 /* FBSDKAppLinkUtility.h */, + 542865803CD6FA7A085599D45EC70088 /* FBSDKAppLinkUtility.m */, + 5583FE08968E6F67A39529F00C89AB8F /* FBSDKAudioResourceLoader.h */, + A0B2CC9566C4D61577D305714BC8BBBE /* FBSDKAudioResourceLoader.m */, + DDE606BB5D2DB432C08B664C5BE90A8D /* FBSDKBase64.h */, + 36C21A79DA12F0AB84FF3F8831F4CC03 /* FBSDKBase64.m */, + F0705D1C927CB46EF728389209E1FDB1 /* FBSDKBoltsMeasurementEventListener.h */, + 638054E0C7139CD26C2C5886C739C2DF /* FBSDKBoltsMeasurementEventListener.m */, + C3A1F2470E70BEB4C0D126F6FB61CFEC /* FBSDKBridgeAPICrypto.h */, + 47FE310CC0A35048AB1D02B26B9D6EBC /* FBSDKBridgeAPICrypto.m */, + F612842F95EA8CF9471BA8781FD937ED /* FBSDKBridgeAPIProtocol.h */, + DF26FA59FBFD824EBDC5E4F7040E0498 /* FBSDKBridgeAPIProtocolNativeV1.h */, + 7BE7883B82292799A624177A21B0DD1D /* FBSDKBridgeAPIProtocolNativeV1.m */, + 7DB186D59153078078E269CC12CA2703 /* FBSDKBridgeAPIProtocolType.h */, + EE4AE286F72527BD63F3D86337F997B2 /* FBSDKBridgeAPIProtocolWebV1.h */, + 577AD3A216199C5360D3B19053E67FD3 /* FBSDKBridgeAPIProtocolWebV1.m */, + 5B30EA00A02896180D867FEB80C3E6E0 /* FBSDKBridgeAPIProtocolWebV2.h */, + B478A2E9A9DC455E6EDE8393BECD17AF /* FBSDKBridgeAPIProtocolWebV2.m */, + A904440301767F48C58C4FC9046C987A /* FBSDKBridgeAPIRequest.h */, + 5A9FBF3A41BB41293579F93FD9159897 /* FBSDKBridgeAPIRequest.m */, + 5013BDC7156651A56275AEF6EFF16FCC /* FBSDKBridgeAPIRequest+Private.h */, + 59B8A25EAEC59BE4ED92085A2531580D /* FBSDKBridgeAPIResponse.h */, + A63FAD576C28157516E1F1E5A69B26D6 /* FBSDKBridgeAPIResponse.m */, + 2DD7883B0017BEC47AB57158C1FA4F6A /* FBSDKButton.h */, + 28CD68C2FFBA07F44ACC8A15161C7BEA /* FBSDKButton.m */, + 0FB38AC0BF21D846C4E6432BBF165A93 /* FBSDKButton+Subclass.h */, + D7ECAB8E59FDCA6B7D2F0FCBEA7C3774 /* FBSDKCloseIcon.h */, + 1FFAFA65F78EED714809980C431F233D /* FBSDKCloseIcon.m */, + B263072E68DB8DC95577D5018913E8BE /* FBSDKColor.h */, + 2B615BB0F0330CB731738E7214F94219 /* FBSDKColor.m */, + 45BF10EAD9B3F6CA148EC3172E67C720 /* FBSDKConstants.h */, + DD7F4A4F55D1D9C6C5EE271DBEB194E5 /* FBSDKConstants.m */, + A264FAB216C8E49BEC23000BE80861DB /* FBSDKContainerViewController.h */, + A6251DD8BA043A333E7C56023B773E1E /* FBSDKContainerViewController.m */, + B0AF0A87E7233D79FBA1D73F215615BA /* FBSDKCopying.h */, + F5F4822E550E8F3A1FD1506D9A3BB96E /* FBSDKCoreKit.h */, + 0D1851F66D673002D364E8A24C02704A /* FBSDKCoreKit+Internal.h */, + 709283AE668F1BC1B9EB5A2D8864146B /* FBSDKCrypto.h */, + 826A08E0CE1742EE2DCD1B9BB7B83E6B /* FBSDKCrypto.m */, + 43DCCEEF90A5DC41614FC95D6AC67F70 /* FBSDKDialogConfiguration.h */, + CDBE3E461EFEDB2C6D8A353DFBEC88F7 /* FBSDKDialogConfiguration.m */, + 7769AB92618B8FB41B20209CE32C05F4 /* FBSDKDynamicFrameworkLoader.h */, + 4A503132D207CA579023DA1D6FDF6A83 /* FBSDKDynamicFrameworkLoader.m */, + B3899D8CB902FA62222DC77906DDCCD4 /* FBSDKError.h */, + 7ADC518676737574D1E6CA926389CBE7 /* FBSDKError.m */, + DB56A749A812C3A52744509C5BEF34AC /* FBSDKErrorConfiguration.h */, + 02B95771F7E77C8A17B997F98D098908 /* FBSDKErrorConfiguration.m */, + 39BD35BA987831FD01A2C19B7B2470FA /* FBSDKErrorRecoveryAttempter.h */, + 28F94C48734A41114106DC04AFD23F7F /* FBSDKErrorRecoveryAttempter.m */, + 83AF15827193595FCEC3E271AC14623F /* FBSDKErrorRecoveryConfiguration.h */, + 1CF2B5742CF560662983C92059F9920E /* FBSDKErrorRecoveryConfiguration.m */, + E431658F84F6875CC134E3BA9BC5D72B /* FBSDKGraphErrorRecoveryProcessor.h */, + FA2FB92C26F66DFBC177BEAF5ABD99F2 /* FBSDKGraphErrorRecoveryProcessor.m */, + E0A1A78EF03BFC506C016A5AE51BB8D2 /* FBSDKGraphRequest.h */, + 23F794C220CA11EDACFAB2F06256A4A9 /* FBSDKGraphRequest.m */, + EB4369868EEB18342D827C4992C8BB2E /* FBSDKGraphRequest+Internal.h */, + FCBF2A7369ED5A7B944F5BB1BBCE5237 /* FBSDKGraphRequestBody.h */, + D01AB1931CABCC4F7B0189B06D449E02 /* FBSDKGraphRequestBody.m */, + 6417190502C8B65AF0EC31F1D132CED1 /* FBSDKGraphRequestConnection.h */, + EAD2EBB8019C5DC0C59979ACE18985CE /* FBSDKGraphRequestConnection.m */, + 0C705E8F445FFB463511B342BA27875B /* FBSDKGraphRequestConnection+Internal.h */, + 006825572C773BE4CF09B17EE065FEE6 /* FBSDKGraphRequestDataAttachment.h */, + 4E89E71C33F8F68A84C745883AD83DAE /* FBSDKGraphRequestDataAttachment.m */, + F4CA450E162860FBA46759FE7707BA8A /* FBSDKGraphRequestMetadata.h */, + 3582354A58B50D537947646B51933B6A /* FBSDKGraphRequestMetadata.m */, + D26F300A92DDD1C81AFB3C1B07150CA6 /* FBSDKGraphRequestPiggybackManager.h */, + C12BDF33CA9C47581367FC8B6C96A96F /* FBSDKGraphRequestPiggybackManager.m */, + 5A0DB194846BADA3CDB8ECBFE67867AC /* FBSDKIcon.h */, + 566F5467EF55F6E1B8946D9B73568C78 /* FBSDKIcon.m */, + 85556CE56A0ADF19D1E420E310E6ED89 /* FBSDKInternalUtility.h */, + 3B6D706477B3B1EE4BE36F03AEDAAD55 /* FBSDKInternalUtility.m */, + 7083FEB26BB5D6669D97D4F1F20BBA3A /* FBSDKKeychainStore.h */, + 7B7DF4D84F0A2F6511031B969A6077A4 /* FBSDKKeychainStore.m */, + BA86812AFC5FF190B31D67097ABB54D8 /* FBSDKKeychainStoreViaBundleID.h */, + 0259857B668118533EE9E37B60658541 /* FBSDKKeychainStoreViaBundleID.m */, + CA3EB990B3FB64C36E02441F990BE726 /* FBSDKLogger.h */, + 9E53BF4BD4F41841970E07CF89DBED99 /* FBSDKLogger.m */, + 39A9E4A126C24102F72599C7E39CD8AF /* FBSDKLogo.h */, + 4A44DA38619CB209B949A04B2BE62B1A /* FBSDKLogo.m */, + DA77CEEFBAD60276552391C64D0FAA2B /* FBSDKMacros.h */, + 1EF186582B3F584D41B87026A93E1331 /* FBSDKMaleSilhouetteIcon.h */, + 78548CDB5BAE4AD94A85C1855A97DD33 /* FBSDKMaleSilhouetteIcon.m */, + C874E6B266FC8D70DDDD304AB031F9FA /* FBSDKMath.h */, + 04719E3076B558A7721780984373914D /* FBSDKMath.m */, + FD32A18F58D4945EF6902BBD362E1700 /* FBSDKMonotonicTime.h */, + F0C8AD533F778FC366569278759713D1 /* FBSDKMonotonicTime.m */, + EF22420924DD8393D929AA3D1BFD52B9 /* FBSDKMutableCopying.h */, + B9C23D157A0BC590A95E7EB9E9737022 /* FBSDKOrganicDeeplinkHelper.h */, + 28CA2D9A4C560401E18541A1CDA7AA20 /* FBSDKOrganicDeeplinkHelper.m */, + 02A9A73627703300108A74BEA7E5847B /* FBSDKPaymentObserver.h */, + DF6998AC60B65B3755C0DDCBECBA77C1 /* FBSDKPaymentObserver.m */, + 39C5EB2B5A1E49FDABE43CCBCA85BE2C /* FBSDKProfile.h */, + FF8110F5690424A120910C2B1D5E2A73 /* FBSDKProfile.m */, + 2AD743EFDE6B6BEAEC6497E9AB2BF8CD /* FBSDKProfile+Internal.h */, + ECEAD89578B3D497E5A9CCFA31EEBD67 /* FBSDKProfilePictureView.h */, + 096D1A6B4D4F2D9728BAA3591527DB8F /* FBSDKProfilePictureView.m */, + 6BC0C583A4CD135ED0E927C4103D1F73 /* FBSDKServerConfiguration.h */, + 44D57768A94655466F1628B40CE4EBF9 /* FBSDKServerConfiguration.m */, + 1D58A7C7AA9658B96DE93BF728411133 /* FBSDKServerConfiguration+Internal.h */, + 54AA065526FE6A10ED8D25EE015B1E98 /* FBSDKServerConfigurationManager.h */, + 136DFC9EB9F50C8683996DEA2E99A2E6 /* FBSDKServerConfigurationManager.m */, + 0FE5052156B42AF52E4EED57B9BBB15A /* FBSDKServerConfigurationManager+Internal.h */, + 53E762F024ED5470594EC84A5D636FF3 /* FBSDKSettings.h */, + 9FE76DCC04B3C571E9D847F7E7EE7276 /* FBSDKSettings.m */, + 12BDB84896E11B9C04BC87C30F1727A7 /* FBSDKSettings+Internal.h */, + F74FD5B248F8CA8F665A38023A806C84 /* FBSDKSystemAccountStoreAdapter.h */, + F9A28DD9048855D1727BA0B4D1BAD1C5 /* FBSDKSystemAccountStoreAdapter.m */, + 441E689DD4E4DA59EEF161755F254216 /* FBSDKTestUsersManager.h */, + A9C61DED04A1AB7233DB945D29051B5A /* FBSDKTestUsersManager.m */, + AE6B1F73939D3BEE52BF710E1B0ED454 /* FBSDKTimeSpentData.h */, + 42D3DD5C4F89331D1FB7479558E8F187 /* FBSDKTimeSpentData.m */, + 73FA3FF5FE5F90411F3F313B0A585CA6 /* FBSDKTriStateBOOL.h */, + C381CAF8DA86A54A7BF25FCE22E4A25E /* FBSDKTriStateBOOL.m */, + 233BD021922C9BAF99E2568932DE5EA3 /* FBSDKTypeUtility.h */, + C899B923A8C8A09BF4C83EA7259ADC46 /* FBSDKTypeUtility.m */, + 5D33829F632C7CADB7502D4A6043BBF0 /* FBSDKUIUtility.h */, + C9E6B349D1158A12BAB0F514F97DD4C2 /* FBSDKURLConnection.h */, + C1B3BFA78881DE0406A5CD3605D1A78E /* FBSDKURLConnection.m */, + 23DD2D50796358B39F913E73ECEA2947 /* FBSDKURLOpening.h */, + 93105FCBACC69AFE4CCE4AF5C735EC58 /* FBSDKUtility.h */, + 56BE43E682E953A1355F695B873CA97E /* FBSDKUtility.m */, + 4949918605DD8965D300B1B5E77EBE72 /* FBSDKViewImpressionTracker.h */, + 49B64E9767A3DA4E78D83A1BA3A9A191 /* FBSDKViewImpressionTracker.m */, + 7DD6919BF046455CCAE54A940F9C2E9C /* FBSDKWebDialog.h */, + B548023C3A4B5E6CA9B6BFE8BBFDC57E /* FBSDKWebDialog.m */, + 0D9C77D35925D037A80C4F079721E622 /* FBSDKWebDialogView.h */, + 3FF66C331A4B071035D0EF7544480956 /* FBSDKWebDialogView.m */, + 69151A6948B3A535D6560B734B87A33A /* Support Files */, ); - path = Bolts; + path = FBSDKCoreKit; sourceTree = ""; }; - D16A822714CBFE1F4788C627536A7DFB /* Support Files */ = { + C8352919A02C38CDB807BC4A46953D40 /* Core */ = { isa = PBXGroup; children = ( - 698FA93A9EF89582DACB9D50F8EB2BB8 /* Info.plist */, - DA9260C33C370E027566D4CE95B8F4C2 /* Realm.modulemap */, - A568AC7FC33DE9EFB950561F940F69D6 /* Realm.xcconfig */, - 3FD7AADF311E52773A5DEAB8B6068293 /* Realm-dummy.m */, - 20E7825114030EC9A4A442E427F8FC65 /* Realm-prefix.pch */, + 2CB894AE3E9D213449BF0EA77B843187 /* AnimatedMoveViewJob.swift */, + 857471347D498C2F5091242CA8EF2F49 /* AnimatedViewPortJob.swift */, + 480C9FB24E9FE0DC77289B3500B9F004 /* AnimatedZoomViewJob.swift */, + 20378B4CF3E79FC3266B0D5CC29EA335 /* BarChartData.swift */, + 833B5B603D7AF938E239998CEA5392F9 /* BarChartDataEntry.swift */, + FD1896DB99D8C53FED817DE0CEBCD2CA /* BarChartDataProvider.swift */, + 2E499F30C3EC67C802D5090A88C418DE /* BarChartDataSet.swift */, + 274DFFA7FB3CB2C289E47EE2D2E9E492 /* BarChartHighlighter.swift */, + 7CDA4531650228AA3E2BFE32A6F2D9B7 /* BarChartRenderer.swift */, + 305D04DEE78E70DF2B7009D7299EC15F /* BarChartView.swift */, + 0336F12C33198D824C6FF0108B84B408 /* BarLineChartViewBase.swift */, + 57DD91F5A5E61905A04638AA5D2A57CE /* BarLineScatterCandleBubbleChartData.swift */, + 693527D490A57FA868E12DED96BE4BA1 /* BarLineScatterCandleBubbleChartDataProvider.swift */, + BA92B725F460A614353D537F8B8F775E /* BarLineScatterCandleBubbleChartDataSet.swift */, + A00E473363BF939DEBB36321C927837D /* BubbleChartData.swift */, + 73A122698A5F42AE9943B9827A73084C /* BubbleChartDataEntry.swift */, + BFA9F303109B4389F27AC8F0BF5D83DF /* BubbleChartDataProvider.swift */, + 8AA5448927A1F08E807D80A5A0AAB46F /* BubbleChartDataSet.swift */, + 3A8AF84CA850A0EA1D7A82F5604FEA27 /* BubbleChartRenderer.swift */, + 9886661FCF8FFAD5AB68C2FC940F6955 /* BubbleChartView.swift */, + 2D9CBE43CDD883F76008C74100FBAE83 /* CandleChartData.swift */, + 5DABF3094B32A3845F36C8D867FBAC1C /* CandleChartDataEntry.swift */, + 17E28D16AFC828EAE023AEBB5C948E20 /* CandleChartDataProvider.swift */, + 3685CD69131B0C3B478BF837D1050F7A /* CandleChartDataSet.swift */, + 4D893DDD5CD7E1E75666C3C60FFC1173 /* CandleStickChartRenderer.swift */, + B72C4ACA101B02455B5CCF182A5A5A83 /* CandleStickChartView.swift */, + 7573F218997372DF6C922BC1C1FDFE7E /* ChartAnimationEasing.swift */, + D1FE0CF9CFD6E80405FBADC50A33AE70 /* ChartAnimator.swift */, + 0A16A9F1A7B0DFCA14764EEE820ABA6D /* ChartAxisBase.swift */, + AC836FBD87E70EE5DD7B95250A119383 /* ChartAxisRendererBase.swift */, + 692272386CFEA940CD5C3628FEDEA94F /* ChartBaseDataSet.swift */, + 82362D7CC19D3752067197B71A0CBEBA /* ChartColorTemplates.swift */, + 33CEA6A9F6B648704C0D5675E6B7AEEF /* ChartComponentBase.swift */, + 9537C83D4FC4E2F74632CA4089BB3385 /* ChartData.swift */, + CCA9E99C870067DDD91D2787CBA9276D /* ChartDataApproximatorFilter.swift */, + 775CC733D89E2F4D062E46C262AC9A61 /* ChartDataBaseFilter.swift */, + 2080CCF73CCE217085343EEA9CF93DA5 /* ChartDataEntry.swift */, + A27423CD90B88205B4321C95931B1810 /* ChartDataProvider.swift */, + A7AFA83F50ED668B1B23FDA919D4EFD3 /* ChartDataRendererBase.swift */, + 0FCBD36EA99405F60B2BC183D05C2862 /* ChartDataSet.swift */, + D0B77A2A1D0F442C8ED67F7759752722 /* ChartDefaultFillFormatter.swift */, + 4BACA21575B977B810A42B28A2875F08 /* ChartDefaultXAxisValueFormatter.swift */, + 701ED8A98D736C0AC5D16EC63EAFED59 /* ChartFill.swift */, + 5B8914DE772464FD283DA5E4B7715788 /* ChartFillFormatter.swift */, + 8DC7166A9433D8C12D284143DE805CD0 /* ChartHighlight.swift */, + CAB038E29C8E3EEA4F4A4FF85F52B80D /* ChartHighlighter.swift */, + D98E33FA2B733DF9E994062270EB8D2A /* ChartLegend.swift */, + D8DF0CBDBC965EF753E5905E5C3C3B6B /* ChartLegendRenderer.swift */, + 9EEE836337F65A7F7D52049880D6E835 /* ChartLimitLine.swift */, + 80005E65CBE03057B5AA0BCB5A955561 /* ChartMarker.swift */, + 9DFCF8812B865E209C89385C6FD1C1B7 /* ChartPlatform.swift */, + 1FE603BBB8A791F77CE20556BF34289E /* ChartRange.swift */, + 5EC1E0036B5DE32DE1E6F23DB41175EB /* ChartRendererBase.swift */, + B9E5EFA7E522C712604DB18E2CF36459 /* ChartSelectionDetail.swift */, + 7556E2613DAC78B968776F661F320021 /* ChartTransformer.swift */, + E54B37D5330ABC478214DBE01C16A472 /* ChartTransformerHorizontalBarChart.swift */, + F1340D5A4A12AE74230BA41F8F042C3E /* ChartUtils.swift */, + 10F133B0AB69B6B14E37431251C76F34 /* ChartViewBase.swift */, + 2E88FDFB3D10A018204CD31FF848B2C2 /* ChartViewPortHandler.swift */, + B300B6AA072EB96AF5CE9ED9F8A71E0A /* ChartViewPortJob.swift */, + 8B2872760E879BC2CB272E2552DD91A3 /* ChartXAxis.swift */, + 0EBE826E33376456D9C3460EAA988334 /* ChartXAxisRenderer.swift */, + 818EF93AB7B9BF31DAE60FF0F1288E7A /* ChartXAxisRendererBarChart.swift */, + FB434E995C0FD4373BEE2543621D3288 /* ChartXAxisRendererHorizontalBarChart.swift */, + 286BDBAC72AA751062B90DB32E87663C /* ChartXAxisRendererRadarChart.swift */, + C0838AA7D610E547598C73534362C2FB /* ChartXAxisValueFormatter.swift */, + 8787195BD5D62DA9D74CE8162926E700 /* ChartYAxis.swift */, + 8107E2849F3C4F546D26073D8BCEC249 /* ChartYAxisRenderer.swift */, + A575A02EF502781D0742F7221BD5A17B /* ChartYAxisRendererHorizontalBarChart.swift */, + 09536F2CDB53EF1F89923BCE0A5E7066 /* ChartYAxisRendererRadarChart.swift */, + 5E94D7029E29FCDB95CE98BBE37E069D /* CombinedChartData.swift */, + 6E6D30614AAEBD016227B2962E602C24 /* CombinedChartRenderer.swift */, + C15594F3622AF4FAEAE37A3E5EFC4E0D /* CombinedChartView.swift */, + 7173D15CEE9538607C61F57B5726B009 /* CombinedHighlighter.swift */, + 63E0071E67D171F0988844A161EB396C /* HorizontalBarChartHighlighter.swift */, + A64DDABAC0922737B74A7484CFB1E06E /* HorizontalBarChartRenderer.swift */, + 3883A07175AAC39A2E7F8985E56293C3 /* HorizontalBarChartView.swift */, + D0D4B1FE6FA0964DEF163C398448BDC8 /* IBarChartDataSet.swift */, + 54BF83A5156888CF00F6FFC8BD30979F /* IBarLineScatterCandleBubbleChartDataSet.swift */, + F7256D5CF6C7C5FE3C50B8A4C15E174B /* IBubbleChartDataSet.swift */, + 1150FCB3B7D281D554FBADF0F9BBC6CB /* ICandleChartDataSet.swift */, + 6AB6A26D0EC85C92AC8A47CCEA760E25 /* IChartDataSet.swift */, + 873325F7D0E916BDD9365C4A32E81CE3 /* ILineChartDataSet.swift */, + 04EABFA4E1B5EE963878B5982C500BCC /* ILineRadarChartDataSet.swift */, + 38E0599D1759BE8CC0F4F3756D5B193C /* ILineScatterCandleRadarChartDataSet.swift */, + C75E92075E11C522CAE6BDC96D6A9619 /* IPieChartDataSet.swift */, + 268B1B39E5E15EB94D8F9A955095AFAF /* IRadarChartDataSet.swift */, + 4356D5A707051C87E953BE5607D4A4FA /* IScatterChartDataSet.swift */, + 89D84CFFB404CAC88E4EEA0A50CC7955 /* LineChartData.swift */, + 0859ED35A3EA501812EF454D78D3CFA7 /* LineChartDataProvider.swift */, + 66CE9739342D2744EC6F55CFB0BE9629 /* LineChartDataSet.swift */, + 168E65A84E317B5F232002F9CB3DE015 /* LineChartRenderer.swift */, + 6A873369AB97A87DC132F20B6FF3DBC8 /* LineChartView.swift */, + 3E93DDB331A6DB2E47563F5B02868A4F /* LineRadarChartDataSet.swift */, + F75E8BF30599CC15197BEC96CF44EB60 /* LineRadarChartRenderer.swift */, + 286BC984A80ABB7228ED7F272B72EEDF /* LineScatterCandleRadarChartDataSet.swift */, + B5995C78D79381C316E623B9B791B600 /* LineScatterCandleRadarChartRenderer.swift */, + 3ED7E392376C5A535DBD75805DBE156F /* MoveChartViewJob.swift */, + 20A446714ED9D089EBF19A50A27819E7 /* PieChartData.swift */, + 444E65A5407BEA1DF0F05EA96E05F752 /* PieChartDataSet.swift */, + 438EE7A86ADA2186AA85F8229086D52F /* PieChartRenderer.swift */, + 71CB5F8DCEA6BC36ACD6318A78E938F0 /* PieChartView.swift */, + 90C9EF713486C5E3D09C401BD90B8294 /* PieRadarChartViewBase.swift */, + 46BFB457414BD79E1049A8F9FB161065 /* RadarChartData.swift */, + DC1C11B6CEF66E80F7D7CC68FB1B8E74 /* RadarChartDataSet.swift */, + D17C2A4C054230FE487F1779D00EA527 /* RadarChartRenderer.swift */, + E5B425EE66C3D03E49AFBDC1F7975534 /* RadarChartView.swift */, + 02124129F566CC1185ECC38993662970 /* ScatterChartData.swift */, + 7F8E7A35D74B7C87D42ED9199FB81052 /* ScatterChartDataProvider.swift */, + 05EEB90E6DE25224009F5ED21A86873C /* ScatterChartDataSet.swift */, + 251B8765F279E439B91FF6F2DE423526 /* ScatterChartRenderer.swift */, + 7E3D22C18C326C6B59EEC55C55085D1E /* ScatterChartView.swift */, + FFD13C8B94DAA9A40F90466683E72170 /* ZoomChartViewJob.swift */, ); - name = "Support Files"; - path = "../Target Support Files/Realm"; + name = Core; sourceTree = ""; }; - D696A5DCB7EA9D0EA389F7DB6BC3A32E /* Support Files */ = { + C8F9F5D4C1D3B121BBEB65006E6BF774 /* Tasks */ = { isa = PBXGroup; children = ( - B00880DF28E0D41001B33FE00D350750 /* Bolts.modulemap */, - D61C6C86AABCCC84AF06921650258251 /* Bolts.xcconfig */, - 00ECFBB350D722DDA57D616AFB36B008 /* Bolts-dummy.m */, - 06FA1FC32C2DA69F84B54ADF66001D79 /* Bolts-prefix.pch */, - F0959E606AE870914EB0EADAEE51D4F0 /* Bolts-umbrella.h */, - 2DE47B1235F6A11ADB1A53C9D9BF60B5 /* Info.plist */, + 70A8433D2E31F37A6432D055283902F9 /* BFCancellationToken.h */, + B4A366E899A36DA54B0B82222C77462D /* BFCancellationToken.m */, + 4D4C58641F4922DE5842CF6544CB4E42 /* BFCancellationTokenRegistration.h */, + 76B3332AFFD18AE12B345C504819DBAB /* BFCancellationTokenRegistration.m */, + 6E519CA7E94848A7153051B9E7309DA1 /* BFCancellationTokenSource.h */, + C2BA71CA44560BF1B6EA15CCE4442118 /* BFCancellationTokenSource.m */, + 8876B15AC282A70BF68402C49803C7C0 /* BFExecutor.h */, + 83D64CBA9B91B0B5B7FAAD50F1811D45 /* BFExecutor.m */, + 80693764189B5FF79C720997A8BECB77 /* BFTask.h */, + F215E5DAA49538ECFDE7EF349B3C6385 /* BFTask.m */, + 0673D42FA41D39342278B4D19320D824 /* BFTask+Exceptions.h */, + 79218965E79D7BA4DED4F8E81470D772 /* BFTask+Exceptions.m */, + D08965420294621F032CCF8B27C92828 /* BFTaskCompletionSource.h */, + C1A5E3BC30B7CD8AD61C82BD54FE3918 /* BFTaskCompletionSource.m */, + DD24CDAC4EBAD7DCE4E079EE54BD245B /* Bolts.h */, + 2F16FE05CE6FC0A0A8FA158B370CAB9B /* Bolts.m */, ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; + name = Tasks; sourceTree = ""; }; - DE57BC6F54D235A63A30B7334D28308E /* Support Files */ = { + C9A8FE151314809FFC324AF3860BB8D1 /* AFNetworking */ = { isa = PBXGroup; children = ( - EFFED8432011E9B9FEC50E2B7410D525 /* CGFloatType.modulemap */, - 24C040B68C3BAF84AF8781072235D9D9 /* CGFloatType.xcconfig */, - EC79BCDD09F0DAD1BAAEA142E442F7AA /* CGFloatType-dummy.m */, - 35B30D1774BD1708AC810597124BF185 /* CGFloatType-prefix.pch */, - 556F366C6A9A04A38BEA2A06DAE06D0B /* CGFloatType-umbrella.h */, - B6E5E99BF727DCDEF7EF9B40DAF977C6 /* Info.plist */, + D6A15A7A4358888C621562F09F441B2B /* AFNetworking.h */, + 9C38696185ACF691128FA8274A435F14 /* NSURLSession */, + 8B0D6C4415C936672CC0C4C2F0EC2973 /* Reachability */, + BA07684840A1A0CD0B73180CB689D4A0 /* Security */, + 530417399CAF6F45976FA4B00873E3E9 /* Serialization */, + B1AE4F48241519BE63D86495CC3052CC /* Support Files */, + 13B263E8C75E5EE25519B669437A22AD /* UIKit */, ); - name = "Support Files"; - path = "../Target Support Files/CGFloatType"; + path = AFNetworking; sourceTree = ""; }; - E1BCC6FC9A27C264AAFEB3620EB09FC6 /* Support Files */ = { + CB6EFA131E42ECE658C884ADBFF7DB7B /* Support Files */ = { isa = PBXGroup; children = ( - ECDF314CAA0359EDC62CBAD7E94689BC /* AttributedMarkdown.modulemap */, - 8642D7D4AADC81D472797FFB93639AB8 /* AttributedMarkdown.xcconfig */, - CC48BA090A9D69EAF16688A27B0F3511 /* AttributedMarkdown-dummy.m */, - 2C5F51770EAA8583FC653A0FCC4DEBD9 /* AttributedMarkdown-prefix.pch */, - 88DD1317EFFABA61A48B82A8498BFB89 /* AttributedMarkdown-umbrella.h */, - 63ABC3FCAA000FE323E79ED296369073 /* Info.plist */, + F99CE3105CC2CEE881EE46E585C255C3 /* Info.plist */, + EBA56A0A44D0448EA6127C0F52C76E78 /* SORelativeDateTransformer.modulemap */, + D806E96987B3D8849AE2FBC4FDB41232 /* SORelativeDateTransformer.xcconfig */, + DC3881483ACCFC5FA8A845092A9B7630 /* SORelativeDateTransformer-dummy.m */, + 6132AF44FDD8061CA3C9D82D66F577B9 /* SORelativeDateTransformer-prefix.pch */, + 4D6184D228AF28FE41B35876324FDA0D /* SORelativeDateTransformer-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/AttributedMarkdown"; - sourceTree = ""; - }; - E67E9DCE9EDFA8D95D5EC4C0C18FF2B2 /* Core */ = { - isa = PBXGroup; - children = ( - 8F730358F306A911B5448A85D161326A /* AnimatedMoveViewJob.swift */, - 87D2CF46F047959C528641BFFA363C2F /* AnimatedViewPortJob.swift */, - 307E2D8F7C0B024D603C98F16D8FF3AA /* AnimatedZoomViewJob.swift */, - 280582CE66C4AE1AC5C09C4E389AA9BE /* BarChartData.swift */, - DEE6991791F459B32F37235A8C527271 /* BarChartDataEntry.swift */, - AADB919FE63FD68D85C9FF9C673DBE0F /* BarChartDataProvider.swift */, - 6E6B2E492FF069C9245A7B2097E6BD74 /* BarChartDataSet.swift */, - F0031756EB662D6B580E7710A10BDF59 /* BarChartHighlighter.swift */, - E5F86BBD69DF5E4F46EECFB3DCA1DBC3 /* BarChartRenderer.swift */, - 2EEBD9F1687B0620EC7BB066E3BDBD2A /* BarChartView.swift */, - 8B67B0775D82B5C15863218E0D6B6BD0 /* BarLineChartViewBase.swift */, - 362CDCFE77556406F9B21FA11D6B6430 /* BarLineScatterCandleBubbleChartData.swift */, - 01E3F894B967F1C59EFECD2496A32C93 /* BarLineScatterCandleBubbleChartDataProvider.swift */, - 1180B07916D0126946E26CDC9A60AD86 /* BarLineScatterCandleBubbleChartDataSet.swift */, - D152AEB7136DEE033A8B5ED7405720FA /* BubbleChartData.swift */, - 7E6D3327F6F0FBC131AE30865BD2C537 /* BubbleChartDataEntry.swift */, - 6E9FD9B97D7F1A7934D7FD48FA78E7D7 /* BubbleChartDataProvider.swift */, - 2ABF28B21E98F739F501AB6A42DD0A19 /* BubbleChartDataSet.swift */, - 8166A9D1D696B47D30A50D0E1BA35872 /* BubbleChartRenderer.swift */, - 253D01D55616A1B7E029A0374A9CF9AA /* BubbleChartView.swift */, - AA07824339A6A84D8F4C1DB85E88CCB6 /* CandleChartData.swift */, - C418DE088F434FF892318642B807D860 /* CandleChartDataEntry.swift */, - 13854BD203A5D61B5169225A3291D5D9 /* CandleChartDataProvider.swift */, - 169700962DF874B51CC81D6039E17B33 /* CandleChartDataSet.swift */, - C4F9C5CDB57240F9482E003C84877A8C /* CandleStickChartRenderer.swift */, - 93CF9DD1D82033CBA76AB6A889049011 /* CandleStickChartView.swift */, - 74D70D31A0FF212F8D9D641720DBD63A /* ChartAnimationEasing.swift */, - 4BA5BE56AFA4D7F4B7DA04851D6A1C64 /* ChartAnimator.swift */, - D0D192C8D3AE142298F46B44605769FD /* ChartAxisBase.swift */, - 1F80FDC592C3D9E2AC5977E1143379DD /* ChartAxisRendererBase.swift */, - 88021FAFE8BFAD5158639847DB3AE666 /* ChartBaseDataSet.swift */, - 668A01F2C20E055DFF1703F9A0A60501 /* ChartColorTemplates.swift */, - EF44F7A0ADA120E73B4AC095C4C72B82 /* ChartComponentBase.swift */, - EE355C572E5774EBA9907E33E397E5A5 /* ChartData.swift */, - B84D8BA86B1E36D7B3D3E3B47FDC2E68 /* ChartDataApproximatorFilter.swift */, - 85B11FF98D80AAFE830D5E4620473777 /* ChartDataBaseFilter.swift */, - 5668CE9A95E8B73045D823DAD8A11EF4 /* ChartDataEntry.swift */, - C75434EE36F7983EF544FB0510766932 /* ChartDataProvider.swift */, - 5F39C2A497DAD3BE8C125CC8E093A366 /* ChartDataRendererBase.swift */, - 47A974B4C27F7AABED58019FD291980A /* ChartDataSet.swift */, - A09B7B202A4CDE29DD6C71C0706C87C5 /* ChartDefaultFillFormatter.swift */, - 457FAE524E2BC6AA3CF57860CA365B44 /* ChartDefaultXAxisValueFormatter.swift */, - FAFD03356CBD28B31A36AF1AEC143B26 /* ChartFill.swift */, - D8CE609D130706D34C02C120D2DE1506 /* ChartFillFormatter.swift */, - CCA812F2F3090BFE20491E1529E4EE60 /* ChartHighlight.swift */, - 5B9D09F20527D6638C08509066A5E8B3 /* ChartHighlighter.swift */, - 56E7139717B1D03EF24251999AC89711 /* ChartLegend.swift */, - 76816CB9FD872D56978B1245866EC284 /* ChartLegendRenderer.swift */, - 81C02D288B1874BF9457C12B9B8F77D2 /* ChartLimitLine.swift */, - DBC387335D57694B3F82B50A98EBD983 /* ChartMarker.swift */, - 2948E157D4E5DD98074295C9BF2CCDA4 /* ChartPlatform.swift */, - BB6D97E5379932D73D987562C209AB4D /* ChartRange.swift */, - 8A1C9D49F2EA59E9F19D227A38986DCC /* ChartRendererBase.swift */, - 7FCDC1CDDD4B21C057D0DFCE9A1A67DF /* ChartSelectionDetail.swift */, - C35DAA49885257E3E384EEE04BE7C04E /* ChartTransformer.swift */, - D229AF94243497EF72260BD2AAFFC6E7 /* ChartTransformerHorizontalBarChart.swift */, - BBE75D28D4CB06EBC7024B379BFB0E75 /* ChartUtils.swift */, - 7877AB20B2ECD5CF8FA2088732C3E1AD /* ChartViewBase.swift */, - 62CAB9A269FD4FC7C2CCDD51BCE98011 /* ChartViewPortHandler.swift */, - 8B709D0F19DE9F3EFF0B2A27ECA30D45 /* ChartViewPortJob.swift */, - DE5927FC06FDE015414D7663342B11C0 /* ChartXAxis.swift */, - 679CB3A1EE0425F819F8549E0F44CCE8 /* ChartXAxisRenderer.swift */, - 712D9029FB3B2BDBD3B69D8F64A8BFA6 /* ChartXAxisRendererBarChart.swift */, - 42C22D09ABE206F759F7DA8F62AA26A9 /* ChartXAxisRendererHorizontalBarChart.swift */, - FD75E66D5A9A3309345B75964360E6D3 /* ChartXAxisRendererRadarChart.swift */, - F994C108E1C27A48503143A851C87019 /* ChartXAxisValueFormatter.swift */, - C3896122BC24C844F44D2FC4DC6FDE95 /* ChartYAxis.swift */, - 5B71D12E26C28C453777049CEC3FFAD1 /* ChartYAxisRenderer.swift */, - 7A0723EBA63ED0EE86CDEB22B933B3AA /* ChartYAxisRendererHorizontalBarChart.swift */, - 0B884F348DE9E36837CEC0A765E9ED27 /* ChartYAxisRendererRadarChart.swift */, - 91C34C4AAF07AB370560C70814CFB51A /* CombinedChartData.swift */, - 8D475E214297E4F594F394FB1131FB02 /* CombinedChartRenderer.swift */, - 6D54DE91260CFD1DB2BCA0A551928D51 /* CombinedChartView.swift */, - FD66153A6F2336D277807D2D12111D72 /* CombinedHighlighter.swift */, - 9C51F169E76464090A693CBD7C5A9773 /* HorizontalBarChartHighlighter.swift */, - 64E5BC801F935D39BB5BF067CC439D69 /* HorizontalBarChartRenderer.swift */, - 4A45A23E2773710E17C6C6496897FC1C /* HorizontalBarChartView.swift */, - 43023730F9914CBA6221FF9C029EE628 /* IBarChartDataSet.swift */, - 2C71303AEC4231931093C3E72FE1E3FC /* IBarLineScatterCandleBubbleChartDataSet.swift */, - 5B3720BF8EA93EFFA30CBA3BDAC576C9 /* IBubbleChartDataSet.swift */, - 4BB8032107E61D92BFF991CC150532F3 /* ICandleChartDataSet.swift */, - 6DC0843C0B94B968DB11E2D23CFF2A6B /* IChartDataSet.swift */, - 5F10AA50F9D808E14A651D36400073CE /* ILineChartDataSet.swift */, - 43F93CF1CFCB4456B8457EEA5D5F0E4A /* ILineRadarChartDataSet.swift */, - 5CBA54F2786BB648E5CE6D80BB38922C /* ILineScatterCandleRadarChartDataSet.swift */, - 230511BE1F38D84E3EB831384C3E3BFB /* IPieChartDataSet.swift */, - DF5B8D64BAB3EBE249136D06FAC640CC /* IRadarChartDataSet.swift */, - B3E653CD21988F08329882B68700E1D9 /* IScatterChartDataSet.swift */, - 60D88DACC44919B6B3E7584D3C3CA1EF /* LineChartData.swift */, - 6FFF7643372191487B450718C0086636 /* LineChartDataProvider.swift */, - B7AE59CB52BFF46497C4094B08282B86 /* LineChartDataSet.swift */, - FB7FC0161943E9CD406F01F85F122617 /* LineChartRenderer.swift */, - FDD4975DCDA03C50A9DB9B1C4634BDC5 /* LineChartView.swift */, - 7C5CB28B621DA15A8BBA82D2358CAD2B /* LineRadarChartDataSet.swift */, - 9E3131CA4CBB5B5641969B3F35142087 /* LineRadarChartRenderer.swift */, - 0CC05AFECB18C9ED7FEF3DC1CE084AD9 /* LineScatterCandleRadarChartDataSet.swift */, - C95E297CA057EE7F95758D5DFF81D67D /* LineScatterCandleRadarChartRenderer.swift */, - 460723190BA7F0D643AB0BDAADE7A89A /* MoveChartViewJob.swift */, - 039A269E1BA71A6D450528678E586874 /* PieChartData.swift */, - 6A91063E89AF470C783E9B7148C2C30F /* PieChartDataSet.swift */, - 266E37D12C6FB3B5DC302EA90C7DFD4A /* PieChartRenderer.swift */, - 95CFB49A2BC3C7EA331A9D06AA687884 /* PieChartView.swift */, - 360215B27D8ACD8FC6F32AE1CDE860E8 /* PieRadarChartViewBase.swift */, - 3131AA6BB1825657038B27B52388EF1E /* RadarChartData.swift */, - 785A6061EBF846C22D32C454D75D72C8 /* RadarChartDataSet.swift */, - 04083689DEE81844F8C805D0E8F2C9F0 /* RadarChartRenderer.swift */, - 4F22D724D4EF34566CE2957BC89FAA1F /* RadarChartView.swift */, - A1ABDAF6FB72664333B8D47C4AF20DD8 /* ScatterChartData.swift */, - 0E4FDE1BC725ED63F0B6A523CDABC50A /* ScatterChartDataProvider.swift */, - BDB01191B147BB8DFF216B66779B2E55 /* ScatterChartDataSet.swift */, - 6C7FF401A31973A2630448A9C6288B0A /* ScatterChartRenderer.swift */, - 5ACD5EE103029601C772229A70E86D9A /* ScatterChartView.swift */, - F39479450812051FB2E3D2D4963B06B8 /* ZoomChartViewJob.swift */, - ); - name = Core; + path = "../Target Support Files/SORelativeDateTransformer"; sourceTree = ""; }; - E7A6D1751C2632B720781CDCA7801166 /* iOSDFULibrary */ = { + CBBD84C9E35839723D2A5FEC9B6D819B /* Resources */ = { isa = PBXGroup; children = ( - 483D61B7DC464B491ECE51436D3496AC /* crc32.swift */, - F8964B5A49D2BB43EB10BEEB961A9120 /* DFUControlPoint.swift */, - 3D4FC595EB099180C494950C4BF5CDA8 /* DFUExecutor.swift */, - 7CFB6A624AA5FF897966C6FB11315910 /* DFUFirmware.swift */, - 08F136554A09DFFF8E1C72473C50B55F /* DFUPacket.swift */, - 7BC5FE6235AC9424CC9199E1F42DCBAD /* DFUPeripheralSelector.swift */, - 5EEC8A34B0F02B1085F5F8AA5BB95F7B /* DFUPeripheralSelectorDelegate.swift */, - CA484951371BF3FB96E02CF1C8E305BF /* DFUServiceController.swift */, - 5B539DA027D44B349C7B05CAA534A325 /* DFUServiceDelegate.swift */, - 7B98EB140582996FA73E90B47544AE92 /* DFUServiceInitiator.swift */, - 50B8E94366FB82BADDB196B452EA42D7 /* DFUStream.swift */, - FFC4FD33EE89AFC9C8132DFF093AA464 /* DFUStreamBin.swift */, - C14C16A57DC940366F62208F7DE68933 /* DFUStreamHex.swift */, - A145A750A808AAABE7EB44FFDD278DDA /* DFUStreamZip.swift */, - 972420E4F7B3DD29C24E86992C6B2A00 /* DFUVersion.swift */, - FA2180DA463BB8AB24453FE6E9CC6DB2 /* Double.swift */, - E9E4CE6073A0C1A57A58937E3B454904 /* IntelHex2BinConverter.h */, - 328EBA3C72607647E986829A56A5E492 /* IntelHex2BinConverter.m */, - A58EAB835EAB1A16A2E243058FF69AC0 /* LegacyDFUExecutor.swift */, - D5DB9E58AEA5FCDCFAA3BF3E583A2C33 /* LegacyDFUPeripheral.swift */, - C357FA281AE30B3AEDD3EA1BC1FF7278 /* LegacyDFUPeripheralDelegate.swift */, - AC4F9A3DFED49917418F278A1D2929A9 /* LegacyDFUService.swift */, - D19218D03D052E41A01F27F4779AB208 /* LegacyDFUServiceController.swift */, - 72B74F03AC58A3B6983EA983A09182C5 /* LegacyDFUServiceInitiator.swift */, - CA99B75535DA6509E52FE68FDF855106 /* LoggerDelegate.swift */, - CA28C1F157AE297ED4C98A6D547097C1 /* LoggerHelper.swift */, - 9FF15AE5DEF758BC43077DF37993803B /* Manifest.swift */, - 20A8EEFA215E4D2CFD3A6FF42592DDD4 /* ManifestFirmwareInfo.swift */, - 51B178AD2E4A0CB47CECA64B09CE780F /* NSData.swift */, - 72DCB5A45D848E4F873A3FDBAD5123DB /* SecureDFUControlPoint.swift */, - 6E98215128C662955799889F2CAA71EA /* SecureDFUExecutor.swift */, - B873D145FC904746DF7DA313C46B54DE /* SecureDFUPacket.swift */, - 96DA89B871B765D381CF4A8E2B40C304 /* SecureDFUPeripheral.swift */, - B6EE9730ACD1B5598D6B641BEFD33E3D /* SecureDFUPeripheralDelegate.swift */, - 263B6E237A87CBC9668E1399050AE914 /* SecureDFUService.swift */, - AF1532D0853445488D31566FADFCB577 /* SecureDFUServiceController.swift */, - 2F1366E53AEF4B25B11AFC54CF6B5562 /* SecureDFUServiceDelegate.swift */, - 2BEB4854EF31AF4FEC6FE6A0685729FD /* SecureDFUServiceInitiator.swift */, - 318AD9D95E3D61B34F9E41FAE77C5C66 /* SoftdeviceBootloaderInfo.swift */, - 3B85A7E99977BBC2BF8FD9AFDCB21B34 /* ZipArchive.swift */, - B266843ACE3AC30D35326E8AD0377208 /* Support Files */, + 9764B0461832699549599577CAA19A87 /* SORelativeDateTransformer.bundle */, ); - path = iOSDFULibrary; + name = Resources; sourceTree = ""; }; - EAE16ED38F7AF84CAE7704EE74B773D6 /* Support Files */ = { + CE524A545782A95022E9316AB40B0A3D /* Support Files */ = { isa = PBXGroup; children = ( - A02A6FE511E50FEC0B8C6F581191AB0C /* Info.plist */, - B31E512A805E296CFB496B487DCBDE0F /* MSDynamicsDrawerViewController.modulemap */, - 46D3E1708E60EBB4BFF3099B85B4242A /* MSDynamicsDrawerViewController.xcconfig */, - 638772E1DB67E0641819A9307CD83016 /* MSDynamicsDrawerViewController-dummy.m */, - C943C74D5EBFCFC5D7C7D87F26B6916D /* MSDynamicsDrawerViewController-prefix.pch */, - 0BBB6844B4BB6BFFD7C081613C5523F6 /* MSDynamicsDrawerViewController-umbrella.h */, + D3759F826E836CD87D3A4364B90F602D /* Info.plist */, + 5D784F6F1C9E83D679B31CE8B95F4C6F /* iOSDFULibrary.modulemap */, + 0ED638A9C3BF6397AADB4BBE296DBE6C /* iOSDFULibrary.xcconfig */, + 15E9A58EC2FA0B8E7E1806E7B1AE089F /* iOSDFULibrary-dummy.m */, + 0A8A4A14EB44665E3CD34F24781A802A /* iOSDFULibrary-prefix.pch */, + D8C8AD9539CA43A538BA9689BB8B12E2 /* iOSDFULibrary-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/MSDynamicsDrawerViewController"; + path = "../Target Support Files/iOSDFULibrary"; sourceTree = ""; }; - EAFE7159EA782F0B2D6DFEDC32B1472A /* Support Files */ = { + CED896371FE2373F91ABCA0AFB4D4BD1 /* Support Files */ = { isa = PBXGroup; children = ( - 41CFA0D780B185E82A207841FCCB5B06 /* Charts.modulemap */, - B62C7E4807F62D1EB0E4BF7FAD8D54E8 /* Charts.xcconfig */, - 2EDA071190ED33394E0D695AC4E61C6B /* Charts-dummy.m */, - 1075FAB8E5B0A48DDC269427463CC204 /* Charts-prefix.pch */, - 96689834A1656B634865B9D2B6FE3B29 /* Charts-umbrella.h */, - 307E9CB2EDA641AF0D44C5C9ABBB06D4 /* Info.plist */, + 3C89B5FA6B75ED13B4FB069103EA2907 /* Info.plist */, + 55AEC813726AA06144D720DF0C3225D8 /* UIImageEffects.modulemap */, + 5A0D5FF1E2EB16464EA2AFC9745D6FF5 /* UIImageEffects.xcconfig */, + F8D04B31A797E7852B9B23234D38012E /* UIImageEffects-dummy.m */, + 01CDACD4FF75BB9835E050FC04DAA049 /* UIImageEffects-prefix.pch */, + B9DC380322702BC559633FE8ECE41EC2 /* UIImageEffects-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Charts"; + path = "../Target Support Files/UIImageEffects"; sourceTree = ""; }; - EDA688E8A295BF10A07E92C6C5DA8727 /* Security */ = { + D694F90C727F5FDF247B15D1D881FF25 /* UIImageEffects */ = { isa = PBXGroup; children = ( - BBC3F7691EB675FEB8020A6CF68E163C /* AFSecurityPolicy.h */, - 0258069E600E4BEB6692995CA70B464C /* AFSecurityPolicy.m */, + 1F0E7152AC45C5C7FD619A8C0FDBB461 /* UIImage+ImageEffects.h */, + 494DACF56937AA4BEEEE90F23B69896D /* UIImage+ImageEffects.m */, + CED896371FE2373F91ABCA0AFB4D4BD1 /* Support Files */, ); - name = Security; + path = UIImageEffects; sourceTree = ""; }; - EE7B7DD7C668913D044C560194FC304F /* Nocilla */ = { + DE64D0A2A884BF4E1BC137DA55BCC25B /* Support Files */ = { isa = PBXGroup; children = ( - 9FCC3BDD292F775D82BC3C795A30BF34 /* ASIHTTPRequestStub.h */, - D1AE4C206A7735991E5E1A338F5034F5 /* ASIHTTPRequestStub.m */, - F704A1B2C6DB0CBA5FE9CA348766433B /* LSASIHTTPRequestAdapter.h */, - 78D7A724E9CBF9958150007671ECA798 /* LSASIHTTPRequestAdapter.m */, - 2F32C89EBA3DDFBD3FA65A5B18F1A713 /* LSASIHTTPRequestHook.h */, - 5083863E50CCB06D2B8E5C43C0F09D3D /* LSASIHTTPRequestHook.m */, - 6889A08C817AB661A9EC94B5BE533329 /* LSDataMatcher.h */, - CE40A5CC23FEB7D99E1DC5874D90404C /* LSDataMatcher.m */, - A87C8B6885A8911D7F01568BCC944F75 /* LSHTTPBody.h */, - 699C154D614D17A32548504D0F802768 /* LSHTTPClientHook.h */, - 67040C8BF6DC80D5F9618891B4BC2804 /* LSHTTPClientHook.m */, - 52CBE632BE765DE7EED5265695694B0E /* LSHTTPRequest.h */, - C061FA8DD99967961A9B3AF55D8F0905 /* LSHTTPRequestDiff.h */, - C4474248A2BA8640ADC97479A8446ABB /* LSHTTPRequestDiff.m */, - 97210ED1AFAB4C3F60529067E5222778 /* LSHTTPRequestDSLRepresentation.h */, - E24F275242E58CA92B37368F47AC7017 /* LSHTTPRequestDSLRepresentation.m */, - 441A79F1A7DBC078C484FEBEA1B3DEFD /* LSHTTPResponse.h */, - 65A0FCF518BE46B622A82AB43330FF47 /* LSHTTPStubURLProtocol.h */, - 57364D41C712DB122B049108E3AA9C29 /* LSHTTPStubURLProtocol.m */, - 2C5051891CB782676EF93C0714FC8A18 /* LSMatcheable.h */, - AC494697EA56ED1E575363203F683F77 /* LSMatcher.h */, - EB836F511FBFE2EFB1E988FA07FAB08F /* LSMatcher.m */, - 9F9D4AFC996EBB5E22A2908EF9000901 /* LSNocilla.h */, - E0BDD90E29E8597BE2EF2A831740F21A /* LSNocilla.m */, - 85C61B96BDEF7D0E930877D9369EC840 /* LSNSURLHook.h */, - F6EFD6459AC799BB8CA3B25D72317E23 /* LSNSURLHook.m */, - 0D9420B97D73FDEA67CDA023923E6EF5 /* LSNSURLSessionHook.h */, - 8F0931F05FEAABBDF4BF55AE4F957D41 /* LSNSURLSessionHook.m */, - BCBA469F941AA7024ABC60EDD8070DFE /* LSRegexMatcher.h */, - 185E1D9306E47ABDB4496940AEDD9703 /* LSRegexMatcher.m */, - 4A1407A9A22DB3CB922052C22157AFA5 /* LSStringMatcher.h */, - 6E4833113746957048616673A068E48F /* LSStringMatcher.m */, - 20C9E277B36138FB92DBDB4222096514 /* LSStubRequest.h */, - CC89499D0EADD7F0CE370CD9EBE09692 /* LSStubRequest.m */, - 15F7FC63041B13CC887C5154D8B825D7 /* LSStubRequestDSL.h */, - B50AA473C6B75880C16C9A5ED62CD985 /* LSStubRequestDSL.m */, - 071A2CDAF8D4CE490A79446640CBE1B1 /* LSStubResponse.h */, - 8A38D727960CCF83F379B9029EF8AD42 /* LSStubResponse.m */, - 01EBF0C337277D28D7B7CE89D7294EF6 /* LSStubResponseDSL.h */, - EF2F792D0FF3A904FDF12F840C801664 /* LSStubResponseDSL.m */, - E4B361998344DBBBC59B2480A7BEC642 /* Nocilla.h */, - 5B41B62E7EC756C61C1DED1008FEC6BB /* NSData+Matcheable.h */, - 16FC710F1F548B45252783CA16EB5C9E /* NSData+Matcheable.m */, - 5F754BE6874F52C0AEE481C4014DF92F /* NSData+Nocilla.h */, - 90825536944A5CED7B9E3877BAB8D344 /* NSData+Nocilla.m */, - 25688C8318A800941558DE9D7B6CC38B /* NSRegularExpression+Matcheable.h */, - 3AE2101F1A2949E7ECCBF41F705B7920 /* NSRegularExpression+Matcheable.m */, - F519AC571C9DA17373D198C1559AF6F6 /* NSString+Matcheable.h */, - 6D38765DAABD4F915E1A8A14DA7DAC1A /* NSString+Matcheable.m */, - F7C069AA43B53609013F4D06A226EE20 /* NSString+Nocilla.h */, - BFC8DF115F3837443B19615A9788DE18 /* NSString+Nocilla.m */, - CF1F61B8147F56675FCB7D2838DD7D69 /* NSURLRequest+DSL.h */, - 69A364A0200A2D14090DAB5368826363 /* NSURLRequest+DSL.m */, - 5815BFB466C831217D81F909BCC540DE /* NSURLRequest+LSHTTPRequest.h */, - 507C6D5B825799DB9A162E5A23612658 /* NSURLRequest+LSHTTPRequest.m */, - 2DAE93AAA10E5F5219CEEB96F9A087E7 /* Support Files */, + 62EAE1B4A2C02F71986EF9A5BB8069ED /* Info.plist */, + CC1E469B040EFC3EFA7B95B1A7031568 /* NAPickerView.modulemap */, + 3F8CBC9AA0CF7A1E700BA11D93853B73 /* NAPickerView.xcconfig */, + 5AB5D7461B216FE2AE433AD45349F9C8 /* NAPickerView-dummy.m */, + 088282086B91CEAD1CDFA33D9B2E5A9E /* NAPickerView-prefix.pch */, + 1B0F7B3863232C0F4F158904C1E3FB68 /* NAPickerView-umbrella.h */, ); - path = Nocilla; + name = "Support Files"; + path = "../Target Support Files/NAPickerView"; sourceTree = ""; }; - EEB982F1D3FB38AAFD13FF74CC6F39FF /* Realm */ = { + E154F51B0E81938E94839B3C53FD1A45 /* BLE */ = { isa = PBXGroup; children = ( - D7DB036E652081BB062C18E5EBAE5F81 /* RealmBarData.swift */, - D083BC66915B806689F8C88A39D248A8 /* RealmBarDataSet.swift */, - 59899282DB3644470A3586597C8C1BF6 /* RealmBarLineScatterCandleBubbleDataSet.swift */, - 6CA1374168936E98895A7E75F1042053 /* RealmBaseDataSet.swift */, - 045A06AFF8CE942DB74ED390A102ACE6 /* RealmBubbleData.swift */, - 0BCCA8BD658C2A1DA7E51EAACEF94C27 /* RealmBubbleDataSet.swift */, - AE6D43BD32B1717C089D31AE97657B1D /* RealmCandleData.swift */, - ED590FDCFEF9F81F64FA34EA9F76D7FA /* RealmCandleDataSet.swift */, - B378688643C1F08E81B2A312313D22BE /* RealmChartUtils.swift */, - 2F8E1CE134F23713530CA294632D5098 /* RealmLineData.swift */, - 3CF72A303C626BC569AFC4040E1D7BFE /* RealmLineDataSet.swift */, - 64822BCB87843EA567B82449B79CB693 /* RealmLineRadarDataSet.swift */, - DE13E02126DB15BB9DE464A31A2D2FA2 /* RealmLineScatterCandleRadarDataSet.swift */, - 02A4895EE81843D57911C97728A52D06 /* RealmPieData.swift */, - 8446D771AF2D73E31887FBBA49A49C77 /* RealmPieDataSet.swift */, - 2EF9FA8F0EA981BF7F9C5F88168CF579 /* RealmRadarData.swift */, - 499F7F8F5A854B43846F3BC9DEB7B6C6 /* RealmRadarDataSet.swift */, - 0EEC159F830EEE800640B42432953ABA /* RealmScatterData.swift */, - 2887F8172CD2C634B8FDC08C714BD553 /* RealmScatterDataSet.swift */, - ); - name = Realm; + F959A2A7FF2888E35438C56D576A316F /* BLE.h */, + DCAD43A3355EE1CFA4D2567C18C2DD9E /* SENPeripheralManager.h */, + B852A764E7F54B50530F7A88C25FE288 /* SENPeripheralManager.m */, + F21A89785E568922E31A576572F2711A /* SENSense.h */, + 7E3B39E09E9ADB033F775C9C50586021 /* SENSense.m */, + B44BEA5613A9AD6D1AA81717F7299CF8 /* SENSenseManager.h */, + 7357B28B445072BDC2324E9CE165FC69 /* SENSenseManager.m */, + F0A457C138C5DF94685611358E63C82A /* SENSenseMessage.pb.h */, + C9B1AABAC8AB7B7AD2CC254E35894C08 /* SENSenseMessage.pb.m */, + DF24D097A8A34C52FF2B86097CD6D9EE /* SENSleepPill.h */, + 7BAA246DE42493986223E37A5FAB1CE2 /* SENSleepPill.m */, + 6C4C05B41AA902BDE02CAA2A5CA6CF97 /* SENSleepPillManager.h */, + 3778014587015543B9683F038960CD39 /* SENSleepPillManager.m */, + ); + name = BLE; sourceTree = ""; }; - F1AE28513B5F4EBEDE9829FDB8ABADC2 /* Support Files */ = { + EBF702ECF3D398811FE83DC7D0A0070D /* Support Files */ = { isa = PBXGroup; children = ( - 7B54660EB99686B4ECBB9FE6B56EF9F3 /* Info.plist */, - B52CB2BD44757D092247CA3F696A9F66 /* UICountingLabel.modulemap */, - 777AE39430DF91025EC3A6110D996E06 /* UICountingLabel.xcconfig */, - AA103A261B0D58C0B9F2DD18509B174E /* UICountingLabel-dummy.m */, - 949A70DB8E11899DDED15530CD90755A /* UICountingLabel-prefix.pch */, - D6D23FA25E3DB4E46D8C2BA30B0C3EFC /* UICountingLabel-umbrella.h */, + 9A13E65214B0F18021C4414743E0364E /* Info.plist */, + E8785C07FBAE391E05460B833AD978E3 /* Kiwi.modulemap */, + 16FC4E490708591F17E677060E19FD0E /* Kiwi.xcconfig */, + 17437E1514E23069EE0787BB8CAA769F /* Kiwi-dummy.m */, + 3696AC0249E3CE3453DD4A17872587B4 /* Kiwi-prefix.pch */, + AF1F5291602B09E82E87C5357B79F762 /* Kiwi-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/UICountingLabel"; + path = "../Target Support Files/Kiwi"; sourceTree = ""; }; - F9775D43AD1C6940DFC11F2F4F5CF521 /* Frameworks */ = { + F099E3251C019ED74B57188D55B6589F /* Frameworks */ = { isa = PBXGroup; children = ( - 394CDCA718E8E592358D3A7BF05C2F43 /* AFNetworking.framework */, - 3664EF64EBB999443CB5DB44AAE2B2B1 /* Bolts.framework */, - 5321532F1A1907F189EB5B32982326EB /* CGFloatType.framework */, - EAE86106065D2999DA85019B2D43B9D6 /* CocoaLumberjack.framework */, - BF76B44BE95F7E991F6B22F3BFE9A6F5 /* FBSDKCoreKit.framework */, - 7C5D232433B8193471CA138255302B9A /* FXKeychain.framework */, - 234A0A8855A407594657E217BC6F84A1 /* iOSDFULibrary.framework */, - B1456F0BB470014478425ADCB04FC1AE /* LGBluetooth.framework */, - 4984747F3B91403391EA4EE69C0CA727 /* NSJSONSerialization_NSNullRemoval.framework */, - 3C4B7CADF45E3F6BCDDD1DAE47BAE034 /* ProtocolBuffers.framework */, - 64C98FBE189C77CD73282BF1BB7AD897 /* Realm.framework */, - B40031E7B23BF1AFE32642D32E988539 /* RealmSwift.framework */, - 07E52B4F8804AE5AFA3F87E18A8A6CC9 /* Zip.framework */, - B77C452A70D79B4E997BC12CCD2EDDC9 /* iOS */, + 314999E1715083BFF51274A6219BE775 /* AFNetworking.framework */, + B62DB8621AC21C867659B21483A2705E /* Bolts.framework */, + 2AE633F115BF716034D81DBB14F6355C /* CGFloatType.framework */, + 0A6B143E9A57A4649C38827C1B8071DB /* CocoaLumberjack.framework */, + 4605B515FCB47357C239F30A7F8C781E /* FBSDKCoreKit.framework */, + D57B3716E7601A56E914D1878DEC86B3 /* FXKeychain.framework */, + 4BD854D75F99835EB41DE7EC3FDD8A71 /* iOSDFULibrary.framework */, + 7F1F6C643394771272A4C855A6EE4B32 /* LGBluetooth.framework */, + 400F6D1754AE6A3A1EC3585774096C38 /* NSJSONSerialization_NSNullRemoval.framework */, + 5EF1444B5384BE14AE6FD51C9E74E370 /* ProtocolBuffers.framework */, + 5C15D030E1F39F0F0BDDB581CDE2DB8D /* Zip.framework */, + BDB03DB5FD2FD0AD1E2F3DBF63A0612E /* iOS */, ); name = Frameworks; sourceTree = ""; @@ -6028,22 +5467,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 161E4CFB85610860F8850E7CBE25E4A9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FBF64CB07512F0DC7B4B419FE6030429 /* Charts-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 17628CED58808DC21C16DBC44C99E03A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D624245FA9010EDB51E036D60265C009 /* Pods-SenseApp-Sense-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 27681E26FA58B0FA67CC4C4E21B458AD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -6068,14 +5491,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 32D3672A83C10CA30E55C14797909160 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 838BFE2B59E2E5E82D94FCB3F8C0FA32 /* RealmSwift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 372FD004030F6675FD46EAEC06AAEDCC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -6123,6 +5538,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 530FEDA65C9F2094C07726E7DA48D7ED /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 192871ECBDD40F33A3C6D2EE763A1977 /* SVModalWebViewController.h in Headers */, + 904468222831561663817A5AAA0BC067 /* SVWebViewController-umbrella.h in Headers */, + BC29D6CF8F4671DBC08BFE201502AA90 /* SVWebViewController.h in Headers */, + CD723D3BA84641F47609CF108E633ED5 /* SVWebViewControllerActivity.h in Headers */, + E6B3119C1E089809C10F10CF03DB29FE /* SVWebViewControllerActivityChrome.h in Headers */, + B8B545FBAB911616BC964D730C46B442 /* SVWebViewControllerActivitySafari.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 59F75FB665458648B0788ED4F5D02502 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -6264,16 +5692,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8D77138C949D25E47F6C8226D816B775 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C19425B6B45280CC945221757E7C7FF7 /* UICountingLabel-umbrella.h in Headers */, - 8C11755864F4663D326638223A5C90F4 /* UICountingLabel.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8EA367F8AA93B80B9FCC1D86D6D1C807 /* Headers */ = { + 8EA367F8AA93B80B9FCC1D86D6D1C807 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( @@ -6370,6 +5789,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8FF9F0953C9D5AEE241221B0101F2E46 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 36D7A88A537AEFFAFB3427EE11AB7E3A /* Charts-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9ADBB5E555FFD3DED83C8A3CC0DBF8E4 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -6442,6 +5869,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B19C1050DC7EA24CDCE803B121D2E2C9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F9349EE3BB9B604B9623F194ACD7582B /* UICountingLabel-umbrella.h in Headers */, + 3B326BD3C8053F89C285C4F8AF382972 /* UICountingLabel.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; BE5CDD11A1487BD222C1CD1A7FB33800 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -6496,93 +5932,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D371BB35E776FAB84DC604F1C776377D /* Headers */ = { + CFA06873A3FF5158CE3A88D46A2BFA55 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3ACA2A46BEC11E599A6E5CBE685E9881 /* Analytics.h in Headers */, - C282CF245C3D80776174D1D3B90D4772 /* API.h in Headers */, - 01E0781CE0ADD3F03E1FA474103F2E3D /* BLE.h in Headers */, - 8B78E69D80622235564E8BB25891CB8E /* Model.h in Headers */, - AE44FC70B8CDAAD98F245A6950AFB18F /* SENAccount.h in Headers */, - 8BD1206193BEF68356F9AD62AFB840F8 /* SENAlarm.h in Headers */, - 945594FD245586D279D73FB78346E3AE /* SENAlarmCollection.h in Headers */, - A5CAAB1469DC8364BA4DD4F435CBEC51 /* SENAnalytics.h in Headers */, - 241CB44C3CF88E659F8666A409F871E6 /* SENAnalyticsLogger.h in Headers */, - 5ACA704A2FF797A1877B306AA80C6095 /* SENAnalyticsProvider.h in Headers */, - 427342E67749AD8D91BCB22D97BA9002 /* SENAnswer.h in Headers */, - A83B070E2E55E4B1EED26C6F5FA3A563 /* SENAPIAccount.h in Headers */, - 0F2B855318FAC1F6F8E1E090AC68CB7C /* SENAPIAlarms.h in Headers */, - E4D7D0B902EEDD56577EAD41BF44F07B /* SENAPIAppFeedback.h in Headers */, - AEF2EB3BAB7712F2B6BA652F29A0CC36 /* SENAPIAppStats.h in Headers */, - DD3D5F30C6C828426DFF129141930F83 /* SENAPIClient.h in Headers */, - FB3E0864D1F529186BE54A1A2EFA346D /* SENAPIDevice.h in Headers */, - 53982CF8DF887D8C8DA76AF2A6296E25 /* SENAPIExpansion.h in Headers */, - 83DADC4FEFFB5D4520951803070602C5 /* SENAPIFeature.h in Headers */, - F4EEA2EEF9D7A3E19EA43492CBC032B8 /* SENAPIInsight.h in Headers */, - 7B910C0AF91B9CED67D2967711529D8B /* SENAPINotification.h in Headers */, - 389E17D5D9ED2115EF41E7C08FC6F26A /* SENAPIPhoto.h in Headers */, - 15B597127CC3F017A4079D1DE5949097 /* SENAPIPreferences.h in Headers */, - 4D92B84448BC7B0C7E9C52210D2079AF /* SENAPIQuestions.h in Headers */, - 0B13F2AC3F72EB709DCA9DBC64409489 /* SENAPISensor.h in Headers */, - 12494B0651A0CA8BC0D596026B2EE8D4 /* SENAPIShare.h in Headers */, - 34738B7E4F8D228CC475969F8AFF2EA0 /* SENAPISleepSounds.h in Headers */, - FAAB761209DBEC677FCE1E9657F8B468 /* SENAPISpeech.h in Headers */, - 1542D18C7CEA571B88BB5286E6A3208E /* SENAPISupport.h in Headers */, - A8DA39F1CC7C8F522C96177B97C845B7 /* SENAPITimeline.h in Headers */, - 4B07984EEFB9695F64E793F3842BB381 /* SENAPITimeZone.h in Headers */, - 6644AACA4C31EE23383564A9BDBBEC46 /* SENAPITrends.h in Headers */, - 80FE8743A6F070ADE6B5CB02059D90F1 /* SENAppStats.h in Headers */, - 0982F0B9A83085AF0E8FD1935191CA79 /* SENAppUnreadStats.h in Headers */, - 25235747A7C7B9A82E56A21637A8A796 /* SENAuthorizationService.h in Headers */, - 146D9EEEF5186E435B02B8E247C7224D /* SENCondition.h in Headers */, - 19911CD8F66B2DC6F3EF20A38093C901 /* SENConditionRange.h in Headers */, - EF533B597E390016A2D127DB0BBD0B71 /* SENDeviceMetadata.h in Headers */, - 7DCD735DC4DCD9D4F6768541D014B74B /* SENDevicePairingInfo.h in Headers */, - A7B0F819748AA709A4A07CB513A82CDB /* SENDFUStatus.h in Headers */, - 31FAF72F996D1B2A2242B728608531FD /* SENExpansion.h in Headers */, - 3295792AD74D93C915734BA310D6C717 /* SENFeatures.h in Headers */, - F7C00878EDCB31AFF4FE37E07699BAA3 /* SENInsight.h in Headers */, - DB971431A1016872FDA55972A37FEBA8 /* SENKeyedArchiver.h in Headers */, - 6A6BCBBFEEE34EA9589179565E7A250C /* SENLocalPreferences.h in Headers */, - F6B8265F8CCC9B666D46903E29E6DA74 /* SENPairedDevices.h in Headers */, - 130527AAE8765BAD009310514630F135 /* SENPeripheralManager.h in Headers */, - 254AD971C7B8A446ADDE442ACB20DE3D /* SENPillMetadata.h in Headers */, - 3DC928B5E71CC5A9640CDB2F813D806B /* SENPreference.h in Headers */, - 79293BDB2C828B986E5ED54E3599EB82 /* SENQuestion.h in Headers */, - 6DCA0A2F53B42067585063C8B1718184 /* SENRemoteImage.h in Headers */, - D3664329FAF71CB1270DECFE64B21EDE /* SenseKit-umbrella.h in Headers */, - 7883A222138D7424CEDF8844132A00D1 /* SenseKit.h in Headers */, - 4B589C6227BBA5AB2F6E177FDECD8F5C /* SENSense.h in Headers */, - F3A7BF2690048AB357FE6D85F20D6CB9 /* SENSenseManager.h in Headers */, - 3797B27E2DFDB945411ED437ABD78EF9 /* SENSenseMessage.pb.h in Headers */, - 8537CF58E11EE28EAB9E553162687497 /* SENSenseMetadata.h in Headers */, - 1F22F628174A90CB05E333C9AAEC68D3 /* SENSenseWiFiStatus.h in Headers */, - 64BCC345074B91C766A2A4AD8FFA7F96 /* SENSensor.h in Headers */, - 82958104D53A5602C8F6938C06356778 /* SENSensorDataRequest.h in Headers */, - 7D17E30A0DC4475AE25F77743F91414F /* SENSensorStatus.h in Headers */, - 82E4E476BD6ECB50B86473C4A5B5BA96 /* SENSerializable.h in Headers */, - 563A425A3C91359C56988C5DD7FA85C6 /* SENService+Protected.h in Headers */, - 18C7D2A231176F08523CA332907FD8F5 /* SENService.h in Headers */, - 65E4D53E16A507AB77FF4A869BE93127 /* SENServiceDevice.h in Headers */, - 7A245B30F4C433BB391AD546F26304F9 /* SENShareable.h in Headers */, - 95F7CC5A5243432495F2A81415C5ECCA /* SENSleepPill.h in Headers */, - BB23DD0AABDA963FE2405F8855C50C06 /* SENSleepPillManager.h in Headers */, - 8133A0D0D745D2770528A423558FB282 /* SENSleepSoundDurations.h in Headers */, - 965F5B17A376514E96B65B0CF2F292BD /* SENSleepSoundRequest.h in Headers */, - 9DABAE674BDC3B7C78264AC253337ABD /* SENSleepSounds.h in Headers */, - 1DE380C180D03370EFC075AFF48FCAFF /* SENSleepSoundsState.h in Headers */, - 519527C7E0DA668E68C69CF7FFEC5F15 /* SENSleepSoundStatus.h in Headers */, - 571035B62EAE734BF8257B262F388892 /* SENSound.h in Headers */, - 9C58491D86D5C2D16DD67D3104F242D7 /* SENSpeechResult.h in Headers */, - E4FF225B033DCEFA7C5518717D68D583 /* SENSupportTopic.h in Headers */, - 8A38B8B48F4740485C571F0A52914D07 /* SENSwapStatus.h in Headers */, - F854D78823AD782877CA144B34F8CDB6 /* SENTimeline.h in Headers */, - 06CBC64DEB3FD0DA7E133B630910149B /* SENTimelineMetric.h in Headers */, - 04086616F173579F594AE9172CFDAB04 /* SENTimelineSegment.h in Headers */, - 565FB35E60AD42D2049D9EE11AA5FFB7 /* SENTrends.h in Headers */, - 580CAD09D7862897B0CDE270764D8A12 /* SENTrendsGraph.h in Headers */, - C769804E54F7EE3E836BCC004F2E4539 /* Services.h in Headers */, + E36670E60FBCCDD90D50CEFE120CB0C7 /* UIImage+ImageEffects.h in Headers */, + E230EEC1D8D0723096AF904BB39FF384 /* UIImageEffects-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6623,69 +5978,108 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E9F14E7F63121F92B0DE96A2FF0491DE /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F61FBB6AEED4A3EC3943EAE1A1F03FC4 /* SVModalWebViewController.h in Headers */, - 231C2AC740C77ED7100FCD68449982B2 /* SVWebViewController-umbrella.h in Headers */, - 14F15E522DAAC5C15DD287C92F9F4DC0 /* SVWebViewController.h in Headers */, - 3F924F7BCFE9B06763D78E0EC1D5BBC0 /* SVWebViewControllerActivity.h in Headers */, - 7D2C27242410C4B7BBB583520120D71E /* SVWebViewControllerActivityChrome.h in Headers */, - 0717CBE54E12019054FD064386581D7A /* SVWebViewControllerActivitySafari.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EDFCE3ED2E9C78C47C2C3FDDE4F2FC96 /* Headers */ = { + F3E1077EABF0C15D33854FA5C27FFC9B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3853C361B4ECCE6E6F63C05AF2220DC3 /* UIImage+ImageEffects.h in Headers */, - 1EB508DA76DC923C005FFEF7E59B9221 /* UIImageEffects-umbrella.h in Headers */, + 6D77BA61E22BA6DD13EF8BE60C406631 /* Pods-SenseApp-Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F3E1077EABF0C15D33854FA5C27FFC9B /* Headers */ = { + FBC3CD198B1290937A563410DE6D484D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6D77BA61E22BA6DD13EF8BE60C406631 /* Pods-SenseApp-Tests-umbrella.h in Headers */, + B8D0FA1538AD9326FB52AD4B740963AE /* Pods-SenseApp-Sense-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - FA2647AB8FCEBDDA982F9B6A93AFDC6C /* Headers */ = { + FE19767EAF8EA2A280AB236A72D12DFA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D9B7C0F4AFBD7D4E6186294F78E02356 /* Realm.h in Headers */, - 0F92944D13BE9B6C63BF188894DAF7EF /* RLMAccessor.h in Headers */, - 0489E98427555162AE35170D6F2DEA32 /* RLMArray.h in Headers */, - 287832D069AA7E0D4C19C3E3648A9E99 /* RLMArray_Private.h in Headers */, - E3AC9C3442CB3E1EF5C5EDA9B42330DD /* RLMCollection.h in Headers */, - 5C046104EBA5606755D4A711F4DDF712 /* RLMConstants.h in Headers */, - F3A9C5CC053F22739E58DCB755B43E17 /* RLMListBase.h in Headers */, - 11FF238E74017E7AE529ADEE50DF4ECD /* RLMMigration.h in Headers */, - DFC27DE923CAED74A81FBEECB7C86010 /* RLMMigration_Private.h in Headers */, - 38FAC4863054B2B59D1ED405A97DED6E /* RLMObject.h in Headers */, - 51680F847C6633AD89668FDACEA482A6 /* RLMObject_Private.h in Headers */, - C2C129A2793A252438D0069DFE5FE205 /* RLMObjectBase.h in Headers */, - 689C7A9A087A1F5358DD8F725DBE172D /* RLMObjectBase_Dynamic.h in Headers */, - 071FD8C0542C066C7D55ABF6F134F1BB /* RLMObjectSchema.h in Headers */, - C6FCAABFD994F4C218E42AC1EC35BCDF /* RLMObjectSchema_Private.h in Headers */, - 40971706956181AADAA6FAC5C2956ECB /* RLMObjectStore.h in Headers */, - EE38BA8F118D5CFF5232C4A1EEE30863 /* RLMOptionalBase.h in Headers */, - 5F007DF0B00E82D30AD76181CE2ED242 /* RLMPlatform.h in Headers */, - 36F2A0941DB883B63EB2F50B912DD7A9 /* RLMProperty.h in Headers */, - D09AAE74309B99CEC05AAFEF6132D4B5 /* RLMProperty_Private.h in Headers */, - 714D927ECE1A7F022E9ED25B461AFB9A /* RLMRealm.h in Headers */, - 165CDC7181877CE7AB477D1200E3CA22 /* RLMRealm_Dynamic.h in Headers */, - 28326DE0CC3D077EA4D461370C5C0AFD /* RLMRealm_Private.h in Headers */, - FEAC3CDAACC4D65B85BA3858E0C442BC /* RLMRealmConfiguration.h in Headers */, - AF1F33CA7CEB572DA654D829BC41BD54 /* RLMRealmConfiguration_Private.h in Headers */, - 6AE74AC3EC2AEE2CAEFE5D77161783CE /* RLMResults.h in Headers */, - 2B6F223ED85BC72735F2386C61B29440 /* RLMResults_Private.h in Headers */, - 6D443E8C9666A817934791E6EBDB6E44 /* RLMSchema.h in Headers */, - B71820FC86F84C61A8ED884BBF3EF20D /* RLMSchema_Private.h in Headers */, + 667A711544D7F2EB030A6B63599A18DC /* Analytics.h in Headers */, + D618B276A096BB11B0E144DB8CB4443F /* API.h in Headers */, + FD185A0FF8598808DEE11C4933B0B76A /* BLE.h in Headers */, + E305ED2F4EA517CC2E9EC0CAA306BCC9 /* Model.h in Headers */, + 5F5A73C3476B6C30F196A2E36639C643 /* SENAccount.h in Headers */, + 9D448D9DEFF3CB146E2ADE1956CE04C7 /* SENAlarm.h in Headers */, + 98B0DCDBFD99889C14151E6F283217F6 /* SENAlarmCollection.h in Headers */, + 04D33332808804CD4FE5506C7FE53F5B /* SENAnalytics.h in Headers */, + 42FA4A23E84046961B628209AEB17E1E /* SENAnalyticsLogger.h in Headers */, + 1BF830747CA8768EA7ED3375E3C08444 /* SENAnalyticsProvider.h in Headers */, + EF2CD25D2B81DF04BE71B293DC433BBF /* SENAnswer.h in Headers */, + 2DB80C1AF3A0F915F416EDA077ED3B84 /* SENAPIAccount.h in Headers */, + 33B93FA26A97B679FEA5ED59AFCEB8F3 /* SENAPIAlarms.h in Headers */, + D69A839CC048787ECF89DE776CCC6022 /* SENAPIAppFeedback.h in Headers */, + CED3659D0D4E9D7DB8D3A9FCDDE84256 /* SENAPIAppStats.h in Headers */, + DB0D689D9C790E2791196E959B790A0E /* SENAPIClient.h in Headers */, + 75FF2ADC152EAD954D9944BC9D370BDD /* SENAPIDevice.h in Headers */, + 3AAD894C496B9C67AB3BBD2873707AD1 /* SENAPIExpansion.h in Headers */, + 4C05E3EA30308B19698D23C643C0BE69 /* SENAPIInsight.h in Headers */, + 0A3A63AFD3C1CC328A2D9F755E4F30AF /* SENAPINotification.h in Headers */, + 913FE38D13FAABE18B26CB1E4D646E96 /* SENAPIPhoto.h in Headers */, + 6848A4546407425C61FA8BA6A013FB4F /* SENAPIPreferences.h in Headers */, + 3374F7CC86218919BE363BD32E7394EA /* SENAPIQuestions.h in Headers */, + 9E21AE42FE4DAD8284BC1B9B1E61A4D2 /* SENAPISensor.h in Headers */, + 990F9DB5C80B5EBB94A5AD5A768CA286 /* SENAPIShare.h in Headers */, + 87DAEB9EB7EA7FA3D3BD8F4B4E6B7F35 /* SENAPISleepSounds.h in Headers */, + 18B3492C70750A692781B7C9521A3A03 /* SENAPISpeech.h in Headers */, + 25B919FA691113D9870C7CC306187B1B /* SENAPISupport.h in Headers */, + C2BD31B3A8342040AD532955096D3C62 /* SENAPITimeline.h in Headers */, + 619D27346AD4CF433F1F92036DEB7758 /* SENAPITimeZone.h in Headers */, + E3AC11115F7C13D6C49F5D7AF814BAF2 /* SENAPITrends.h in Headers */, + C687EF7F4E513E010A37C249E7925F74 /* SENAppStats.h in Headers */, + FD92164449F91940A494D58E186E27F2 /* SENAppUnreadStats.h in Headers */, + AED0E0D785B605A552429D8AA113FA56 /* SENAuthorizationService.h in Headers */, + 3D217D1C3D24191ABFE798FE28B51B05 /* SENCondition.h in Headers */, + 6E9219C16E9BBA071865BED517B90C92 /* SENConditionRange.h in Headers */, + ED717C41C3753C0090292B83FC3479CC /* SENDeviceMetadata.h in Headers */, + EED14D1532F4DC63F6282CA052D80E17 /* SENDevicePairingInfo.h in Headers */, + 9DC251AF4AFF4FC2E50F0BE5C3E18D69 /* SENDFUStatus.h in Headers */, + ABC3DC78789A5B94458E2C167ADC1082 /* SENExpansion.h in Headers */, + 699674B0B872C6B630B675122E0635A0 /* SENInsight.h in Headers */, + 627316DC74F72AAB4E466FE4A5F7075B /* SENKeyedArchiver.h in Headers */, + FE0D5DB6E2D65952A03F2F165D9E4565 /* SENLocalPreferences.h in Headers */, + 4BF380429D5C2EA6E10DE305BF502128 /* SENPairedDevices.h in Headers */, + A4AF603098CE02096A17604DA5341FB5 /* SENPeripheralManager.h in Headers */, + BE1A986F2B669082A2BC8BDA17AD2C51 /* SENPillMetadata.h in Headers */, + 55029C2CCDD6E611E178B408293614A5 /* SENPreference.h in Headers */, + 1ECC20ED3FD1E7E35E3267FA78520D41 /* SENQuestion.h in Headers */, + 6AFCCD325F95DFE33202F46A272E2DFE /* SENRemoteImage.h in Headers */, + 6C99A2A9396678CE2A6027ADAD87CE21 /* SenseKit-umbrella.h in Headers */, + BDE1589F684491D087199D2A5AFFEB11 /* SenseKit.h in Headers */, + 86B942B58D92A3C0DBB3AFD575ACEE57 /* SENSense.h in Headers */, + AB67690DE1D4704C440D2967D8A448C8 /* SENSenseManager.h in Headers */, + 3AD95F6D319AD8965148BF0FDF6BF5ED /* SENSenseMessage.pb.h in Headers */, + AA98C6B08A314F8217A2872A06925127 /* SENSenseMetadata.h in Headers */, + E99105B015B27FF3ADEF1770E816775B /* SENSenseVoiceSettings.h in Headers */, + 23631528D008AE9AE4E9D826B0CED210 /* SENSenseWiFiStatus.h in Headers */, + 928A2261E66B98FE16402CDFC9C5DE78 /* SENSensor.h in Headers */, + C3973A4EC490AAA52693E2B5F5CBD958 /* SENSensorDataRequest.h in Headers */, + 8D1A1AC6FFFFE2320E2E136D117FE698 /* SENSensorStatus.h in Headers */, + C15886EE113998695AD397ADB37B8567 /* SENSerializable.h in Headers */, + 058B027A3CA3302166F962637F7924F7 /* SENService+Protected.h in Headers */, + 07CFA580F48E188761DD99775EC1D5F7 /* SENService.h in Headers */, + 02FFB2C8AD4DCD373C98F88052D0C9F5 /* SENServiceDevice.h in Headers */, + 2289EFB799B1241629240516FE511054 /* SENShareable.h in Headers */, + 7ABC691BB31BC8C4B131E4773437168A /* SENSleepPill.h in Headers */, + 404C389714CB64C8B08F1E2F7437C05C /* SENSleepPillManager.h in Headers */, + C0971046EE9B0D18F3730A62AAF93D78 /* SENSleepSoundDurations.h in Headers */, + C770C09B8F38619177E573E60F87A5C8 /* SENSleepSoundRequest.h in Headers */, + E07AFC3465D6B92F7C33B280364D3AB8 /* SENSleepSounds.h in Headers */, + CECD6CEBEB80365E8EBC696AE6536A7A /* SENSleepSoundsState.h in Headers */, + FA8264D66BA4B474492FC6E2B08BEC45 /* SENSleepSoundStatus.h in Headers */, + ED38CE334C2B80DAB7A4228E12E156AE /* SENSound.h in Headers */, + 751CB5EE5AF61B4E8029F3B4FF139F75 /* SENSpeechResult.h in Headers */, + 7E03BB19CA3D612921FECF311766645B /* SENSupportTopic.h in Headers */, + 4A27D1913709B47756B33056777D8F8C /* SENSwapStatus.h in Headers */, + B0C54EC923672F74723AFFE56E91F5B2 /* SENTimeline.h in Headers */, + 0F31103A44C044DEE811C49E86E41C5E /* SENTimelineMetric.h in Headers */, + DC1AD65307287BAD0C55747209B35CDA /* SENTimelineSegment.h in Headers */, + 3B16C0C526EEED38B9F50C3FA1F3030C /* SENTrends.h in Headers */, + 665B1FB05FE4E07E324087E6BFB8959B /* SENTrendsGraph.h in Headers */, + 74428B8970F19AB619C4014EB56CE123 /* Services.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6706,7 +6100,7 @@ ); name = SHSProtoBuf; productName = SHSProtoBuf; - productReference = 25DADC976206B05A4E61599B67744C10 /* ProtocolBuffers.framework */; + productReference = D6C7AEAB11F6E16C0DC593AE33A5EF04 /* ProtocolBuffers.framework */; productType = "com.apple.product-type.framework"; }; 180C74C9AD29DA8202520CCB38154CEB /* Bolts */ = { @@ -6723,7 +6117,7 @@ ); name = Bolts; productName = Bolts; - productReference = FDD1B4F7FD00D7E00CAA6FF5763FF437 /* Bolts.framework */; + productReference = 64060F6F355865A32BE1F71C69EE2C1B /* Bolts.framework */; productType = "com.apple.product-type.framework"; }; 43465475F37EC62ADE3092ED068C504C /* CocoaLumberjack */ = { @@ -6740,7 +6134,7 @@ ); name = CocoaLumberjack; productName = CocoaLumberjack; - productReference = E4F44AAF964656661411470D1324D043 /* CocoaLumberjack.framework */; + productReference = 4D12CF15450F50DE832E75202ABCCFAB /* CocoaLumberjack.framework */; productType = "com.apple.product-type.framework"; }; 44171DDB1F024801E01F769FA8AD75E1 /* NAPickerView */ = { @@ -6757,101 +6151,98 @@ ); name = NAPickerView; productName = NAPickerView; - productReference = 05413D01DAA48E6980978FAF24CC19AE /* NAPickerView.framework */; + productReference = 8DAA9EF8BE5258D2374F7E1E8223BE8A /* NAPickerView.framework */; productType = "com.apple.product-type.framework"; }; - 4D38FC804E42F85BB282FD3AE362D3C2 /* Pods-SenseApp-Sense */ = { + 57DB68A490C560AC049B0DE8B33F6B70 /* LGBluetooth */ = { isa = PBXNativeTarget; - buildConfigurationList = 8E270B6A44B6040584F323214ABCB22C /* Build configuration list for PBXNativeTarget "Pods-SenseApp-Sense" */; + buildConfigurationList = 1639D770821FD0CDE1A820415802C0CB /* Build configuration list for PBXNativeTarget "LGBluetooth" */; buildPhases = ( - 29DAB5C3495261043E8D0094CE05E193 /* Sources */, - E251382FF6C3A034951C524DD8CDE980 /* Frameworks */, - 17628CED58808DC21C16DBC44C99E03A /* Headers */, + CF4FCEF8EAB04C8C96853097FFB054D4 /* Sources */, + F3F8A17124BAE4FF3B560C3474098748 /* Frameworks */, + D9877AAF91AFF01EDD36DDBD2309F60D /* Headers */, ); buildRules = ( ); dependencies = ( - C09CBBD12DFE0F5186C0642A5B376965 /* PBXTargetDependency */, - 46DFC1DFBF3A5549ADB8473AC9554BF0 /* PBXTargetDependency */, - 20ACA4B77FE54D812DB03C5D1D430CA2 /* PBXTargetDependency */, - 15DE1E206B83AFF1C4E51C5AE577D8B5 /* PBXTargetDependency */, - B89D1FE4D06473AB9E2BC6566227B567 /* PBXTargetDependency */, - 343B1FFD00BCBAC4EC3CB07B2F7CAF22 /* PBXTargetDependency */, - AA972EEB163956D85ED73BBE0F9E43F9 /* PBXTargetDependency */, - EF69367FA102AA62CB81B9BA55D03BA3 /* PBXTargetDependency */, - 9C5832EF5DD9355EC8B78275E0549BEC /* PBXTargetDependency */, - DA07B1C2D27756D855DFF510DA1CD42F /* PBXTargetDependency */, - BC0F2EECFF09F0923569D0108E7DD286 /* PBXTargetDependency */, - 9B29153366BC4691981953E605821DDD /* PBXTargetDependency */, - 18FE4F9BF33B1C9EAE31AFE760808494 /* PBXTargetDependency */, - FFAFFA65C9ABA224362ECEF17C640929 /* PBXTargetDependency */, - 7F2E7299FFCE11C81B4BB9E6388873A8 /* PBXTargetDependency */, - CD54F7DEC66E6F98D3AB56417BC86F93 /* PBXTargetDependency */, - FC2FF428B147458835EE8A3BD99177DA /* PBXTargetDependency */, - 95AC00B98FE92F4E093A4DE155D303B2 /* PBXTargetDependency */, - C993A3ABCB2B88C037B6DFC3C0CAD50F /* PBXTargetDependency */, - 03A16BCA0871F288DDB025C92C631038 /* PBXTargetDependency */, - BB1FB2FECE5FF0ABC7AB43CD19AD81F5 /* PBXTargetDependency */, - EF28AD612A4690EE8C14B85A1B958879 /* PBXTargetDependency */, - 2BA9B93259D94ED295CF0757BD155824 /* PBXTargetDependency */, - 742A1A6BF030386623A3DC294BA33558 /* PBXTargetDependency */, - BBECA4F44741C65291FB7DFF30286560 /* PBXTargetDependency */, ); - name = "Pods-SenseApp-Sense"; - productName = "Pods-SenseApp-Sense"; - productReference = BBFBAF35E05A49890D4AEF7040123E02 /* Pods_SenseApp_Sense.framework */; + name = LGBluetooth; + productName = LGBluetooth; + productReference = D7CC7988BE465AF55E6D5149E15695F4 /* LGBluetooth.framework */; productType = "com.apple.product-type.framework"; }; - 55BC9D00E350D5F95374448845486B0C /* RealmSwift */ = { + 5AF841D1919CF5A0DE7EBBE1D9EE5E3E /* UICountingLabel */ = { isa = PBXNativeTarget; - buildConfigurationList = 0B0A6473745194AA12E6DF1303E96926 /* Build configuration list for PBXNativeTarget "RealmSwift" */; + buildConfigurationList = FF9295B56AA7A7B671A1438D228B8756 /* Build configuration list for PBXNativeTarget "UICountingLabel" */; buildPhases = ( - B8F78B5707DC8A3F8D27B5EDCF79F5B4 /* Sources */, - 3E4520D5755FE9E4D61A606A2B349947 /* Frameworks */, - 32D3672A83C10CA30E55C14797909160 /* Headers */, + 7EEEEDD4B6756E1EF42BC428D219EC2F /* Sources */, + F1E930D67E9AF130C6936732FEE9F71E /* Frameworks */, + B19C1050DC7EA24CDCE803B121D2E2C9 /* Headers */, ); buildRules = ( ); dependencies = ( - 0FAF0D1E69D5A360AF74A09659E4C6C0 /* PBXTargetDependency */, ); - name = RealmSwift; - productName = RealmSwift; - productReference = 2D8AAACFBC67DB2EAD6544A9609EC5D5 /* RealmSwift.framework */; + name = UICountingLabel; + productName = UICountingLabel; + productReference = EABBF47B182BEA69B9C1DE1CC7B899F9 /* UICountingLabel.framework */; productType = "com.apple.product-type.framework"; }; - 57DB68A490C560AC049B0DE8B33F6B70 /* LGBluetooth */ = { + 5EA3D107E3080517B451F7519F5E405F /* Zip */ = { isa = PBXNativeTarget; - buildConfigurationList = 1639D770821FD0CDE1A820415802C0CB /* Build configuration list for PBXNativeTarget "LGBluetooth" */; + buildConfigurationList = 9CD27703F5D05B5FC5DA1CDDFC3BA1AB /* Build configuration list for PBXNativeTarget "Zip" */; buildPhases = ( - CF4FCEF8EAB04C8C96853097FFB054D4 /* Sources */, - F3F8A17124BAE4FF3B560C3474098748 /* Frameworks */, - D9877AAF91AFF01EDD36DDBD2309F60D /* Headers */, + ED8B36364C414352F880A08B8466BF93 /* Sources */, + 29867C71A7FA31F3DC8477CF86076D70 /* Frameworks */, + 5A58F7593278776D9E13BF4C2D5F5046 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = LGBluetooth; - productName = LGBluetooth; - productReference = ED2AA8A577A6D3025F76AFB3BA46E64A /* LGBluetooth.framework */; + name = Zip; + productName = Zip; + productReference = 89F1C43F665FC573D8ED92D99AF5F5A6 /* Zip.framework */; productType = "com.apple.product-type.framework"; }; - 5EA3D107E3080517B451F7519F5E405F /* Zip */ = { + 6E2C1783F38485B8CC8B213540EA7A2F /* Pods-SenseApp-Sense */ = { isa = PBXNativeTarget; - buildConfigurationList = 9CD27703F5D05B5FC5DA1CDDFC3BA1AB /* Build configuration list for PBXNativeTarget "Zip" */; + buildConfigurationList = B19270CBF3B966BE32FD6408C4A68F3E /* Build configuration list for PBXNativeTarget "Pods-SenseApp-Sense" */; buildPhases = ( - ED8B36364C414352F880A08B8466BF93 /* Sources */, - 29867C71A7FA31F3DC8477CF86076D70 /* Frameworks */, - 5A58F7593278776D9E13BF4C2D5F5046 /* Headers */, + 5833EED9953336439CC23F46BBF9D6E2 /* Sources */, + D3AD04CF6DC6AC4F05FF3D2C3F8A8AAA /* Frameworks */, + FBC3CD198B1290937A563410DE6D484D /* Headers */, ); buildRules = ( ); dependencies = ( + 864FE3955849513620C9E33325D9C962 /* PBXTargetDependency */, + 2B36B104C5440E8675A969173185D01A /* PBXTargetDependency */, + EE6FAD71BC2678AECC6D388BDFFBECE8 /* PBXTargetDependency */, + 98BCF1E69D588C5865A8BB58461F7689 /* PBXTargetDependency */, + 7B6AA7220BFB632B2553C0C8A938D07F /* PBXTargetDependency */, + CCD60F053C41210F231F70FF82FD2078 /* PBXTargetDependency */, + B3DE08FCA2853EB96A9050417F701406 /* PBXTargetDependency */, + ABA684D5BB95EA9886E8E05CE594E321 /* PBXTargetDependency */, + 4D1FE2B17CEFA828BC07000397CE6BB0 /* PBXTargetDependency */, + 34077E339B801EE23A60DDC08E5C07E1 /* PBXTargetDependency */, + 72A3DDC696F3CEB6D4C722793ABC4208 /* PBXTargetDependency */, + 898E1A415A562628F29304900AE2A069 /* PBXTargetDependency */, + 225FC4BD525B6FA47F90876B4D1DDCAB /* PBXTargetDependency */, + 5EFDC4F9A9D8FD8A1BA1153F821F8C94 /* PBXTargetDependency */, + E2D905620A0E95E79336C28D38C2CAE1 /* PBXTargetDependency */, + 878DF0BC84159D8FDB0B75880DE0DA6C /* PBXTargetDependency */, + 8AC0B06C05BC30849DAA53A8313EA4E5 /* PBXTargetDependency */, + C112650BE859160499D788119680C376 /* PBXTargetDependency */, + F95AA3E22191B968D46707C8673D8FCC /* PBXTargetDependency */, + E98D439CE3EB75F65DFBA57ED6CA7C2A /* PBXTargetDependency */, + BB36B138C7AF394DC1825E9E7459580E /* PBXTargetDependency */, + 12C7E7492CD413EB6247625DCC532ECE /* PBXTargetDependency */, + 019299FAAD854994641CA448D02C8C5E /* PBXTargetDependency */, ); - name = Zip; - productName = Zip; - productReference = 0A522DA25116D8184D09800C645CE093 /* Zip.framework */; + name = "Pods-SenseApp-Sense"; + productName = "Pods-SenseApp-Sense"; + productReference = 8064D813E014441F166CC4DB093598EC /* Pods_SenseApp_Sense.framework */; productType = "com.apple.product-type.framework"; }; 730EF7B05CE1CB004A9A126445D48E56 /* CGFloatType */ = { @@ -6868,7 +6259,7 @@ ); name = CGFloatType; productName = CGFloatType; - productReference = 62547BE0EFFB6746BF8AC77A5898CCAA /* CGFloatType.framework */; + productReference = 67E79741E2A35C72B8D8DE88FD37F900 /* CGFloatType.framework */; productType = "com.apple.product-type.framework"; }; 77BE8FB6AF1D82B7E077EEF358347BB5 /* Pods-SenseApp-RoomConditionsExtension */ = { @@ -6897,7 +6288,25 @@ ); name = "Pods-SenseApp-RoomConditionsExtension"; productName = "Pods-SenseApp-RoomConditionsExtension"; - productReference = C4926766361AECCFA6BF257B7294EB1C /* Pods_SenseApp_RoomConditionsExtension.framework */; + productReference = EF22B854EB06392B4162B52A420D37D5 /* Pods_SenseApp_RoomConditionsExtension.framework */; + productType = "com.apple.product-type.framework"; + }; + 7C6BF3ECBCC956A018BE1C7BCFE8E9E5 /* SVWebViewController */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE08B4E22E1C235CA6591955AA759EB3 /* Build configuration list for PBXNativeTarget "SVWebViewController" */; + buildPhases = ( + 7982E14EDE572375EC468B7BAAF88B7D /* Sources */, + 6EC42F2FDFC83CAE281656CBE62A7238 /* Frameworks */, + 530FEDA65C9F2094C07726E7DA48D7ED /* Headers */, + 7CF71E060DFC2B56CFE8FAC9C73E35D0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SVWebViewController; + productName = SVWebViewController; + productReference = 1BF6B6C623F530B0ADE1AE864C18084B /* SVWebViewController.framework */; productType = "com.apple.product-type.framework"; }; 80DAA5388079E5D54703FD0568B03AA1 /* SORelativeDateTransformer */ = { @@ -6915,7 +6324,7 @@ ); name = SORelativeDateTransformer; productName = SORelativeDateTransformer; - productReference = 7AE29341239991F2189F4F9CBA3510BC /* SORelativeDateTransformer.framework */; + productReference = 1C2D2C27946143A9678BD1BD8B11F1C5 /* SORelativeDateTransformer.framework */; productType = "com.apple.product-type.framework"; }; 81DA8EB8F3108C6E4CE73E356C3DFF8E /* FXKeychain */ = { @@ -6932,7 +6341,7 @@ ); name = FXKeychain; productName = FXKeychain; - productReference = 38E0FA76EACC964A3F7330D4210DF747 /* FXKeychain.framework */; + productReference = EED780A52AC270E6570D29E0670F672C /* FXKeychain.framework */; productType = "com.apple.product-type.framework"; }; 8E62987DA364AB3DEC75EE0AADC0C3C2 /* NSJSONSerialization-NSNullRemoval */ = { @@ -6949,25 +6358,24 @@ ); name = "NSJSONSerialization-NSNullRemoval"; productName = "NSJSONSerialization-NSNullRemoval"; - productReference = E61014AC0F89AB3912B578F179235264 /* NSJSONSerialization_NSNullRemoval.framework */; + productReference = 59C9E91FC0BD682884FCAA489ACD39B2 /* NSJSONSerialization_NSNullRemoval.framework */; productType = "com.apple.product-type.framework"; }; - 9CAA963C631202F8930C0D0E26A8CDCC /* SVWebViewController */ = { + 8FCEDA0478734E091CCE0A493479AFC7 /* UIImageEffects */ = { isa = PBXNativeTarget; - buildConfigurationList = CF4FEBC6D54956705601D91BB77AEF9D /* Build configuration list for PBXNativeTarget "SVWebViewController" */; + buildConfigurationList = C1E31CB4FD79AA09680BF126EF8C652D /* Build configuration list for PBXNativeTarget "UIImageEffects" */; buildPhases = ( - EBC6477F04D8A8F6F00C2C18547AAAE8 /* Sources */, - 3F23746A1435EFA5CD7FB21097E4F381 /* Frameworks */, - E9F14E7F63121F92B0DE96A2FF0491DE /* Headers */, - D3CA86CB5225B007DD539B382FA4E039 /* Resources */, + 40B6E993B3773EE3632B2A536BEAEF4D /* Sources */, + 27749FEA2343D253063C48B8FCF62A75 /* Frameworks */, + CFA06873A3FF5158CE3A88D46A2BFA55 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = SVWebViewController; - productName = SVWebViewController; - productReference = 8B8D15485FBA0D33480F9745E7B2EB49 /* SVWebViewController.framework */; + name = UIImageEffects; + productName = UIImageEffects; + productReference = C13441E19CCE51D61DF236B1B579D677 /* UIImageEffects.framework */; productType = "com.apple.product-type.framework"; }; 9F216D3986D254F5B2BC8865A910D7DD /* Kiwi */ = { @@ -6984,7 +6392,7 @@ ); name = Kiwi; productName = Kiwi; - productReference = 9F73A65E98CE2A8D7DAD127AE3719994 /* Kiwi.framework */; + productReference = 53A0327E5EB9274A01276F114F304C43 /* Kiwi.framework */; productType = "com.apple.product-type.framework"; }; AC395942252777533D3F18E430F23762 /* AttributedMarkdown */ = { @@ -7001,62 +6409,24 @@ ); name = AttributedMarkdown; productName = AttributedMarkdown; - productReference = CD0F71730B9D6AB69DE19F033F66855A /* AttributedMarkdown.framework */; - productType = "com.apple.product-type.framework"; - }; - ACC2EB3A7DE1ACA36F11D6CA8488A964 /* UICountingLabel */ = { - isa = PBXNativeTarget; - buildConfigurationList = 200F064A8005313C06BD96285C48D230 /* Build configuration list for PBXNativeTarget "UICountingLabel" */; - buildPhases = ( - 62EB73176259A300734BE7B8E3EDBC5D /* Sources */, - 28EC6138E094825A77904F8C304D51CD /* Frameworks */, - 8D77138C949D25E47F6C8226D816B775 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = UICountingLabel; - productName = UICountingLabel; - productReference = 9294F07846629BC4D9512925A0FA82AD /* UICountingLabel.framework */; - productType = "com.apple.product-type.framework"; - }; - AEF700BE3EA90D15DD0835283F4FE074 /* Realm */ = { - isa = PBXNativeTarget; - buildConfigurationList = 514811B71AA0BAD49A5928DA1B42CD56 /* Build configuration list for PBXNativeTarget "Realm" */; - buildPhases = ( - CC4A84346537F809CA83289C14FB8F6B /* Sources */, - 554B598DC13B459CFBBF65D617F4040B /* Frameworks */, - FA2647AB8FCEBDDA982F9B6A93AFDC6C /* Headers */, - 0C7069EB81D9658642ED68A5C79B2E55 /* Copy . Private Headers */, - 38DBA75776A60AF729F9C3F05E9F2359 /* Copy . Public Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Realm; - productName = Realm; - productReference = 47EA9ACEA078CB001C8A170866F672BE /* Realm.framework */; + productReference = A76CF42A1CD0175C41D21F236AF04156 /* AttributedMarkdown.framework */; productType = "com.apple.product-type.framework"; }; - B8A5CE68297837372BF12AC806EAAB35 /* Charts */ = { + ACBE2D2764258B455DA501C193F6C25C /* Charts */ = { isa = PBXNativeTarget; - buildConfigurationList = 28EF4000222F784363C980BEA07ABD52 /* Build configuration list for PBXNativeTarget "Charts" */; + buildConfigurationList = CB69DF3B2F9BF73FB8561DB3DC24B2D3 /* Build configuration list for PBXNativeTarget "Charts" */; buildPhases = ( - FDC59293FBB3AEDDB3AC408EE9657D13 /* Sources */, - C0551F59D7F0BAE9DB8DE0CF5E84025E /* Frameworks */, - 161E4CFB85610860F8850E7CBE25E4A9 /* Headers */, + 49347F1AAA1700C7D37380788DB288A8 /* Sources */, + FEF57B83C5A467F76B6B77702CA0A7BC /* Frameworks */, + 8FF9F0953C9D5AEE241221B0101F2E46 /* Headers */, ); buildRules = ( ); dependencies = ( - CEAF3F69004964CEC21AE09337A5A03F /* PBXTargetDependency */, - EB9F197058229B90A247490BAF3B8CF1 /* PBXTargetDependency */, ); name = Charts; productName = Charts; - productReference = AB90A3337BC09697B9653E56DB3D784D /* Charts.framework */; + productReference = 3ED168F9C1BCBDF1B0B4691AC0C053FB /* Charts.framework */; productType = "com.apple.product-type.framework"; }; D0F8C4B87B4F439921BC3DD8E32A0A58 /* Nocilla */ = { @@ -7073,7 +6443,7 @@ ); name = Nocilla; productName = Nocilla; - productReference = 90254E16969090DD11255755A1757503 /* Nocilla.framework */; + productReference = 178FAA65CF0DE85DABDC927C91AC7C57 /* Nocilla.framework */; productType = "com.apple.product-type.framework"; }; D4366019FDFD4968B0EE7D6057DFCEF3 /* Analytics */ = { @@ -7090,7 +6460,7 @@ ); name = Analytics; productName = Analytics; - productReference = F061183A891A4FF9A47BD9C0848C2C91 /* Analytics.framework */; + productReference = 03CA1DE94F3242A107C6A8414B5F77FB /* Analytics.framework */; productType = "com.apple.product-type.framework"; }; D775D9186B6AFF1580872BD70FDE395E /* iOSDFULibrary */ = { @@ -7108,7 +6478,7 @@ ); name = iOSDFULibrary; productName = iOSDFULibrary; - productReference = EB0D1682759C19830F3613C2837A11DD /* iOSDFULibrary.framework */; + productReference = 70C70C3A54EC362526B16C3FFA52B735 /* iOSDFULibrary.framework */; productType = "com.apple.product-type.framework"; }; DD8D42EC61FED208C283A1192FB53E89 /* Pods-SenseApp-Tests */ = { @@ -7139,7 +6509,7 @@ ); name = "Pods-SenseApp-Tests"; productName = "Pods-SenseApp-Tests"; - productReference = 150CED8952F15D90BD416EC8034C5D4F /* Pods_SenseApp_Tests.framework */; + productReference = E44A4FA4BBE294469FB3141E7780FF56 /* Pods_SenseApp_Tests.framework */; productType = "com.apple.product-type.framework"; }; DDBA9850F8AEC97961C9DE92AE2DC9D2 /* FBSDKCoreKit */ = { @@ -7157,24 +6527,7 @@ ); name = FBSDKCoreKit; productName = FBSDKCoreKit; - productReference = CB4312433C11C86855F279DDE8F86082 /* FBSDKCoreKit.framework */; - productType = "com.apple.product-type.framework"; - }; - E3A76DDBE03839E9C02B77A70E4A98A6 /* UIImageEffects */ = { - isa = PBXNativeTarget; - buildConfigurationList = 680C2EAC9E454B3E5FE651D9DCFF9EF8 /* Build configuration list for PBXNativeTarget "UIImageEffects" */; - buildPhases = ( - 51FF245E98EC46E5C6A03E500364A0C8 /* Sources */, - 6489E5CF13CA761B708A28A608E90EE3 /* Frameworks */, - EDFCE3ED2E9C78C47C2C3FDDE4F2FC96 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = UIImageEffects; - productName = UIImageEffects; - productReference = AE06D149017B2BF174DAA5B09DF24D57 /* UIImageEffects.framework */; + productReference = B744C8493B2DB3AA5BE32B17AE706C38 /* FBSDKCoreKit.framework */; productType = "com.apple.product-type.framework"; }; E441A490F40188C03703E83906EF2B63 /* FBSDKLoginKit */ = { @@ -7193,7 +6546,7 @@ ); name = FBSDKLoginKit; productName = FBSDKLoginKit; - productReference = 95BEF081DD85201D6C0773869F33DFB2 /* FBSDKLoginKit.framework */; + productReference = 858B40CA84F0B040F24FF9F6CE4A39FC /* FBSDKLoginKit.framework */; productType = "com.apple.product-type.framework"; }; E8EE80E8AA1F3FEE99B108EF5EE36D11 /* AFNetworking */ = { @@ -7210,7 +6563,7 @@ ); name = AFNetworking; productName = AFNetworking; - productReference = D29AE152234D7E9ED6BB9E268E360342 /* AFNetworking.framework */; + productReference = B37D5DC92DE0A2EEE57C278D18331C40 /* AFNetworking.framework */; productType = "com.apple.product-type.framework"; }; EE2F101D8B2CC64C1B1DF5F4F855C811 /* Bugsnag */ = { @@ -7227,16 +6580,16 @@ ); name = Bugsnag; productName = Bugsnag; - productReference = 602D5B4A2D3EC283C37AA6C0DB230566 /* Bugsnag.framework */; + productReference = 81F1B90EE3238831B1358F92F950C2C3 /* Bugsnag.framework */; productType = "com.apple.product-type.framework"; }; F3A20E6B58DE3EDAD15785CDFC1F6E3D /* SenseKit */ = { isa = PBXNativeTarget; buildConfigurationList = 879083B5B2C7572B1B5279BBD14BFA5D /* Build configuration list for PBXNativeTarget "SenseKit" */; buildPhases = ( - FF0C2B6C73C4909C58139E5A732F9B69 /* Sources */, + 8929574DC3E592C2E81E144CD1991663 /* Sources */, E2CF06CE8AD5AA3AF30120D0EC6F4537 /* Frameworks */, - D371BB35E776FAB84DC604F1C776377D /* Headers */, + FE19767EAF8EA2A280AB236A72D12DFA /* Headers */, ); buildRules = ( ); @@ -7253,7 +6606,7 @@ ); name = SenseKit; productName = SenseKit; - productReference = 1A8176005DC3CAAC81E287FF2A387496 /* SenseKit.framework */; + productReference = 6B316E2FCCC7F3967DB531EBB1BC9A2B /* SenseKit.framework */; productType = "com.apple.product-type.framework"; }; F9B3EDAD702849F696C3C6A5E4DDFD2C /* MSDynamicsDrawerViewController */ = { @@ -7270,7 +6623,7 @@ ); name = MSDynamicsDrawerViewController; productName = MSDynamicsDrawerViewController; - productReference = 6C4B11940DC6C84BB45B21E54993B612 /* MSDynamicsDrawerViewController.framework */; + productReference = 22A2A5BF931391F6B0816EFA293ED748 /* MSDynamicsDrawerViewController.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -7290,7 +6643,7 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 3666F4D0B393155ADBF6845F5DEAEF0E /* Products */; + productRefGroup = BBD4AB17C63DE689F156836D02BB6D0C /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -7300,7 +6653,7 @@ 180C74C9AD29DA8202520CCB38154CEB /* Bolts */, EE2F101D8B2CC64C1B1DF5F4F855C811 /* Bugsnag */, 730EF7B05CE1CB004A9A126445D48E56 /* CGFloatType */, - B8A5CE68297837372BF12AC806EAAB35 /* Charts */, + ACBE2D2764258B455DA501C193F6C25C /* Charts */, 43465475F37EC62ADE3092ED068C504C /* CocoaLumberjack */, DDBA9850F8AEC97961C9DE92AE2DC9D2 /* FBSDKCoreKit */, E441A490F40188C03703E83906EF2B63 /* FBSDKLoginKit */, @@ -7313,47 +6666,45 @@ D0F8C4B87B4F439921BC3DD8E32A0A58 /* Nocilla */, 8E62987DA364AB3DEC75EE0AADC0C3C2 /* NSJSONSerialization-NSNullRemoval */, 77BE8FB6AF1D82B7E077EEF358347BB5 /* Pods-SenseApp-RoomConditionsExtension */, - 4D38FC804E42F85BB282FD3AE362D3C2 /* Pods-SenseApp-Sense */, + 6E2C1783F38485B8CC8B213540EA7A2F /* Pods-SenseApp-Sense */, DD8D42EC61FED208C283A1192FB53E89 /* Pods-SenseApp-Tests */, - AEF700BE3EA90D15DD0835283F4FE074 /* Realm */, - 55BC9D00E350D5F95374448845486B0C /* RealmSwift */, F3A20E6B58DE3EDAD15785CDFC1F6E3D /* SenseKit */, 0E2DD52E665500ADD41D73D15C008781 /* SHSProtoBuf */, 80DAA5388079E5D54703FD0568B03AA1 /* SORelativeDateTransformer */, - 9CAA963C631202F8930C0D0E26A8CDCC /* SVWebViewController */, - ACC2EB3A7DE1ACA36F11D6CA8488A964 /* UICountingLabel */, - E3A76DDBE03839E9C02B77A70E4A98A6 /* UIImageEffects */, + 7C6BF3ECBCC956A018BE1C7BCFE8E9E5 /* SVWebViewController */, + 5AF841D1919CF5A0DE7EBBE1D9EE5E3E /* UICountingLabel */, + 8FCEDA0478734E091CCE0A493479AFC7 /* UIImageEffects */, 5EA3D107E3080517B451F7519F5E405F /* Zip */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - D3CA86CB5225B007DD539B382FA4E039 /* Resources */ = { + 7CF71E060DFC2B56CFE8FAC9C73E35D0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - E1D05443575FFFD869726616E06F27C9 /* da.lproj in Resources */, - D9F4E9404FB1BC933E1A338014BC56F7 /* de.lproj in Resources */, - 65E7300BAB7DBDC3DD5B07FF90FC5A04 /* en.lproj in Resources */, - 605B6E3ADC3247AA0E4BC66B8BB438A5 /* es-ES.lproj in Resources */, - FC051E7892E5FD3006CE7ED4279BA0CF /* es.lproj in Resources */, - 2D209EDEB793880067A2B13D14B8853F /* fr.lproj in Resources */, - 0ECC21BE652C01E221691EEE0E633672 /* ja.lproj in Resources */, - EBCE449F12F7CFCDF892234FC2947AC4 /* pt.lproj in Resources */, - 65AF837779A0287A03085463256A475F /* SVWebViewController.bundle in Resources */, - C88C57A6273DA81241E3392DE4603ADF /* SVWebViewControllerActivityChrome-iPad.png in Resources */, - 6535B5490A63DCD4DC6307C70EFAD79F /* SVWebViewControllerActivityChrome-iPad@2x.png in Resources */, - 353E5B4016DB202C470DE97DC051B035 /* SVWebViewControllerActivityChrome@2x.png in Resources */, - 64482B74BE3469DC7BA31F76CE2C9C2C /* SVWebViewControllerActivitySafari-iPad.png in Resources */, - C526335CEC5F6831763B28148CCEA4F2 /* SVWebViewControllerActivitySafari-iPad@2x.png in Resources */, - A3836D0233881A5CF5179D99D2709FDB /* SVWebViewControllerActivitySafari@2x.png in Resources */, - 7D81A4E8FADC3BE055DFB093FFE127A8 /* SVWebViewControllerBack.png in Resources */, - 007FE68427E20960F94A7CC1943F69DB /* SVWebViewControllerBack@2x.png in Resources */, - B070B7B5F26E61F285B2474278A52C09 /* SVWebViewControllerNext.png in Resources */, - 695644C456AD9290BF0B90281DE1F85F /* SVWebViewControllerNext@2x.png in Resources */, - 996E03298BA244A2A21188352C123DB4 /* zh-Hans.lproj in Resources */, - 539774C48A655E5C386E89CDFECFF694 /* zh-Hant.lproj in Resources */, + 5E49DEBA97A5E0A36C5A9DF751FCD0F6 /* da.lproj in Resources */, + D0BE6C2EA1D3D682C829607E5ECD4316 /* de.lproj in Resources */, + 49DEED94BDABBBF264FE8B91E60C7624 /* en.lproj in Resources */, + 9DB0670E503A386044E40D6968B11746 /* es-ES.lproj in Resources */, + CA399B082482578E1CB624BEB297CD04 /* es.lproj in Resources */, + A2ECBA0A69ACA64412752043F0A01C15 /* fr.lproj in Resources */, + 1CFE6EE22510C232D89ED0F548DD58A8 /* ja.lproj in Resources */, + 85B92D0747D9CC79377EA1BF6162E75E /* pt.lproj in Resources */, + 8F55E2069B08C9ABF478F0ECAB42A2C9 /* SVWebViewController.bundle in Resources */, + CB85CAF0EB5369E5348119B2D26B0912 /* SVWebViewControllerActivityChrome-iPad.png in Resources */, + 0C57D5D677C17C9D8AB562228C2E2B06 /* SVWebViewControllerActivityChrome-iPad@2x.png in Resources */, + 948F0C0C74EF8C4252550F1FE56E5DA4 /* SVWebViewControllerActivityChrome@2x.png in Resources */, + 56B11F0C34BC591FEDEDC77675EAEF6A /* SVWebViewControllerActivitySafari-iPad.png in Resources */, + C4EF9DD92EEF3E3B46D73A5FBA10FFC6 /* SVWebViewControllerActivitySafari-iPad@2x.png in Resources */, + 819C97952F789B49D893D1FA5ED1A948 /* SVWebViewControllerActivitySafari@2x.png in Resources */, + 7398612A8F3D1A60875E4093FF85C64F /* SVWebViewControllerBack.png in Resources */, + 7E11FABB0A882D650C121D394BD56CD0 /* SVWebViewControllerBack@2x.png in Resources */, + F20574500AF3A593EF13831B2B650AEA /* SVWebViewControllerNext.png in Resources */, + EC09522A281E73622A80EEAA1ABB2EE4 /* SVWebViewControllerNext@2x.png in Resources */, + 2E6374976FA7761B129245BD04E1909D /* zh-Hans.lproj in Resources */, + 6E7E888A92D8DA158C53B2283B066C1D /* zh-Hant.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7504,14 +6855,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 29DAB5C3495261043E8D0094CE05E193 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ADD1D91B9DA2D2CC6285440E34DDACAF /* Pods-SenseApp-Sense-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 2D8BE7B629FF87DE9A9695814CB84E44 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7599,6 +6942,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 40B6E993B3773EE3632B2A536BEAEF4D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0F671E4757E37DD07B43ED54D67E0DD3 /* UIImage+ImageEffects.m in Sources */, + 29F8F552DC09135FC8711986E90C49EF /* UIImageEffects-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 45CC6ADCE1599964B6A58E4207180D31 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7616,12 +6968,132 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 51FF245E98EC46E5C6A03E500364A0C8 /* Sources */ = { + 49347F1AAA1700C7D37380788DB288A8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 667EB72D271891FD27FC61D9C18DF053 /* AnimatedMoveViewJob.swift in Sources */, + D48F5DC589D8C5E58FE002620A9910E2 /* AnimatedViewPortJob.swift in Sources */, + D12B1F723E9E50C2DCEF01C7AD5E2D3E /* AnimatedZoomViewJob.swift in Sources */, + 999448EC4BCF37A4FB29EF6B28659A68 /* BarChartData.swift in Sources */, + D37C1D7E1CC66B91C545E60565848CCB /* BarChartDataEntry.swift in Sources */, + 2F63E6231E4C5F2C71FBA02C78F35C82 /* BarChartDataProvider.swift in Sources */, + 2E28EA67D4B7CC9C089F7C38DE31887E /* BarChartDataSet.swift in Sources */, + DF622B2F3639836C35B994045015754E /* BarChartHighlighter.swift in Sources */, + 943C51F4160BDF82AF93D64DCC9E2D2F /* BarChartRenderer.swift in Sources */, + 441AA476F1F1A9701DCE89197B19306B /* BarChartView.swift in Sources */, + CBAFF3A7256FA503D10B7D7F5BF5E7D7 /* BarLineChartViewBase.swift in Sources */, + 69A9E10A59F4EBF1E845428A3E7875F8 /* BarLineScatterCandleBubbleChartData.swift in Sources */, + A82E35C4CA1B082AA33D7B46A10C775E /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, + 54CF9EFBCFD3BF837EE566F251EF286E /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, + E984BF50998CE72B59B23F2E53727ED6 /* BubbleChartData.swift in Sources */, + 7138639CB77C068E00B44EE0D65A030B /* BubbleChartDataEntry.swift in Sources */, + 1938C331F13F8CAD99FF59DB7F804B65 /* BubbleChartDataProvider.swift in Sources */, + 4981F1390C4ABE4F0EFC86060D4D01AE /* BubbleChartDataSet.swift in Sources */, + 4A7768B75EAD0B21B86A4192599FB0E1 /* BubbleChartRenderer.swift in Sources */, + BF9FBAEBFCDF704A5AACA68A97A8AC24 /* BubbleChartView.swift in Sources */, + 303725FEC48395DC2875D6344714BD72 /* CandleChartData.swift in Sources */, + 5069E935C9911946ACD38B3DC98E4D04 /* CandleChartDataEntry.swift in Sources */, + 52BD08ABBBB81C005035151EDBEECB0A /* CandleChartDataProvider.swift in Sources */, + A4745AB7071D4521826BE618C6569B28 /* CandleChartDataSet.swift in Sources */, + 4B310199A9A67FF1AB1A530B287AB881 /* CandleStickChartRenderer.swift in Sources */, + ED1F101F3F544110F4F113EB58A5BAA0 /* CandleStickChartView.swift in Sources */, + 0B039A7D5F0DFE4678E9025084BD2DB8 /* ChartAnimationEasing.swift in Sources */, + A8A6F07CEA7BA98CC9ECECC2953AA33D /* ChartAnimator.swift in Sources */, + BD35C704EC5642A1FD917893B912E77E /* ChartAxisBase.swift in Sources */, + D09994A9D4F5AE06CF20C68FDE787706 /* ChartAxisRendererBase.swift in Sources */, + 92CAF2AF4CC92801BE697C4401BDB785 /* ChartBaseDataSet.swift in Sources */, + 45680D8ACA4A1AC896217FA368E5E805 /* ChartColorTemplates.swift in Sources */, + E45E644700390AF017FB63D9A4193F1C /* ChartComponentBase.swift in Sources */, + BBA18D8929353AEB0E19F72FC27345C6 /* ChartData.swift in Sources */, + 1F1065DF9F98C8CF5EC430560BB3FBE6 /* ChartDataApproximatorFilter.swift in Sources */, + E90E0C1628AD91EFE6C0E2AB29335D51 /* ChartDataBaseFilter.swift in Sources */, + 294515D20B14DEE1439B443F731F51A4 /* ChartDataEntry.swift in Sources */, + 1EF5B71F6C15CE19AFDA984A71D5065D /* ChartDataProvider.swift in Sources */, + 102BCA1410C6A2EC64BFDF9ADB45DFCD /* ChartDataRendererBase.swift in Sources */, + 903C787EC1F4F8731F4D58D9E5C93C9D /* ChartDataSet.swift in Sources */, + 9047DD14AED91EAAFDBADB8B23EDDEFE /* ChartDefaultFillFormatter.swift in Sources */, + 332D0BD8E65D627910D76D72F51D502F /* ChartDefaultXAxisValueFormatter.swift in Sources */, + F354575E5BDE93238A2551B2F086FAA0 /* ChartFill.swift in Sources */, + 48D8209F694519E20F5B47571544A182 /* ChartFillFormatter.swift in Sources */, + 0517AA0CAE149C6B327E60AEF20C990F /* ChartHighlight.swift in Sources */, + 192F3E2F6ED8B79CF0316849F6E6F49F /* ChartHighlighter.swift in Sources */, + 5295CD5F9B52CBBC428BCE2056F1590B /* ChartLegend.swift in Sources */, + 0F29B60D5FC948B2196AD36E8A7FBE42 /* ChartLegendRenderer.swift in Sources */, + B966651FFB4EFC558B59956AFF660C3A /* ChartLimitLine.swift in Sources */, + 4E1D7F8F2EC9499EA34DB4BF9953FFB1 /* ChartMarker.swift in Sources */, + 4817AE570592DD38E4F9417D9FED0508 /* ChartPlatform.swift in Sources */, + CF60BC8ED7039DCEB12964B5B98AD3DD /* ChartRange.swift in Sources */, + 8B8548F45BC16C70AB1FACD26347FFDF /* ChartRendererBase.swift in Sources */, + 8302C13949ED7A29FF79F68A06269DF1 /* Charts-dummy.m in Sources */, + 967FB7CAF237468D97D3D97D80B9BF9F /* ChartSelectionDetail.swift in Sources */, + 502087E86E1B33B57FFCA56F2D303A8B /* ChartTransformer.swift in Sources */, + 01B7B95AB07577DD0382D6281BCA7E80 /* ChartTransformerHorizontalBarChart.swift in Sources */, + 237B70DBEC5AB6B637F1D25AD8E0CD37 /* ChartUtils.swift in Sources */, + 7E984791E7D3C9646BA8D4F466CE8CC4 /* ChartViewBase.swift in Sources */, + 0FB9BD598B7AF00C0E83FA0BF04E7E32 /* ChartViewPortHandler.swift in Sources */, + 5EBDE877677ECD8F8F44A58F5F8C0468 /* ChartViewPortJob.swift in Sources */, + B50408998BF85276DDADBA851E8A986B /* ChartXAxis.swift in Sources */, + 6CD82264E62FAFA590CC56013704E406 /* ChartXAxisRenderer.swift in Sources */, + C9D1E60D86B0D4C00329496DFCA12F10 /* ChartXAxisRendererBarChart.swift in Sources */, + 4A0684F1F79D445C22FBAA625B27A6EA /* ChartXAxisRendererHorizontalBarChart.swift in Sources */, + 14A74B0831212CB3291B182E260583DE /* ChartXAxisRendererRadarChart.swift in Sources */, + FD27E6797D2A872D927E32E41680C06D /* ChartXAxisValueFormatter.swift in Sources */, + C13CFD64685F3EB48EE4D0E20B92C5E8 /* ChartYAxis.swift in Sources */, + B9504691C318A82B5576FD0FFBE06470 /* ChartYAxisRenderer.swift in Sources */, + BEB5987B7730316A9DA09992922C73B4 /* ChartYAxisRendererHorizontalBarChart.swift in Sources */, + 01A424FDFCD8E0B6797353BC581A1B2E /* ChartYAxisRendererRadarChart.swift in Sources */, + 2DA06FD8A947058ABA91C300A846EAF7 /* CombinedChartData.swift in Sources */, + 4CB33682E256BAB08D7E08BF8C3E8F9D /* CombinedChartRenderer.swift in Sources */, + 0C523C537E184C691CC8030659CD1E8A /* CombinedChartView.swift in Sources */, + 09871862A54A77A6A958FFFAE0ED299B /* CombinedHighlighter.swift in Sources */, + 194065DDA9F162DC9384087BC4328EC4 /* HorizontalBarChartHighlighter.swift in Sources */, + 3E3F3BA5CA5AD4DBFB39F8332BD6D776 /* HorizontalBarChartRenderer.swift in Sources */, + F8C277D5FA2B0EE214251AA827361AD5 /* HorizontalBarChartView.swift in Sources */, + 9795CEF12A126F200EF7227D5C92D8FF /* IBarChartDataSet.swift in Sources */, + BCF5CDE9B571F584A1B27E0C2EDA4DE2 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, + C9F3DA5C7D6F40C59E166EDA25BF3C1A /* IBubbleChartDataSet.swift in Sources */, + 0D3C338CD26D26EEC232315817D5516D /* ICandleChartDataSet.swift in Sources */, + 38639604B03BC43076FC71717C0F6D94 /* IChartDataSet.swift in Sources */, + B220E533E0CFDBF5EF5EDC081636EA99 /* ILineChartDataSet.swift in Sources */, + AF5AB277EA0452A29F3920C2197F00D6 /* ILineRadarChartDataSet.swift in Sources */, + C7008A532177CC0AEC4C5F71BBCA82C6 /* ILineScatterCandleRadarChartDataSet.swift in Sources */, + 532074C75914FE4CF53436C1A6A14713 /* IPieChartDataSet.swift in Sources */, + 8BD5B947A8FFFA1520D594F31CFF193B /* IRadarChartDataSet.swift in Sources */, + 0E22E43F70E61B51A3F9E134AD4CFE61 /* IScatterChartDataSet.swift in Sources */, + 1450ADDC9FDF6038251CCE7EACD8A70D /* LineChartData.swift in Sources */, + E8E0B5CE6CF85308FD171C983667DA27 /* LineChartDataProvider.swift in Sources */, + FE8174F2DEF60DC90811B7104D9B0868 /* LineChartDataSet.swift in Sources */, + 0D15EC17A8C39F3B2F965CA4470C6958 /* LineChartRenderer.swift in Sources */, + DE92A1E8A79BDD915C23185BCE9DF1A1 /* LineChartView.swift in Sources */, + 666CB79B413CEC59EF2E415EA2ABD1CB /* LineRadarChartDataSet.swift in Sources */, + 1FD8A73234B18F0D706650AD7F2101EC /* LineRadarChartRenderer.swift in Sources */, + 816922AA1A6DF6EF6C41658AAA4E9744 /* LineScatterCandleRadarChartDataSet.swift in Sources */, + B7AD3CDDF3752EBF1D5D541613DC1FA4 /* LineScatterCandleRadarChartRenderer.swift in Sources */, + 57E6ECBCC169FE19BB4272F5711DC5E8 /* MoveChartViewJob.swift in Sources */, + 23ED8FA861FC2434753F233573124631 /* PieChartData.swift in Sources */, + 817F26E9EBE8706B1329221C09C22FBC /* PieChartDataSet.swift in Sources */, + 01A018E12F76157E5BAE800D014A51D9 /* PieChartRenderer.swift in Sources */, + 6D1A1BA047183DE9F5FFD43A69105B5C /* PieChartView.swift in Sources */, + EC69681E12EA32A99B328E9761E0E10B /* PieRadarChartViewBase.swift in Sources */, + F35B7CC135DD93D84789E4AB0AF200CC /* RadarChartData.swift in Sources */, + 3BF640092C573CE86CEA548B0E6376A4 /* RadarChartDataSet.swift in Sources */, + 31F37588B7707CEB9512FBA96FB3582A /* RadarChartRenderer.swift in Sources */, + D29463616231ED167062F6D7089DF83D /* RadarChartView.swift in Sources */, + E31D71A665A3BF7059D5886A744DA397 /* ScatterChartData.swift in Sources */, + 311380647698B8589E111BF0346EB487 /* ScatterChartDataProvider.swift in Sources */, + 598722EFA8B47C0417242FDAAFAAA3BC /* ScatterChartDataSet.swift in Sources */, + 7885FA653ED888B5AC9776EFC33260A1 /* ScatterChartRenderer.swift in Sources */, + E57F4238FB990AB600B8E9217E88CE43 /* ScatterChartView.swift in Sources */, + 704D6B15D16FEE89C20F4C0F85D482E2 /* ZoomChartViewJob.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5833EED9953336439CC23F46BBF9D6E2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EAA57B5A589ABAA2E2064862676E461E /* UIImage+ImageEffects.m in Sources */, - 6D6ECCF0C21A016D74F6F1EE6432D7A4 /* UIImageEffects-dummy.m in Sources */, + 6DE9DB45D50BE8F0137587705FE7B6F4 /* Pods-SenseApp-Sense-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7656,15 +7128,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 62EB73176259A300734BE7B8E3EDBC5D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B186435FEF2F455F81661439BB283E0 /* UICountingLabel-dummy.m in Sources */, - 7785241A9ED674EE5E7C7649EA990835 /* UICountingLabel.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 6537CE90B2B0AB29F106AFE8EF1843D7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7706,6 +7169,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7982E14EDE572375EC468B7BAAF88B7D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F247D6D642B2895C92A753D1537CBA9B /* SVModalWebViewController.m in Sources */, + 3D1761CAA3C45EB53709966A3FE48FFA /* SVWebViewController-dummy.m in Sources */, + 09E1587DDAB04EEA5672B55C8FF40EB6 /* SVWebViewController.m in Sources */, + 8DDB056FCE3CADC39C15E8BE887F3E80 /* SVWebViewControllerActivity.m in Sources */, + 6483597E8B09277139E7CE785F6803A6 /* SVWebViewControllerActivityChrome.m in Sources */, + D12FEBE16C53D9B434FF830C2B9AEE24 /* SVWebViewControllerActivitySafari.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7C27B9B7A570449CF87C779A43FC15DE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7715,6 +7191,95 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7EEEEDD4B6756E1EF42BC428D219EC2F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 37C345E332F47B8A52F6DF18466FA93A /* UICountingLabel-dummy.m in Sources */, + DAE881D26E4097A5540D71F7F285CEF2 /* UICountingLabel.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8929574DC3E592C2E81E144CD1991663 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A46AFF21605BC60D1E0EDE160784CC79 /* Model.m in Sources */, + 5E33A6E6D05A1DAAE8B87F0A275DFE94 /* SENAccount.m in Sources */, + 1B33D31B1B504A32D6B3D6E03B65B978 /* SENAlarm.m in Sources */, + A6BDAC8504FB2ABC13AF9D22571479A7 /* SENAlarmCollection.m in Sources */, + 26324AC335B131CB50DE58AFB1037FFE /* SENAnalytics.m in Sources */, + A55F8FFF5FEA0FEC7FA1E711BA72352A /* SENAnalyticsLogger.m in Sources */, + 21FF199F199701113442B3AB043E089E /* SENAnswer.m in Sources */, + AA4E4293979C100E0E0700BEEB47B1D5 /* SENAPIAccount.m in Sources */, + 2E6554FB4F5694A1EA5ED4E4EDB76BEA /* SENAPIAlarms.m in Sources */, + 426E847AEE339FFF4961A13821F07DFE /* SENAPIAppFeedback.m in Sources */, + 2060256010389C82093AF518D305DED0 /* SENAPIAppStats.m in Sources */, + 1A2FFE1C56ABE25EFBE106313E19BCD1 /* SENAPIClient.m in Sources */, + 6FDA3A5EA9A1E19288889FB19B1D9CF1 /* SENAPIDevice.m in Sources */, + A11A6A421D8182751F8A1AFD303AF44C /* SENAPIExpansion.m in Sources */, + C58AC132E03B33468E0773FFBCBCB766 /* SENAPIInsight.m in Sources */, + CA5A32377AABB6E85D362D9EA665A5DB /* SENAPINotification.m in Sources */, + 86835D5E61E39A1F387C66E933E1B2AA /* SENAPIPhoto.m in Sources */, + 5417D146991DD5246E633BF3EC8BDDAF /* SENAPIPreferences.m in Sources */, + 04BF64D9E89DDA31D5A253073A59F916 /* SENAPIQuestions.m in Sources */, + E2E5E9204052864BED56EB4EB9E6E237 /* SENAPISensor.m in Sources */, + 3F3041C8F63E4B76790BE569B0717E56 /* SENAPIShare.m in Sources */, + 93D11514392032885F882068EAED6EFE /* SENAPISleepSounds.m in Sources */, + BC5F1D06067FB30C63D4ADB7A6D1F38B /* SENAPISpeech.m in Sources */, + F61B00FDC506324D017BE512D61C44A1 /* SENAPISupport.m in Sources */, + AB80296D562B9DEE9ED746CB0362148F /* SENAPITimeline.m in Sources */, + A04F2690301018039A55C8C396E1ABE0 /* SENAPITimeZone.m in Sources */, + 454135CF320869F997006849A30EA610 /* SENAPITrends.m in Sources */, + 197BC08F5D8139B1FCC2D4653EBD3D68 /* SENAppStats.m in Sources */, + 6CF6152571F2F4C28B1A9055F48C70B5 /* SENAppUnreadStats.m in Sources */, + 025C3CAD004D2C461D2CBEE895A74A3F /* SENAuthorizationService.m in Sources */, + AF02960803A768E9B99E6501184DD4C4 /* SENCondition.m in Sources */, + 798EAD49D18E63D8514E32C5804B8E07 /* SENConditionRange.m in Sources */, + DE4CB480F434FD246BD7D9031521F140 /* SENDeviceMetadata.m in Sources */, + 7E367369162B666C66214A300A6DEB8F /* SENDevicePairingInfo.m in Sources */, + A48524CA5C8E9FDC9729B7318ED0405D /* SENDFUStatus.m in Sources */, + F56CC71AA185739207BD822B756D2C45 /* SENExpansion.m in Sources */, + F92EDBFB60DE5B0DCBC3C9AC4961DD17 /* SENInsight.m in Sources */, + 2AC3BCB8FC4F732BCC18396A228CC3ED /* SENKeyedArchiver.m in Sources */, + 0BAF816D6E151AFCE6921C819D1795BD /* SENLocalPreferences.m in Sources */, + 826841B5E865FE8FDC6A9AC108D1C59A /* SENPairedDevices.m in Sources */, + 293EC6477BA8ABF66D24748C31C47C01 /* SENPeripheralManager.m in Sources */, + 54AAFA8303FA0FD345F9888A59A2ED84 /* SENPillMetadata.m in Sources */, + 6D0AFF77DBF2B01B5C77EECAB458F9F2 /* SENPreference.m in Sources */, + D1D7E05928C9111950CF92DB08FBB690 /* SENQuestion.m in Sources */, + FF1F14EB68DD3A2C6559B610815F56FA /* SENRemoteImage.m in Sources */, + 54468A513F5D3821FA6356E58353E99A /* SenseKit-dummy.m in Sources */, + E36093FA5F89E3C19ED5D03FA9A6DD6A /* SENSense.m in Sources */, + 23ED9E36AF7C589E2682FAFD6D452263 /* SENSenseManager.m in Sources */, + 523347521D16C71B167674903AC8EF6A /* SENSenseMessage.pb.m in Sources */, + 200701BC0992E03EB02990B67DD9A294 /* SENSenseMetadata.m in Sources */, + BF832B25872EC370E2DFD35FD8ADB454 /* SENSenseVoiceSettings.m in Sources */, + E7ED8BFBADDEAEC0BCF88F26DAEAC1D5 /* SENSenseWiFiStatus.m in Sources */, + A72CC57F7941BBF0158E34EC50E24436 /* SENSensor.m in Sources */, + 0024A88DEEED386CA79BE0DFEF7AE337 /* SENSensorDataRequest.m in Sources */, + 2BD3C64821C3FD4CA058803A8C0C7862 /* SENSensorStatus.m in Sources */, + 7319CA73DA7B8B98B34A0DF25FC499E1 /* SENService.m in Sources */, + 53E9D9DC82155C55BC45B757ADAF5E98 /* SENServiceDevice.m in Sources */, + BFC44C72DAF8F59B4150CEA83CD9EADC /* SENSleepPill.m in Sources */, + FDF1DA24DD6C7E6A9D6DEA04C3D50C2E /* SENSleepPillManager.m in Sources */, + 2C5D63A11E8E556D619C8615B335BA84 /* SENSleepSoundDurations.m in Sources */, + 554AF7BCDFF1403BF6D77983D6D3BAB7 /* SENSleepSoundRequest.m in Sources */, + 41DA3FD72EF57C4843C44579EE1B468F /* SENSleepSounds.m in Sources */, + B99EBB8C2EA43388879AFDEF15596F5D /* SENSleepSoundsState.m in Sources */, + 7A638147894714C4091A65E783E2E10C /* SENSleepSoundStatus.m in Sources */, + 444F93B5D21913A7E1EC9613818EF49C /* SENSound.m in Sources */, + 268E13E71581DBAE4879E574901221EB /* SENSpeechResult.m in Sources */, + 232F2C7DC3197C9BF16C679B5D765A85 /* SENSupportTopic.m in Sources */, + 935E2E999EE0208EA3A5380AAFB4F527 /* SENSwapStatus.m in Sources */, + D4DCD448AA2C2AE0DFF7419EEF63D08C /* SENTimeline.m in Sources */, + 424AED9EC15DE7B81E15206C758D5D3A /* SENTimelineMetric.m in Sources */, + 53FD835B1C9D1262BA6BC65E5F7ED062 /* SENTimelineSegment.m in Sources */, + F608C920A45581DAA235EC62E1004054 /* SENTrends.m in Sources */, + 62241491025D074E08E55D13BA63893E /* SENTrendsGraph.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8FF67E4D9089C3C25982994A681ECC88 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7771,31 +7336,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B8F78B5707DC8A3F8D27B5EDCF79F5B4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 91BFCA07F47A84548F5B8C9E3636B558 /* Aliases.swift in Sources */, - B41360BBE19815132C537ECB2774C595 /* Error.swift in Sources */, - D45D5D8A0DBAAA4B31A4468197E2A391 /* LinkingObjects.swift in Sources */, - AAEBD557C0E4C57AA041D476A6338BAE /* List.swift in Sources */, - 0AC81EFB916F3BCAF1B7C51621AE0946 /* Migration.swift in Sources */, - 807521E49EF0755746C9BE58F302EE61 /* Object.swift in Sources */, - A47A8FBED52EDF9ABDBE1D530427A96B /* ObjectSchema.swift in Sources */, - 422B1A0A6F60E3628E14E680C3C34744 /* Optional.swift in Sources */, - A645D9E09981D792FA6032FDDC43C618 /* Property.swift in Sources */, - 95288785480F19426C6A20ECCFB89CBA /* Realm.swift in Sources */, - 0A3E453D9B07C87A2525097F2EC0973D /* RealmCollectionType.swift in Sources */, - 161EC39CD8362C167BD234B63820BDB0 /* RealmConfiguration.swift in Sources */, - 6E97C7B4E23957A75219538966FA71F5 /* RealmSwift-dummy.m in Sources */, - E521F10AB8761E1F46111F9ADBA42C58 /* Results.swift in Sources */, - C35B11F4F65ED73FD040A3B8753D4244 /* Schema.swift in Sources */, - E39C4CC42EF3F5BDA5604BC62DA92469 /* SortDescriptor.swift in Sources */, - F199128201E885A1613AE1C924D6753D /* SwiftVersion.swift in Sources */, - C74E5F3EB2F3794E3E7B54DB143205CB /* Util.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; BBDCF0D31941238AB4053D04869F1707 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7853,55 +7393,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CC4A84346537F809CA83289C14FB8F6B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1055297B29994080537ADD0403F82DFC /* collection_change_builder.cpp in Sources */, - CCE358CDD0139F70088FF2AEC41589B3 /* collection_notifications.cpp in Sources */, - D121CDA082F277A7C5E075F1F2DE34B4 /* collection_notifier.cpp in Sources */, - 99C84C8F8E1719FC69FE624D6329A1BC /* external_commit_helper.cpp in Sources */, - C6EDB0E51BBC07A42C32E12D77D805C3 /* index_set.cpp in Sources */, - FFCBE742A096AFB760CD15C3A48365DD /* list.cpp in Sources */, - CF5D598C940DE9893F871450CB6831E5 /* list_notifier.cpp in Sources */, - E285EB4FC1DB5EB7C4EA818C15E152D2 /* object_schema.cpp in Sources */, - 7BE5CC2442CDD730454F71F2BE087F43 /* object_store.cpp in Sources */, - E34C155E1A899C6BB4618281C1DE12F9 /* Realm-dummy.m in Sources */, - 8C2CA25644D5F5237773CE0B9E518265 /* realm_coordinator.cpp in Sources */, - 688CBC45E9B87872C06A870E182A05C8 /* results.cpp in Sources */, - 94E6DA1E78BC4E0F1F0DDDD2D7EC8C07 /* results_notifier.cpp in Sources */, - 9E43CD2FDA8AF39139D6E570F544C965 /* RLMAccessor.mm in Sources */, - E7C0EC3255F4CBE832A8D34A226203E3 /* RLMAnalytics.mm in Sources */, - 5AC7C8A3C39393CB71D2BD1CABE87FBB /* RLMArray.mm in Sources */, - 086C48AB89C319451AC4A8B6FFB0275F /* RLMArrayLinkView.mm in Sources */, - AD1570BA7555143AA4598A1F2D1A04B3 /* RLMCollection.mm in Sources */, - 9A44EAA0D309141D0C3610CD97483959 /* RLMConstants.m in Sources */, - 0663A7992534811B537011822E71CA7F /* RLMListBase.mm in Sources */, - BBB1424211B5CE64BAFFD8D765C6E580 /* RLMMigration.mm in Sources */, - 2D870A12429C5CBF5FEE79D2CF96A267 /* RLMObject.mm in Sources */, - B8ED986AEE77548D637B98009AE7B823 /* RLMObjectBase.mm in Sources */, - 470B9285A8BF320D44A05A2C78B614A4 /* RLMObjectSchema.mm in Sources */, - AEDE42DF5B7318C8A93CD1D74B51DB2B /* RLMObjectStore.mm in Sources */, - 6124FE8A39BDDCA81FAD72DC5851EDC8 /* RLMObservation.mm in Sources */, - 2EF97A45D7315A3D38CE1F7991C3E48F /* RLMOptionalBase.mm in Sources */, - 8CB6CBA51A33949FC54F507F5FF9E527 /* RLMPredicateUtil.mm in Sources */, - 4D36F7EC2589DF3DA34A9DB1C8D8620E /* RLMProperty.mm in Sources */, - 71C244340356EABEE6E89531A34988E3 /* RLMQueryUtil.mm in Sources */, - 55E65C5C787114C7A89C19DE32C34B55 /* RLMRealm.mm in Sources */, - 740DA29EE8435C681426FA1009EFC16F /* RLMRealmConfiguration.mm in Sources */, - 3F39C3971802AC1288D54874D496969A /* RLMRealmUtil.mm in Sources */, - E247271FA996FFDD698E1FE73E766CF7 /* RLMResults.mm in Sources */, - 2FA5FDC68BC6D0C7504883FE450068A8 /* RLMSchema.mm in Sources */, - 1E14B7ACBEFE1B735E2CB0B1EA49B77A /* RLMSwiftSupport.m in Sources */, - 41694706400C327417314A583A8BABDC /* RLMUpdateChecker.mm in Sources */, - 4ADC20A70D98729C6B1FCF8401FC4594 /* RLMUtil.mm in Sources */, - 6E57CBC38B033F577BFDF8B5AC0A61B9 /* schema.cpp in Sources */, - E79DF6B92AE3FCBC0B691A0FC76AFEE1 /* shared_realm.cpp in Sources */, - 5BD372B59EE536DA10EFAE36D466236B /* transact_log_handler.cpp in Sources */, - D01AAF38BAD8E41F78E8951AA1E16E39 /* weak_realm_notifier.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; CF4FCEF8EAB04C8C96853097FFB054D4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7927,19 +7418,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - EBC6477F04D8A8F6F00C2C18547AAAE8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F42F3CDEE24F361D4CEA194BFC0B0DB3 /* SVModalWebViewController.m in Sources */, - 1B40A5685BA7D345B07E0C3AF2C871FD /* SVWebViewController-dummy.m in Sources */, - 560F0C5F0F833D26A8BB3EE37C6DE879 /* SVWebViewController.m in Sources */, - 680B8DFADD5B1C6795CD6EFEAA5013B7 /* SVWebViewControllerActivity.m in Sources */, - EE3A6BF1C7372693E081BCB81133CAEC /* SVWebViewControllerActivityChrome.m in Sources */, - 85A01A194FF10CFCB68BA9528C17571E /* SVWebViewControllerActivitySafari.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; ED8B36364C414352F880A08B8466BF93 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -8040,235 +7518,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FDC59293FBB3AEDDB3AC408EE9657D13 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5758650B02798548399485958495F49C /* AnimatedMoveViewJob.swift in Sources */, - 924FDE5DD46A2FF78E1050053D630854 /* AnimatedViewPortJob.swift in Sources */, - C4729DDC0CB28F2F25B14D2A67556111 /* AnimatedZoomViewJob.swift in Sources */, - E7619620B7AE11A4E8F582D9C495DBFC /* BarChartData.swift in Sources */, - 8ED98A970499A1ECFC0A73590F2CD2E6 /* BarChartDataEntry.swift in Sources */, - 4848E7E27CCB797B3852BCBAC0BA7BE2 /* BarChartDataProvider.swift in Sources */, - 891349E0A757790210A1CBE1B51F9185 /* BarChartDataSet.swift in Sources */, - 4B2C58E14DEF7A0FDEB7B779C6D32738 /* BarChartHighlighter.swift in Sources */, - 64A15D938E900B5315EBA95643BDC42C /* BarChartRenderer.swift in Sources */, - 03120D323FC1C57E791105D0A721A821 /* BarChartView.swift in Sources */, - 70BEEE2F3736878A230E65E615A2AC73 /* BarLineChartViewBase.swift in Sources */, - 563C0216002B1195A062B68131869495 /* BarLineScatterCandleBubbleChartData.swift in Sources */, - 810FDBDA7EAF096E478A4A1F9F09A12F /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, - 99FBEA45ECFEAE4AAAA522322CB7B478 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 8E798B56B2BDD5CB9411B67244867384 /* BubbleChartData.swift in Sources */, - 1E7FF59DEF705C9542E9BDE33DEF5EDA /* BubbleChartDataEntry.swift in Sources */, - A731D5B2C4015D6716BB61B3D9468404 /* BubbleChartDataProvider.swift in Sources */, - A3C9E90CF86020321C042E52EECB2F83 /* BubbleChartDataSet.swift in Sources */, - 069F7F6BEDB81850D98069D45F2DB718 /* BubbleChartRenderer.swift in Sources */, - 93CE9F08AEFFE49D1EFC1F0F1EDAD9DE /* BubbleChartView.swift in Sources */, - 0D09C889A9E22F4DBFE217110E6600D7 /* CandleChartData.swift in Sources */, - 4419C943AD38A0AEA2667352F4934C81 /* CandleChartDataEntry.swift in Sources */, - 7421CD3F7521E6EBBBF184B3E6B21CBB /* CandleChartDataProvider.swift in Sources */, - D3760D24AD8BA7A017F1F1FB5343B1E8 /* CandleChartDataSet.swift in Sources */, - 1C30B73DDD8B07EE39238646A8746A1F /* CandleStickChartRenderer.swift in Sources */, - E64341AC569BBC2C8CB84D006532D660 /* CandleStickChartView.swift in Sources */, - 06447CCB961B3D8A16AA0A192F6D2E86 /* ChartAnimationEasing.swift in Sources */, - 6B33137A198E59183FA541079C801DA4 /* ChartAnimator.swift in Sources */, - 2DE93CB7D024ACBE3709832FEFE62D40 /* ChartAxisBase.swift in Sources */, - 9996BBFB1E8E849F6848AFF1F8F1A2B6 /* ChartAxisRendererBase.swift in Sources */, - BB411C1AC5AD46F25DB10BCB6B71ED3F /* ChartBaseDataSet.swift in Sources */, - 71B85FE9E55AA24125FB94C528606B7A /* ChartColorTemplates.swift in Sources */, - 74690508EB2D032DA8CB045F77D1577F /* ChartComponentBase.swift in Sources */, - 63C9B92F5EC5B2AD8ED3BB78037726A0 /* ChartData.swift in Sources */, - A20EE8ACF38639B5CB1C6B2DAA030226 /* ChartDataApproximatorFilter.swift in Sources */, - 71B6A4B5D7569EBEE519879CF0D6A6C1 /* ChartDataBaseFilter.swift in Sources */, - 4BBE6B3707985DA0ED3D56955D57230D /* ChartDataEntry.swift in Sources */, - DC4046042ED5663C054613E486FD05C1 /* ChartDataProvider.swift in Sources */, - 78D20F4B19491D0C4E1281411E55F16D /* ChartDataRendererBase.swift in Sources */, - 8F6B9A968A93F6E1F8E3DAD163ADDD0E /* ChartDataSet.swift in Sources */, - AACA155CDA7A8711D1A26892EE0D7B37 /* ChartDefaultFillFormatter.swift in Sources */, - 87966686DC301D6DC995BF48EA07D1F6 /* ChartDefaultXAxisValueFormatter.swift in Sources */, - 7EF99127902B3D02CD67148451F86F3A /* ChartFill.swift in Sources */, - 9FCC69300415E4D6CFB963A055901240 /* ChartFillFormatter.swift in Sources */, - D526FC0387C25D4401A863712A466874 /* ChartHighlight.swift in Sources */, - 1B4A0F0F6ABEC2D65673C947BC5057B0 /* ChartHighlighter.swift in Sources */, - B915B8A31B21A16B1CE04CF7786E7771 /* ChartLegend.swift in Sources */, - 860F2E1DE1B3CB5B2B8C41B48EDD5AD5 /* ChartLegendRenderer.swift in Sources */, - B46E25B0F32D00875E20E9A482DDF2FF /* ChartLimitLine.swift in Sources */, - B158E11A535620B03FCE366AE998F786 /* ChartMarker.swift in Sources */, - CDADD78DC1083400455DEC507C72A36B /* ChartPlatform.swift in Sources */, - BE55CBF95355B1D92BFF60F96CC2C03F /* ChartRange.swift in Sources */, - D67FD7BC7571E92B68660280EBE36C0F /* ChartRendererBase.swift in Sources */, - 96FB413DB903A0A061D95F1F40EAE825 /* Charts-dummy.m in Sources */, - EC757A70CBADDF2EB75A001CF8929E32 /* ChartSelectionDetail.swift in Sources */, - 875BB63E9EAD45AAD11E1C460ECA7DCE /* ChartTransformer.swift in Sources */, - 699D646211C2DA3D463CBFAC28336756 /* ChartTransformerHorizontalBarChart.swift in Sources */, - A662B63CB7F0D2B632963BAB144DF5AB /* ChartUtils.swift in Sources */, - 5AE94F793E163EBAA6A4967D49CBAF24 /* ChartViewBase.swift in Sources */, - FC2EBC676798E5B154594ADE3D7E1B68 /* ChartViewPortHandler.swift in Sources */, - FF758988BEF297177291598304936EBE /* ChartViewPortJob.swift in Sources */, - 327E98967731E60FD231710477C3ED1D /* ChartXAxis.swift in Sources */, - F9557CEA0915AD26C0F1251A0A382065 /* ChartXAxisRenderer.swift in Sources */, - 795F88817EEBC4E77EF5970BBD217199 /* ChartXAxisRendererBarChart.swift in Sources */, - D619BD3D7082C00071C886193D0E6E17 /* ChartXAxisRendererHorizontalBarChart.swift in Sources */, - 192575FDB681537CAC5289DA4618DAD6 /* ChartXAxisRendererRadarChart.swift in Sources */, - B5EBA34EA64D1C809B98D4DE2D4A1E32 /* ChartXAxisValueFormatter.swift in Sources */, - 46AE05A6627D8883582770B557C38808 /* ChartYAxis.swift in Sources */, - E2640580AEA3349B72E8162AE3F72CBF /* ChartYAxisRenderer.swift in Sources */, - 9875763F68A0710CB3845BB0F7299F6A /* ChartYAxisRendererHorizontalBarChart.swift in Sources */, - 43D3B215E704D4F212F7404015ED431B /* ChartYAxisRendererRadarChart.swift in Sources */, - 240E74F214F3EBAD880D0DC25155AB65 /* CombinedChartData.swift in Sources */, - 1AD97A87BBC69506481F95B51325BB0D /* CombinedChartRenderer.swift in Sources */, - D4FEAA42814FC8585B3C0CCE68E34C54 /* CombinedChartView.swift in Sources */, - 5F21C136FAC61082045EA45B9E0E1B20 /* CombinedHighlighter.swift in Sources */, - 6DFD854516FA548436E740FEB091938F /* HorizontalBarChartHighlighter.swift in Sources */, - 80D68687AD7C3818DF594C9904706FC4 /* HorizontalBarChartRenderer.swift in Sources */, - 1AD24B2DC831B4C9E1CF077342276159 /* HorizontalBarChartView.swift in Sources */, - B38F8CEAC3C2FB6F99F4DBC1A476A851 /* IBarChartDataSet.swift in Sources */, - 6B15EABCAF94BB264DE4C4F1C8C75684 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 4E2BFB3257E451D82B4B3606E9A04A13 /* IBubbleChartDataSet.swift in Sources */, - 4AB6D4BADD9AABF8849D1FB53C2FEDC1 /* ICandleChartDataSet.swift in Sources */, - 81F20FA87F50EAE3ECEAD904CFB6AAF0 /* IChartDataSet.swift in Sources */, - 9C4A5269529CD8D1D8FC3AA0C862D246 /* ILineChartDataSet.swift in Sources */, - 65E3FE3D4821F35ED8230B53B409FDA4 /* ILineRadarChartDataSet.swift in Sources */, - F2E777DBBD942977B4AD8B5617E24727 /* ILineScatterCandleRadarChartDataSet.swift in Sources */, - 19C505D92EB5BF4CCA974F7F70674F3D /* IPieChartDataSet.swift in Sources */, - 2064ED8B8D1D0FE0F043942CBC173F60 /* IRadarChartDataSet.swift in Sources */, - 73876B084DC2001D8130C4F3E5ABF876 /* IScatterChartDataSet.swift in Sources */, - 7A6F0B106F313DB7AA470D5C4AEFE015 /* LineChartData.swift in Sources */, - 4158E94365DCC2AC7431B44F3F816F06 /* LineChartDataProvider.swift in Sources */, - 5BF4708CCD64EA8E53CC9C55A1054C46 /* LineChartDataSet.swift in Sources */, - 445565D159E15255C57765F523D87006 /* LineChartRenderer.swift in Sources */, - 18A4246499A7B3702C57A0090DDD5B49 /* LineChartView.swift in Sources */, - 226B60FC104A69E6AE9A3ECC251712AA /* LineRadarChartDataSet.swift in Sources */, - 25A11F3033622A68624F29D3862C059C /* LineRadarChartRenderer.swift in Sources */, - 4B1FC4B281ACE0F177AEEC4193412FDF /* LineScatterCandleRadarChartDataSet.swift in Sources */, - 5005871E5388A28E1ADDB2433DFB7BBD /* LineScatterCandleRadarChartRenderer.swift in Sources */, - 83BB9AAF806DA0866C2F99336ED64BA6 /* MoveChartViewJob.swift in Sources */, - BF46F56A51FFD01675F2874A82950BC8 /* PieChartData.swift in Sources */, - 68849FD2CBBDE2ED0E9C5D3DF23CFE0F /* PieChartDataSet.swift in Sources */, - 7A8F4E85263BFE3C2C364B8DAA48F79E /* PieChartRenderer.swift in Sources */, - 3849F4F963655C861634D13DB7E80536 /* PieChartView.swift in Sources */, - 008D783405F8AEB7F6FBFFCFE31C7CDD /* PieRadarChartViewBase.swift in Sources */, - 25F8BB329DEA3E7DEAC3CB5D79E07334 /* RadarChartData.swift in Sources */, - A3AF9727F649F21AC86FABCF00A2E821 /* RadarChartDataSet.swift in Sources */, - 6E31A6A43C8DB594EA567E4AF9B29652 /* RadarChartRenderer.swift in Sources */, - E9796FC70C8E762C506172DB0C417341 /* RadarChartView.swift in Sources */, - F72EA75FDADEB1C175EC148BBC589137 /* RealmBarData.swift in Sources */, - A1C2B54B7E650301CEF383CC460D77E0 /* RealmBarDataSet.swift in Sources */, - CC3BFB295B08302127640720EE16C86F /* RealmBarLineScatterCandleBubbleDataSet.swift in Sources */, - 3EF105EE9D66879C4CC657C39F8680AE /* RealmBaseDataSet.swift in Sources */, - 7627858FFD6ADFC3330165325CE026EE /* RealmBubbleData.swift in Sources */, - 2BFB096E6116C2F997F9E6A7F63F2587 /* RealmBubbleDataSet.swift in Sources */, - F8436C0A96E2FDE1FF78658B821A7849 /* RealmCandleData.swift in Sources */, - BCB3672B4AA513C319B57FC20675E6CF /* RealmCandleDataSet.swift in Sources */, - E1FC6E82E7935A1DB12C45E13A3327D4 /* RealmChartUtils.swift in Sources */, - E6315828C6C5E277586D3EA6F9E113E3 /* RealmLineData.swift in Sources */, - 1FE64FEAA44EE7E5D9A4854AA1332B1A /* RealmLineDataSet.swift in Sources */, - 22112E40D903C346C81750A92B8442E8 /* RealmLineRadarDataSet.swift in Sources */, - 0A05B6B605F44B9623E6DBC0843B47D0 /* RealmLineScatterCandleRadarDataSet.swift in Sources */, - AE86998D6394C1FC891DC0D360CA27BA /* RealmPieData.swift in Sources */, - 3C1720B0D40FAEBBD6D9EDC074B707C8 /* RealmPieDataSet.swift in Sources */, - 258354A90B71F39B0EAEBEEA6BE11599 /* RealmRadarData.swift in Sources */, - 8B5A09B5A5978F47F694DD1F7F7C6F49 /* RealmRadarDataSet.swift in Sources */, - 86613CE94100938C414163460D6B4A68 /* RealmScatterData.swift in Sources */, - 9BEE074597D81C53482CA3C8E8B00426 /* RealmScatterDataSet.swift in Sources */, - F9156DAF77D388C5458B8816B07EC8A0 /* ScatterChartData.swift in Sources */, - 22FF1A3016CD871D0AB885079F9D96D1 /* ScatterChartDataProvider.swift in Sources */, - A82100B4D722FEB8E2A363F65FE5A77A /* ScatterChartDataSet.swift in Sources */, - F790147DDDA2D9A95785C959760D8B67 /* ScatterChartRenderer.swift in Sources */, - BF220D229147E1C17510BB16679A31B6 /* ScatterChartView.swift in Sources */, - 810DA8D287D9F33E925C79D50F6F12C4 /* ZoomChartViewJob.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FF0C2B6C73C4909C58139E5A732F9B69 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0BF2A5BFE2D7EEDF95FEAFF4172EFEAA /* Model.m in Sources */, - 6EED9BFAB959D330EA396FEE1ECC5799 /* SENAccount.m in Sources */, - F698599D32C1A67CCB07067E4C3B4E55 /* SENAlarm.m in Sources */, - BD42B01E2260875E4774FF5C31FE1C75 /* SENAlarmCollection.m in Sources */, - 236E1C530880C79A19A7DC7C0E9B53E7 /* SENAnalytics.m in Sources */, - 6DCBBEF028D682D8FB4078D9CFB4848C /* SENAnalyticsLogger.m in Sources */, - 845B9443974112134B7C50C76437B6E7 /* SENAnswer.m in Sources */, - 61014532918B6E43E07C85DFFEB0E379 /* SENAPIAccount.m in Sources */, - 8DD16924EDF419A7E277268AF80E7A28 /* SENAPIAlarms.m in Sources */, - AFFB8E3F3EB9ADB6173973DCFEF25CDA /* SENAPIAppFeedback.m in Sources */, - B03EFF047468F876FFD1F16D5E5A5D53 /* SENAPIAppStats.m in Sources */, - B7BC3F1920789AB0ABE410C7D24FA1D4 /* SENAPIClient.m in Sources */, - 3D91C70A5D65FEC674AB5259E319D82F /* SENAPIDevice.m in Sources */, - F6552E1AE712A5072FF7EF6FB5E1F6A7 /* SENAPIExpansion.m in Sources */, - 726F708B72DEC425357F9B8ECA7F8937 /* SENAPIFeature.m in Sources */, - 4F71EA64D65D2EFC63C542BD828D27DC /* SENAPIInsight.m in Sources */, - 95567F9D794FF41857DF4E39954733F2 /* SENAPINotification.m in Sources */, - 938E08445A74CF401F77ECED1007E6B8 /* SENAPIPhoto.m in Sources */, - 0B164A96157A37EFF3852ECAF48AB600 /* SENAPIPreferences.m in Sources */, - B76029688E5BCEE550DE10A393E0D894 /* SENAPIQuestions.m in Sources */, - 6DADE741E774D57A715941BC73B84E15 /* SENAPISensor.m in Sources */, - B0560FB6067149E28A162F45CA8F1323 /* SENAPIShare.m in Sources */, - 8EAEB18A0940419104C383E930B0053A /* SENAPISleepSounds.m in Sources */, - 4BC9F6D4FB983AC92C4D47B5EB35EBFF /* SENAPISpeech.m in Sources */, - 57D65C204AC7910F5E5B444CA2915233 /* SENAPISupport.m in Sources */, - FD98F87F77473566FDEA32FDB1640474 /* SENAPITimeline.m in Sources */, - 9F6DA774C2FE415548528FB199B55503 /* SENAPITimeZone.m in Sources */, - D6BB742D67C9763C58E0A1D73855AC81 /* SENAPITrends.m in Sources */, - CAD6614CCDE37051F0FFD455A55C6AC1 /* SENAppStats.m in Sources */, - 7D32E4334466C7CE843475D7DD2FEA5F /* SENAppUnreadStats.m in Sources */, - 4C7BD955AFF587C6533BA28A7A74035A /* SENAuthorizationService.m in Sources */, - EC29120242DD201EDA7C5C63B26E6C01 /* SENCondition.m in Sources */, - 10BFEFFE72C96213CC63B7B89005EBC2 /* SENConditionRange.m in Sources */, - 161971F1E73EC15AA9BB2CC6EAFEED4A /* SENDeviceMetadata.m in Sources */, - 84EE0046798D5B193D5CD3C06A6F1B94 /* SENDevicePairingInfo.m in Sources */, - 8B712876D17B4532C2667532EB9F5147 /* SENDFUStatus.m in Sources */, - 95F985A0618271A1E3A4C144EA3466DB /* SENExpansion.m in Sources */, - FE45132FF649E2A6AC38613B8E3210BB /* SENFeatures.m in Sources */, - 683581E0CD33B0CEA4276079C5809CBE /* SENInsight.m in Sources */, - 1942694ED527D5584AEE29968E88DFDA /* SENKeyedArchiver.m in Sources */, - 5F9500FA8566379553C8C924BD6A85E6 /* SENLocalPreferences.m in Sources */, - 6F5D9AF0CE03962BA50D4198D31E2FC0 /* SENPairedDevices.m in Sources */, - 586F1E3294845CA9FAE4A5AB12101E4D /* SENPeripheralManager.m in Sources */, - CF83498E61DDDE882F8DEA58BA245850 /* SENPillMetadata.m in Sources */, - 9EC17C9837976E1B94A578EA5849CCF1 /* SENPreference.m in Sources */, - 997A35590DF8342B4302D4A45F8F9102 /* SENQuestion.m in Sources */, - AE593A8CC16421C0149C275D2C61A954 /* SENRemoteImage.m in Sources */, - FA873C6D6E350942F695DBC03314ECF8 /* SenseKit-dummy.m in Sources */, - 2126930E45775E7DBE90576CD92B46B3 /* SENSense.m in Sources */, - AFF88BCB924B4CBEA5E58B2CEEAE2F5B /* SENSenseManager.m in Sources */, - 2D64999F189EAD350E03B6138E9FECA7 /* SENSenseMessage.pb.m in Sources */, - 654360C8ED223DBACC2DC94045E23D84 /* SENSenseMetadata.m in Sources */, - EB8777C294E76CDD31A25DFF0CDAC29D /* SENSenseWiFiStatus.m in Sources */, - CD4FC3BF0C81DC2A63D82C846F83B769 /* SENSensor.m in Sources */, - D1F75758609EF3C25D5D970280882768 /* SENSensorDataRequest.m in Sources */, - 6E3DBB9F7F0EC90631FE3EC15DEAF494 /* SENSensorStatus.m in Sources */, - BC810395C10343F81BA504BA6D6A2214 /* SENService.m in Sources */, - 9028ABEBBB173A8937D42A2C81F1A256 /* SENServiceDevice.m in Sources */, - 27D0E20144220AE0779761017931E747 /* SENSleepPill.m in Sources */, - BB562136533E5680B99B535F998FF288 /* SENSleepPillManager.m in Sources */, - 10B9315906F223D83E86EB9D5A67E53C /* SENSleepSoundDurations.m in Sources */, - B640292891CC52696E5E5E5D9B9052CB /* SENSleepSoundRequest.m in Sources */, - CA4953CD219A9437E85BE83CDBFA8115 /* SENSleepSounds.m in Sources */, - A36614AD0C285393951824528DE38080 /* SENSleepSoundsState.m in Sources */, - 4C18700BD268A7DF2F06BAAA33DD5A4E /* SENSleepSoundStatus.m in Sources */, - 4534A56CFB27C9C5059E71B1FCDEA41C /* SENSound.m in Sources */, - E61BCED91D5ADAFDF5710AEEA28C8A6E /* SENSpeechResult.m in Sources */, - E0539CB4CB356A2014061F83CD8D80F9 /* SENSupportTopic.m in Sources */, - AB13AB0B8907DCCAC8964F9E1D3556DB /* SENSwapStatus.m in Sources */, - 5C7C0F74F890D8FBB521BD5DF6416574 /* SENTimeline.m in Sources */, - DFBC1D7C81DE9EAB706994453A5C67B9 /* SENTimelineMetric.m in Sources */, - 75B0065AD627E9AA223F4316520A63C1 /* SENTimelineSegment.m in Sources */, - 554DA7A9FD2724F3297A1303DA8BAC2B /* SENTrends.m in Sources */, - 400C2D6002A91490BA2A6D13B650FB2F /* SENTrendsGraph.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 03A16BCA0871F288DDB025C92C631038 /* PBXTargetDependency */ = { + 019299FAAD854994641CA448D02C8C5E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SVWebViewController; - target = 9CAA963C631202F8930C0D0E26A8CDCC /* SVWebViewController */; - targetProxy = 4C0C3769DC53044F516798A84442456A /* PBXContainerItemProxy */; + name = iOSDFULibrary; + target = D775D9186B6AFF1580872BD70FDE395E /* iOSDFULibrary */; + targetProxy = 8DEA7846C7797F3B41DB6A8AB6286DE5 /* PBXContainerItemProxy */; }; 0D27666B821EE3CE3A58FF00198FC80A /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8282,23 +7539,17 @@ target = D775D9186B6AFF1580872BD70FDE395E /* iOSDFULibrary */; targetProxy = E3988FD7BE92314BB20779298C914C12 /* PBXContainerItemProxy */; }; - 0FAF0D1E69D5A360AF74A09659E4C6C0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Realm; - target = AEF700BE3EA90D15DD0835283F4FE074 /* Realm */; - targetProxy = A0B5406AD465ECAB33920BB595A1AC10 /* PBXContainerItemProxy */; - }; 11B97B619D5FA4852380898D78AA4C30 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SORelativeDateTransformer; target = 80DAA5388079E5D54703FD0568B03AA1 /* SORelativeDateTransformer */; targetProxy = C054E2566CE77DB1C8234869D7CEB7E4 /* PBXContainerItemProxy */; }; - 15DE1E206B83AFF1C4E51C5AE577D8B5 /* PBXTargetDependency */ = { + 12C7E7492CD413EB6247625DCC532ECE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 180C74C9AD29DA8202520CCB38154CEB /* Bolts */; - targetProxy = 62AFB02BC9B665DB0F36C920573C02D3 /* PBXContainerItemProxy */; + name = Zip; + target = 5EA3D107E3080517B451F7519F5E405F /* Zip */; + targetProxy = 2B9AA2802E0118FFA1B1E6246A616138 /* PBXContainerItemProxy */; }; 16EBF0249163E71C46C681375689D9D9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8306,12 +7557,6 @@ target = 80DAA5388079E5D54703FD0568B03AA1 /* SORelativeDateTransformer */; targetProxy = 29E35C0A20658032DF967534802D0F9B /* PBXContainerItemProxy */; }; - 18FE4F9BF33B1C9EAE31AFE760808494 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MSDynamicsDrawerViewController; - target = F9B3EDAD702849F696C3C6A5E4DDFD2C /* MSDynamicsDrawerViewController */; - targetProxy = C8253E6F1BF408B65C306648E6D91A7F /* PBXContainerItemProxy */; - }; 1BFAB264362BC0AA8FEF3EE92E5B1D5A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Zip; @@ -8324,11 +7569,17 @@ target = 180C74C9AD29DA8202520CCB38154CEB /* Bolts */; targetProxy = 7FF8923DCB7379A2BEF3C700990B59CD /* PBXContainerItemProxy */; }; - 20ACA4B77FE54D812DB03C5D1D430CA2 /* PBXTargetDependency */ = { + 225FC4BD525B6FA47F90876B4D1DDCAB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AttributedMarkdown; - target = AC395942252777533D3F18E430F23762 /* AttributedMarkdown */; - targetProxy = 9368011C05B3C31A871E6CD56B0E32E5 /* PBXContainerItemProxy */; + name = MSDynamicsDrawerViewController; + target = F9B3EDAD702849F696C3C6A5E4DDFD2C /* MSDynamicsDrawerViewController */; + targetProxy = CF44F33F8BD66BB092184B853AC93D41 /* PBXContainerItemProxy */; + }; + 2B36B104C5440E8675A969173185D01A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Analytics; + target = D4366019FDFD4968B0EE7D6057DFCEF3 /* Analytics */; + targetProxy = B6E9DCC7E4A9D537B2B4EB371B80B944 /* PBXContainerItemProxy */; }; 2B62D28763A5F71910BBE5BCFB9C0A43 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8336,12 +7587,6 @@ target = 5EA3D107E3080517B451F7519F5E405F /* Zip */; targetProxy = 15FA974A962E3EC2F6AE4458DF2B92EE /* PBXContainerItemProxy */; }; - 2BA9B93259D94ED295CF0757BD155824 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = UIImageEffects; - target = E3A76DDBE03839E9C02B77A70E4A98A6 /* UIImageEffects */; - targetProxy = AA75CB0E5D3A12D3BF5DDE3E27B6599C /* PBXContainerItemProxy */; - }; 319D878C20DB790CE99ECA263DF53089 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "NSJSONSerialization-NSNullRemoval"; @@ -8354,11 +7599,11 @@ target = 8E62987DA364AB3DEC75EE0AADC0C3C2 /* NSJSONSerialization-NSNullRemoval */; targetProxy = BFFED1487FF60041315DAA16ADBEA5FF /* PBXContainerItemProxy */; }; - 343B1FFD00BCBAC4EC3CB07B2F7CAF22 /* PBXTargetDependency */ = { + 34077E339B801EE23A60DDC08E5C07E1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CGFloatType; - target = 730EF7B05CE1CB004A9A126445D48E56 /* CGFloatType */; - targetProxy = A5747A4D3230261524CE5FAC8DA874E3 /* PBXContainerItemProxy */; + name = FBSDKLoginKit; + target = E441A490F40188C03703E83906EF2B63 /* FBSDKLoginKit */; + targetProxy = 1E61F5C649334F93388E49F2EC5D548A /* PBXContainerItemProxy */; }; 3EE776D62935102F9C145D295B363FC0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8366,11 +7611,11 @@ target = E8EE80E8AA1F3FEE99B108EF5EE36D11 /* AFNetworking */; targetProxy = E9FE05799F1EA277797F495566AD92B8 /* PBXContainerItemProxy */; }; - 46DFC1DFBF3A5549ADB8473AC9554BF0 /* PBXTargetDependency */ = { + 4D1FE2B17CEFA828BC07000397CE6BB0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Analytics; - target = D4366019FDFD4968B0EE7D6057DFCEF3 /* Analytics */; - targetProxy = 7F80F639E042F469D3D0824B721E2FA3 /* PBXContainerItemProxy */; + name = FBSDKCoreKit; + target = DDBA9850F8AEC97961C9DE92AE2DC9D2 /* FBSDKCoreKit */; + targetProxy = F83BB77F1BCD005A83B18C6923FC8741 /* PBXContainerItemProxy */; }; 4E2D69001D44DF83B1A15FAC55FF5F40 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8402,6 +7647,12 @@ target = D775D9186B6AFF1580872BD70FDE395E /* iOSDFULibrary */; targetProxy = 91A6A57DC9870FD233C443E2BC7A7973 /* PBXContainerItemProxy */; }; + 5EFDC4F9A9D8FD8A1BA1153F821F8C94 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = NAPickerView; + target = 44171DDB1F024801E01F769FA8AD75E1 /* NAPickerView */; + targetProxy = B5A1509907C61A762984CE047043CA70 /* PBXContainerItemProxy */; + }; 5FC7DD2EFF0F3B2D8F18848ED180BED2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CocoaLumberjack; @@ -8414,23 +7665,47 @@ target = 5EA3D107E3080517B451F7519F5E405F /* Zip */; targetProxy = 50D57A3EB40B8E415C4ADB6B96791594 /* PBXContainerItemProxy */; }; + 72A3DDC696F3CEB6D4C722793ABC4208 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FXKeychain; + target = 81DA8EB8F3108C6E4CE73E356C3DFF8E /* FXKeychain */; + targetProxy = 17B41D8093684024E29EDFE3FB9972E1 /* PBXContainerItemProxy */; + }; 74080278BEA7FB1F473D277623AA7E45 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = iOSDFULibrary; target = D775D9186B6AFF1580872BD70FDE395E /* iOSDFULibrary */; targetProxy = E3F61148C7777BF5F8FE4913F01983EE /* PBXContainerItemProxy */; }; - 742A1A6BF030386623A3DC294BA33558 /* PBXTargetDependency */ = { + 7B6AA7220BFB632B2553C0C8A938D07F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Zip; - target = 5EA3D107E3080517B451F7519F5E405F /* Zip */; - targetProxy = 8D02AC6B67BABE44831638DD82766FD1 /* PBXContainerItemProxy */; + name = Bugsnag; + target = EE2F101D8B2CC64C1B1DF5F4F855C811 /* Bugsnag */; + targetProxy = EC224CB1E8E25C07CF281C5C1D5F1F3E /* PBXContainerItemProxy */; }; - 7F2E7299FFCE11C81B4BB9E6388873A8 /* PBXTargetDependency */ = { + 864FE3955849513620C9E33325D9C962 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "NSJSONSerialization-NSNullRemoval"; - target = 8E62987DA364AB3DEC75EE0AADC0C3C2 /* NSJSONSerialization-NSNullRemoval */; - targetProxy = 4381ABE95FB1250D7047B4CEA63330D4 /* PBXContainerItemProxy */; + name = AFNetworking; + target = E8EE80E8AA1F3FEE99B108EF5EE36D11 /* AFNetworking */; + targetProxy = 91881BB5EC0F3B8D09EE29296E35D50E /* PBXContainerItemProxy */; + }; + 878DF0BC84159D8FDB0B75880DE0DA6C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SHSProtoBuf; + target = 0E2DD52E665500ADD41D73D15C008781 /* SHSProtoBuf */; + targetProxy = 51C0A5C06C7172958A7A97FB3A74AD24 /* PBXContainerItemProxy */; + }; + 898E1A415A562628F29304900AE2A069 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = LGBluetooth; + target = 57DB68A490C560AC049B0DE8B33F6B70 /* LGBluetooth */; + targetProxy = 7B82B1C2F3644AD6DE5BF2A8F43D528F /* PBXContainerItemProxy */; + }; + 8AC0B06C05BC30849DAA53A8313EA4E5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SORelativeDateTransformer; + target = 80DAA5388079E5D54703FD0568B03AA1 /* SORelativeDateTransformer */; + targetProxy = 6C505A3628B335DC1A3D55616AC9CAD2 /* PBXContainerItemProxy */; }; 8EB7FE87D181EFBA2DC705E0E57B73A2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8444,36 +7719,24 @@ target = 43465475F37EC62ADE3092ED068C504C /* CocoaLumberjack */; targetProxy = F94351FAA364203ED9E5EE0CA01BD7C8 /* PBXContainerItemProxy */; }; - 95AC00B98FE92F4E093A4DE155D303B2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SHSProtoBuf; - target = 0E2DD52E665500ADD41D73D15C008781 /* SHSProtoBuf */; - targetProxy = 5B8C42DFA5490C175A54E74B8744CB89 /* PBXContainerItemProxy */; - }; 985776D5DA35D0646686CACE60DC4008 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SHSProtoBuf; target = 0E2DD52E665500ADD41D73D15C008781 /* SHSProtoBuf */; targetProxy = 57D2DF3DC2CD94AD6A5C6AFB93C63A90 /* PBXContainerItemProxy */; }; + 98BCF1E69D588C5865A8BB58461F7689 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Bolts; + target = 180C74C9AD29DA8202520CCB38154CEB /* Bolts */; + targetProxy = 250E48B6FAD4F87F648AFD8B562C3CCC /* PBXContainerItemProxy */; + }; 99A3D16C48C6D767BC2B1795B8ACF751 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SenseKit; target = F3A20E6B58DE3EDAD15785CDFC1F6E3D /* SenseKit */; targetProxy = 95C8E2C6C01DC09B73B3642C0E9B594A /* PBXContainerItemProxy */; }; - 9B29153366BC4691981953E605821DDD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = LGBluetooth; - target = 57DB68A490C560AC049B0DE8B33F6B70 /* LGBluetooth */; - targetProxy = 5ABBD55F95F55BB4E3CDC594CDD0B30E /* PBXContainerItemProxy */; - }; - 9C5832EF5DD9355EC8B78275E0549BEC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSDKCoreKit; - target = DDBA9850F8AEC97961C9DE92AE2DC9D2 /* FBSDKCoreKit */; - targetProxy = 180EF2822B6357137016449073B1BFDC /* PBXContainerItemProxy */; - }; A082A59D57CFAC8968805E4195492D24 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CGFloatType; @@ -8498,11 +7761,11 @@ target = 57DB68A490C560AC049B0DE8B33F6B70 /* LGBluetooth */; targetProxy = 964BD0CF41FAA1A886A309655DEEF7F5 /* PBXContainerItemProxy */; }; - AA972EEB163956D85ED73BBE0F9E43F9 /* PBXTargetDependency */ = { + ABA684D5BB95EA9886E8E05CE594E321 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Charts; - target = B8A5CE68297837372BF12AC806EAAB35 /* Charts */; - targetProxy = 6CD943302997DD9408423751923E8A3C /* PBXContainerItemProxy */; + name = CocoaLumberjack; + target = 43465475F37EC62ADE3092ED068C504C /* CocoaLumberjack */; + targetProxy = F16FD231BAF89131A350B8C2C6210F24 /* PBXContainerItemProxy */; }; AD304541A5DB221235548D519879C6C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8516,53 +7779,35 @@ target = 180C74C9AD29DA8202520CCB38154CEB /* Bolts */; targetProxy = CC29B72143603F5DCE38590864D0D9A0 /* PBXContainerItemProxy */; }; + B3DE08FCA2853EB96A9050417F701406 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Charts; + target = ACBE2D2764258B455DA501C193F6C25C /* Charts */; + targetProxy = 1C7A63A5625DCC90A448891161B8E396 /* PBXContainerItemProxy */; + }; B58F59544A3D33118C215DFB5A4976DB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Nocilla; target = D0F8C4B87B4F439921BC3DD8E32A0A58 /* Nocilla */; targetProxy = EEB4DFC7B77EB5380103D93154D77CBA /* PBXContainerItemProxy */; }; - B89D1FE4D06473AB9E2BC6566227B567 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bugsnag; - target = EE2F101D8B2CC64C1B1DF5F4F855C811 /* Bugsnag */; - targetProxy = 2D5F12534D34E7E79FFE24C73883B3F6 /* PBXContainerItemProxy */; - }; BAE4BDA67EE7B3DE30D09BDE14052173 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FXKeychain; target = 81DA8EB8F3108C6E4CE73E356C3DFF8E /* FXKeychain */; targetProxy = 6F95074878200AE03C9250922FF50F74 /* PBXContainerItemProxy */; }; - BB1FB2FECE5FF0ABC7AB43CD19AD81F5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SenseKit; - target = F3A20E6B58DE3EDAD15785CDFC1F6E3D /* SenseKit */; - targetProxy = DA5C9B90906FD3C7279AD52813540257 /* PBXContainerItemProxy */; - }; - BBECA4F44741C65291FB7DFF30286560 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = iOSDFULibrary; - target = D775D9186B6AFF1580872BD70FDE395E /* iOSDFULibrary */; - targetProxy = 0FBB708263645AE5DC799EA444E9435E /* PBXContainerItemProxy */; - }; - BC0F2EECFF09F0923569D0108E7DD286 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FXKeychain; - target = 81DA8EB8F3108C6E4CE73E356C3DFF8E /* FXKeychain */; - targetProxy = D71460618C47E58CAD109C756E58AB4E /* PBXContainerItemProxy */; - }; - C09CBBD12DFE0F5186C0642A5B376965 /* PBXTargetDependency */ = { + BB36B138C7AF394DC1825E9E7459580E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFNetworking; - target = E8EE80E8AA1F3FEE99B108EF5EE36D11 /* AFNetworking */; - targetProxy = 727DA0893035F035A206F611950F1601 /* PBXContainerItemProxy */; + name = UIImageEffects; + target = 8FCEDA0478734E091CCE0A493479AFC7 /* UIImageEffects */; + targetProxy = C98EC3DB28D8D5F99187E48E73D34EC0 /* PBXContainerItemProxy */; }; - C993A3ABCB2B88C037B6DFC3C0CAD50F /* PBXTargetDependency */ = { + C112650BE859160499D788119680C376 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SORelativeDateTransformer; - target = 80DAA5388079E5D54703FD0568B03AA1 /* SORelativeDateTransformer */; - targetProxy = E53387E21EC90729536855BC9FDFF0F2 /* PBXContainerItemProxy */; + name = SVWebViewController; + target = 7C6BF3ECBCC956A018BE1C7BCFE8E9E5 /* SVWebViewController */; + targetProxy = 2FCCDC9BC29E5F680E3BB2BF41884650 /* PBXContainerItemProxy */; }; CC80076A3B3F90E19A9C3240AC4D0477 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8570,11 +7815,11 @@ target = AC395942252777533D3F18E430F23762 /* AttributedMarkdown */; targetProxy = 95997191175911B3FE4490ED3E9193A1 /* PBXContainerItemProxy */; }; - CD54F7DEC66E6F98D3AB56417BC86F93 /* PBXTargetDependency */ = { + CCD60F053C41210F231F70FF82FD2078 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Realm; - target = AEF700BE3EA90D15DD0835283F4FE074 /* Realm */; - targetProxy = 35AF597F5BAD02B750B69CB42CB2DBFD /* PBXContainerItemProxy */; + name = CGFloatType; + target = 730EF7B05CE1CB004A9A126445D48E56 /* CGFloatType */; + targetProxy = 8307A453AB36CA596EC3DD7571241582 /* PBXContainerItemProxy */; }; CD8735B7CFF751E2114C1DAE2D38EE65 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8582,24 +7827,12 @@ target = 57DB68A490C560AC049B0DE8B33F6B70 /* LGBluetooth */; targetProxy = 0D6ED511598CCEFD03D025A8531523EB /* PBXContainerItemProxy */; }; - CEAF3F69004964CEC21AE09337A5A03F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Realm; - target = AEF700BE3EA90D15DD0835283F4FE074 /* Realm */; - targetProxy = E9696FA118631F445736E6D51D6A278F /* PBXContainerItemProxy */; - }; D231780CE13E248D15E5CE91D688F8F2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CocoaLumberjack; target = 43465475F37EC62ADE3092ED068C504C /* CocoaLumberjack */; targetProxy = 8C328A343A680AA955587AA47E05CEE3 /* PBXContainerItemProxy */; }; - DA07B1C2D27756D855DFF510DA1CD42F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSDKLoginKit; - target = E441A490F40188C03703E83906EF2B63 /* FBSDKLoginKit */; - targetProxy = 24DA3E16ADB0888A19F4F4D7A65145B3 /* PBXContainerItemProxy */; - }; DCDD8B2532E0DFF2A30447823F3C27B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AttributedMarkdown; @@ -8624,6 +7857,12 @@ target = 8E62987DA364AB3DEC75EE0AADC0C3C2 /* NSJSONSerialization-NSNullRemoval */; targetProxy = 9A50D3E1806FA1D4D94B7A7085EFAEE7 /* PBXContainerItemProxy */; }; + E2D905620A0E95E79336C28D38C2CAE1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "NSJSONSerialization-NSNullRemoval"; + target = 8E62987DA364AB3DEC75EE0AADC0C3C2 /* NSJSONSerialization-NSNullRemoval */; + targetProxy = EFFAB5F7C3BF703AE8DF1156F84DE18F /* PBXContainerItemProxy */; + }; E4CA14E246180D23F17EAA0A7449B121 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AFNetworking; @@ -8636,42 +7875,59 @@ target = 81DA8EB8F3108C6E4CE73E356C3DFF8E /* FXKeychain */; targetProxy = 9E37870CE7D2E22ECCC0FB7B058881CC /* PBXContainerItemProxy */; }; - EB9F197058229B90A247490BAF3B8CF1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RealmSwift; - target = 55BC9D00E350D5F95374448845486B0C /* RealmSwift */; - targetProxy = 574A5E49B3EAF969684619A68F3DA3A3 /* PBXContainerItemProxy */; - }; - EF28AD612A4690EE8C14B85A1B958879 /* PBXTargetDependency */ = { + E98D439CE3EB75F65DFBA57ED6CA7C2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = UICountingLabel; - target = ACC2EB3A7DE1ACA36F11D6CA8488A964 /* UICountingLabel */; - targetProxy = 0621D29CB59B0803A51553D2BD0FF4A3 /* PBXContainerItemProxy */; - }; - EF69367FA102AA62CB81B9BA55D03BA3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CocoaLumberjack; - target = 43465475F37EC62ADE3092ED068C504C /* CocoaLumberjack */; - targetProxy = 49DB740B58032D567BD47AC7FB0B9605 /* PBXContainerItemProxy */; + target = 5AF841D1919CF5A0DE7EBBE1D9EE5E3E /* UICountingLabel */; + targetProxy = 876698420F8167CD40FE01B05B89A530 /* PBXContainerItemProxy */; }; - FC2FF428B147458835EE8A3BD99177DA /* PBXTargetDependency */ = { + EE6FAD71BC2678AECC6D388BDFFBECE8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RealmSwift; - target = 55BC9D00E350D5F95374448845486B0C /* RealmSwift */; - targetProxy = 86C56FB6510D9F965E4005A3338653F1 /* PBXContainerItemProxy */; + name = AttributedMarkdown; + target = AC395942252777533D3F18E430F23762 /* AttributedMarkdown */; + targetProxy = 6D09B7C63FA8CDC0E4FD5DDB0E8E849F /* PBXContainerItemProxy */; }; - FFAFFA65C9ABA224362ECEF17C640929 /* PBXTargetDependency */ = { + F95AA3E22191B968D46707C8673D8FCC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = NAPickerView; - target = 44171DDB1F024801E01F769FA8AD75E1 /* NAPickerView */; - targetProxy = 4DC9339DA656B9C48B53738A4B5BEE97 /* PBXContainerItemProxy */; + name = SenseKit; + target = F3A20E6B58DE3EDAD15785CDFC1F6E3D /* SenseKit */; + targetProxy = 8E08945BE5C9DA37EB7841487078B607 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 04A3617288E427DA52A6D2C683CCF72A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F1C153D859ED50EC70844A7570BE5F8F /* SVWebViewController.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/SVWebViewController/SVWebViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVWebViewController/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/SVWebViewController/SVWebViewController.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVWebViewController; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 051D1570C1CA041FFD2215ED0D12FCFF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 34F4577B72E2A217DDC844D53E8644DF /* FXKeychain.xcconfig */; + baseConfigurationReference = 3D017B78C486965C62D66F01029D5C1F /* FXKeychain.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -8701,7 +7957,7 @@ }; 0848A0CBCDE64B90E790DA2B36E58374 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEBD80DF3001F0E519472171109002B8 /* SHSProtoBuf.xcconfig */; + baseConfigurationReference = 6B12E317A11DB60199C7854A9F2AC9E0 /* SHSProtoBuf.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -8731,7 +7987,7 @@ }; 0849C9BFAF7999AE11A195E2153570E3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 34F4577B72E2A217DDC844D53E8644DF /* FXKeychain.xcconfig */; + baseConfigurationReference = 3D017B78C486965C62D66F01029D5C1F /* FXKeychain.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -8794,7 +8050,7 @@ }; 0A0744F0A71A0D7BE080A2EE2993A21F /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD0B2928C9B2463922CF4C4F38287070 /* NAPickerView.xcconfig */; + baseConfigurationReference = 3F8CBC9AA0CF7A1E700BA11D93853B73 /* NAPickerView.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -8821,72 +8077,67 @@ }; name = Dev; }; - 0A9B19CD137117E4F25D730EE075F096 /* Debug */ = { + 0BC315565DFD07123B01455DB065BF66 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BA8B471CF9D546DB5EB7DA3D2C84140B /* Pods-SenseApp-Sense.debug.xcconfig */; + baseConfigurationReference = 98C374B99BDEB336B2EE786741167878 /* Analytics.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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-SenseApp-Sense/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Analytics/Analytics-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Analytics/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-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_SenseApp_Sense; + MODULEMAP_FILE = "Target Support Files/Analytics/Analytics.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Analytics; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Beta; }; - 0BC315565DFD07123B01455DB065BF66 /* Beta */ = { + 0C73A2E23BD8FE5780DA819DB2CC7191 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A2077CC4C2A1D14FAD7ABE86410B6A0 /* Analytics.xcconfig */; + baseConfigurationReference = F1C153D859ED50EC70844A7570BE5F8F /* SVWebViewController.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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/Analytics/Analytics-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Analytics/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SVWebViewController/SVWebViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVWebViewController/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/Analytics/Analytics.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Analytics; + MODULEMAP_FILE = "Target Support Files/SVWebViewController/SVWebViewController.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SVWebViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Debug; }; 0F07798035ECC63A974E3FBCC9CB0566 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E002E7CD326BCE8ACE06F6B30535A66A /* Nocilla.xcconfig */; + baseConfigurationReference = 615328B5C4B686245B253ECD664D68AE /* Nocilla.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -8913,6 +8164,35 @@ }; name = Beta; }; + 10CF48B97511362969F1440E54BB0DBA /* Dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F3955FA4C3BE54BBC7947DD23CE1F265 /* Charts.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/Charts/Charts-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Charts/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/Charts/Charts.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Charts; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Dev; + }; 1476EBFFBD58DA652050F26ED747B22A /* Beta */ = { isa = XCBuildConfiguration; baseConfigurationReference = 3400DDE4CCCB6608BE14D4C4D6F1D1D4 /* Pods-SenseApp-RoomConditionsExtension.beta.xcconfig */; @@ -8949,7 +8229,7 @@ }; 1A590C830EAB3A7BC738F52B0FD70BD3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA52669FD65213799D11C65DCA2558C0 /* NSJSONSerialization-NSNullRemoval.xcconfig */; + baseConfigurationReference = 92CBA1F68EA93C64AC9E0050E7CB1836 /* NSJSONSerialization-NSNullRemoval.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -8979,7 +8259,7 @@ }; 1A60AB0A30556E4517EF71CD3020C68A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD0B2928C9B2463922CF4C4F38287070 /* NAPickerView.xcconfig */; + baseConfigurationReference = 3F8CBC9AA0CF7A1E700BA11D93853B73 /* NAPickerView.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9006,9 +8286,96 @@ }; name = Release; }; + 1C7361EF1243AB34E03D0DB84921487E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F3955FA4C3BE54BBC7947DD23CE1F265 /* Charts.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/Charts/Charts-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Charts/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/Charts/Charts.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Charts; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 1E606103A70F914D99D87A491E5CC5C3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A0D5FF1E2EB16464EA2AFC9745D6FF5 /* UIImageEffects.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + 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/UIImageEffects/UIImageEffects-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UIImageEffects/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/UIImageEffects/UIImageEffects.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = UIImageEffects; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 1FEB542DAABD79F966BFD5634241CDBF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ADEB8F3EDFFF0AAFCAAF993099B794E8 /* UICountingLabel.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + 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/UICountingLabel/UICountingLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/UICountingLabel/UICountingLabel.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = UICountingLabel; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 201A4500234DAA660099F7B57E1608D3 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5307A942D3605AD171DFFF9647438D42 /* SORelativeDateTransformer.xcconfig */; + baseConfigurationReference = D806E96987B3D8849AE2FBC4FDB41232 /* SORelativeDateTransformer.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9038,7 +8405,7 @@ }; 20F7167FE99716B2C3698E8A0FC1E4A4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 24C040B68C3BAF84AF8781072235D9D9 /* CGFloatType.xcconfig */; + baseConfigurationReference = 18D9ACFC3C2AC96A447DFB11AC3EB23D /* CGFloatType.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9068,7 +8435,7 @@ }; 215E07726AC014056DBFB4E946422189 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22F35C9B1DC4DFD29A29D7E3CB7099E1 /* iOSDFULibrary.xcconfig */; + baseConfigurationReference = 0ED638A9C3BF6397AADB4BBE296DBE6C /* iOSDFULibrary.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9098,7 +8465,7 @@ }; 2738EF77EDF0F2420E3A023871539177 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52A4D5F564B5DCFF8CC82F4CDF01D02D /* CocoaLumberjack.xcconfig */; + baseConfigurationReference = 1FBAD0B0A37A9499F453632CCAD49715 /* CocoaLumberjack.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9126,9 +8493,38 @@ }; name = Beta; }; + 2A3C51F558CF68AB7256DAFC15EC11FA /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F3955FA4C3BE54BBC7947DD23CE1F265 /* Charts.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/Charts/Charts-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Charts/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/Charts/Charts.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = Charts; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Beta; + }; 2E8AEF5464E478B13B630E6E3F45AFDD /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46D3E1708E60EBB4BFF3099B85B4242A /* MSDynamicsDrawerViewController.xcconfig */; + baseConfigurationReference = 578E473A81534879A7754662CBF5C7AE /* MSDynamicsDrawerViewController.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9157,7 +8553,7 @@ }; 2F0C9BBEDCD0E6AD89772A116479CF27 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22F35C9B1DC4DFD29A29D7E3CB7099E1 /* iOSDFULibrary.xcconfig */; + baseConfigurationReference = 0ED638A9C3BF6397AADB4BBE296DBE6C /* iOSDFULibrary.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9187,7 +8583,7 @@ }; 31A30235F7DC63110DEF3753954B91A3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52A4D5F564B5DCFF8CC82F4CDF01D02D /* CocoaLumberjack.xcconfig */; + baseConfigurationReference = 1FBAD0B0A37A9499F453632CCAD49715 /* CocoaLumberjack.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9217,7 +8613,7 @@ }; 3268D21A01484C5818DFD1A2C711F144 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F04225D6CECBF78785D681F2E4C0178 /* LGBluetooth.xcconfig */; + baseConfigurationReference = 4EA5C5D6E04F5ED50301DE2D18E1FEDF /* LGBluetooth.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9247,7 +8643,7 @@ }; 3295B5F58113910D2CDDAE52B7E32A8D /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8642D7D4AADC81D472797FFB93639AB8 /* AttributedMarkdown.xcconfig */; + baseConfigurationReference = 2F214394C0485371E194EA56958FF704 /* AttributedMarkdown.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9277,7 +8673,7 @@ }; 32E3DE869AD6F93F6446D65C28DD0D0A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22F35C9B1DC4DFD29A29D7E3CB7099E1 /* iOSDFULibrary.xcconfig */; + baseConfigurationReference = 0ED638A9C3BF6397AADB4BBE296DBE6C /* iOSDFULibrary.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9307,7 +8703,7 @@ }; 33C1D8321B966B357E24636F596D0127 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 24C040B68C3BAF84AF8781072235D9D9 /* CGFloatType.xcconfig */; + baseConfigurationReference = 18D9ACFC3C2AC96A447DFB11AC3EB23D /* CGFloatType.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9372,7 +8768,7 @@ }; 37BB2B439D82E7AE726F0F5DB3C36164 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 83BA65DAED72206C36D888EF9C937094 /* Kiwi.xcconfig */; + baseConfigurationReference = 16FC4E490708591F17E677060E19FD0E /* Kiwi.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9401,7 +8797,7 @@ }; 38B484A0F19724C04FA0D51072139B58 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22DC5E202A7CEE76CF750011FD48DE91 /* SenseKit.xcconfig */; + baseConfigurationReference = 3DE821E241CB73C5A384F34453A70503 /* SenseKit.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9429,10 +8825,11 @@ }; name = Dev; }; - 3C7A3E214412C9CEE83F59ED27D978BD /* Dev */ = { + 3EA7796F8531F71CB7E3D725CED7AECE /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CDF2449BE02177B0A63946EC025F1D5A /* UIImageEffects.xcconfig */; + baseConfigurationReference = D806E96987B3D8849AE2FBC4FDB41232 /* SORelativeDateTransformer.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -9442,42 +8839,12 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/UIImageEffects/UIImageEffects-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UIImageEffects/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SORelativeDateTransformer/SORelativeDateTransformer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SORelativeDateTransformer/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/UIImageEffects/UIImageEffects.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = UIImageEffects; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Dev; - }; - 3EA7796F8531F71CB7E3D725CED7AECE /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5307A942D3605AD171DFFF9647438D42 /* SORelativeDateTransformer.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/SORelativeDateTransformer/SORelativeDateTransformer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SORelativeDateTransformer/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/SORelativeDateTransformer/SORelativeDateTransformer.modulemap"; + MODULEMAP_FILE = "Target Support Files/SORelativeDateTransformer/SORelativeDateTransformer.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = SORelativeDateTransformer; SDKROOT = iphoneos; @@ -9488,64 +8855,6 @@ }; name = Beta; }; - 403D33A11FD322486897A70D72349E5E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A568AC7FC33DE9EFB950561F940F69D6 /* Realm.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/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/Realm/Realm.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Realm; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 47417A93A9A56D06BFF36597DDCE3D7A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 777AE39430DF91025EC3A6110D996E06 /* UICountingLabel.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/UICountingLabel/UICountingLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/UICountingLabel/UICountingLabel.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = UICountingLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 47BEF9D903506B003EA5C2B249729489 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9588,67 +8897,9 @@ }; name = Debug; }; - 4A1276ED0AC978BC568A0B7AD6B776C1 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D291DDF35A6059DE824CCF32AA88642F /* SVWebViewController.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/SVWebViewController/SVWebViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SVWebViewController/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/SVWebViewController/SVWebViewController.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SVWebViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 4C4987ED6D62383A423FE1E6E9B5AF1B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B62C7E4807F62D1EB0E4BF7FAD8D54E8 /* Charts.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/Charts/Charts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Charts/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/Charts/Charts.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Charts; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 4C89575115E176A3849576E595E6997B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 83BA65DAED72206C36D888EF9C937094 /* Kiwi.xcconfig */; + baseConfigurationReference = 16FC4E490708591F17E677060E19FD0E /* Kiwi.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9677,7 +8928,7 @@ }; 4F0E4070E5EFEDEEF76A88EAF9A934AA /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E002E7CD326BCE8ACE06F6B30535A66A /* Nocilla.xcconfig */; + baseConfigurationReference = 615328B5C4B686245B253ECD664D68AE /* Nocilla.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9706,7 +8957,7 @@ }; 4F703E80E71D5D743B2703C80729B9B0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5307A942D3605AD171DFFF9647438D42 /* SORelativeDateTransformer.xcconfig */; + baseConfigurationReference = D806E96987B3D8849AE2FBC4FDB41232 /* SORelativeDateTransformer.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9736,7 +8987,7 @@ }; 52A0C91CCA0F85FBE1762068B44D8BCF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3331DCF2E8B41E64526109D6710C8D54 /* FBSDKCoreKit.xcconfig */; + baseConfigurationReference = 07FDE05A4C4273BDF0B4F808A1AB3CFC /* FBSDKCoreKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9763,9 +9014,38 @@ }; name = Debug; }; + 539432DB68EB76158A4796102131F9C2 /* Dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F1C153D859ED50EC70844A7570BE5F8F /* SVWebViewController.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/SVWebViewController/SVWebViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVWebViewController/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/SVWebViewController/SVWebViewController.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVWebViewController; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Dev; + }; 548125BB973E68DC873FD266CAC736CF /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25D614E54E91170B89219ABE409F1A20 /* FBSDKLoginKit.xcconfig */; + baseConfigurationReference = D9E5CC6A588EA57C940CD266BAD4A46F /* FBSDKLoginKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9794,7 +9074,7 @@ }; 5574F007C1111506E1CA6BFA5D2C17CD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D61C6C86AABCCC84AF06921650258251 /* Bolts.xcconfig */; + baseConfigurationReference = 90A0CDD44C88ABABF8E2581159187211 /* Bolts.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9823,7 +9103,7 @@ }; 5666E71FF82444A7A6A50424983E9EA1 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 077AA11A892C49D3A1D490C67F9F3B2B /* Zip.xcconfig */; + baseConfigurationReference = AEE0159DC4A3EBE535582DB2791469AB /* Zip.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9853,7 +9133,7 @@ }; 569A0378071EAC51C8EF1C7C2B0FAA4D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA52669FD65213799D11C65DCA2558C0 /* NSJSONSerialization-NSNullRemoval.xcconfig */; + baseConfigurationReference = 92CBA1F68EA93C64AC9E0050E7CB1836 /* NSJSONSerialization-NSNullRemoval.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9883,7 +9163,7 @@ }; 57F71299D0ED2CB3EEBC9ADA8F235120 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8642D7D4AADC81D472797FFB93639AB8 /* AttributedMarkdown.xcconfig */; + baseConfigurationReference = 2F214394C0485371E194EA56958FF704 /* AttributedMarkdown.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -9913,7 +9193,7 @@ }; 5BDEF9DF556A359A2F1F78D75F6F3DBF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E002E7CD326BCE8ACE06F6B30535A66A /* Nocilla.xcconfig */; + baseConfigurationReference = 615328B5C4B686245B253ECD664D68AE /* Nocilla.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -9942,7 +9222,7 @@ }; 5BE91CEB22A06E37CDFD3319872A4CE4 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F04225D6CECBF78785D681F2E4C0178 /* LGBluetooth.xcconfig */; + baseConfigurationReference = 4EA5C5D6E04F5ED50301DE2D18E1FEDF /* LGBluetooth.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10003,9 +9283,9 @@ }; name = Release; }; - 61654CF65C4710491D1A52E4BFD70563 /* Dev */ = { + 5D14FA08091C9DA4B67DDFD86BD72EC3 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A2077CC4C2A1D14FAD7ABE86410B6A0 /* Analytics.xcconfig */; + baseConfigurationReference = 8B8B9C91490F4A7D23EE19601C2DE9D8 /* Pods-SenseApp-Sense.beta.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10016,25 +9296,29 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Analytics/Analytics-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Analytics/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-SenseApp-Sense/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/Analytics/Analytics.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Analytics; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_SenseApp_Sense; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Dev; + name = Beta; }; - 624BFCA7B89C511E6106F0DE5F029E54 /* Dev */ = { + 5DC2C1CCA152BFE8D9ACAB7DF3A7A514 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46D3E1708E60EBB4BFF3099B85B4242A /* MSDynamicsDrawerViewController.xcconfig */; + baseConfigurationReference = F20341E32B9079A87956F1A407C31361 /* Pods-SenseApp-Sense.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10045,25 +9329,29 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MSDynamicsDrawerViewController/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-SenseApp-Sense/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/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = MSDynamicsDrawerViewController; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_SenseApp_Sense; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Dev; + name = Release; }; - 63A21AA67CC9491CDFB0309055AC4D8E /* Dev */ = { + 61654CF65C4710491D1A52E4BFD70563 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 030FA63A4A49B175BA76AAF8FF9F250C /* Pods-SenseApp-Sense.dev.xcconfig */; + baseConfigurationReference = 98C374B99BDEB336B2EE786741167878 /* Analytics.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10074,18 +9362,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-SenseApp-Sense/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Analytics/Analytics-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Analytics/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-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; + MODULEMAP_FILE = "Target Support Files/Analytics/Analytics.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_SenseApp_Sense; + PRODUCT_NAME = Analytics; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -10094,39 +9378,38 @@ }; name = Dev; }; - 6AEE4BDA75BFE5BE750A6FE7EEB34C0C /* Debug */ = { + 624BFCA7B89C511E6106F0DE5F029E54 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8642D7D4AADC81D472797FFB93639AB8 /* AttributedMarkdown.xcconfig */; + baseConfigurationReference = 578E473A81534879A7754662CBF5C7AE /* MSDynamicsDrawerViewController.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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/AttributedMarkdown/AttributedMarkdown-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AttributedMarkdown/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MSDynamicsDrawerViewController/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/AttributedMarkdown/AttributedMarkdown.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = AttributedMarkdown; + MODULEMAP_FILE = "Target Support Files/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MSDynamicsDrawerViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Dev; }; - 6DE59C38FC92AFDBD5E2E18072382310 /* Beta */ = { + 67D810C9F509119A8C82F0FDC20A65BA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3FEEE63E7874C0B3980123F6EFB0E0BD /* RealmSwift.xcconfig */; + baseConfigurationReference = 5A0D5FF1E2EB16464EA2AFC9745D6FF5 /* UIImageEffects.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10137,26 +9420,27 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/UIImageEffects/UIImageEffects-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UIImageEffects/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/RealmSwift/RealmSwift.modulemap"; + MODULEMAP_FILE = "Target Support Files/UIImageEffects/UIImageEffects.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = RealmSwift; + PRODUCT_NAME = UIImageEffects; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; }; - 6F11D8776EDA20C00CAFEDE1C098F07F /* Debug */ = { + 6AEE4BDA75BFE5BE750A6FE7EEB34C0C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25D614E54E91170B89219ABE409F1A20 /* FBSDKLoginKit.xcconfig */; + baseConfigurationReference = 2F214394C0485371E194EA56958FF704 /* AttributedMarkdown.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; @@ -10166,14 +9450,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AttributedMarkdown/AttributedMarkdown-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AttributedMarkdown/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/FBSDKLoginKit/FBSDKLoginKit.modulemap"; + MODULEMAP_FILE = "Target Support Files/AttributedMarkdown/AttributedMarkdown.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FBSDKLoginKit; + PRODUCT_NAME = AttributedMarkdown; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -10182,9 +9466,9 @@ }; name = Debug; }; - 71CC35679FB19C34E405A07EAA838467 /* Debug */ = { + 6F11D8776EDA20C00CAFEDE1C098F07F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 939C98732E4DB722B9555EF05098DEF5 /* Bugsnag.xcconfig */; + baseConfigurationReference = D9E5CC6A588EA57C940CD266BAD4A46F /* FBSDKLoginKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10195,14 +9479,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bugsnag/Bugsnag-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bugsnag/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/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/Bugsnag/Bugsnag.modulemap"; + MODULEMAP_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Bugsnag; + PRODUCT_NAME = FBSDKLoginKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -10211,22 +9495,51 @@ }; name = Debug; }; - 721643BA037F0594A5F81C709CBA06BB /* Release */ = { + 71CC35679FB19C34E405A07EAA838467 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A2077CC4C2A1D14FAD7ABE86410B6A0 /* Analytics.xcconfig */; + baseConfigurationReference = 8ED1F1E467DD5E24C74EF39F1F877114 /* Bugsnag.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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/Analytics/Analytics-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Analytics/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + GCC_PREFIX_HEADER = "Target Support Files/Bugsnag/Bugsnag-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bugsnag/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/Bugsnag/Bugsnag.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Bugsnag; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 721643BA037F0594A5F81C709CBA06BB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 98C374B99BDEB336B2EE786741167878 /* Analytics.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/Analytics/Analytics-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Analytics/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/Analytics/Analytics.modulemap"; @@ -10240,9 +9553,9 @@ }; name = Release; }; - 73D598038EF8199A3421090BE82DB25C /* Debug */ = { + 726BFCFBA8D7F23B6ABDC8410070BF49 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CDF2449BE02177B0A63946EC025F1D5A /* UIImageEffects.xcconfig */; + baseConfigurationReference = BA8B471CF9D546DB5EB7DA3D2C84140B /* Pods-SenseApp-Sense.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10253,16 +9566,21 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/UIImageEffects/UIImageEffects-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UIImageEffects/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-SenseApp-Sense/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/UIImageEffects/UIImageEffects.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = UIImageEffects; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_SenseApp_Sense; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -10271,7 +9589,7 @@ }; 7A21B2012CFF3FE0A9888963DA4B8806 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25D614E54E91170B89219ABE409F1A20 /* FBSDKLoginKit.xcconfig */; + baseConfigurationReference = D9E5CC6A588EA57C940CD266BAD4A46F /* FBSDKLoginKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10334,7 +9652,7 @@ }; 802B64ABF0C3A28B57A3C5A8F12B7823 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 077AA11A892C49D3A1D490C67F9F3B2B /* Zip.xcconfig */; + baseConfigurationReference = AEE0159DC4A3EBE535582DB2791469AB /* Zip.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10365,7 +9683,7 @@ }; 811142FC19386057B0B69490AF415083 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F04225D6CECBF78785D681F2E4C0178 /* LGBluetooth.xcconfig */; + baseConfigurationReference = 4EA5C5D6E04F5ED50301DE2D18E1FEDF /* LGBluetooth.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10395,7 +9713,7 @@ }; 83C78D6A0E97241CBD7082BEAD3A3002 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 83BA65DAED72206C36D888EF9C937094 /* Kiwi.xcconfig */; + baseConfigurationReference = 16FC4E490708591F17E677060E19FD0E /* Kiwi.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10424,7 +9742,7 @@ }; 85FCC6B29C232BD88EA7D1EE18F1B355 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22F35C9B1DC4DFD29A29D7E3CB7099E1 /* iOSDFULibrary.xcconfig */; + baseConfigurationReference = 0ED638A9C3BF6397AADB4BBE296DBE6C /* iOSDFULibrary.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10455,7 +9773,7 @@ }; 8A4BBF2136010C427717DB9519BDD799 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46D3E1708E60EBB4BFF3099B85B4242A /* MSDynamicsDrawerViewController.xcconfig */; + baseConfigurationReference = 578E473A81534879A7754662CBF5C7AE /* MSDynamicsDrawerViewController.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10482,35 +9800,6 @@ }; name = Release; }; - 8AF252D1B84C7DF1A2C338E3232FAF15 /* Dev */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 777AE39430DF91025EC3A6110D996E06 /* UICountingLabel.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/UICountingLabel/UICountingLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/UICountingLabel/UICountingLabel.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = UICountingLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Dev; - }; 8C61BAF6ED61350785A354EC99F746E0 /* Dev */ = { isa = XCBuildConfiguration; baseConfigurationReference = D411902F616C40B5B48C65DC7A851302 /* Pods-SenseApp-Tests.dev.xcconfig */; @@ -10546,7 +9835,7 @@ }; 8C9C90FF7D0FB10294F6144F8EEF5EBD /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52A4D5F564B5DCFF8CC82F4CDF01D02D /* CocoaLumberjack.xcconfig */; + baseConfigurationReference = 1FBAD0B0A37A9499F453632CCAD49715 /* CocoaLumberjack.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10576,7 +9865,7 @@ }; 8D043217FB2DF142B1D0CF1066A3A3C4 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F8BC67AE9D6261C228E1F915AEC1D2E9 /* AFNetworking.xcconfig */; + baseConfigurationReference = 21956A82AF3D8BDD286799D63D8FF209 /* AFNetworking.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10606,7 +9895,7 @@ }; 8D3FF9EA4C1FF55D56BEE9C792DEFBC3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEBD80DF3001F0E519472171109002B8 /* SHSProtoBuf.xcconfig */; + baseConfigurationReference = 6B12E317A11DB60199C7854A9F2AC9E0 /* SHSProtoBuf.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10634,10 +9923,11 @@ }; name = Debug; }; - 8ED96FE473BF6F2F497E4D90915A1AFA /* Release */ = { + 8FA85899C79BF2493F82CB742DF3BC57 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3FEEE63E7874C0B3980123F6EFB0E0BD /* RealmSwift.xcconfig */; + baseConfigurationReference = 18D9ACFC3C2AC96A447DFB11AC3EB23D /* CGFloatType.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -10647,14 +9937,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/CGFloatType/CGFloatType-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/CGFloatType/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/RealmSwift/RealmSwift.modulemap"; + MODULEMAP_FILE = "Target Support Files/CGFloatType/CGFloatType.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = RealmSwift; + PRODUCT_NAME = CGFloatType; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -10663,11 +9953,10 @@ }; name = Release; }; - 8FA85899C79BF2493F82CB742DF3BC57 /* Release */ = { + 95D2F32654BED5AD8A7B5D27BAAC628E /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 24C040B68C3BAF84AF8781072235D9D9 /* CGFloatType.xcconfig */; + baseConfigurationReference = ADEB8F3EDFFF0AAFCAAF993099B794E8 /* UICountingLabel.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -10677,25 +9966,25 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/CGFloatType/CGFloatType-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CGFloatType/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/UICountingLabel/UICountingLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/CGFloatType/CGFloatType.modulemap"; + MODULEMAP_FILE = "Target Support Files/UICountingLabel/UICountingLabel.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = CGFloatType; + PRODUCT_NAME = UICountingLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Beta; }; - 9104750E4C7E10BFEB205C389ACE6D60 /* Beta */ = { + 97EE044FA321A9C45F2A323B5175BD03 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CDF2449BE02177B0A63946EC025F1D5A /* UIImageEffects.xcconfig */; + baseConfigurationReference = 5A0D5FF1E2EB16464EA2AFC9745D6FF5 /* UIImageEffects.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10756,67 +10045,9 @@ }; name = Dev; }; - 9C2C14DBE19A7F6F0C59D32AF4B18C6C /* Dev */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A568AC7FC33DE9EFB950561F940F69D6 /* Realm.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/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/Realm/Realm.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Realm; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Dev; - }; - 9C43AA84BE7FA51ED8B3DD12F1EDACF7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D291DDF35A6059DE824CCF32AA88642F /* SVWebViewController.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - 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/SVWebViewController/SVWebViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SVWebViewController/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/SVWebViewController/SVWebViewController.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = SVWebViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; A111BC4546B1C74EBE31C02D61B8742F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E002E7CD326BCE8ACE06F6B30535A66A /* Nocilla.xcconfig */; + baseConfigurationReference = 615328B5C4B686245B253ECD664D68AE /* Nocilla.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10882,7 +10113,7 @@ }; A2788EE310FF51B0872E766401EFD4B8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46D3E1708E60EBB4BFF3099B85B4242A /* MSDynamicsDrawerViewController.xcconfig */; + baseConfigurationReference = 578E473A81534879A7754662CBF5C7AE /* MSDynamicsDrawerViewController.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -10911,7 +10142,7 @@ }; A2C9D10B0885BD3D70F75CFE72810749 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5307A942D3605AD171DFFF9647438D42 /* SORelativeDateTransformer.xcconfig */; + baseConfigurationReference = D806E96987B3D8849AE2FBC4FDB41232 /* SORelativeDateTransformer.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -10939,92 +10170,35 @@ }; name = Release; }; - A303AFCDD6408AA7180AC25F78166EDD /* Beta */ = { + A7E38BE7D3E80DE2F53E3B67592B55D9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A568AC7FC33DE9EFB950561F940F69D6 /* Realm.xcconfig */; + baseConfigurationReference = F3955FA4C3BE54BBC7947DD23CE1F265 /* Charts.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; - 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/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/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/Realm/Realm.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Realm; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Beta; - }; - A7E3FFE1753FE4E0422F5C3E506E23D5 /* Dev */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D291DDF35A6059DE824CCF32AA88642F /* SVWebViewController.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/SVWebViewController/SVWebViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SVWebViewController/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/SVWebViewController/SVWebViewController.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SVWebViewController; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Dev; - }; - A906321D3D190629406BFAC47609B822 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CDF2449BE02177B0A63946EC025F1D5A /* UIImageEffects.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - 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/UIImageEffects/UIImageEffects-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UIImageEffects/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Charts/Charts-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Charts/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/UIImageEffects/UIImageEffects.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = UIImageEffects; + MODULEMAP_FILE = "Target Support Files/Charts/Charts.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Charts; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; AAF678CED40D3499169D10F63CA0719E /* Release */ = { isa = XCBuildConfiguration; @@ -11066,7 +10240,7 @@ }; AC015BA6DF2E14CF1462F25AAE6A545A /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 077AA11A892C49D3A1D490C67F9F3B2B /* Zip.xcconfig */; + baseConfigurationReference = AEE0159DC4A3EBE535582DB2791469AB /* Zip.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11094,9 +10268,67 @@ }; name = Beta; }; + ACE0872F391DA4DA0E0E47D5F3A7DAAB /* Dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ADEB8F3EDFFF0AAFCAAF993099B794E8 /* UICountingLabel.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/UICountingLabel/UICountingLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/UICountingLabel/UICountingLabel.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = UICountingLabel; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Dev; + }; + AF020B8F3EBE347CF4939872F8D42E64 /* Beta */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F1C153D859ED50EC70844A7570BE5F8F /* SVWebViewController.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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/SVWebViewController/SVWebViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVWebViewController/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/SVWebViewController/SVWebViewController.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SVWebViewController; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Beta; + }; B1A09A48B3B87DC32747FCB3FB830690 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F8BC67AE9D6261C228E1F915AEC1D2E9 /* AFNetworking.xcconfig */; + baseConfigurationReference = 21956A82AF3D8BDD286799D63D8FF209 /* AFNetworking.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11126,7 +10358,7 @@ }; B56DF6271C3A4A63357D1C28E583E4A2 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA52669FD65213799D11C65DCA2558C0 /* NSJSONSerialization-NSNullRemoval.xcconfig */; + baseConfigurationReference = 92CBA1F68EA93C64AC9E0050E7CB1836 /* NSJSONSerialization-NSNullRemoval.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11190,7 +10422,7 @@ }; B9E736A571C1F215CA5D0DE03CF43D8E /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 83BA65DAED72206C36D888EF9C937094 /* Kiwi.xcconfig */; + baseConfigurationReference = 16FC4E490708591F17E677060E19FD0E /* Kiwi.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11219,7 +10451,7 @@ }; BA6FC7970A41CDEF03F687C8DC03B35A /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD0B2928C9B2463922CF4C4F38287070 /* NAPickerView.xcconfig */; + baseConfigurationReference = 3F8CBC9AA0CF7A1E700BA11D93853B73 /* NAPickerView.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11246,38 +10478,9 @@ }; name = Beta; }; - BC3429D7216E8EAF9271237AFAA2E04F /* Dev */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B62C7E4807F62D1EB0E4BF7FAD8D54E8 /* Charts.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/Charts/Charts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Charts/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/Charts/Charts.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Charts; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Dev; - }; BF2F371D7DEFABE52C4483B4D6CD0914 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D61C6C86AABCCC84AF06921650258251 /* Bolts.xcconfig */; + baseConfigurationReference = 90A0CDD44C88ABABF8E2581159187211 /* Bolts.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11304,39 +10507,9 @@ }; name = Debug; }; - BFB8740823253DCD756F5FB42D39B270 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FEEE63E7874C0B3980123F6EFB0E0BD /* RealmSwift.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - 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/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/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/RealmSwift/RealmSwift.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = RealmSwift; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; C03D520455EC38A4633A59E77227DB43 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 939C98732E4DB722B9555EF05098DEF5 /* Bugsnag.xcconfig */; + baseConfigurationReference = 8ED1F1E467DD5E24C74EF39F1F877114 /* Bugsnag.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11365,7 +10538,7 @@ }; C0876B6AD7EAB3A87067C8E2E018C367 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 24C040B68C3BAF84AF8781072235D9D9 /* CGFloatType.xcconfig */; + baseConfigurationReference = 18D9ACFC3C2AC96A447DFB11AC3EB23D /* CGFloatType.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11393,101 +10566,9 @@ }; name = Beta; }; - C199344166AC0D90A7D62021DED86102 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F8BC67AE9D6261C228E1F915AEC1D2E9 /* AFNetworking.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/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/AFNetworking/AFNetworking.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = AFNetworking; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C2A01DE4BAC0B9A98234EE74211FBC49 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 777AE39430DF91025EC3A6110D996E06 /* UICountingLabel.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - 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/UICountingLabel/UICountingLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/UICountingLabel/UICountingLabel.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = UICountingLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - C2AFAE292D9210BFC2BD864B25BCD9E5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F20341E32B9079A87956F1A407C31361 /* Pods-SenseApp-Sense.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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-SenseApp-Sense/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-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_SenseApp_Sense; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C6D9D828CD13D8204092F35003636461 /* Release */ = { + C199344166AC0D90A7D62021DED86102 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22DC5E202A7CEE76CF750011FD48DE91 /* SenseKit.xcconfig */; + baseConfigurationReference = 21956A82AF3D8BDD286799D63D8FF209 /* AFNetworking.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11499,14 +10580,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SenseKit/SenseKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SenseKit/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/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/SenseKit/SenseKit.modulemap"; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SenseKit; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -11515,11 +10596,10 @@ }; name = Release; }; - C7A6027A56B20A151ACE3D13E480D469 /* Dev */ = { + C24DA92B6C81C20F467C5F5BAE223BDA /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA52669FD65213799D11C65DCA2558C0 /* NSJSONSerialization-NSNullRemoval.xcconfig */; + baseConfigurationReference = 5A0D5FF1E2EB16464EA2AFC9745D6FF5 /* UIImageEffects.xcconfig */; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -11529,14 +10609,14 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/NSJSONSerialization-NSNullRemoval/NSJSONSerialization-NSNullRemoval-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/NSJSONSerialization-NSNullRemoval/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/UIImageEffects/UIImageEffects-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UIImageEffects/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/NSJSONSerialization-NSNullRemoval/NSJSONSerialization-NSNullRemoval.modulemap"; + MODULEMAP_FILE = "Target Support Files/UIImageEffects/UIImageEffects.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = NSJSONSerialization_NSNullRemoval; + PRODUCT_NAME = UIImageEffects; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -11545,39 +10625,41 @@ }; name = Dev; }; - C7B70FEAD3D4D31F3650E0BDEC198E86 /* Debug */ = { + C6D9D828CD13D8204092F35003636461 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A568AC7FC33DE9EFB950561F940F69D6 /* Realm.xcconfig */; + baseConfigurationReference = 3DE821E241CB73C5A384F34453A70503 /* SenseKit.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 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/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SenseKit/SenseKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SenseKit/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/Realm/Realm.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Realm; + MODULEMAP_FILE = "Target Support Files/SenseKit/SenseKit.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SenseKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - C98E4B9E28F7006C77967E0B1695E371 /* Beta */ = { + C7A6027A56B20A151ACE3D13E480D469 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B62C7E4807F62D1EB0E4BF7FAD8D54E8 /* Charts.xcconfig */; + baseConfigurationReference = 92CBA1F68EA93C64AC9E0050E7CB1836 /* NSJSONSerialization-NSNullRemoval.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -11587,25 +10669,25 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Charts/Charts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Charts/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/NSJSONSerialization-NSNullRemoval/NSJSONSerialization-NSNullRemoval-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/NSJSONSerialization-NSNullRemoval/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/Charts/Charts.modulemap"; + MODULEMAP_FILE = "Target Support Files/NSJSONSerialization-NSNullRemoval/NSJSONSerialization-NSNullRemoval.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Charts; + PRODUCT_NAME = NSJSONSerialization_NSNullRemoval; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Dev; }; CA51C5B1990399801153D0287FBAC94F /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 34F4577B72E2A217DDC844D53E8644DF /* FXKeychain.xcconfig */; + baseConfigurationReference = 3D017B78C486965C62D66F01029D5C1F /* FXKeychain.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11635,7 +10717,7 @@ }; CCF0033C694C795A55B8646F494211BD /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3331DCF2E8B41E64526109D6710C8D54 /* FBSDKCoreKit.xcconfig */; + baseConfigurationReference = 07FDE05A4C4273BDF0B4F808A1AB3CFC /* FBSDKCoreKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11664,7 +10746,7 @@ }; D074A7B6B4DBDFEDE50296005086D2BF /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22DC5E202A7CEE76CF750011FD48DE91 /* SenseKit.xcconfig */; + baseConfigurationReference = 3DE821E241CB73C5A384F34453A70503 /* SenseKit.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11692,9 +10774,9 @@ }; name = Beta; }; - D0AB640B4EE1CCEB1BAF6F9E5E4F466E /* Beta */ = { + D08FEDCFD877703755736DA3572B1104 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D291DDF35A6059DE824CCF32AA88642F /* SVWebViewController.xcconfig */; + baseConfigurationReference = ADEB8F3EDFFF0AAFCAAF993099B794E8 /* UICountingLabel.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11705,25 +10787,25 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SVWebViewController/SVWebViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SVWebViewController/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/UICountingLabel/UICountingLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/SVWebViewController/SVWebViewController.modulemap"; + MODULEMAP_FILE = "Target Support Files/UICountingLabel/UICountingLabel.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SVWebViewController; + PRODUCT_NAME = UICountingLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Beta; + name = Release; }; D15A3A8731366DC68616001D799F265D /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 939C98732E4DB722B9555EF05098DEF5 /* Bugsnag.xcconfig */; + baseConfigurationReference = 8ED1F1E467DD5E24C74EF39F1F877114 /* Bugsnag.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11752,7 +10834,7 @@ }; D44B907F72D04E72E0FEDE3C6BF9D22B /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 34F4577B72E2A217DDC844D53E8644DF /* FXKeychain.xcconfig */; + baseConfigurationReference = 3D017B78C486965C62D66F01029D5C1F /* FXKeychain.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11782,7 +10864,7 @@ }; D5FEBD8E4DFC61B0A7F11C60E8968A8B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 939C98732E4DB722B9555EF05098DEF5 /* Bugsnag.xcconfig */; + baseConfigurationReference = 8ED1F1E467DD5E24C74EF39F1F877114 /* Bugsnag.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11811,7 +10893,7 @@ }; D6F7CAEF6B7163522C7EB3554700F486 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25D614E54E91170B89219ABE409F1A20 /* FBSDKLoginKit.xcconfig */; + baseConfigurationReference = D9E5CC6A588EA57C940CD266BAD4A46F /* FBSDKLoginKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11840,7 +10922,7 @@ }; D8B3075D1FACC235FEFF9FA42602D076 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEBD80DF3001F0E519472171109002B8 /* SHSProtoBuf.xcconfig */; + baseConfigurationReference = 6B12E317A11DB60199C7854A9F2AC9E0 /* SHSProtoBuf.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11870,7 +10952,7 @@ }; D974CE61C13BEC4830EF39E074F983FE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3331DCF2E8B41E64526109D6710C8D54 /* FBSDKCoreKit.xcconfig */; + baseConfigurationReference = 07FDE05A4C4273BDF0B4F808A1AB3CFC /* FBSDKCoreKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11899,7 +10981,7 @@ }; DA2114DA5E2C5F6890D845D47C6B2763 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22DC5E202A7CEE76CF750011FD48DE91 /* SenseKit.xcconfig */; + baseConfigurationReference = 3DE821E241CB73C5A384F34453A70503 /* SenseKit.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -11927,42 +11009,9 @@ }; name = Debug; }; - DC58265F75DFA80025C30211F9F2775B /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B8B9C91490F4A7D23EE19601C2DE9D8 /* Pods-SenseApp-Sense.beta.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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-SenseApp-Sense/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-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_SenseApp_Sense; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Beta; - }; DFC46025DAE8FB1400B4C0E5B00376E7 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D61C6C86AABCCC84AF06921650258251 /* Bolts.xcconfig */; + baseConfigurationReference = 90A0CDD44C88ABABF8E2581159187211 /* Bolts.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -11991,7 +11040,7 @@ }; E01AD387BBF00393B5863554D7851A3D /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F04225D6CECBF78785D681F2E4C0178 /* LGBluetooth.xcconfig */; + baseConfigurationReference = 4EA5C5D6E04F5ED50301DE2D18E1FEDF /* LGBluetooth.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -12021,7 +11070,7 @@ }; E1E8AF746878A2C663B2A124B9DCAF9F /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3331DCF2E8B41E64526109D6710C8D54 /* FBSDKCoreKit.xcconfig */; + baseConfigurationReference = 07FDE05A4C4273BDF0B4F808A1AB3CFC /* FBSDKCoreKit.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -12048,38 +11097,9 @@ }; name = Beta; }; - E4BCC6D8379586BEF07A997411B770B0 /* Dev */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3FEEE63E7874C0B3980123F6EFB0E0BD /* RealmSwift.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/RealmSwift/RealmSwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RealmSwift/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/RealmSwift/RealmSwift.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = RealmSwift; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Dev; - }; E5280CBCF18D093F6F9BA91A151D2D9C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD0B2928C9B2463922CF4C4F38287070 /* NAPickerView.xcconfig */; + baseConfigurationReference = 3F8CBC9AA0CF7A1E700BA11D93853B73 /* NAPickerView.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -12108,7 +11128,7 @@ }; E7EF54660FB07E6D7E59A2F24C182A8B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 077AA11A892C49D3A1D490C67F9F3B2B /* Zip.xcconfig */; + baseConfigurationReference = AEE0159DC4A3EBE535582DB2791469AB /* Zip.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -12138,7 +11158,7 @@ }; E83F5078B828126C13F088AAD2B1A036 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52A4D5F564B5DCFF8CC82F4CDF01D02D /* CocoaLumberjack.xcconfig */; + baseConfigurationReference = 1FBAD0B0A37A9499F453632CCAD49715 /* CocoaLumberjack.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -12166,38 +11186,9 @@ }; name = Release; }; - EBE3AC4233F408A80B297BB45A45CED8 /* Beta */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 777AE39430DF91025EC3A6110D996E06 /* UICountingLabel.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - 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/UICountingLabel/UICountingLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UICountingLabel/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/UICountingLabel/UICountingLabel.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = UICountingLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Beta; - }; EEF6ECBD9DC4C393E7034F9DF1093ABA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8642D7D4AADC81D472797FFB93639AB8 /* AttributedMarkdown.xcconfig */; + baseConfigurationReference = 2F214394C0485371E194EA56958FF704 /* AttributedMarkdown.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -12227,7 +11218,7 @@ }; EFC81A62CDCEE48E00CEC01F827B2257 /* Beta */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F8BC67AE9D6261C228E1F915AEC1D2E9 /* AFNetworking.xcconfig */; + baseConfigurationReference = 21956A82AF3D8BDD286799D63D8FF209 /* AFNetworking.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -12257,7 +11248,7 @@ }; F9FDAFA8644A244DD32C81619EA1A62C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A2077CC4C2A1D14FAD7ABE86410B6A0 /* Analytics.xcconfig */; + baseConfigurationReference = 98C374B99BDEB336B2EE786741167878 /* Analytics.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -12286,7 +11277,7 @@ }; FADD2FBDDE299A842EDDAAD8521703A6 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D61C6C86AABCCC84AF06921650258251 /* Bolts.xcconfig */; + baseConfigurationReference = 90A0CDD44C88ABABF8E2581159187211 /* Bolts.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -12313,39 +11304,9 @@ }; name = Dev; }; - FB3854D7BFBE48A0E3257AA6A5876772 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B62C7E4807F62D1EB0E4BF7FAD8D54E8 /* Charts.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - 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/Charts/Charts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Charts/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/Charts/Charts.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Charts; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; FB45531F92DC53B5CB41264BC3CAA2C7 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEBD80DF3001F0E519472171109002B8 /* SHSProtoBuf.xcconfig */; + baseConfigurationReference = 6B12E317A11DB60199C7854A9F2AC9E0 /* SHSProtoBuf.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -12410,20 +11371,42 @@ }; name = Beta; }; + FE22D81ADED2399F44C0D531F89EC0F0 /* Dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 030FA63A4A49B175BA76AAF8FF9F250C /* Pods-SenseApp-Sense.dev.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + 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-SenseApp-Sense/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-SenseApp-Sense/Pods-SenseApp-Sense.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_SenseApp_Sense; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Dev; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0B0A6473745194AA12E6DF1303E96926 /* Build configuration list for PBXNativeTarget "RealmSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6DE59C38FC92AFDBD5E2E18072382310 /* Beta */, - BFB8740823253DCD756F5FB42D39B270 /* Debug */, - E4BCC6D8379586BEF07A997411B770B0 /* Dev */, - 8ED96FE473BF6F2F497E4D90915A1AFA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 15389EE3DBF75D98BBD6F7EA32B76502 /* Build configuration list for PBXNativeTarget "FBSDKLoginKit" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12446,17 +11429,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 200F064A8005313C06BD96285C48D230 /* Build configuration list for PBXNativeTarget "UICountingLabel" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EBE3AC4233F408A80B297BB45A45CED8 /* Beta */, - C2A01DE4BAC0B9A98234EE74211FBC49 /* Debug */, - 8AF252D1B84C7DF1A2C338E3232FAF15 /* Dev */, - 47417A93A9A56D06BFF36597DDCE3D7A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 2412CA6964E929A9A164F22D9E1FA41A /* Build configuration list for PBXNativeTarget "Pods-SenseApp-Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12468,17 +11440,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 28EF4000222F784363C980BEA07ABD52 /* Build configuration list for PBXNativeTarget "Charts" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C98E4B9E28F7006C77967E0B1695E371 /* Beta */, - FB3854D7BFBE48A0E3257AA6A5876772 /* Debug */, - BC3429D7216E8EAF9271237AFAA2E04F /* Dev */, - 4C4987ED6D62383A423FE1E6E9B5AF1B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12512,17 +11473,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 514811B71AA0BAD49A5928DA1B42CD56 /* Build configuration list for PBXNativeTarget "Realm" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A303AFCDD6408AA7180AC25F78166EDD /* Beta */, - C7B70FEAD3D4D31F3650E0BDEC198E86 /* Debug */, - 9C2C14DBE19A7F6F0C59D32AF4B18C6C /* Dev */, - 403D33A11FD322486897A70D72349E5E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 530A8598789347154D195BA795B18EB6 /* Build configuration list for PBXNativeTarget "SHSProtoBuf" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12556,17 +11506,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 680C2EAC9E454B3E5FE651D9DCFF9EF8 /* Build configuration list for PBXNativeTarget "UIImageEffects" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9104750E4C7E10BFEB205C389ACE6D60 /* Beta */, - 73D598038EF8199A3421090BE82DB25C /* Debug */, - 3C7A3E214412C9CEE83F59ED27D978BD /* Dev */, - A906321D3D190629406BFAC47609B822 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 69CBCB95FB0B0485E14C2DB8C16935AA /* Build configuration list for PBXNativeTarget "MSDynamicsDrawerViewController" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12600,17 +11539,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8E270B6A44B6040584F323214ABCB22C /* Build configuration list for PBXNativeTarget "Pods-SenseApp-Sense" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DC58265F75DFA80025C30211F9F2775B /* Beta */, - 0A9B19CD137117E4F25D730EE075F096 /* Debug */, - 63A21AA67CC9491CDFB0309055AC4D8E /* Dev */, - C2AFAE292D9210BFC2BD864B25BCD9E5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 90C020F78F1B30674BEB34E6355B8820 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12644,6 +11572,28 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AE08B4E22E1C235CA6591955AA759EB3 /* Build configuration list for PBXNativeTarget "SVWebViewController" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF020B8F3EBE347CF4939872F8D42E64 /* Beta */, + 0C73A2E23BD8FE5780DA819DB2CC7191 /* Debug */, + 539432DB68EB76158A4796102131F9C2 /* Dev */, + 04A3617288E427DA52A6D2C683CCF72A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B19270CBF3B966BE32FD6408C4A68F3E /* Build configuration list for PBXNativeTarget "Pods-SenseApp-Sense" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5D14FA08091C9DA4B67DDFD86BD72EC3 /* Beta */, + 726BFCFBA8D7F23B6ABDC8410070BF49 /* Debug */, + FE22D81ADED2399F44C0D531F89EC0F0 /* Dev */, + 5DC2C1CCA152BFE8D9ACAB7DF3A7A514 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; B62938113B1168FF533086B71A1C724A /* Build configuration list for PBXNativeTarget "AttributedMarkdown" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12655,6 +11605,17 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + C1E31CB4FD79AA09680BF126EF8C652D /* Build configuration list for PBXNativeTarget "UIImageEffects" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97EE044FA321A9C45F2A323B5175BD03 /* Beta */, + 1E606103A70F914D99D87A491E5CC5C3 /* Debug */, + C24DA92B6C81C20F467C5F5BAE223BDA /* Dev */, + 67D810C9F509119A8C82F0FDC20A65BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C9AF9AB07B23217D69D327EFD40B2909 /* Build configuration list for PBXNativeTarget "NSJSONSerialization-NSNullRemoval" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -12666,13 +11627,13 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CF4FEBC6D54956705601D91BB77AEF9D /* Build configuration list for PBXNativeTarget "SVWebViewController" */ = { + CB69DF3B2F9BF73FB8561DB3DC24B2D3 /* Build configuration list for PBXNativeTarget "Charts" */ = { isa = XCConfigurationList; buildConfigurations = ( - D0AB640B4EE1CCEB1BAF6F9E5E4F466E /* Beta */, - 9C43AA84BE7FA51ED8B3DD12F1EDACF7 /* Debug */, - A7E3FFE1753FE4E0422F5C3E506E23D5 /* Dev */, - 4A1276ED0AC978BC568A0B7AD6B776C1 /* Release */, + 2A3C51F558CF68AB7256DAFC15EC11FA /* Beta */, + A7E38BE7D3E80DE2F53E3B67592B55D9 /* Debug */, + 10CF48B97511362969F1440E54BB0DBA /* Dev */, + 1C7361EF1243AB34E03D0DB84921487E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -12754,6 +11715,17 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + FF9295B56AA7A7B671A1438D228B8756 /* Build configuration list for PBXNativeTarget "UICountingLabel" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 95D2F32654BED5AD8A7B5D27BAAC628E /* Beta */, + 1FEB542DAABD79F966BFD5634241CDBF /* Debug */, + ACE0872F391DA4DA0E0E47D5F3A7DAAB /* Dev */, + D08FEDCFD877703755736DA3572B1104 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; diff --git a/Pods/Realm/LICENSE b/Pods/Realm/LICENSE deleted file mode 100644 index a1943466..00000000 --- a/Pods/Realm/LICENSE +++ /dev/null @@ -1,269 +0,0 @@ -TABLE OF CONTENTS - -1. Apache License version 2.0 -2. Realm Components -3. Export Compliance - -------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -REALM COMPONENTS - -This software contains components with separate copyright and license terms. -Your use of these components is subject to the terms and conditions of the -following licenses. - -For the Realm Core component - - Realm Core Binary License - - Copyright (c) 2011-2014 Realm Inc All rights reserved - - Redistribution and use in binary form, with or without modification, is - permitted provided that the following conditions are met: - - 1. You agree not to attempt to decompile, disassemble, reverse engineer or - otherwise discover the source code from which the binary code was derived. - You may, however, access and obtain a separate license for most of the - source code from which this Software was created, at - http://realm.io/pricing/. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -EXPORT COMPLIANCE - -You understand that the Software may contain cryptographic functions that may be -subject to export restrictions, and you represent and warrant that you are not -located in a country that is subject to United States export restriction or embargo, -including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, and that you -are not on the Department of Commerce list of Denied Persons, Unverified Parties, -or affiliated with a Restricted Entity. - -You agree to comply with all export, re-export and import restrictions and -regulations of the Department of Commerce or other agency or authority of the -United States or other applicable countries. You also agree not to transfer, or -authorize the transfer of, directly or indirectly, the Software to any prohibited -country, including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, -or to any person or organization on or affiliated with the Department of -Commerce lists of Denied Persons, Unverified Parties or Restricted Entities, or -otherwise in violation of any such restrictions or regulations. diff --git a/Pods/Realm/README.md b/Pods/Realm/README.md deleted file mode 100644 index eab2adf6..00000000 --- a/Pods/Realm/README.md +++ /dev/null @@ -1,68 +0,0 @@ -![Realm](https://github.com/realm/realm-cocoa/raw/master/logo.png) - -Realm is a mobile database that runs directly inside phones, tablets or wearables. -This repository holds the source code for the iOS, OS X, watchOS & tvOS versions of Realm Swift & Realm Objective-C. - -## Features - -* **Mobile-first:** Realm is the first database built from the ground up to run directly inside phones, tablets and wearables. -* **Simple:** Data is directly [exposed as objects](https://realm.io/docs/objc/latest/#models) and [queryable by code](https://realm.io/docs/objc/latest/#queries), removing the need for ORM's riddled with performance & maintenance issues. Most of our users pick it up intuitively, getting simple apps up & running in minutes. -* **Modern:** Realm supports relationships, generics, vectorization and even Swift. -* **Fast:** Realm is faster than even raw SQLite on common operations, while maintaining an extremely rich feature set. - -## Getting Started - -Please see the detailed instructions in our docs to add [Realm Objective-C](https://realm.io/docs/objc/latest/#installation) _or_ [Realm Swift](https://realm.io/docs/swift/latest/#installation) to your Xcode project. - -## Documentation - -### Realm Objective-C - -The documentation can be found at [realm.io/docs/objc/latest](https://realm.io/docs/objc/latest). -The API reference is located at [realm.io/docs/objc/latest/api](https://realm.io/docs/objc/latest/api). - -### Realm Swift - -The documentation can be found at [realm.io/docs/swift/latest](https://realm.io/docs/swift/latest). -The API reference is located at [realm.io/docs/swift/latest/api](https://realm.io/docs/swift/latest/api). - -## Getting Help - -- **Need help with your code?**: Look for previous questions on the [#realm tag](https://stackoverflow.com/questions/tagged/realm?sort=newest) — or [ask a new question](https://stackoverflow.com/questions/ask?tags=realm). We actively monitor & answer questions on SO! -- **Have a bug to report?** [Open an issue](https://github.com/realm/realm-cocoa/issues/new). If possible, include the version of Realm, a full log, the Realm file, and a project that shows the issue. -- **Have a feature request?** [Open an issue](https://github.com/realm/realm-cocoa/issues/new). Tell us what the feature should do, and why you want the feature. -- Sign up for our [**Community Newsletter**](http://eepurl.com/VEKCn) to get regular tips, learn about other use-cases and get alerted of blogposts and tutorials about Realm. - -## Building Realm - -In case you don't want to use the precompiled version, you can build Realm yourself from source. - -Prerequisites: - -* Building Realm requires Xcode 7.3. -* Building Realm documentation requires [jazzy](https://github.com/realm/jazzy) - -Once you have all the necessary prerequisites, building Realm.framework just takes a single command: `sh build.sh build`. You'll need an internet connection the first time you build Realm to download the core binary. - -Run `sh build.sh help` to see all the actions you can perform (build ios/osx, generate docs, test, etc.). - -## Contributing - -See [CONTRIBUTING.md](CONTRIBUTING.md) for more details! - -## License - -Realm Objective-C & Realm Swift are published under the Apache 2.0 license. -The underlying core is available under the [Realm Core Binary License](https://github.com/realm/realm-cocoa/blob/master/LICENSE#L210-L243) while we [work to open-source it under the Apache 2.0 license](https://realm.io/docs/objc/latest/#faq). - -**This product is not being made available to any person located in Cuba, Iran, -North Korea, Sudan, Syria or the Crimea region, or to any other person that is -not eligible to receive the product under U.S. law.** - -## Feedback - -**_If you use Realm and are happy with it, all we ask is that you please consider sending out a tweet mentioning [@realm](https://twitter.com/realm) or email [help@realm.io](mailto:help@realm.io) to share your thoughts!_** - -**_And if you don't like it, please let us know what you would like improved, so we can fix it!_** - -![analytics](https://ga-beacon.appspot.com/UA-50247013-2/realm-cocoa/README?pixel) diff --git a/Pods/Realm/Realm/ObjectStore/collection_notifications.cpp b/Pods/Realm/Realm/ObjectStore/collection_notifications.cpp deleted file mode 100644 index 83dc89e1..00000000 --- a/Pods/Realm/Realm/ObjectStore/collection_notifications.cpp +++ /dev/null @@ -1,56 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "collection_notifications.hpp" - -#include "impl/collection_notifier.hpp" - -using namespace realm; -using namespace realm::_impl; - -NotificationToken::NotificationToken(std::shared_ptr<_impl::CollectionNotifier> notifier, size_t token) -: m_notifier(std::move(notifier)), m_token(token) -{ -} - -NotificationToken::~NotificationToken() -{ - // m_notifier itself (and not just the pointed-to thing) needs to be accessed - // atomically to ensure that there are no data races when the token is - // destroyed after being modified on a different thread. - // This is needed despite the token not being thread-safe in general as - // users find it very surprising for obj-c objects to care about what - // thread they are deallocated on. - if (auto notifier = m_notifier.exchange({})) { - notifier->remove_callback(m_token); - } -} - -NotificationToken::NotificationToken(NotificationToken&& rgt) = default; - -NotificationToken& NotificationToken::operator=(realm::NotificationToken&& rgt) -{ - if (this != &rgt) { - if (auto notifier = m_notifier.exchange({})) { - notifier->remove_callback(m_token); - } - m_notifier = std::move(rgt.m_notifier); - m_token = rgt.m_token; - } - return *this; -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/apple/external_commit_helper.cpp b/Pods/Realm/Realm/ObjectStore/impl/apple/external_commit_helper.cpp deleted file mode 100644 index 487df206..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/apple/external_commit_helper.cpp +++ /dev/null @@ -1,226 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/external_commit_helper.hpp" - -#include "impl/realm_coordinator.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace realm; -using namespace realm::_impl; - -namespace { -// Write a byte to a pipe to notify anyone waiting for data on the pipe -void notify_fd(int fd) -{ - while (true) { - char c = 0; - ssize_t ret = write(fd, &c, 1); - if (ret == 1) { - break; - } - - // If the pipe's buffer is full, we need to read some of the old data in - // it to make space. We don't just read in the code waiting for - // notifications so that we can notify multiple waiters with a single - // write. - assert(ret == -1 && errno == EAGAIN); - char buff[1024]; - read(fd, buff, sizeof buff); - } -} -} // anonymous namespace - -void ExternalCommitHelper::FdHolder::close() -{ - if (m_fd != -1) { - ::close(m_fd); - } - m_fd = -1; -} - -// Inter-thread and inter-process notifications of changes are done using a -// named pipe in the filesystem next to the Realm file. Everyone who wants to be -// notified of commits waits for data to become available on the pipe, and anyone -// who commits a write transaction writes data to the pipe after releasing the -// write lock. Note that no one ever actually *reads* from the pipe: the data -// actually written is meaningless, and trying to read from a pipe from multiple -// processes at once is fraught with race conditions. - -// When a RLMRealm instance is created, we add a CFRunLoopSource to the current -// thread's runloop. On each cycle of the run loop, the run loop checks each of -// its sources for work to do, which in the case of CFRunLoopSource is just -// checking if CFRunLoopSourceSignal has been called since the last time it ran, -// and if so invokes the function pointer supplied when the source is created, -// which in our case just invokes `[realm handleExternalChange]`. - -// Listening for external changes is done using kqueue() on a background thread. -// kqueue() lets us efficiently wait until the amount of data which can be read -// from one or more file descriptors has changed, and tells us which of the file -// descriptors it was that changed. We use this to wait on both the shared named -// pipe, and a local anonymous pipe. When data is written to the named pipe, we -// signal the runloop source and wake up the target runloop, and when data is -// written to the anonymous pipe the background thread removes the runloop -// source from the runloop and and shuts down. -ExternalCommitHelper::ExternalCommitHelper(RealmCoordinator& parent) -: m_parent(parent) -{ - m_kq = kqueue(); - if (m_kq == -1) { - throw std::system_error(errno, std::system_category()); - } - -#if !TARGET_OS_TV - auto path = parent.get_path() + ".note"; - - // Create and open the named pipe - int ret = mkfifo(path.c_str(), 0600); - if (ret == -1) { - int err = errno; - if (err == ENOTSUP) { - // Filesystem doesn't support named pipes, so try putting it in tmp instead - // Hash collisions are okay here because they just result in doing - // extra work, as opposed to correctness problems - std::ostringstream ss; - ss << getenv("TMPDIR"); - ss << "realm_" << std::hash()(path) << ".note"; - path = ss.str(); - ret = mkfifo(path.c_str(), 0600); - err = errno; - } - // the fifo already existing isn't an error - if (ret == -1 && err != EEXIST) { - throw std::system_error(err, std::system_category()); - } - } - - m_notify_fd = open(path.c_str(), O_RDWR); - if (m_notify_fd == -1) { - throw std::system_error(errno, std::system_category()); - } - - // Make writing to the pipe return -1 when the pipe's buffer is full - // rather than blocking until there's space available - ret = fcntl(m_notify_fd, F_SETFL, O_NONBLOCK); - if (ret == -1) { - throw std::system_error(errno, std::system_category()); - } - -#else // !TARGET_OS_TV - - // tvOS does not support named pipes, so use an anonymous pipe instead - int notification_pipe[2]; - int ret = pipe(notification_pipe); - if (ret == -1) { - throw std::system_error(errno, std::system_category()); - } - - m_notify_fd = notification_pipe[0]; - m_notify_fd_write = notification_pipe[1]; - -#endif // TARGET_OS_TV - - // Create the anonymous pipe for shutdown notifications - int shutdown_pipe[2]; - ret = pipe(shutdown_pipe); - if (ret == -1) { - throw std::system_error(errno, std::system_category()); - } - - m_shutdown_read_fd = shutdown_pipe[0]; - m_shutdown_write_fd = shutdown_pipe[1]; - - m_thread = std::async(std::launch::async, [=] { - try { - listen(); - } - catch (std::exception const& e) { - fprintf(stderr, "uncaught exception in notifier thread: %s: %s\n", typeid(e).name(), e.what()); - asl_log(nullptr, nullptr, ASL_LEVEL_ERR, "uncaught exception in notifier thread: %s: %s", typeid(e).name(), e.what()); - throw; - } - catch (...) { - fprintf(stderr, "uncaught exception in notifier thread\n"); - asl_log(nullptr, nullptr, ASL_LEVEL_ERR, "uncaught exception in notifier thread"); - throw; - } - }); -} - -ExternalCommitHelper::~ExternalCommitHelper() -{ - notify_fd(m_shutdown_write_fd); - m_thread.wait(); // Wait for the thread to exit -} - -void ExternalCommitHelper::listen() -{ - pthread_setname_np("RLMRealm notification listener"); - - // Set up the kqueue - // EVFILT_READ indicates that we care about data being available to read - // on the given file descriptor. - // EV_CLEAR makes it wait for the amount of data available to be read to - // change rather than just returning when there is any data to read. - struct kevent ke[2]; - EV_SET(&ke[0], m_notify_fd, EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, 0); - EV_SET(&ke[1], m_shutdown_read_fd, EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, 0); - int ret = kevent(m_kq, ke, 2, nullptr, 0, nullptr); - assert(ret == 0); - - while (true) { - struct kevent event; - // Wait for data to become on either fd - // Return code is number of bytes available or -1 on error - ret = kevent(m_kq, nullptr, 0, &event, 1, nullptr); - assert(ret >= 0); - if (ret == 0) { - // Spurious wakeup; just wait again - continue; - } - - // Check which file descriptor had activity: if it's the shutdown - // pipe, then someone called -stop; otherwise it's the named pipe - // and someone committed a write transaction - if (event.ident == (uint32_t)m_shutdown_read_fd) { - return; - } - assert(event.ident == (uint32_t)m_notify_fd); - - m_parent.on_change(); - } -} - -void ExternalCommitHelper::notify_others() -{ - if (m_notify_fd_write != -1) { - notify_fd(m_notify_fd_write); - } - else { - notify_fd(m_notify_fd); - } -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/apple/weak_realm_notifier.cpp b/Pods/Realm/Realm/ObjectStore/impl/apple/weak_realm_notifier.cpp deleted file mode 100644 index 0ce6300f..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/apple/weak_realm_notifier.cpp +++ /dev/null @@ -1,96 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/weak_realm_notifier.hpp" - -#include "shared_realm.hpp" - -#include - -using namespace realm; -using namespace realm::_impl; - -WeakRealmNotifier::WeakRealmNotifier(const std::shared_ptr& realm, bool cache) -: WeakRealmNotifierBase(realm, cache) -{ - struct RefCountedWeakPointer { - std::weak_ptr realm; - std::atomic ref_count; - }; - - CFRunLoopSourceContext ctx{}; - ctx.info = new RefCountedWeakPointer{realm, {0}}; - ctx.perform = [](void* info) { - if (auto realm = static_cast(info)->realm.lock()) { - realm->notify(); - } - }; - ctx.retain = [](const void* info) { - static_cast(const_cast(info))->ref_count.fetch_add(1, std::memory_order_relaxed); - return info; - }; - ctx.release = [](const void* info) { - auto ptr = static_cast(const_cast(info)); - if (ptr->ref_count.fetch_add(-1, std::memory_order_acq_rel) == 1) { - delete ptr; - } - }; - - m_runloop = CFRunLoopGetCurrent(); - CFRetain(m_runloop); - m_signal = CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &ctx); - CFRunLoopAddSource(m_runloop, m_signal, kCFRunLoopDefaultMode); -} - -WeakRealmNotifier::WeakRealmNotifier(WeakRealmNotifier&& rgt) -: WeakRealmNotifierBase(std::move(rgt)) -, m_runloop(rgt.m_runloop) -, m_signal(rgt.m_signal) -{ - rgt.m_runloop = nullptr; - rgt.m_signal = nullptr; -} - -WeakRealmNotifier& WeakRealmNotifier::operator=(WeakRealmNotifier&& rgt) -{ - WeakRealmNotifierBase::operator=(std::move(rgt)); - m_runloop = rgt.m_runloop; - m_signal = rgt.m_signal; - rgt.m_runloop = nullptr; - rgt.m_signal = nullptr; - - return *this; -} - -WeakRealmNotifier::~WeakRealmNotifier() -{ - if (m_signal) { - CFRunLoopSourceInvalidate(m_signal); - CFRelease(m_signal); - CFRelease(m_runloop); - } -} - -void WeakRealmNotifier::notify() -{ - CFRunLoopSourceSignal(m_signal); - // Signalling the source makes it run the next time the runloop gets - // to it, but doesn't make the runloop start if it's currently idle - // waiting for events - CFRunLoopWakeUp(m_runloop); -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/collection_change_builder.cpp b/Pods/Realm/Realm/ObjectStore/impl/collection_change_builder.cpp deleted file mode 100644 index da0ff5ab..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/collection_change_builder.cpp +++ /dev/null @@ -1,659 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/collection_change_builder.hpp" - -#include - -using namespace realm; -using namespace realm::_impl; - -CollectionChangeBuilder::CollectionChangeBuilder(IndexSet deletions, - IndexSet insertions, - IndexSet modifications, - std::vector moves) -: CollectionChangeSet({std::move(deletions), std::move(insertions), std::move(modifications), std::move(moves)}) -{ - for (auto&& move : this->moves) { - this->deletions.add(move.from); - this->insertions.add(move.to); - } -} - -void CollectionChangeBuilder::merge(CollectionChangeBuilder&& c) -{ - if (c.empty()) - return; - if (empty()) { - *this = std::move(c); - return; - } - - verify(); - c.verify(); - - // First update any old moves - if (!c.moves.empty() || !c.deletions.empty() || !c.insertions.empty()) { - auto it = remove_if(begin(moves), end(moves), [&](auto& old) { - // Check if the moved row was moved again, and if so just update the destination - auto it = find_if(begin(c.moves), end(c.moves), [&](auto const& m) { - return old.to == m.from; - }); - if (it != c.moves.end()) { - if (modifications.contains(it->from)) - c.modifications.add(it->to); - old.to = it->to; - *it = c.moves.back(); - c.moves.pop_back(); - ++it; - return false; - } - - // Check if the destination was deleted - // Removing the insert for this move will happen later - if (c.deletions.contains(old.to)) - return true; - - // Update the destination to adjust for any new insertions and deletions - old.to = c.insertions.shift(c.deletions.unshift(old.to)); - return false; - }); - moves.erase(it, end(moves)); - } - - // Ignore new moves of rows which were previously inserted (the implicit - // delete from the move will remove the insert) - if (!insertions.empty() && !c.moves.empty()) { - c.moves.erase(remove_if(begin(c.moves), end(c.moves), - [&](auto const& m) { return insertions.contains(m.from); }), - end(c.moves)); - } - - // Ensure that any previously modified rows which were moved are still modified - if (!modifications.empty() && !c.moves.empty()) { - for (auto const& move : c.moves) { - if (modifications.contains(move.from)) - c.modifications.add(move.to); - } - } - - // Update the source position of new moves to compensate for the changes made - // in the old changeset - if (!deletions.empty() || !insertions.empty()) { - for (auto& move : c.moves) - move.from = deletions.shift(insertions.unshift(move.from)); - } - - moves.insert(end(moves), begin(c.moves), end(c.moves)); - - // New deletion indices have been shifted by the insertions, so unshift them - // before adding - deletions.add_shifted_by(insertions, c.deletions); - - // Drop any inserted-then-deleted rows, then merge in new insertions - insertions.erase_at(c.deletions); - insertions.insert_at(c.insertions); - - clean_up_stale_moves(); - - modifications.erase_at(c.deletions); - modifications.shift_for_insert_at(c.insertions); - modifications.add(c.modifications); - - c = {}; - verify(); -} - -void CollectionChangeBuilder::clean_up_stale_moves() -{ - // Look for moves which are now no-ops, and remove them plus the associated - // insert+delete. Note that this isn't just checking for from == to due to - // that rows can also be shifted by other inserts and deletes - moves.erase(remove_if(begin(moves), end(moves), [&](auto const& move) { - if (move.from - deletions.count(0, move.from) != move.to - insertions.count(0, move.to)) - return false; - deletions.remove(move.from); - insertions.remove(move.to); - return true; - }), end(moves)); -} - -void CollectionChangeBuilder::parse_complete() -{ - moves.reserve(m_move_mapping.size()); - for (auto move : m_move_mapping) { - REALM_ASSERT_DEBUG(deletions.contains(move.second)); - REALM_ASSERT_DEBUG(insertions.contains(move.first)); - moves.push_back({move.second, move.first}); - } - m_move_mapping.clear(); - std::sort(begin(moves), end(moves), - [](auto const& a, auto const& b) { return a.from < b.from; }); -} - -void CollectionChangeBuilder::modify(size_t ndx) -{ - modifications.add(ndx); -} - -void CollectionChangeBuilder::insert(size_t index, size_t count, bool track_moves) -{ - modifications.shift_for_insert_at(index, count); - if (!track_moves) - return; - - insertions.insert_at(index, count); - - for (auto& move : moves) { - if (move.to >= index) - ++move.to; - } -} - -void CollectionChangeBuilder::erase(size_t index) -{ - modifications.erase_at(index); - size_t unshifted = insertions.erase_or_unshift(index); - if (unshifted != IndexSet::npos) - deletions.add_shifted(unshifted); - - for (size_t i = 0; i < moves.size(); ++i) { - auto& move = moves[i]; - if (move.to == index) { - moves.erase(moves.begin() + i); - --i; - } - else if (move.to > index) - --move.to; - } -} - -void CollectionChangeBuilder::clear(size_t old_size) -{ - if (old_size != std::numeric_limits::max()) { - for (auto range : deletions) - old_size += range.second - range.first; - for (auto range : insertions) - old_size -= range.second - range.first; - } - - modifications.clear(); - insertions.clear(); - moves.clear(); - m_move_mapping.clear(); - deletions.set(old_size); -} - -void CollectionChangeBuilder::move(size_t from, size_t to) -{ - REALM_ASSERT(from != to); - - bool updated_existing_move = false; - for (auto& move : moves) { - if (move.to != from) { - // Shift other moves if this row is moving from one side of them - // to the other - if (move.to >= to && move.to < from) - ++move.to; - else if (move.to <= to && move.to > from) - --move.to; - continue; - } - REALM_ASSERT(!updated_existing_move); - - // Collapse A -> B, B -> C into a single A -> C move - move.to = to; - updated_existing_move = true; - - insertions.erase_at(from); - insertions.insert_at(to); - } - - if (!updated_existing_move) { - auto shifted_from = insertions.erase_or_unshift(from); - insertions.insert_at(to); - - // Don't report deletions/moves for newly inserted rows - if (shifted_from != IndexSet::npos) { - shifted_from = deletions.add_shifted(shifted_from); - moves.push_back({shifted_from, to}); - } - } - - bool modified = modifications.contains(from); - modifications.erase_at(from); - - if (modified) - modifications.insert_at(to); - else - modifications.shift_for_insert_at(to); -} - -void CollectionChangeBuilder::move_over(size_t row_ndx, size_t last_row, bool track_moves) -{ - REALM_ASSERT(row_ndx <= last_row); - REALM_ASSERT(insertions.empty() || prev(insertions.end())->second - 1 <= last_row); - REALM_ASSERT(modifications.empty() || prev(modifications.end())->second - 1 <= last_row); - - if (row_ndx == last_row) { - if (track_moves) { - auto shifted_from = insertions.erase_or_unshift(row_ndx); - if (shifted_from != IndexSet::npos) - deletions.add_shifted(shifted_from); - m_move_mapping.erase(row_ndx); - } - modifications.remove(row_ndx); - return; - } - - bool modified = modifications.contains(last_row); - if (modified) { - modifications.remove(last_row); - modifications.add(row_ndx); - } - else - modifications.remove(row_ndx); - - if (!track_moves) - return; - - bool row_is_insertion = insertions.contains(row_ndx); - bool last_is_insertion = !insertions.empty() && prev(insertions.end())->second == last_row + 1; - REALM_ASSERT_DEBUG(insertions.empty() || prev(insertions.end())->second <= last_row + 1); - - // Collapse A -> B, B -> C into a single A -> C move - bool last_was_already_moved = false; - if (last_is_insertion) { - auto it = m_move_mapping.find(last_row); - if (it != m_move_mapping.end() && it->first == last_row) { - m_move_mapping[row_ndx] = it->second; - m_move_mapping.erase(it); - last_was_already_moved = true; - } - } - - // Remove moves to the row being deleted - if (row_is_insertion && !last_was_already_moved) { - auto it = m_move_mapping.find(row_ndx); - if (it != m_move_mapping.end() && it->first == row_ndx) - m_move_mapping.erase(it); - } - - // Don't report deletions/moves if last_row is newly inserted - if (last_is_insertion) { - insertions.remove(last_row); - } - // If it was previously moved, the unshifted source row has already been marked as deleted - else if (!last_was_already_moved) { - auto shifted_last_row = insertions.unshift(last_row); - shifted_last_row = deletions.add_shifted(shifted_last_row); - m_move_mapping[row_ndx] = shifted_last_row; - } - - // Don't mark the moved-over row as deleted if it was a new insertion - if (!row_is_insertion) { - deletions.add_shifted(insertions.unshift(row_ndx)); - insertions.add(row_ndx); - } - verify(); -} - -void CollectionChangeBuilder::verify() -{ -#ifdef REALM_DEBUG - for (auto&& move : moves) { - REALM_ASSERT(deletions.contains(move.from)); - REALM_ASSERT(insertions.contains(move.to)); - } -#endif -} - -namespace { -struct RowInfo { - size_t row_index; - size_t prev_tv_index; - size_t tv_index; - size_t shifted_tv_index; -}; - -void calculate_moves_unsorted(std::vector& new_rows, IndexSet& removed, CollectionChangeSet& changeset) -{ - size_t expected = 0; - for (auto& row : new_rows) { - // With unsorted queries rows only move due to move_last_over(), which - // inherently can only move a row to earlier in the table. - REALM_ASSERT(row.shifted_tv_index >= expected); - if (row.shifted_tv_index == expected) { - ++expected; - continue; - } - - // This row isn't just the row after the previous one, but it still may - // not be a move if there were rows deleted between the two, so next - // calcuate what row should be here taking those in to account - size_t calc_expected = row.tv_index - changeset.insertions.count(0, row.tv_index) + removed.count(0, row.prev_tv_index); - if (row.shifted_tv_index == calc_expected) { - expected = calc_expected + 1; - continue; - } - - // The row still isn't the expected one, so it's a move - changeset.moves.push_back({row.prev_tv_index, row.tv_index}); - changeset.insertions.add(row.tv_index); - removed.add(row.prev_tv_index); - } -} - -class LongestCommonSubsequenceCalculator { -public: - // A pair of an index in the table and an index in the table view - struct Row { - size_t row_index; - size_t tv_index; - }; - - struct Match { - // The index in `a` at which this match begins - size_t i; - // The index in `b` at which this match begins - size_t j; - // The length of this match - size_t size; - // The number of rows in this block which were modified - size_t modified; - }; - std::vector m_longest_matches; - - LongestCommonSubsequenceCalculator(std::vector& a, std::vector& b, - size_t start_index, - IndexSet const& modifications) - : m_modified(modifications) - , a(a), b(b) - { - find_longest_matches(start_index, a.size(), - start_index, b.size()); - m_longest_matches.push_back({a.size(), b.size(), 0}); - } - -private: - IndexSet const& m_modified; - - // The two arrays of rows being diffed - // a is sorted by tv_index, b is sorted by row_index - std::vector &a, &b; - - // Find the longest matching range in (a + begin1, a + end1) and (b + begin2, b + end2) - // "Matching" is defined as "has the same row index"; the TV index is just - // there to let us turn an index in a/b into an index which can be reported - // in the output changeset. - // - // This is done with the O(N) space variant of the dynamic programming - // algorithm for longest common subsequence, where N is the maximum number - // of the most common row index (which for everything but linkview-derived - // TVs will be 1). - Match find_longest_match(size_t begin1, size_t end1, size_t begin2, size_t end2) - { - struct Length { - size_t j, len; - }; - // The length of the matching block for each `j` for the previously checked row - std::vector prev; - // The length of the matching block for each `j` for the row currently being checked - std::vector cur; - - // Calculate the length of the matching block *ending* at b[j], which - // is 1 if b[j - 1] did not match, and b[j - 1] + 1 otherwise. - auto length = [&](size_t j) -> size_t { - for (auto const& pair : prev) { - if (pair.j + 1 == j) - return pair.len + 1; - } - return 1; - }; - - // Iterate over each `j` which has the same row index as a[i] and falls - // within the range begin2 <= j < end2 - auto for_each_b_match = [&](size_t i, auto&& f) { - size_t ai = a[i].row_index; - // Find the TV indicies at which this row appears in the new results - // There should always be at least one (or it would have been - // filtered out earlier), but there can be multiple if there are dupes - auto it = lower_bound(begin(b), end(b), ai, - [](auto lft, auto rgt) { return lft.row_index < rgt; }); - REALM_ASSERT(it != end(b) && it->row_index == ai); - for (; it != end(b) && it->row_index == ai; ++it) { - size_t j = it->tv_index; - if (j < begin2) - continue; - if (j >= end2) - break; // b is sorted by tv_index so this can't transition from false to true - f(j); - } - }; - - Match best = {begin1, begin2, 0, 0}; - for (size_t i = begin1; i < end1; ++i) { - // prev = std::move(cur), but avoids discarding prev's heap allocation - cur.swap(prev); - cur.clear(); - - for_each_b_match(i, [&](size_t j) { - size_t size = length(j); - - cur.push_back({j, size}); - - // If the matching block ending at a[i] and b[j] is longer than - // the previous one, select it as the best - if (size > best.size) - best = {i - size + 1, j - size + 1, size, IndexSet::npos}; - // Given two equal-length matches, prefer the one with fewer modified rows - else if (size == best.size) { - if (best.modified == IndexSet::npos) - best.modified = m_modified.count(best.j - size + 1, best.j + 1); - auto count = m_modified.count(j - size + 1, j + 1); - if (count < best.modified) - best = {i - size + 1, j - size + 1, size, count}; - } - - // The best block should always fall within the range being searched - REALM_ASSERT(best.i >= begin1 && best.i + best.size <= end1); - REALM_ASSERT(best.j >= begin2 && best.j + best.size <= end2); - }); - } - return best; - } - - void find_longest_matches(size_t begin1, size_t end1, size_t begin2, size_t end2) - { - // FIXME: recursion could get too deep here - // recursion depth worst case is currently O(N) and each recursion uses 320 bytes of stack - // could reduce worst case to O(sqrt(N)) (and typical case to O(log N)) - // biasing equal selections towards the middle, but that's still - // insufficient for Android's 8 KB stacks - auto m = find_longest_match(begin1, end1, begin2, end2); - if (!m.size) - return; - if (m.i > begin1 && m.j > begin2) - find_longest_matches(begin1, m.i, begin2, m.j); - m_longest_matches.push_back(m); - if (m.i + m.size < end2 && m.j + m.size < end2) - find_longest_matches(m.i + m.size, end1, m.j + m.size, end2); - } -}; - -void calculate_moves_sorted(std::vector& rows, CollectionChangeSet& changeset) -{ - // The RowInfo array contains information about the old and new TV indices of - // each row, which we need to turn into two sequences of rows, which we'll - // then find matches in - std::vector a, b; - - a.reserve(rows.size()); - for (auto& row : rows) { - a.push_back({row.row_index, row.prev_tv_index}); - } - std::sort(begin(a), end(a), [](auto lft, auto rgt) { - return std::tie(lft.tv_index, lft.row_index) < std::tie(rgt.tv_index, rgt.row_index); - }); - - // Before constructing `b`, first find the first index in `a` which will - // actually differ in `b`, and skip everything else if there aren't any - size_t first_difference = IndexSet::npos; - for (size_t i = 0; i < a.size(); ++i) { - if (a[i].row_index != rows[i].row_index) { - first_difference = i; - break; - } - } - if (first_difference == IndexSet::npos) - return; - - // Note that `b` is sorted by row_index, while `a` is sorted by tv_index - b.reserve(rows.size()); - for (size_t i = 0; i < rows.size(); ++i) - b.push_back({rows[i].row_index, i}); - std::sort(begin(b), end(b), [](auto lft, auto rgt) { - return std::tie(lft.row_index, lft.tv_index) < std::tie(rgt.row_index, rgt.tv_index); - }); - - // Calculate the LCS of the two sequences - auto matches = LongestCommonSubsequenceCalculator(a, b, first_difference, - changeset.modifications).m_longest_matches; - - // And then insert and delete rows as needed to align them - size_t i = first_difference, j = first_difference; - for (auto match : matches) { - for (; i < match.i; ++i) - changeset.deletions.add(a[i].tv_index); - for (; j < match.j; ++j) - changeset.insertions.add(rows[j].tv_index); - i += match.size; - j += match.size; - } -} - -} // Anonymous namespace - -CollectionChangeBuilder CollectionChangeBuilder::calculate(std::vector const& prev_rows, - std::vector const& next_rows, - std::function row_did_change, - bool rows_are_in_table_order) -{ - REALM_ASSERT_DEBUG(!rows_are_in_table_order || std::is_sorted(begin(next_rows), end(next_rows))); - - CollectionChangeBuilder ret; - - size_t deleted = 0; - std::vector old_rows; - old_rows.reserve(prev_rows.size()); - for (size_t i = 0; i < prev_rows.size(); ++i) { - if (prev_rows[i] == IndexSet::npos) { - ++deleted; - ret.deletions.add(i); - } - else - old_rows.push_back({prev_rows[i], IndexSet::npos, i, i - deleted}); - } - std::sort(begin(old_rows), end(old_rows), [](auto& lft, auto& rgt) { - return lft.row_index < rgt.row_index; - }); - - std::vector new_rows; - new_rows.reserve(next_rows.size()); - for (size_t i = 0; i < next_rows.size(); ++i) { - new_rows.push_back({next_rows[i], IndexSet::npos, i, 0}); - } - std::sort(begin(new_rows), end(new_rows), [](auto& lft, auto& rgt) { - return lft.row_index < rgt.row_index; - }); - - // Don't add rows which were modified to not match the query to `deletions` - // immediately because the unsorted move logic needs to be able to - // distinguish them from rows which were outright deleted - IndexSet removed; - - // Now that our old and new sets of rows are sorted by row index, we can - // iterate over them and either record old+new TV indices for rows present - // in both, or mark them as inserted/deleted if they appear only in one - size_t i = 0, j = 0; - while (i < old_rows.size() && j < new_rows.size()) { - auto old_index = old_rows[i]; - auto new_index = new_rows[j]; - if (old_index.row_index == new_index.row_index) { - new_rows[j].prev_tv_index = old_rows[i].tv_index; - new_rows[j].shifted_tv_index = old_rows[i].shifted_tv_index; - ++i; - ++j; - } - else if (old_index.row_index < new_index.row_index) { - removed.add(old_index.tv_index); - ++i; - } - else { - ret.insertions.add(new_index.tv_index); - ++j; - } - } - - for (; i < old_rows.size(); ++i) - removed.add(old_rows[i].tv_index); - for (; j < new_rows.size(); ++j) - ret.insertions.add(new_rows[j].tv_index); - - // Filter out the new insertions since we don't need them for any of the - // further calculations - new_rows.erase(std::remove_if(begin(new_rows), end(new_rows), - [](auto& row) { return row.prev_tv_index == IndexSet::npos; }), - end(new_rows)); - std::sort(begin(new_rows), end(new_rows), - [](auto& lft, auto& rgt) { return lft.tv_index < rgt.tv_index; }); - - for (auto& row : new_rows) { - if (row_did_change(row.row_index)) { - ret.modifications.add(row.tv_index); - } - } - - if (!rows_are_in_table_order) { - calculate_moves_sorted(new_rows, ret); - } - else { - calculate_moves_unsorted(new_rows, removed, ret); - } - ret.deletions.add(removed); - ret.verify(); - -#ifdef REALM_DEBUG - { // Verify that applying the calculated change to prev_rows actually produces next_rows - auto rows = prev_rows; - auto it = util::make_reverse_iterator(ret.deletions.end()); - auto end = util::make_reverse_iterator(ret.deletions.begin()); - for (; it != end; ++it) { - rows.erase(rows.begin() + it->first, rows.begin() + it->second); - } - - for (auto i : ret.insertions.as_indexes()) { - rows.insert(rows.begin() + i, next_rows[i]); - } - - REALM_ASSERT(rows == next_rows); - } -#endif - - return ret; -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/collection_notifier.cpp b/Pods/Realm/Realm/ObjectStore/impl/collection_notifier.cpp deleted file mode 100644 index 7751c3ac..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/collection_notifier.cpp +++ /dev/null @@ -1,344 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/collection_notifier.hpp" - -#include "impl/realm_coordinator.hpp" -#include "shared_realm.hpp" - -#include - -using namespace realm; -using namespace realm::_impl; - -std::function -CollectionNotifier::get_modification_checker(TransactionChangeInfo const& info, - Table const& root_table) -{ - // First check if any of the tables accessible from the root table were - // actually modified. This can be false if there were only insertions, or - // deletions which were not linked to by any row in the linking table - auto table_modified = [&](auto& tbl) { - return tbl.table_ndx < info.tables.size() - && !info.tables[tbl.table_ndx].modifications.empty(); - }; - if (!any_of(begin(m_related_tables), end(m_related_tables), table_modified)) { - return [](size_t) { return false; }; - } - - return DeepChangeChecker(info, root_table, m_related_tables); -} - -void DeepChangeChecker::find_related_tables(std::vector& out, Table const& table) -{ - auto table_ndx = table.get_index_in_group(); - if (any_of(begin(out), end(out), [=](auto& tbl) { return tbl.table_ndx == table_ndx; })) - return; - - // We need to add this table to `out` before recurring so that the check - // above works, but we can't store a pointer to the thing being populated - // because the recursive calls may resize `out`, so instead look it up by - // index every time - size_t out_index = out.size(); - out.push_back({table_ndx, {}}); - - for (size_t i = 0, count = table.get_column_count(); i != count; ++i) { - auto type = table.get_column_type(i); - if (type == type_Link || type == type_LinkList) { - out[out_index].links.push_back({i, type == type_LinkList}); - find_related_tables(out, *table.get_link_target(i)); - } - } -} - -DeepChangeChecker::DeepChangeChecker(TransactionChangeInfo const& info, - Table const& root_table, - std::vector const& related_tables) -: m_info(info) -, m_root_table(root_table) -, m_root_table_ndx(root_table.get_index_in_group()) -, m_root_modifications(m_root_table_ndx < info.tables.size() ? &info.tables[m_root_table_ndx].modifications : nullptr) -, m_related_tables(related_tables) -{ -} - -bool DeepChangeChecker::check_outgoing_links(size_t table_ndx, - Table const& table, - size_t row_ndx, size_t depth) -{ - auto it = find_if(begin(m_related_tables), end(m_related_tables), - [&](auto&& tbl) { return tbl.table_ndx == table_ndx; }); - if (it == m_related_tables.end()) - return false; - - // Check if we're already checking if the destination of the link is - // modified, and if not add it to the stack - auto already_checking = [&](size_t col) { - for (auto p = m_current_path.begin(); p < m_current_path.begin() + depth; ++p) { - if (p->table == table_ndx && p->row == row_ndx && p->col == col) - return true; - } - m_current_path[depth] = {table_ndx, row_ndx, col, false}; - return false; - }; - - for (auto const& link : it->links) { - if (already_checking(link.col_ndx)) - continue; - if (!link.is_list) { - if (table.is_null_link(link.col_ndx, row_ndx)) - continue; - auto dst = table.get_link(link.col_ndx, row_ndx); - return check_row(*table.get_link_target(link.col_ndx), dst, depth + 1); - } - - auto& target = *table.get_link_target(link.col_ndx); - auto lvr = table.get_linklist(link.col_ndx, row_ndx); - for (size_t j = 0, size = lvr->size(); j < size; ++j) { - size_t dst = lvr->get(j).get_index(); - if (check_row(target, dst, depth + 1)) - return true; - } - } - - return false; -} - -bool DeepChangeChecker::check_row(Table const& table, size_t idx, size_t depth) -{ - // Arbitrary upper limit on the maximum depth to search - if (depth >= m_current_path.size()) { - // Don't mark any of the intermediate rows checked along the path as - // not modified, as a search starting from them might hit a modification - for (size_t i = 1; i < m_current_path.size(); ++i) - m_current_path[i].depth_exceeded = true; - return false; - } - - size_t table_ndx = table.get_index_in_group(); - if (depth > 0 && table_ndx < m_info.tables.size() && m_info.tables[table_ndx].modifications.contains(idx)) - return true; - - if (m_not_modified.size() <= table_ndx) - m_not_modified.resize(table_ndx + 1); - if (m_not_modified[table_ndx].contains(idx)) - return false; - - bool ret = check_outgoing_links(table_ndx, table, idx, depth); - if (!ret && !m_current_path[depth].depth_exceeded) - m_not_modified[table_ndx].add(idx); - return ret; -} - -bool DeepChangeChecker::operator()(size_t ndx) -{ - if (m_root_modifications && m_root_modifications->contains(ndx)) - return true; - return check_row(m_root_table, ndx, 0); -} - -CollectionNotifier::CollectionNotifier(std::shared_ptr realm) -: m_realm(std::move(realm)) -, m_sg_version(Realm::Internal::get_shared_group(*m_realm).get_version_of_current_transaction()) -{ -} - -CollectionNotifier::~CollectionNotifier() -{ - // Need to do this explicitly to ensure m_realm is destroyed with the mutex - // held to avoid potential double-deletion - unregister(); -} - -size_t CollectionNotifier::add_callback(CollectionChangeCallback callback) -{ - m_realm->verify_thread(); - - auto next_token = [=] { - size_t token = 0; - for (auto& callback : m_callbacks) { - if (token <= callback.token) { - token = callback.token + 1; - } - } - return token; - }; - - std::lock_guard lock(m_callback_mutex); - auto token = next_token(); - m_callbacks.push_back({std::move(callback), token, false}); - if (m_callback_index == npos) { // Don't need to wake up if we're already sending notifications - Realm::Internal::get_coordinator(*m_realm).send_commit_notifications(); - m_have_callbacks = true; - } - return token; -} - -void CollectionNotifier::remove_callback(size_t token) -{ - Callback old; - { - std::lock_guard lock(m_callback_mutex); - REALM_ASSERT(m_error || m_callbacks.size() > 0); - - auto it = find_if(begin(m_callbacks), end(m_callbacks), - [=](const auto& c) { return c.token == token; }); - // We should only fail to find the callback if it was removed due to an error - REALM_ASSERT(m_error || it != end(m_callbacks)); - if (it == end(m_callbacks)) { - return; - } - - size_t idx = distance(begin(m_callbacks), it); - if (m_callback_index != npos && m_callback_index >= idx) { - --m_callback_index; - } - - old = std::move(*it); - m_callbacks.erase(it); - - m_have_callbacks = !m_callbacks.empty(); - } -} - -void CollectionNotifier::unregister() noexcept -{ - std::lock_guard lock(m_realm_mutex); - m_realm = nullptr; -} - -bool CollectionNotifier::is_alive() const noexcept -{ - std::lock_guard lock(m_realm_mutex); - return m_realm != nullptr; -} - -std::unique_lock CollectionNotifier::lock_target() -{ - return std::unique_lock{m_realm_mutex}; -} - -void CollectionNotifier::set_table(Table const& table) -{ - m_related_tables.clear(); - DeepChangeChecker::find_related_tables(m_related_tables, table); -} - -void CollectionNotifier::add_required_change_info(TransactionChangeInfo& info) -{ - if (!do_add_required_change_info(info)) { - return; - } - - auto max = max_element(begin(m_related_tables), end(m_related_tables), - [](auto&& a, auto&& b) { return a.table_ndx < b.table_ndx; }); - - if (max->table_ndx >= info.table_modifications_needed.size()) - info.table_modifications_needed.resize(max->table_ndx + 1, false); - for (auto& tbl : m_related_tables) { - info.table_modifications_needed[tbl.table_ndx] = true; - } -} - -void CollectionNotifier::prepare_handover() -{ - REALM_ASSERT(m_sg); - m_sg_version = m_sg->get_version_of_current_transaction(); - do_prepare_handover(*m_sg); -} - -bool CollectionNotifier::deliver(Realm& realm, SharedGroup& sg, std::exception_ptr err) -{ - { - std::lock_guard lock(m_realm_mutex); - if (m_realm.get() != &realm) { - return false; - } - } - - if (err) { - m_error = err; - return have_callbacks(); - } - - auto realm_sg_version = sg.get_version_of_current_transaction(); - if (version() != realm_sg_version) { - // Realm version can be newer if a commit was made on our thread or the - // user manually called refresh(), or older if a commit was made on a - // different thread and we ran *really* fast in between the check for - // if the shared group has changed and when we pick up async results - return false; - } - - bool should_call_callbacks = do_deliver(sg); - m_changes_to_deliver = std::move(m_accumulated_changes); - - // fixup modifications to be source rows rather than dest rows - // FIXME: the actual change calculations should be updated to just calculate - // the correct thing instead - m_changes_to_deliver.modifications.erase_at(m_changes_to_deliver.insertions); - m_changes_to_deliver.modifications.shift_for_insert_at(m_changes_to_deliver.deletions); - - return should_call_callbacks && have_callbacks(); -} - -void CollectionNotifier::call_callbacks() -{ - while (auto fn = next_callback()) { - fn(m_changes_to_deliver, m_error); - } - - if (m_error) { - // Remove all the callbacks as we never need to call anything ever again - // after delivering an error - std::lock_guard callback_lock(m_callback_mutex); - m_callbacks.clear(); - } -} - -CollectionChangeCallback CollectionNotifier::next_callback() -{ - std::lock_guard callback_lock(m_callback_mutex); - - for (++m_callback_index; m_callback_index < m_callbacks.size(); ++m_callback_index) { - auto& callback = m_callbacks[m_callback_index]; - if (!m_error && callback.initial_delivered && m_changes_to_deliver.empty()) { - continue; - } - callback.initial_delivered = true; - return callback.fn; - } - - m_callback_index = npos; - return nullptr; -} - -void CollectionNotifier::attach_to(SharedGroup& sg) -{ - REALM_ASSERT(!m_sg); - - m_sg = &sg; - do_attach_to(sg); -} - -void CollectionNotifier::detach() -{ - REALM_ASSERT(m_sg); - do_detach_from(*m_sg); - m_sg = nullptr; -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/list_notifier.cpp b/Pods/Realm/Realm/ObjectStore/impl/list_notifier.cpp deleted file mode 100644 index 64bf6daf..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/list_notifier.cpp +++ /dev/null @@ -1,122 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/list_notifier.hpp" - -#include "shared_realm.hpp" - -#include - -using namespace realm; -using namespace realm::_impl; - -ListNotifier::ListNotifier(LinkViewRef lv, std::shared_ptr realm) -: CollectionNotifier(std::move(realm)) -, m_prev_size(lv->size()) -{ - // Find the lv's column, since that isn't tracked directly - size_t row_ndx = lv->get_origin_row_index(); - m_col_ndx = not_found; - auto& table = lv->get_origin_table(); - for (size_t i = 0, count = table.get_column_count(); i != count; ++i) { - if (table.get_column_type(i) == type_LinkList && table.get_linklist(i, row_ndx) == lv) { - m_col_ndx = i; - break; - } - } - REALM_ASSERT(m_col_ndx != not_found); - - set_table(lv->get_target_table()); - - auto& sg = Realm::Internal::get_shared_group(*get_realm()); - m_lv_handover = sg.export_linkview_for_handover(lv); -} - -void ListNotifier::release_data() noexcept -{ - m_lv.reset(); -} - -void ListNotifier::do_attach_to(SharedGroup& sg) -{ - REALM_ASSERT(m_lv_handover); - REALM_ASSERT(!m_lv); - m_lv = sg.import_linkview_from_handover(std::move(m_lv_handover)); -} - -void ListNotifier::do_detach_from(SharedGroup& sg) -{ - REALM_ASSERT(!m_lv_handover); - if (m_lv) { - m_lv_handover = sg.export_linkview_for_handover(m_lv); - m_lv = {}; - } -} - -bool ListNotifier::do_add_required_change_info(TransactionChangeInfo& info) -{ - REALM_ASSERT(!m_lv_handover); - if (!m_lv || !m_lv->is_attached()) { - return false; // origin row was deleted after the notification was added - } - - size_t row_ndx = m_lv->get_origin_row_index(); - auto& table = m_lv->get_origin_table(); - info.lists.push_back({table.get_index_in_group(), row_ndx, m_col_ndx, &m_change}); - - m_info = &info; - return true; -} - -void ListNotifier::run() -{ - if (!m_lv || !m_lv->is_attached()) { - // LV was deleted, so report all of the rows being removed if this is - // the first run after that - if (m_prev_size) { - m_change.deletions.set(m_prev_size); - m_prev_size = 0; - } - else { - m_change = {}; - } - return; - } - - auto row_did_change = get_modification_checker(*m_info, m_lv->get_target_table()); - for (size_t i = 0; i < m_lv->size(); ++i) { - if (m_change.modifications.contains(i)) - continue; - if (row_did_change(m_lv->get(i).get_index())) - m_change.modifications.add(i); - } - - for (auto const& move : m_change.moves) { - if (m_change.modifications.contains(move.to)) - continue; - if (row_did_change(m_lv->get(move.to).get_index())) - m_change.modifications.add(move.to); - } - - m_prev_size = m_lv->size(); -} - -void ListNotifier::do_prepare_handover(SharedGroup&) -{ - add_changes(std::move(m_change)); -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/realm_coordinator.cpp b/Pods/Realm/Realm/ObjectStore/impl/realm_coordinator.cpp deleted file mode 100644 index 6050fba0..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/realm_coordinator.cpp +++ /dev/null @@ -1,606 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/realm_coordinator.hpp" - -#include "impl/collection_notifier.hpp" -#include "impl/external_commit_helper.hpp" -#include "impl/transact_log_handler.hpp" -#include "impl/weak_realm_notifier.hpp" -#include "object_store.hpp" -#include "schema.hpp" - -#include -#include -#include -#include - -#include - -using namespace realm; -using namespace realm::_impl; - -static std::mutex s_coordinator_mutex; -static std::unordered_map> s_coordinators_per_path; - -std::shared_ptr RealmCoordinator::get_coordinator(StringData path) -{ - std::lock_guard lock(s_coordinator_mutex); - - auto& weak_coordinator = s_coordinators_per_path[path]; - if (auto coordinator = weak_coordinator.lock()) { - return coordinator; - } - - auto coordinator = std::make_shared(); - weak_coordinator = coordinator; - return coordinator; -} - -std::shared_ptr RealmCoordinator::get_existing_coordinator(StringData path) -{ - std::lock_guard lock(s_coordinator_mutex); - auto it = s_coordinators_per_path.find(path); - return it == s_coordinators_per_path.end() ? nullptr : it->second.lock(); -} - -std::shared_ptr RealmCoordinator::get_realm(Realm::Config config) -{ - std::lock_guard lock(m_realm_mutex); - if ((!m_config.read_only && !m_notifier) || (m_config.read_only && m_weak_realm_notifiers.empty())) { - m_config = config; - if (!config.read_only && !m_notifier && config.automatic_change_notifications) { - try { - m_notifier = std::make_unique(*this); - } - catch (std::system_error const& ex) { - throw RealmFileException(RealmFileException::Kind::AccessError, config.path, ex.code().message(), ""); - } - } - } - else { - if (m_config.read_only != config.read_only) { - throw MismatchedConfigException("Realm at path already opened with different read permissions."); - } - if (m_config.in_memory != config.in_memory) { - throw MismatchedConfigException("Realm at path already opened with different inMemory settings."); - } - if (m_config.encryption_key != config.encryption_key) { - throw MismatchedConfigException("Realm at path already opened with a different encryption key."); - } - if (m_config.schema_version != config.schema_version && config.schema_version != ObjectStore::NotVersioned) { - throw MismatchedConfigException("Realm at path already opened with different schema version."); - } - // FIXME: verify that schema is compatible - // Needs to verify that all tables present in both are identical, and - // then updated m_config with any tables present in config but not in - // it - // Public API currently doesn't make it possible to have non-matching - // schemata so it's not a huge issue - if ((false) && m_config.schema != config.schema) { - throw MismatchedConfigException("Realm at path already opened with different schema"); - } - } - - if (config.cache) { - for (auto& cachedRealm : m_weak_realm_notifiers) { - if (cachedRealm.is_cached_for_current_thread()) { - // can be null if we jumped in between ref count hitting zero and - // unregister_realm() getting the lock - if (auto realm = cachedRealm.realm()) { - return realm; - } - } - } - } - - auto realm = std::make_shared(std::move(config)); - realm->init(shared_from_this()); - m_weak_realm_notifiers.emplace_back(realm, m_config.cache); - return realm; -} - -std::shared_ptr RealmCoordinator::get_realm() -{ - return get_realm(m_config); -} - -const Schema* RealmCoordinator::get_schema() const noexcept -{ - return m_weak_realm_notifiers.empty() ? nullptr : m_config.schema.get(); -} - -void RealmCoordinator::update_schema(Schema const& schema) -{ - // FIXME: this should probably be doing some sort of validation and - // notifying all Realm instances of the new schema in some way - m_config.schema = std::make_unique(schema); -} - -RealmCoordinator::RealmCoordinator() = default; - -RealmCoordinator::~RealmCoordinator() -{ - std::lock_guard coordinator_lock(s_coordinator_mutex); - for (auto it = s_coordinators_per_path.begin(); it != s_coordinators_per_path.end(); ) { - if (it->second.expired()) { - it = s_coordinators_per_path.erase(it); - } - else { - ++it; - } - } -} - -void RealmCoordinator::unregister_realm(Realm* realm) -{ - std::lock_guard lock(m_realm_mutex); - for (size_t i = 0; i < m_weak_realm_notifiers.size(); ++i) { - auto& weak_realm_notifier = m_weak_realm_notifiers[i]; - if (!weak_realm_notifier.expired() && !weak_realm_notifier.is_for_realm(realm)) { - continue; - } - - if (i + 1 < m_weak_realm_notifiers.size()) { - weak_realm_notifier = std::move(m_weak_realm_notifiers.back()); - } - m_weak_realm_notifiers.pop_back(); - } -} - -void RealmCoordinator::clear_cache() -{ - std::vector realms_to_close; - { - std::lock_guard lock(s_coordinator_mutex); - - for (auto& weak_coordinator : s_coordinators_per_path) { - auto coordinator = weak_coordinator.second.lock(); - if (!coordinator) { - continue; - } - - coordinator->m_notifier = nullptr; - - // Gather a list of all of the realms which will be removed - for (auto& weak_realm_notifier : coordinator->m_weak_realm_notifiers) { - if (auto realm = weak_realm_notifier.realm()) { - realms_to_close.push_back(realm); - } - } - } - - s_coordinators_per_path.clear(); - } - - // Close all of the previously cached Realms. This can't be done while - // s_coordinator_mutex is held as it may try to re-lock it. - for (auto& weak_realm : realms_to_close) { - if (auto realm = weak_realm.lock()) { - realm->close(); - } - } -} - -void RealmCoordinator::clear_all_caches() -{ - std::vector> to_clear; - { - std::lock_guard lock(s_coordinator_mutex); - for (auto iter : s_coordinators_per_path) { - to_clear.push_back(iter.second); - } - } - for (auto weak_coordinator : to_clear) { - if (auto coordinator = weak_coordinator.lock()) { - coordinator->clear_cache(); - } - } -} - -void RealmCoordinator::send_commit_notifications() -{ - REALM_ASSERT(!m_config.read_only); - if (m_notifier) { - m_notifier->notify_others(); - } -} - -void RealmCoordinator::pin_version(uint_fast64_t version, uint_fast32_t index) -{ - if (m_async_error) { - return; - } - - SharedGroup::VersionID versionid(version, index); - if (!m_advancer_sg) { - try { - std::unique_ptr read_only_group; - Realm::open_with_config(m_config, m_advancer_history, m_advancer_sg, read_only_group); - REALM_ASSERT(!read_only_group); - m_advancer_sg->begin_read(versionid); - } - catch (...) { - m_async_error = std::current_exception(); - m_advancer_sg = nullptr; - m_advancer_history = nullptr; - } - } - else if (m_new_notifiers.empty()) { - // If this is the first notifier then we don't already have a read transaction - REALM_ASSERT_3(m_advancer_sg->get_transact_stage(), ==, SharedGroup::transact_Ready); - m_advancer_sg->begin_read(versionid); - } - else { - REALM_ASSERT_3(m_advancer_sg->get_transact_stage(), ==, SharedGroup::transact_Reading); - if (versionid < m_advancer_sg->get_version_of_current_transaction()) { - // Ensure we're holding a readlock on the oldest version we have a - // handover object for, as handover objects don't - m_advancer_sg->end_read(); - m_advancer_sg->begin_read(versionid); - } - } -} - -void RealmCoordinator::register_notifier(std::shared_ptr notifier) -{ - auto version = notifier->version(); - auto& self = Realm::Internal::get_coordinator(*notifier->get_realm()); - { - std::lock_guard lock(self.m_notifier_mutex); - self.pin_version(version.version, version.index); - self.m_new_notifiers.push_back(std::move(notifier)); - } -} - -void RealmCoordinator::clean_up_dead_notifiers() -{ - auto swap_remove = [&](auto& container) { - bool did_remove = false; - for (size_t i = 0; i < container.size(); ++i) { - if (container[i]->is_alive()) - continue; - - // Ensure the notifier is destroyed here even if there's lingering refs - // to the async notifier elsewhere - container[i]->release_data(); - - if (container.size() > i + 1) - container[i] = std::move(container.back()); - container.pop_back(); - --i; - did_remove = true; - } - return did_remove; - }; - - if (swap_remove(m_notifiers)) { - // Make sure we aren't holding on to read versions needlessly if there - // are no notifiers left, but don't close them entirely as opening shared - // groups is expensive - if (m_notifiers.empty() && m_notifier_sg) { - REALM_ASSERT_3(m_notifier_sg->get_transact_stage(), ==, SharedGroup::transact_Reading); - m_notifier_sg->end_read(); - } - } - if (swap_remove(m_new_notifiers)) { - REALM_ASSERT_3(m_advancer_sg->get_transact_stage(), ==, SharedGroup::transact_Reading); - if (m_new_notifiers.empty() && m_advancer_sg) { - m_advancer_sg->end_read(); - } - } -} - -void RealmCoordinator::on_change() -{ - run_async_notifiers(); - - std::lock_guard lock(m_realm_mutex); - for (auto& realm : m_weak_realm_notifiers) { - realm.notify(); - } -} - -namespace { -class IncrementalChangeInfo { -public: - IncrementalChangeInfo(SharedGroup& sg, - std::vector>& notifiers) - : m_sg(sg) - { - if (notifiers.empty()) - return; - - auto cmp = [&](auto&& lft, auto&& rgt) { - return lft->version() < rgt->version(); - }; - - // Sort the notifiers by their source version so that we can pull them - // all forward to the latest version in a single pass over the transaction log - std::sort(notifiers.begin(), notifiers.end(), cmp); - - // Preallocate the required amount of space in the vector so that we can - // safely give out pointers to within the vector - size_t count = 1; - for (auto it = notifiers.begin(), next = it + 1; next != notifiers.end(); ++it, ++next) { - if (cmp(*it, *next)) - ++count; - } - m_info.reserve(count); - m_info.resize(1); - m_current = &m_info[0]; - } - - TransactionChangeInfo& current() const { return *m_current; } - - bool advance_incremental(SharedGroup::VersionID version) - { - if (version != m_sg.get_version_of_current_transaction()) { - transaction::advance(m_sg, *m_current, version); - m_info.push_back({ - m_current->table_modifications_needed, - m_current->table_moves_needed, - std::move(m_current->lists)}); - m_current = &m_info.back(); - return true; - } - return false; - } - - void advance_to_final(SharedGroup::VersionID version) - { - if (!m_current) { - transaction::advance(m_sg, nullptr, version); - return; - } - - transaction::advance(m_sg, *m_current, version); - - // We now need to combine the transaction change info objects so that all of - // the notifiers see the complete set of changes from their first version to - // the most recent one - for (size_t i = m_info.size() - 1; i > 0; --i) { - auto& cur = m_info[i]; - if (cur.tables.empty()) - continue; - auto& prev = m_info[i - 1]; - if (prev.tables.empty()) { - prev.tables = cur.tables; - continue; - } - - for (size_t j = 0; j < prev.tables.size() && j < cur.tables.size(); ++j) { - prev.tables[j].merge(CollectionChangeBuilder{cur.tables[j]}); - } - prev.tables.reserve(cur.tables.size()); - while (prev.tables.size() < cur.tables.size()) { - prev.tables.push_back(cur.tables[prev.tables.size()]); - } - } - - // Copy the list change info if there are multiple LinkViews for the same LinkList - auto id = [](auto const& list) { return std::tie(list.table_ndx, list.col_ndx, list.row_ndx); }; - for (size_t i = 1; i < m_current->lists.size(); ++i) { - for (size_t j = i; j > 0; --j) { - if (id(m_current->lists[i]) == id(m_current->lists[j - 1])) { - m_current->lists[j - 1].changes->merge(CollectionChangeBuilder{*m_current->lists[i].changes}); - } - } - } - } - -private: - std::vector m_info; - TransactionChangeInfo* m_current = nullptr; - SharedGroup& m_sg; -}; -} // anonymous namespace - -void RealmCoordinator::run_async_notifiers() -{ - std::unique_lock lock(m_notifier_mutex); - - clean_up_dead_notifiers(); - - if (m_notifiers.empty() && m_new_notifiers.empty()) { - return; - } - - if (!m_async_error) { - open_helper_shared_group(); - } - - if (m_async_error) { - std::move(m_new_notifiers.begin(), m_new_notifiers.end(), std::back_inserter(m_notifiers)); - m_new_notifiers.clear(); - return; - } - - SharedGroup::VersionID version; - - // Advance all of the new notifiers to the most recent version, if any - auto new_notifiers = std::move(m_new_notifiers); - IncrementalChangeInfo new_notifier_change_info(*m_advancer_sg, new_notifiers); - - if (!new_notifiers.empty()) { - REALM_ASSERT_3(m_advancer_sg->get_transact_stage(), ==, SharedGroup::transact_Reading); - REALM_ASSERT_3(m_advancer_sg->get_version_of_current_transaction().version, - <=, new_notifiers.front()->version().version); - - // The advancer SG can be at an older version than the oldest new notifier - // if a notifier was added and then removed before it ever got the chance - // to run, as we don't move the pin forward when removing dead notifiers - transaction::advance(*m_advancer_sg, nullptr, new_notifiers.front()->version()); - - // Advance each of the new notifiers to the latest version, attaching them - // to the SG at their handover version. This requires a unique - // TransactionChangeInfo for each source version, so that things don't - // see changes from before the version they were handed over from. - // Each Info has all of the changes between that source version and the - // next source version, and they'll be merged together later after - // releasing the lock - for (auto& notifier : new_notifiers) { - new_notifier_change_info.advance_incremental(notifier->version()); - notifier->attach_to(*m_advancer_sg); - notifier->add_required_change_info(new_notifier_change_info.current()); - } - new_notifier_change_info.advance_to_final(SharedGroup::VersionID{}); - - for (auto& notifier : new_notifiers) { - notifier->detach(); - } - version = m_advancer_sg->get_version_of_current_transaction(); - m_advancer_sg->end_read(); - } - REALM_ASSERT_3(m_advancer_sg->get_transact_stage(), ==, SharedGroup::transact_Ready); - - // Make a copy of the notifiers vector and then release the lock to avoid - // blocking other threads trying to register or unregister notifiers while we run them - auto notifiers = m_notifiers; - lock.unlock(); - - // Advance the non-new notifiers to the same version as we advanced the new - // ones to (or the latest if there were no new ones) - IncrementalChangeInfo change_info(*m_notifier_sg, notifiers); - for (auto& notifier : notifiers) { - notifier->add_required_change_info(change_info.current()); - } - change_info.advance_to_final(version); - - // Attach the new notifiers to the main SG and move them to the main list - for (auto& notifier : new_notifiers) { - notifier->attach_to(*m_notifier_sg); - } - std::move(new_notifiers.begin(), new_notifiers.end(), std::back_inserter(notifiers)); - - // Change info is now all ready, so the notifiers can now perform their - // background work - for (auto& notifier : notifiers) { - notifier->run(); - } - - // Reacquire the lock while updating the fields that are actually read on - // other threads - lock.lock(); - for (auto& notifier : notifiers) { - notifier->prepare_handover(); - } - m_notifiers = std::move(notifiers); - clean_up_dead_notifiers(); -} - -void RealmCoordinator::open_helper_shared_group() -{ - if (!m_notifier_sg) { - try { - std::unique_ptr read_only_group; - Realm::open_with_config(m_config, m_notifier_history, m_notifier_sg, read_only_group); - REALM_ASSERT(!read_only_group); - m_notifier_sg->begin_read(); - } - catch (...) { - // Store the error to be passed to the async notifiers - m_async_error = std::current_exception(); - m_notifier_sg = nullptr; - m_notifier_history = nullptr; - } - } - else if (m_notifiers.empty()) { - m_notifier_sg->begin_read(); - } -} - -void RealmCoordinator::advance_to_ready(Realm& realm) -{ - decltype(m_notifiers) notifiers; - - auto& sg = Realm::Internal::get_shared_group(realm); - - auto get_notifier_version = [&] { - for (auto& notifier : m_notifiers) { - auto version = notifier->version(); - if (version != SharedGroup::VersionID{}) { - return version; - } - } - return SharedGroup::VersionID{}; - }; - - SharedGroup::VersionID version; - { - std::lock_guard lock(m_notifier_mutex); - version = get_notifier_version(); - } - - // no async notifiers; just advance to latest - if (version.version == std::numeric_limits::max()) { - transaction::advance(sg, realm.m_binding_context.get()); - return; - } - - // async results are out of date; ignore - if (version < sg.get_version_of_current_transaction()) { - return; - } - - while (true) { - // Advance to the ready version without holding any locks because it - // may end up calling user code (in did_change() notifications) - transaction::advance(sg, realm.m_binding_context.get(), version); - - // Reacquire the lock and recheck the notifier version, as the notifiers may - // have advanced to a later version while we didn't hold the lock. If - // so, we need to release the lock and re-advance - std::lock_guard lock(m_notifier_mutex); - version = get_notifier_version(); - if (version.version == std::numeric_limits::max()) - return; - if (version != sg.get_version_of_current_transaction()) - continue; - - // Query version now matches the SG version, so we can deliver them - for (auto& notifier : m_notifiers) { - if (notifier->deliver(realm, sg, m_async_error)) { - notifiers.push_back(notifier); - } - } - break; - } - - for (auto& notifier : notifiers) { - notifier->call_callbacks(); - } -} - -void RealmCoordinator::process_available_async(Realm& realm) -{ - auto& sg = Realm::Internal::get_shared_group(realm); - decltype(m_notifiers) notifiers; - { - std::lock_guard lock(m_notifier_mutex); - for (auto& notifier : m_notifiers) { - if (notifier->deliver(realm, sg, m_async_error)) { - notifiers.push_back(notifier); - } - } - } - - for (auto& notifier : notifiers) { - notifier->call_callbacks(); - } -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/results_notifier.cpp b/Pods/Realm/Realm/ObjectStore/impl/results_notifier.cpp deleted file mode 100644 index 6e91f3d0..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/results_notifier.cpp +++ /dev/null @@ -1,211 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/results_notifier.hpp" - -#include "results.hpp" - -using namespace realm; -using namespace realm::_impl; - -ResultsNotifier::ResultsNotifier(Results& target) -: CollectionNotifier(target.get_realm()) -, m_target_results(&target) -, m_sort(target.get_sort()) -, m_target_is_in_table_order(target.is_in_table_order()) -{ - Query q = target.get_query(); - set_table(*q.get_table()); - m_query_handover = Realm::Internal::get_shared_group(*get_realm()).export_for_handover(q, MutableSourcePayload::Move); -} - -void ResultsNotifier::release_data() noexcept -{ - m_query = nullptr; -} - -// Most of the inter-thread synchronization for run(), prepare_handover(), -// attach_to(), detach(), release_data() and deliver() is done by -// RealmCoordinator external to this code, which has some potentially -// non-obvious results on which members are and are not safe to use without -// holding a lock. -// -// add_required_change_info(), attach_to(), detach(), run(), -// prepare_handover(), and release_data() are all only ever called on a single -// background worker thread. call_callbacks() and deliver() are called on the -// target thread. Calls to prepare_handover() and deliver() are guarded by a -// lock. -// -// In total, this means that the safe data flow is as follows: -// - add_Required_change_info(), prepare_handover(), attach_to(), detach() and -// release_data() can read members written by each other -// - deliver() can read members written to in prepare_handover(), deliver(), -// and call_callbacks() -// - call_callbacks() and read members written to in deliver() -// -// Separately from the handover data flow, m_target_results is guarded by the target lock - -bool ResultsNotifier::do_add_required_change_info(TransactionChangeInfo& info) -{ - REALM_ASSERT(m_query); - m_info = &info; - - auto table_ndx = m_query->get_table()->get_index_in_group(); - if (info.table_moves_needed.size() <= table_ndx) - info.table_moves_needed.resize(table_ndx + 1); - info.table_moves_needed[table_ndx] = true; - - return m_initial_run_complete && have_callbacks(); -} - -bool ResultsNotifier::need_to_run() -{ - REALM_ASSERT(m_info); - REALM_ASSERT(!m_tv.is_attached()); - - { - auto lock = lock_target(); - // Don't run the query if the results aren't actually going to be used - if (!get_realm() || (!have_callbacks() && !m_target_results->wants_background_updates())) { - return false; - } - } - - // If we've run previously, check if we need to rerun - if (m_initial_run_complete && m_query->sync_view_if_needed() == m_last_seen_version) { - return false; - } - - return true; -} - -void ResultsNotifier::calculate_changes() -{ - size_t table_ndx = m_query->get_table()->get_index_in_group(); - if (m_initial_run_complete) { - auto changes = table_ndx < m_info->tables.size() ? &m_info->tables[table_ndx] : nullptr; - - std::vector next_rows; - next_rows.reserve(m_tv.size()); - for (size_t i = 0; i < m_tv.size(); ++i) - next_rows.push_back(m_tv[i].get_index()); - - if (changes) { - auto const& moves = changes->moves; - for (auto& idx : m_previous_rows) { - auto it = lower_bound(begin(moves), end(moves), idx, - [](auto const& a, auto b) { return a.from < b; }); - if (it != moves.end() && it->from == idx) - idx = it->to; - else if (changes->deletions.contains(idx)) - idx = npos; - else - REALM_ASSERT_DEBUG(!changes->insertions.contains(idx)); - } - } - - m_changes = CollectionChangeBuilder::calculate(m_previous_rows, next_rows, - get_modification_checker(*m_info, *m_query->get_table()), - m_target_is_in_table_order && !m_sort); - - m_previous_rows = std::move(next_rows); - } - else { - m_previous_rows.resize(m_tv.size()); - for (size_t i = 0; i < m_tv.size(); ++i) - m_previous_rows[i] = m_tv[i].get_index(); - } -} - -void ResultsNotifier::run() -{ - if (!need_to_run()) - return; - - m_query->sync_view_if_needed(); - m_tv = m_query->find_all(); - if (m_sort) { - m_tv.sort(m_sort.column_indices, m_sort.ascending); - } - m_last_seen_version = m_tv.sync_if_needed(); - - calculate_changes(); -} - -void ResultsNotifier::do_prepare_handover(SharedGroup& sg) -{ - if (!m_tv.is_attached()) { - return; - } - - REALM_ASSERT(m_tv.is_in_sync()); - - m_initial_run_complete = true; - m_tv_handover = sg.export_for_handover(m_tv, MutableSourcePayload::Move); - - add_changes(std::move(m_changes)); - REALM_ASSERT(m_changes.empty()); - - // detach the TableView as we won't need it again and keeping it around - // makes advance_read() much more expensive - m_tv = {}; -} - -bool ResultsNotifier::do_deliver(SharedGroup& sg) -{ - auto lock = lock_target(); - - // Target realm being null here indicates that we were unregistered while we - // were in the process of advancing the Realm version and preparing for - // delivery, i.e. the results was destroyed from the "wrong" thread - if (!get_realm()) { - return false; - } - - // We can get called before the query has actually had the chance to run if - // we're added immediately before a different set of async results are - // delivered - if (!m_initial_run_complete) { - return false; - } - - REALM_ASSERT(!m_query_handover); - - if (m_tv_handover) { - m_tv_handover->version = version(); - Results::Internal::set_table_view(*m_target_results, - std::move(*sg.import_from_handover(std::move(m_tv_handover)))); - } - REALM_ASSERT(!m_tv_handover); - return true; -} - -void ResultsNotifier::do_attach_to(SharedGroup& sg) -{ - REALM_ASSERT(m_query_handover); - m_query = sg.import_from_handover(std::move(m_query_handover)); -} - -void ResultsNotifier::do_detach_from(SharedGroup& sg) -{ - REALM_ASSERT(m_query); - REALM_ASSERT(!m_tv.is_attached()); - - m_query_handover = sg.export_for_handover(*m_query, MutableSourcePayload::Move); - m_query = nullptr; -} diff --git a/Pods/Realm/Realm/ObjectStore/impl/transact_log_handler.cpp b/Pods/Realm/Realm/ObjectStore/impl/transact_log_handler.cpp deleted file mode 100644 index e0880bee..00000000 --- a/Pods/Realm/Realm/ObjectStore/impl/transact_log_handler.cpp +++ /dev/null @@ -1,619 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/transact_log_handler.hpp" - -#include "binding_context.hpp" -#include "impl/collection_notifier.hpp" -#include "index_set.hpp" - -#include -#include - -using namespace realm; - -namespace { -template -struct MarkDirtyMixin { - bool mark_dirty(size_t row, size_t col) { static_cast(this)->mark_dirty(row, col); return true; } - - bool set_int(size_t col, size_t row, int_fast64_t) { return mark_dirty(row, col); } - bool set_bool(size_t col, size_t row, bool) { return mark_dirty(row, col); } - bool set_float(size_t col, size_t row, float) { return mark_dirty(row, col); } - bool set_double(size_t col, size_t row, double) { return mark_dirty(row, col); } - bool set_string(size_t col, size_t row, StringData) { return mark_dirty(row, col); } - bool set_binary(size_t col, size_t row, BinaryData) { return mark_dirty(row, col); } - bool set_olddatetime(size_t col, size_t row, OldDateTime) { return mark_dirty(row, col); } - bool set_timestamp(size_t col, size_t row, Timestamp) { return mark_dirty(row, col); } - bool set_table(size_t col, size_t row) { return mark_dirty(row, col); } - bool set_mixed(size_t col, size_t row, const Mixed&) { return mark_dirty(row, col); } - bool set_link(size_t col, size_t row, size_t, size_t) { return mark_dirty(row, col); } - bool set_null(size_t col, size_t row) { return mark_dirty(row, col); } - bool nullify_link(size_t col, size_t row, size_t) { return mark_dirty(row, col); } - bool set_int_unique(size_t col, size_t row, size_t, int_fast64_t) { return mark_dirty(row, col); } - bool set_string_unique(size_t col, size_t row, size_t, StringData) { return mark_dirty(row, col); } - bool insert_substring(size_t col, size_t row, size_t, StringData) { return mark_dirty(row, col); } - bool erase_substring(size_t col, size_t row, size_t, size_t) { return mark_dirty(row, col); } -}; - -class TransactLogValidationMixin { - // Index of currently selected table - size_t m_current_table = 0; - - // Tables which were created during the transaction being processed, which - // can have columns inserted without a schema version bump - std::vector m_new_tables; - - REALM_NORETURN - REALM_NOINLINE - void schema_error() - { - throw std::runtime_error("Schema mismatch detected: another process has modified the Realm file's schema in an incompatible way"); - } - - // Throw an exception if the currently modified table already existed before - // the current set of modifications - bool schema_error_unless_new_table() - { - if (std::find(begin(m_new_tables), end(m_new_tables), m_current_table) == end(m_new_tables)) { - schema_error(); - } - return true; - } - -protected: - size_t current_table() const noexcept { return m_current_table; } - -public: - // Schema changes which don't involve a change in the schema version are - // allowed - bool add_search_index(size_t) { return true; } - bool remove_search_index(size_t) { return true; } - - // Creating entirely new tables without a schema version bump is allowed, so - // we need to track if new columns are being added to a new table or an - // existing one - bool insert_group_level_table(size_t table_ndx, size_t, StringData) - { - // Shift any previously added tables after the new one - for (auto& table : m_new_tables) { - if (table >= table_ndx) - ++table; - } - m_new_tables.push_back(table_ndx); - return true; - } - bool insert_column(size_t, DataType, StringData, bool) { return schema_error_unless_new_table(); } - bool insert_link_column(size_t, DataType, StringData, size_t, size_t) { return schema_error_unless_new_table(); } - bool set_link_type(size_t, LinkType) { return schema_error_unless_new_table(); } - - // Removing or renaming things while a Realm is open is never supported - bool erase_group_level_table(size_t, size_t) { schema_error(); } - bool rename_group_level_table(size_t, StringData) { schema_error(); } - bool erase_column(size_t) { schema_error(); } - bool erase_link_column(size_t, size_t, size_t) { schema_error(); } - bool rename_column(size_t, StringData) { schema_error(); } - bool move_column(size_t, size_t) { schema_error(); } - bool move_group_level_table(size_t, size_t) { schema_error(); } - - bool select_descriptor(int levels, const size_t*) - { - // subtables not supported - return levels == 0; - } - - bool select_table(size_t group_level_ndx, int, const size_t*) noexcept - { - m_current_table = group_level_ndx; - return true; - } - - bool select_link_list(size_t, size_t, size_t) { return true; } - - // Non-schema changes are all allowed - void parse_complete() { } - bool insert_empty_rows(size_t, size_t, size_t, bool) { return true; } - bool erase_rows(size_t, size_t, size_t, bool) { return true; } - bool swap_rows(size_t, size_t) { return true; } - bool clear_table() noexcept { return true; } - bool link_list_set(size_t, size_t) { return true; } - bool link_list_insert(size_t, size_t) { return true; } - bool link_list_erase(size_t) { return true; } - bool link_list_nullify(size_t) { return true; } - bool link_list_clear(size_t) { return true; } - bool link_list_move(size_t, size_t) { return true; } - bool link_list_swap(size_t, size_t) { return true; } - bool change_link_targets(size_t, size_t) { return true; } - bool optimize_table() { return true; } -}; - - -// A transaction log handler that just validates that all operations made are -// ones supported by the object store -struct TransactLogValidator : public TransactLogValidationMixin, public MarkDirtyMixin { - void mark_dirty(size_t, size_t) { } -}; - -// Extends TransactLogValidator to also track changes and report it to the -// binding context if any properties are being observed -class TransactLogObserver : public TransactLogValidationMixin, public MarkDirtyMixin { - using ColumnInfo = BindingContext::ColumnInfo; - using ObserverState = BindingContext::ObserverState; - - // Observed table rows which need change information - std::vector m_observers; - // Userdata pointers for rows which have been deleted - std::vector invalidated; - // Delegate to send change information to - BindingContext* m_context; - - // Change information for the currently selected LinkList, if any - ColumnInfo* m_active_linklist = nullptr; - - // Tables which were created during the transaction being processed, which - // can have columns inserted without a schema version bump - std::vector m_new_tables; - - // Get the change info for the given column, creating it if needed - static ColumnInfo& get_change(ObserverState& state, size_t i) - { - if (state.changes.size() <= i) { - state.changes.resize(std::max(state.changes.size() * 2, i + 1)); - } - return state.changes[i]; - } - - // Loop over the columns which were changed in an observer state - template - static void for_each(ObserverState& state, Func&& f) - { - for (size_t i = 0; i < state.changes.size(); ++i) { - auto const& change = state.changes[i]; - if (change.changed) { - f(i, change); - } - } - } - - // Remove the given observer from the list of observed objects and add it - // to the listed of invalidated objects - void invalidate(ObserverState *o) - { - invalidated.push_back(o->info); - m_observers.erase(m_observers.begin() + (o - &m_observers[0])); - } - -public: - template - TransactLogObserver(BindingContext* context, SharedGroup& sg, Func&& func, bool validate_schema_changes) - : m_context(context) - { - if (!context) { - if (validate_schema_changes) { - func(TransactLogValidator()); - } - else { - func(); - } - return; - } - - m_observers = context->get_observed_rows(); - if (m_observers.empty()) { - auto old_version = sg.get_version_of_current_transaction(); - if (validate_schema_changes) { - func(TransactLogValidator()); - } - else { - func(); - } - if (old_version != sg.get_version_of_current_transaction()) { - context->did_change({}, {}); - } - return; - } - - func(*this); - context->did_change(m_observers, invalidated); - } - - // Mark the given row/col as needing notifications sent - void mark_dirty(size_t row_ndx, size_t col_ndx) - { - auto it = lower_bound(begin(m_observers), end(m_observers), ObserverState{current_table(), row_ndx, nullptr}); - if (it != end(m_observers) && it->table_ndx == current_table() && it->row_ndx == row_ndx) { - get_change(*it, col_ndx).changed = true; - } - } - - // Called at the end of the transaction log immediately before the version - // is advanced - void parse_complete() - { - m_context->will_change(m_observers, invalidated); - } - - bool insert_group_level_table(size_t table_ndx, size_t prior_size, StringData name) - { - for (auto& observer : m_observers) { - if (observer.table_ndx >= table_ndx) - ++observer.table_ndx; - } - TransactLogValidationMixin::insert_group_level_table(table_ndx, prior_size, name); - return true; - } - - bool insert_empty_rows(size_t, size_t, size_t, bool) - { - // rows are only inserted at the end, so no need to do anything - return true; - } - - bool erase_rows(size_t row_ndx, size_t, size_t last_row_ndx, bool unordered) - { - for (size_t i = 0; i < m_observers.size(); ++i) { - auto& o = m_observers[i]; - if (o.table_ndx == current_table()) { - if (o.row_ndx == row_ndx) { - invalidate(&o); - --i; - } - else if (unordered && o.row_ndx == last_row_ndx) { - o.row_ndx = row_ndx; - } - else if (!unordered && o.row_ndx > row_ndx) { - o.row_ndx -= 1; - } - } - } - return true; - } - - bool clear_table() - { - for (size_t i = 0; i < m_observers.size(); ) { - auto& o = m_observers[i]; - if (o.table_ndx == current_table()) { - invalidate(&o); - } - else { - ++i; - } - } - return true; - } - - bool select_link_list(size_t col, size_t row, size_t) - { - m_active_linklist = nullptr; - for (auto& o : m_observers) { - if (o.table_ndx == current_table() && o.row_ndx == row) { - m_active_linklist = &get_change(o, col); - break; - } - } - return true; - } - - void append_link_list_change(ColumnInfo::Kind kind, size_t index) { - ColumnInfo *o = m_active_linklist; - if (!o || o->kind == ColumnInfo::Kind::SetAll) { - // Active LinkList isn't observed or already has multiple kinds of changes - return; - } - - if (o->kind == ColumnInfo::Kind::None) { - o->kind = kind; - o->changed = true; - o->indices.add(index); - } - else if (o->kind == kind) { - if (kind == ColumnInfo::Kind::Remove) { - o->indices.add_shifted(index); - } - else if (kind == ColumnInfo::Kind::Insert) { - o->indices.insert_at(index); - } - else { - o->indices.add(index); - } - } - else { - // Array KVO can only send a single kind of change at a time, so - // if there are multiple just give up and send "Set" - o->indices.set(0); - o->kind = ColumnInfo::Kind::SetAll; - } - } - - bool link_list_set(size_t index, size_t) - { - append_link_list_change(ColumnInfo::Kind::Set, index); - return true; - } - - bool link_list_insert(size_t index, size_t) - { - append_link_list_change(ColumnInfo::Kind::Insert, index); - return true; - } - - bool link_list_erase(size_t index) - { - append_link_list_change(ColumnInfo::Kind::Remove, index); - return true; - } - - bool link_list_nullify(size_t index) - { - append_link_list_change(ColumnInfo::Kind::Remove, index); - return true; - } - - bool link_list_swap(size_t index1, size_t index2) - { - append_link_list_change(ColumnInfo::Kind::Set, index1); - append_link_list_change(ColumnInfo::Kind::Set, index2); - return true; - } - - bool link_list_clear(size_t old_size) - { - ColumnInfo *o = m_active_linklist; - if (!o || o->kind == ColumnInfo::Kind::SetAll) { - return true; - } - - if (o->kind == ColumnInfo::Kind::Remove) - old_size += o->indices.count(); - else if (o->kind == ColumnInfo::Kind::Insert) - old_size -= o->indices.count(); - - o->indices.set(old_size); - - o->kind = ColumnInfo::Kind::Remove; - o->changed = true; - return true; - } - - bool link_list_move(size_t from, size_t to) - { - ColumnInfo *o = m_active_linklist; - if (!o || o->kind == ColumnInfo::Kind::SetAll) { - return true; - } - if (from > to) { - std::swap(from, to); - } - - if (o->kind == ColumnInfo::Kind::None) { - o->kind = ColumnInfo::Kind::Set; - o->changed = true; - } - if (o->kind == ColumnInfo::Kind::Set) { - for (size_t i = from; i <= to; ++i) - o->indices.add(i); - } - else { - o->indices.set(0); - o->kind = ColumnInfo::Kind::SetAll; - } - return true; - } -}; - -// Extends TransactLogValidator to track changes made to LinkViews -class LinkViewObserver : public TransactLogValidationMixin, public MarkDirtyMixin { - _impl::TransactionChangeInfo& m_info; - _impl::CollectionChangeBuilder* m_active = nullptr; - - _impl::CollectionChangeBuilder* get_change() - { - auto tbl_ndx = current_table(); - if (tbl_ndx >= m_info.table_modifications_needed.size() || !m_info.table_modifications_needed[tbl_ndx]) - return nullptr; - if (m_info.tables.size() <= tbl_ndx) { - m_info.tables.resize(std::max(m_info.tables.size() * 2, tbl_ndx + 1)); - } - return &m_info.tables[tbl_ndx]; - } - - bool need_move_info() const - { - auto tbl_ndx = current_table(); - return tbl_ndx < m_info.table_moves_needed.size() && m_info.table_moves_needed[tbl_ndx]; - } - -public: - LinkViewObserver(_impl::TransactionChangeInfo& info) - : m_info(info) { } - - void mark_dirty(size_t row, __unused size_t col) - { - if (auto change = get_change()) - change->modify(row); - } - - void parse_complete() - { - for (auto& table : m_info.tables) { - table.parse_complete(); - } - for (auto& list : m_info.lists) { - list.changes->clean_up_stale_moves(); - } - } - - bool select_link_list(size_t col, size_t row, size_t) - { - mark_dirty(row, col); - - m_active = nullptr; - // When there are multiple source versions there could be multiple - // change objects for a single LinkView, in which case we need to use - // the last one - for (auto it = m_info.lists.rbegin(), end = m_info.lists.rend(); it != end; ++it) { - if (it->table_ndx == current_table() && it->row_ndx == row && it->col_ndx == col) { - m_active = it->changes; - break; - } - } - return true; - } - - bool link_list_set(size_t index, size_t) - { - if (m_active) - m_active->modify(index); - return true; - } - - bool link_list_insert(size_t index, size_t) - { - if (m_active) - m_active->insert(index); - return true; - } - - bool link_list_erase(size_t index) - { - if (m_active) - m_active->erase(index); - return true; - } - - bool link_list_nullify(size_t index) - { - return link_list_erase(index); - } - - bool link_list_swap(size_t index1, size_t index2) - { - link_list_set(index1, 0); - link_list_set(index2, 0); - return true; - } - - bool link_list_clear(size_t old_size) - { - if (m_active) - m_active->clear(old_size); - return true; - } - - bool link_list_move(size_t from, size_t to) - { - if (m_active) - m_active->move(from, to); - return true; - } - - bool insert_empty_rows(size_t row_ndx, size_t num_rows_to_insert, size_t, bool unordered) - { - REALM_ASSERT(!unordered); - if (auto change = get_change()) - change->insert(row_ndx, num_rows_to_insert, need_move_info()); - - return true; - } - - bool erase_rows(size_t row_ndx, size_t, size_t prior_num_rows, bool unordered) - { - REALM_ASSERT(unordered); - size_t last_row = prior_num_rows - 1; - - for (auto it = begin(m_info.lists); it != end(m_info.lists); ) { - if (it->table_ndx == current_table()) { - if (it->row_ndx == row_ndx) { - *it = std::move(m_info.lists.back()); - m_info.lists.pop_back(); - continue; - } - if (it->row_ndx == last_row - 1) - it->row_ndx = row_ndx; - } - ++it; - } - - if (auto change = get_change()) - change->move_over(row_ndx, last_row, need_move_info()); - return true; - } - - bool clear_table() - { - auto tbl_ndx = current_table(); - auto it = remove_if(begin(m_info.lists), end(m_info.lists), - [&](auto const& lv) { return lv.table_ndx == tbl_ndx; }); - m_info.lists.erase(it, end(m_info.lists)); - if (auto change = get_change()) - change->clear(std::numeric_limits::max()); - return true; - } -}; -} // anonymous namespace - -namespace realm { -namespace _impl { -namespace transaction { -void advance(SharedGroup& sg, BindingContext* context, SharedGroup::VersionID version) -{ - TransactLogObserver(context, sg, [&](auto&&... args) { - LangBindHelper::advance_read(sg, std::move(args)..., version); - }, true); -} - -void begin(SharedGroup& sg, BindingContext* context, bool validate_schema_changes) -{ - TransactLogObserver(context, sg, [&](auto&&... args) { - LangBindHelper::promote_to_write(sg, std::move(args)...); - }, validate_schema_changes); -} - -void commit(SharedGroup& sg, BindingContext* context) -{ - LangBindHelper::commit_and_continue_as_read(sg); - - if (context) { - context->did_change({}, {}); - } -} - -void cancel(SharedGroup& sg, BindingContext* context) -{ - TransactLogObserver(context, sg, [&](auto&&... args) { - LangBindHelper::rollback_and_continue_as_read(sg, std::move(args)...); - }, false); -} - -void advance(SharedGroup& sg, - TransactionChangeInfo& info, - SharedGroup::VersionID version) -{ - if (info.table_modifications_needed.empty() && info.lists.empty()) { - LangBindHelper::advance_read(sg, version); - } - else { - LangBindHelper::advance_read(sg, LinkViewObserver(info), version); - } - -} - -} // namespace transaction -} // namespace _impl -} // namespace realm diff --git a/Pods/Realm/Realm/ObjectStore/index_set.cpp b/Pods/Realm/Realm/ObjectStore/index_set.cpp deleted file mode 100644 index a5c30c2b..00000000 --- a/Pods/Realm/Realm/ObjectStore/index_set.cpp +++ /dev/null @@ -1,707 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "index_set.hpp" - -#include - -#include - -using namespace realm; -using namespace realm::_impl; - -const size_t IndexSet::npos; - -template -void MutableChunkedRangeVectorIterator::set(size_t front, size_t back) -{ - this->m_outer->count -= this->m_inner->second - this->m_inner->first; - if (this->offset() == 0) { - this->m_outer->begin = front; - } - if (this->m_inner == &this->m_outer->data.back()) { - this->m_outer->end = back; - } - this->m_outer->count += back - front; - this->m_inner->first = front; - this->m_inner->second = back; -} - -template -void MutableChunkedRangeVectorIterator::adjust(ptrdiff_t front, ptrdiff_t back) -{ - if (this->offset() == 0) { - this->m_outer->begin += front; - } - if (this->m_inner == &this->m_outer->data.back()) { - this->m_outer->end += back; - } - this->m_outer->count += -front + back; - this->m_inner->first += front; - this->m_inner->second += back; -} - -template -void MutableChunkedRangeVectorIterator::shift(ptrdiff_t distance) -{ - if (this->offset() == 0) { - this->m_outer->begin += distance; - } - if (this->m_inner == &this->m_outer->data.back()) { - this->m_outer->end += distance; - } - this->m_inner->first += distance; - this->m_inner->second += distance; -} - -void ChunkedRangeVector::push_back(value_type value) -{ - if (!empty() && m_data.back().data.size() < max_size) { - auto& range = m_data.back(); - REALM_ASSERT(range.end <= value.first); - - range.data.push_back(value); - range.count += value.second - value.first; - range.end = value.second; - } - else { - m_data.push_back({{std::move(value)}, value.first, value.second, value.second - value.first}); - } - verify(); -} - -ChunkedRangeVector::iterator ChunkedRangeVector::insert(iterator pos, value_type value) -{ - if (pos.m_outer == m_data.end()) { - push_back(std::move(value)); - return std::prev(end()); - } - - pos = ensure_space(pos); - auto& chunk = *pos.m_outer; - pos.m_inner = &*chunk.data.insert(pos.m_outer->data.begin() + pos.offset(), value); - chunk.count += value.second - value.first; - chunk.begin = std::min(chunk.begin, value.first); - chunk.end = std::max(chunk.end, value.second); - - verify(); - return pos; -} - -ChunkedRangeVector::iterator ChunkedRangeVector::ensure_space(iterator pos) -{ - if (pos.m_outer->data.size() + 1 <= max_size) - return pos; - - auto offset = pos.offset(); - - // Split the chunk in half to make space for the new insertion - auto new_pos = m_data.insert(pos.m_outer + 1, Chunk{}); - auto prev = new_pos - 1; - auto to_move = max_size / 2; - new_pos->data.reserve(to_move); - new_pos->data.assign(prev->data.end() - to_move, prev->data.end()); - prev->data.resize(prev->data.size() - to_move); - - size_t moved_count = 0; - for (auto range : new_pos->data) - moved_count += range.second - range.first; - - prev->end = prev->data.back().second; - prev->count -= moved_count; - new_pos->begin = new_pos->data.front().first; - new_pos->end = new_pos->data.back().second; - new_pos->count = moved_count; - - if (offset >= to_move) { - pos.m_outer = new_pos; - offset -= to_move; - } - else { - pos.m_outer = prev; - } - pos.m_end = m_data.end(); - pos.m_inner = &pos.m_outer->data[offset]; - verify(); - return pos; -} - -ChunkedRangeVector::iterator ChunkedRangeVector::erase(iterator pos) -{ - auto offset = pos.offset(); - auto& chunk = *pos.m_outer; - chunk.count -= pos->second - pos->first; - chunk.data.erase(chunk.data.begin() + offset); - - if (chunk.data.size() == 0) { - pos.m_outer = m_data.erase(pos.m_outer); - pos.m_end = m_data.end(); - pos.m_inner = pos.m_outer == m_data.end() ? nullptr : &pos.m_outer->data.front(); - verify(); - return pos; - } - - chunk.begin = chunk.data.front().first; - chunk.end = chunk.data.back().second; - if (offset < chunk.data.size()) - pos.m_inner = &chunk.data[offset]; - else { - ++pos.m_outer; - pos.m_inner = pos.m_outer == pos.m_end ? nullptr : &pos.m_outer->data.front(); - } - - verify(); - return pos; -} - -void ChunkedRangeVector::verify() const noexcept -{ -#ifdef REALM_DEBUG - size_t prev_end = -1; - for (auto range : *this) { - REALM_ASSERT(range.first < range.second); - REALM_ASSERT(prev_end == size_t(-1) || range.first > prev_end); - prev_end = range.second; - } - - for (auto& chunk : m_data) { - REALM_ASSERT(!chunk.data.empty()); - REALM_ASSERT(chunk.data.front().first == chunk.begin); - REALM_ASSERT(chunk.data.back().second == chunk.end); - REALM_ASSERT(chunk.count <= chunk.end - chunk.begin); - size_t count = 0; - for (auto range : chunk.data) - count += range.second - range.first; - REALM_ASSERT(count == chunk.count); - } -#endif -} - -namespace { -class ChunkedRangeVectorBuilder { -public: - using value_type = std::pair; - - ChunkedRangeVectorBuilder(ChunkedRangeVector const& expected); - void push_back(size_t index); - void push_back(std::pair range); - std::vector finalize(); -private: - std::vector m_data; - size_t m_outer_pos = 0; -}; - -ChunkedRangeVectorBuilder::ChunkedRangeVectorBuilder(ChunkedRangeVector const& expected) -{ - size_t size = 0; - for (auto const& chunk : expected.m_data) - size += chunk.data.size(); - m_data.resize(size / ChunkedRangeVector::max_size + 1); - for (size_t i = 0; i < m_data.size() - 1; ++i) - m_data[i].data.reserve(ChunkedRangeVector::max_size); -} - -void ChunkedRangeVectorBuilder::push_back(size_t index) -{ - push_back({index, index + 1}); -} - -void ChunkedRangeVectorBuilder::push_back(std::pair range) -{ - auto& chunk = m_data[m_outer_pos]; - if (chunk.data.empty()) { - chunk.data.push_back(range); - chunk.count = range.second - range.first; - chunk.begin = range.first; - } - else if (range.first == chunk.data.back().second) { - chunk.data.back().second = range.second; - chunk.count += range.second - range.first; - } - else if (chunk.data.size() < ChunkedRangeVector::max_size) { - chunk.data.push_back(range); - chunk.count += range.second - range.first; - } - else { - chunk.end = chunk.data.back().second; - ++m_outer_pos; - if (m_outer_pos >= m_data.size()) - m_data.push_back({{range}, range.first, 0, 1}); - else { - auto& chunk = m_data[m_outer_pos]; - chunk.data.push_back(range); - chunk.begin = range.first; - chunk.count = range.second - range.first; - } - } -} - -std::vector ChunkedRangeVectorBuilder::finalize() -{ - if (!m_data.empty()) { - m_data.resize(m_outer_pos + 1); - if (m_data.back().data.empty()) - m_data.pop_back(); - else - m_data.back().end = m_data.back().data.back().second; - } - return std::move(m_data); -} -} - -IndexSet::IndexSet(std::initializer_list values) -{ - for (size_t v : values) - add(v); -} - -bool IndexSet::contains(size_t index) const -{ - auto it = const_cast(this)->find(index); - return it != end() && it->first <= index; -} - -size_t IndexSet::count(size_t start_index, size_t end_index) const -{ - auto it = const_cast(this)->find(start_index); - const auto end = this->end(); - if (it == end || it->first >= end_index) { - return 0; - } - if (it->second >= end_index) - return std::min(it->second, end_index) - std::max(it->first, start_index); - - size_t ret = 0; - - if (start_index > it->first || it.offset() != 0) { - // Start index is in the middle of a chunk, so start by counting the - // rest of that chunk - ret = it->second - std::max(it->first, start_index); - for (++it; it != end && it->second < end_index && it.offset() != 0; ++it) { - ret += it->second - it->first; - } - if (it != end && it->first < end_index && it.offset() != 0) - ret += end_index - it->first; - if (it == end || it->second >= end_index) - return ret; - } - - // Now count all complete chunks that fall within the range - while (it != end && it.outer()->end <= end_index) { - REALM_ASSERT_DEBUG(it.offset() == 0); - ret += it.outer()->count; - it.next_chunk(); - } - - // Cound all complete ranges within the last chunk - while (it != end && it->second <= end_index) { - ret += it->second - it->first; - ++it; - } - - // And finally add in the partial last range - if (it != end && it->first < end_index) - ret += end_index - it->first; - return ret; -} - -IndexSet::iterator IndexSet::find(size_t index) -{ - return find(index, begin()); -} - -IndexSet::iterator IndexSet::find(size_t index, iterator begin) -{ - auto it = std::find_if(begin.outer(), m_data.end(), - [&](auto const& lft) { return lft.end > index; }); - if (it == m_data.end()) - return end(); - if (index < it->begin) - return iterator(it, m_data.end(), &it->data[0]); - auto inner_begin = it->data.begin(); - if (it == begin.outer()) - inner_begin += begin.offset(); - auto inner = std::lower_bound(inner_begin, it->data.end(), index, - [&](auto const& lft, auto) { return lft.second <= index; }); - REALM_ASSERT_DEBUG(inner != it->data.end()); - - return iterator(it, m_data.end(), &*inner); -} - -void IndexSet::add(size_t index) -{ - do_add(find(index), index); -} - -void IndexSet::add(IndexSet const& other) -{ - auto it = begin(); - for (size_t index : other.as_indexes()) { - it = do_add(find(index, it), index); - } -} - -size_t IndexSet::add_shifted(size_t index) -{ - iterator it = begin(), end = this->end(); - - // Shift for any complete chunks before the target - for (; it != end && it.outer()->end <= index; it.next_chunk()) - index += it.outer()->count; - - // And any ranges within the last partial chunk - for (; it != end && it->first <= index; ++it) - index += it->second - it->first; - - do_add(it, index); - return index; -} - -void IndexSet::add_shifted_by(IndexSet const& shifted_by, IndexSet const& values) -{ - if (values.empty()) - return; - -#ifdef REALM_DEBUG - size_t expected = std::distance(as_indexes().begin(), as_indexes().end()); - for (auto index : values.as_indexes()) { - if (!shifted_by.contains(index)) - ++expected; - } -#endif - - ChunkedRangeVectorBuilder builder(*this); - - auto old_it = cbegin(), old_end = cend(); - auto shift_it = shifted_by.cbegin(), shift_end = shifted_by.cend(); - - size_t skip_until = 0; - size_t old_shift = 0; - size_t new_shift = 0; - for (size_t index : values.as_indexes()) { - for (; shift_it != shift_end && shift_it->first <= index; ++shift_it) { - new_shift += shift_it->second - shift_it->first; - skip_until = shift_it->second; - } - if (index < skip_until) - continue; - - for (; old_it != old_end && old_it->first <= index - new_shift + old_shift; ++old_it) { - for (size_t i = old_it->first; i < old_it->second; ++i) - builder.push_back(i); - old_shift += old_it->second - old_it->first; - } - - REALM_ASSERT(index >= new_shift); - builder.push_back(index - new_shift + old_shift); - } - - copy(old_it, old_end, std::back_inserter(builder)); - m_data = builder.finalize(); - -#ifdef REALM_DEBUG - REALM_ASSERT((size_t)std::distance(as_indexes().begin(), as_indexes().end()) == expected); -#endif -} - -void IndexSet::set(size_t len) -{ - clear(); - if (len) { - push_back({0, len}); - } -} - -void IndexSet::insert_at(size_t index, size_t count) -{ - REALM_ASSERT(count > 0); - - auto pos = find(index); - auto end = this->end(); - bool in_existing = false; - if (pos != end) { - if (pos->first <= index) { - in_existing = true; - pos.adjust(0, count); - } - else { - pos.shift(count); - } - for (auto it = std::next(pos); it != end; ++it) - it.shift(count); - } - if (!in_existing) { - for (size_t i = 0; i < count; ++i) - pos = std::next(do_add(pos, index + i)); - } - - verify(); -} - -void IndexSet::insert_at(IndexSet const& positions) -{ - if (positions.empty()) - return; - if (empty()) { - *this = positions; - return; - } - - IndexIterator begin1 = cbegin(), begin2 = positions.cbegin(); - IndexIterator end1 = cend(), end2 = positions.cend(); - - ChunkedRangeVectorBuilder builder(*this); - size_t shift = 0; - while (begin1 != end1 && begin2 != end2) { - if (*begin1 + shift < *begin2) { - builder.push_back(*begin1++ + shift); - } - else { - ++shift; - builder.push_back(*begin2++); - } - } - for (; begin1 != end1; ++begin1) - builder.push_back(*begin1 + shift); - for (; begin2 != end2; ++begin2) - builder.push_back(*begin2); - - m_data = builder.finalize(); -} - -void IndexSet::shift_for_insert_at(size_t index, size_t count) -{ - REALM_ASSERT(count > 0); - - auto it = find(index); - if (it == end()) - return; - - for (auto pos = it, end = this->end(); pos != end; ++pos) - pos.shift(count); - - // If the range contained the insertion point, split the range and move - // the part of it before the insertion point back - if (it->first < index + count) { - auto old_second = it->second; - it.set(it->first - count, index); - insert(std::next(it), {index + count, old_second}); - } - verify(); -} - -void IndexSet::shift_for_insert_at(realm::IndexSet const& values) -{ - if (empty() || values.empty()) - return; - if (values.m_data.front().begin >= m_data.back().end) - return; - - IndexIterator begin1 = cbegin(), begin2 = values.cbegin(); - IndexIterator end1 = cend(), end2 = values.cend(); - - ChunkedRangeVectorBuilder builder(*this); - size_t shift = 0; - while (begin1 != end1 && begin2 != end2) { - if (*begin1 + shift < *begin2) { - builder.push_back(*begin1++ + shift); - } - else { - ++shift; - begin2++; - } - } - for (; begin1 != end1; ++begin1) - builder.push_back(*begin1 + shift); - - m_data = builder.finalize(); -} - -void IndexSet::erase_at(size_t index) -{ - auto it = find(index); - if (it != end()) - do_erase(it, index); -} - -void IndexSet::erase_at(IndexSet const& positions) -{ - if (empty() || positions.empty()) - return; - - ChunkedRangeVectorBuilder builder(*this); - - IndexIterator begin1 = cbegin(), begin2 = positions.cbegin(); - IndexIterator end1 = cend(), end2 = positions.cend(); - - size_t shift = 0; - while (begin1 != end1 && begin2 != end2) { - if (*begin1 < *begin2) { - builder.push_back(*begin1++ - shift); - } - else if (*begin1 == *begin2) { - ++shift; - ++begin1; - ++begin2; - } - else { - ++shift; - ++begin2; - } - } - for (; begin1 != end1; ++begin1) - builder.push_back(*begin1 - shift); - - m_data = builder.finalize(); -} - -size_t IndexSet::erase_or_unshift(size_t index) -{ - auto shifted = index; - iterator it = begin(), end = this->end(); - - // Shift for any complete chunks before the target - for (; it != end && it.outer()->end <= index; it.next_chunk()) - shifted -= it.outer()->count; - - // And any ranges within the last partial chunk - for (; it != end && it->second <= index; ++it) - shifted -= it->second - it->first; - - if (it == end) - return shifted; - - if (it->first <= index) - shifted = npos; - - do_erase(it, index); - - return shifted; -} - -void IndexSet::do_erase(iterator it, size_t index) -{ - if (it->first <= index) { - if (it->first + 1 == it->second) { - it = erase(it); - } - else { - it.adjust(0, -1); - ++it; - } - } - else if (it != begin() && std::prev(it)->second + 1 == it->first) { - std::prev(it).adjust(0, it->second - it->first); - it = erase(it); - } - - for (; it != end(); ++it) - it.shift(-1); -} - -IndexSet::iterator IndexSet::do_remove(iterator it, size_t begin, size_t end) -{ - for (it = find(begin, it); it != this->end() && it->first < end; it = find(begin, it)) { - // Trim off any part of the range to remove that's before the matching range - begin = std::max(it->first, begin); - - // If the matching range extends to both sides of the range to remove, - // split it on the range to remove - if (it->first < begin && it->second > end) { - auto old_second = it->second; - it.set(it->first, begin); - it = std::prev(insert(std::next(it), {end, old_second})); - } - // Range to delete now coverages (at least) one end of the matching range - else if (begin == it->first && end >= it->second) - it = erase(it); - else if (begin == it->first) - it.set(end, it->second); - else - it.set(it->first, begin); - } - return it; -} - -void IndexSet::remove(size_t index, size_t count) -{ - do_remove(find(index), index, index + count); -} - -void IndexSet::remove(realm::IndexSet const& values) -{ - auto it = begin(); - for (auto range : values) { - it = do_remove(it, range.first, range.second); - if (it == end()) - return; - } -} - -size_t IndexSet::shift(size_t index) const -{ - // FIXME: optimize - for (auto range : *this) { - if (range.first > index) - break; - index += range.second - range.first; - } - return index; -} - -size_t IndexSet::unshift(size_t index) const -{ - REALM_ASSERT_DEBUG(!contains(index)); - return index - count(0, index); -} - -void IndexSet::clear() -{ - m_data.clear(); -} - -IndexSet::iterator IndexSet::do_add(iterator it, size_t index) -{ - verify(); - bool more_before = it != begin(), valid = it != end(); - REALM_ASSERT(!more_before || index >= std::prev(it)->second); - if (valid && it->first <= index && it->second > index) { - // index is already in set - return it; - } - if (more_before && std::prev(it)->second == index) { - auto prev = std::prev(it); - // index is immediately after an existing range - prev.adjust(0, 1); - - if (valid && prev->second == it->first) { - // index joins two existing ranges - prev.adjust(0, it->second - it->first); - return std::prev(erase(it)); - } - return prev; - } - if (valid && it->first == index + 1) { - // index is immediately before an existing range - it.adjust(-1, 0); - return it; - } - - // index is not next to an existing range - return insert(it, {index, index + 1}); -} diff --git a/Pods/Realm/Realm/ObjectStore/list.cpp b/Pods/Realm/Realm/ObjectStore/list.cpp deleted file mode 100644 index 822b3153..00000000 --- a/Pods/Realm/Realm/ObjectStore/list.cpp +++ /dev/null @@ -1,203 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "list.hpp" - -#include "impl/list_notifier.hpp" -#include "impl/realm_coordinator.hpp" -#include "results.hpp" -#include "shared_realm.hpp" - -#include - -using namespace realm; -using namespace realm::_impl; - -List::List() noexcept = default; -List::~List() -{ - if (m_notifier) { - m_notifier->unregister(); - } -} - -List::List(std::shared_ptr r, LinkViewRef l) noexcept -: m_realm(std::move(r)) -, m_link_view(std::move(l)) -{ -} - -Query List::get_query() const -{ - verify_attached(); - return m_link_view->get_target_table().where(m_link_view); -} - -size_t List::get_origin_row_index() const -{ - verify_attached(); - return m_link_view->get_origin_row_index(); -} - -void List::verify_valid_row(size_t row_ndx, bool insertion) const -{ - size_t size = m_link_view->size(); - if (row_ndx > size || (!insertion && row_ndx == size)) { - throw OutOfBoundsIndexException{row_ndx, size + insertion}; - } -} - -bool List::is_valid() const -{ - m_realm->verify_thread(); - return m_link_view && m_link_view->is_attached(); -} - -void List::verify_attached() const -{ - if (!is_valid()) { - throw InvalidatedException{}; - } -} - -void List::verify_in_transaction() const -{ - verify_attached(); - if (!m_realm->is_in_transaction()) { - throw InvalidTransactionException("Must be in a write transaction"); - } -} - -size_t List::size() const -{ - verify_attached(); - return m_link_view->size(); -} - -RowExpr List::get(size_t row_ndx) const -{ - verify_attached(); - verify_valid_row(row_ndx); - return m_link_view->get(row_ndx); -} - -size_t List::get_unchecked(size_t row_ndx) const noexcept -{ - return m_link_view->get(row_ndx).get_index(); -} - -size_t List::find(ConstRow const& row) const -{ - verify_attached(); - - if (!row.is_attached() || row.get_table() != &m_link_view->get_target_table()) { - return not_found; - } - - return m_link_view->find(row.get_index()); -} - -void List::add(size_t target_row_ndx) -{ - verify_in_transaction(); - m_link_view->add(target_row_ndx); -} - -void List::insert(size_t row_ndx, size_t target_row_ndx) -{ - verify_in_transaction(); - verify_valid_row(row_ndx, true); - m_link_view->insert(row_ndx, target_row_ndx); -} - -void List::move(size_t source_ndx, size_t dest_ndx) -{ - verify_in_transaction(); - verify_valid_row(source_ndx); - verify_valid_row(dest_ndx); // Can't be one past end due to removing one earlier - m_link_view->move(source_ndx, dest_ndx); -} - -void List::remove(size_t row_ndx) -{ - verify_in_transaction(); - verify_valid_row(row_ndx); - m_link_view->remove(row_ndx); -} - -void List::remove_all() -{ - verify_in_transaction(); - m_link_view->clear(); -} - -void List::set(size_t row_ndx, size_t target_row_ndx) -{ - verify_in_transaction(); - verify_valid_row(row_ndx); - m_link_view->set(row_ndx, target_row_ndx); -} - -void List::swap(size_t ndx1, size_t ndx2) -{ - verify_in_transaction(); - verify_valid_row(ndx1); - verify_valid_row(ndx2); - m_link_view->swap(ndx1, ndx2); -} - -void List::delete_all() -{ - verify_in_transaction(); - m_link_view->remove_all_target_rows(); -} - -Results List::sort(SortOrder order) -{ - verify_attached(); - return Results(m_realm, m_link_view, util::none, std::move(order)); -} - -Results List::filter(Query q) -{ - verify_attached(); - return Results(m_realm, m_link_view, get_query().and_query(std::move(q))); -} - -// These definitions rely on that LinkViews are interned by core -bool List::operator==(List const& rgt) const noexcept -{ - return m_link_view.get() == rgt.m_link_view.get(); -} - -namespace std { -size_t hash::operator()(realm::List const& list) const -{ - return std::hash()(list.m_link_view.get()); -} -} - -NotificationToken List::add_notification_callback(CollectionChangeCallback cb) -{ - verify_attached(); - if (!m_notifier) { - m_notifier = std::make_shared(m_link_view, m_realm); - RealmCoordinator::register_notifier(m_notifier); - } - return {m_notifier, m_notifier->add_callback(std::move(cb))}; -} diff --git a/Pods/Realm/Realm/ObjectStore/object_schema.cpp b/Pods/Realm/Realm/ObjectStore/object_schema.cpp deleted file mode 100644 index 6eb819d4..00000000 --- a/Pods/Realm/Realm/ObjectStore/object_schema.cpp +++ /dev/null @@ -1,106 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "object_schema.hpp" - -#include "object_store.hpp" -#include "property.hpp" - -#include -#include - -using namespace realm; - -#define ASSERT_PROPERTY_TYPE_VALUE(property, type) \ - static_assert(static_cast(PropertyType::property) == type_##type, \ - "PropertyType and DataType must have the same values") - -ASSERT_PROPERTY_TYPE_VALUE(Int, Int); -ASSERT_PROPERTY_TYPE_VALUE(Bool, Bool); -ASSERT_PROPERTY_TYPE_VALUE(Float, Float); -ASSERT_PROPERTY_TYPE_VALUE(Double, Double); -ASSERT_PROPERTY_TYPE_VALUE(Data, Binary); -ASSERT_PROPERTY_TYPE_VALUE(Date, Timestamp); -ASSERT_PROPERTY_TYPE_VALUE(Any, Mixed); -ASSERT_PROPERTY_TYPE_VALUE(Object, Link); -ASSERT_PROPERTY_TYPE_VALUE(Array, LinkList); - -ObjectSchema::ObjectSchema() = default; -ObjectSchema::~ObjectSchema() = default; - -ObjectSchema::ObjectSchema(std::string name, std::string primary_key, std::initializer_list persisted_properties) -: name(std::move(name)) -, persisted_properties(persisted_properties) -, primary_key(std::move(primary_key)) -{ - set_primary_key_property(); -} - -ObjectSchema::ObjectSchema(const Group *group, const std::string &name) : name(name) { - ConstTableRef table = ObjectStore::table_for_object_type(group, name); - - size_t count = table->get_column_count(); - persisted_properties.reserve(count); - for (size_t col = 0; col < count; col++) { - Property property; - property.name = table->get_column_name(col).data(); - property.type = (PropertyType)table->get_column_type(col); - property.is_indexed = table->has_search_index(col); - property.is_primary = false; - property.is_nullable = table->is_nullable(col) || property.type == PropertyType::Object; - property.table_column = col; - if (property.type == PropertyType::Object || property.type == PropertyType::Array) { - // set link type for objects and arrays - ConstTableRef linkTable = table->get_link_target(col); - property.object_type = ObjectStore::object_type_for_table_name(linkTable->get_name().data()); - } - persisted_properties.push_back(std::move(property)); - } - - primary_key = realm::ObjectStore::get_primary_key_for_object(group, name); - set_primary_key_property(); -} - -Property *ObjectSchema::property_for_name(StringData name) { - for (auto& prop : persisted_properties) { - if (StringData(prop.name) == name) { - return ∝ - } - } - for (auto& prop : computed_properties) { - if (StringData(prop.name) == name) { - return ∝ - } - } - return nullptr; -} - -const Property *ObjectSchema::property_for_name(StringData name) const { - return const_cast(this)->property_for_name(name); -} - -void ObjectSchema::set_primary_key_property() -{ - if (primary_key.length()) { - auto primary_key_prop = primary_key_property(); - if (!primary_key_prop) { - throw InvalidPrimaryKeyException(name, primary_key); - } - primary_key_prop->is_primary = true; - } -} diff --git a/Pods/Realm/Realm/ObjectStore/object_store.cpp b/Pods/Realm/Realm/ObjectStore/object_store.cpp deleted file mode 100644 index e54adbe9..00000000 --- a/Pods/Realm/Realm/ObjectStore/object_store.cpp +++ /dev/null @@ -1,784 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "object_store.hpp" - -#include "schema.hpp" - -#include -#include -#include -#include - -#include - -using namespace realm; - -namespace { -const char * const c_metadataTableName = "metadata"; -const char * const c_versionColumnName = "version"; -const size_t c_versionColumnIndex = 0; - -const char * const c_primaryKeyTableName = "pk"; -const char * const c_primaryKeyObjectClassColumnName = "pk_table"; -const size_t c_primaryKeyObjectClassColumnIndex = 0; -const char * const c_primaryKeyPropertyNameColumnName = "pk_property"; -const size_t c_primaryKeyPropertyNameColumnIndex = 1; - -const size_t c_zeroRowIndex = 0; - -const char c_object_table_prefix[] = "class_"; -} - -const uint64_t ObjectStore::NotVersioned = std::numeric_limits::max(); - -bool ObjectStore::has_metadata_tables(const Group *group) { - return group->get_table(c_primaryKeyTableName) && group->get_table(c_metadataTableName); -} - -void ObjectStore::create_metadata_tables(Group *group) { - TableRef table = group->get_or_add_table(c_primaryKeyTableName); - if (table->get_column_count() == 0) { - table->add_column(type_String, c_primaryKeyObjectClassColumnName); - table->add_column(type_String, c_primaryKeyPropertyNameColumnName); - } - - table = group->get_or_add_table(c_metadataTableName); - if (table->get_column_count() == 0) { - table->add_column(type_Int, c_versionColumnName); - - // set initial version - table->add_empty_row(); - table->set_int(c_versionColumnIndex, c_zeroRowIndex, ObjectStore::NotVersioned); - } -} - -uint64_t ObjectStore::get_schema_version(const Group *group) { - ConstTableRef table = group->get_table(c_metadataTableName); - if (!table || table->get_column_count() == 0) { - return ObjectStore::NotVersioned; - } - return table->get_int(c_versionColumnIndex, c_zeroRowIndex); -} - -void ObjectStore::set_schema_version(Group *group, uint64_t version) { - TableRef table = group->get_or_add_table(c_metadataTableName); - table->set_int(c_versionColumnIndex, c_zeroRowIndex, version); -} - -StringData ObjectStore::get_primary_key_for_object(const Group *group, StringData object_type) { - ConstTableRef table = group->get_table(c_primaryKeyTableName); - if (!table) { - return ""; - } - size_t row = table->find_first_string(c_primaryKeyObjectClassColumnIndex, object_type); - if (row == not_found) { - return ""; - } - return table->get_string(c_primaryKeyPropertyNameColumnIndex, row); -} - -void ObjectStore::set_primary_key_for_object(Group *group, StringData object_type, StringData primary_key) { - TableRef table = group->get_table(c_primaryKeyTableName); - - // get row or create if new object and populate - size_t row = table->find_first_string(c_primaryKeyObjectClassColumnIndex, object_type); - if (row == not_found && primary_key.size()) { - row = table->add_empty_row(); - table->set_string(c_primaryKeyObjectClassColumnIndex, row, object_type); - } - - // set if changing, or remove if setting to nil - if (primary_key.size() == 0) { - if (row != not_found) { - table->remove(row); - } - } - else { - table->set_string(c_primaryKeyPropertyNameColumnIndex, row, primary_key); - } -} - -StringData ObjectStore::object_type_for_table_name(StringData table_name) { - if (table_name.begins_with(c_object_table_prefix)) { - return table_name.substr(sizeof(c_object_table_prefix) - 1); - } - return StringData(); -} - -std::string ObjectStore::table_name_for_object_type(StringData object_type) { - return std::string(c_object_table_prefix) + object_type.data(); -} - -TableRef ObjectStore::table_for_object_type(Group *group, StringData object_type) { - auto name = table_name_for_object_type(object_type); - return group->get_table(name); -} - -ConstTableRef ObjectStore::table_for_object_type(const Group *group, StringData object_type) { - auto name = table_name_for_object_type(object_type); - return group->get_table(name); -} - -TableRef ObjectStore::table_for_object_type_create_if_needed(Group *group, StringData object_type, bool &created) { - auto name = table_name_for_object_type(object_type); - return group->get_or_add_table(name, &created); -} - -static inline bool property_has_changed(Property const& p1, Property const& p2) { - return p1.type != p2.type - || p1.name != p2.name - || p1.object_type != p2.object_type - || p1.is_nullable != p2.is_nullable; -} - -static inline bool property_can_be_migrated_to_nullable(const Property& old_property, const Property& new_property) { - return old_property.type == new_property.type - && !old_property.is_nullable - && new_property.is_nullable - && new_property.name == old_property.name; -} - -void ObjectStore::verify_missing_renamed_properties(Schema const& actual_schema, Schema& target_schema) { - for (auto &object_schema : target_schema) { - auto matching_schema = actual_schema.find(object_schema); - for (auto& target_prop : matching_schema->persisted_properties) { - if (!object_schema.property_for_name(target_prop.name)) { - throw PropertyRenameMissingNewPropertyException(target_prop.name); - } - } - } -} - -void ObjectStore::verify_schema(Schema const& actual_schema, Schema& target_schema, bool allow_missing_tables) { - std::vector errors; - for (auto &object_schema : target_schema) { - auto matching_schema = actual_schema.find(object_schema); - if (matching_schema == actual_schema.end()) { - if (!allow_missing_tables) { - errors.emplace_back(ObjectSchemaValidationException(object_schema.name, - "Missing table for object type '" + object_schema.name + "'.")); - } - continue; - } - - auto more_errors = verify_object_schema(*matching_schema, object_schema); - errors.insert(errors.end(), more_errors.begin(), more_errors.end()); - } - if (errors.size()) { - throw SchemaMismatchException(errors); - } -} - -std::vector ObjectStore::verify_object_schema(ObjectSchema const& table_schema, - ObjectSchema& target_schema) { - std::vector exceptions; - - // check to see if properties are the same - for (auto& current_prop : table_schema.persisted_properties) { - auto target_prop = target_schema.property_for_name(current_prop.name); - - if (!target_prop) { - exceptions.emplace_back(MissingPropertyException(table_schema.name, current_prop)); - continue; - } - if (property_has_changed(current_prop, *target_prop)) { - exceptions.emplace_back(MismatchedPropertiesException(table_schema.name, current_prop, *target_prop)); - continue; - } - - // create new property with aligned column - target_prop->table_column = current_prop.table_column; - } - - // check for change to primary key - if (table_schema.primary_key != target_schema.primary_key) { - exceptions.emplace_back(ChangedPrimaryKeyException(table_schema.name, table_schema.primary_key, target_schema.primary_key)); - } - - // check for new missing properties - for (auto& target_prop : target_schema.persisted_properties) { - if (!table_schema.property_for_name(target_prop.name)) { - exceptions.emplace_back(ExtraPropertyException(table_schema.name, target_prop)); - } - } - - return exceptions; -} - -template -static void copy_property_values(const Property& old_property, const Property& new_property, Table& table, - T (Table::*getter)(std::size_t, std::size_t) const noexcept, - void (Table::*setter)(std::size_t, std::size_t, T)) { - size_t old_column = old_property.table_column, new_column = new_property.table_column; - size_t count = table.size(); - for (size_t i = 0; i < count; i++) { - (table.*setter)(new_column, i, (table.*getter)(old_column, i)); - } -} - -static void copy_property_values(const Property& source, const Property& destination, Table& table) { - switch (destination.type) { - case PropertyType::Int: - copy_property_values(source, destination, table, &Table::get_int, &Table::set_int); - break; - case PropertyType::Bool: - copy_property_values(source, destination, table, &Table::get_bool, &Table::set_bool); - break; - case PropertyType::Float: - copy_property_values(source, destination, table, &Table::get_float, &Table::set_float); - break; - case PropertyType::Double: - copy_property_values(source, destination, table, &Table::get_double, &Table::set_double); - break; - case PropertyType::String: - copy_property_values(source, destination, table, &Table::get_string, &Table::set_string); - break; - case PropertyType::Data: - copy_property_values(source, destination, table, &Table::get_binary, &Table::set_binary); - break; - case PropertyType::Date: - copy_property_values(source, destination, table, &Table::get_timestamp, &Table::set_timestamp); - break; - default: - break; - } -} - -// set references to tables on targetSchema and create/update any missing or out-of-date tables -// if update existing is true, updates existing tables, otherwise validates existing tables -// NOTE: must be called from within write transaction -std::vector> ObjectStore::create_tables(Group *group, Schema &target_schema, bool update_existing) { - // properties to delete - std::vector> to_delete; - - // first pass to create missing tables - std::vector to_update; - for (auto& object_schema : target_schema) { - bool created = false; - ObjectStore::table_for_object_type_create_if_needed(group, object_schema.name, created); - - // we will modify tables for any new objectSchema (table was created) or for all if update_existing is true - if (update_existing || created) { - to_update.push_back(&object_schema); - } - } - - // second pass adds/removes columns for out of date tables - for (auto& target_object_schema : to_update) { - TableRef table = table_for_object_type(group, target_object_schema->name); - ObjectSchema current_schema(group, target_object_schema->name); - std::vector &target_props = target_object_schema->persisted_properties; - - // handle columns changing from required to optional - for (auto& current_prop : current_schema.persisted_properties) { - auto target_prop = target_object_schema->property_for_name(current_prop.name); - if (!target_prop || !property_can_be_migrated_to_nullable(current_prop, *target_prop)) - continue; - - target_prop->table_column = current_prop.table_column; - current_prop.table_column = current_prop.table_column + 1; - - table->insert_column(target_prop->table_column, DataType(target_prop->type), target_prop->name, target_prop->is_nullable); - copy_property_values(current_prop, *target_prop, *table); - table->remove_column(current_prop.table_column); - - current_prop.table_column = target_prop->table_column; - } - - bool inserted_placeholder_column = false; - - // remove extra columns - size_t deleted = 0; - for (auto& current_prop : current_schema.persisted_properties) { - current_prop.table_column -= deleted; - - auto target_prop = target_object_schema->property_for_name(current_prop.name); - // mark object name & property pairs for deletion - if (!target_prop) { - to_delete.push_back(std::make_pair(current_schema.name, current_prop)); - } - else if ((property_has_changed(current_prop, *target_prop) && - !property_can_be_migrated_to_nullable(current_prop, *target_prop))) { - if (deleted == current_schema.persisted_properties.size() - 1) { - // We're about to remove the last column from the table. Insert a placeholder column to preserve - // the number of rows in the table for the addition of new columns below. - table->add_column(type_Bool, "placeholder"); - inserted_placeholder_column = true; - } - - table->remove_column(current_prop.table_column); - ++deleted; - current_prop.table_column = npos; - } - } - - // add missing columns - for (auto& target_prop : target_props) { - auto current_prop = current_schema.property_for_name(target_prop.name); - - // add any new properties (no old column or old column was removed due to not matching) - if (!current_prop || current_prop->table_column == npos) { - switch (target_prop.type) { - // for objects and arrays, we have to specify target table - case PropertyType::Object: - case PropertyType::Array: { - TableRef link_table = ObjectStore::table_for_object_type(group, target_prop.object_type); - REALM_ASSERT(link_table); - target_prop.table_column = table->add_column_link(DataType(target_prop.type), target_prop.name, *link_table); - break; - } - default: - target_prop.table_column = table->add_column(DataType(target_prop.type), - target_prop.name, - target_prop.is_nullable); - break; - } - } - else { - target_prop.table_column = current_prop->table_column; - } - } - - if (inserted_placeholder_column) { - // We inserted a placeholder due to removing all columns from the table. Remove it, and update the indices - // of any columns that we inserted after it. - table->remove_column(0); - for (auto& target_prop : target_props) { - target_prop.table_column--; - } - } - - // update table metadata - if (target_object_schema->primary_key.length()) { - // if there is a primary key set, check if it is the same as the old key - if (current_schema.primary_key != target_object_schema->primary_key) { - set_primary_key_for_object(group, target_object_schema->name, target_object_schema->primary_key); - } - } - else if (current_schema.primary_key.length()) { - // there is no primary key, so if there was one nil out - set_primary_key_for_object(group, target_object_schema->name, ""); - } - } - return to_delete; -} - -void ObjectStore::remove_properties(Group *group, Schema &target_schema, std::vector> to_delete) { - for (auto& target_object_schema : target_schema) { - TableRef table = table_for_object_type(group, target_object_schema.name); - ObjectSchema current_schema(group, target_object_schema.name); - size_t deleted = 0; - for (auto& current_prop : current_schema.persisted_properties) { - current_prop.table_column -= deleted; - for (auto& single_to_delete : to_delete) { - if (target_object_schema.name == single_to_delete.first && - current_prop.name == single_to_delete.second.name && - current_prop.object_type == single_to_delete.second.object_type) { - table->remove_column(current_prop.table_column); - ++deleted; - current_prop.table_column = npos; - } - } - } - } -} - -bool ObjectStore::is_schema_at_version(const Group *group, uint64_t version) { - uint64_t old_version = get_schema_version(group); - if (old_version > version && old_version != NotVersioned) { - throw InvalidSchemaVersionException(old_version, version); - } - return old_version == version; -} - -bool ObjectStore::needs_update(Schema const& old_schema, Schema const& schema) { - for (auto const& target_schema : schema) { - auto matching_schema = old_schema.find(target_schema); - if (matching_schema == end(old_schema)) { - // Table doesn't exist - return true; - } - - if (matching_schema->persisted_properties.size() != target_schema.persisted_properties.size()) { - // If the number of properties don't match then a migration is required - return false; - } - - // Check that all of the property indexes are up to date - for (size_t i = 0, count = target_schema.persisted_properties.size(); i < count; ++i) { - if (target_schema.persisted_properties[i].is_indexed != matching_schema->persisted_properties[i].is_indexed) { - return true; - } - } - } - - return false; -} - -void ObjectStore::update_realm_with_schema(Group *group, Schema const& old_schema, - uint64_t version, Schema &schema, - MigrationFunction migration) { - // Recheck the schema version after beginning the write transaction as - // another process may have done the migration after we opened the read - // transaction - bool migrating = !is_schema_at_version(group, version); - - // create tables - create_metadata_tables(group); - auto to_delete = create_tables(group, schema, migrating); - - if (!migrating) { - // If we aren't migrating, then verify that all of the tables which - // were already present are valid (newly created ones always are) - verify_schema(old_schema, schema, true); - } - - update_indexes(group, schema); - - if (!migrating) { - return; - } - - // apply the migration block if provided and there's any old data - if (get_schema_version(group) != ObjectStore::NotVersioned) { - migration(group, schema); - remove_properties(group, schema, std::move(to_delete)); - - Schema group_schema = schema_from_group(group); - verify_missing_renamed_properties(group_schema, schema); - verify_schema(group_schema, schema); - validate_primary_column_uniqueness(group, schema); - } - - set_schema_version(group, version); -} - -Schema ObjectStore::schema_from_group(const Group *group) { - std::vector schema; - for (size_t i = 0; i < group->size(); i++) { - std::string object_type = object_type_for_table_name(group->get_table_name(i)); - if (object_type.length()) { - schema.emplace_back(group, object_type); - } - } - return schema; -} - -bool ObjectStore::update_indexes(Group *group, Schema &schema) { - bool changed = false; - for (auto& object_schema : schema) { - TableRef table = table_for_object_type(group, object_schema.name); - if (!table) { - continue; - } - - for (auto& property : object_schema.persisted_properties) { - if (property.requires_index() == table->has_search_index(property.table_column)) { - continue; - } - - changed = true; - if (property.requires_index()) { - try { - table->add_search_index(property.table_column); - } - catch (LogicError const&) { - throw PropertyTypeNotIndexableException(object_schema.name, property); - } - } - else { - table->remove_search_index(property.table_column); - } - } - } - return changed; -} - -void ObjectStore::validate_primary_column_uniqueness(const Group *group, Schema const& schema) { - for (auto& object_schema : schema) { - auto primary_prop = object_schema.primary_key_property(); - if (!primary_prop) { - continue; - } - - ConstTableRef table = table_for_object_type(group, object_schema.name); - if (table->get_distinct_view(primary_prop->table_column).size() != table->size()) { - throw DuplicatePrimaryKeyValueException(object_schema.name, *primary_prop); - } - } -} - -void ObjectStore::delete_data_for_object(Group *group, StringData object_type) { - TableRef table = table_for_object_type(group, object_type); - if (table) { - group->remove_table(table->get_index_in_group()); - set_primary_key_for_object(group, object_type, ""); - } -} - -void ObjectStore::rename_property(Group *group, Schema& passed_schema, StringData object_type, StringData old_name, StringData new_name) { - TableRef table = table_for_object_type(group, object_type); - if (!table) { - throw PropertyRenameMissingNewObjectTypeException(object_type); - } - ObjectSchema matching_schema(group, object_type); - Property *old_property = matching_schema.property_for_name(old_name); - if (old_property == nullptr) { - throw PropertyRenameMissingOldPropertyException(old_name, new_name); - } - auto passed_object_schema = passed_schema.find(object_type); - if (passed_object_schema == passed_schema.end()) { - throw PropertyRenameMissingNewObjectTypeException(object_type); - } - Property *new_property = matching_schema.property_for_name(new_name); - if (new_property == nullptr) { - // new property not in new schema, which means we're probably renaming - // to an intermediate property in a multi-version migration. - // this is safe because the migration will fail schema validation unless - // this property is renamed again. - new_property = matching_schema.property_for_name(old_name); - new_property->name = new_name; - table->rename_column(old_property->table_column, new_name); - return; - } - if (old_property->type != new_property->type || - old_property->object_type != new_property->object_type) { - throw PropertyRenameTypeMismatchException(*old_property, *new_property); - } - if (passed_object_schema->property_for_name(old_name) != nullptr) { - throw PropertyRenameOldStillExistsException(old_name, new_name); - } - size_t column_to_remove = new_property->table_column; - table->rename_column(old_property->table_column, new_name); - table->remove_column(column_to_remove); - // update table_column for each property since it may have shifted - for (auto& current_prop : passed_object_schema->persisted_properties) { - auto target_prop = matching_schema.property_for_name(current_prop.name); - current_prop.table_column = target_prop->table_column; - } - // update index for new column - if (new_property->requires_index() && !old_property->requires_index()) { - table->add_search_index(old_property->table_column); - } else if (!new_property->requires_index() && old_property->requires_index()) { - table->remove_search_index(old_property->table_column); - } - old_property->name = new_name; - // update nullability for column - if (property_can_be_migrated_to_nullable(*old_property, *new_property)) { - new_property->table_column = old_property->table_column; - old_property->table_column = old_property->table_column + 1; - - table->insert_column(new_property->table_column, DataType(new_property->type), new_property->name, new_property->is_nullable); - copy_property_values(*old_property, *new_property, *table); - table->remove_column(old_property->table_column); - - old_property->table_column = new_property->table_column; - } -} - -bool ObjectStore::is_empty(const Group *group) { - for (size_t i = 0; i < group->size(); i++) { - ConstTableRef table = group->get_table(i); - std::string object_type = object_type_for_table_name(table->get_name()); - if (!object_type.length()) { - continue; - } - if (!table->is_empty()) { - return false; - } - } - return true; -} - -PropertyRenameException::PropertyRenameException(std::string old_property_name, std::string new_property_name) : - m_old_property_name(old_property_name), m_new_property_name(new_property_name) -{ - m_what = "Old property '" + old_property_name + "' cannot be renamed to property '" + new_property_name + "'."; -} - -PropertyRenameMissingObjectTypeException::PropertyRenameMissingObjectTypeException(std::string object_type) : - m_object_type(object_type) -{ - m_what = "Cannot rename properties on type '" + object_type + "'."; -} - -PropertyRenameMissingOldObjectTypeException::PropertyRenameMissingOldObjectTypeException(std::string object_type) : - PropertyRenameMissingObjectTypeException(object_type) -{ - m_what = "Cannot rename properties on type '" + object_type + "' because it is missing from the Realm file."; -} - -PropertyRenameMissingNewObjectTypeException::PropertyRenameMissingNewObjectTypeException(std::string object_type) : - PropertyRenameMissingObjectTypeException(object_type) -{ - m_what = "Cannot rename properties on type '" + object_type + "' because it is missing from the specified schema."; -} - -PropertyRenameMissingOldPropertyException::PropertyRenameMissingOldPropertyException(std::string old_property_name, std::string new_property_name) : - PropertyRenameException(old_property_name, new_property_name) -{ - m_what = "Old property '" + old_property_name + "' is missing from the Realm file so it cannot be renamed to '" + new_property_name + "'."; -} - -PropertyRenameMissingNewPropertyException::PropertyRenameMissingNewPropertyException(std::string new_property_name) : - m_new_property_name(new_property_name) -{ - m_what = "Renamed property '" + new_property_name + "' is not in the latest model."; -} - -PropertyRenameOldStillExistsException::PropertyRenameOldStillExistsException(std::string old_property_name, std::string new_property_name) : - PropertyRenameException(old_property_name, new_property_name) -{ - m_what = "Old property '" + old_property_name + "' cannot be renamed to '" + new_property_name + "' because the old property is still present in the specified schema."; -} - -PropertyRenameTypeMismatchException::PropertyRenameTypeMismatchException(Property const& old_property, Property const& new_property) : - m_old_property(old_property), m_new_property(new_property) -{ - m_what = "Old property '" + old_property.name + "' of type '" + old_property.type_string() + "' cannot be renamed to property '" + new_property.name + "' of type '" + new_property.type_string() + "'."; -} - -InvalidSchemaVersionException::InvalidSchemaVersionException(uint64_t old_version, uint64_t new_version) : - m_old_version(old_version), m_new_version(new_version) -{ - m_what = "Provided schema version " + std::to_string(new_version) + " is less than last set version " + std::to_string(old_version) + "."; -} - -DuplicatePrimaryKeyValueException::DuplicatePrimaryKeyValueException(std::string const& object_type, Property const& property) : - m_object_type(object_type), m_property(property) -{ - m_what = "Primary key property '" + property.name + "' has duplicate values after migration."; -} - -SchemaValidationException::SchemaValidationException(std::vector const& errors) : - m_validation_errors(errors) -{ - m_what = "Schema validation failed due to the following errors:"; - for (auto const& error : errors) { - m_what += std::string("\n- ") + error.what(); - } -} - -SchemaMismatchException::SchemaMismatchException(std::vector const& errors) : - m_validation_errors(errors) -{ - m_what ="Migration is required due to the following errors:"; - for (auto const& error : errors) { - m_what += std::string("\n- ") + error.what(); - } -} - -PropertyTypeNotIndexableException::PropertyTypeNotIndexableException(std::string const& object_type, Property const& property) : - ObjectSchemaPropertyException(object_type, property) -{ - m_what = "Can't index property " + object_type + "." + property.name + ": indexing a property of type '" + string_for_property_type(property.type) + "' is currently not supported"; -} - -ExtraPropertyException::ExtraPropertyException(std::string const& object_type, Property const& property) : - ObjectSchemaPropertyException(object_type, property) -{ - m_what = "Property '" + property.name + "' has been added to latest object model."; -} - -MissingPropertyException::MissingPropertyException(std::string const& object_type, Property const& property) : - ObjectSchemaPropertyException(object_type, property) -{ - m_what = "Property '" + property.name + "' is missing from latest object model."; -} - -InvalidNullabilityException::InvalidNullabilityException(std::string const& object_type, Property const& property) : - ObjectSchemaPropertyException(object_type, property) -{ - switch (property.type) { - case PropertyType::Object: - m_what = "'Object' property '" + property.name + "' must be nullable."; - break; - case PropertyType::Any: - case PropertyType::Array: - case PropertyType::LinkingObjects: - m_what = "Property '" + property.name + "' of type '" + string_for_property_type(property.type) + "' cannot be nullable"; - break; - case PropertyType::Int: - case PropertyType::Bool: - case PropertyType::Data: - case PropertyType::Date: - case PropertyType::Float: - case PropertyType::Double: - case PropertyType::String: - REALM_ASSERT(false); - } -} - -MissingObjectTypeException::MissingObjectTypeException(std::string const& object_type, Property const& property) : - ObjectSchemaPropertyException(object_type, property) -{ - m_what = "Target type '" + property.object_type + "' doesn't exist for property '" + property.name + "'."; -} - -MismatchedPropertiesException::MismatchedPropertiesException(std::string const& object_type, Property const& old_property, Property const& new_property) : - ObjectSchemaValidationException(object_type), m_old_property(old_property), m_new_property(new_property) -{ - if (new_property.type != old_property.type) { - m_what = "Property types for '" + old_property.name + "' property do not match. Old type '" + string_for_property_type(old_property.type) + - "', new type '" + string_for_property_type(new_property.type) + "'"; - } - else if (new_property.object_type != old_property.object_type) { - m_what = "Target object type for property '" + old_property.name + "' do not match. Old type '" + old_property.object_type + "', new type '" + new_property.object_type + "'"; - } - else if (new_property.is_nullable != old_property.is_nullable) { - m_what = "Nullability for property '" + old_property.name + "' has changed from '" + std::to_string(old_property.is_nullable) + "' to '" + std::to_string(new_property.is_nullable) + "'."; - } -} - -ChangedPrimaryKeyException::ChangedPrimaryKeyException(std::string const& object_type, std::string const& old_primary, std::string const& new_primary) : ObjectSchemaValidationException(object_type), m_old_primary(old_primary), m_new_primary(new_primary) -{ - if (old_primary.size()) { - m_what = "Property '" + old_primary + "' is no longer a primary key."; - } - else { - m_what = "Property '" + new_primary + "' has been made a primary key."; - } -} - -InvalidPrimaryKeyException::InvalidPrimaryKeyException(std::string const& object_type, std::string const& primary) : - ObjectSchemaValidationException(object_type), m_primary_key(primary) -{ - m_what = "Specified primary key property '" + primary + "' does not exist."; -} - -DuplicatePrimaryKeysException::DuplicatePrimaryKeysException(std::string const& object_type) : ObjectSchemaValidationException(object_type) -{ - m_what = "Duplicate primary keys for object '" + object_type + "'."; -} - -InvalidLinkingObjectsPropertyException::InvalidLinkingObjectsPropertyException(Type error_type, std::string const& object_type, Property const& property) -: ObjectSchemaPropertyException(object_type, property) -{ - switch (error_type) { - case Type::OriginPropertyDoesNotExist: - m_what = "Property '" + property.link_origin_property_name + "' declared as origin of linking objects property '" + property.name + "' does not exist."; - break; - case Type::OriginPropertyIsNotALink: - m_what = "Property '" + property.link_origin_property_name + "' declared as origin of linking objects property '" + property.name + "' is not a link."; - break; - case Type::OriginPropertyInvalidLinkTarget: - m_what = "Property '" + property.link_origin_property_name + "' declared as origin of linking objects property '" + property.name + "' does not link to class '" + object_type + "'."; - break; - } -} diff --git a/Pods/Realm/Realm/ObjectStore/results.cpp b/Pods/Realm/Realm/ObjectStore/results.cpp deleted file mode 100644 index 123370f9..00000000 --- a/Pods/Realm/Realm/ObjectStore/results.cpp +++ /dev/null @@ -1,503 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "results.hpp" - -#include "impl/realm_coordinator.hpp" -#include "impl/results_notifier.hpp" -#include "object_store.hpp" - -#include - -using namespace realm; - -#ifdef __has_cpp_attribute -#define REALM_HAS_CCP_ATTRIBUTE(attr) __has_cpp_attribute(attr) -#else -#define REALM_HAS_CCP_ATTRIBUTE(attr) 0 -#endif - -#if REALM_HAS_CCP_ATTRIBUTE(clang::fallthrough) -#define REALM_FALLTHROUGH [[clang::fallthrough]] -#else -#define REALM_FALLTHROUGH -#endif - -Results::Results(SharedRealm r, Query q, SortOrder s) -: m_realm(std::move(r)) -, m_query(std::move(q)) -, m_table(m_query.get_table().get()) -, m_sort(std::move(s)) -, m_mode(Mode::Query) -{ -} - -Results::Results(SharedRealm r, Table& table) -: m_realm(std::move(r)) -, m_table(&table) -, m_mode(Mode::Table) -{ -} - -Results::Results(SharedRealm r, LinkViewRef lv, util::Optional q, SortOrder s) -: m_realm(std::move(r)) -, m_link_view(lv) -, m_table(&lv->get_target_table()) -, m_sort(std::move(s)) -, m_mode(Mode::LinkView) -{ - REALM_ASSERT(m_sort.column_indices.size() == m_sort.ascending.size()); - if (q) { - m_query = std::move(*q); - m_mode = Mode::Query; - } -} - -Results::Results(SharedRealm r, SortOrder s, TableView tv) -: m_realm(std::move(r)) -, m_table_view(std::move(tv)) -, m_table(&m_table_view.get_parent()) -, m_sort(std::move(s)) -, m_mode(Mode::TableView) -{ - REALM_ASSERT(m_sort.column_indices.size() == m_sort.ascending.size()); -} - -Results::~Results() -{ - if (m_notifier) { - m_notifier->unregister(); - } -} - -bool Results::is_valid() const -{ - if (m_realm) - m_realm->verify_thread(); - - if (m_table && !m_table->is_attached()) - return false; - - return true; -} - -void Results::validate_read() const -{ - // is_valid ensures that we're on the correct thread. - if (!is_valid()) - throw InvalidatedException(); -} - -void Results::validate_write() const -{ - validate_read(); - if (!m_realm || !m_realm->is_in_transaction()) - throw InvalidTransactionException("Must be in a write transaction"); -} - -size_t Results::size() -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: return 0; - case Mode::Table: return m_table->size(); - case Mode::LinkView: return m_link_view->size(); - case Mode::Query: - m_query.sync_view_if_needed(); - return m_query.count(); - case Mode::TableView: - update_tableview(); - return m_table_view.size(); - } - REALM_UNREACHABLE(); -} - -RowExpr Results::get(size_t row_ndx) -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: break; - case Mode::Table: - if (row_ndx < m_table->size()) - return m_table->get(row_ndx); - break; - case Mode::LinkView: - if (update_linkview()) { - if (row_ndx < m_link_view->size()) - return m_link_view->get(row_ndx); - break; - } - REALM_FALLTHROUGH; - case Mode::Query: - case Mode::TableView: - update_tableview(); - if (row_ndx < m_table_view.size()) - return m_table_view.get(row_ndx); - break; - } - - throw OutOfBoundsIndexException{row_ndx, size()}; -} - -util::Optional Results::first() -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: - return none; - case Mode::Table: - return m_table->size() == 0 ? util::none : util::make_optional(m_table->front()); - case Mode::LinkView: - if (update_linkview()) - return m_link_view->size() == 0 ? util::none : util::make_optional(m_link_view->get(0)); - REALM_FALLTHROUGH; - case Mode::Query: - case Mode::TableView: - update_tableview(); - return m_table_view.size() == 0 ? util::none : util::make_optional(m_table_view.front()); - } - REALM_UNREACHABLE(); -} - -util::Optional Results::last() -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: - return none; - case Mode::Table: - return m_table->size() == 0 ? util::none : util::make_optional(m_table->back()); - case Mode::LinkView: - if (update_linkview()) - return m_link_view->size() == 0 ? util::none : util::make_optional(m_link_view->get(m_link_view->size() - 1)); - REALM_FALLTHROUGH; - case Mode::Query: - case Mode::TableView: - update_tableview(); - return m_table_view.size() == 0 ? util::none : util::make_optional(m_table_view.back()); - } - REALM_UNREACHABLE(); -} - -bool Results::update_linkview() -{ - if (m_sort) { - m_query = get_query(); - m_mode = Mode::Query; - update_tableview(); - return false; - } - return true; -} - -void Results::update_tableview() -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: - case Mode::Table: - case Mode::LinkView: - return; - case Mode::Query: - m_query.sync_view_if_needed(); - m_table_view = m_query.find_all(); - if (m_sort) { - m_table_view.sort(m_sort.column_indices, m_sort.ascending); - } - m_mode = Mode::TableView; - break; - case Mode::TableView: - if (!m_notifier && !m_realm->is_in_transaction() && m_realm->can_deliver_notifications()) { - m_notifier = std::make_shared<_impl::ResultsNotifier>(*this); - _impl::RealmCoordinator::register_notifier(m_notifier); - } - m_has_used_table_view = true; - m_table_view.sync_if_needed(); - break; - } -} - -size_t Results::index_of(Row const& row) -{ - validate_read(); - if (!row) { - throw DetatchedAccessorException{}; - } - if (m_table && row.get_table() != m_table) { - throw IncorrectTableException{ - ObjectStore::object_type_for_table_name(m_table->get_name()), - ObjectStore::object_type_for_table_name(row.get_table()->get_name())}; - } - return index_of(row.get_index()); -} - -size_t Results::index_of(size_t row_ndx) -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: - return not_found; - case Mode::Table: - return row_ndx; - case Mode::LinkView: - if (update_linkview()) - return m_link_view->find(row_ndx); - REALM_FALLTHROUGH; - case Mode::Query: - case Mode::TableView: - update_tableview(); - return m_table_view.find_by_source_ndx(row_ndx); - } - REALM_UNREACHABLE(); -} - -template -util::Optional Results::aggregate(size_t column, bool return_none_for_empty, - Int agg_int, Float agg_float, - Double agg_double, Timestamp agg_timestamp) -{ - validate_read(); - if (!m_table) - return none; - if (column > m_table->get_column_count()) - throw OutOfBoundsIndexException{column, m_table->get_column_count()}; - - auto do_agg = [&](auto const& getter) -> util::Optional { - switch (m_mode) { - case Mode::Empty: - return none; - case Mode::Table: - if (return_none_for_empty && m_table->size() == 0) - return none; - return util::Optional(getter(*m_table)); - case Mode::LinkView: - m_query = get_query(); - m_mode = Mode::Query; - REALM_FALLTHROUGH; - case Mode::Query: - case Mode::TableView: - this->update_tableview(); - if (return_none_for_empty && m_table_view.size() == 0) - return none; - return util::Optional(getter(m_table_view)); - } - REALM_UNREACHABLE(); - }; - - switch (m_table->get_column_type(column)) - { - case type_Timestamp: return do_agg(agg_timestamp); - case type_Double: return do_agg(agg_double); - case type_Float: return do_agg(agg_float); - case type_Int: return do_agg(agg_int); - default: - throw UnsupportedColumnTypeException{column, m_table}; - } -} - -util::Optional Results::max(size_t column) -{ - return aggregate(column, true, - [=](auto const& table) { return table.maximum_int(column); }, - [=](auto const& table) { return table.maximum_float(column); }, - [=](auto const& table) { return table.maximum_double(column); }, - [=](auto const& table) { return table.maximum_timestamp(column); }); -} - -util::Optional Results::min(size_t column) -{ - return aggregate(column, true, - [=](auto const& table) { return table.minimum_int(column); }, - [=](auto const& table) { return table.minimum_float(column); }, - [=](auto const& table) { return table.minimum_double(column); }, - [=](auto const& table) { return table.minimum_timestamp(column); }); -} - -util::Optional Results::sum(size_t column) -{ - return aggregate(column, false, - [=](auto const& table) { return table.sum_int(column); }, - [=](auto const& table) { return table.sum_float(column); }, - [=](auto const& table) { return table.sum_double(column); }, - [=](auto const&) -> util::None { throw UnsupportedColumnTypeException{column, m_table}; }); -} - -util::Optional Results::average(size_t column) -{ - return aggregate(column, true, - [=](auto const& table) { return table.average_int(column); }, - [=](auto const& table) { return table.average_float(column); }, - [=](auto const& table) { return table.average_double(column); }, - [=](auto const&) -> util::None { throw UnsupportedColumnTypeException{column, m_table}; }); -} - -void Results::clear() -{ - switch (m_mode) { - case Mode::Empty: - return; - case Mode::Table: - validate_write(); - m_table->clear(); - break; - case Mode::Query: - // Not using Query:remove() because building the tableview and - // clearing it is actually significantly faster - case Mode::TableView: - validate_write(); - update_tableview(); - m_table_view.clear(RemoveMode::unordered); - break; - case Mode::LinkView: - validate_write(); - m_link_view->remove_all_target_rows(); - break; - } -} - -Query Results::get_query() const -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: - case Mode::Query: - return m_query; - case Mode::TableView: { - // A TableView has an associated Query if it was produced by Query::find_all. This is indicated - // by TableView::get_query returning a Query with a non-null table. - Query query = m_table_view.get_query(); - if (query.get_table()) { - return query; - } - - // The TableView has no associated query so create one with no conditions that is restricted - // to the rows in the TableView. - m_table_view.sync_if_needed(); - return Query(*m_table, std::make_unique(m_table_view)); - } - case Mode::LinkView: - return m_table->where(m_link_view); - case Mode::Table: - return m_table->where(); - } - REALM_UNREACHABLE(); -} - -TableView Results::get_tableview() -{ - validate_read(); - switch (m_mode) { - case Mode::Empty: - return {}; - case Mode::LinkView: - if (update_linkview()) - return m_table->where(m_link_view).find_all(); - REALM_FALLTHROUGH; - case Mode::Query: - case Mode::TableView: - update_tableview(); - return m_table_view; - case Mode::Table: - return m_table->where().find_all(); - } - REALM_UNREACHABLE(); -} - -StringData Results::get_object_type() const noexcept -{ - if (!m_table) { - return StringData(); - } - - return ObjectStore::object_type_for_table_name(m_table->get_name()); -} - -Results Results::sort(realm::SortOrder&& sort) const -{ - return Results(m_realm, get_query(), std::move(sort)); -} - -Results Results::filter(Query&& q) const -{ - return Results(m_realm, get_query().and_query(std::move(q)), m_sort); -} - -void Results::prepare_async() -{ - if (m_realm->config().read_only) { - throw InvalidTransactionException("Cannot create asynchronous query for read-only Realms"); - } - if (m_realm->is_in_transaction()) { - throw InvalidTransactionException("Cannot create asynchronous query while in a write transaction"); - } - - if (!m_notifier) { - m_notifier = std::make_shared<_impl::ResultsNotifier>(*this); - _impl::RealmCoordinator::register_notifier(m_notifier); - } -} - -NotificationToken Results::async(std::function target) -{ - prepare_async(); - auto wrap = [=](CollectionChangeSet, std::exception_ptr e) { target(e); }; - return {m_notifier, m_notifier->add_callback(wrap)}; -} - -NotificationToken Results::add_notification_callback(CollectionChangeCallback cb) -{ - prepare_async(); - return {m_notifier, m_notifier->add_callback(std::move(cb))}; -} - -bool Results::is_in_table_order() const -{ - switch (m_mode) { - case Mode::Empty: - case Mode::Table: - return true; - case Mode::LinkView: - return false; - case Mode::Query: - return m_query.produces_results_in_table_order() && !m_sort; - case Mode::TableView: - return m_table_view.is_in_table_order(); - } -} - -void Results::Internal::set_table_view(Results& results, realm::TableView &&tv) -{ - // If the previous TableView was never actually used, then stop generating - // new ones until the user actually uses the Results object again - if (results.m_mode == Mode::TableView) { - results.m_wants_background_updates = results.m_has_used_table_view; - } - - results.m_table_view = std::move(tv); - results.m_mode = Mode::TableView; - results.m_has_used_table_view = false; - REALM_ASSERT(results.m_table_view.is_in_sync()); - REALM_ASSERT(results.m_table_view.is_attached()); -} - -Results::UnsupportedColumnTypeException::UnsupportedColumnTypeException(size_t column, const Table* table) -{ - column_index = column; - column_name = table->get_column_name(column); - column_type = table->get_column_type(column); -} diff --git a/Pods/Realm/Realm/ObjectStore/schema.cpp b/Pods/Realm/Realm/ObjectStore/schema.cpp deleted file mode 100644 index 1daabd89..00000000 --- a/Pods/Realm/Realm/ObjectStore/schema.cpp +++ /dev/null @@ -1,130 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "schema.hpp" - -#include "object_store.hpp" -#include "property.hpp" - -#include - -using namespace realm; - -static bool compare_by_name(ObjectSchema const& lft, ObjectSchema const& rgt) { - return lft.name < rgt.name; -} - -Schema::Schema(std::initializer_list types) : Schema(base(types)) { } - -Schema::Schema(base types) : base(std::move(types)) { - std::sort(begin(), end(), compare_by_name); -} - -Schema::iterator Schema::find(std::string const& name) -{ - ObjectSchema cmp; - cmp.name = name; - return find(cmp); -} - -Schema::const_iterator Schema::find(std::string const& name) const -{ - return const_cast(this)->find(name); -} - -Schema::iterator Schema::find(ObjectSchema const& object) noexcept -{ - auto it = std::lower_bound(begin(), end(), object, compare_by_name); - if (it != end() && it->name != object.name) { - it = end(); - } - return it; -} - -Schema::const_iterator Schema::find(ObjectSchema const& object) const noexcept -{ - return const_cast(this)->find(object); -} - -void Schema::validate() const -{ - std::vector exceptions; - for (auto const& object : *this) { - const Property *primary = nullptr; - - std::vector all_properties = object.persisted_properties; - all_properties.insert(all_properties.end(), object.computed_properties.begin(), object.computed_properties.end()); - - for (auto const& prop : all_properties) { - // check object_type existence - if (!prop.object_type.empty()) { - auto it = find(prop.object_type); - if (it == end()) { - exceptions.emplace_back(MissingObjectTypeException(object.name, prop)); - } - // validate linking objects property. - else if (!prop.link_origin_property_name.empty()) { - using ErrorType = InvalidLinkingObjectsPropertyException::Type; - util::Optional error; - - const Property *origin_property = it->property_for_name(prop.link_origin_property_name); - if (!origin_property) { - error = ErrorType::OriginPropertyDoesNotExist; - } - else if (origin_property->type != PropertyType::Object && origin_property->type != PropertyType::Array) { - error = ErrorType::OriginPropertyIsNotALink; - } - else if (origin_property->object_type != object.name) { - error = ErrorType::OriginPropertyInvalidLinkTarget; - } - - if (error) { - exceptions.emplace_back(InvalidLinkingObjectsPropertyException(*error, object.name, prop)); - } - } - } - - // check nullablity - if (prop.is_nullable) { - if (prop.type == PropertyType::Array || prop.type == PropertyType::Any || prop.type == PropertyType::LinkingObjects) { - exceptions.emplace_back(InvalidNullabilityException(object.name, prop)); - } - } - else if (prop.type == PropertyType::Object) { - exceptions.emplace_back(InvalidNullabilityException(object.name, prop)); - } - - // check primary keys - if (prop.is_primary) { - if (primary) { - exceptions.emplace_back(DuplicatePrimaryKeysException(object.name)); - } - primary = ∝ - } - - // check indexable - if (prop.is_indexed && !prop.is_indexable()) { - exceptions.emplace_back(PropertyTypeNotIndexableException(object.name, prop)); - } - } - } - - if (exceptions.size()) { - throw SchemaValidationException(exceptions); - } -} diff --git a/Pods/Realm/Realm/ObjectStore/shared_realm.cpp b/Pods/Realm/Realm/ObjectStore/shared_realm.cpp deleted file mode 100644 index 6bb7cb74..00000000 --- a/Pods/Realm/Realm/ObjectStore/shared_realm.cpp +++ /dev/null @@ -1,498 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "shared_realm.hpp" - -#include "binding_context.hpp" -#include "impl/realm_coordinator.hpp" -#include "impl/transact_log_handler.hpp" -#include "object_store.hpp" -#include "schema.hpp" - -#include -#include - -using namespace realm; -using namespace realm::_impl; - -Realm::Config::Config(const Config& c) -: path(c.path) -, encryption_key(c.encryption_key) -, schema_version(c.schema_version) -, migration_function(c.migration_function) -, delete_realm_if_migration_needed(c.delete_realm_if_migration_needed) -, read_only(c.read_only) -, in_memory(c.in_memory) -, cache(c.cache) -, disable_format_upgrade(c.disable_format_upgrade) -, automatic_change_notifications(c.automatic_change_notifications) -{ - if (c.schema) { - schema = std::make_unique(*c.schema); - } -} - -Realm::Config::Config() : schema_version(ObjectStore::NotVersioned) { } -Realm::Config::Config(Config&&) = default; -Realm::Config::~Config() = default; - -Realm::Config& Realm::Config::operator=(realm::Realm::Config const& c) -{ - if (&c != this) { - *this = Config(c); - } - return *this; -} - -Realm::Realm(Config config) -: m_config(std::move(config)) -{ - open_with_config(m_config, m_history, m_shared_group, m_read_only_group); - - if (m_read_only_group) { - m_group = m_read_only_group.get(); - } -} - -REALM_NOINLINE static void translate_file_exception(StringData path, bool read_only=false) -{ - try { - throw; - } - catch (util::File::PermissionDenied const& ex) { - throw RealmFileException(RealmFileException::Kind::PermissionDenied, ex.get_path(), - "Unable to open a realm at path '" + ex.get_path() + - "'. Please use a path where your app has " + (read_only ? "read" : "read-write") + " permissions.", - ex.what()); - } - catch (util::File::Exists const& ex) { - throw RealmFileException(RealmFileException::Kind::Exists, ex.get_path(), - "File at path '" + ex.get_path() + "' already exists.", - ex.what()); - } - catch (util::File::NotFound const& ex) { - throw RealmFileException(RealmFileException::Kind::NotFound, ex.get_path(), - "Directory at path '" + ex.get_path() + "' does not exist.", - ex.what()); - } - catch (util::File::AccessError const& ex) { - // Errors for `open()` include the path, but other errors don't. We - // don't want two copies of the path in the error, so strip it out if it - // appears, and then include it in our prefix. - std::string underlying = ex.what(); - auto pos = underlying.find(ex.get_path()); - if (pos != std::string::npos && pos > 0) { - // One extra char at each end for the quotes - underlying.replace(pos - 1, ex.get_path().size() + 2, ""); - } - throw RealmFileException(RealmFileException::Kind::AccessError, ex.get_path(), - "Unable to open a realm at path '" + ex.get_path() + "': " + underlying, - ex.what()); - } - catch (IncompatibleLockFile const& ex) { - throw RealmFileException(RealmFileException::Kind::IncompatibleLockFile, path, - "Realm file is currently open in another process " - "which cannot share access with this process. All processes sharing a single file must be the same architecture.", - ex.what()); - } - catch (FileFormatUpgradeRequired const& ex) { - throw RealmFileException(RealmFileException::Kind::FormatUpgradeRequired, path, - "The Realm file format must be allowed to be upgraded " - "in order to proceed.", - ex.what()); - } -} - -void Realm::open_with_config(const Config& config, - std::unique_ptr& history, - std::unique_ptr& shared_group, - std::unique_ptr& read_only_group) -{ - try { - if (config.read_only) { - read_only_group = std::make_unique(config.path, config.encryption_key.data(), Group::mode_ReadOnly); - } - else { - history = realm::make_client_history(config.path, config.encryption_key.data()); - SharedGroup::DurabilityLevel durability = config.in_memory ? SharedGroup::durability_MemOnly : - SharedGroup::durability_Full; - shared_group = std::make_unique(*history, durability, config.encryption_key.data(), !config.disable_format_upgrade); - } - } - catch (...) { - translate_file_exception(config.path, config.read_only); - } -} - -void Realm::init(std::shared_ptr coordinator) -{ - m_coordinator = std::move(coordinator); - - // if there is an existing realm at the current path steal its schema/column mapping - if (auto existing = m_coordinator->get_schema()) { - m_config.schema = std::make_unique(*existing); - return; - } - - try { - // otherwise get the schema from the group - auto target_schema = std::move(m_config.schema); - auto target_schema_version = m_config.schema_version; - m_config.schema_version = ObjectStore::get_schema_version(read_group()); - m_config.schema = std::make_unique(ObjectStore::schema_from_group(read_group())); - - // if a target schema is supplied, verify that it matches or migrate to - // it, as neeeded - if (target_schema) { - if (m_config.read_only) { - if (m_config.schema_version == ObjectStore::NotVersioned) { - throw UninitializedRealmException("Can't open an un-initialized Realm without a Schema"); - } - target_schema->validate(); - ObjectStore::verify_schema(*m_config.schema, *target_schema, true); - m_config.schema = std::move(target_schema); - } - else { - update_schema(std::move(target_schema), target_schema_version); - } - - if (!m_config.read_only) { - // End the read transaction created to validation/update the - // schema to avoid pinning the version even if the user never - // actually reads data - invalidate(); - } - } - } - catch (...) { - // Trying to unregister from the coordinator before we finish - // construction will result in a deadlock - m_coordinator = nullptr; - throw; - } -} - -Realm::~Realm() -{ - if (m_coordinator) { - m_coordinator->unregister_realm(this); - } -} - -Group *Realm::read_group() -{ - if (!m_group) { - m_group = &const_cast(m_shared_group->begin_read()); - } - return m_group; -} - -SharedRealm Realm::get_shared_realm(Config config) -{ - return RealmCoordinator::get_coordinator(config.path)->get_realm(std::move(config)); -} - -void Realm::update_schema(std::unique_ptr schema, uint64_t version) -{ - schema->validate(); - - auto needs_update = [&] { - // If the schema version matches, just verify that the schema itself also matches - bool needs_write = !m_config.read_only && (m_config.schema_version != version || ObjectStore::needs_update(*m_config.schema, *schema)); - if (needs_write) { - return true; - } - - ObjectStore::verify_schema(*m_config.schema, *schema, m_config.read_only); - m_config.schema = std::move(schema); - m_config.schema_version = version; - m_coordinator->update_schema(*m_config.schema); - return false; - }; - - if (!needs_update()) { - return; - } - - read_group(); - transaction::begin(*m_shared_group, m_binding_context.get(), - /* error on schema changes */ false); - - struct WriteTransactionGuard { - Realm& realm; - ~WriteTransactionGuard() { - if (realm.is_in_transaction()) { - realm.cancel_transaction(); - } - } - } write_transaction_guard{*this}; - - // Recheck the schema version after beginning the write transaction - // If it changed then someone else initialized the schema and we need to - // recheck everything - auto current_schema_version = ObjectStore::get_schema_version(read_group()); - if (current_schema_version != m_config.schema_version) { - m_config.schema_version = current_schema_version; - *m_config.schema = ObjectStore::schema_from_group(read_group()); - - if (!needs_update()) { - cancel_transaction(); - return; - } - } - else if (m_config.delete_realm_if_migration_needed && current_schema_version != ObjectStore::NotVersioned) { - // Delete realm rather than run migration if delete_realm_if_migration_needed is set and the Realm file exists. - // FIXME: not a schema mismatch exception, but this is the exception used to signal the Realm file deletion. - throw SchemaMismatchException(std::vector()); - } - - Config old_config(m_config); - auto migration_function = [&](Group*, Schema&) { - SharedRealm old_realm(new Realm(old_config)); - // Need to open in read-write mode so that it uses a SharedGroup, but - // users shouldn't actually be able to write via the old realm - old_realm->m_config.read_only = true; - - if (m_config.migration_function) { - m_config.migration_function(old_realm, shared_from_this()); - } - }; - - try { - m_config.schema = std::move(schema); - m_config.schema_version = version; - - ObjectStore::update_realm_with_schema(read_group(), *old_config.schema, - version, *m_config.schema, - migration_function); - commit_transaction(); - } - catch (...) { - m_config.schema = std::move(old_config.schema); - m_config.schema_version = old_config.schema_version; - throw; - } - - m_coordinator->update_schema(*m_config.schema); -} - -static void check_read_write(Realm *realm) -{ - if (realm->config().read_only) { - throw InvalidTransactionException("Can't perform transactions on read-only Realms."); - } -} - -void Realm::verify_thread() const -{ - if (m_thread_id != std::this_thread::get_id()) { - throw IncorrectThreadException(); - } -} - -void Realm::verify_in_write() const -{ - if (!is_in_transaction()) { - throw InvalidTransactionException("Cannot modify persisted objects outside of a write transaction."); - } -} - -bool Realm::is_in_transaction() const noexcept -{ - if (!m_shared_group) { - return false; - } - return m_shared_group->get_transact_stage() == SharedGroup::transact_Writing; -} - -void Realm::begin_transaction() -{ - check_read_write(this); - verify_thread(); - - if (is_in_transaction()) { - throw InvalidTransactionException("The Realm is already in a write transaction"); - } - - // make sure we have a read transaction - read_group(); - - transaction::begin(*m_shared_group, m_binding_context.get()); -} - -void Realm::commit_transaction() -{ - check_read_write(this); - verify_thread(); - - if (!is_in_transaction()) { - throw InvalidTransactionException("Can't commit a non-existing write transaction"); - } - - transaction::commit(*m_shared_group, m_binding_context.get()); - m_coordinator->send_commit_notifications(); -} - -void Realm::cancel_transaction() -{ - check_read_write(this); - verify_thread(); - - if (!is_in_transaction()) { - throw InvalidTransactionException("Can't cancel a non-existing write transaction"); - } - - transaction::cancel(*m_shared_group, m_binding_context.get()); -} - -void Realm::invalidate() -{ - verify_thread(); - check_read_write(this); - - if (is_in_transaction()) { - cancel_transaction(); - } - if (!m_group) { - return; - } - - m_shared_group->end_read(); - m_group = nullptr; -} - -bool Realm::compact() -{ - verify_thread(); - - if (m_config.read_only) { - throw InvalidTransactionException("Can't compact a read-only Realm"); - } - if (is_in_transaction()) { - throw InvalidTransactionException("Can't compact a Realm within a write transaction"); - } - - Group* group = read_group(); - for (auto &object_schema : *m_config.schema) { - ObjectStore::table_for_object_type(group, object_schema.name)->optimize(); - } - m_shared_group->end_read(); - m_group = nullptr; - - return m_shared_group->compact(); -} - -void Realm::write_copy(StringData path, BinaryData key) -{ - REALM_ASSERT(!key.data() || key.size() == 64); - verify_thread(); - try { - read_group()->write(path, key.data()); - } - catch (...) { - translate_file_exception(path); - } -} - -void Realm::notify() -{ - verify_thread(); - - if (m_shared_group->has_changed()) { // Throws - if (m_binding_context) { - m_binding_context->changes_available(); - } - if (m_auto_refresh) { - if (m_group) { - m_coordinator->advance_to_ready(*this); - } - else if (m_binding_context) { - m_binding_context->did_change({}, {}); - } - } - } - else { - m_coordinator->process_available_async(*this); - } -} - -bool Realm::refresh() -{ - verify_thread(); - check_read_write(this); - - // can't be any new changes if we're in a write transaction - if (is_in_transaction()) { - return false; - } - - // advance transaction if database has changed - if (!m_shared_group->has_changed()) { // Throws - return false; - } - - if (m_group) { - transaction::advance(*m_shared_group, m_binding_context.get()); - m_coordinator->process_available_async(*this); - } - else { - // Create the read transaction - read_group(); - } - - return true; -} - -bool Realm::can_deliver_notifications() const noexcept -{ - if (m_config.read_only) { - return false; - } - - if (m_binding_context && !m_binding_context->can_deliver_notifications()) { - return false; - } - - return true; -} - -uint64_t Realm::get_schema_version(const realm::Realm::Config &config) -{ - auto coordinator = RealmCoordinator::get_existing_coordinator(config.path); - if (coordinator) { - return coordinator->get_schema_version(); - } - - return ObjectStore::get_schema_version(Realm(config).read_group()); -} - -void Realm::close() -{ - invalidate(); - - if (m_coordinator) { - m_coordinator->unregister_realm(this); - } - - m_group = nullptr; - m_shared_group = nullptr; - m_history = nullptr; - m_read_only_group = nullptr; - m_binding_context = nullptr; - m_coordinator = nullptr; -} diff --git a/Pods/Realm/Realm/RLMAccessor.mm b/Pods/Realm/Realm/RLMAccessor.mm deleted file mode 100644 index 37d69c98..00000000 --- a/Pods/Realm/Realm/RLMAccessor.mm +++ /dev/null @@ -1,892 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMAccessor.h" - -#import "RLMArray_Private.hpp" -#import "RLMObservation.hpp" -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMObject_Private.hpp" -#import "RLMProperty_Private.h" -#import "RLMRealm_Private.hpp" -#import "RLMResults_Private.h" -#import "RLMSchema_Private.h" -#import "RLMUtil.hpp" -#import "results.hpp" - -#import -#import - -typedef NS_ENUM(char, RLMAccessorCode) { - RLMAccessorCodeByte, - RLMAccessorCodeShort, - RLMAccessorCodeInt, - RLMAccessorCodeLong, - RLMAccessorCodeLongLong, - RLMAccessorCodeFloat, - RLMAccessorCodeDouble, - RLMAccessorCodeBool, - RLMAccessorCodeString, - RLMAccessorCodeDate, - RLMAccessorCodeData, - RLMAccessorCodeLink, - RLMAccessorCodeArray, - RLMAccessorCodeLinkingObjects, - RLMAccessorCodeAny, - - RLMAccessorCodeIntObject, - RLMAccessorCodeFloatObject, - RLMAccessorCodeDoubleObject, - RLMAccessorCodeBoolObject, -}; - -// long getter/setter -static inline long long RLMGetLong(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - return obj->_row.get_int(colIndex); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, long long val) { - RLMVerifyInWriteTransaction(obj); - obj->_row.set_int(colIndex, val); -} -static inline void RLMSetValueUnique(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, NSString *propName, long long val) { - RLMVerifyInWriteTransaction(obj); - size_t row = obj->_row.get_table()->find_first_int(colIndex, val); - if (row == obj->_row.get_index()) { - return; - } - if (row != realm::not_found) { - @throw RLMException(@"Can't set primary key property '%@' to existing value '%lld'.", propName, val); - } - obj->_row.set_int(colIndex, val); -} - -// float getter/setter -static inline float RLMGetFloat(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - return obj->_row.get_float(colIndex); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, float val) { - RLMVerifyInWriteTransaction(obj); - obj->_row.set_float(colIndex, val); -} - -// double getter/setter -static inline double RLMGetDouble(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - return obj->_row.get_double(colIndex); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, double val) { - RLMVerifyInWriteTransaction(obj); - obj->_row.set_double(colIndex, val); -} - -// bool getter/setter -static inline bool RLMGetBool(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - return obj->_row.get_bool(colIndex); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, BOOL val) { - RLMVerifyInWriteTransaction(obj); - obj->_row.set_bool(colIndex, val); -} - -// string getter/setter -static inline NSString *RLMGetString(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - return RLMStringDataToNSString(obj->_row.get_string(colIndex)); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, __unsafe_unretained NSString *const val) { - RLMVerifyInWriteTransaction(obj); - try { - obj->_row.set_string(colIndex, RLMStringDataWithNSString(val)); - } - catch (std::exception const& e) { - @throw RLMException(e); - } -} -static inline void RLMSetValueUnique(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, NSString *propName, - __unsafe_unretained NSString *const val) { - RLMVerifyInWriteTransaction(obj); - realm::StringData str = RLMStringDataWithNSString(val); - size_t row = obj->_row.get_table()->find_first_string(colIndex, str); - if (row == obj->_row.get_index()) { - return; - } - if (row != realm::not_found) { - @throw RLMException(@"Can't set primary key property '%@' to existing value '%@'.", propName, val); - } - try { - obj->_row.set_string(colIndex, str); - } - catch (std::exception const& e) { - @throw RLMException(e); - } -} - -// date getter/setter -static inline NSDate *RLMGetDate(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - if (obj->_row.is_null(colIndex)) { - return nil; - } - return RLMTimestampToNSDate(obj->_row.get_timestamp(colIndex)); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, __unsafe_unretained NSDate *const date) { - RLMVerifyInWriteTransaction(obj); - if (date) { - obj->_row.set_timestamp(colIndex, RLMTimestampForNSDate(date)); - } - else { - obj->_row.set_null(colIndex); - } -} - -// data getter/setter -static inline NSData *RLMGetData(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - realm::BinaryData data = obj->_row.get_binary(colIndex); - return RLMBinaryDataToNSData(data); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, __unsafe_unretained NSData *const data) { - RLMVerifyInWriteTransaction(obj); - - try { - obj->_row.set_binary(colIndex, RLMBinaryDataForNSData(data)); - } - catch (std::exception const& e) { - @throw RLMException(e); - } -} - -static inline RLMObjectBase *RLMGetLinkedObjectForValue(__unsafe_unretained RLMRealm *const realm, - __unsafe_unretained NSString *const className, - __unsafe_unretained id const value, - RLMCreationOptions creationOptions) NS_RETURNS_RETAINED; -static inline RLMObjectBase *RLMGetLinkedObjectForValue(__unsafe_unretained RLMRealm *const realm, - __unsafe_unretained NSString *const className, - __unsafe_unretained id const value, - RLMCreationOptions creationOptions) { - RLMObjectBase *link = RLMDynamicCast(value); - if (!link || ![link->_objectSchema.className isEqualToString:className]) { - // create from non-rlmobject - return RLMCreateObjectInRealmWithValue(realm, className, value, creationOptions & RLMCreationOptionsCreateOrUpdate); - } - - if (link.isInvalidated) { - @throw RLMException(@"Adding a deleted or invalidated object to a Realm is not permitted"); - } - - if (link->_realm == realm) { - return link; - } - - if (creationOptions & RLMCreationOptionsPromoteStandalone) { - if (!link->_realm) { - RLMAddObjectToRealm(link, realm, creationOptions & RLMCreationOptionsCreateOrUpdate); - return link; - } - @throw RLMException(@"Can not add objects from a different Realm"); - } - - // copy from another realm or copy from unmanaged - return RLMCreateObjectInRealmWithValue(realm, className, link, creationOptions & RLMCreationOptionsCreateOrUpdate); -} - -// link getter/setter -static inline RLMObjectBase *RLMGetLink(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, __unsafe_unretained NSString *const objectClassName) { - RLMVerifyAttached(obj); - - if (obj->_row.is_null_link(colIndex)) { - return nil; - } - NSUInteger index = obj->_row.get_link(colIndex); - return RLMCreateObjectAccessor(obj->_realm, obj->_realm.schema[objectClassName], index); -} - -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, - __unsafe_unretained RLMObjectBase *const val) { - RLMVerifyInWriteTransaction(obj); - - if (!val) { - obj->_row.nullify_link(colIndex); - } - else { - // make sure it is the correct type - RLMObjectSchema *valSchema = val->_objectSchema; - RLMObjectSchema *objSchema = obj->_objectSchema; - if (![[objSchema.properties[colIndex] objectClassName] isEqualToString:valSchema.className]) { - @throw RLMException(@"Can't set object of type '%@' to property of type '%@'", - valSchema.className, [objSchema.properties[colIndex] objectClassName]); - } - RLMObjectBase *link = RLMGetLinkedObjectForValue(obj->_realm, valSchema.className, val, RLMCreationOptionsPromoteStandalone); - obj->_row.set_link(colIndex, link->_row.get_index()); - } -} - -// array getter/setter -static inline RLMArray *RLMGetArray(__unsafe_unretained RLMObjectBase *const obj, - NSUInteger colIndex, - __unsafe_unretained NSString *const objectClassName, - __unsafe_unretained NSString *const propName) { - RLMVerifyAttached(obj); - - realm::LinkViewRef linkView = obj->_row.get_linklist(colIndex); - return [RLMArrayLinkView arrayWithObjectClassName:objectClassName - view:linkView - realm:obj->_realm - key:propName - parentSchema:obj->_objectSchema]; -} - -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, - __unsafe_unretained id const array) { - RLMVerifyInWriteTransaction(obj); - - realm::LinkViewRef linkView = obj->_row.get_linklist(colIndex); - // remove all old - // FIXME: make sure delete rules don't purge objects - linkView->clear(); - for (RLMObjectBase *link in array) { - RLMObjectBase * addedLink = RLMGetLinkedObjectForValue(obj->_realm, link->_objectSchema.className, link, RLMCreationOptionsPromoteStandalone); - linkView->add(addedLink->_row.get_index()); - } -} - -static inline NSNumber *RLMGetIntObject(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - - if (obj->_row.is_null(colIndex)) { - return nil; - } - return @(obj->_row.get_int(colIndex)); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, - __unsafe_unretained NSNumber *const intObject) { - RLMVerifyInWriteTransaction(obj); - - if (intObject) { - obj->_row.set_int(colIndex, intObject.longLongValue); - } - else { - obj->_row.set_null(colIndex); - } -} -static inline void RLMSetValueUnique(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, NSString *propName, - __unsafe_unretained NSNumber *const intObject) { - RLMVerifyInWriteTransaction(obj); - - long long longLongValue = 0; - size_t row; - if (intObject) { - longLongValue = intObject.longLongValue; - row = obj->_row.get_table()->find_first_int(colIndex, longLongValue); - } - else { - row = obj->_row.get_table()->find_first_null(colIndex); - } - - if (row == obj->_row.get_index()) { - return; - } - if (row != realm::not_found) { - @throw RLMException(@"Can't set primary key property '%@' to existing value '%@'.", propName, intObject); - } - - if (intObject) { - obj->_row.set_int(colIndex, longLongValue); - } - else { - obj->_row.set_null(colIndex); - } -} - -static inline NSNumber *RLMGetFloatObject(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - - if (obj->_row.is_null(colIndex)) { - return nil; - } - return @(obj->_row.get_float(colIndex)); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, - __unsafe_unretained NSNumber *const floatObject) { - RLMVerifyInWriteTransaction(obj); - - if (floatObject) { - obj->_row.set_float(colIndex, floatObject.floatValue); - } - else { - obj->_row.set_null(colIndex); - } -} - -static inline NSNumber *RLMGetDoubleObject(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - - if (obj->_row.is_null(colIndex)) { - return nil; - } - return @(obj->_row.get_double(colIndex)); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, - __unsafe_unretained NSNumber *const doubleObject) { - RLMVerifyInWriteTransaction(obj); - - if (doubleObject) { - obj->_row.set_double(colIndex, doubleObject.doubleValue); - } - else { - obj->_row.set_null(colIndex); - } -} - -static inline NSNumber *RLMGetBoolObject(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex) { - RLMVerifyAttached(obj); - - if (obj->_row.is_null(colIndex)) { - return nil; - } - return @(obj->_row.get_bool(colIndex)); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger colIndex, - __unsafe_unretained NSNumber *const boolObject) { - RLMVerifyInWriteTransaction(obj); - - if (boolObject) { - obj->_row.set_bool(colIndex, boolObject.boolValue); - } - else { - obj->_row.set_null(colIndex); - } -} - -static inline RLMLinkingObjects *RLMGetLinkingObjects(__unsafe_unretained RLMObjectBase *const obj, __unsafe_unretained RLMProperty *const property) { - RLMObjectSchema *objectSchema = obj->_realm.schema[property.objectClassName]; - RLMProperty *linkingProperty = objectSchema[property.linkOriginPropertyName]; - auto backlinkView = obj->_row.get_table()->get_backlink_view(obj->_row.get_index(), objectSchema.table, linkingProperty.column); - realm::Results results(obj->_realm->_realm, {}, std::move(backlinkView)); - return [RLMLinkingObjects resultsWithObjectSchema:objectSchema results:std::move(results)]; -} - -// any getter/setter -static inline id RLMGetAnyProperty(__unsafe_unretained RLMObjectBase *const obj, NSUInteger col_ndx) { - RLMVerifyAttached(obj); - return RLMMixedToObjc(obj->_row.get_mixed(col_ndx)); -} -static inline void RLMSetValue(__unsafe_unretained RLMObjectBase *const obj, NSUInteger, __unsafe_unretained id) { - RLMVerifyInWriteTransaction(obj); - @throw RLMException(@"Modifying Mixed properties is not supported"); -} - -// dynamic getter with column closure -static IMP RLMAccessorGetter(RLMProperty *prop, RLMAccessorCode accessorCode) { - NSUInteger colIndex = prop.column; - NSString *name = prop.name; - NSString *objectClassName = prop.objectClassName; - switch (accessorCode) { - case RLMAccessorCodeByte: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return (char)RLMGetLong(obj, colIndex); - }); - case RLMAccessorCodeShort: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return (short)RLMGetLong(obj, colIndex); - }); - case RLMAccessorCodeInt: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return (int)RLMGetLong(obj, colIndex); - }); - case RLMAccessorCodeLongLong: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetLong(obj, colIndex); - }); - case RLMAccessorCodeLong: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return (long)RLMGetLong(obj, colIndex); - }); - case RLMAccessorCodeFloat: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetFloat(obj, colIndex); - }); - case RLMAccessorCodeDouble: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetDouble(obj, colIndex); - }); - case RLMAccessorCodeBool: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetBool(obj, colIndex); - }); - case RLMAccessorCodeString: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetString(obj, colIndex); - }); - case RLMAccessorCodeDate: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetDate(obj, colIndex); - }); - case RLMAccessorCodeData: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetData(obj, colIndex); - }); - case RLMAccessorCodeLink: - return imp_implementationWithBlock(^id(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetLink(obj, colIndex, objectClassName); - }); - case RLMAccessorCodeArray: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetArray(obj, colIndex, objectClassName, name); - }); - case RLMAccessorCodeAny: - @throw RLMException(@"Cannot create accessor class for schema with Mixed properties"); - case RLMAccessorCodeIntObject: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetIntObject(obj, colIndex); - }); - case RLMAccessorCodeFloatObject: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetFloatObject(obj, colIndex); - }); - case RLMAccessorCodeDoubleObject: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetDoubleObject(obj, colIndex); - }); - case RLMAccessorCodeBoolObject: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetBoolObject(obj, colIndex); - }); - case RLMAccessorCodeLinkingObjects: - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj) { - return RLMGetLinkingObjects(obj, prop); - }); - } -} - -template -static void RLMWrapSetter(__unsafe_unretained RLMObjectBase *const obj, __unsafe_unretained NSString *const name, Function&& f) { - if (RLMObservationInfo *info = RLMGetObservationInfo(obj->_observationInfo, obj->_row.get_index(), obj->_objectSchema)) { - info->willChange(name); - f(); - info->didChange(name); - } - else { - f(); - } -} - -template -static IMP RLMMakeSetter(RLMProperty *prop) { - NSUInteger colIndex = prop.column; - NSString *name = prop.name; - if (prop.isPrimary) { - return imp_implementationWithBlock(^(__unused RLMObjectBase *obj, __unused ArgType val) { - @throw RLMException(@"Primary key can't be changed after an object is inserted."); - }); - } - return imp_implementationWithBlock(^(__unsafe_unretained RLMObjectBase *const obj, ArgType val) { - RLMWrapSetter(obj, name, [&] { - RLMSetValue(obj, colIndex, static_cast(val)); - }); - }); -} - -// dynamic setter with column closure -static IMP RLMAccessorSetter(RLMProperty *prop, RLMAccessorCode accessorCode) { - switch (accessorCode) { - case RLMAccessorCodeByte: return RLMMakeSetter(prop); - case RLMAccessorCodeShort: return RLMMakeSetter(prop); - case RLMAccessorCodeInt: return RLMMakeSetter(prop); - case RLMAccessorCodeLong: return RLMMakeSetter(prop); - case RLMAccessorCodeLongLong: return RLMMakeSetter(prop); - case RLMAccessorCodeFloat: return RLMMakeSetter(prop); - case RLMAccessorCodeDouble: return RLMMakeSetter(prop); - case RLMAccessorCodeBool: return RLMMakeSetter(prop); - case RLMAccessorCodeString: return RLMMakeSetter(prop); - case RLMAccessorCodeDate: return RLMMakeSetter(prop); - case RLMAccessorCodeData: return RLMMakeSetter(prop); - case RLMAccessorCodeLink: return RLMMakeSetter(prop); - case RLMAccessorCodeArray: return RLMMakeSetter(prop); - case RLMAccessorCodeAny: return RLMMakeSetter(prop); - case RLMAccessorCodeIntObject: return RLMMakeSetter *>(prop); - case RLMAccessorCodeFloatObject: return RLMMakeSetter *>(prop); - case RLMAccessorCodeDoubleObject: return RLMMakeSetter *>(prop); - case RLMAccessorCodeBoolObject: return RLMMakeSetter *>(prop); - case RLMAccessorCodeLinkingObjects: return nil; - } -} - -// call getter for superclass for property at colIndex -static id RLMSuperGet(RLMObjectBase *obj, NSString *propName) { - typedef id (*getter_type)(RLMObjectBase *, SEL); - RLMProperty *prop = obj->_objectSchema[propName]; - Class superClass = class_getSuperclass(obj.class); - getter_type superGetter = (getter_type)[superClass instanceMethodForSelector:prop.getterSel]; - return superGetter(obj, prop.getterSel); -} - -// call setter for superclass for property at colIndex -static void RLMSuperSet(RLMObjectBase *obj, NSString *propName, id val) { - typedef void (*setter_type)(RLMObjectBase *, SEL, RLMArray *ar); - RLMProperty *prop = obj->_objectSchema[propName]; - Class superClass = class_getSuperclass(obj.class); - setter_type superSetter = (setter_type)[superClass instanceMethodForSelector:prop.setterSel]; - superSetter(obj, prop.setterSel, val); -} - -// getter/setter for unmanaged -static IMP RLMAccessorStandaloneGetter(RLMProperty *prop, RLMAccessorCode accessorCode) { - // only override getters for RLMArray and linking objects properties - if (accessorCode == RLMAccessorCodeArray) { - NSString *objectClassName = prop.objectClassName; - NSString *propName = prop.name; - - return imp_implementationWithBlock(^(RLMObjectBase *obj) { - id val = RLMSuperGet(obj, propName); - if (!val) { - val = [[RLMArray alloc] initWithObjectClassName:objectClassName]; - RLMSuperSet(obj, propName, val); - } - return val; - }); - } - else if (accessorCode == RLMAccessorCodeLinkingObjects) { - return imp_implementationWithBlock(^(RLMObjectBase *){ - return [RLMResults emptyDetachedResults]; - }); - } - return nil; -} -static IMP RLMAccessorStandaloneSetter(RLMProperty *prop, RLMAccessorCode accessorCode) { - // only override getters for RLMArray and linking objects properties - if (accessorCode == RLMAccessorCodeArray) { - NSString *propName = prop.name; - NSString *objectClassName = prop.objectClassName; - return imp_implementationWithBlock(^(RLMObjectBase *obj, id ar) { - // make copy when setting (as is the case for all other variants) - RLMArray *standaloneAr = [[RLMArray alloc] initWithObjectClassName:objectClassName]; - [standaloneAr addObjects:ar]; - RLMSuperSet(obj, propName, standaloneAr); - }); - } - return nil; -} - -// macros/helpers to generate objc type strings for registering methods -#define GETTER_TYPES(C) C "@:" -#define SETTER_TYPES(C) "v@:" C - -// getter type strings -// NOTE: this typecode is really the the first charachter of the objc/runtime.h type -// the @ type maps to multiple core types (string, date, array, mixed, any which are id in objc) -static const char *getterTypeStringForObjcCode(char code) { - switch (code) { - case 's': return GETTER_TYPES("s"); - case 'i': return GETTER_TYPES("i"); - case 'l': return GETTER_TYPES("l"); - case 'q': return GETTER_TYPES("q"); - case 'f': return GETTER_TYPES("f"); - case 'd': return GETTER_TYPES("d"); - case 'B': return GETTER_TYPES("B"); - case 'c': return GETTER_TYPES("c"); - case '@': return GETTER_TYPES("@"); - default: @throw RLMException(@"Invalid accessor code"); - } -} - -// setter type strings -// NOTE: this typecode is really the the first charachter of the objc/runtime.h type -// the @ type maps to multiple core types (string, date, array, mixed, any which are id in objc) -static const char *setterTypeStringForObjcCode(char code) { - switch (code) { - case 's': return SETTER_TYPES("s"); - case 'i': return SETTER_TYPES("i"); - case 'l': return SETTER_TYPES("l"); - case 'q': return SETTER_TYPES("q"); - case 'f': return SETTER_TYPES("f"); - case 'd': return SETTER_TYPES("d"); - case 'B': return SETTER_TYPES("B"); - case 'c': return SETTER_TYPES("c"); - case '@': return SETTER_TYPES("@"); - default: @throw RLMException(@"Invalid accessor code"); - } -} - -// get accessor lookup code based on objc type and rlm type -static RLMAccessorCode accessorCodeForType(char objcTypeCode, RLMPropertyType rlmType) { - switch (objcTypeCode) { - case 't': return RLMAccessorCodeArray; - case '@': // custom accessors for strings and subtables - switch (rlmType) { // custom accessor codes for types that map to objc objects - case RLMPropertyTypeObject: return RLMAccessorCodeLink; - case RLMPropertyTypeString: return RLMAccessorCodeString; - case RLMPropertyTypeArray: return RLMAccessorCodeArray; - case RLMPropertyTypeDate: return RLMAccessorCodeDate; - case RLMPropertyTypeData: return RLMAccessorCodeData; - case RLMPropertyTypeAny: return RLMAccessorCodeAny; - - case RLMPropertyTypeBool: return RLMAccessorCodeBoolObject; - case RLMPropertyTypeDouble: return RLMAccessorCodeDoubleObject; - case RLMPropertyTypeFloat: return RLMAccessorCodeFloatObject; - case RLMPropertyTypeInt: return RLMAccessorCodeIntObject; - - case RLMPropertyTypeLinkingObjects: return RLMAccessorCodeLinkingObjects; - } - case 'c': - switch (rlmType) { - case RLMPropertyTypeInt: return RLMAccessorCodeByte; - case RLMPropertyTypeBool: return RLMAccessorCodeBool; - default: - @throw RLMException(@"Unexpected property type for Objective-C type code"); - } - case 'B': return RLMAccessorCodeBool; - case 's': return RLMAccessorCodeShort; - case 'i': return RLMAccessorCodeInt; - case 'l': return RLMAccessorCodeLong; - case 'q': return RLMAccessorCodeLongLong; - case 'f': return RLMAccessorCodeFloat; - case 'd': return RLMAccessorCodeDouble; - default: - @throw RLMException(@"Invalid type for objc typecode"); - } -} - -// implement the class method className on accessors to return the className of the -// base object -void RLMReplaceClassNameMethod(Class accessorClass, NSString *className) { - Class metaClass = object_getClass(accessorClass); - IMP imp = imp_implementationWithBlock(^(Class){ return className; }); - class_addMethod(metaClass, @selector(className), imp, "@@:"); -} - -// implement the shared schema method -void RLMReplaceSharedSchemaMethod(Class accessorClass, RLMObjectSchema *schema) { - Class metaClass = object_getClass(accessorClass); - IMP imp = imp_implementationWithBlock(^(Class cls) { - // This can be called on a subclass of the class that we overrode it on - // if that class hasn't been initialized yet - if (cls == accessorClass) { - return schema; - } - return [RLMSchema sharedSchemaForClass:cls]; - }); - class_addMethod(metaClass, @selector(sharedSchema), imp, "@@:"); -} - -static NSMutableSet *s_generatedClasses = [NSMutableSet new]; -static void RLMMarkClassAsGenerated(Class cls) { - @synchronized (s_generatedClasses) { - [s_generatedClasses addObject:cls]; - } -} - -bool RLMIsGeneratedClass(Class cls) { - @synchronized (s_generatedClasses) { - return [s_generatedClasses containsObject:cls]; - } -} - -static Class RLMCreateAccessorClass(Class objectClass, - RLMObjectSchema *schema, - NSString *accessorClassPrefix, - IMP (*getterGetter)(RLMProperty *, RLMAccessorCode), - IMP (*setterGetter)(RLMProperty *, RLMAccessorCode)) { - // throw if no schema, prefix, or object class - if (!objectClass || !schema || !accessorClassPrefix) { - @throw RLMException(@"Missing arguments"); - } - if (!RLMIsObjectOrSubclass(objectClass)) { - @throw RLMException(@"objectClass must derive from RLMObject or Object"); - } - - // create and register proxy class which derives from object class - NSString *accessorClassName = [accessorClassPrefix stringByAppendingString:schema.className]; - Class accClass = objc_getClass(accessorClassName.UTF8String); - if (!accClass) { - accClass = objc_allocateClassPair(objectClass, accessorClassName.UTF8String, 0); - objc_registerClassPair(accClass); - } - - // override getters/setters for each propery - NSArray *allProperties = [schema.properties arrayByAddingObjectsFromArray:schema.computedProperties]; - for (RLMProperty *prop in allProperties) { - RLMAccessorCode accessorCode = accessorCodeForType(prop.objcType, prop.type); - if (prop.getterSel && getterGetter) { - IMP getterImp = getterGetter(prop, accessorCode); - if (getterImp) { - class_replaceMethod(accClass, prop.getterSel, getterImp, getterTypeStringForObjcCode(prop.objcType)); - } - } - if (prop.setterSel && setterGetter) { - IMP setterImp = setterGetter(prop, accessorCode); - if (setterImp) { - class_replaceMethod(accClass, prop.setterSel, setterImp, setterTypeStringForObjcCode(prop.objcType)); - } - } - } - - RLMMarkClassAsGenerated(accClass); - - return accClass; -} - -Class RLMAccessorClassForObjectClass(Class objectClass, RLMObjectSchema *schema, NSString *prefix) { - return RLMCreateAccessorClass(objectClass, schema, prefix, RLMAccessorGetter, RLMAccessorSetter); -} - -Class RLMStandaloneAccessorClassForObjectClass(Class objectClass, RLMObjectSchema *schema) { - return RLMCreateAccessorClass(objectClass, schema, @"RLMStandalone_", - RLMAccessorStandaloneGetter, RLMAccessorStandaloneSetter); -} - -void RLMDynamicValidatedSet(RLMObjectBase *obj, NSString *propName, id val) { - RLMObjectSchema *schema = obj->_objectSchema; - RLMProperty *prop = schema[propName]; - if (!prop) { - @throw RLMException(@"Invalid property name `%@` for class `%@`.", propName, obj->_objectSchema.className); - } - if (prop.isPrimary) { - @throw RLMException(@"Primary key can't be changed to '%@' after an object is inserted.", val); - } - if (!RLMIsObjectValidForProperty(val, prop)) { - @throw RLMException(@"Invalid property value `%@` for property `%@` of class `%@`", val, propName, obj->_objectSchema.className); - } - - RLMDynamicSet(obj, prop, RLMCoerceToNil(val), RLMCreationOptionsPromoteStandalone); -} - -void RLMDynamicSet(__unsafe_unretained RLMObjectBase *const obj, __unsafe_unretained RLMProperty *const prop, - __unsafe_unretained id const val, RLMCreationOptions creationOptions) { - NSUInteger col = prop.column; - RLMWrapSetter(obj, prop.name, [&] { - switch (accessorCodeForType(prop.objcType, prop.type)) { - case RLMAccessorCodeByte: - case RLMAccessorCodeShort: - case RLMAccessorCodeInt: - case RLMAccessorCodeLong: - case RLMAccessorCodeLongLong: - if (prop.isPrimary) { - RLMSetValueUnique(obj, col, prop.name, [val longLongValue]); - } - else { - RLMSetValue(obj, col, [val longLongValue]); - } - break; - case RLMAccessorCodeFloat: - RLMSetValue(obj, col, [val floatValue]); - break; - case RLMAccessorCodeDouble: - RLMSetValue(obj, col, [val doubleValue]); - break; - case RLMAccessorCodeBool: - RLMSetValue(obj, col, [val boolValue]); - break; - case RLMAccessorCodeIntObject: - if (prop.isPrimary) { - RLMSetValueUnique(obj, col, prop.name, (NSNumber *)val); - } - else { - RLMSetValue(obj, col, (NSNumber *)val); - } - break; - case RLMAccessorCodeFloatObject: - RLMSetValue(obj, col, (NSNumber *)val); - break; - case RLMAccessorCodeDoubleObject: - RLMSetValue(obj, col, (NSNumber *)val); - break; - case RLMAccessorCodeBoolObject: - RLMSetValue(obj, col, (NSNumber *)val); - break; - case RLMAccessorCodeString: - if (prop.isPrimary) { - RLMSetValueUnique(obj, col, prop.name, (NSString *)val); - } - else { - RLMSetValue(obj, col, (NSString *)val); - } - break; - case RLMAccessorCodeDate: - RLMSetValue(obj, col, (NSDate *)val); - break; - case RLMAccessorCodeData: - RLMSetValue(obj, col, (NSData *)val); - break; - case RLMAccessorCodeLink: { - if (!val || val == NSNull.null) { - RLMSetValue(obj, col, (RLMObjectBase *)nil); - } - else { - RLMSetValue(obj, col, RLMGetLinkedObjectForValue(obj->_realm, prop.objectClassName, val, creationOptions)); - } - break; - } - case RLMAccessorCodeArray: - if (!val || val == NSNull.null) { - RLMSetValue(obj, col, (id)nil); - } - else { - id rawLinks = val; - NSMutableArray *links = [NSMutableArray array]; - for (id rawLink in rawLinks) { - [links addObject:RLMGetLinkedObjectForValue(obj->_realm, prop.objectClassName, rawLink, creationOptions)]; - } - RLMSetValue(obj, col, links); - } - break; - case RLMAccessorCodeAny: - RLMSetValue(obj, col, val); - break; - case RLMAccessorCodeLinkingObjects: - @throw RLMException(@"Linking objects properties are read-only"); - } - }); -} - -RLMProperty *RLMValidatedGetProperty(__unsafe_unretained RLMObjectBase *const obj, __unsafe_unretained NSString *const propName) { - RLMProperty *prop = obj->_objectSchema[propName]; - if (!prop) { - @throw RLMException(@"Invalid property name `%@` for class `%@`.", propName, obj->_objectSchema.className); - } - return prop; -} - -id RLMDynamicGet(__unsafe_unretained RLMObjectBase *obj, __unsafe_unretained RLMProperty *prop) { - NSUInteger col = prop.column; - switch (accessorCodeForType(prop.objcType, prop.type)) { - case RLMAccessorCodeByte: return @((char)RLMGetLong(obj, col)); - case RLMAccessorCodeShort: return @((short)RLMGetLong(obj, col)); - case RLMAccessorCodeInt: return @((int)RLMGetLong(obj, col)); - case RLMAccessorCodeLong: return @((long)RLMGetLong(obj, col)); - case RLMAccessorCodeLongLong: return @(RLMGetLong(obj, col)); - case RLMAccessorCodeFloat: return @(RLMGetFloat(obj, col)); - case RLMAccessorCodeDouble: return @(RLMGetDouble(obj, col)); - case RLMAccessorCodeBool: return @(RLMGetBool(obj, col)); - case RLMAccessorCodeString: return RLMGetString(obj, col); - case RLMAccessorCodeDate: return RLMGetDate(obj, col); - case RLMAccessorCodeData: return RLMGetData(obj, col); - case RLMAccessorCodeLink: return RLMGetLink(obj, col, prop.objectClassName); - case RLMAccessorCodeArray: return RLMGetArray(obj, col, prop.objectClassName, prop.name); - case RLMAccessorCodeAny: return RLMGetAnyProperty(obj, col); - case RLMAccessorCodeIntObject: return RLMGetIntObject(obj, col); - case RLMAccessorCodeFloatObject: return RLMGetFloatObject(obj, col); - case RLMAccessorCodeDoubleObject: return RLMGetDoubleObject(obj, col); - case RLMAccessorCodeBoolObject: return RLMGetBoolObject(obj, col); - case RLMAccessorCodeLinkingObjects: return RLMGetLinkingObjects(obj, prop); - } -} diff --git a/Pods/Realm/Realm/RLMAnalytics.mm b/Pods/Realm/Realm/RLMAnalytics.mm deleted file mode 100644 index 13aa0c3c..00000000 --- a/Pods/Realm/Realm/RLMAnalytics.mm +++ /dev/null @@ -1,240 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -// Asynchronously submits build information to Realm if running in an iOS -// simulator or on OS X if a debugger is attached. Does nothing if running on an -// iOS / watchOS device or if a debugger is *not* attached. -// -// To be clear: this does *not* run when your app is in production or on -// your end-user’s devices; it will only run in the simulator or when a debugger -// is attached. -// -// Why are we doing this? In short, because it helps us build a better product -// for you. None of the data personally identifies you, your employer or your -// app, but it *will* help us understand what language you use, what iOS -// versions you target, etc. Having this info will help prioritizing our time, -// adding new features and deprecating old features. Collecting an anonymized -// bundle & anonymized MAC is the only way for us to count actual usage of the -// other metrics accurately. If we don’t have a way to deduplicate the info -// reported, it will be useless, as a single developer building their Swift app -// 10 times would report 10 times more than a single Objective-C developer that -// only builds once, making the data all but useless. -// No one likes sharing data unless it’s necessary, we get it, and we’ve -// debated adding this for a long long time. Since Realm is a free product -// without an email signup, we feel this is a necessary step so we can collect -// relevant data to build a better product for you. If you truly, absolutely -// feel compelled to not send this data back to Realm, then you can set an env -// variable named REALM_DISABLE_ANALYTICS. Since Realm is free we believe -// letting these analytics run is a small price to pay for the product & support -// we give you. -// -// Currently the following information is reported: -// - What version of Realm is being used, and from which language (obj-c or Swift). -// - What version of OS X it's running on (in case Xcode aggressively drops -// support for older versions again, we need to know what we need to support). -// - The minimum iOS/OS X version that the application is targeting (again, to -// help us decide what versions we need to support). -// - An anonymous MAC address and bundle ID to aggregate the other information on. -// - What version of Swift is being used (if applicable). - -#import "RLMAnalytics.hpp" - -#import - -#if TARGET_IPHONE_SIMULATOR || TARGET_OS_MAC || (TARGET_OS_WATCH && TARGET_OS_SIMULATOR) || (TARGET_OS_TV && TARGET_OS_SIMULATOR) -#import "RLMRealm.h" -#import "RLMUtil.hpp" - -#import -#import -#import -#import -#import - -#import - -#ifndef REALM_COCOA_VERSION -#import "RLMVersion.h" -#endif - -// Declared for RealmSwiftObjectUtil -@interface NSObject (SwiftVersion) -+ (NSString *)swiftVersion; -@end - -// Wrapper for sysctl() that handles the memory management stuff -static auto RLMSysCtl(int *mib, u_int mibSize, size_t *bufferSize) { - std::unique_ptr buffer(nullptr, &free); - - int ret = sysctl(mib, mibSize, nullptr, bufferSize, nullptr, 0); - if (ret != 0) { - return buffer; - } - - buffer.reset(malloc(*bufferSize)); - if (!buffer) { - return buffer; - } - - ret = sysctl(mib, mibSize, buffer.get(), bufferSize, nullptr, 0); - if (ret != 0) { - buffer.reset(); - } - - return buffer; -} - -// Get the version of OS X we're running on (even in the simulator this gives -// the OS X version and not the simulated iOS version) -static NSString *RLMOSVersion() { - std::array mib = {CTL_KERN, KERN_OSRELEASE}; - size_t bufferSize; - auto buffer = RLMSysCtl(&mib[0], mib.size(), &bufferSize); - if (!buffer) { - return nil; - } - - return [[NSString alloc] initWithBytesNoCopy:buffer.release() - length:bufferSize - 1 - encoding:NSUTF8StringEncoding - freeWhenDone:YES]; -} - -// Hash the data in the given buffer and convert it to a hex-format string -static NSString *RLMHashData(const void *bytes, size_t length) { - unsigned char buffer[CC_SHA256_DIGEST_LENGTH]; - CC_SHA256(bytes, static_cast(length), buffer); - - char formatted[CC_SHA256_DIGEST_LENGTH * 2 + 1]; - for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; ++i) { - sprintf(formatted + i * 2, "%02x", buffer[i]); - } - - return [[NSString alloc] initWithBytes:formatted - length:CC_SHA256_DIGEST_LENGTH * 2 - encoding:NSUTF8StringEncoding]; -} - -// Returns the hash of the MAC address of the first network adaptor since the -// vendorIdentifier isn't constant between iOS simulators. -static NSString *RLMMACAddress() { - int en0 = static_cast(if_nametoindex("en0")); - if (!en0) { - return nil; - } - - std::array mib = {CTL_NET, PF_ROUTE, 0, AF_LINK, NET_RT_IFLIST, en0}; - size_t bufferSize; - auto buffer = RLMSysCtl(&mib[0], mib.size(), &bufferSize); - if (!buffer) { - return nil; - } - - // sockaddr_dl struct is immediately after the if_msghdr struct in the buffer - auto sockaddr = reinterpret_cast(static_cast(buffer.get()) + 1); - auto mac = reinterpret_cast(sockaddr->sdl_data + sockaddr->sdl_nlen); - - return RLMHashData(mac, 6); -} - -static NSDictionary *RLMAnalyticsPayload() { - NSBundle *appBundle = NSBundle.mainBundle; - NSString *hashedBundleID = appBundle.bundleIdentifier; - - // Main bundle isn't always the one of interest (e.g. when running tests - // it's xctest rather than the app's bundle), so look for one with a bundle ID - if (!hashedBundleID) { - for (NSBundle *bundle in NSBundle.allBundles) { - if ((hashedBundleID = bundle.bundleIdentifier)) { - appBundle = bundle; - break; - } - } - } - - // If we found a bundle ID anywhere, hash it as it could contain sensitive - // information (e.g. the name of an unnanounced product) - if (hashedBundleID) { - NSData *data = [hashedBundleID dataUsingEncoding:NSUTF8StringEncoding]; - hashedBundleID = RLMHashData(data.bytes, data.length); - } - - NSString *osVersionString = [[NSProcessInfo processInfo] operatingSystemVersionString]; - Class swiftObjectUtilClass = NSClassFromString(@"RealmSwiftObjectUtil"); - BOOL isSwift = swiftObjectUtilClass != nil; - NSString *swiftVersion = isSwift ? [swiftObjectUtilClass swiftVersion] : @"N/A"; - - static NSString *kUnknownString = @"unknown"; - NSString *hashedMACAddress = RLMMACAddress() ?: kUnknownString; - - return @{ - @"event": @"Run", - @"properties": @{ - // MixPanel properties - @"token": @"ce0fac19508f6c8f20066d345d360fd0", - - // Anonymous identifiers to deduplicate events - @"distinct_id": hashedMACAddress, - @"Anonymized MAC Address": hashedMACAddress, - @"Anonymized Bundle ID": hashedBundleID ?: kUnknownString, - - // Which version of Realm is being used - @"Binding": @"cocoa", - @"Language": isSwift ? @"swift" : @"objc", - @"Realm Version": REALM_COCOA_VERSION, -#if TARGET_OS_WATCH - @"Target OS Type": @"watchos", -#elif TARGET_OS_TV - @"Target OS Type": @"tvos", -#elif TARGET_OS_IPHONE - @"Target OS Type": @"ios", -#else - @"Target OS Type": @"osx", -#endif - @"Swift Version": swiftVersion, - // Current OS version the app is targetting - @"Target OS Version": osVersionString, - // Minimum OS version the app is targetting - @"Target OS Minimum Version": appBundle.infoDictionary[@"MinimumOSVersion"] ?: kUnknownString, - - // Host OS version being built on - @"Host OS Type": @"osx", - @"Host OS Version": RLMOSVersion() ?: kUnknownString, - } - }; -} - -void RLMSendAnalytics() { - if (getenv("REALM_DISABLE_ANALYTICS") || !RLMIsDebuggerAttached() || RLMIsRunningInPlayground()) { - return; - } - - - NSData *payload = [NSJSONSerialization dataWithJSONObject:RLMAnalyticsPayload() options:0 error:nil]; - NSString *url = [NSString stringWithFormat:@"https://api.mixpanel.com/track/?data=%@&ip=1", [payload base64EncodedStringWithOptions:0]]; - - // No error handling or anything because logging errors annoyed people for no - // real benefit, and it's not clear what else we could do - [[NSURLSession.sharedSession dataTaskWithURL:[NSURL URLWithString:url]] resume]; -} - -#else - -void RLMSendAnalytics() {} - -#endif diff --git a/Pods/Realm/Realm/RLMArray.mm b/Pods/Realm/Realm/RLMArray.mm deleted file mode 100644 index 938964d5..00000000 --- a/Pods/Realm/Realm/RLMArray.mm +++ /dev/null @@ -1,438 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMArray_Private.hpp" - -#import "RLMObject_Private.h" -#import "RLMObjectStore.h" -#import "RLMObjectSchema.h" -#import "RLMQueryUtil.hpp" -#import "RLMSwiftSupport.h" -#import "RLMUtil.hpp" - -#import - -// See -countByEnumeratingWithState:objects:count -@interface RLMArrayHolder : NSObject { -@public - std::unique_ptr items; -} -@end -@implementation RLMArrayHolder -@end - -@implementation RLMArray { -@public - // Backing array when this instance is unmanaged - NSMutableArray *_backingArray; -} - -template -static void changeArray(__unsafe_unretained RLMArray *const ar, - NSKeyValueChange kind, dispatch_block_t f, IndexSetFactory&& is) { - if (!ar->_backingArray) { - ar->_backingArray = [NSMutableArray new]; - } - - if (RLMObjectBase *parent = ar->_parentObject) { - NSIndexSet *indexes = is(); - [parent willChange:kind valuesAtIndexes:indexes forKey:ar->_key]; - f(); - [parent didChange:kind valuesAtIndexes:indexes forKey:ar->_key]; - } - else { - f(); - } -} - -static void changeArray(__unsafe_unretained RLMArray *const ar, NSKeyValueChange kind, NSUInteger index, dispatch_block_t f) { - changeArray(ar, kind, f, [=] { return [NSIndexSet indexSetWithIndex:index]; }); -} - -static void changeArray(__unsafe_unretained RLMArray *const ar, NSKeyValueChange kind, NSRange range, dispatch_block_t f) { - changeArray(ar, kind, f, [=] { return [NSIndexSet indexSetWithIndexesInRange:range]; }); -} - -static void changeArray(__unsafe_unretained RLMArray *const ar, NSKeyValueChange kind, NSIndexSet *is, dispatch_block_t f) { - changeArray(ar, kind, f, [=] { return is; }); -} - -- (instancetype)initWithObjectClassName:(NSString *)objectClassName { - self = [super init]; - if (self) { - _objectClassName = objectClassName; - } - return self; -} - -- (RLMRealm *)realm { - return nil; -} - -// -// Generic implementations for all RLMArray variants -// - -- (id)firstObject { - if (self.count) { - return [self objectAtIndex:0]; - } - return nil; -} - -- (id)lastObject { - NSUInteger count = self.count; - if (count) { - return [self objectAtIndex:count-1]; - } - return nil; -} - -- (void)addObjects:(id)objects { - for (id obj in objects) { - [self addObject:obj]; - } -} - -- (void)addObject:(RLMObject *)object { - [self insertObject:object atIndex:self.count]; -} - -- (void)removeLastObject { - NSUInteger count = self.count; - if (count) { - [self removeObjectAtIndex:count-1]; - } -} - -- (id)objectAtIndexedSubscript:(NSUInteger)index { - return [self objectAtIndex:index]; -} - -- (void)setObject:(id)newValue atIndexedSubscript:(NSUInteger)index { - [self replaceObjectAtIndex:index withObject:newValue]; -} - -// -// Unmanaged RLMArray implementation -// - -static void RLMValidateMatchingObjectType(RLMArray *array, RLMObject *object) { - if (!object) { - @throw RLMException(@"Object must not be nil"); - } - if (!object->_objectSchema) { - @throw RLMException(@"Object cannot be inserted unless the schema is initialized. " - "This can happen if you try to insert objects into a RLMArray / List from a default value or from an overriden unmanaged initializer (`init()`)."); - } - if (![array->_objectClassName isEqualToString:object->_objectSchema.className]) { - @throw RLMException(@"Object type '%@' does not match RLMArray type '%@'.", object->_objectSchema.className, array->_objectClassName); - } -} - -static void RLMValidateArrayBounds(__unsafe_unretained RLMArray *const ar, - NSUInteger index, bool allowOnePastEnd=false) { - NSUInteger max = ar->_backingArray.count + allowOnePastEnd; - if (index >= max) { - @throw RLMException(@"Index %llu is out of bounds (must be less than %llu).", - (unsigned long long)index, (unsigned long long)max); - } -} - -- (id)objectAtIndex:(NSUInteger)index { - RLMValidateArrayBounds(self, index); - if (!_backingArray) { - _backingArray = [NSMutableArray new]; - } - return [_backingArray objectAtIndex:index]; -} - -- (NSUInteger)count { - return _backingArray.count; -} - -- (BOOL)isInvalidated { - return NO; -} - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unused __unsafe_unretained id [])buffer count:(__unused NSUInteger)len { - if (state->state != 0) { - return 0; - } - - // We need to enumerate a copy of the backing array so that it doesn't - // reflect changes made during enumeration. This copy has to be autoreleased - // (since there's nowhere for us to store a strong reference), and uses - // RLMArrayHolder rather than an NSArray because NSArray doesn't guarantee - // that it'll use a single contiguous block of memory, and if it doesn't - // we'd need to forward multiple calls to this method to the same NSArray, - // which would require holding a reference to it somewhere. - __autoreleasing RLMArrayHolder *copy = [[RLMArrayHolder alloc] init]; - copy->items = std::make_unique(self.count); - - NSUInteger i = 0; - for (id object in _backingArray) { - copy->items[i++] = object; - } - - state->itemsPtr = (__unsafe_unretained id *)(void *)copy->items.get(); - // needs to point to something valid, but the whole point of this is so - // that it can't be changed - state->mutationsPtr = state->extra; - state->state = i; - - return i; -} - -- (void)addObjectsFromArray:(NSArray *)array { - for (id obj in array) { - RLMValidateMatchingObjectType(self, obj); - } - changeArray(self, NSKeyValueChangeInsertion, NSMakeRange(_backingArray.count, array.count), ^{ - [_backingArray addObjectsFromArray:array]; - }); -} - -- (void)insertObject:(RLMObject *)anObject atIndex:(NSUInteger)index { - RLMValidateMatchingObjectType(self, anObject); - RLMValidateArrayBounds(self, index, true); - changeArray(self, NSKeyValueChangeInsertion, index, ^{ - [_backingArray insertObject:anObject atIndex:index]; - }); -} - -- (void)insertObjects:(id)objects atIndexes:(NSIndexSet *)indexes { - changeArray(self, NSKeyValueChangeInsertion, indexes, ^{ - NSUInteger currentIndex = [indexes firstIndex]; - for (RLMObject *obj in objects) { - RLMValidateMatchingObjectType(self, obj); - [_backingArray insertObject:obj atIndex:currentIndex]; - currentIndex = [indexes indexGreaterThanIndex:currentIndex]; - } - }); -} - -- (void)removeObjectAtIndex:(NSUInteger)index { - RLMValidateArrayBounds(self, index); - changeArray(self, NSKeyValueChangeRemoval, index, ^{ - [_backingArray removeObjectAtIndex:index]; - }); -} - -- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes { - changeArray(self, NSKeyValueChangeRemoval, indexes, ^{ - [_backingArray removeObjectsAtIndexes:indexes]; - }); -} - -- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject { - RLMValidateMatchingObjectType(self, anObject); - RLMValidateArrayBounds(self, index); - changeArray(self, NSKeyValueChangeReplacement, index, ^{ - [_backingArray replaceObjectAtIndex:index withObject:anObject]; - }); -} - -- (void)moveObjectAtIndex:(NSUInteger)sourceIndex toIndex:(NSUInteger)destinationIndex { - RLMValidateArrayBounds(self, sourceIndex); - RLMValidateArrayBounds(self, destinationIndex); - RLMObjectBase *original = _backingArray[sourceIndex]; - - auto start = std::min(sourceIndex, destinationIndex); - auto len = std::max(sourceIndex, destinationIndex) - start + 1; - changeArray(self, NSKeyValueChangeReplacement, {start, len}, ^{ - [_backingArray removeObjectAtIndex:sourceIndex]; - [_backingArray insertObject:original atIndex:destinationIndex]; - }); -} - -- (void)exchangeObjectAtIndex:(NSUInteger)index1 withObjectAtIndex:(NSUInteger)index2 { - RLMValidateArrayBounds(self, index1); - RLMValidateArrayBounds(self, index2); - - changeArray(self, NSKeyValueChangeReplacement, ^{ - [_backingArray exchangeObjectAtIndex:index1 withObjectAtIndex:index2]; - }, [=] { - NSMutableIndexSet *set = [[NSMutableIndexSet alloc] initWithIndex:index1]; - [set addIndex:index2]; - return set; - }); -} - -- (NSUInteger)indexOfObject:(RLMObject *)object { - RLMValidateMatchingObjectType(self, object); - NSUInteger index = 0; - for (RLMObject *cmp in _backingArray) { - if (RLMObjectBaseAreEqual(object, cmp)) { - return index; - } - index++; - } - return NSNotFound; -} - -- (void)removeAllObjects { - changeArray(self, NSKeyValueChangeRemoval, NSMakeRange(0, _backingArray.count), ^{ - [_backingArray removeAllObjects]; - }); -} - -- (RLMResults *)objectsWhere:(NSString *)predicateFormat, ... -{ - va_list args; - va_start(args, predicateFormat); - RLMResults *results = [self objectsWhere:predicateFormat args:args]; - va_end(args); - return results; -} - -- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args -{ - return [self objectsWithPredicate:[NSPredicate predicateWithFormat:predicateFormat arguments:args]]; -} - -- (id)valueForKeyPath:(NSString *)keyPath { - if (!_backingArray) { - return [super valueForKeyPath:keyPath]; - } - // Although delegating to valueForKeyPath: here would allow to support - // nested key paths as well, limiting functionality gives consistency - // between unmanaged and managed arrays. - if ([keyPath characterAtIndex:0] == '@') { - NSRange operatorRange = [keyPath rangeOfString:@"." options:NSLiteralSearch]; - if (operatorRange.location != NSNotFound) { - NSString *operatorKeyPath = [keyPath substringFromIndex:operatorRange.location + 1]; - if ([operatorKeyPath rangeOfString:@"."].location != NSNotFound) { - @throw RLMException(@"Nested key paths are not supported yet for KVC collection operators."); - } - } - } - return [_backingArray valueForKeyPath:keyPath]; -} - -- (id)valueForKey:(NSString *)key { - if ([key isEqualToString:RLMInvalidatedKey]) { - return @NO; // Unmanaged arrays are never invalidated - } - if (!_backingArray) { - return @[]; - } - return [_backingArray valueForKey:key]; -} - -- (void)setValue:(id)value forKey:(NSString *)key { - [_backingArray setValue:value forKey:key]; -} - -- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate { - if (!_backingArray) { - return NSNotFound; - } - return [_backingArray indexOfObjectPassingTest:^BOOL(id obj, NSUInteger, BOOL *) { - return [predicate evaluateWithObject:obj]; - }]; -} - -- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes { - if (!_backingArray) { - _backingArray = [NSMutableArray new]; - } - return [_backingArray objectsAtIndexes:indexes]; -} - -- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context { - RLMValidateArrayObservationKey(keyPath, self); - [super addObserver:observer forKeyPath:keyPath options:options context:context]; -} - -// -// Methods unsupported on unmanaged RLMArray instances -// - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" - -- (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate -{ - @throw RLMException(@"This method may only be called on RLMArray instances retrieved from an RLMRealm"); -} - -- (RLMResults *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending -{ - return [self sortedResultsUsingDescriptors:@[[RLMSortDescriptor sortDescriptorWithProperty:property ascending:ascending]]]; -} - -- (RLMResults *)sortedResultsUsingDescriptors:(NSArray *)properties -{ - @throw RLMException(@"This method may only be called on RLMArray instances retrieved from an RLMRealm"); -} - -// The compiler complains about the method's argument type not matching due to -// it not having the generic type attached, but it doesn't seem to be possible -// to actually include the generic type -// http://www.openradar.me/radar?id=6135653276319744 -#pragma clang diagnostic ignored "-Wmismatched-parameter-types" -- (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMArray *, RLMCollectionChange *, NSError *))block { - @throw RLMException(@"This method may only be called on RLMArray instances retrieved from an RLMRealm"); -} -#pragma clang diagnostic pop - -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ... -{ - va_list args; - va_start(args, predicateFormat); - NSUInteger index = [self indexOfObjectWhere:predicateFormat args:args]; - va_end(args); - return index; -} - -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args -{ - return [self indexOfObjectWithPredicate:[NSPredicate predicateWithFormat:predicateFormat - arguments:args]]; -} - -#pragma mark - Superclass Overrides - -- (NSString *)description { - return [self descriptionWithMaxDepth:RLMDescriptionMaxDepth]; -} - -- (NSString *)descriptionWithMaxDepth:(NSUInteger)depth { - return RLMDescriptionWithMaxDepth(@"RLMArray", self, depth); -} -@end - -@interface RLMSortDescriptor () -@property (nonatomic, strong) NSString *property; -@property (nonatomic, assign) BOOL ascending; -@end - -@implementation RLMSortDescriptor -+ (instancetype)sortDescriptorWithProperty:(NSString *)propertyName ascending:(BOOL)ascending { - RLMSortDescriptor *desc = [[RLMSortDescriptor alloc] init]; - desc->_property = propertyName; - desc->_ascending = ascending; - return desc; -} - -- (instancetype)reversedSortDescriptor { - return [self.class sortDescriptorWithProperty:_property ascending:!_ascending]; -} - -@end diff --git a/Pods/Realm/Realm/RLMArrayLinkView.mm b/Pods/Realm/Realm/RLMArrayLinkView.mm deleted file mode 100644 index 441ad5d4..00000000 --- a/Pods/Realm/Realm/RLMArrayLinkView.mm +++ /dev/null @@ -1,415 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMArray_Private.hpp" - -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMObject_Private.hpp" -#import "RLMObservation.hpp" -#import "RLMProperty_Private.h" -#import "RLMQueryUtil.hpp" -#import "RLMRealm_Private.hpp" -#import "RLMSchema.h" -#import "RLMUtil.hpp" - -#import "list.hpp" -#import "results.hpp" - -#import -#import - -// -// RLMArray implementation -// -@implementation RLMArrayLinkView { -@public - realm::List _backingList; - RLMRealm *_realm; - __unsafe_unretained RLMObjectSchema *_containingObjectSchema; - std::unique_ptr _observationInfo; -} - -+ (RLMArrayLinkView *)arrayWithObjectClassName:(NSString *)objectClassName - view:(realm::LinkViewRef)view - realm:(RLMRealm *)realm - key:(NSString *)key - parentSchema:(RLMObjectSchema *)parentSchema { - RLMArrayLinkView *ar = [[RLMArrayLinkView alloc] initWithObjectClassName:objectClassName]; - ar->_backingList = realm::List(realm->_realm, view); - ar->_realm = realm; - ar->_objectSchema = ar->_realm.schema[objectClassName]; - ar->_containingObjectSchema = parentSchema; - ar->_key = key; - return ar; -} - -void RLMValidateArrayObservationKey(__unsafe_unretained NSString *const keyPath, - __unsafe_unretained RLMArray *const array) { - if (![keyPath isEqualToString:RLMInvalidatedKey]) { - @throw RLMException(@"[<%@ %p> addObserver:forKeyPath:options:context:] is not supported. Key path: %@", - [array class], array, keyPath); - } -} - -void RLMEnsureArrayObservationInfo(std::unique_ptr& info, - __unsafe_unretained NSString *const keyPath, - __unsafe_unretained RLMArray *const array, - __unsafe_unretained id const observed) { - RLMValidateArrayObservationKey(keyPath, array); - if (!info && array.class == [RLMArrayLinkView class]) { - RLMArrayLinkView *lv = static_cast(array); - info = std::make_unique(lv->_containingObjectSchema, - lv->_backingList.get_origin_row_index(), - observed); - } -} - -// -// validation helpers -// -[[gnu::noinline]] -[[noreturn]] -static void throwError() { - try { - throw; - } - catch (realm::InvalidTransactionException const&) { - @throw RLMException(@"Cannot modify managed RLMArray outside of a write transaction"); - } - catch (realm::IncorrectThreadException const&) { - @throw RLMException(@"Realm accessed from incorrect thread"); - } - catch (realm::List::InvalidatedException const&) { - @throw RLMException(@"RLMArray has been invalidated or the containing object has been deleted"); - } - catch (realm::List::DetatchedAccessorException const&) { - @throw RLMException(@"Object has been deleted or invalidated"); - } - catch (realm::List::OutOfBoundsIndexException const& e) { - @throw RLMException(@"Index %zu is out of bounds (must be less than %zu)", - e.requested, e.valid_count); - } -} - -template -static auto translateErrors(Function&& f) { - try { - return f(); - } - catch (...) { - throwError(); - } -} - -static void validateObjectToAdd(__unsafe_unretained RLMArrayLinkView *const ar, - __unsafe_unretained RLMObject *const obj) { - if (!obj) { - @throw RLMException(@"Cannot add `nil` to RLMArray<%@>", ar->_objectClassName); - } - - NSString *objectClassName = obj->_objectSchema.className; - if (![objectClassName isEqualToString:ar->_objectClassName]) { - @throw RLMException(@"Cannot add object of type '%@' to RLMArray<%@>", - objectClassName, ar->_objectClassName); - } - - if (obj->_realm != ar.realm) { - [ar.realm addObject:obj]; - } - else if (obj->_realm && !obj->_row.is_attached()) { - @throw RLMException(@"Object has been deleted or invalidated."); - } -} - -template -static void changeArray(__unsafe_unretained RLMArrayLinkView *const ar, - NSKeyValueChange kind, dispatch_block_t f, IndexSetFactory&& is) { - translateErrors([&] { ar->_backingList.verify_in_transaction(); }); - RLMObservationInfo *info = RLMGetObservationInfo(ar->_observationInfo.get(), - ar->_backingList.get_origin_row_index(), - ar->_containingObjectSchema); - if (info) { - NSIndexSet *indexes = is(); - info->willChange(ar->_key, kind, indexes); - try { - f(); - } - catch (...) { - info->didChange(ar->_key, kind, indexes); - throwError(); - } - info->didChange(ar->_key, kind, indexes); - } - else { - translateErrors([&] { f(); }); - } -} - -static void changeArray(__unsafe_unretained RLMArrayLinkView *const ar, NSKeyValueChange kind, NSUInteger index, dispatch_block_t f) { - changeArray(ar, kind, f, [=] { return [NSIndexSet indexSetWithIndex:index]; }); -} - -static void changeArray(__unsafe_unretained RLMArrayLinkView *const ar, NSKeyValueChange kind, NSRange range, dispatch_block_t f) { - changeArray(ar, kind, f, [=] { return [NSIndexSet indexSetWithIndexesInRange:range]; }); -} - -static void changeArray(__unsafe_unretained RLMArrayLinkView *const ar, NSKeyValueChange kind, NSIndexSet *is, dispatch_block_t f) { - changeArray(ar, kind, f, [=] { return is; }); -} - -// -// public method implementations -// -- (RLMRealm *)realm { - return _realm; -} - -- (NSUInteger)count { - return translateErrors([&] { return _backingList.size(); }); -} - -- (BOOL)isInvalidated { - return translateErrors([&] { return !_backingList.is_valid(); }); -} - -- (BOOL)isEqual:(id)object { - if (RLMArrayLinkView *linkView = RLMDynamicCast(object)) { - return linkView->_backingList == _backingList; - } - return NO; -} - -- (NSUInteger)hash { - return std::hash()(_backingList); -} - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - objects:(__unused __unsafe_unretained id [])buffer - count:(NSUInteger)len { - __autoreleasing RLMFastEnumerator *enumerator; - if (state->state == 0) { - translateErrors([&] { _backingList.verify_attached(); }); - - enumerator = [[RLMFastEnumerator alloc] initWithCollection:self objectSchema:_objectSchema]; - state->extra[0] = (long)enumerator; - state->extra[1] = self.count; - } - else { - enumerator = (__bridge id)(void *)state->extra[0]; - } - - return [enumerator countByEnumeratingWithState:state count:len]; -} - -- (id)objectAtIndex:(NSUInteger)index { - return RLMCreateObjectAccessor(_realm, _objectSchema, - translateErrors([&] { return _backingList.get(index).get_index(); })); -} - -static void RLMInsertObject(RLMArrayLinkView *ar, RLMObject *object, NSUInteger index) { - if (index == NSUIntegerMax) { - index = translateErrors([&] { return ar->_backingList.size(); }); - } - - validateObjectToAdd(ar, object); - changeArray(ar, NSKeyValueChangeInsertion, index, ^{ - ar->_backingList.insert(index, object->_row.get_index()); - }); -} - -- (void)addObject:(RLMObject *)object { - RLMInsertObject(self, object, NSUIntegerMax); -} - -- (void)insertObject:(RLMObject *)object atIndex:(NSUInteger)index { - RLMInsertObject(self, object, index); -} - -- (void)insertObjects:(id)objects atIndexes:(NSIndexSet *)indexes { - changeArray(self, NSKeyValueChangeInsertion, indexes, ^{ - NSUInteger index = [indexes firstIndex]; - for (RLMObject *obj in objects) { - validateObjectToAdd(self, obj); - _backingList.insert(index, obj->_row.get_index()); - index = [indexes indexGreaterThanIndex:index]; - } - }); -} - - -- (void)removeObjectAtIndex:(NSUInteger)index { - changeArray(self, NSKeyValueChangeRemoval, index, ^{ - _backingList.remove(index); - }); -} - -- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes { - changeArray(self, NSKeyValueChangeRemoval, indexes, ^{ - [indexes enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger idx, BOOL *) { - _backingList.remove(idx); - }]; - }); -} - -- (void)addObjectsFromArray:(NSArray *)array { - changeArray(self, NSKeyValueChangeInsertion, NSMakeRange(self.count, array.count), ^{ - for (RLMObject *obj in array) { - validateObjectToAdd(self, obj); - _backingList.add(obj->_row.get_index()); - } - }); -} - -- (void)removeAllObjects { - changeArray(self, NSKeyValueChangeRemoval, NSMakeRange(0, self.count), ^{ - _backingList.remove_all(); - }); -} - -- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(RLMObject *)object { - validateObjectToAdd(self, object); - changeArray(self, NSKeyValueChangeReplacement, index, ^{ - _backingList.set(index, object->_row.get_index()); - }); -} - -- (void)moveObjectAtIndex:(NSUInteger)sourceIndex toIndex:(NSUInteger)destinationIndex { - auto start = std::min(sourceIndex, destinationIndex); - auto len = std::max(sourceIndex, destinationIndex) - start + 1; - changeArray(self, NSKeyValueChangeReplacement, {start, len}, ^{ - _backingList.move(sourceIndex, destinationIndex); - }); -} - -- (void)exchangeObjectAtIndex:(NSUInteger)index1 withObjectAtIndex:(NSUInteger)index2 { - changeArray(self, NSKeyValueChangeReplacement, ^{ - _backingList.swap(index1, index2); - }, [=] { - NSMutableIndexSet *set = [[NSMutableIndexSet alloc] initWithIndex:index1]; - [set addIndex:index2]; - return set; - }); -} - -- (NSUInteger)indexOfObject:(RLMObject *)object { - if (object.invalidated) { - @throw RLMException(@"Object has been deleted or invalidated"); - } - - // check that object types align - if (![_objectClassName isEqualToString:object->_objectSchema.className]) { - @throw RLMException(@"Object of type (%@) does not match RLMArray type (%@)", - object->_objectSchema.className, _objectClassName); - } - - return translateErrors([&] { return RLMConvertNotFound(_backingList.find(object->_row)); }); -} - -- (id)valueForKeyPath:(NSString *)keyPath { - if ([keyPath hasPrefix:@"@"]) { - // Delegate KVC collection operators to RLMResults - auto query = translateErrors([&] { return _backingList.get_query(); }); - RLMResults *results = [RLMResults resultsWithObjectSchema:_objectSchema - results:realm::Results(_realm->_realm, std::move(query))]; - return [results valueForKeyPath:keyPath]; - } - return [super valueForKeyPath:keyPath]; -} - -- (id)valueForKey:(NSString *)key { - // Ideally we'd use "@invalidated" for this so that "invalidated" would use - // normal array KVC semantics, but observing @things works very oddly (when - // it's part of a key path, it's triggered automatically when array index - // changes occur, and can't be sent explicitly, but works normally when it's - // the entire key path), and an RLMArrayLinkView *can't* have objects where - // invalidated is true, so we're not losing much. - if ([key isEqualToString:RLMInvalidatedKey]) { - return @(!_backingList.is_valid()); - } - - translateErrors([&] { _backingList.verify_attached(); }); - return RLMCollectionValueForKey(self, key); -} - -- (void)setValue:(id)value forKey:(NSString *)key { - translateErrors([&] { _backingList.verify_in_transaction(); }); - RLMCollectionSetValueForKey(self, key, value); -} - -- (void)deleteObjectsFromRealm { - // delete all target rows from the realm - RLMTrackDeletions(_realm, ^{ - translateErrors([&] { _backingList.delete_all(); }); - }); -} - -- (RLMResults *)sortedResultsUsingDescriptors:(NSArray *)properties { - auto order = RLMSortOrderFromDescriptors(_objectSchema, properties); - auto results = translateErrors([&] { return _backingList.sort(std::move(order)); }); - return [RLMResults resultsWithObjectSchema:_objectSchema results:std::move(results)]; -} - -- (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate { - auto query = translateErrors([&] { return _backingList.get_query(); }); - RLMUpdateQueryWithPredicate(&query, predicate, _realm.schema, _objectSchema); - return [RLMResults resultsWithObjectSchema:_objectSchema - results:_backingList.filter(std::move(query))]; -} - -- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate { - auto query = translateErrors([&] { return _backingList.get_query(); }); - RLMUpdateQueryWithPredicate(&query, predicate, _realm.schema, _objectSchema); - return RLMConvertNotFound(query.find()); -} - -- (NSArray *)objectsAtIndexes:(__unused NSIndexSet *)indexes { - // FIXME: this is called by KVO when array changes are made. It's not clear - // why, and returning nil seems to work fine. - return nil; -} - -- (void)addObserver:(id)observer - forKeyPath:(NSString *)keyPath - options:(NSKeyValueObservingOptions)options - context:(void *)context { - RLMEnsureArrayObservationInfo(_observationInfo, keyPath, self, self); - [super addObserver:observer forKeyPath:keyPath options:options context:context]; -} - -- (NSUInteger)indexInSource:(NSUInteger)index { - return _backingList.get_unchecked(index); -} - -- (realm::TableView)tableView { - return translateErrors([&] { return _backingList.get_query(); }).find_all(); -} - -// The compiler complains about the method's argument type not matching due to -// it not having the generic type attached, but it doesn't seem to be possible -// to actually include the generic type -// http://www.openradar.me/radar?id=6135653276319744 -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wmismatched-parameter-types" -- (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMArray *, RLMCollectionChange *, NSError *))block { - [_realm verifyNotificationsAreSupported]; - return RLMAddNotificationBlock(self, _backingList, block); -} -#pragma clang diagnostic pop - -@end diff --git a/Pods/Realm/Realm/RLMCollection.mm b/Pods/Realm/Realm/RLMCollection.mm deleted file mode 100644 index 760d5237..00000000 --- a/Pods/Realm/Realm/RLMCollection.mm +++ /dev/null @@ -1,339 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMCollection_Private.hpp" - -#import "RLMArray_Private.h" -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMObject_Private.h" - -#import "collection_notifications.hpp" -#import "list.hpp" -#import "results.hpp" - -#import - -static const int RLMEnumerationBufferSize = 16; - -@implementation RLMFastEnumerator { - // The buffer supplied by fast enumeration does not retain the objects given - // to it, but because we create objects on-demand and don't want them - // autoreleased (a table can have more rows than the device has memory for - // accessor objects) we need a thing to retain them. - id _strongBuffer[RLMEnumerationBufferSize]; - - RLMRealm *_realm; - RLMObjectSchema *_objectSchema; - - // Collection being enumerated. Only one of these two will be valid: when - // possible we enumerate the collection directly, but when in a write - // transaction we instead create a frozen TableView and enumerate that - // instead so that mutating the collection during enumeration works. - id _collection; - realm::TableView _tableView; -} - -- (instancetype)initWithCollection:(id)collection objectSchema:(RLMObjectSchema *)objectSchema { - self = [super init]; - if (self) { - _realm = collection.realm; - _objectSchema = objectSchema; - - if (_realm.inWriteTransaction) { - _tableView = [collection tableView]; - } - else { - _collection = collection; - [_realm registerEnumerator:self]; - } - } - return self; -} - -- (void)dealloc { - if (_collection) { - [_realm unregisterEnumerator:self]; - } -} - -- (void)detach { - _tableView = [_collection tableView]; - _collection = nil; -} - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - count:(NSUInteger)len { - [_realm verifyThread]; - if (!_tableView.is_attached() && !_collection) { - @throw RLMException(@"Collection is no longer valid"); - } - // The fast enumeration buffer size is currently a hardcoded number in the - // compiler so this can't actually happen, but just in case it changes in - // the future... - if (len > RLMEnumerationBufferSize) { - len = RLMEnumerationBufferSize; - } - - NSUInteger batchCount = 0, count = state->extra[1]; - - Class accessorClass = _objectSchema.accessorClass; - for (NSUInteger index = state->state; index < count && batchCount < len; ++index) { - RLMObject *accessor = [[accessorClass alloc] initWithRealm:_realm schema:_objectSchema]; - if (_collection) { - accessor->_row = (*_objectSchema.table)[[_collection indexInSource:index]]; - } - else if (_tableView.is_row_attached(index)) { - accessor->_row = (*_objectSchema.table)[_tableView.get_source_ndx(index)]; - } - RLMInitializeSwiftAccessorGenerics(accessor); - _strongBuffer[batchCount] = accessor; - batchCount++; - } - - for (NSUInteger i = batchCount; i < len; ++i) { - _strongBuffer[i] = nil; - } - - if (batchCount == 0) { - // Release our data if we're done, as we're autoreleased and so may - // stick around for a while - _collection = nil; - if (_tableView.is_attached()) { - _tableView = {}; - } - else { - [_realm unregisterEnumerator:self]; - } - } - - state->itemsPtr = (__unsafe_unretained id *)(void *)_strongBuffer; - state->state += batchCount; - state->mutationsPtr = state->extra+1; - - return batchCount; -} -@end - - -NSArray *RLMCollectionValueForKey(id collection, NSString *key) { - size_t count = collection.count; - if (count == 0) { - return @[]; - } - - RLMRealm *realm = collection.realm; - RLMObjectSchema *objectSchema = collection.objectSchema; - - NSMutableArray *results = [NSMutableArray arrayWithCapacity:count]; - if ([key isEqualToString:@"self"]) { - for (size_t i = 0; i < count; i++) { - size_t rowIndex = [collection indexInSource:i]; - [results addObject:RLMCreateObjectAccessor(realm, objectSchema, rowIndex) ?: NSNull.null]; - } - return results; - } - - RLMObjectBase *accessor = [[objectSchema.accessorClass alloc] initWithRealm:realm schema:objectSchema]; - realm::Table *table = objectSchema.table; - for (size_t i = 0; i < count; i++) { - size_t rowIndex = [collection indexInSource:i]; - accessor->_row = (*table)[rowIndex]; - RLMInitializeSwiftAccessorGenerics(accessor); - [results addObject:[accessor valueForKey:key] ?: NSNull.null]; - } - - return results; -} - -void RLMCollectionSetValueForKey(id collection, NSString *key, id value) { - realm::TableView tv = [collection tableView]; - if (tv.size() == 0) { - return; - } - - RLMRealm *realm = collection.realm; - RLMObjectSchema *objectSchema = collection.objectSchema; - RLMObjectBase *accessor = [[objectSchema.accessorClass alloc] initWithRealm:realm schema:objectSchema]; - for (size_t i = 0; i < tv.size(); i++) { - accessor->_row = tv[i]; - RLMInitializeSwiftAccessorGenerics(accessor); - [accessor setValue:value forKey:key]; - } -} - -NSString *RLMDescriptionWithMaxDepth(NSString *name, - id collection, - NSUInteger depth) { - if (depth == 0) { - return @""; - } - - const NSUInteger maxObjects = 100; - auto str = [NSMutableString stringWithFormat:@"%@ <%p> (\n", name, (void *)collection]; - size_t index = 0, skipped = 0; - for (id obj in collection) { - NSString *sub; - if ([obj respondsToSelector:@selector(descriptionWithMaxDepth:)]) { - sub = [obj descriptionWithMaxDepth:depth - 1]; - } - else { - sub = [obj description]; - } - - // Indent child objects - NSString *objDescription = [sub stringByReplacingOccurrencesOfString:@"\n" - withString:@"\n\t"]; - [str appendFormat:@"\t[%zu] %@,\n", index++, objDescription]; - if (index >= maxObjects) { - skipped = collection.count - maxObjects; - break; - } - } - - // Remove last comma and newline characters - if (collection.count > 0) { - [str deleteCharactersInRange:NSMakeRange(str.length-2, 2)]; - } - if (skipped) { - [str appendFormat:@"\n\t... %zu objects skipped.", skipped]; - } - [str appendFormat:@"\n)"]; - return str; -} - -@implementation RLMCancellationToken { - realm::NotificationToken _token; -} -- (instancetype)initWithToken:(realm::NotificationToken)token { - self = [super init]; - if (self) { - _token = std::move(token); - } - return self; -} - -- (void)stop { - _token = {}; -} - -@end - -@implementation RLMCollectionChange { - realm::CollectionChangeSet _indices; -} - -- (instancetype)initWithChanges:(realm::CollectionChangeSet)indices { - self = [super init]; - if (self) { - _indices = std::move(indices); - } - return self; -} - -static NSArray *toArray(realm::IndexSet const& set) { - NSMutableArray *ret = [NSMutableArray new]; - for (auto index : set.as_indexes()) { - [ret addObject:@(index)]; - } - return ret; -} - -- (NSArray *)insertions { - return toArray(_indices.insertions); -} - -- (NSArray *)deletions { - return toArray(_indices.deletions); -} - -- (NSArray *)modifications { - return toArray(_indices.modifications); -} - -static NSArray *toIndexPathArray(realm::IndexSet const& set, NSUInteger section) { - NSMutableArray *ret = [NSMutableArray new]; - NSUInteger path[2] = {section, 0}; - for (auto index : set.as_indexes()) { - path[1] = index; - [ret addObject:[NSIndexPath indexPathWithIndexes:path length:2]]; - } - return ret; -} - -- (NSArray *)deletionsInSection:(NSUInteger)section { - return toIndexPathArray(_indices.deletions, section); -} - -- (NSArray *)insertionsInSection:(NSUInteger)section { - return toIndexPathArray(_indices.insertions, section); - -} - -- (NSArray *)modificationsInSection:(NSUInteger)section { - return toIndexPathArray(_indices.modifications, section); - -} -@end - -template -RLMNotificationToken *RLMAddNotificationBlock(id objcCollection, - Collection& collection, - void (^block)(id, RLMCollectionChange *, NSError *), - bool suppressInitialChange) { - struct IsValid { - static bool call(realm::List const& list) { - return list.is_valid(); - } - static bool call(realm::Results const&) { - return true; - } - }; - auto cb = [=, &collection](realm::CollectionChangeSet const& changes, - std::exception_ptr err) mutable { - if (err) { - try { - rethrow_exception(err); - } - catch (...) { - NSError *error; - RLMRealmTranslateException(&error); - block(nil, nil, error); - return; - } - } - - if (!IsValid::call(collection)) { - return; - } - - if (changes.empty() || suppressInitialChange) { - block(objcCollection, nil, nil); - suppressInitialChange = false; - } - else { - block(objcCollection, [[RLMCollectionChange alloc] initWithChanges:changes], nil); - } - }; - - return [[RLMCancellationToken alloc] initWithToken:collection.add_notification_callback(cb)]; -} - -// Explicitly instantiate the templated function for the two types we'll use it on -template RLMNotificationToken *RLMAddNotificationBlock(id, realm::List&, void (^)(id, RLMCollectionChange *, NSError *), bool); -template RLMNotificationToken *RLMAddNotificationBlock(id, realm::Results&, void (^)(id, RLMCollectionChange *, NSError *), bool); diff --git a/Pods/Realm/Realm/RLMConstants.m b/Pods/Realm/Realm/RLMConstants.m deleted file mode 100644 index 6fa87aed..00000000 --- a/Pods/Realm/Realm/RLMConstants.m +++ /dev/null @@ -1,34 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -NSString * const RLMRealmRefreshRequiredNotification = @"RLMRealmRefreshRequiredNotification"; -NSString * const RLMRealmDidChangeNotification = @"RLMRealmDidChangeNotification"; - -NSString * const RLMErrorDomain = @"io.realm"; - -NSString * const RLMUnknownSystemErrorDomain = @"io.realm.unknown"; - -NSString * const RLMExceptionName = @"RLMException"; - -NSString * const RLMRealmVersionKey = @"RLMRealmVersion"; - -NSString * const RLMRealmCoreVersionKey = @"RLMRealmCoreVersion"; - -NSString * const RLMInvalidatedKey = @"invalidated"; diff --git a/Pods/Realm/Realm/RLMListBase.mm b/Pods/Realm/Realm/RLMListBase.mm deleted file mode 100644 index 78cf91a5..00000000 --- a/Pods/Realm/Realm/RLMListBase.mm +++ /dev/null @@ -1,60 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMListBase.h" - -#import "RLMArray_Private.hpp" -#import "RLMObservation.hpp" - -@interface RLMArray (KVO) -- (NSArray *)objectsAtIndexes:(__unused NSIndexSet *)indexes; -@end - -@implementation RLMListBase { - std::unique_ptr _observationInfo; -} - -- (instancetype)initWithArray:(RLMArray *)array { - self = [super init]; - if (self) { - __rlmArray = array; - } - return self; -} - -- (id)valueForKey:(NSString *)key { - return [__rlmArray valueForKey:key]; -} - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len { - return [__rlmArray countByEnumeratingWithState:state objects:buffer count:len]; -} - -- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes { - return [__rlmArray objectsAtIndexes:indexes]; -} - -- (void)addObserver:(id)observer - forKeyPath:(NSString *)keyPath - options:(NSKeyValueObservingOptions)options - context:(void *)context { - RLMEnsureArrayObservationInfo(_observationInfo, keyPath, __rlmArray, self); - [super addObserver:observer forKeyPath:keyPath options:options context:context]; -} - -@end diff --git a/Pods/Realm/Realm/RLMMigration.mm b/Pods/Realm/Realm/RLMMigration.mm deleted file mode 100644 index c0be80c2..00000000 --- a/Pods/Realm/Realm/RLMMigration.mm +++ /dev/null @@ -1,164 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMMigration_Private.h" - -#import "RLMAccessor.h" -#import "RLMObject.h" -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMProperty_Private.h" -#import "RLMRealm_Dynamic.h" -#import "RLMRealm_Private.hpp" -#import "RLMResults_Private.h" -#import "RLMSchema_Private.hpp" - -#import "object_store.hpp" -#import "shared_realm.hpp" -#import "schema.hpp" - -using namespace realm; - -// The source realm for a migration has to use a SharedGroup to be able to share -// the file with the destination realm, but we don't want to let the user call -// beginWriteTransaction on it as that would make no sense. -@interface RLMMigrationRealm : RLMRealm -@end - -@implementation RLMMigrationRealm -- (BOOL)readonly { - return YES; -} - -- (void)beginWriteTransaction { - @throw RLMException(@"Cannot modify the source Realm in a migration"); -} -@end - -@implementation RLMMigration - -- (instancetype)initWithRealm:(RLMRealm *)realm oldRealm:(RLMRealm *)oldRealm { - self = [super init]; - if (self) { - // create rw realm to migrate with current on disk table - _realm = realm; - _oldRealm = oldRealm; - object_setClass(_oldRealm, RLMMigrationRealm.class); - } - return self; -} - -- (RLMSchema *)oldSchema { - return self.oldRealm.schema; -} - -- (RLMSchema *)newSchema { - return self.realm.schema; -} - -- (void)enumerateObjects:(NSString *)className block:(RLMObjectMigrationBlock)block { - // get all objects - RLMResults *objects = [_realm.schema schemaForClassName:className] ? [_realm allObjects:className] : nil; - RLMResults *oldObjects = [_oldRealm.schema schemaForClassName:className] ? [_oldRealm allObjects:className] : nil; - - if (objects && oldObjects) { - for (long i = oldObjects.count - 1; i >= 0; i--) { - @autoreleasepool { - block(oldObjects[i], objects[i]); - } - } - } - else if (objects) { - for (long i = objects.count - 1; i >= 0; i--) { - @autoreleasepool { - block(nil, objects[i]); - } - } - } - else if (oldObjects) { - for (long i = oldObjects.count - 1; i >= 0; i--) { - @autoreleasepool { - block(oldObjects[i], nil); - } - } - } -} - -- (void)execute:(RLMMigrationBlock)block { - @autoreleasepool { - // disable all primary keys for migration - for (RLMObjectSchema *objectSchema in _realm.schema.objectSchema) { - objectSchema.primaryKeyProperty.isPrimary = NO; - } - - // apply block and set new schema version - uint64_t oldVersion = _oldRealm->_realm->config().schema_version; - block(self, oldVersion); - - _oldRealm = nil; - _realm = nil; - } -} - -- (RLMObject *)createObject:(NSString *)className withValue:(id)value { - return [_realm createObject:className withValue:value]; -} - -- (RLMObject *)createObject:(NSString *)className withObject:(id)object { - return [self createObject:className withValue:object]; -} - -- (void)deleteObject:(RLMObject *)object { - [_realm deleteObject:object]; -} - -- (BOOL)deleteDataForClassName:(NSString *)name { - if (!name) { - return false; - } - - TableRef table = ObjectStore::table_for_object_type(_realm.group, name.UTF8String); - if (!table) { - return false; - } - - if ([_realm.schema schemaForClassName:name]) { - table->clear(); - } - else { - realm::ObjectStore::delete_data_for_object(_realm.group, name.UTF8String); - } - - return true; -} - -- (void)renamePropertyForClass:(NSString *)className oldName:(NSString *)oldName newName:(NSString *)newName { - realm::ObjectStore::rename_property(_realm.group, *_realm->_realm->config().schema, className.UTF8String, oldName.UTF8String, newName.UTF8String); - ObjectSchema objectStoreSchema(_realm.group, className.UTF8String); - RLMObjectSchema *objectSchema = [RLMObjectSchema objectSchemaForObjectStoreSchema:objectStoreSchema]; - NSMutableArray *mutableObjectSchemas = [NSMutableArray arrayWithArray:_realm.schema.objectSchema]; - [mutableObjectSchemas replaceObjectAtIndex:[mutableObjectSchemas indexOfObject:_realm.schema[className]] - withObject:objectSchema]; - objectSchema.realm = _realm; - _realm.schema.objectSchema = [mutableObjectSchemas copy]; - for (RLMProperty *property in objectSchema.properties) { - property.column = objectStoreSchema.property_for_name(property.name.UTF8String)->table_column; - } -} - -@end diff --git a/Pods/Realm/Realm/RLMObject.mm b/Pods/Realm/Realm/RLMObject.mm deleted file mode 100644 index bcf3a831..00000000 --- a/Pods/Realm/Realm/RLMObject.mm +++ /dev/null @@ -1,245 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMAccessor.h" -#import "RLMObject_Private.h" -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMSchema_Private.h" -#import "RLMRealm_Private.hpp" -#import "RLMQueryUtil.hpp" - -// We declare things in RLMObject which are actually implemented in RLMObjectBase -// for documentation's sake, which leads to -Wunimplemented-method warnings. -// Other alternatives to this would be to disable -Wunimplemented-method for this -// file (but then we could miss legitimately missing things), or declaring the -// inherited things in a category (but they currently aren't nicely grouped for -// that). -@implementation RLMObject - -// synthesized in RLMObjectBase -@dynamic invalidated, realm, objectSchema; - -#pragma mark - Designated Initializers - -- (instancetype)init { - return [super init]; -} - -- (instancetype)initWithValue:(id)value schema:(RLMSchema *)schema { - return [super initWithValue:value schema:schema]; -} - -- (instancetype)initWithRealm:(__unsafe_unretained RLMRealm *const)realm - schema:(__unsafe_unretained RLMObjectSchema *const)schema { - return [super initWithRealm:realm schema:schema]; -} - -#pragma mark - Convenience Initializers - -- (instancetype)initWithValue:(id)value { - [self.class sharedSchema]; // ensure this class' objectSchema is loaded in the partialSharedSchema - RLMSchema *schema = RLMSchema.partialSharedSchema; - return [super initWithValue:value schema:schema]; -} - -- (instancetype)initWithObject:(id)object { - return [self initWithValue:object]; -} - -#pragma mark - Class-based Object Creation - -+ (instancetype)createInDefaultRealmWithValue:(id)value { - return (RLMObject *)RLMCreateObjectInRealmWithValue([RLMRealm defaultRealm], [self className], value, false); -} - -+ (instancetype)createInDefaultRealmWithObject:(id)object { - return [self createInDefaultRealmWithValue:object]; -} - -+ (instancetype)createInRealm:(RLMRealm *)realm withValue:(id)value { - return (RLMObject *)RLMCreateObjectInRealmWithValue(realm, [self className], value, false); -} - -+ (instancetype)createInRealm:(RLMRealm *)realm withObject:(id)object { - return [self createInRealm:realm withValue:object]; -} - -+ (instancetype)createOrUpdateInDefaultRealmWithValue:(id)value { - return [self createOrUpdateInRealm:[RLMRealm defaultRealm] withValue:value]; -} - -+ (instancetype)createOrUpdateInDefaultRealmWithObject:(id)object { - return [self createOrUpdateInDefaultRealmWithValue:object]; -} - -+ (instancetype)createOrUpdateInRealm:(RLMRealm *)realm withValue:(id)value { - // verify primary key - RLMObjectSchema *schema = [self sharedSchema]; - if (!schema.primaryKeyProperty) { - NSString *reason = [NSString stringWithFormat:@"'%@' does not have a primary key and can not be updated", schema.className]; - @throw [NSException exceptionWithName:@"RLMExecption" reason:reason userInfo:nil]; - } - return (RLMObject *)RLMCreateObjectInRealmWithValue(realm, [self className], value, true); -} - -+ (instancetype)createOrUpdateInRealm:(RLMRealm *)realm withObject:(id)object { - return [self createOrUpdateInRealm:realm withValue:object]; -} - -#pragma mark - Subscripting - -- (id)objectForKeyedSubscript:(NSString *)key { - return RLMObjectBaseObjectForKeyedSubscript(self, key); -} - -- (void)setObject:(id)obj forKeyedSubscript:(NSString *)key { - RLMObjectBaseSetObjectForKeyedSubscript(self, key, obj); -} - -#pragma mark - Getting & Querying - -+ (RLMResults *)allObjects { - return RLMGetObjects(RLMRealm.defaultRealm, self.className, nil); -} - -+ (RLMResults *)allObjectsInRealm:(RLMRealm *)realm { - return RLMGetObjects(realm, self.className, nil); -} - -+ (RLMResults *)objectsWhere:(NSString *)predicateFormat, ... { - va_list args; - va_start(args, predicateFormat); - RLMResults *results = [self objectsWhere:predicateFormat args:args]; - va_end(args); - return results; -} - -+ (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args { - return [self objectsWithPredicate:[NSPredicate predicateWithFormat:predicateFormat arguments:args]]; -} - -+ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat, ... { - va_list args; - va_start(args, predicateFormat); - RLMResults *results = [self objectsInRealm:realm where:predicateFormat args:args]; - va_end(args); - return results; -} - -+ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat args:(va_list)args { - return [self objectsInRealm:realm withPredicate:[NSPredicate predicateWithFormat:predicateFormat arguments:args]]; -} - -+ (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate { - return RLMGetObjects(RLMRealm.defaultRealm, self.className, predicate); -} - -+ (RLMResults *)objectsInRealm:(RLMRealm *)realm withPredicate:(NSPredicate *)predicate { - return RLMGetObjects(realm, self.className, predicate); -} - -+ (instancetype)objectForPrimaryKey:(id)primaryKey { - return RLMGetObject(RLMRealm.defaultRealm, self.className, primaryKey); -} - -+ (instancetype)objectInRealm:(RLMRealm *)realm forPrimaryKey:(id)primaryKey { - return RLMGetObject(realm, self.className, primaryKey); -} - -#pragma mark - Other Instance Methods - -- (BOOL)isEqualToObject:(RLMObject *)object { - return [object isKindOfClass:RLMObject.class] && RLMObjectBaseAreEqual(self, object); -} - -+ (NSString *)className { - return [super className]; -} - -#pragma mark - Default values for schema definition - -+ (NSArray *)indexedProperties { - return @[]; -} - -+ (NSDictionary *)linkingObjectsProperties { - return @{}; -} - -+ (NSDictionary *)defaultPropertyValues { - return nil; -} - -+ (NSString *)primaryKey { - return nil; -} - -+ (NSArray *)ignoredProperties { - return nil; -} - -+ (NSArray *)requiredProperties { - return nil; -} - -@end - -@implementation RLMDynamicObject - -+ (BOOL)shouldIncludeInDefaultSchema { - return NO; -} - -- (id)valueForUndefinedKey:(NSString *)key { - return RLMDynamicGet(self, RLMValidatedGetProperty(self, key)); -} - -- (void)setValue:(id)value forUndefinedKey:(NSString *)key { - RLMDynamicValidatedSet(self, key, value); -} - -@end - -@implementation RLMWeakObjectHandle { - realm::Row _row; - RLMRealm *_realm; - RLMObjectSchema *_objectSchema; - Class _objectClass; -} - -- (instancetype)initWithObject:(RLMObjectBase *)object { - if (!(self = [super init])) { - return nil; - } - - _row = object->_row; - _realm = object->_realm; - _objectSchema = object->_objectSchema; - _objectClass = object.class; - - return self; -} - -- (RLMObjectBase *)object { - RLMObjectBase *object = [[_objectClass alloc] initWithRealm:_realm schema:_objectSchema]; - object->_row = std::move(_row); - return object; -} - -@end diff --git a/Pods/Realm/Realm/RLMObjectBase.mm b/Pods/Realm/Realm/RLMObjectBase.mm deleted file mode 100644 index 79ccab13..00000000 --- a/Pods/Realm/Realm/RLMObjectBase.mm +++ /dev/null @@ -1,459 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMObject_Private.hpp" - -#import "RLMAccessor.h" -#import "RLMArray_Private.hpp" -#import "RLMListBase.h" -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMObservation.hpp" -#import "RLMOptionalBase.h" -#import "RLMProperty_Private.h" -#import "RLMRealm_Private.hpp" -#import "RLMSchema_Private.h" -#import "RLMSwiftSupport.h" -#import "RLMUtil.hpp" - -using namespace realm; - -const NSUInteger RLMDescriptionMaxDepth = 5; - -static bool RLMInitializedObjectSchema(RLMObjectBase *obj) { - obj->_objectSchema = [obj.class sharedSchema]; - if (!obj->_objectSchema) { - return false; - } - - // set default values - if (!obj->_objectSchema.isSwiftClass) { - NSDictionary *dict = RLMDefaultValuesForObjectSchema(obj->_objectSchema); - for (NSString *key in dict) { - [obj setValue:dict[key] forKey:key]; - } - } - - // set unmanaged accessor class - object_setClass(obj, obj->_objectSchema.standaloneClass); - return true; -} - -@implementation RLMObjectBase -// unmanaged init -- (instancetype)init { - self = [super init]; - if (self) { - RLMInitializedObjectSchema(self); - } - return self; -} - -- (void)dealloc { - // This can't be a unique_ptr because associated objects are removed - // *after* c++ members are destroyed and dealloc is called, and we need it - // to be in a validish state when that happens - delete _observationInfo; - _observationInfo = nullptr; -} - -static id RLMValidatedObjectForProperty(id obj, RLMProperty *prop, RLMSchema *schema) { - if (RLMIsObjectValidForProperty(obj, prop)) { - return obj; - } - - // check for object or array of properties - if (prop.type == RLMPropertyTypeObject) { - // for object create and try to initialize with obj - RLMObjectSchema *objSchema = schema[prop.objectClassName]; - return [[objSchema.objectClass alloc] initWithValue:obj schema:schema]; - } - else if (prop.type == RLMPropertyTypeArray && [obj conformsToProtocol:@protocol(NSFastEnumeration)]) { - // for arrays, create objects for each element and return new array - RLMObjectSchema *objSchema = schema[prop.objectClassName]; - RLMArray *objects = [[RLMArray alloc] initWithObjectClassName:objSchema.className]; - for (id el in obj) { - [objects addObject:[[objSchema.objectClass alloc] initWithValue:el schema:schema]]; - } - return objects; - } - - // if not convertible to prop throw - @throw RLMException(@"Invalid value '%@' for property '%@'", obj, prop.name); -} - -- (instancetype)initWithValue:(id)value schema:(RLMSchema *)schema { - if (!(self = [super init])) { - return self; - } - - if (!RLMInitializedObjectSchema(self)) { - // Don't populate fields from the passed-in object if we're called - // during schema init - return self; - } - - NSArray *properties = _objectSchema.properties; - if (NSArray *array = RLMDynamicCast(value)) { - if (array.count != properties.count) { - @throw RLMException(@"Invalid array input. Number of array elements does not match number of properties."); - } - for (NSUInteger i = 0; i < array.count; i++) { - id propertyValue = RLMValidatedObjectForProperty(array[i], properties[i], schema); - [self setValue:RLMCoerceToNil(propertyValue) forKeyPath:[properties[i] name]]; - } - } - else { - // assume our object is an NSDictionary or an object with kvc properties - NSDictionary *defaultValues = nil; - for (RLMProperty *prop in properties) { - id obj = RLMValidatedValueForProperty(value, prop.name, _objectSchema.className); - - // get default for nil object - if (!obj) { - if (!defaultValues) { - defaultValues = RLMDefaultValuesForObjectSchema(_objectSchema); - } - obj = defaultValues[prop.name]; - } - - obj = RLMValidatedObjectForProperty(obj, prop, schema); - [self setValue:RLMCoerceToNil(obj) forKeyPath:prop.name]; - } - } - - return self; -} - -- (instancetype)initWithRealm:(__unsafe_unretained RLMRealm *const)realm - schema:(__unsafe_unretained RLMObjectSchema *const)schema { - self = [super init]; - if (self) { - _realm = realm; - _objectSchema = schema; - } - return self; -} - -- (id)valueForKey:(NSString *)key { - if (_observationInfo) { - return _observationInfo->valueForKey(key); - } - return [super valueForKey:key]; -} - -// Generic Swift properties can't be dynamic, so KVO doesn't work for them by default -- (id)valueForUndefinedKey:(NSString *)key { - if (Ivar ivar = _objectSchema[key].swiftIvar) { - return RLMCoerceToNil(object_getIvar(self, ivar)); - } - return [super valueForUndefinedKey:key]; -} - -- (void)setValue:(id)value forUndefinedKey:(NSString *)key { - RLMProperty *property = _objectSchema[key]; - if (Ivar ivar = property.swiftIvar) { - if (property.type == RLMPropertyTypeArray && [value conformsToProtocol:@protocol(NSFastEnumeration)]) { - RLMArray *array = [object_getIvar(self, ivar) _rlmArray]; - [array removeAllObjects]; - [array addObjects:value]; - } - else if (property.optional) { - RLMOptionalBase *optional = object_getIvar(self, ivar); - optional.underlyingValue = value; - } - return; - } - [super setValue:value forUndefinedKey:key]; -} - -// overridden at runtime per-class for performance -+ (NSString *)className { - NSString *className = NSStringFromClass(self); - if ([RLMSwiftSupport isSwiftClassName:className]) { - className = [RLMSwiftSupport demangleClassName:className]; - } - return className; -} - -// overridden at runtime per-class for performance -+ (RLMObjectSchema *)sharedSchema { - return [RLMSchema sharedSchemaForClass:self.class]; -} - -+ (Class)objectUtilClass:(BOOL)isSwift { - return RLMObjectUtilClass(isSwift); -} - -- (NSString *)description -{ - if (self.isInvalidated) { - return @"[invalid object]"; - } - - return [self descriptionWithMaxDepth:RLMDescriptionMaxDepth]; -} - -- (NSString *)descriptionWithMaxDepth:(NSUInteger)depth { - if (depth == 0) { - return @""; - } - - NSString *baseClassName = _objectSchema.className; - NSMutableString *mString = [NSMutableString stringWithFormat:@"%@ {\n", baseClassName]; - - for (RLMProperty *property in _objectSchema.properties) { - id object = RLMObjectBaseObjectForKeyedSubscript(self, property.name); - NSString *sub; - if ([object respondsToSelector:@selector(descriptionWithMaxDepth:)]) { - sub = [object descriptionWithMaxDepth:depth - 1]; - } - else if (property.type == RLMPropertyTypeData) { - static NSUInteger maxPrintedDataLength = 24; - NSData *data = object; - NSUInteger length = data.length; - if (length > maxPrintedDataLength) { - data = [NSData dataWithBytes:data.bytes length:maxPrintedDataLength]; - } - NSString *dataDescription = [data description]; - sub = [NSString stringWithFormat:@"<%@ — %lu total bytes>", [dataDescription substringWithRange:NSMakeRange(1, dataDescription.length - 2)], (unsigned long)length]; - } - else { - sub = [object description]; - } - [mString appendFormat:@"\t%@ = %@;\n", property.name, [sub stringByReplacingOccurrencesOfString:@"\n" withString:@"\n\t"]]; - } - [mString appendString:@"}"]; - - return [NSString stringWithString:mString]; -} - -- (RLMRealm *)realm { - return _realm; -} - -- (RLMObjectSchema *)objectSchema { - return _objectSchema; -} - -- (BOOL)isInvalidated { - // if not unmanaged and our accessor has been detached, we have been deleted - return self.class == _objectSchema.accessorClass && !_row.is_attached(); -} - -- (BOOL)isEqual:(id)object { - if (RLMObjectBase *other = RLMDynamicCast(object)) { - if (_objectSchema.primaryKeyProperty) { - return RLMObjectBaseAreEqual(self, other); - } - } - return [super isEqual:object]; -} - -- (NSUInteger)hash { - if (_objectSchema.primaryKeyProperty) { - id primaryProperty = [self valueForKey:_objectSchema.primaryKeyProperty.name]; - - // modify the hash of our primary key value to avoid potential (although unlikely) collisions - return [primaryProperty hash] ^ 1; - } - else { - return [super hash]; - } -} - -+ (BOOL)shouldIncludeInDefaultSchema { - return RLMIsObjectSubclass(self); -} - -- (id)mutableArrayValueForKey:(NSString *)key { - id obj = [self valueForKey:key]; - if ([obj isKindOfClass:[RLMArray class]]) { - return obj; - } - return [super mutableArrayValueForKey:key]; -} - -- (void)addObserver:(id)observer - forKeyPath:(NSString *)keyPath - options:(NSKeyValueObservingOptions)options - context:(void *)context { - if (!_observationInfo) { - _observationInfo = new RLMObservationInfo(self); - } - _observationInfo->recordObserver(_row, _objectSchema, keyPath); - - [super addObserver:observer forKeyPath:keyPath options:options context:context]; -} - -- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath { - [super removeObserver:observer forKeyPath:keyPath]; - if (_observationInfo) - _observationInfo->removeObserver(); -} - -+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { - const char *className = class_getName(self); - const char accessorClassPrefix[] = "RLMAccessor_"; - if (!strncmp(className, accessorClassPrefix, sizeof(accessorClassPrefix) - 1)) { - if (self.sharedSchema[key]) { - return NO; - } - } - - return [super automaticallyNotifiesObserversForKey:key]; -} - -@end - -void RLMObjectBaseSetRealm(__unsafe_unretained RLMObjectBase *object, __unsafe_unretained RLMRealm *realm) { - if (object) { - object->_realm = realm; - } -} - -RLMRealm *RLMObjectBaseRealm(__unsafe_unretained RLMObjectBase *object) { - return object ? object->_realm : nil; -} - -void RLMObjectBaseSetObjectSchema(__unsafe_unretained RLMObjectBase *object, __unsafe_unretained RLMObjectSchema *objectSchema) { - if (object) { - object->_objectSchema = objectSchema; - } -} - -RLMObjectSchema *RLMObjectBaseObjectSchema(__unsafe_unretained RLMObjectBase *object) { - return object ? object->_objectSchema : nil; -} - -id RLMObjectBaseObjectForKeyedSubscript(RLMObjectBase *object, NSString *key) { - if (!object) { - return nil; - } - - if (object->_realm) { - return RLMDynamicGet(object, RLMValidatedGetProperty(object, key)); - } - else { - return [object valueForKey:key]; - } -} - -void RLMObjectBaseSetObjectForKeyedSubscript(RLMObjectBase *object, NSString *key, id obj) { - if (!object) { - return; - } - - if (object->_realm) { - RLMDynamicValidatedSet(object, key, obj); - } - else { - [object setValue:obj forKey:key]; - } -} - - -BOOL RLMObjectBaseAreEqual(RLMObjectBase *o1, RLMObjectBase *o2) { - // if not the correct types throw - if ((o1 && ![o1 isKindOfClass:RLMObjectBase.class]) || (o2 && ![o2 isKindOfClass:RLMObjectBase.class])) { - @throw RLMException(@"Can only compare objects of class RLMObjectBase"); - } - // if identical object (or both are nil) - if (o1 == o2) { - return YES; - } - // if one is nil - if (o1 == nil || o2 == nil) { - return NO; - } - // if not in realm or differing realms - if (o1->_realm == nil || o1->_realm != o2->_realm) { - return NO; - } - // if either are detached - if (!o1->_row.is_attached() || !o2->_row.is_attached()) { - return NO; - } - // if table and index are the same - return o1->_row.get_table() == o2->_row.get_table() - && o1->_row.get_index() == o2->_row.get_index(); -} - -id RLMValidatedValueForProperty(id object, NSString *key, NSString *className) { - @try { - return [object valueForKey:key]; - } - @catch (NSException *e) { - if ([e.name isEqualToString:NSUndefinedKeyException]) { - @throw RLMException(@"Invalid value '%@' to initialize object of type '%@': missing key '%@'", - object, className, key); - } - @throw; - } -} - -Class RLMObjectUtilClass(BOOL isSwift) { - static Class objectUtilObjc = [RLMObjectUtil class]; - static Class objectUtilSwift = NSClassFromString(@"RealmSwiftObjectUtil"); - return isSwift && objectUtilSwift ? objectUtilSwift : objectUtilObjc; -} - -@implementation RLMObjectUtil - -+ (NSArray *)ignoredPropertiesForClass:(Class)cls { - return [cls ignoredProperties]; -} - -+ (NSArray *)indexedPropertiesForClass:(Class)cls { - return [cls indexedProperties]; -} - -+ (NSDictionary *)linkingObjectsPropertiesForClass:(Class)cls { - return [cls linkingObjectsProperties]; -} - -+ (NSDictionary *)linkingObjectProperties:(__unused id)object { - return nil; -} - -+ (NSArray *)getGenericListPropertyNames:(__unused id)obj { - return nil; -} - -+ (NSDictionary *)getLinkingObjectsProperties:(__unused id)obj { - return nil; -} - -+ (void)initializeListProperty:(__unused RLMObjectBase *)object property:(__unused RLMProperty *)property array:(__unused RLMArray *)array { -} - -+ (void)initializeOptionalProperty:(__unused RLMObjectBase *)object property:(__unused RLMProperty *)property { -} - -+ (void)initializeLinkingObjectsProperty:(__unused RLMObjectBase *)object property:(__unused RLMProperty *)property { -} - -+ (NSDictionary *)getOptionalProperties:(__unused id)obj { - return nil; -} - -+ (NSArray *)requiredPropertiesForClass:(Class)cls { - return [cls requiredProperties]; -} - -@end diff --git a/Pods/Realm/Realm/RLMObjectSchema.mm b/Pods/Realm/Realm/RLMObjectSchema.mm deleted file mode 100644 index 036cc5e9..00000000 --- a/Pods/Realm/Realm/RLMObjectSchema.mm +++ /dev/null @@ -1,476 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMObjectSchema_Private.hpp" - -#import "RLMArray.h" -#import "RLMListBase.h" -#import "RLMObject_Private.h" -#import "RLMProperty_Private.hpp" -#import "RLMRealm_Dynamic.h" -#import "RLMRealm_Private.hpp" -#import "RLMSchema_Private.h" -#import "RLMSwiftSupport.h" -#import "RLMUtil.hpp" - -#import "object_store.hpp" - -using namespace realm; - -// private properties -@interface RLMObjectSchema () -@property (nonatomic, readwrite) NSDictionary *allPropertiesByName; -@property (nonatomic, readwrite) NSString *className; -@end - -@implementation RLMObjectSchema { - // table accessor optimization - realm::TableRef _table; - NSArray *_propertiesInDeclaredOrder; - NSArray *_swiftGenericProperties; -} - -- (instancetype)initWithClassName:(NSString *)objectClassName objectClass:(Class)objectClass properties:(NSArray *)properties { - self = [super init]; - self.className = objectClassName; - self.properties = properties; - self.objectClass = objectClass; - self.accessorClass = objectClass; - self.standaloneClass = objectClass; - return self; -} - -// return properties by name --(RLMProperty *)objectForKeyedSubscript:(id )key { - return _allPropertiesByName[key]; -} - -// create property map when setting property array --(void)setProperties:(NSArray *)properties { - _properties = properties; - _propertiesInDeclaredOrder = nil; - [self _propertiesDidChange]; -} - -- (void)setComputedProperties:(NSArray *)computedProperties { - _computedProperties = computedProperties; - [self _propertiesDidChange]; -} - -- (void)_propertiesDidChange { - NSMutableDictionary *map = [NSMutableDictionary dictionaryWithCapacity:_properties.count + _computedProperties.count]; - for (RLMProperty *prop in _properties) { - map[prop.name] = prop; - if (prop.isPrimary) { - self.primaryKeyProperty = prop; - } - } - for (RLMProperty *prop in _computedProperties) { - map[prop.name] = prop; - } - _allPropertiesByName = map; -} - - -- (void)setPrimaryKeyProperty:(RLMProperty *)primaryKeyProperty { - _primaryKeyProperty.isPrimary = NO; - primaryKeyProperty.isPrimary = YES; - _primaryKeyProperty = primaryKeyProperty; -} - -+ (instancetype)schemaForObjectClass:(Class)objectClass { - RLMObjectSchema *schema = [RLMObjectSchema new]; - - // determine classname from objectclass as className method has not yet been updated - NSString *className = NSStringFromClass(objectClass); - bool isSwift = [RLMSwiftSupport isSwiftClassName:className]; - if (isSwift) { - className = [RLMSwiftSupport demangleClassName:className]; - } - schema.className = className; - schema.objectClass = objectClass; - schema.accessorClass = RLMDynamicObject.class; - schema.isSwiftClass = isSwift; - - // create array of RLMProperties, inserting properties of superclasses first - Class cls = objectClass; - Class superClass = class_getSuperclass(cls); - NSArray *allProperties = @[]; - while (superClass && superClass != RLMObjectBase.class) { - allProperties = [[RLMObjectSchema propertiesForClass:cls isSwift:isSwift] arrayByAddingObjectsFromArray:allProperties]; - cls = superClass; - superClass = class_getSuperclass(superClass); - } - NSArray *persistedProperties = [allProperties filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(RLMProperty *property, NSDictionary *) { - return !RLMPropertyTypeIsComputed(property.type); - }]]; - NSUInteger index = 0; - for (RLMProperty *prop in persistedProperties) { - prop.declarationIndex = index++; - } - schema.properties = persistedProperties; - - NSArray *computedProperties = [allProperties filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(RLMProperty *property, NSDictionary *) { - return RLMPropertyTypeIsComputed(property.type); - }]]; - schema.computedProperties = computedProperties; - - // verify that we didn't add any properties twice due to inheritance - if (allProperties.count != [NSSet setWithArray:[allProperties valueForKey:@"name"]].count) { - NSCountedSet *countedPropertyNames = [NSCountedSet setWithArray:[allProperties valueForKey:@"name"]]; - NSSet *duplicatePropertyNames = [countedPropertyNames filteredSetUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary *) { - return [countedPropertyNames countForObject:object] > 1; - }]]; - - if (duplicatePropertyNames.count == 1) { - @throw RLMException(@"Property '%@' is declared multiple times in the class hierarchy of '%@'", duplicatePropertyNames.allObjects.firstObject, className); - } else { - @throw RLMException(@"Object '%@' has properties that are declared multiple times in its class hierarchy: '%@'", className, [duplicatePropertyNames.allObjects componentsJoinedByString:@"', '"]); - } - } - - if (NSString *primaryKey = [objectClass primaryKey]) { - for (RLMProperty *prop in schema.properties) { - if ([primaryKey isEqualToString:prop.name]) { - prop.indexed = YES; - schema.primaryKeyProperty = prop; - break; - } - } - - if (!schema.primaryKeyProperty) { - @throw RLMException(@"Primary key property '%@' does not exist on object '%@'", primaryKey, className); - } - if (schema.primaryKeyProperty.type != RLMPropertyTypeInt && schema.primaryKeyProperty.type != RLMPropertyTypeString) { - @throw RLMException(@"Only 'string' and 'int' properties can be designated the primary key"); - } - } - - for (RLMProperty *prop in schema.properties) { - if (prop.optional && !RLMPropertyTypeIsNullable(prop.type)) { - @throw RLMException(@"Only 'string', 'binary', and 'object' properties can be made optional, and property '%@' is of type '%@'.", - prop.name, RLMTypeToString(prop.type)); - } - } - - return schema; -} - -+ (NSArray *)propertiesForClass:(Class)objectClass isSwift:(bool)isSwiftClass { - Class objectUtil = [objectClass objectUtilClass:isSwiftClass]; - NSArray *ignoredProperties = [objectUtil ignoredPropertiesForClass:objectClass]; - NSDictionary *linkingObjectsProperties = [objectUtil linkingObjectsPropertiesForClass:objectClass]; - - // For Swift classes we need an instance of the object when parsing properties - id swiftObjectInstance = isSwiftClass ? [[objectClass alloc] init] : nil; - - unsigned int count; - objc_property_t *props = class_copyPropertyList(objectClass, &count); - NSMutableArray *propArray = [NSMutableArray arrayWithCapacity:count]; - NSSet *indexed = [[NSSet alloc] initWithArray:[objectUtil indexedPropertiesForClass:objectClass]]; - for (unsigned int i = 0; i < count; i++) { - NSString *propertyName = @(property_getName(props[i])); - if ([ignoredProperties containsObject:propertyName]) { - continue; - } - - RLMProperty *prop = nil; - if (isSwiftClass) { - prop = [[RLMProperty alloc] initSwiftPropertyWithName:propertyName - indexed:[indexed containsObject:propertyName] - linkPropertyDescriptor:linkingObjectsProperties[propertyName] - property:props[i] - instance:swiftObjectInstance]; - } - else { - prop = [[RLMProperty alloc] initWithName:propertyName - indexed:[indexed containsObject:propertyName] - linkPropertyDescriptor:linkingObjectsProperties[propertyName] - property:props[i]]; - } - - if (prop) { - [propArray addObject:prop]; - } - } - free(props); - - if (isSwiftClass) { - // List<> properties don't show up as objective-C properties due to - // being generic, so use Swift reflection to get a list of them, and - // then access their ivars directly - for (NSString *propName in [objectUtil getGenericListPropertyNames:swiftObjectInstance]) { - Ivar ivar = class_getInstanceVariable(objectClass, propName.UTF8String); - id value = object_getIvar(swiftObjectInstance, ivar); - NSString *className = [value _rlmArray].objectClassName; - NSUInteger existing = [propArray indexOfObjectPassingTest:^BOOL(RLMProperty *obj, __unused NSUInteger idx, __unused BOOL *stop) { - return [obj.name isEqualToString:propName]; - }]; - if (existing != NSNotFound) { - [propArray removeObjectAtIndex:existing]; - } - [propArray addObject:[[RLMProperty alloc] initSwiftListPropertyWithName:propName - ivar:ivar - objectClassName:className]]; - } - - // Ditto for LinkingObjects<> properties. - NSDictionary *linkingObjectsProperties = [objectUtil getLinkingObjectsProperties:swiftObjectInstance]; - for (NSString *propName in linkingObjectsProperties) { - NSDictionary *info = linkingObjectsProperties[propName]; - Ivar ivar = class_getInstanceVariable(objectClass, propName.UTF8String); - - NSUInteger existing = [propArray indexOfObjectPassingTest:^BOOL(RLMProperty *obj, __unused NSUInteger idx, __unused BOOL *stop) { - return [obj.name isEqualToString:propName]; - }]; - if (existing != NSNotFound) { - [propArray removeObjectAtIndex:existing]; - } - - [propArray addObject:[[RLMProperty alloc] initSwiftLinkingObjectsPropertyWithName:propName - ivar:ivar - objectClassName:info[@"class"] - linkOriginPropertyName:info[@"property"]]]; - } - } - - if (auto optionalProperties = [objectUtil getOptionalProperties:swiftObjectInstance]) { - for (RLMProperty *property in propArray) { - property.optional = false; - } - [optionalProperties enumerateKeysAndObjectsUsingBlock:^(NSString *propertyName, NSNumber *propertyType, __unused BOOL *stop) { - if ([ignoredProperties containsObject:propertyName]) { - return; - } - NSUInteger existing = [propArray indexOfObjectPassingTest:^BOOL(RLMProperty *obj, __unused NSUInteger idx, __unused BOOL *stop) { - return [obj.name isEqualToString:propertyName]; - }]; - RLMProperty *property; - if (existing != NSNotFound) { - property = propArray[existing]; - property.optional = true; - } - if (auto type = RLMCoerceToNil(propertyType)) { - if (existing == NSNotFound) { - property = [[RLMProperty alloc] initSwiftOptionalPropertyWithName:propertyName - indexed:[indexed containsObject:propertyName] - ivar:class_getInstanceVariable(objectClass, propertyName.UTF8String) - propertyType:RLMPropertyType(type.intValue)]; - [propArray addObject:property]; - } - else { - property.type = RLMPropertyType(type.intValue); - } - } - }]; - } - if (auto requiredProperties = [objectUtil requiredPropertiesForClass:objectClass]) { - for (RLMProperty *property in propArray) { - bool required = [requiredProperties containsObject:property.name]; - if (required && property.type == RLMPropertyTypeObject) { - @throw RLMException(@"Object properties cannot be made required, " - "but '+[%@ requiredProperties]' included '%@'", objectClass, property.name); - } - property.optional &= !required; - } - } - - for (RLMProperty *property in propArray) { - if (!property.optional && property.type == RLMPropertyTypeObject) { // remove if/when core supports required link columns - @throw RLMException(@"The `%@.%@` property must be marked as being optional.", [objectClass className], property.name); - } - } - - return propArray; -} - -- (id)copyWithZone:(NSZone *)zone { - RLMObjectSchema *schema = [[RLMObjectSchema allocWithZone:zone] init]; - schema->_objectClass = _objectClass; - schema->_className = _className; - schema->_objectClass = _objectClass; - schema->_accessorClass = _accessorClass; - schema->_standaloneClass = _standaloneClass; - schema->_isSwiftClass = _isSwiftClass; - - // call property setter to reset map and primary key - schema.properties = [[NSArray allocWithZone:zone] initWithArray:_properties copyItems:YES]; - schema.computedProperties = [[NSArray allocWithZone:zone] initWithArray:_computedProperties copyItems:YES]; - - // _table not copied as it's realm::Group-specific - return schema; -} - -- (instancetype)shallowCopy { - RLMObjectSchema *schema = [[RLMObjectSchema alloc] init]; - schema->_objectClass = _objectClass; - schema->_className = _className; - schema->_objectClass = _objectClass; - schema->_accessorClass = _accessorClass; - schema->_standaloneClass = _standaloneClass; - schema->_isSwiftClass = _isSwiftClass; - - // reuse property array, map, and primary key instnaces - schema->_properties = _properties; - schema->_computedProperties = _computedProperties; - schema->_allPropertiesByName = _allPropertiesByName; - schema->_primaryKeyProperty = _primaryKeyProperty; - schema->_swiftGenericProperties = _swiftGenericProperties; - - // _table not copied as it's realm::Group-specific - return schema; -} - -- (BOOL)isEqualToObjectSchema:(RLMObjectSchema *)objectSchema { - if (objectSchema.properties.count != _properties.count) { - return NO; - } - - if (![_properties isEqualToArray:objectSchema.properties]) { - return NO; - } - if (![_computedProperties isEqualToArray:objectSchema.computedProperties]) { - return NO; - } - - return YES; -} - -- (NSString *)description { - NSMutableString *propertiesString = [NSMutableString string]; - for (RLMProperty *property in self.properties) { - [propertiesString appendFormat:@"\t%@\n", [property.description stringByReplacingOccurrencesOfString:@"\n" withString:@"\n\t"]]; - } - for (RLMProperty *property in self.computedProperties) { - [propertiesString appendFormat:@"\t%@\n", [property.description stringByReplacingOccurrencesOfString:@"\n" withString:@"\n\t"]]; - } - return [NSString stringWithFormat:@"%@ {\n%@}", self.className, propertiesString]; -} - -- (realm::Table *)table { - if (!_table) { - _table = ObjectStore::table_for_object_type(_realm.group, _className.UTF8String); - } - return _table.get(); -} - -- (void)setTable:(realm::Table *)table { - _table.reset(table); -} - -- (realm::ObjectSchema)objectStoreCopy { - ObjectSchema objectSchema; - objectSchema.name = _className.UTF8String; - objectSchema.primary_key = _primaryKeyProperty ? _primaryKeyProperty.name.UTF8String : ""; - for (RLMProperty *prop in _properties) { - Property p = [prop objectStoreCopy]; - p.is_primary = (prop == _primaryKeyProperty); - objectSchema.persisted_properties.push_back(std::move(p)); - } - for (RLMProperty *prop in _computedProperties) { - objectSchema.computed_properties.push_back([prop objectStoreCopy]); - } - return objectSchema; -} - -+ (instancetype)objectSchemaForObjectStoreSchema:(realm::ObjectSchema &)objectSchema { - RLMObjectSchema *schema = [RLMObjectSchema new]; - schema.className = @(objectSchema.name.c_str()); - - // create array of RLMProperties - NSMutableArray *properties = [NSMutableArray arrayWithCapacity:objectSchema.persisted_properties.size()]; - for (const Property &prop : objectSchema.persisted_properties) { - RLMProperty *property = [RLMProperty propertyForObjectStoreProperty:prop]; - property.isPrimary = (prop.name == objectSchema.primary_key); - [properties addObject:property]; - } - schema.properties = properties; - - NSMutableArray *computedProperties = [NSMutableArray arrayWithCapacity:objectSchema.computed_properties.size()]; - for (const Property &prop : objectSchema.computed_properties) { - [computedProperties addObject:[RLMProperty propertyForObjectStoreProperty:prop]]; - } - schema.computedProperties = computedProperties; - - // get primary key from realm metadata - if (objectSchema.primary_key.length()) { - NSString *primaryKeyString = [NSString stringWithUTF8String:objectSchema.primary_key.c_str()]; - schema.primaryKeyProperty = schema[primaryKeyString]; - if (!schema.primaryKeyProperty) { - @throw RLMException(@"No property matching primary key '%@'", primaryKeyString); - } - } - - // for dynamic schema use vanilla RLMDynamicObject accessor classes - schema.objectClass = RLMObject.class; - schema.accessorClass = RLMDynamicObject.class; - schema.standaloneClass = RLMObject.class; - - return schema; -} - -- (void)sortPropertiesByColumn { - _properties = [_properties sortedArrayUsingComparator:^NSComparisonResult(RLMProperty *p1, RLMProperty *p2) { - if (p1.column < p2.column) return NSOrderedAscending; - if (p1.column > p2.column) return NSOrderedDescending; - return NSOrderedSame; - }]; - // No need to update the dictionary -} - -- (NSArray *)propertiesInDeclaredOrder { - if (!_propertiesInDeclaredOrder) { - _propertiesInDeclaredOrder = [_properties sortedArrayUsingComparator:^NSComparisonResult(RLMProperty *p1, RLMProperty *p2) { - if (p1.declarationIndex < p2.declarationIndex) return NSOrderedAscending; - if (p1.declarationIndex > p2.declarationIndex) return NSOrderedDescending; - return NSOrderedSame; - }]; - } - return _propertiesInDeclaredOrder; -} - -- (NSArray *)swiftGenericProperties { - if (_swiftGenericProperties) { - return _swiftGenericProperties; - } - - // This check isn't semantically required, but avoiding accessing the local - // static helps perf in the obj-c case - if (!_isSwiftClass) { - return _swiftGenericProperties = @[]; - } - - // Check if it's a swift class using the obj-c API - static Class s_swiftObjectClass = NSClassFromString(@"RealmSwiftObject"); - if (![_accessorClass isSubclassOfClass:s_swiftObjectClass]) { - return _swiftGenericProperties = @[]; - } - - NSMutableArray *genericProperties = [NSMutableArray new]; - for (RLMProperty *prop in _properties) { - if (prop->_swiftIvar || prop->_type == RLMPropertyTypeArray) { - [genericProperties addObject:prop]; - } - } - // Currently all computed properties are Swift generics - [genericProperties addObjectsFromArray:_computedProperties]; - - return _swiftGenericProperties = genericProperties; -} - -@end diff --git a/Pods/Realm/Realm/RLMObjectStore.mm b/Pods/Realm/Realm/RLMObjectStore.mm deleted file mode 100644 index 37e9b93a..00000000 --- a/Pods/Realm/Realm/RLMObjectStore.mm +++ /dev/null @@ -1,544 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMObjectStore.h" - -#import "RLMAccessor.h" -#import "RLMArray_Private.hpp" -#import "RLMListBase.h" -#import "RLMObservation.hpp" -#import "RLMObject_Private.hpp" -#import "RLMObjectSchema_Private.hpp" -#import "RLMOptionalBase.h" -#import "RLMProperty_Private.h" -#import "RLMQueryUtil.hpp" -#import "RLMRealm_Private.hpp" -#import "RLMSchema_Private.h" -#import "RLMSwiftSupport.h" -#import "RLMUtil.hpp" - -#import "object_store.hpp" -#import "results.hpp" -#import "shared_realm.hpp" - -#import - -using namespace realm; - -// Schema used to created generated accessors -static NSMutableArray * const s_accessorSchema = [NSMutableArray new]; - -void RLMRealmCreateAccessors(RLMSchema *schema) { - // create accessors for non-dynamic realms - RLMSchema *matchingSchema = nil; - for (RLMSchema *accessorSchema in s_accessorSchema) { - if ([schema isEqualToSchema:accessorSchema]) { - matchingSchema = accessorSchema; - break; - } - } - - if (matchingSchema) { - // reuse accessors - for (RLMObjectSchema *objectSchema in schema.objectSchema) { - objectSchema.accessorClass = matchingSchema[objectSchema.className].accessorClass; - } - } - else { - // create accessors and cache in s_accessorSchema - for (RLMObjectSchema *objectSchema in schema.objectSchema) { - if (objectSchema.table) { - NSString *prefix = [NSString stringWithFormat:@"RLMAccessor_v%lu_", - (unsigned long)s_accessorSchema.count]; - objectSchema.accessorClass = RLMAccessorClassForObjectClass(objectSchema.objectClass, objectSchema, prefix); - } - } - [s_accessorSchema addObject:schema]; - } -} - -void RLMClearAccessorCache() { - [s_accessorSchema removeAllObjects]; -} - -static inline void RLMVerifyRealmRead(__unsafe_unretained RLMRealm *const realm) { - if (!realm) { - @throw RLMException(@"Realm must not be nil"); - } - [realm verifyThread]; -} - -static inline void RLMVerifyInWriteTransaction(__unsafe_unretained RLMRealm *const realm) { - RLMVerifyRealmRead(realm); - // if realm is not writable throw - if (!realm.inWriteTransaction) { - @throw RLMException(@"Can only add, remove, or create objects in a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first."); - } -} - -void RLMInitializeSwiftAccessorGenerics(__unsafe_unretained RLMObjectBase *const object) { - if (!object || !object->_row || !object->_objectSchema->_isSwiftClass) { - return; - } - - for (RLMProperty *prop in object->_objectSchema.swiftGenericProperties) { - if (prop->_type == RLMPropertyTypeArray) { - RLMArray *array = [RLMArrayLinkView arrayWithObjectClassName:prop.objectClassName - view:object->_row.get_linklist(prop.column) - realm:object->_realm - key:prop.name - parentSchema:object->_objectSchema]; - [RLMObjectUtilClass(YES) initializeListProperty:object property:prop array:array]; - } - else if (prop.type == RLMPropertyTypeLinkingObjects) { - [RLMObjectUtilClass(YES) initializeLinkingObjectsProperty:object property:prop]; - } - else { - [RLMObjectUtilClass(YES) initializeOptionalProperty:object property:prop]; - } - } -} - -template -static inline NSUInteger RLMCreateOrGetRowForObject(__unsafe_unretained RLMObjectSchema *const schema, F primaryValueGetter, bool createOrUpdate, bool &created) { - // try to get existing row if updating - size_t rowIndex = realm::not_found; - realm::Table &table = *schema.table; - RLMProperty *primaryProperty = schema.primaryKeyProperty; - if (createOrUpdate && primaryProperty) { - // get primary value - id primaryValue = primaryValueGetter(primaryProperty); - if (primaryValue == NSNull.null) { - primaryValue = nil; - } - - // search for existing object based on primary key type - if (primaryProperty.type == RLMPropertyTypeString) { - rowIndex = table.find_first_string(primaryProperty.column, RLMStringDataWithNSString(primaryValue)); - } - else { - rowIndex = table.find_first_int(primaryProperty.column, [primaryValue longLongValue]); - } - } - - // if no existing, create row - created = NO; - if (rowIndex == realm::not_found) { - rowIndex = table.add_empty_row(); - created = YES; - } - - // get accessor - return rowIndex; -} - -void RLMAddObjectToRealm(__unsafe_unretained RLMObjectBase *const object, - __unsafe_unretained RLMRealm *const realm, - bool createOrUpdate) { - RLMVerifyInWriteTransaction(realm); - - // verify that object is unmanaged - if (object.invalidated) { - @throw RLMException(@"Adding a deleted or invalidated object to a Realm is not permitted"); - } - if (object->_realm) { - if (object->_realm == realm) { - // no-op - return; - } - // for differing realms users must explicitly create the object in the second realm - @throw RLMException(@"Object is already persisted in a Realm"); - } - if (object->_observationInfo && object->_observationInfo->hasObservers()) { - @throw RLMException(@"Cannot add an object with observers to a Realm"); - } - - // set the realm and schema - NSString *objectClassName = object->_objectSchema.className; - RLMObjectSchema *schema = [realm.schema schemaForClassName:objectClassName]; - if (!schema) { - @throw RLMException(@"Object type '%@' is not persisted in the Realm. " - @"If using a custom `objectClasses` / `objectTypes` array in your configuration, " - @"add `%@` to the list of `objectClasses` / `objectTypes`.", - objectClassName, objectClassName); - } - object->_objectSchema = schema; - object->_realm = realm; - - // get or create row - bool created; - auto primaryGetter = [=](__unsafe_unretained RLMProperty *const p) { return [object valueForKey:p.getterName]; }; - object->_row = (*schema.table)[RLMCreateOrGetRowForObject(schema, primaryGetter, createOrUpdate, created)]; - - RLMCreationOptions creationOptions = RLMCreationOptionsPromoteStandalone; - if (createOrUpdate) { - creationOptions |= RLMCreationOptionsCreateOrUpdate; - } - - // populate all properties - for (RLMProperty *prop in schema.properties) { - // get object from ivar using key value coding - id value = nil; - if (prop.swiftIvar) { - if (prop.type == RLMPropertyTypeArray) { - value = static_cast(object_getIvar(object, prop.swiftIvar))._rlmArray; - } - else { // optional - value = static_cast(object_getIvar(object, prop.swiftIvar)).underlyingValue; - } - } - else if ([object respondsToSelector:prop.getterSel]) { - value = [object valueForKey:prop.getterName]; - } - - if (!value && !prop.optional) { - @throw RLMException(@"No value or default value specified for property '%@' in '%@'", - prop.name, schema.className); - } - - // set in table with out validation - // skip primary key when updating since it doesn't change - if (created || !prop.isPrimary) { - RLMDynamicSet(object, prop, RLMCoerceToNil(value), creationOptions); - } - - // set the ivars for object and array properties to nil as otherwise the - // accessors retain objects that are no longer accessible via the properties - // this is mainly an issue when the object graph being added has cycles, - // as it's not obvious that the user has to set the *ivars* to nil to - // avoid leaking memory - if (prop.type == RLMPropertyTypeObject || prop.type == RLMPropertyTypeArray) { - if (!prop.swiftIvar) { - ((void(*)(id, SEL, id))objc_msgSend)(object, prop.setterSel, nil); - } - } - } - - // set to proper accessor class - object_setClass(object, schema.accessorClass); - - RLMInitializeSwiftAccessorGenerics(object); -} - -static void RLMValidateValueForProperty(__unsafe_unretained id const obj, - __unsafe_unretained RLMProperty *const prop, - __unsafe_unretained RLMSchema *const schema, - bool validateNested, - bool allowMissing); - -static void RLMValidateValueForObjectSchema(__unsafe_unretained id const value, - __unsafe_unretained RLMObjectSchema *const objectSchema, - __unsafe_unretained RLMSchema *const schema, - bool validateNested, - bool allowMissing); - -static void RLMValidateNestedObject(__unsafe_unretained id const obj, - __unsafe_unretained NSString *const className, - __unsafe_unretained RLMSchema *const schema, - bool validateNested, - bool allowMissing) { - if (obj != nil && obj != NSNull.null) { - if (RLMObjectBase *objBase = RLMDynamicCast(obj)) { - RLMObjectSchema *objectSchema = objBase->_objectSchema; - if (![className isEqualToString:objectSchema.className]) { - // if not the right object class treat as literal - RLMValidateValueForObjectSchema(objBase, schema[className], schema, validateNested, allowMissing); - } - if (objBase.isInvalidated) { - @throw RLMException(@"Adding a deleted or invalidated object to a Realm is not permitted"); - } - } - else { - RLMValidateValueForObjectSchema(obj, schema[className], schema, validateNested, allowMissing); - } - } -} - -static void RLMValidateValueForProperty(__unsafe_unretained id const obj, - __unsafe_unretained RLMProperty *const prop, - __unsafe_unretained RLMSchema *const schema, - bool validateNested, - bool allowMissing) { - switch (prop.type) { - case RLMPropertyTypeString: - case RLMPropertyTypeBool: - case RLMPropertyTypeDate: - case RLMPropertyTypeInt: - case RLMPropertyTypeFloat: - case RLMPropertyTypeDouble: - case RLMPropertyTypeData: - if (!RLMIsObjectValidForProperty(obj, prop)) { - @throw RLMException(@"Invalid value '%@' for property '%@'", obj, prop.name); - } - break; - case RLMPropertyTypeObject: - if (validateNested) { - RLMValidateNestedObject(obj, prop.objectClassName, schema, validateNested, allowMissing); - } - break; - case RLMPropertyTypeArray: { - if (obj != nil && obj != NSNull.null) { - if (![obj conformsToProtocol:@protocol(NSFastEnumeration)]) { - @throw RLMException(@"Array property value (%@) is not enumerable.", obj); - } - if (validateNested) { - id array = obj; - for (id el in array) { - RLMValidateNestedObject(el, prop.objectClassName, schema, validateNested, allowMissing); - } - } - } - break; - } - case RLMPropertyTypeAny: - case RLMPropertyTypeLinkingObjects: - @throw RLMException(@"Invalid value '%@' for property '%@'", obj, prop.name); - } -} - -static void RLMValidateValueForObjectSchema(__unsafe_unretained id const value, - __unsafe_unretained RLMObjectSchema *const objectSchema, - __unsafe_unretained RLMSchema *const schema, - bool validateNested, - bool allowMissing) { - NSArray *props = objectSchema.properties; - if (NSArray *array = RLMDynamicCast(value)) { - if (array.count != props.count) { - @throw RLMException(@"Invalid array input. Number of array elements does not match number of properties."); - } - for (NSUInteger i = 0; i < array.count; i++) { - RLMProperty *prop = props[i]; - RLMValidateValueForProperty(array[i], prop, schema, validateNested, allowMissing); - } - } - else { - NSDictionary *defaults; - for (RLMProperty *prop in props) { - id obj = [value valueForKey:prop.name]; - - // get default for nil object - if (!obj) { - if (!defaults) { - defaults = RLMDefaultValuesForObjectSchema(objectSchema); - } - obj = defaults[prop.name]; - } - if (obj || prop.isPrimary || !allowMissing) { - RLMValidateValueForProperty(obj, prop, schema, true, allowMissing); - } - } - } -} - -RLMObjectBase *RLMCreateObjectInRealmWithValue(RLMRealm *realm, NSString *className, id value, bool createOrUpdate = false) { - if (createOrUpdate && RLMIsObjectSubclass([value class])) { - RLMObjectBase *obj = value; - if ([obj->_objectSchema.className isEqualToString:className] && obj->_realm == realm) { - // This is a no-op if value is an RLMObject of the same type already backed by the target realm. - return value; - } - } - - // verify writable - RLMVerifyInWriteTransaction(realm); - - // create the object - RLMSchema *schema = realm.schema; - RLMObjectSchema *objectSchema = [realm.schema schemaForClassName:className]; - if (!objectSchema) { - @throw RLMException(@"Object type '%@' is not persisted in the Realm. " - @"If using a custom `objectClasses` / `objectTypes` array in your configuration, " - @"add `%@` to the list of `objectClasses` / `objectTypes`.", - className, className); - } - RLMObjectBase *object = [[objectSchema.accessorClass alloc] initWithRealm:realm schema:objectSchema]; - - RLMCreationOptions creationOptions = createOrUpdate ? RLMCreationOptionsCreateOrUpdate : RLMCreationOptionsNone; - - // create row, and populate - if (NSArray *array = RLMDynamicCast(value)) { - // get or create our accessor - bool created; - auto primaryGetter = [=](__unsafe_unretained RLMProperty *const p) { return array[p.column]; }; - object->_row = (*objectSchema.table)[RLMCreateOrGetRowForObject(objectSchema, primaryGetter, createOrUpdate, created)]; - - // populate - NSArray *props = objectSchema.propertiesInDeclaredOrder; - for (NSUInteger i = 0; i < array.count; i++) { - RLMProperty *prop = props[i]; - // skip primary key when updating since it doesn't change - if (created || !prop.isPrimary) { - id val = array[i]; - RLMValidateValueForProperty(val, prop, schema, false, false); - RLMDynamicSet(object, prop, RLMCoerceToNil(val), creationOptions); - } - } - } - else { - // get or create our accessor - bool created; - auto primaryGetter = [=](RLMProperty *p) { return [value valueForKey:p.name]; }; - object->_row = (*objectSchema.table)[RLMCreateOrGetRowForObject(objectSchema, primaryGetter, createOrUpdate, created)]; - - // populate - NSDictionary *defaultValues = nil; - for (RLMProperty *prop in objectSchema.properties) { - id propValue = RLMValidatedValueForProperty(value, prop.name, objectSchema.className); - - if (!propValue && created) { - if (!defaultValues) { - defaultValues = RLMDefaultValuesForObjectSchema(objectSchema); - } - propValue = defaultValues[prop.name]; - if (!propValue && (prop.type == RLMPropertyTypeObject || prop.type == RLMPropertyTypeArray)) { - propValue = NSNull.null; - } - } - - if (propValue) { - if (created || !prop.isPrimary) { - // skip missing properties and primary key when updating since it doesn't change - RLMValidateValueForProperty(propValue, prop, schema, false, false); - RLMDynamicSet(object, prop, RLMCoerceToNil(propValue), creationOptions); - } - } - else if (created && !prop.optional) { - @throw RLMException(@"Property '%@' of object of type '%@' cannot be nil.", prop.name, objectSchema.className); - } - } - } - - RLMInitializeSwiftAccessorGenerics(object); - return object; -} - -void RLMDeleteObjectFromRealm(__unsafe_unretained RLMObjectBase *const object, - __unsafe_unretained RLMRealm *const realm) { - if (realm != object->_realm) { - @throw RLMException(@"Can only delete an object from the Realm it belongs to."); - } - - RLMVerifyInWriteTransaction(object->_realm); - - // move last row to row we are deleting - if (object->_row.is_attached()) { - RLMTrackDeletions(realm, ^{ - object->_row.get_table()->move_last_over(object->_row.get_index()); - }); - } - - // set realm to nil - object->_realm = nil; -} - -void RLMDeleteAllObjectsFromRealm(RLMRealm *realm) { - RLMVerifyInWriteTransaction(realm); - - // clear table for each object schema - for (RLMObjectSchema *objectSchema in realm.schema.objectSchema) { - RLMClearTable(objectSchema); - } -} - -RLMResults *RLMGetObjects(RLMRealm *realm, NSString *objectClassName, NSPredicate *predicate) { - RLMVerifyRealmRead(realm); - - // create view from table and predicate - RLMObjectSchema *objectSchema = realm.schema[objectClassName]; - if (!objectSchema.table) { - // read-only realms may be missing tables since we can't add any - // missing ones on init - return [RLMResults resultsWithObjectSchema:objectSchema results:{}]; - } - - if (predicate) { - realm::Query query = objectSchema.table->where(); - RLMUpdateQueryWithPredicate(&query, predicate, realm.schema, objectSchema); - - // create and populate array - return [RLMResults resultsWithObjectSchema:objectSchema - results:realm::Results(realm->_realm, std::move(query))]; - } - - return [RLMResults resultsWithObjectSchema:objectSchema - results:realm::Results(realm->_realm, *objectSchema.table)]; -} - -id RLMGetObject(RLMRealm *realm, NSString *objectClassName, id key) { - RLMVerifyRealmRead(realm); - - RLMObjectSchema *objectSchema = realm.schema[objectClassName]; - - RLMProperty *primaryProperty = objectSchema.primaryKeyProperty; - if (!primaryProperty) { - @throw RLMException(@"%@ does not have a primary key", objectClassName); - } - - if (!objectSchema.table) { - // read-only realms may be missing tables since we can't add any - // missing ones on init - return nil; - } - - key = RLMCoerceToNil(key); - - size_t row = realm::not_found; - if (primaryProperty.type == RLMPropertyTypeString) { - NSString *str = RLMDynamicCast(key); - if (str || (!key && primaryProperty.optional)) { - row = objectSchema.table->find_first_string(primaryProperty.column, RLMStringDataWithNSString(str)); - } - else { - @throw RLMException(@"Invalid value '%@' for primary key", key); - } - } - else { - NSNumber *number = RLMDynamicCast(key); - if (number) { - row = objectSchema.table->find_first_int(primaryProperty.column, number.longLongValue); - } - else if (!key && primaryProperty.optional) { - row = objectSchema.table->find_first_null(primaryProperty.column); - } - else { - @throw RLMException(@"Invalid value '%@' for primary key", key); - } - } - - if (row == realm::not_found) { - return nil; - } - - return RLMCreateObjectAccessor(realm, objectSchema, row); -} - -RLMObjectBase *RLMCreateObjectAccessor(__unsafe_unretained RLMRealm *const realm, - __unsafe_unretained RLMObjectSchema *const objectSchema, - NSUInteger index) { - return RLMCreateObjectAccessor(realm, objectSchema, (*objectSchema.table)[index]); -} - -// Create accessor and register with realm -RLMObjectBase *RLMCreateObjectAccessor(__unsafe_unretained RLMRealm *const realm, - __unsafe_unretained RLMObjectSchema *const objectSchema, - realm::RowExpr row) { - RLMObjectBase *accessor = [[objectSchema.accessorClass alloc] initWithRealm:realm schema:objectSchema]; - accessor->_row = row; - RLMInitializeSwiftAccessorGenerics(accessor); - return accessor; -} diff --git a/Pods/Realm/Realm/RLMObservation.mm b/Pods/Realm/Realm/RLMObservation.mm deleted file mode 100644 index 5308b66c..00000000 --- a/Pods/Realm/Realm/RLMObservation.mm +++ /dev/null @@ -1,494 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMObservation.hpp" - -#import "RLMAccessor.h" -#import "RLMArray_Private.hpp" -#import "RLMListBase.h" -#import "RLMObjectSchema_Private.hpp" -#import "RLMProperty_Private.h" -#import "RLMRealm_Private.hpp" -#import "RLMSchema.h" - -#import - -using namespace realm; - -namespace { - template - struct IteratorPair { - Iterator first; - Iterator second; - }; - template - Iterator begin(IteratorPair const& p) { - return p.first; - } - template - Iterator end(IteratorPair const& p) { - return p.second; - } - - template - auto reverse(Container const& c) { - return IteratorPair{c.rbegin(), c.rend()}; - } -} - -RLMObservationInfo::RLMObservationInfo(RLMObjectSchema *objectSchema, std::size_t row, id object) -: object(object) -, objectSchema(objectSchema) -{ - REALM_ASSERT_DEBUG(objectSchema); - setRow(*objectSchema.table, row); -} - -RLMObservationInfo::RLMObservationInfo(id object) -: object(object) -{ -} - -RLMObservationInfo::~RLMObservationInfo() { - if (prev) { - // Not the head of the linked list, so just detach from the list - REALM_ASSERT_DEBUG(prev->next == this); - prev->next = next; - if (next) { - REALM_ASSERT_DEBUG(next->prev == this); - next->prev = prev; - } - } - else if (objectSchema) { - // The head of the list, so remove self from the object schema's array - // of observation info, either replacing self with the next info or - // removing entirely if there is no next - auto end = objectSchema->_observedObjects.end(); - auto it = find(objectSchema->_observedObjects.begin(), end, this); - if (it != end) { - if (next) { - *it = next; - next->prev = nullptr; - } - else { - iter_swap(it, std::prev(end)); - objectSchema->_observedObjects.pop_back(); - } - } - } - // Otherwise the observed object was unmanaged, so nothing to do - -#ifdef DEBUG - // ensure that incorrect cleanup fails noisily - object = (__bridge id)(void *)-1; - prev = (RLMObservationInfo *)-1; - next = (RLMObservationInfo *)-1; -#endif -} - -void RLMObservationInfo::willChange(NSString *key, NSKeyValueChange kind, NSIndexSet *indexes) const { - if (indexes) { - forEach([=](__unsafe_unretained auto o) { - [o willChange:kind valuesAtIndexes:indexes forKey:key]; - }); - } - else { - forEach([=](__unsafe_unretained auto o) { - [o willChangeValueForKey:key]; - }); - } -} - -void RLMObservationInfo::didChange(NSString *key, NSKeyValueChange kind, NSIndexSet *indexes) const { - if (indexes) { - forEach([=](__unsafe_unretained auto o) { - [o didChange:kind valuesAtIndexes:indexes forKey:key]; - }); - } - else { - forEach([=](__unsafe_unretained auto o) { - [o didChangeValueForKey:key]; - }); - } -} - -void RLMObservationInfo::prepareForInvalidation() { - REALM_ASSERT_DEBUG(objectSchema); - REALM_ASSERT_DEBUG(!prev); - for (auto info = this; info; info = info->next) - info->invalidated = true; -} - -void RLMObservationInfo::setRow(realm::Table &table, size_t newRow) { - REALM_ASSERT_DEBUG(!row); - REALM_ASSERT_DEBUG(objectSchema); - row = table[newRow]; - for (auto info : objectSchema->_observedObjects) { - if (info->row && info->row.get_index() == row.get_index()) { - prev = info; - next = info->next; - if (next) - next->prev = this; - info->next = this; - return; - } - } - objectSchema->_observedObjects.push_back(this); -} - -void RLMObservationInfo::recordObserver(realm::Row& objectRow, - __unsafe_unretained RLMObjectSchema *const objectSchema, - __unsafe_unretained NSString *const keyPath) { - ++observerCount; - - // add ourselves to the list of observed objects if this is the first time - // an observer is being added to a persisted object - if (objectRow && !row) { - this->objectSchema = objectSchema; - setRow(*objectRow.get_table(), objectRow.get_index()); - } - - if (!row) { - // Arrays need a reference to their containing object to avoid having to - // go through the awful proxy object from mutableArrayValueForKey. - // For persisted objects we do this when the object is added or created - // (and have to to support notifications from modifying an object which - // was never observed), but for Swift classes (both RealmSwift and - // RLMObject) we can't do it then because we don't know what the parent - // object is. - - NSUInteger sep = [keyPath rangeOfString:@"."].location; - NSString *key = sep == NSNotFound ? keyPath : [keyPath substringToIndex:sep]; - RLMProperty *prop = objectSchema[key]; - if (prop && prop.type == RLMPropertyTypeArray) { - id value = valueForKey(key); - RLMArray *array = [value isKindOfClass:[RLMListBase class]] ? [value _rlmArray] : value; - array->_key = key; - array->_parentObject = object; - } - else if (auto swiftIvar = prop.swiftIvar) { - if (auto optional = RLMDynamicCast(object_getIvar(object, swiftIvar))) { - optional.property = prop; - optional.object = object; - } - } - } -} - -void RLMObservationInfo::removeObserver() { - --observerCount; -} - -id RLMObservationInfo::valueForKey(NSString *key) { - if (invalidated) { - if ([key isEqualToString:RLMInvalidatedKey]) { - return @YES; - } - return cachedObjects[key]; - } - - if (key != lastKey) { - lastKey = key; - lastProp = objectSchema[key]; - } - - static auto superValueForKey = reinterpret_cast([NSObject methodForSelector:@selector(valueForKey:)]); - if (!lastProp) { - return RLMCoerceToNil(superValueForKey(object, @selector(valueForKey:), key)); - } - - auto getSuper = [&] { - return row ? RLMDynamicGet(object, lastProp) : RLMCoerceToNil(superValueForKey(object, @selector(valueForKey:), key)); - }; - - // We need to return the same object each time for observing over keypaths to work - if (lastProp.type == RLMPropertyTypeArray) { - RLMArray *value = cachedObjects[key]; - if (!value) { - value = getSuper(); - if (!cachedObjects) { - cachedObjects = [NSMutableDictionary new]; - } - cachedObjects[key] = value; - } - return value; - } - - if (lastProp.type == RLMPropertyTypeObject) { - if (row.is_null_link(lastProp.column)) { - [cachedObjects removeObjectForKey:key]; - return nil; - } - - RLMObjectBase *value = cachedObjects[key]; - if (value && value->_row.get_index() == row.get_link(lastProp.column)) { - return value; - } - value = getSuper(); - if (!cachedObjects) { - cachedObjects = [NSMutableDictionary new]; - } - cachedObjects[key] = value; - return value; - } - - return getSuper(); -} - -RLMObservationInfo *RLMGetObservationInfo(RLMObservationInfo *info, - size_t row, - __unsafe_unretained RLMObjectSchema *objectSchema) { - if (info) { - return info; - } - - for (RLMObservationInfo *info : objectSchema->_observedObjects) { - if (info->isForRow(row)) { - return info; - } - } - - return nullptr; -} - -void RLMClearTable(RLMObjectSchema *objectSchema) { - for (auto info : objectSchema->_observedObjects) { - info->willChange(RLMInvalidatedKey); - } - - RLMTrackDeletions(objectSchema.realm, ^{ - objectSchema.table->clear(); - - for (auto info : objectSchema->_observedObjects) { - info->prepareForInvalidation(); - } - }); - - for (auto info : reverse(objectSchema->_observedObjects)) { - info->didChange(RLMInvalidatedKey); - } - - objectSchema->_observedObjects.clear(); -} - -void RLMTrackDeletions(__unsafe_unretained RLMRealm *const realm, dispatch_block_t block) { - std::vector *> observers; - - // Build up an array of observation info arrays which is indexed by table - // index (the object schemata may be in an entirely different order) - for (RLMObjectSchema *objectSchema in realm.schema.objectSchema) { - if (objectSchema->_observedObjects.empty()) { - continue; - } - size_t ndx = objectSchema.table->get_index_in_group(); - if (ndx >= observers.size()) { - observers.resize(std::max(observers.size() * 2, ndx + 1)); - } - observers[ndx] = &objectSchema->_observedObjects; - } - - // No need for change tracking if no objects are observed - if (observers.empty()) { - block(); - return; - } - - struct change { - RLMObservationInfo *info; - __unsafe_unretained NSString *property; - NSMutableIndexSet *indexes; - }; - - std::vector changes; - std::vector invalidated; - - // This callback is called by core with a list of row deletions and - // resulting link nullifications immediately before things are deleted and nullified - realm.group->set_cascade_notification_handler([&](realm::Group::CascadeNotification const& cs) { - for (auto const& link : cs.links) { - size_t table_ndx = link.origin_table->get_index_in_group(); - if (table_ndx >= observers.size() || !observers[table_ndx]) { - // The modified table has no observers - continue; - } - - for (auto observer : *observers[table_ndx]) { - if (!observer->isForRow(link.origin_row_ndx)) { - continue; - } - - RLMProperty *prop = observer->getObjectSchema().properties[link.origin_col_ndx]; - NSString *name = prop.name; - if (prop.type != RLMPropertyTypeArray) { - changes.push_back({observer, name}); - continue; - } - - auto c = find_if(begin(changes), end(changes), [&](auto const& c) { - return c.info == observer && c.property == name; - }); - if (c == end(changes)) { - changes.push_back({observer, name, [NSMutableIndexSet new]}); - c = prev(end(changes)); - } - - // We know what row index is being removed from the LinkView, - // but what we actually want is the indexes in the LinkView that - // are going away - auto linkview = observer->getRow().get_linklist(prop.column); - size_t start = 0, index; - while ((index = linkview->find(link.old_target_row_ndx, start)) != realm::not_found) { - [c->indexes addIndex:index]; - start = index + 1; - } - } - } - - for (auto const& row : cs.rows) { - if (row.table_ndx >= observers.size() || !observers[row.table_ndx]) { - // The modified table has no observers - continue; - } - - for (auto observer : *observers[row.table_ndx]) { - if (observer->isForRow(row.row_ndx)) { - invalidated.push_back(observer); - break; - } - } - } - - // The relative order of these loops is very important - for (auto info : invalidated) { - info->willChange(RLMInvalidatedKey); - } - for (auto const& change : changes) { - change.info->willChange(change.property, NSKeyValueChangeRemoval, change.indexes); - } - for (auto info : invalidated) { - info->prepareForInvalidation(); - } - }); - - try { - block(); - } - catch (...) { - realm.group->set_cascade_notification_handler(nullptr); - throw; - } - - for (auto const& change : reverse(changes)) { - change.info->didChange(change.property, NSKeyValueChangeRemoval, change.indexes); - } - for (auto info : reverse(invalidated)) { - info->didChange(RLMInvalidatedKey); - } - - realm.group->set_cascade_notification_handler(nullptr); -} - -namespace { -template -void forEach(realm::BindingContext::ObserverState const& state, Func&& func) { - for (size_t i = 0, size = state.changes.size(); i < size; ++i) { - if (state.changes[i].changed) { - func(i, state.changes[i], static_cast(state.info)); - } - } -} -} - -std::vector RLMGetObservedRows(NSArray *schema) { - std::vector observers; - for (RLMObjectSchema *objectSchema in schema) { - for (auto info : objectSchema->_observedObjects) { - auto const& row = info->getRow(); - if (!row.is_attached()) - continue; - observers.push_back({ - row.get_table()->get_index_in_group(), - row.get_index(), - info}); - } - } - sort(begin(observers), end(observers)); - return observers; -} - -static NSKeyValueChange convert(realm::BindingContext::ColumnInfo::Kind kind) { - switch (kind) { - case realm::BindingContext::ColumnInfo::Kind::None: - case realm::BindingContext::ColumnInfo::Kind::SetAll: - return NSKeyValueChangeSetting; - case realm::BindingContext::ColumnInfo::Kind::Set: - return NSKeyValueChangeReplacement; - case realm::BindingContext::ColumnInfo::Kind::Insert: - return NSKeyValueChangeInsertion; - case realm::BindingContext::ColumnInfo::Kind::Remove: - return NSKeyValueChangeRemoval; - } -} - -static NSIndexSet *convert(realm::IndexSet const& in, NSMutableIndexSet *out) { - if (in.empty()) { - return nil; - } - - [out removeAllIndexes]; - for (auto range : in) { - [out addIndexesInRange:{range.first, range.second - range.first}]; - } - return out; -} - -void RLMWillChange(std::vector const& observed, - std::vector const& invalidated) { - for (auto info : invalidated) { - static_cast(info)->willChange(RLMInvalidatedKey); - } - if (!observed.empty()) { - NSMutableIndexSet *indexes = [NSMutableIndexSet new]; - for (auto const& o : observed) { - forEach(o, [&](size_t i, auto const& change, RLMObservationInfo *info) { - info->willChange([info->getObjectSchema().properties[i] name], - convert(change.kind), convert(change.indices, indexes)); - }); - } - } - for (auto info : invalidated) { - static_cast(info)->prepareForInvalidation(); - } -} - -void RLMDidChange(std::vector const& observed, - std::vector const& invalidated) { - if (!observed.empty()) { - // Loop in reverse order to avoid O(N^2) behavior in Foundation - NSMutableIndexSet *indexes = [NSMutableIndexSet new]; - for (auto const& o : reverse(observed)) { - forEach(o, [&](size_t i, auto const& change, RLMObservationInfo *info) { - info->didChange([info->getObjectSchema().properties[i] name], - convert(change.kind), convert(change.indices, indexes)); - }); - } - } - for (auto const& info : reverse(invalidated)) { - static_cast(info)->didChange(RLMInvalidatedKey); - } -} diff --git a/Pods/Realm/Realm/RLMOptionalBase.mm b/Pods/Realm/Realm/RLMOptionalBase.mm deleted file mode 100644 index b953a739..00000000 --- a/Pods/Realm/Realm/RLMOptionalBase.mm +++ /dev/null @@ -1,86 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMAccessor.h" -#import "RLMOptionalBase.h" -#import "RLMObject_Private.h" -#import "RLMObjectStore.h" -#import "RLMProperty.h" -#import "RLMUtil.hpp" - -#import - -@interface RLMOptionalBase () -@property (nonatomic) id standaloneValue; -@end - -@implementation RLMOptionalBase - -- (instancetype)init { - return self; -} - -- (id)underlyingValue { - if ((_object && _object->_realm) || _object.isInvalidated) { - return RLMDynamicGet(_object, _property); - } - else { - return _standaloneValue; - } -} - -- (void)setUnderlyingValue:(id)underlyingValue { - if ((_object && _object->_realm) || _object.isInvalidated) { - RLMDynamicSet(_object, _property, underlyingValue, RLMCreationOptionsNone); - } - else { - NSString *propertyName = _property.name; - [_object willChangeValueForKey:propertyName]; - _standaloneValue = underlyingValue; - [_object didChangeValueForKey:propertyName]; - } -} - -- (BOOL)isKindOfClass:(Class)aClass { - return [self.underlyingValue isKindOfClass:aClass] || RLMIsKindOfClass(object_getClass(self), aClass); -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel { - return [self.underlyingValue methodSignatureForSelector:sel]; -} - -- (void)forwardInvocation:(NSInvocation *)invocation { - [invocation invokeWithTarget:self.underlyingValue]; -} - -- (id)forwardingTargetForSelector:(__unused SEL)sel { - return self.underlyingValue; -} - -- (BOOL)respondsToSelector:(SEL)aSelector { - if (id val = self.underlyingValue) { - return [val respondsToSelector:aSelector]; - } - return NO; -} - -- (void)doesNotRecognizeSelector:(SEL)aSelector { - [self.underlyingValue doesNotRecognizeSelector:aSelector]; -} - -@end diff --git a/Pods/Realm/Realm/RLMPredicateUtil.mm b/Pods/Realm/Realm/RLMPredicateUtil.mm deleted file mode 100644 index d2f722bf..00000000 --- a/Pods/Realm/Realm/RLMPredicateUtil.mm +++ /dev/null @@ -1,118 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "RLMPredicateUtil.hpp" - -// NSConditionalExpressionType is new in OS X 10.11 and iOS 9.0 -#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) -#define CONDITIONAL_EXPRESSION_DECLARED (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) -#elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#define CONDITIONAL_EXPRESSION_DECLARED (__IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) -#else -#define CONDITIONAL_EXPRESSION_DECLARED 0 -#endif - -#if !CONDITIONAL_EXPRESSION_DECLARED - -#define NSConditionalExpressionType 20 - -@interface NSExpression (NewIn1011And90) -+ (NSExpression *)expressionForConditional:(NSPredicate *)predicate trueExpression:(NSExpression *)trueExpression falseExpression:(NSExpression *)falseExpression; -- (NSExpression *)trueExpression; -- (NSExpression *)falseExpression; -@end - -#endif - -namespace { - -struct PredicateExpressionTransformer { - PredicateExpressionTransformer(ExpressionVisitor visitor) : m_visitor(visitor) { } - - NSExpression *visit(NSExpression *expression) const; - NSPredicate *visit(NSPredicate *predicate) const; - - ExpressionVisitor m_visitor; -}; - -NSExpression *PredicateExpressionTransformer::visit(NSExpression *expression) const { - expression = m_visitor(expression); - - switch (expression.expressionType) { - case NSFunctionExpressionType: { - NSMutableArray *arguments = [NSMutableArray array]; - for (NSExpression *argument in expression.arguments) { - [arguments addObject:visit(argument)]; - } - if (expression.operand) { - return [NSExpression expressionForFunction:visit(expression.operand) selectorName:expression.function arguments:arguments]; - } else { - return [NSExpression expressionForFunction:expression.function arguments:arguments]; - } - } - - case NSUnionSetExpressionType: - return [NSExpression expressionForUnionSet:visit(expression.leftExpression) with:visit(expression.rightExpression)]; - case NSIntersectSetExpressionType: - return [NSExpression expressionForIntersectSet:visit(expression.leftExpression) with:visit(expression.rightExpression)]; - case NSMinusSetExpressionType: - return [NSExpression expressionForMinusSet:visit(expression.leftExpression) with:visit(expression.rightExpression)]; - - case NSSubqueryExpressionType: - return [NSExpression expressionForSubquery:visit(expression.operand) usingIteratorVariable:expression.variable predicate:visit(expression.predicate)]; - - case NSAggregateExpressionType: { - NSMutableArray *subexpressions = [NSMutableArray array]; - for (NSExpression *subexpression in expression.collection) { - [subexpressions addObject:visit(subexpression)]; - } - return [NSExpression expressionForAggregate:subexpressions]; - } - - case NSConditionalExpressionType: - return [NSExpression expressionForConditional:visit(expression.predicate) trueExpression:visit(expression.trueExpression) falseExpression:visit(expression.falseExpression)]; - - default: - // The remaining expression types do not contain nested expressions or predicates. - return expression; - } -} - -NSPredicate *PredicateExpressionTransformer::visit(NSPredicate *predicate) const { - if ([predicate isKindOfClass:[NSCompoundPredicate class]]) { - NSCompoundPredicate *compoundPredicate = (NSCompoundPredicate *)predicate; - NSMutableArray *subpredicates = [NSMutableArray array]; - for (NSPredicate *subpredicate in compoundPredicate.subpredicates) { - [subpredicates addObject:visit(subpredicate)]; - } - return [[NSCompoundPredicate alloc] initWithType:compoundPredicate.compoundPredicateType subpredicates:subpredicates]; - } - if ([predicate isKindOfClass:[NSComparisonPredicate class]]) { - NSComparisonPredicate *comparisonPredicate = (NSComparisonPredicate *)predicate; - NSExpression *leftExpression = visit(comparisonPredicate.leftExpression); - NSExpression *rightExpression = visit(comparisonPredicate.rightExpression); - return [NSComparisonPredicate predicateWithLeftExpression:leftExpression rightExpression:rightExpression modifier:comparisonPredicate.comparisonPredicateModifier type:comparisonPredicate.predicateOperatorType options:comparisonPredicate.options]; - } - return predicate; -} - -} // anonymous namespace - -NSPredicate *transformPredicate(NSPredicate *predicate, ExpressionVisitor visitor) { - PredicateExpressionTransformer transformer(visitor); - return transformer.visit(predicate); -} diff --git a/Pods/Realm/Realm/RLMProperty.mm b/Pods/Realm/Realm/RLMProperty.mm deleted file mode 100644 index a55471e8..00000000 --- a/Pods/Realm/Realm/RLMProperty.mm +++ /dev/null @@ -1,564 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMProperty_Private.hpp" - -#import "RLMArray.h" -#import "RLMListBase.h" -#import "RLMObject.h" -#import "RLMObject_Private.h" -#import "RLMOptionalBase.h" -#import "RLMSchema_Private.h" -#import "RLMSwiftSupport.h" -#import "RLMUtil.hpp" - -BOOL RLMPropertyTypeIsNullable(RLMPropertyType propertyType) { - return propertyType != RLMPropertyTypeArray && propertyType != RLMPropertyTypeLinkingObjects; -} - -BOOL RLMPropertyTypeIsNumeric(RLMPropertyType propertyType) { - switch (propertyType) { - case RLMPropertyTypeInt: - case RLMPropertyTypeFloat: - case RLMPropertyTypeDouble: - return YES; - default: - return NO; - } -} - -BOOL RLMPropertyTypeIsComputed(RLMPropertyType propertyType) { - return propertyType == RLMPropertyTypeLinkingObjects; -} - -static bool rawTypeIsComputedProperty(NSString *rawType) { - if ([rawType isEqualToString:@"@\"RLMLinkingObjects\""] || [rawType hasPrefix:@"@\"RLMLinkingObjects<"]) { - return true; - } - - return false; -} - -@implementation RLMProperty - -+ (instancetype)propertyForObjectStoreProperty:(const realm::Property &)prop { - return [[RLMProperty alloc] initWithName:@(prop.name.c_str()) - type:(RLMPropertyType)prop.type - objectClassName:prop.object_type.length() ? @(prop.object_type.c_str()) : nil - linkOriginPropertyName:prop.link_origin_property_name.length() ? @(prop.link_origin_property_name.c_str()) : nil - indexed:prop.is_indexed - optional:prop.is_nullable]; -} - -- (instancetype)initWithName:(NSString *)name - type:(RLMPropertyType)type - objectClassName:(NSString *)objectClassName - linkOriginPropertyName:(NSString *)linkOriginPropertyName - indexed:(BOOL)indexed - optional:(BOOL)optional { - self = [super init]; - if (self) { - _name = name; - _type = type; - _objectClassName = objectClassName; - _linkOriginPropertyName = linkOriginPropertyName; - _indexed = indexed; - _optional = optional; - [self setObjcCodeFromType]; - [self updateAccessors]; - } - - return self; -} - -- (void)setName:(NSString *)name { - _name = name; - [self updateAccessors]; -} - -- (void)updateAccessors { - // populate getter/setter names if generic - if (!_getterName) { - _getterName = _name; - } - if (!_setterName) { - // Objective-C setters only capitalize the first letter of the property name if it falls between 'a' and 'z' - int asciiCode = [_name characterAtIndex:0]; - BOOL shouldUppercase = asciiCode >= 'a' && asciiCode <= 'z'; - NSString *firstChar = [_name substringToIndex:1]; - firstChar = shouldUppercase ? firstChar.uppercaseString : firstChar; - _setterName = [NSString stringWithFormat:@"set%@%@:", firstChar, [_name substringFromIndex:1]]; - } - - _getterSel = NSSelectorFromString(_getterName); - _setterSel = NSSelectorFromString(_setterName); -} - --(void)setObjcCodeFromType { - if (_optional) { - _objcType = '@'; - return; - } - switch (_type) { - case RLMPropertyTypeInt: - _objcType = 'q'; - break; - case RLMPropertyTypeBool: - _objcType = 'c'; - break; - case RLMPropertyTypeDouble: - _objcType = 'd'; - break; - case RLMPropertyTypeFloat: - _objcType = 'f'; - break; - case RLMPropertyTypeAny: - case RLMPropertyTypeArray: - case RLMPropertyTypeData: - case RLMPropertyTypeDate: - case RLMPropertyTypeObject: - case RLMPropertyTypeString: - case RLMPropertyTypeLinkingObjects: - _objcType = '@'; - break; - } -} - -// determine RLMPropertyType from objc code - returns true if valid type was found/set -- (BOOL)setTypeFromRawType { - const char *code = _objcRawType.UTF8String; - _objcType = *code; // first char of type attr - - // map to RLMPropertyType - switch (self.objcType) { - case 's': // short - case 'i': // int - case 'l': // long - case 'q': // long long - _type = RLMPropertyTypeInt; - return YES; - case 'f': - _type = RLMPropertyTypeFloat; - return YES; - case 'd': - _type = RLMPropertyTypeDouble; - return YES; - case 'c': // BOOL is stored as char - since rlm has no char type this is ok - case 'B': - _type = RLMPropertyTypeBool; - return YES; - case '@': { - _optional = true; - static const char arrayPrefix[] = "@\"RLMArray<"; - static const int arrayPrefixLen = sizeof(arrayPrefix) - 1; - - static const char numberPrefix[] = "@\"NSNumber<"; - static const int numberPrefixLen = sizeof(numberPrefix) - 1; - - static const char linkingObjectsPrefix[] = "@\"RLMLinkingObjects"; - static const int linkingObjectsPrefixLen = sizeof(linkingObjectsPrefix) - 1; - - if (strcmp(code, "@\"NSString\"") == 0) { - _type = RLMPropertyTypeString; - } - else if (strcmp(code, "@\"NSDate\"") == 0) { - _type = RLMPropertyTypeDate; - } - else if (strcmp(code, "@\"NSData\"") == 0) { - _type = RLMPropertyTypeData; - } - else if (strncmp(code, arrayPrefix, arrayPrefixLen) == 0) { - _optional = false; - // get object class from type string - @"RLMArray" - _type = RLMPropertyTypeArray; - _objectClassName = [[NSString alloc] initWithBytes:code + arrayPrefixLen - length:strlen(code + arrayPrefixLen) - 2 // drop trailing >" - encoding:NSUTF8StringEncoding]; - - Class cls = [RLMSchema classForString:_objectClassName]; - if (!cls) { - @throw RLMException(@"Property '%@' is of type 'RLMArray<%@>' which is not a supported RLMArray object type. " - @"RLMArrays can only contain instances of RLMObject subclasses. " - @"See https://realm.io/docs/objc/latest/#to-many for more information.", _name, _objectClassName); - } - } - else if (strncmp(code, numberPrefix, numberPrefixLen) == 0) { - // get number type from type string - @"NSNumber" - NSString *numberType = [[NSString alloc] initWithBytes:code + numberPrefixLen - length:strlen(code + numberPrefixLen) - 2 // drop trailing >" - encoding:NSUTF8StringEncoding]; - - if ([numberType isEqualToString:@"RLMInt"]) { - _type = RLMPropertyTypeInt; - } - else if ([numberType isEqualToString:@"RLMFloat"]) { - _type = RLMPropertyTypeFloat; - } - else if ([numberType isEqualToString:@"RLMDouble"]) { - _type = RLMPropertyTypeDouble; - } - else if ([numberType isEqualToString:@"RLMBool"]) { - _type = RLMPropertyTypeBool; - } - else { - @throw RLMException(@"Property '%@' is of type 'NSNumber<%@>' which is not a supported NSNumber object type. " - @"NSNumbers can only be RLMInt, RLMFloat, RLMDouble, and RLMBool at the moment. " - @"See https://realm.io/docs/objc/latest for more information.", _name, numberType); - } - } - else if (strncmp(code, linkingObjectsPrefix, linkingObjectsPrefixLen) == 0 && - (code[linkingObjectsPrefixLen] == '"' || code[linkingObjectsPrefixLen] == '<')) { - _type = RLMPropertyTypeLinkingObjects; - _optional = false; - - if (!_objectClassName || !_linkOriginPropertyName) { - @throw RLMException(@"Property '%@' is of type RLMLinkingObjects but +linkingObjectsProperties did not specify the class " - "or property that is the origin of the link.", _name); - } - - // If the property was declared with a protocol indicating the contained type, validate that it matches - // the class from the dictionary returned by +linkingObjectsProperties. - if (code[linkingObjectsPrefixLen] == '<') { - NSString *classNameFromProtocol = [[NSString alloc] initWithBytes:code + linkingObjectsPrefixLen + 1 - length:strlen(code + linkingObjectsPrefixLen) - 3 // drop trailing >" - encoding:NSUTF8StringEncoding]; - if (![_objectClassName isEqualToString:classNameFromProtocol]) { - @throw RLMException(@"Property '%@' was declared with type RLMLinkingObjects<%@>, but a conflicting " - "class name of '%@' was returned by +linkingObjectsProperties.", _name, - classNameFromProtocol, _objectClassName); - } - } - } - else if (strcmp(code, "@\"NSNumber\"") == 0) { - @throw RLMException(@"Property '%@' requires a protocol defining the contained type - example: NSNumber.", _name); - } - else if (strcmp(code, "@\"RLMArray\"") == 0) { - @throw RLMException(@"Property '%@' requires a protocol defining the contained type - example: RLMArray.", _name); - } - else { - NSString *className; - Class cls = nil; - if (code[1] == '\0') { - className = @"id"; - } - else { - // for objects strip the quotes and @ - className = [_objcRawType substringWithRange:NSMakeRange(2, _objcRawType.length-3)]; - cls = [RLMSchema classForString:className]; - } - - if (!cls) { - @throw RLMException(@"Property '%@' is declared as '%@', which is not a supported RLMObject property type. " - @"All properties must be primitives, NSString, NSDate, NSData, NSNumber, RLMArray, RLMLinkingObjects, or subclasses of RLMObject. " - @"See https://realm.io/docs/objc/latest/api/Classes/RLMObject.html for more information.", _name, className); - } - - _type = RLMPropertyTypeObject; - _optional = true; - _objectClassName = [cls className] ?: className; - } - return YES; - } - default: - return NO; - } -} - -- (bool)parseObjcProperty:(objc_property_t)property { - unsigned int count; - objc_property_attribute_t *attrs = property_copyAttributeList(property, &count); - - bool isReadOnly = false; - for (size_t i = 0; i < count; ++i) { - switch (*attrs[i].name) { - case 'T': - _objcRawType = @(attrs[i].value); - break; - case 'R': - isReadOnly = true; - break; - case 'N': - // nonatomic - break; - case 'D': - // dynamic - break; - case 'G': - _getterName = @(attrs[i].value); - break; - case 'S': - _setterName = @(attrs[i].value); - break; - default: - break; - } - } - free(attrs); - - return isReadOnly; -} - -- (instancetype)initSwiftPropertyWithName:(NSString *)name - indexed:(BOOL)indexed - linkPropertyDescriptor:(RLMPropertyDescriptor *)linkPropertyDescriptor - property:(objc_property_t)property - instance:(RLMObject *)obj { - self = [super init]; - if (!self) { - return nil; - } - - _name = name; - _indexed = indexed; - - if (linkPropertyDescriptor) { - _objectClassName = [linkPropertyDescriptor.objectClass className]; - _linkOriginPropertyName = linkPropertyDescriptor.propertyName; - } - - if ([self parseObjcProperty:property]) { - return nil; - } - - id propertyValue = [obj valueForKey:_name]; - - // convert array types to objc variant - if ([_objcRawType isEqualToString:@"@\"RLMArray\""]) { - _objcRawType = [NSString stringWithFormat:@"@\"RLMArray<%@>\"", [propertyValue objectClassName]]; - } - else if ([_objcRawType isEqualToString:@"@\"NSNumber\""]) { - const char *numberType = [propertyValue objCType]; - switch (*numberType) { - case 'i': - case 'l': - case 'q': - _objcRawType = @"@\"NSNumber\""; - break; - case 'f': - _objcRawType = @"@\"NSNumber\""; - break; - case 'd': - _objcRawType = @"@\"NSNumber\""; - break; - case 'B': - case 'c': - _objcRawType = @"@\"NSNumber\""; - break; - default: - @throw RLMException(@"Can't persist NSNumber of type '%s': only integers, floats, doubles, and bools are currently supported.", numberType); - } - } - - auto throwForPropertyName = ^(NSString *propertyName){ - @throw RLMException(@"Can't persist property '%@' with incompatible type. " - "Add to Object.ignoredProperties() class method to ignore.", - propertyName); - }; - - if (![self setTypeFromRawType]) { - throwForPropertyName(self.name); - } - - if (_objcType == 'c') { - // Check if it's a BOOL or Int8 by trying to set it to 2 and seeing if - // it actually sets it to 1. - [obj setValue:@2 forKey:name]; - NSNumber *value = [obj valueForKey:name]; - _type = value.intValue == 2 ? RLMPropertyTypeInt : RLMPropertyTypeBool; - } - - // update getter/setter names - [self updateAccessors]; - - return self; -} - -- (instancetype)initWithName:(NSString *)name - indexed:(BOOL)indexed - linkPropertyDescriptor:(RLMPropertyDescriptor *)linkPropertyDescriptor - property:(objc_property_t)property -{ - self = [super init]; - if (!self) { - return nil; - } - - _name = name; - _indexed = indexed; - - if (linkPropertyDescriptor) { - _objectClassName = [linkPropertyDescriptor.objectClass className]; - _linkOriginPropertyName = linkPropertyDescriptor.propertyName; - } - - bool isReadOnly = [self parseObjcProperty:property]; - bool isComputedProperty = rawTypeIsComputedProperty(_objcRawType); - if (isReadOnly && !isComputedProperty) { - return nil; - } - - if (![self setTypeFromRawType]) { - @throw RLMException(@"Can't persist property '%@' with incompatible type. " - "Add to ignoredPropertyNames: method to ignore.", self.name); - } - - if (!isReadOnly && isComputedProperty) { - @throw RLMException(@"Property '%@' must be declared as readonly as %@ properties cannot be written to.", - self.name, RLMTypeToString(_type)); - } - - // update getter/setter names - [self updateAccessors]; - - return self; -} - -- (instancetype)initSwiftListPropertyWithName:(NSString *)name - ivar:(Ivar)ivar - objectClassName:(NSString *)objectClassName { - self = [super init]; - if (!self) { - return nil; - } - - _name = name; - _type = RLMPropertyTypeArray; - _objectClassName = objectClassName; - _objcType = 't'; - _swiftIvar = ivar; - - // no obj-c property for generic lists, and thus no getter/setter names - - return self; -} - -- (instancetype)initSwiftOptionalPropertyWithName:(NSString *)name - indexed:(BOOL)indexed - ivar:(Ivar)ivar - propertyType:(RLMPropertyType)propertyType { - self = [super init]; - if (!self) { - return nil; - } - - _name = name; - _type = propertyType; - _indexed = indexed; - _objcType = '@'; - _swiftIvar = ivar; - _optional = true; - - // no obj-c property for generic optionals, and thus no getter/setter names - - return self; -} - -- (instancetype)initSwiftLinkingObjectsPropertyWithName:(NSString *)name - ivar:(Ivar)ivar - objectClassName:(NSString *)objectClassName - linkOriginPropertyName:(NSString *)linkOriginPropertyName { - self = [super init]; - if (!self) { - return nil; - } - - _name = name; - _type = RLMPropertyTypeLinkingObjects; - _objectClassName = objectClassName; - _linkOriginPropertyName = linkOriginPropertyName; - _objcType = '@'; - _swiftIvar = ivar; - - // no obj-c property for generic linking objects properties, and thus no getter/setter names - - return self; -} - -- (id)copyWithZone:(NSZone *)zone { - RLMProperty *prop = [[RLMProperty allocWithZone:zone] init]; - prop->_name = _name; - prop->_type = _type; - prop->_objcType = _objcType; - prop->_objectClassName = _objectClassName; - prop->_indexed = _indexed; - prop->_getterName = _getterName; - prop->_setterName = _setterName; - prop->_getterSel = _getterSel; - prop->_setterSel = _setterSel; - prop->_isPrimary = _isPrimary; - prop->_swiftIvar = _swiftIvar; - prop->_optional = _optional; - prop->_declarationIndex = _declarationIndex; - prop->_linkOriginPropertyName = _linkOriginPropertyName; - - return prop; -} - -- (RLMProperty *)copyWithNewName:(NSString *)name { - RLMProperty *prop = [self copy]; - prop.name = name; - return prop; -} - -- (BOOL)isEqual:(id)object { - if (![object isKindOfClass:[RLMProperty class]]) { - return NO; - } - - return [self isEqualToProperty:object]; -} - -- (BOOL)isEqualToProperty:(RLMProperty *)property { - return _type == property->_type - && _column == property->_column - && _indexed == property->_indexed - && _isPrimary == property->_isPrimary - && _optional == property->_optional - && [_name isEqualToString:property->_name] - && (_objectClassName == property->_objectClassName || [_objectClassName isEqualToString:property->_objectClassName]) - && (_linkOriginPropertyName == property->_linkOriginPropertyName || [_linkOriginPropertyName isEqualToString:property->_linkOriginPropertyName]); -} - -- (NSString *)description { - return [NSString stringWithFormat:@"%@ {\n\ttype = %@;\n\tobjectClassName = %@;\n\tlinkOriginPropertyName = %@;\n\tindexed = %@;\n\tisPrimary = %@;\n\toptional = %@;\n}", self.name, RLMTypeToString(self.type), self.objectClassName, self.linkOriginPropertyName, self.indexed ? @"YES" : @"NO", self.isPrimary ? @"YES" : @"NO", self.optional ? @"YES" : @"NO"]; -} - -- (realm::Property)objectStoreCopy { - realm::Property p; - p.name = _name.UTF8String; - p.type = (realm::PropertyType)_type; - p.object_type = _objectClassName ? _objectClassName.UTF8String : ""; - p.is_indexed = _indexed; - p.is_nullable = _optional; - p.link_origin_property_name = _linkOriginPropertyName ? _linkOriginPropertyName.UTF8String : ""; - return p; -} - -@end - -@implementation RLMPropertyDescriptor - -+ (instancetype)descriptorWithClass:(Class)objectClass propertyName:(NSString *)propertyName -{ - RLMPropertyDescriptor *descriptor = [[RLMPropertyDescriptor alloc] init]; - descriptor->_objectClass = objectClass; - descriptor->_propertyName = propertyName; - return descriptor; -} - -@end diff --git a/Pods/Realm/Realm/RLMQueryUtil.mm b/Pods/Realm/Realm/RLMQueryUtil.mm deleted file mode 100644 index 70be4bba..00000000 --- a/Pods/Realm/Realm/RLMQueryUtil.mm +++ /dev/null @@ -1,1288 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMQueryUtil.hpp" - -#import "RLMArray_Private.hpp" -#import "RLMObject_Private.hpp" -#import "RLMObjectSchema_Private.hpp" -#import "RLMPredicateUtil.hpp" -#import "RLMProperty_Private.h" -#import "RLMSchema_Private.h" -#import "RLMUtil.hpp" - -#import "results.hpp" - -#include - -using namespace realm; - -NSString * const RLMPropertiesComparisonTypeMismatchException = @"RLMPropertiesComparisonTypeMismatchException"; -NSString * const RLMUnsupportedTypesFoundInPropertyComparisonException = @"RLMUnsupportedTypesFoundInPropertyComparisonException"; - -NSString * const RLMPropertiesComparisonTypeMismatchReason = @"Property type mismatch between %@ and %@"; -NSString * const RLMUnsupportedTypesFoundInPropertyComparisonReason = @"Comparison between %@ and %@"; - -// small helper to create the many exceptions thrown when parsing predicates -static NSException *RLMPredicateException(NSString *name, NSString *format, ...) { - va_list args; - va_start(args, format); - NSString *reason = [[NSString alloc] initWithFormat:format arguments:args]; - va_end(args); - - return [NSException exceptionWithName:name reason:reason userInfo:nil]; -} - -// check a precondition and throw an exception if it is not met -// this should be used iff the condition being false indicates a bug in the caller -// of the function checking its preconditions -static void RLMPrecondition(bool condition, NSString *name, NSString *format, ...) { - if (__builtin_expect(condition, 1)) { - return; - } - - va_list args; - va_start(args, format); - NSString *reason = [[NSString alloc] initWithFormat:format arguments:args]; - va_end(args); - - @throw [NSException exceptionWithName:name reason:reason userInfo:nil]; -} - -// return the property for a validated column name -RLMProperty *RLMValidatedProperty(RLMObjectSchema *desc, NSString *columnName) { - RLMProperty *prop = desc[columnName]; - RLMPrecondition(prop, @"Invalid property name", - @"Property '%@' not found in object of type '%@'", columnName, desc.className); - return prop; -} - -namespace { - -// FIXME: TrueExpression and FalseExpression should be supported by core in some way - -struct TrueExpression : realm::Expression { - size_t find_first(size_t start, size_t end) const override - { - if (start != end) - return start; - - return realm::not_found; - } - void set_base_table(const Table*) override {} - const Table* get_base_table() const override { return nullptr; } - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return std::unique_ptr(new TrueExpression(*this)); - } -}; - -struct FalseExpression : realm::Expression { - size_t find_first(size_t, size_t) const override { return realm::not_found; } - void set_base_table(const Table*) override {} - const Table* get_base_table() const override { return nullptr; } - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return std::unique_ptr(new FalseExpression(*this)); - } -}; - -NSString *operatorName(NSPredicateOperatorType operatorType) -{ - switch (operatorType) { - case NSLessThanPredicateOperatorType: - return @"<"; - case NSLessThanOrEqualToPredicateOperatorType: - return @"<="; - case NSGreaterThanPredicateOperatorType: - return @">"; - case NSGreaterThanOrEqualToPredicateOperatorType: - return @">="; - case NSEqualToPredicateOperatorType: - return @"=="; - case NSNotEqualToPredicateOperatorType: - return @"!="; - case NSMatchesPredicateOperatorType: - return @"MATCHES"; - case NSLikePredicateOperatorType: - return @"LIKE"; - case NSBeginsWithPredicateOperatorType: - return @"BEGINSWITH"; - case NSEndsWithPredicateOperatorType: - return @"ENDSWITH"; - case NSInPredicateOperatorType: - return @"IN"; - case NSContainsPredicateOperatorType: - return @"CONTAINS"; - case NSBetweenPredicateOperatorType: - return @"BETWEENS"; - case NSCustomSelectorPredicateOperatorType: - return @"custom selector"; - } - - return [NSString stringWithFormat:@"unknown operator %lu", (unsigned long)operatorType]; -} - -// A reference to a column within a query. Can be resolved to a Columns for use in query expressions. -class ColumnReference { -public: - ColumnReference(RLMSchema *schema, RLMProperty* property, const std::vector& links) : - m_links(links), m_property(property), m_schema(schema) - { - } - ColumnReference(RLMSchema *schema, RLMProperty* property) : m_property(property), m_schema(schema) - { - } - - template - auto resolve(Query& query) const; - - template - auto resolve_with_subquery(Query& query, Query subquery) const - { - if (type() != RLMPropertyTypeLinkingObjects) { - return table_for_query(query)->template column(index(), std::move(subquery)); - } - else { - RLMObjectSchema *link_origin_schema = m_schema[property().objectClassName]; - Table& link_origin_table = *link_origin_schema.table; - size_t link_origin_column = link_origin_schema[property().linkOriginPropertyName].column; - return table_for_query(query)->template column(link_origin_table, link_origin_column, std::move(subquery)); - } - } - - RLMProperty *property() const { return m_property; } - size_t index() const { return property().column; } - RLMPropertyType type() const { return property().type; } - - RLMObjectSchema *link_target_object_schema() const - { - switch (type()) { - case RLMPropertyTypeObject: - case RLMPropertyTypeArray: - case RLMPropertyTypeLinkingObjects: - return m_schema[property().objectClassName]; - default: - REALM_ASSERT(false); - } - } - - bool has_links() const { return m_links.size(); } - - bool has_any_to_many_links() const { - return std::any_of(begin(m_links), end(m_links), [](RLMProperty *property) { - return property.type == RLMPropertyTypeArray || property.type == RLMPropertyTypeLinkingObjects; - }); - } - - util::Optional last_link_column() const { - if (!m_links.size()) { - return util::none; - } - auto links = m_links; - RLMProperty *property = links.back(); - links.resize(links.size() - 1); - return ColumnReference(m_schema, property, std::move(links)); - } - - ColumnReference column_ignoring_links() const { - return {m_schema, m_property}; - } - -private: - Table* table_for_query(Query& query) const - { - realm::TableRef& table = query.get_table(); - for (const auto& link : m_links) { - // mutates m_link_chain on table - if (link.type != RLMPropertyTypeLinkingObjects) { - table->link(link.column); - } - else { - RLMObjectSchema *link_origin_schema = m_schema[link.objectClassName]; - const Table& link_origin_table = *link_origin_schema.table; - size_t link_origin_column = link_origin_schema[link.linkOriginPropertyName].column; - table->backlink(link_origin_table, link_origin_column); - } - } - return table.get(); - } - - std::vector m_links; - RLMProperty *m_property; - RLMSchema *m_schema; -}; - -template -auto ColumnReference::resolve(Query& query) const -{ - return table_for_query(query)->template column(index()); -} - -template <> -auto ColumnReference::resolve(Query& query) const -{ - if (type() != RLMPropertyTypeLinkingObjects) { - return table_for_query(query)->template column(index()); - } - else { - RLMObjectSchema *link_origin_schema = m_schema[property().objectClassName]; - Table& link_origin_table = *link_origin_schema.table; - size_t link_origin_column = link_origin_schema[property().linkOriginPropertyName].column; - return table_for_query(query)->template column(link_origin_table, link_origin_column); - } -} - -class CollectionOperation { -public: - enum Type { - Count, - Minimum, - Maximum, - Sum, - Average, - }; - - CollectionOperation(Type type, ColumnReference link_column, util::Optional column) - : m_type(type) - , m_link_column(std::move(link_column)) - , m_column(std::move(column)) - { - RLMPrecondition(m_link_column.type() == RLMPropertyTypeArray || m_link_column.type() == RLMPropertyTypeLinkingObjects, - @"Invalid predicate", @"Collection operation can only be applied to a property of type RLMArray."); - - switch (m_type) { - case Count: - RLMPrecondition(!m_column, @"Invalid predicate", @"Result of @count does not have any properties."); - break; - case Minimum: - case Maximum: - case Sum: - case Average: - RLMPrecondition(m_column && RLMPropertyTypeIsNumeric(m_column->type()), @"Invalid predicate", @"%@ can only be applied to a numeric property.", name_for_type(m_type)); - break; - } - } - - CollectionOperation(NSString *operationName, ColumnReference link_column, util::Optional column = util::none) - : CollectionOperation(type_for_name(operationName), std::move(link_column), std::move(column)) - { - } - - Type type() const { return m_type; } - const ColumnReference& link_column() const { return m_link_column; } - const ColumnReference& column() const { return *m_column; } - - void validate_comparison(id value) const { - switch (m_type) { - case Count: - case Average: - RLMPrecondition([value isKindOfClass:[NSNumber class]], @"Invalid operand", @"%@ can only be compared with a numeric value.", name_for_type(m_type)); - break; - case Minimum: - case Maximum: - case Sum: - RLMPrecondition(RLMIsObjectValidForProperty(value, m_column->property()), @"Invalid operand", @"%@ on a property of type %@ cannot be compared with '%@'", - name_for_type(m_type), RLMTypeToString(m_column->type()), value); - break; - } - } - - void validate_comparison(const ColumnReference& column) const { - switch (m_type) { - case Count: - RLMPrecondition(RLMPropertyTypeIsNumeric(column.type()), @"Invalid operand", @"%@ can only be compared with a numeric value.", name_for_type(m_type)); - break; - case Average: - case Minimum: - case Maximum: - case Sum: - RLMPrecondition(RLMPropertyTypeIsNumeric(column.type()), @"Invalid operand", @"%@ on a property of type %@ cannot be compared with property of type '%@'", - name_for_type(m_type), RLMTypeToString(m_column->type()), RLMTypeToString(column.type())); - break; - } - } - -private: - static Type type_for_name(NSString *name) { - if ([name isEqualToString:@"@count"]) { - return Count; - } - if ([name isEqualToString:@"@min"]) { - return Minimum; - } - if ([name isEqualToString:@"@max"]) { - return Maximum; - } - if ([name isEqualToString:@"@sum"]) { - return Sum; - } - if ([name isEqualToString:@"@avg"]) { - return Average; - } - @throw RLMPredicateException(@"Invalid predicate", @"Unsupported collection operation '%@'", name); - } - - static NSString *name_for_type(Type type) { - switch (type) { - case Count: return @"@count"; - case Minimum: return @"@min"; - case Maximum: return @"@max"; - case Sum: return @"@sum"; - case Average: return @"@avg"; - } - } - - Type m_type; - ColumnReference m_link_column; - util::Optional m_column; -}; - -// add a clause for numeric constraints based on operator type -template -void add_numeric_constraint_to_query(realm::Query& query, - RLMPropertyType datatype, - NSPredicateOperatorType operatorType, - A&& lhs, - B&& rhs) -{ - switch (operatorType) { - case NSLessThanPredicateOperatorType: - query.and_query(lhs < rhs); - break; - case NSLessThanOrEqualToPredicateOperatorType: - query.and_query(lhs <= rhs); - break; - case NSGreaterThanPredicateOperatorType: - query.and_query(lhs > rhs); - break; - case NSGreaterThanOrEqualToPredicateOperatorType: - query.and_query(lhs >= rhs); - break; - case NSEqualToPredicateOperatorType: - query.and_query(lhs == rhs); - break; - case NSNotEqualToPredicateOperatorType: - query.and_query(lhs != rhs); - break; - default: - @throw RLMPredicateException(@"Invalid operator type", - @"Operator '%@' not supported for type %@", operatorName(operatorType), RLMTypeToString(datatype)); - } -} - -template -void add_bool_constraint_to_query(realm::Query &query, NSPredicateOperatorType operatorType, A lhs, B rhs) { - switch (operatorType) { - case NSEqualToPredicateOperatorType: - query.and_query(lhs == rhs); - break; - case NSNotEqualToPredicateOperatorType: - query.and_query(lhs != rhs); - break; - default: - @throw RLMPredicateException(@"Invalid operator type", - @"Operator '%@' not supported for bool type", operatorName(operatorType)); - } -} - -template -void add_string_constraint_to_query(realm::Query &query, - NSPredicateOperatorType operatorType, - NSComparisonPredicateOptions predicateOptions, - Columns &&column, - T value) { - bool caseSensitive = !(predicateOptions & NSCaseInsensitivePredicateOption); - bool diacriticInsensitive = (predicateOptions & NSDiacriticInsensitivePredicateOption); - RLMPrecondition(!diacriticInsensitive, @"Invalid predicate option", - @"NSDiacriticInsensitivePredicateOption not supported for string type"); - - switch (operatorType) { - case NSBeginsWithPredicateOperatorType: - query.and_query(column.begins_with(value, caseSensitive)); - break; - case NSEndsWithPredicateOperatorType: - query.and_query(column.ends_with(value, caseSensitive)); - break; - case NSContainsPredicateOperatorType: - query.and_query(column.contains(value, caseSensitive)); - break; - case NSEqualToPredicateOperatorType: - query.and_query(column.equal(value, caseSensitive)); - break; - case NSNotEqualToPredicateOperatorType: - query.and_query(column.not_equal(value, caseSensitive)); - break; - default: - @throw RLMPredicateException(@"Invalid operator type", - @"Operator '%@' not supported for string type", operatorName(operatorType)); - } -} - -void add_string_constraint_to_query(realm::Query& query, - NSPredicateOperatorType operatorType, - NSComparisonPredicateOptions predicateOptions, - StringData value, - Columns&& column) { - switch (operatorType) { - case NSEqualToPredicateOperatorType: - case NSNotEqualToPredicateOperatorType: - add_string_constraint_to_query(query, operatorType, predicateOptions, std::move(column), value); - break; - default: - @throw RLMPredicateException(@"Invalid operator type", - @"Operator '%@' is not supported for string type with key path on right side of operator", - operatorName(operatorType)); - } -} - -id value_from_constant_expression_or_value(id value) { - if (NSExpression *exp = RLMDynamicCast(value)) { - RLMPrecondition(exp.expressionType == NSConstantValueExpressionType, - @"Invalid value", - @"Expressions within predicate aggregates must be constant values"); - return exp.constantValue; - } - return value; -} - -void validate_and_extract_between_range(id value, RLMProperty *prop, id *from, id *to) { - NSArray *array = RLMDynamicCast(value); - RLMPrecondition(array, @"Invalid value", @"object must be of type NSArray for BETWEEN operations"); - RLMPrecondition(array.count == 2, @"Invalid value", @"NSArray object must contain exactly two objects for BETWEEN operations"); - - *from = value_from_constant_expression_or_value(array.firstObject); - *to = value_from_constant_expression_or_value(array.lastObject); - RLMPrecondition(RLMIsObjectValidForProperty(*from, prop) && RLMIsObjectValidForProperty(*to, prop), - @"Invalid value", - @"NSArray objects must be of type %@ for BETWEEN operations", RLMTypeToString(prop.type)); -} - -template -void add_constraint_to_query(realm::Query &query, RLMPropertyType type, - NSPredicateOperatorType operatorType, - NSComparisonPredicateOptions predicateOptions, - L lhs, R rhs); - -void add_between_constraint_to_query(realm::Query &query, const ColumnReference& column, id value) { - if (column.has_any_to_many_links()) { - auto link_column = *column.last_link_column(); - Query subquery = link_column.link_target_object_schema().table->where(); - add_between_constraint_to_query(subquery, column.column_ignoring_links(), value); - - query.and_query(link_column.resolve_with_subquery(query, std::move(subquery)).count() > 0); - return; - } - - id from, to; - validate_and_extract_between_range(value, column.property(), &from, &to); - - RLMPropertyType type = column.type(); - - query.group(); - add_constraint_to_query(query, type, NSGreaterThanOrEqualToPredicateOperatorType, 0, column, from); - add_constraint_to_query(query, type, NSLessThanOrEqualToPredicateOperatorType, 0, column, to); - query.end_group(); -} - -template -void add_binary_constraint_to_query(realm::Query & query, - NSPredicateOperatorType operatorType, - const ColumnReference& column, - T value) { - RLMPrecondition(!column.has_links(), @"Unsupported operator", @"NSData properties cannot be queried over an object link."); - - size_t index = column.index(); - switch (operatorType) { - case NSBeginsWithPredicateOperatorType: - query.begins_with(index, value); - break; - case NSEndsWithPredicateOperatorType: - query.ends_with(index, value); - break; - case NSContainsPredicateOperatorType: - query.contains(index, value); - break; - case NSEqualToPredicateOperatorType: - query.equal(index, value); - break; - case NSNotEqualToPredicateOperatorType: - query.not_equal(index, value); - break; - default: - @throw RLMPredicateException(@"Invalid operator type", - @"Operator '%@' not supported for binary type", operatorName(operatorType)); - } -} - -void add_binary_constraint_to_query(realm::Query& query, NSPredicateOperatorType operatorType, const ColumnReference& column, id value) { - add_binary_constraint_to_query(query, operatorType, column, RLMBinaryDataForNSData(value)); -} - -void add_binary_constraint_to_query(realm::Query& query, NSPredicateOperatorType operatorType, id value, const ColumnReference& column) { - switch (operatorType) { - case NSEqualToPredicateOperatorType: - case NSNotEqualToPredicateOperatorType: - add_binary_constraint_to_query(query, operatorType, column, value); - break; - default: - @throw RLMPredicateException(@"Invalid operator type", - @"Operator '%@' is not supported for binary type with key path on right side of operator", - operatorName(operatorType)); - } -} - -void add_binary_constraint_to_query(realm::Query&, NSPredicateOperatorType, const ColumnReference&, const ColumnReference&) { - @throw RLMPredicateException(@"Invalid predicate", @"Comparisons between two NSData properties are not supported"); -} - -void add_link_constraint_to_query(realm::Query & query, - NSPredicateOperatorType operatorType, - const ColumnReference& column, - RLMObject *obj) { - RLMPrecondition(operatorType == NSEqualToPredicateOperatorType || operatorType == NSNotEqualToPredicateOperatorType, - @"Invalid operator type", @"Only 'Equal' and 'Not Equal' operators supported for object comparison"); - - // NOTE: This precondition assumes that the argument `obj` will be always originating from the - // queried table as verified before by `validate_property_value` - RLMPrecondition(column.link_target_object_schema() == obj.objectSchema || !obj->_row.is_attached(), - @"Invalid value origin", @"Object must be from the Realm being queried"); - - if (operatorType == NSEqualToPredicateOperatorType) { - query.and_query(column.resolve(query) == obj->_row); - } - else { - query.and_query(column.resolve(query) != obj->_row); - } -} - -void add_link_constraint_to_query(realm::Query & query, - NSPredicateOperatorType operatorType, - const ColumnReference& column, - realm::null) { - RLMPrecondition(!column.has_links(), @"Unsupported operator", @"Multi-level object equality link queries are not supported."); - RLMPrecondition(operatorType == NSEqualToPredicateOperatorType || operatorType == NSNotEqualToPredicateOperatorType, - @"Invalid operator type", @"Only 'Equal' and 'Not Equal' operators supported for object comparison"); - if (operatorType == NSNotEqualToPredicateOperatorType) { - query.Not(); - } - - query.and_query(column.resolve(query).is_null()); -} - -template -void add_link_constraint_to_query(realm::Query& query, NSPredicateOperatorType operatorType, T obj, const ColumnReference& column) { - // Link constraints only support the equal-to and not-equal-to operators. The order of operands - // is not important for those comparisons so we can delegate to the other implementation. - add_link_constraint_to_query(query, operatorType, column, obj); -} - -void add_link_constraint_to_query(realm::Query&, NSPredicateOperatorType, const ColumnReference&, const ColumnReference&) { - // This is not actually reachable as this case is caught earlier, but this - // overload is needed for the code to compile - @throw RLMPredicateException(@"Invalid predicate", @"Comparisons between two RLMArray properties are not supported"); -} - - -// iterate over an array of subpredicates, using @func to build a query from each -// one and ORing them together -template -void process_or_group(Query &query, id array, Func&& func) { - RLMPrecondition([array conformsToProtocol:@protocol(NSFastEnumeration)], - @"Invalid value", @"IN clause requires an array of items"); - - query.group(); - - bool first = true; - for (id item in array) { - if (!first) { - query.Or(); - } - first = false; - - func(item); - } - - if (first) { - // Queries can't be empty, so if there's zero things in the OR group - // validation will fail. Work around this by adding an expression which - // will never find any rows in a table. - query.and_query(std::unique_ptr(new FalseExpression)); - } - - query.end_group(); -} - -template -RequestedType convert(id value); - -template <> -Timestamp convert(id value) { - return RLMTimestampForNSDate(value); -} - -template <> -bool convert(id value) { - return [value boolValue]; -} - -template <> -Double convert(id value) { - return [value doubleValue]; -} - -template <> -Float convert(id value) { - return [value floatValue]; -} - -template <> -Int convert(id value) { - return [value longLongValue]; -} - -template <> -String convert(id value) { - return RLMStringDataWithNSString(value); -} - -template -realm::null value_of_type_for_query(Query&, realm::null) { - return realm::null(); -} - -template -auto value_of_type_for_query(Query&, id value) { - return ::convert(value); -} - -template -auto value_of_type_for_query(Query& query, const ColumnReference& column) { - return column.resolve(query); -} - - -template -void do_add_constraint_to_query(realm::Query &query, RLMPropertyType type, - NSPredicateOperatorType operatorType, - NSComparisonPredicateOptions predicateOptions, - T... values) -{ - static_assert(sizeof...(T) == 2, "do_add_constraint_to_query accepts only two values as arguments"); - - switch (type) { - case RLMPropertyTypeBool: - add_bool_constraint_to_query(query, operatorType, value_of_type_for_query(query, values)...); - break; - case RLMPropertyTypeDate: - add_numeric_constraint_to_query(query, type, operatorType, value_of_type_for_query(query, values)...); - break; - case RLMPropertyTypeDouble: - add_numeric_constraint_to_query(query, type, operatorType, value_of_type_for_query(query, values)...); - break; - case RLMPropertyTypeFloat: - add_numeric_constraint_to_query(query, type, operatorType, value_of_type_for_query(query, values)...); - break; - case RLMPropertyTypeInt: - add_numeric_constraint_to_query(query, type, operatorType, value_of_type_for_query(query, values)...); - break; - case RLMPropertyTypeString: - add_string_constraint_to_query(query, operatorType, predicateOptions, value_of_type_for_query(query, values)...); - break; - case RLMPropertyTypeData: - add_binary_constraint_to_query(query, operatorType, values...); - break; - case RLMPropertyTypeObject: - case RLMPropertyTypeArray: - case RLMPropertyTypeLinkingObjects: - add_link_constraint_to_query(query, operatorType, values...); - break; - default: - @throw RLMPredicateException(@"Unsupported predicate value type", - @"Object type %@ not supported", RLMTypeToString(type)); - } -} - -void do_add_constraint_to_query(realm::Query&, RLMPropertyType, NSPredicateOperatorType, - NSComparisonPredicateOptions, id, realm::null) -{ - // This is not actually reachable as this case is caught earlier, but this - // overload is needed for the code to compile - @throw RLMPredicateException(@"Invalid predicate expressions", - @"Predicate expressions must compare a keypath and another keypath or a constant value"); -} - -bool is_nsnull(id value) { - return !value || value == NSNull.null; -} - -template -bool is_nsnull(T) { - return false; -} - -template -void add_constraint_to_query(realm::Query &query, RLMPropertyType type, - NSPredicateOperatorType operatorType, - NSComparisonPredicateOptions predicateOptions, - L lhs, R rhs) -{ - // The expression operators are only overloaded for realm::null on the rhs - RLMPrecondition(!is_nsnull(lhs), @"Unsupported operator", - @"Nil is only supported on the right side of operators"); - - if (is_nsnull(rhs)) { - do_add_constraint_to_query(query, type, operatorType, predicateOptions, lhs, realm::null()); - } - else { - do_add_constraint_to_query(query, type, operatorType, predicateOptions, lhs, rhs); - } -} - -ColumnReference column_reference_from_key_path(RLMSchema *schema, RLMObjectSchema *objectSchema, - NSString *keyPath, bool isAggregate) -{ - RLMProperty *property; - std::vector links; - - bool keyPathContainsToManyRelationship = false; - - NSUInteger start = 0, length = keyPath.length, end = NSNotFound; - do { - end = [keyPath rangeOfString:@"." options:0 range:{start, length - start}].location; - NSString *propertyName = [keyPath substringWithRange:{start, end == NSNotFound ? length - start : end - start}]; - property = objectSchema[propertyName]; - RLMPrecondition(property, @"Invalid property name", - @"Property '%@' not found in object of type '%@'", propertyName, objectSchema.className); - - if (property.type == RLMPropertyTypeArray || property.type == RLMPropertyTypeLinkingObjects) - keyPathContainsToManyRelationship = true; - - if (end != NSNotFound) { - RLMPrecondition(property.type == RLMPropertyTypeObject || property.type == RLMPropertyTypeArray || property.type == RLMPropertyTypeLinkingObjects, - @"Invalid value", @"Property '%@' is not a link in object of type '%@'", propertyName, objectSchema.className); - - links.push_back(property); - REALM_ASSERT(property.objectClassName); - objectSchema = schema[property.objectClassName]; - } - - start = end + 1; - } while (end != NSNotFound); - - if (isAggregate && !keyPathContainsToManyRelationship) { - @throw RLMPredicateException(@"Invalid predicate", - @"Aggregate operations can only be used on key paths that include an array property"); - } else if (!isAggregate && keyPathContainsToManyRelationship) { - @throw RLMPredicateException(@"Invalid predicate", - @"Key paths that include an array property must use aggregate operations"); - } - - return ColumnReference(schema, property, std::move(links)); -} - -void validate_property_value(const ColumnReference& column, - __unsafe_unretained id const value, - __unsafe_unretained NSString *const err, - __unsafe_unretained RLMObjectSchema *const objectSchema, - __unsafe_unretained NSString *const keyPath) { - RLMProperty *prop = column.property(); - if (prop.type == RLMPropertyTypeArray) { - RLMPrecondition([RLMObjectBaseObjectSchema(RLMDynamicCast(value)).className isEqualToString:prop.objectClassName], - @"Invalid value", err, prop.objectClassName, keyPath, objectSchema.className, value); - } - else { - RLMPrecondition(RLMIsObjectValidForProperty(value, prop), - @"Invalid value", err, RLMTypeToString(prop.type), keyPath, objectSchema.className, value); - } -} - -template -struct ValueOfTypeWithCollectionOperationHelper; - -template <> -struct ValueOfTypeWithCollectionOperationHelper { - static auto convert(Query& query, const CollectionOperation& operation) - { - assert(operation.type() == CollectionOperation::Count); - return operation.link_column().resolve(query).count(); - } -}; - -#define VALUE_OF_TYPE_WITH_COLLECTION_OPERATOR_HELPER(OperationType, function) \ -template \ -struct ValueOfTypeWithCollectionOperationHelper { \ - static auto convert(Query& query, const CollectionOperation& operation) \ - { \ - REALM_ASSERT(operation.type() == OperationType); \ - auto targetColumn = operation.link_column().resolve(query).template column(operation.column().index()); \ - return targetColumn.function(); \ - } \ -} \ - -VALUE_OF_TYPE_WITH_COLLECTION_OPERATOR_HELPER(CollectionOperation::Minimum, min); -VALUE_OF_TYPE_WITH_COLLECTION_OPERATOR_HELPER(CollectionOperation::Maximum, max); -VALUE_OF_TYPE_WITH_COLLECTION_OPERATOR_HELPER(CollectionOperation::Sum, sum); -VALUE_OF_TYPE_WITH_COLLECTION_OPERATOR_HELPER(CollectionOperation::Average, average); -#undef VALUE_OF_TYPE_WITH_COLLECTION_OPERATOR_HELPER - -template -auto value_of_type_for_query_with_collection_operation(Query& query, T&& value) { - return value_of_type_for_query(query, std::forward(value)); -} - -template -auto value_of_type_for_query_with_collection_operation(Query& query, CollectionOperation operation) { - using helper = ValueOfTypeWithCollectionOperationHelper; - return helper::convert(query, operation); -} - -template -void add_collection_operation_constraint_to_query(realm::Query& query, RLMPropertyType propertyType, NSPredicateOperatorType operatorType, T... values) -{ - switch (propertyType) { - case RLMPropertyTypeInt: - add_numeric_constraint_to_query(query, propertyType, operatorType, value_of_type_for_query_with_collection_operation(query, values)...); - break; - case RLMPropertyTypeFloat: - add_numeric_constraint_to_query(query, propertyType, operatorType, value_of_type_for_query_with_collection_operation(query, values)...); - break; - case RLMPropertyTypeDouble: - add_numeric_constraint_to_query(query, propertyType, operatorType, value_of_type_for_query_with_collection_operation(query, values)...); - break; - default: - REALM_ASSERT(false && "Only numeric property types should hit this path."); - } -} - -template -void add_collection_operation_constraint_to_query(realm::Query& query, NSPredicateOperatorType operatorType, - CollectionOperation collectionOperation, T... values) -{ - static_assert(sizeof...(T) == 2, "add_collection_operation_constraint_to_query accepts only two values as arguments"); - - switch (collectionOperation.type()) { - case CollectionOperation::Count: { - add_numeric_constraint_to_query(query, RLMPropertyTypeInt, operatorType, value_of_type_for_query_with_collection_operation(query, values)...); - break; - } - case CollectionOperation::Minimum: { - add_collection_operation_constraint_to_query(query, collectionOperation.column().type(), operatorType, values...); - break; - } - case CollectionOperation::Maximum: { - add_collection_operation_constraint_to_query(query, collectionOperation.column().type(), operatorType, values...); - break; - } - case CollectionOperation::Sum: { - add_collection_operation_constraint_to_query(query, collectionOperation.column().type(), operatorType, values...); - break; - } - case CollectionOperation::Average: { - add_collection_operation_constraint_to_query(query, collectionOperation.column().type(), operatorType, values...); - break; - } - } -} - -bool key_path_contains_collection_operator(NSString *keyPath) { - return [keyPath rangeOfString:@"@"].location != NSNotFound; -} - -NSString *get_collection_operation_name_from_key_path(NSString *keyPath, NSString **leadingKeyPath, NSString **trailingKey) { - NSRange at = [keyPath rangeOfString:@"@"]; - if (at.location == NSNotFound || at.location >= keyPath.length - 1) { - @throw RLMPredicateException(@"Invalid key path", @"'%@' is not a valid key path'", keyPath); - } - - if (at.location == 0 || [keyPath characterAtIndex:at.location - 1] != '.') { - @throw RLMPredicateException(@"Invalid key path", @"'%@' is not a valid key path'", keyPath); - } - - NSRange trailingKeyRange = [keyPath rangeOfString:@"." options:0 range:{at.location, keyPath.length - at.location} locale:nil]; - - *leadingKeyPath = [keyPath substringToIndex:at.location - 1]; - if (trailingKeyRange.location == NSNotFound) { - *trailingKey = nil; - return [keyPath substringFromIndex:at.location]; - } else { - *trailingKey = [keyPath substringFromIndex:trailingKeyRange.location + 1]; - return [keyPath substringWithRange:{at.location, trailingKeyRange.location - at.location}]; - } -} - -CollectionOperation collection_operation_from_key_path(RLMSchema *schema, - RLMObjectSchema *desc, - NSString *keyPath) { - NSString *leadingKeyPath; - NSString *trailingKey; - NSString *collectionOperationName = get_collection_operation_name_from_key_path(keyPath, &leadingKeyPath, &trailingKey); - - ColumnReference linkColumn = column_reference_from_key_path(schema, desc, leadingKeyPath, true); - util::Optional column; - if (trailingKey) { - RLMPrecondition([trailingKey rangeOfString:@"."].location == NSNotFound, @"Invalid key path", @"Right side of collection operator may only have a single level key"); - NSString *fullKeyPath = [leadingKeyPath stringByAppendingFormat:@".%@", trailingKey]; - column = column_reference_from_key_path(schema, desc, fullKeyPath, true); - } - - return { collectionOperationName, std::move(linkColumn), std::move(column) }; -} - -void update_query_with_collection_operator_expression(RLMSchema *schema, - RLMObjectSchema *desc, - realm::Query &query, - NSString *keyPath, - id value, - NSComparisonPredicate *pred) { - CollectionOperation operation = collection_operation_from_key_path(schema, desc, keyPath); - operation.validate_comparison(value); - - if (pred.leftExpression.expressionType == NSKeyPathExpressionType) { - add_collection_operation_constraint_to_query(query, pred.predicateOperatorType, operation, operation, value); - } else { - add_collection_operation_constraint_to_query(query, pred.predicateOperatorType, operation, value, operation); - } -} - -void update_query_with_value_expression(RLMSchema *schema, - RLMObjectSchema *desc, - realm::Query &query, - NSString *keyPath, - id value, - NSComparisonPredicate *pred) -{ - if (key_path_contains_collection_operator(keyPath)) { - update_query_with_collection_operator_expression(schema, desc, query, keyPath, value, pred); - return; - } - - bool isAny = pred.comparisonPredicateModifier == NSAnyPredicateModifier; - ColumnReference column = column_reference_from_key_path(schema, desc, keyPath, isAny); - - // check to see if this is a between query - if (pred.predicateOperatorType == NSBetweenPredicateOperatorType) { - add_between_constraint_to_query(query, std::move(column), value); - return; - } - - // turn "key.path IN collection" into ored together ==. "collection IN key.path" is handled elsewhere. - if (pred.predicateOperatorType == NSInPredicateOperatorType) { - process_or_group(query, value, [&](id item) { - id normalized = value_from_constant_expression_or_value(item); - validate_property_value(column, normalized, @"Expected object of type %@ in IN clause for property '%@' on object of type '%@', but received: %@", desc, keyPath); - add_constraint_to_query(query, column.type(), NSEqualToPredicateOperatorType, pred.options, column, normalized); - }); - return; - } - - validate_property_value(column, value, @"Expected object of type %@ for property '%@' on object of type '%@', but received: %@", desc, keyPath); - if (pred.leftExpression.expressionType == NSKeyPathExpressionType) { - add_constraint_to_query(query, column.type(), pred.predicateOperatorType, - pred.options, std::move(column), value); - } else { - add_constraint_to_query(query, column.type(), pred.predicateOperatorType, - pred.options, value, std::move(column)); - } -} - -void update_query_with_column_expression(RLMSchema *schema, RLMObjectSchema *desc, Query &query, - NSString *leftKeyPath, NSString *rightKeyPath, - NSComparisonPredicate *predicate) -{ - bool left_key_path_contains_collection_operator = key_path_contains_collection_operator(leftKeyPath); - bool right_key_path_contains_collection_operator = key_path_contains_collection_operator(rightKeyPath); - if (left_key_path_contains_collection_operator && right_key_path_contains_collection_operator) { - @throw RLMPredicateException(@"Unsupported predicate", @"Key paths including aggregate operations cannot be compared with other aggregate operations."); - } - - if (left_key_path_contains_collection_operator) { - CollectionOperation left = collection_operation_from_key_path(schema, desc, leftKeyPath); - ColumnReference right = column_reference_from_key_path(schema, desc, rightKeyPath, false); - left.validate_comparison(right); - add_collection_operation_constraint_to_query(query, predicate.predicateOperatorType, left, left, std::move(right)); - return; - } - if (right_key_path_contains_collection_operator) { - ColumnReference left = column_reference_from_key_path(schema, desc, leftKeyPath, false); - CollectionOperation right = collection_operation_from_key_path(schema, desc, rightKeyPath); - right.validate_comparison(left); - add_collection_operation_constraint_to_query(query, predicate.predicateOperatorType, right, std::move(left), right); - return; - } - - bool isAny = false; - ColumnReference left = column_reference_from_key_path(schema, desc, leftKeyPath, isAny); - ColumnReference right = column_reference_from_key_path(schema, desc, rightKeyPath, isAny); - - // NOTE: It's assumed that column type must match and no automatic type conversion is supported. - RLMPrecondition(left.type() == right.type(), - RLMPropertiesComparisonTypeMismatchException, - RLMPropertiesComparisonTypeMismatchReason, - RLMTypeToString(left.type()), - RLMTypeToString(right.type())); - - // TODO: Should we handle special case where left row is the same as right row (tautology) - add_constraint_to_query(query, left.type(), predicate.predicateOperatorType, predicate.options, - std::move(left), std::move(right)); -} - -// Identify expressions of the form [SELF valueForKeyPath:] -bool is_self_value_for_key_path_function_expression(NSExpression *expression) -{ - if (expression.expressionType != NSFunctionExpressionType) - return false; - - if (expression.operand.expressionType != NSEvaluatedObjectExpressionType) - return false; - - return [expression.function isEqualToString:@"valueForKeyPath:"]; -} - -// -[NSPredicate predicateWithSubtitutionVariables:] results in function expressions of the form [SELF valueForKeyPath:] -// that update_query_with_predicate cannot handle. Replace such expressions with equivalent NSKeyPathExpressionType expressions. -NSExpression *simplify_self_value_for_key_path_function_expression(NSExpression *expression) { - if (is_self_value_for_key_path_function_expression(expression)) { - if (NSString *keyPath = [expression.arguments.firstObject keyPath]) { - return [NSExpression expressionForKeyPath:keyPath]; - } - } - return expression; -} - -void update_query_with_subquery_count_expression(RLMSchema *schema, RLMObjectSchema *objectSchema, realm::Query& query, - NSExpression *subqueryExpression, NSPredicateOperatorType operatorType, NSExpression *right) { - if (right.expressionType != NSConstantValueExpressionType || ![right.constantValue isKindOfClass:[NSNumber class]]) { - @throw RLMPredicateException(@"Invalid predicate expression", @"SUBQUERY(…).@count is only supported when compared with a constant number."); - } - int64_t value = [right.constantValue integerValue]; - - ColumnReference collectionColumn = column_reference_from_key_path(schema, objectSchema, [subqueryExpression.collection keyPath], true); - RLMObjectSchema *collectionMemberObjectSchema = schema[collectionColumn.property().objectClassName]; - - // Eliminate references to the iteration variable in the subquery. - NSPredicate *subqueryPredicate = [subqueryExpression.predicate predicateWithSubstitutionVariables:@{ subqueryExpression.variable : [NSExpression expressionForEvaluatedObject] }]; - subqueryPredicate = transformPredicate(subqueryPredicate, simplify_self_value_for_key_path_function_expression); - - Query subquery = collectionMemberObjectSchema.table->where(); - RLMUpdateQueryWithPredicate(&subquery, subqueryPredicate, schema, collectionMemberObjectSchema); - - add_numeric_constraint_to_query(query, RLMPropertyTypeInt, operatorType, collectionColumn.resolve_with_subquery(query, std::move(subquery)).count(), value); -} - -void update_query_with_function_subquery_expression(RLMSchema *schema, RLMObjectSchema *objectSchema, realm::Query& query, - NSExpression *functionExpression, NSPredicateOperatorType operatorType, NSExpression *right) { - if (![functionExpression.function isEqualToString:@"valueForKeyPath:"] || functionExpression.arguments.count != 1) { - @throw RLMPredicateException(@"Invalid predicate", @"The '%@' function is not supported on the result of a SUBQUERY.", functionExpression.function); - } - - NSExpression *keyPathExpression = functionExpression.arguments.firstObject; - if ([keyPathExpression.keyPath isEqualToString:@"@count"]) { - update_query_with_subquery_count_expression(schema, objectSchema, query, functionExpression.operand, operatorType, right); - } else { - @throw RLMPredicateException(@"Invalid predicate", @"SUBQUERY is only supported when immediately followed by .@count that is compared with a constant number."); - } -} - -void update_query_with_function_expression(RLMSchema *schema, RLMObjectSchema *objectSchema, realm::Query& query, - NSExpression *functionExpression, NSPredicateOperatorType operatorType, NSExpression *right) { - if (functionExpression.operand.expressionType == NSSubqueryExpressionType) { - update_query_with_function_subquery_expression(schema, objectSchema, query, functionExpression, operatorType, right); - } else { - @throw RLMPredicateException(@"Invalid predicate", @"The '%@' function is not supported.", functionExpression.function); - } -} - - -void update_query_with_predicate(NSPredicate *predicate, RLMSchema *schema, - RLMObjectSchema *objectSchema, realm::Query &query) -{ - // Compound predicates. - if ([predicate isMemberOfClass:[NSCompoundPredicate class]]) { - NSCompoundPredicate *comp = (NSCompoundPredicate *)predicate; - - switch ([comp compoundPredicateType]) { - case NSAndPredicateType: - if (comp.subpredicates.count) { - // Add all of the subpredicates. - query.group(); - for (NSPredicate *subp in comp.subpredicates) { - update_query_with_predicate(subp, schema, objectSchema, query); - } - query.end_group(); - } else { - // NSCompoundPredicate's documentation states that an AND predicate with no subpredicates evaluates to TRUE. - query.and_query(std::unique_ptr(new TrueExpression)); - } - break; - - case NSOrPredicateType: { - // Add all of the subpredicates with ors inbetween. - process_or_group(query, comp.subpredicates, [&](__unsafe_unretained NSPredicate *const subp) { - update_query_with_predicate(subp, schema, objectSchema, query); - }); - break; - } - - case NSNotPredicateType: - // Add the negated subpredicate - query.Not(); - update_query_with_predicate(comp.subpredicates.firstObject, schema, objectSchema, query); - break; - - default: - @throw RLMPredicateException(@"Invalid compound predicate type", - @"Only support AND, OR and NOT predicate types"); - } - } - else if ([predicate isMemberOfClass:[NSComparisonPredicate class]]) { - NSComparisonPredicate *compp = (NSComparisonPredicate *)predicate; - - // check modifier - RLMPrecondition(compp.comparisonPredicateModifier != NSAllPredicateModifier, - @"Invalid predicate", @"ALL modifier not supported"); - - NSExpressionType exp1Type = compp.leftExpression.expressionType; - NSExpressionType exp2Type = compp.rightExpression.expressionType; - - if (compp.comparisonPredicateModifier == NSAnyPredicateModifier) { - // for ANY queries - RLMPrecondition(exp1Type == NSKeyPathExpressionType && exp2Type == NSConstantValueExpressionType, - @"Invalid predicate", - @"Predicate with ANY modifier must compare a KeyPath with RLMArray with a value"); - } - - if (compp.predicateOperatorType == NSBetweenPredicateOperatorType || compp.predicateOperatorType == NSInPredicateOperatorType) { - // Inserting an array via %@ gives NSConstantValueExpressionType, but including it directly gives NSAggregateExpressionType - if (exp1Type == NSKeyPathExpressionType && (exp2Type == NSAggregateExpressionType || exp2Type == NSConstantValueExpressionType)) { - // "key.path IN %@", "key.path IN {…}", "key.path BETWEEN %@", or "key.path BETWEEN {…}". - exp2Type = NSConstantValueExpressionType; - } - else if (compp.predicateOperatorType == NSInPredicateOperatorType && exp1Type == NSConstantValueExpressionType && exp2Type == NSKeyPathExpressionType) { - // "%@ IN key.path" is equivalent to "ANY key.path IN %@". Rewrite the former into the latter. - compp = [NSComparisonPredicate predicateWithLeftExpression:compp.rightExpression rightExpression:compp.leftExpression - modifier:NSAnyPredicateModifier type:NSEqualToPredicateOperatorType options:0]; - exp1Type = NSKeyPathExpressionType; - exp2Type = NSConstantValueExpressionType; - } - else { - if (compp.predicateOperatorType == NSBetweenPredicateOperatorType) { - @throw RLMPredicateException(@"Invalid predicate", - @"Predicate with BETWEEN operator must compare a KeyPath with an aggregate with two values"); - } - else if (compp.predicateOperatorType == NSInPredicateOperatorType) { - @throw RLMPredicateException(@"Invalid predicate", - @"Predicate with IN operator must compare a KeyPath with an aggregate"); - } - } - } - - if (exp1Type == NSKeyPathExpressionType && exp2Type == NSKeyPathExpressionType) { - // both expression are KeyPaths - update_query_with_column_expression(schema, objectSchema, query, compp.leftExpression.keyPath, - compp.rightExpression.keyPath, compp); - } - else if (exp1Type == NSKeyPathExpressionType && exp2Type == NSConstantValueExpressionType) { - // comparing keypath to value - update_query_with_value_expression(schema, objectSchema, query, compp.leftExpression.keyPath, - compp.rightExpression.constantValue, compp); - } - else if (exp1Type == NSConstantValueExpressionType && exp2Type == NSKeyPathExpressionType) { - // comparing value to keypath - update_query_with_value_expression(schema, objectSchema, query, compp.rightExpression.keyPath, - compp.leftExpression.constantValue, compp); - } - else if (exp1Type == NSFunctionExpressionType) { - update_query_with_function_expression(schema, objectSchema, query, compp.leftExpression, compp.predicateOperatorType, compp.rightExpression); - } - else if (exp1Type == NSSubqueryExpressionType) { - // The subquery expressions that we support are handled by the NSFunctionExpressionType case above. - @throw RLMPredicateException(@"Invalid predicate expression", @"SUBQUERY is only supported when immediately followed by .@count."); - } - else { - @throw RLMPredicateException(@"Invalid predicate expressions", - @"Predicate expressions must compare a keypath and another keypath or a constant value"); - } - } - else if ([predicate isEqual:[NSPredicate predicateWithValue:YES]]) { - query.and_query(std::unique_ptr(new TrueExpression)); - } else if ([predicate isEqual:[NSPredicate predicateWithValue:NO]]) { - query.and_query(std::unique_ptr(new FalseExpression)); - } - else { - // invalid predicate type - @throw RLMPredicateException(@"Invalid predicate", - @"Only support compound, comparison, and constant predicates"); - } -} - -RLMProperty *RLMValidatedPropertyForSort(RLMObjectSchema *schema, NSString *propName) { - // validate - RLMPrecondition([propName rangeOfString:@"."].location == NSNotFound, @"Invalid sort property", @"Cannot sort on '%@': sorting on key paths is not supported.", propName); - RLMProperty *prop = schema[propName]; - RLMPrecondition(prop, @"Invalid sort property", @"Cannot sort on property '%@' on object of type '%@': property not found.", propName, schema.className); - - switch (prop.type) { - case RLMPropertyTypeBool: - case RLMPropertyTypeDate: - case RLMPropertyTypeDouble: - case RLMPropertyTypeFloat: - case RLMPropertyTypeInt: - case RLMPropertyTypeString: - break; - - default: - @throw RLMPredicateException(@"Invalid sort property type", - @"Cannot sort on property '%@' on object of type '%@': sorting is only supported on bool, date, double, float, integer, and string properties, but property is of type %@.", propName, schema.className, RLMTypeToString(prop.type)); - } - return prop; -} - -} // namespace - -void RLMUpdateQueryWithPredicate(realm::Query *query, NSPredicate *predicate, RLMSchema *schema, - RLMObjectSchema *objectSchema) -{ - // passing a nil predicate is a no-op - if (!predicate) { - return; - } - - RLMPrecondition([predicate isKindOfClass:NSPredicate.class], @"Invalid argument", - @"predicate must be an NSPredicate object"); - - update_query_with_predicate(predicate, schema, objectSchema, *query); - - // Test the constructed query in core - std::string validateMessage = query->validate(); - RLMPrecondition(validateMessage.empty(), @"Invalid query", @"%.*s", - (int)validateMessage.size(), validateMessage.c_str()); -} - -realm::SortOrder RLMSortOrderFromDescriptors(RLMObjectSchema *objectSchema, NSArray *descriptors) { - realm::SortOrder sort; - sort.column_indices.reserve(descriptors.count); - sort.ascending.reserve(descriptors.count); - - for (RLMSortDescriptor *descriptor in descriptors) { - sort.column_indices.push_back(RLMValidatedPropertyForSort(objectSchema, descriptor.property).column); - sort.ascending.push_back(descriptor.ascending); - } - - return sort; -} diff --git a/Pods/Realm/Realm/RLMRealm.mm b/Pods/Realm/Realm/RLMRealm.mm deleted file mode 100644 index b626aae6..00000000 --- a/Pods/Realm/Realm/RLMRealm.mm +++ /dev/null @@ -1,751 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMRealm_Private.hpp" - -#import "RLMAnalytics.hpp" -#import "RLMArray_Private.hpp" -#import "RLMRealmConfiguration_Private.hpp" -#import "RLMMigration_Private.h" -#import "RLMObjectSchema_Private.hpp" -#import "RLMProperty_Private.h" -#import "RLMObjectStore.h" -#import "RLMObject_Private.h" -#import "RLMObject_Private.hpp" -#import "RLMObservation.hpp" -#import "RLMProperty.h" -#import "RLMQueryUtil.hpp" -#import "RLMRealmUtil.hpp" -#import "RLMSchema_Private.hpp" -#import "RLMUpdateChecker.hpp" -#import "RLMUtil.hpp" - -#include "impl/realm_coordinator.hpp" -#include "object_store.hpp" -#include "schema.hpp" -#include "shared_realm.hpp" - -#include -#include -#include - -using namespace realm; -using util::File; - -@interface RLMRealm () -@property (nonatomic, strong) NSHashTable *notificationHandlers; -- (void)sendNotifications:(NSString *)notification; -@end - -void RLMDisableSyncToDisk() { - realm::disable_sync_to_disk(); -} - -// Notification Token -@interface RLMRealmNotificationToken : RLMNotificationToken -@property (nonatomic, strong) RLMRealm *realm; -@property (nonatomic, copy) RLMNotificationBlock block; -@end - -@implementation RLMRealmNotificationToken -- (void)stop { - [_realm verifyThread]; - [_realm.notificationHandlers removeObject:self]; - _realm = nil; - _block = nil; -} - -- (void)dealloc { - if (_realm || _block) { - NSLog(@"RLMNotificationToken released without unregistering a notification. You must hold " - @"on to the RLMNotificationToken returned from addNotificationBlock and call " - @"-[RLMNotificationToken stop] when you no longer wish to recieve RLMRealm notifications."); - } -} -@end - -static bool shouldForciblyDisableEncryption() { - static bool disableEncryption = getenv("REALM_DISABLE_ENCRYPTION"); - return disableEncryption; -} - -NSData *RLMRealmValidatedEncryptionKey(NSData *key) { - if (shouldForciblyDisableEncryption()) { - return nil; - } - - if (key) { - if (key.length != 64) { - @throw RLMException(@"Encryption key must be exactly 64 bytes long"); - } -#if TARGET_OS_WATCH - @throw RLMException(@"Cannot open an encrypted Realm on watchOS."); -#endif - } - - return key; -} - -@implementation RLMRealm { - NSHashTable *_collectionEnumerators; -} - -+ (BOOL)isCoreDebug { - return realm::Version::has_feature(realm::feature_Debug); -} - -+ (void)initialize { - static bool initialized; - if (initialized) { - return; - } - initialized = true; - - RLMCheckForUpdates(); - RLMInstallUncaughtExceptionHandler(); - RLMSendAnalytics(); -} - -- (BOOL)isEmpty { - return realm::ObjectStore::is_empty(self.group); -} - -- (void)verifyThread { - _realm->verify_thread(); -} - -- (BOOL)inWriteTransaction { - return _realm->is_in_transaction(); -} - -- (realm::Group *)group { - return _realm->read_group(); -} - -- (BOOL)autorefresh { - return _realm->auto_refresh(); -} - -- (void)setAutorefresh:(BOOL)autorefresh { - _realm->set_auto_refresh(autorefresh); -} - -+ (NSString *)writeableTemporaryPathForFile:(NSString *)fileName { - return [NSTemporaryDirectory() stringByAppendingPathComponent:fileName]; -} - -+ (instancetype)defaultRealm { - return [RLMRealm realmWithConfiguration:[RLMRealmConfiguration rawDefaultConfiguration] error:nil]; -} - -+ (instancetype)realmWithURL:(NSURL *)fileURL { - RLMRealmConfiguration *configuration = [RLMRealmConfiguration defaultConfiguration]; - configuration.fileURL = fileURL; - return [RLMRealm realmWithConfiguration:configuration error:nil]; -} -// ARC tries to eliminate calls to autorelease when the value is then immediately -// returned, but this results in significantly different semantics between debug -// and release builds for RLMRealm, so force it to always autorelease. -static id RLMAutorelease(id value) { - // +1 __bridge_retained, -1 CFAutorelease - return value ? (__bridge id)CFAutorelease((__bridge_retained CFTypeRef)value) : nil; -} - -static void RLMCopyColumnMapping(RLMObjectSchema *targetSchema, const ObjectSchema &tableSchema) { - REALM_ASSERT_DEBUG(targetSchema.properties.count == tableSchema.persisted_properties.size()); - - // copy updated column mapping - for (auto const& prop : tableSchema.persisted_properties) { - RLMProperty *targetProp = targetSchema[@(prop.name.c_str())]; - targetProp.column = prop.table_column; - } - - // re-order properties - [targetSchema sortPropertiesByColumn]; -} - -static void RLMRealmSetSchemaAndAlign(RLMRealm *realm, RLMSchema *targetSchema) { - realm.schema = targetSchema; - for (auto const& aligned : *realm->_realm->config().schema) { - if (RLMObjectSchema *objectSchema = [targetSchema schemaForClassName:@(aligned.name.c_str())]) { - objectSchema.realm = realm; - RLMCopyColumnMapping(objectSchema, aligned); - } - } -} - -+ (instancetype)realmWithSharedRealm:(SharedRealm)sharedRealm schema:(RLMSchema *)schema { - RLMRealm *realm = [RLMRealm new]; - realm->_realm = sharedRealm; - realm->_dynamic = YES; - RLMRealmSetSchemaAndAlign(realm, schema); - return RLMAutorelease(realm); -} - -REALM_NOINLINE void RLMRealmTranslateException(NSError **error) { - try { - throw; - } - catch (RealmFileException const& ex) { - switch (ex.kind()) { - case RealmFileException::Kind::PermissionDenied: - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFilePermissionDenied, ex), error); - break; - case RealmFileException::Kind::IncompatibleLockFile: { - NSString *err = @"Realm file is currently open in another process " - "which cannot share access with this process. All " - "processes sharing a single file must be the same " - "architecture. For sharing files between the Realm " - "Browser and an iOS simulator, this means that you " - "must use a 64-bit simulator."; - RLMSetErrorOrThrow(RLMMakeError(RLMErrorIncompatibleLockFile, - File::PermissionDenied(err.UTF8String, ex.path())), error); - break; - } - case RealmFileException::Kind::NotFound: - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFileNotFound, ex), error); - break; - case RealmFileException::Kind::Exists: - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFileExists, ex), error); - break; - case RealmFileException::Kind::AccessError: - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFileAccess, ex), error); - break; - case RealmFileException::Kind::FormatUpgradeRequired: - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFileFormatUpgradeRequired, ex), error); - break; - default: - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFail, ex), error); - break; - } - } - catch (AddressSpaceExhausted const &ex) { - RLMSetErrorOrThrow(RLMMakeError(RLMErrorAddressSpaceExhausted, ex), error); - } - catch (SchemaMismatchException const& ex) { - RLMSetErrorOrThrow(RLMMakeError(RLMErrorSchemaMismatch, ex), error); - } - catch (std::system_error const& ex) { - RLMSetErrorOrThrow(RLMMakeError(ex), error); - } - catch (const std::exception &exp) { - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFail, exp), error); - } -} - -+ (SharedRealm)openSharedRealm:(Realm::Config const&)config error:(NSError **)outError { - try { - return Realm::get_shared_realm(config); - } - catch (...) { - if (config.delete_realm_if_migration_needed) { - throw; - } else { - RLMRealmTranslateException(outError); - } - } - return nullptr; -} - -+ (instancetype)realmWithConfiguration:(RLMRealmConfiguration *)configuration error:(NSError **)error { - bool dynamic = configuration.dynamic; - bool readOnly = configuration.readOnly; - - { - Realm::Config& config = configuration.config; - - // try to reuse existing realm first - if (config.cache || dynamic) { - if (RLMRealm *realm = RLMGetThreadLocalCachedRealmForPath(config.path)) { - auto const& old_config = realm->_realm->config(); - if (old_config.read_only != config.read_only) { - @throw RLMException(@"Realm at path '%s' already opened with different read permissions", config.path.c_str()); - } - if (old_config.in_memory != config.in_memory) { - @throw RLMException(@"Realm at path '%s' already opened with different inMemory settings", config.path.c_str()); - } - if (realm->_dynamic != dynamic) { - @throw RLMException(@"Realm at path '%s' already opened with different dynamic settings", config.path.c_str()); - } - if (old_config.encryption_key != config.encryption_key) { - @throw RLMException(@"Realm at path '%s' already opened with different encryption key", config.path.c_str()); - } - return RLMAutorelease(realm); - } - } - } - - configuration = [configuration copy]; - Realm::Config& config = configuration.config; - - RLMRealm *realm = [RLMRealm new]; - realm->_dynamic = dynamic; - - auto migrationBlock = configuration.migrationBlock; - if (migrationBlock && config.schema_version > 0) { - auto customSchema = configuration.customSchema; - config.migration_function = [=](SharedRealm old_realm, SharedRealm realm) { - RLMSchema *oldSchema = [RLMSchema dynamicSchemaFromObjectStoreSchema:*old_realm->config().schema]; - RLMRealm *oldRealm = [RLMRealm realmWithSharedRealm:old_realm schema:oldSchema]; - - // The destination RLMRealm can't just use the schema from the - // SharedRealm because it doesn't have information about whether or - // not a class was defined in Swift, which effects how new objects - // are created - RLMSchema *newSchema = [customSchema ?: RLMSchema.sharedSchema copy]; - RLMRealm *newRealm = [RLMRealm realmWithSharedRealm:realm schema:newSchema]; - - [[[RLMMigration alloc] initWithRealm:newRealm oldRealm:oldRealm] execute:migrationBlock]; - - oldRealm->_realm = nullptr; - newRealm->_realm = nullptr; - }; - } - else { - config.migration_function = [](SharedRealm, SharedRealm) { }; - } - - bool beganReadTransaction = false; - - // protects the realm cache and accessors cache - static id initLock = [NSObject new]; - @synchronized(initLock) { - try { - realm->_realm = [self openSharedRealm:config error:error]; - } - catch (SchemaMismatchException const& ex) { - if (configuration.deleteRealmIfMigrationNeeded) { - BOOL success = [[NSFileManager defaultManager] removeItemAtURL:configuration.fileURL error:nil]; - if (success) { - realm->_realm = [self openSharedRealm:config error:error]; - } else { - RLMSetErrorOrThrow(RLMMakeError(RLMErrorSchemaMismatch, ex), error); - return nil; - } - } else { - RLMSetErrorOrThrow(RLMMakeError(RLMErrorSchemaMismatch, ex), error); - return nil; - } - } - if (!realm->_realm) { - return nil; - } - - // if we have a cached realm on another thread, copy without a transaction - if (RLMRealm *cachedRealm = RLMGetAnyCachedRealmForPath(config.path)) { - realm.schema = [cachedRealm.schema shallowCopy]; - for (RLMObjectSchema *objectSchema in realm.schema.objectSchema) { - objectSchema.realm = realm; - } - } - else { - beganReadTransaction = !realm->_realm->is_in_read_transaction(); - - try { - // set/align schema or perform migration if needed - RLMSchema *schema = [configuration.customSchema copy]; - if (!schema) { - if (dynamic) { - schema = [RLMSchema dynamicSchemaFromObjectStoreSchema:*realm->_realm->config().schema]; - } - else { - schema = [RLMSchema.sharedSchema copy]; - realm->_realm->update_schema(schema.objectStoreCopy, config.schema_version); - } - } - - RLMRealmSetSchemaAndAlign(realm, schema); - } catch (SchemaMismatchException const& ex) { - if (configuration.deleteRealmIfMigrationNeeded) { - BOOL success = [[NSFileManager defaultManager] removeItemAtURL:configuration.fileURL error:nil]; - if (success) { - realm->_realm->close(); - realm = nil; - return [self realmWithConfiguration:configuration error:error]; - } - } - - RLMSetErrorOrThrow(RLMMakeError(RLMErrorSchemaMismatch, ex), error); - return nil; - } catch (std::exception const& exception) { - RLMSetErrorOrThrow(RLMMakeError(RLMException(exception)), error); - return nil; - } - - if (!dynamic || configuration.customSchema) { - RLMRealmCreateAccessors(realm.schema); - } - } - - if (config.cache) { - RLMCacheRealm(config.path, realm); - } - } - - if (!readOnly) { - // initializing the schema started a read transaction, so end it - if (beganReadTransaction) { - [realm invalidate]; - } - realm->_realm->m_binding_context = RLMCreateBindingContext(realm); - } - - return RLMAutorelease(realm); -} - -+ (void)resetRealmState { - RLMClearRealmCache(); - realm::_impl::RealmCoordinator::clear_cache(); - [RLMRealmConfiguration resetRealmConfigurationState]; -} - -- (void)verifyNotificationsAreSupported { - [self verifyThread]; - if (_realm->config().read_only) { - @throw RLMException(@"Read-only Realms do not change and do not have change notifications"); - } - if (!_realm->can_deliver_notifications()) { - @throw RLMException(@"Can only add notification blocks from within runloops."); - } -} - -- (RLMNotificationToken *)addNotificationBlock:(RLMNotificationBlock)block { - if (!block) { - @throw RLMException(@"The notification block should not be nil"); - } - [self verifyNotificationsAreSupported]; - - _realm->read_group(); - - if (!_notificationHandlers) { - _notificationHandlers = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]; - } - - RLMRealmNotificationToken *token = [[RLMRealmNotificationToken alloc] init]; - token.realm = self; - token.block = block; - [_notificationHandlers addObject:token]; - return token; -} - -- (void)sendNotifications:(NSString *)notification { - NSAssert(!_realm->config().read_only, @"Read-only realms do not have notifications"); - - NSUInteger count = _notificationHandlers.count; - if (count == 0) { - return; - } - // call this realms notification blocks - if (count == 1) { - if (auto block = [_notificationHandlers.anyObject block]) { - block(notification, self); - } - } - else { - for (RLMRealmNotificationToken *token in _notificationHandlers.allObjects) { - if (auto block = token.block) { - block(notification, self); - } - } - } -} - -- (RLMRealmConfiguration *)configuration { - RLMRealmConfiguration *configuration = [[RLMRealmConfiguration alloc] init]; - configuration.config = _realm->config(); - configuration.dynamic = _dynamic; - configuration.customSchema = _schema; - return configuration; -} - -- (void)beginWriteTransaction { - try { - _realm->begin_transaction(); - } - catch (std::exception &ex) { - @throw RLMException(ex); - } -} - -- (void)commitWriteTransaction { - [self commitWriteTransaction:nil]; -} - -- (BOOL)commitWriteTransaction:(NSError **)outError { - try { - _realm->commit_transaction(); - return YES; - } - catch (...) { - RLMRealmTranslateException(outError); - return NO; - } -} - -- (void)transactionWithBlock:(void(^)(void))block { - [self transactionWithBlock:block error:nil]; -} - -- (BOOL)transactionWithBlock:(void(^)(void))block error:(NSError **)outError { - [self beginWriteTransaction]; - block(); - if (_realm->is_in_transaction()) { - return [self commitWriteTransaction:outError]; - } - return YES; -} - -- (void)cancelWriteTransaction { - try { - _realm->cancel_transaction(); - } - catch (std::exception &ex) { - @throw RLMException(ex); - } -} - -- (void)invalidate { - if (_realm->is_in_transaction()) { - NSLog(@"WARNING: An RLMRealm instance was invalidated during a write " - "transaction and all pending changes have been rolled back."); - } - - [self detachAllEnumerators]; - - for (RLMObjectSchema *objectSchema in _schema.objectSchema) { - for (RLMObservationInfo *info : objectSchema->_observedObjects) { - info->willChange(RLMInvalidatedKey); - } - } - - _realm->invalidate(); - - for (RLMObjectSchema *objectSchema in _schema.objectSchema) { - for (RLMObservationInfo *info : objectSchema->_observedObjects) { - info->didChange(RLMInvalidatedKey); - } - objectSchema.table = nullptr; - } -} - -/** - Replaces all string columns in this Realm with a string enumeration column and compacts the - database file. - - Cannot be called from a write transaction. - - Compaction will not occur if other `RLMRealm` instances exist. - - While compaction is in progress, attempts by other threads or processes to open the database will - wait. - - Be warned that resource requirements for compaction is proportional to the amount of live data in - the database. - - Compaction works by writing the database contents to a temporary database file and then replacing - the database with the temporary one. The name of the temporary file is formed by appending - `.tmp_compaction_space` to the name of the database. - - @return YES if the compaction succeeded. - */ -- (BOOL)compact { - // compact() automatically ends the read transaction, but we need to clean - // up cached state and send invalidated notifications when that happens, so - // explicitly end it first unless we're in a write transaction (in which - // case compact() will throw an exception) - if (!_realm->is_in_transaction()) { - [self invalidate]; - } - - try { - return _realm->compact(); - } - catch (std::exception const& ex) { - @throw RLMException(ex); - } -} - -- (void)dealloc { - if (_realm) { - if (_realm->is_in_transaction()) { - [self cancelWriteTransaction]; - NSLog(@"WARNING: An RLMRealm instance was deallocated during a write transaction and all " - "pending changes have been rolled back. Make sure to retain a reference to the " - "RLMRealm for the duration of the write transaction."); - } - } -} - -- (BOOL)refresh { - return _realm->refresh(); -} - -- (void)addObject:(__unsafe_unretained RLMObject *const)object { - RLMAddObjectToRealm(object, self, false); -} - -- (void)addObjects:(id)array { - for (RLMObject *obj in array) { - if (![obj isKindOfClass:[RLMObject class]]) { - @throw RLMException(@"Cannot insert objects of type %@ with addObjects:. Only RLMObjects are supported.", - NSStringFromClass(obj.class)); - } - [self addObject:obj]; - } -} - -- (void)addOrUpdateObject:(RLMObject *)object { - // verify primary key - if (!object.objectSchema.primaryKeyProperty) { - @throw RLMException(@"'%@' does not have a primary key and can not be updated", object.objectSchema.className); - } - - RLMAddObjectToRealm(object, self, true); -} - -- (void)addOrUpdateObjectsFromArray:(id)array { - for (RLMObject *obj in array) { - [self addOrUpdateObject:obj]; - } -} - -- (void)deleteObject:(RLMObject *)object { - RLMDeleteObjectFromRealm(object, self); -} - -- (void)deleteObjects:(id)array { - if ([array respondsToSelector:@selector(realm)] && [array respondsToSelector:@selector(deleteObjectsFromRealm)]) { - if (self != (RLMRealm *)[array realm]) { - @throw RLMException(@"Can only delete objects from the Realm they belong to."); - } - [array deleteObjectsFromRealm]; - } - else if ([array conformsToProtocol:@protocol(NSFastEnumeration)]) { - for (id obj in array) { - if ([obj isKindOfClass:RLMObjectBase.class]) { - RLMDeleteObjectFromRealm(obj, self); - } - } - } - else { - @throw RLMException(@"Invalid array type - container must be an RLMArray, RLMArray, or NSArray of RLMObjects"); - } -} - -- (void)deleteAllObjects { - RLMDeleteAllObjectsFromRealm(self); -} - -- (RLMResults *)allObjects:(NSString *)objectClassName { - return RLMGetObjects(self, objectClassName, nil); -} - -- (RLMResults *)objects:(NSString *)objectClassName where:(NSString *)predicateFormat, ... { - va_list args; - va_start(args, predicateFormat); - RLMResults *results = [self objects:objectClassName where:predicateFormat args:args]; - va_end(args); - return results; -} - -- (RLMResults *)objects:(NSString *)objectClassName where:(NSString *)predicateFormat args:(va_list)args { - return [self objects:objectClassName withPredicate:[NSPredicate predicateWithFormat:predicateFormat arguments:args]]; -} - -- (RLMResults *)objects:(NSString *)objectClassName withPredicate:(NSPredicate *)predicate { - return RLMGetObjects(self, objectClassName, predicate); -} - -- (RLMObject *)objectWithClassName:(NSString *)className forPrimaryKey:(id)primaryKey { - return RLMGetObject(self, className, primaryKey); -} - -+ (uint64_t)schemaVersionAtURL:(NSURL *)fileURL encryptionKey:(NSData *)key error:(NSError **)error { - try { - RLMRealmConfiguration *config = [[RLMRealmConfiguration alloc] init]; - config.fileURL = fileURL; - config.encryptionKey = RLMRealmValidatedEncryptionKey(key); - - uint64_t version = Realm::get_schema_version(config.config); - if (version == realm::ObjectStore::NotVersioned) { - RLMSetErrorOrThrow([NSError errorWithDomain:RLMErrorDomain code:RLMErrorFail userInfo:@{NSLocalizedDescriptionKey:@"Cannot open an uninitialized realm in read-only mode"}], error); - } - return version; - } - catch (std::exception &exp) { - RLMSetErrorOrThrow(RLMMakeError(RLMErrorFail, exp), error); - return RLMNotVersioned; - } -} - -+ (NSError *)migrateRealm:(RLMRealmConfiguration *)configuration { - if (RLMGetAnyCachedRealmForPath(configuration.config.path)) { - @throw RLMException(@"Cannot migrate Realms that are already open."); - } - - @autoreleasepool { - NSError *error; - [RLMRealm realmWithConfiguration:configuration error:&error]; - return error; - } -} - -- (RLMObject *)createObject:(NSString *)className withValue:(id)value { - return (RLMObject *)RLMCreateObjectInRealmWithValue(self, className, value, false); -} - -- (BOOL)writeCopyToURL:(NSURL *)fileURL encryptionKey:(NSData *)key error:(NSError **)error { - key = RLMRealmValidatedEncryptionKey(key); - NSString *path = fileURL.path; - - try { - _realm->write_copy(path.UTF8String, {static_cast(key.bytes), key.length}); - return YES; - } - catch (...) { - __autoreleasing NSError *dummyError; - if (!error) { - error = &dummyError; - } - RLMRealmTranslateException(error); - return NO; - } - - return NO; -} - -- (void)registerEnumerator:(RLMFastEnumerator *)enumerator { - if (!_collectionEnumerators) { - _collectionEnumerators = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]; - } - [_collectionEnumerators addObject:enumerator]; - -} - -- (void)unregisterEnumerator:(RLMFastEnumerator *)enumerator { - [_collectionEnumerators removeObject:enumerator]; -} - -- (void)detachAllEnumerators { - for (RLMFastEnumerator *enumerator in _collectionEnumerators) { - [enumerator detach]; - } - _collectionEnumerators = nil; -} - -@end diff --git a/Pods/Realm/Realm/RLMRealmConfiguration.mm b/Pods/Realm/Realm/RLMRealmConfiguration.mm deleted file mode 100644 index 59903e3c..00000000 --- a/Pods/Realm/Realm/RLMRealmConfiguration.mm +++ /dev/null @@ -1,278 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMRealmConfiguration_Private.h" - -#import "RLMObjectSchema_Private.hpp" -#import "RLMRealm_Private.h" -#import "RLMSchema_Private.hpp" -#import "RLMUtil.hpp" - -#import "schema.hpp" -#import "shared_realm.hpp" - -static NSString *const c_RLMRealmConfigurationProperties[] = { - @"fileURL", - @"inMemoryIdentifier", - @"encryptionKey", - @"readOnly", - @"schemaVersion", - @"migrationBlock", - @"deleteRealmIfMigrationNeeded", - @"dynamic", - @"customSchema", -}; - -static NSString *const c_defaultRealmFileName = @"default.realm"; -RLMRealmConfiguration *s_defaultConfiguration; - -static NSString *defaultDirectoryForBundleIdentifier(NSString *bundleIdentifier) { -#if TARGET_OS_TV - (void)bundleIdentifier; - // tvOS prohibits writing to the Documents directory, so we use the Library/Caches directory instead. - return NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; -#elif TARGET_OS_IPHONE - (void)bundleIdentifier; - // On iOS the Documents directory isn't user-visible, so put files there - return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; -#else - // On OS X it is, so put files in Application Support. If we aren't running - // in a sandbox, put it in a subdirectory based on the bundle identifier - // to avoid accidentally sharing files between applications - NSString *path = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES)[0]; - if (![[NSProcessInfo processInfo] environment][@"APP_SANDBOX_CONTAINER_ID"]) { - if (!bundleIdentifier) { - bundleIdentifier = [NSBundle mainBundle].bundleIdentifier; - } - if (!bundleIdentifier) { - bundleIdentifier = [NSBundle mainBundle].executablePath.lastPathComponent; - } - - path = [path stringByAppendingPathComponent:bundleIdentifier]; - - // create directory - [[NSFileManager defaultManager] createDirectoryAtPath:path - withIntermediateDirectories:YES - attributes:nil - error:nil]; - } - return path; -#endif -} - -NSString *RLMRealmPathForFileAndBundleIdentifier(NSString *fileName, NSString *bundleIdentifier) { - return [defaultDirectoryForBundleIdentifier(bundleIdentifier) - stringByAppendingPathComponent:fileName]; -} - -NSString *RLMRealmPathForFile(NSString *fileName) { - static NSString *directory = defaultDirectoryForBundleIdentifier(nil); - return [directory stringByAppendingPathComponent:fileName]; -} - -@implementation RLMRealmConfiguration { - realm::Realm::Config _config; -} - -- (realm::Realm::Config&)config { - return _config; -} - -+ (instancetype)defaultConfiguration { - return [[self rawDefaultConfiguration] copy]; -} - -+ (void)setDefaultConfiguration:(RLMRealmConfiguration *)configuration { - if (!configuration) { - @throw RLMException(@"Cannot set the default configuration to nil."); - } - @synchronized(c_defaultRealmFileName) { - s_defaultConfiguration = [configuration copy]; - } -} - -+ (RLMRealmConfiguration *)rawDefaultConfiguration { - @synchronized(c_defaultRealmFileName) { - if (!s_defaultConfiguration) { - s_defaultConfiguration = [[RLMRealmConfiguration alloc] init]; - } - } - return s_defaultConfiguration; -} - -+ (void)resetRealmConfigurationState { - @synchronized(c_defaultRealmFileName) { - s_defaultConfiguration = nil; - } -} - -- (instancetype)init { - self = [super init]; - if (self) { - static NSURL *defaultRealmURL = [NSURL fileURLWithPath:RLMRealmPathForFile(c_defaultRealmFileName)]; - self.fileURL = defaultRealmURL; - self.schemaVersion = 0; - } - - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - RLMRealmConfiguration *configuration = [[[self class] allocWithZone:zone] init]; - configuration->_config = _config; - configuration->_dynamic = _dynamic; - configuration->_migrationBlock = _migrationBlock; - configuration->_customSchema = _customSchema; - return configuration; -} - -- (NSString *)description { - NSMutableString *string = [NSMutableString stringWithFormat:@"%@ {\n", self.class]; - for (NSString *key : c_RLMRealmConfigurationProperties) { - NSString *description = [[self valueForKey:key] description]; - description = [description stringByReplacingOccurrencesOfString:@"\n" withString:@"\n\t"]; - - [string appendFormat:@"\t%@ = %@;\n", key, description]; - } - return [string stringByAppendingString:@"}"]; -} - -static void RLMNSStringToStdString(std::string &out, NSString *in) { - out.resize([in maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding]); - if (out.empty()) { - return; - } - - NSUInteger size = out.size(); - [in getBytes:&out[0] - maxLength:size - usedLength:&size - encoding:NSUTF8StringEncoding - options:0 range:{0, in.length} remainingRange:nullptr]; - out.resize(size); -} - -- (NSURL *)fileURL { - return _config.in_memory ? nil : [NSURL fileURLWithPath:@(_config.path.c_str())]; -} - -- (void)setFileURL:(NSURL *)fileURL { - NSString *path = fileURL.path; - if (path.length == 0) { - @throw RLMException(@"Realm path must not be empty"); - } - - RLMNSStringToStdString(_config.path, path); - _config.in_memory = false; -} - -- (NSString *)inMemoryIdentifier { - if (!_config.in_memory) { - return nil; - } - return [@(_config.path.c_str()) lastPathComponent]; -} - -- (void)setInMemoryIdentifier:(NSString *)inMemoryIdentifier { - if (inMemoryIdentifier.length == 0) { - @throw RLMException(@"In-memory identifier must not be empty"); - } - - RLMNSStringToStdString(_config.path, [NSTemporaryDirectory() stringByAppendingPathComponent:inMemoryIdentifier]); - _config.in_memory = true; -} - -- (NSData *)encryptionKey { - return _config.encryption_key.empty() ? nil : [NSData dataWithBytes:_config.encryption_key.data() length:_config.encryption_key.size()]; -} - -- (void)setEncryptionKey:(NSData * __nullable)encryptionKey { - if (NSData *key = RLMRealmValidatedEncryptionKey(encryptionKey)) { - auto bytes = static_cast(key.bytes); - _config.encryption_key.assign(bytes, bytes + key.length); - } - else { - _config.encryption_key.clear(); - } -} - -- (BOOL)readOnly { - return _config.read_only; -} - -- (void)setReadOnly:(BOOL)readOnly { - _config.read_only = readOnly; -} - -- (uint64_t)schemaVersion { - return _config.schema_version; -} - -- (void)setSchemaVersion:(uint64_t)schemaVersion { - if (schemaVersion == RLMNotVersioned) { - @throw RLMException(@"Cannot set schema version to %llu (RLMNotVersioned)", RLMNotVersioned); - } - _config.schema_version = schemaVersion; -} - -- (BOOL)deleteRealmIfMigrationNeeded { - return _config.delete_realm_if_migration_needed; -} - -- (void)setDeleteRealmIfMigrationNeeded:(BOOL)deleteRealmIfMigrationNeeded { - _config.delete_realm_if_migration_needed = deleteRealmIfMigrationNeeded; -} - -- (NSArray *)objectClasses { - return [_customSchema.objectSchema valueForKeyPath:@"objectClass"]; -} - -- (void)setObjectClasses:(NSArray *)objectClasses { - self.customSchema = [RLMSchema schemaWithObjectClasses:objectClasses]; -} - -- (void)setDynamic:(bool)dynamic { - _dynamic = dynamic; - _config.cache = !dynamic; -} - -- (bool)cache { - return _config.cache; -} - -- (void)setCache:(bool)cache { - _config.cache = cache; -} - -- (void)setCustomSchema:(RLMSchema *)customSchema { - _customSchema = customSchema; - _config.schema = [_customSchema objectStoreCopy]; -} - -- (void)setDisableFormatUpgrade:(bool)disableFormatUpgrade -{ - _config.disable_format_upgrade = disableFormatUpgrade; -} - -- (bool)disableFormatUpgrade -{ - return _config.disable_format_upgrade; -} - -@end - diff --git a/Pods/Realm/Realm/RLMRealmUtil.mm b/Pods/Realm/Realm/RLMRealmUtil.mm deleted file mode 100644 index 205784ff..00000000 --- a/Pods/Realm/Realm/RLMRealmUtil.mm +++ /dev/null @@ -1,160 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMRealmUtil.hpp" - -#import "RLMObservation.hpp" -#import "RLMRealm_Private.h" -#import "RLMUtil.hpp" - -#import -#import - -#import "binding_context.hpp" - -#import -#import -#import -#import -#import -#import - -// Global realm state -static std::mutex s_realmCacheMutex; -static std::map s_realmsPerPath; - -void RLMCacheRealm(std::string const& path, RLMRealm *realm) { - std::lock_guard lock(s_realmCacheMutex); - NSMapTable *realms = s_realmsPerPath[path]; - if (!realms) { - s_realmsPerPath[path] = realms = [NSMapTable mapTableWithKeyOptions:NSPointerFunctionsObjectPersonality - valueOptions:NSPointerFunctionsWeakMemory]; - } - [realms setObject:realm forKey:@(pthread_mach_thread_np(pthread_self()))]; -} - -RLMRealm *RLMGetAnyCachedRealmForPath(std::string const& path) { - std::lock_guard lock(s_realmCacheMutex); - return [s_realmsPerPath[path] objectEnumerator].nextObject; -} - -RLMRealm *RLMGetThreadLocalCachedRealmForPath(std::string const& path) { - mach_port_t threadID = pthread_mach_thread_np(pthread_self()); - std::lock_guard lock(s_realmCacheMutex); - return [s_realmsPerPath[path] objectForKey:@(threadID)]; -} - -void RLMClearRealmCache() { - std::lock_guard lock(s_realmCacheMutex); - s_realmsPerPath.clear(); -} - -void RLMInstallUncaughtExceptionHandler() { - static auto previousHandler = NSGetUncaughtExceptionHandler(); - - NSSetUncaughtExceptionHandler([](NSException *exception) { - NSNumber *threadID = @(pthread_mach_thread_np(pthread_self())); - { - std::lock_guard lock(s_realmCacheMutex); - for (auto const& realmsPerThread : s_realmsPerPath) { - if (RLMRealm *realm = [realmsPerThread.second objectForKey:threadID]) { - if (realm.inWriteTransaction) { - [realm cancelWriteTransaction]; - } - } - } - } - if (previousHandler) { - previousHandler(exception); - } - }); -} - -namespace { -class RLMNotificationHelper : public realm::BindingContext { -public: - RLMNotificationHelper(RLMRealm *realm) : _realm(realm) { } - - bool can_deliver_notifications() const noexcept override { - // The main thread may not be in a run loop yet if we're called from - // something like `applicationDidFinishLaunching:`, but it presumably will - // be in the future - if ([NSThread isMainThread]) { - return true; - } - // Current mode indicates why the current callout from the runloop was made, - // and is null if a runloop callout isn't currently being processed - if (auto mode = CFRunLoopCopyCurrentMode(CFRunLoopGetCurrent())) { - CFRelease(mode); - return true; - } - return false; - } - - void changes_available() override { - @autoreleasepool { - auto realm = _realm; - if (realm && !realm.autorefresh) { - [realm sendNotifications:RLMRealmRefreshRequiredNotification]; - } - } - } - - std::vector get_observed_rows() override { - @autoreleasepool { - auto realm = _realm; - [realm detachAllEnumerators]; - return RLMGetObservedRows(realm.schema.objectSchema); - } - } - - void will_change(std::vector const& observed, std::vector const& invalidated) override { - @autoreleasepool { - RLMWillChange(observed, invalidated); - } - } - - void did_change(std::vector const& observed, std::vector const& invalidated) override { - try { - @autoreleasepool { - RLMDidChange(observed, invalidated); - [_realm sendNotifications:RLMRealmDidChangeNotification]; - } - } - catch (...) { - // This can only be called during a write transaction if it was - // called due to the transaction beginning, so cancel it to ensure - // exceptions thrown here behave the same as exceptions thrown when - // actually beginning the write - if (_realm.inWriteTransaction) { - [_realm cancelWriteTransaction]; - } - throw; - } - } - -private: - // This is owned by the realm, so it needs to not retain the realm - __weak RLMRealm *const _realm; -}; -} // anonymous namespace - - -std::unique_ptr RLMCreateBindingContext(RLMRealm *realm) { - return std::unique_ptr(new RLMNotificationHelper(realm)); -} diff --git a/Pods/Realm/Realm/RLMResults.mm b/Pods/Realm/Realm/RLMResults.mm deleted file mode 100644 index d779c7f9..00000000 --- a/Pods/Realm/Realm/RLMResults.mm +++ /dev/null @@ -1,425 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMResults_Private.h" - -#import "RLMArray_Private.hpp" -#import "RLMCollection_Private.hpp" -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMObject_Private.hpp" -#import "RLMObservation.hpp" -#import "RLMProperty_Private.h" -#import "RLMQueryUtil.hpp" -#import "RLMRealm_Private.hpp" -#import "RLMSchema_Private.h" -#import "RLMUtil.hpp" - -#import "results.hpp" - -#import -#import -#import - -using namespace realm; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wincomplete-implementation" -@implementation RLMNotificationToken -@end -#pragma clang diagnostic pop - -// -// RLMResults implementation -// -@implementation RLMResults { - realm::Results _results; - RLMRealm *_realm; -} - -- (instancetype)initPrivate { - self = [super init]; - return self; -} - -static void assertKeyPathIsNotNested(NSString *keyPath) { - if ([keyPath rangeOfString:@"."].location != NSNotFound) { - @throw RLMException(@"Nested key paths are not supported yet for KVC collection operators."); - } -} - -[[gnu::noinline]] -[[noreturn]] -static void throwError(NSString *aggregateMethod) { - try { - throw; - } - catch (realm::InvalidTransactionException const&) { - @throw RLMException(@"Cannot modify Results outside of a write transaction"); - } - catch (realm::IncorrectThreadException const&) { - @throw RLMException(@"Realm accessed from incorrect thread"); - } - catch (realm::Results::InvalidatedException const&) { - @throw RLMException(@"RLMResults has been invalidated"); - } - catch (realm::Results::DetatchedAccessorException const&) { - @throw RLMException(@"Object has been invalidated"); - } - catch (realm::Results::IncorrectTableException const& e) { - @throw RLMException(@"Object type '%s' does not match RLMResults type '%s'.", - e.actual.data(), e.expected.data()); - } - catch (realm::Results::OutOfBoundsIndexException const& e) { - @throw RLMException(@"Index %zu is out of bounds (must be less than %zu)", - e.requested, e.valid_count); - } - catch (realm::Results::UnsupportedColumnTypeException const& e) { - @throw RLMException(@"%@ is not supported for %@ property '%s'", - aggregateMethod, - RLMTypeToString((RLMPropertyType)e.column_type), - e.column_name.data()); - } -} - -template -static auto translateErrors(Function&& f, NSString *aggregateMethod=nil) { - try { - return f(); - } - catch (...) { - throwError(aggregateMethod); - } -} - -+ (instancetype)resultsWithObjectSchema:(RLMObjectSchema *)objectSchema - results:(realm::Results)results { - RLMResults *ar = [[self alloc] initPrivate]; - ar->_results = std::move(results); - ar->_realm = objectSchema.realm; - ar->_objectSchema = objectSchema; - return ar; -} - -+ (instancetype)emptyDetachedResults -{ - return [[self alloc] initPrivate]; -} - -static inline void RLMResultsValidateInWriteTransaction(__unsafe_unretained RLMResults *const ar) { - ar->_realm->_realm->verify_thread(); - ar->_realm->_realm->verify_in_write(); -} - -- (BOOL)isInvalidated { - return translateErrors([&] { return !_results.is_valid(); }); -} - -- (NSUInteger)count { - return translateErrors([&] { return _results.size(); }); -} - -- (NSString *)objectClassName { - return RLMStringDataToNSString(_results.get_object_type()); -} - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - objects:(__unused __unsafe_unretained id [])buffer - count:(NSUInteger)len { - __autoreleasing RLMFastEnumerator *enumerator; - if (state->state == 0) { - enumerator = [[RLMFastEnumerator alloc] initWithCollection:self objectSchema:_objectSchema]; - state->extra[0] = (long)enumerator; - state->extra[1] = self.count; - } - else { - enumerator = (__bridge id)(void *)state->extra[0]; - } - - return [enumerator countByEnumeratingWithState:state count:len]; -} - -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ... { - va_list args; - va_start(args, predicateFormat); - NSUInteger index = [self indexOfObjectWhere:predicateFormat args:args]; - va_end(args); - return index; -} - -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args { - return [self indexOfObjectWithPredicate:[NSPredicate predicateWithFormat:predicateFormat - arguments:args]]; -} - -- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate { - if (_results.get_mode() == Results::Mode::Empty) { - return NSNotFound; - } - - Query query = translateErrors([&] { return _results.get_query(); }); - RLMUpdateQueryWithPredicate(&query, predicate, _realm.schema, _objectSchema); - - query.sync_view_if_needed(); - - TableView table_view; - if (const auto& sort = _results.get_sort()) { - // A sort order is specified so we need to return the first match given that ordering. - table_view = query.find_all(); - table_view.sort(sort.column_indices, sort.ascending); - } else { - // No sort order is specified so we only need to find a single match. - // FIXME: We're only looking for a single object so we'd like to be able to use `Query::find` - // for this, but as of core v0.97.1 it gives incorrect results if the query is restricted - // to a link view (). - table_view = query.find_all(0, -1, 1); - } - if (!table_view.size()) { - return NSNotFound; - } - return _results.index_of(table_view.get_source_ndx(0)); -} - -- (id)objectAtIndex:(NSUInteger)index { - return translateErrors([&] { - return RLMCreateObjectAccessor(_realm, _objectSchema, _results.get(index)); - }); -} - -- (id)firstObject { - auto row = translateErrors([&] { return _results.first(); }); - return row ? RLMCreateObjectAccessor(_realm, _objectSchema, *row) : nil; -} - -- (id)lastObject { - auto row = translateErrors([&] { return _results.last(); }); - return row ? RLMCreateObjectAccessor(_realm, _objectSchema, *row) : nil; -} - -- (NSUInteger)indexOfObject:(RLMObject *)object { - if (!object || (!object->_realm && !object.invalidated)) { - return NSNotFound; - } - - return translateErrors([&] { - return RLMConvertNotFound(_results.index_of(object->_row)); - }); -} - -- (id)valueForKeyPath:(NSString *)keyPath { - if ([keyPath characterAtIndex:0] == '@') { - if ([keyPath isEqualToString:@"@count"]) { - return @(self.count); - } - NSRange operatorRange = [keyPath rangeOfString:@"." options:NSLiteralSearch]; - NSUInteger keyPathLength = keyPath.length; - NSUInteger separatorIndex = operatorRange.location != NSNotFound ? operatorRange.location : keyPathLength; - NSString *operatorName = [keyPath substringWithRange:NSMakeRange(1, separatorIndex - 1)]; - SEL opSelector = NSSelectorFromString([NSString stringWithFormat:@"_%@ForKeyPath:", operatorName]); - BOOL isValidOperator = [self respondsToSelector:opSelector]; - if (!isValidOperator) { - @throw RLMException(@"Unsupported KVC collection operator found in key path '%@'", keyPath); - } - else if (separatorIndex >= keyPathLength - 1) { - @throw RLMException(@"Missing key path for KVC collection operator %@ in key path '%@'", operatorName, keyPath); - } - NSString *operatorKeyPath = [keyPath substringFromIndex:separatorIndex + 1]; - if (isValidOperator) { - return ((id(*)(id, SEL, id))objc_msgSend)(self, opSelector, operatorKeyPath); - } - } - return [super valueForKeyPath:keyPath]; -} - -- (id)valueForKey:(NSString *)key { - return translateErrors([&] { - return RLMCollectionValueForKey(self, key); - }); -} - -- (void)setValue:(id)value forKey:(NSString *)key { - translateErrors([&] { RLMResultsValidateInWriteTransaction(self); }); - RLMCollectionSetValueForKey(self, key, value); -} - -- (NSNumber *)_aggregateForKeyPath:(NSString *)keyPath method:(util::Optional (Results::*)(size_t))method methodName:(NSString *)methodName { - assertKeyPathIsNotNested(keyPath); - return [self aggregate:keyPath method:method methodName:methodName]; -} - -- (NSNumber *)_minForKeyPath:(NSString *)keyPath { - return [self _aggregateForKeyPath:keyPath method:&Results::min methodName:@"@min"]; -} - -- (NSNumber *)_maxForKeyPath:(NSString *)keyPath { - return [self _aggregateForKeyPath:keyPath method:&Results::max methodName:@"@max"]; -} - -- (NSNumber *)_sumForKeyPath:(NSString *)keyPath { - return [self _aggregateForKeyPath:keyPath method:&Results::sum methodName:@"@sum"]; -} - -- (NSNumber *)_avgForKeyPath:(NSString *)keyPath { - return [self _aggregateForKeyPath:keyPath method:&Results::average methodName:@"@avg"]; -} - -- (NSArray *)_unionOfObjectsForKeyPath:(NSString *)keyPath { - assertKeyPathIsNotNested(keyPath); - return translateErrors([&] { - return RLMCollectionValueForKey(self, keyPath); - }); -} - -- (NSArray *)_distinctUnionOfObjectsForKeyPath:(NSString *)keyPath { - return [NSSet setWithArray:[self _unionOfObjectsForKeyPath:keyPath]].allObjects; -} - -- (NSArray *)_unionOfArraysForKeyPath:(NSString *)keyPath { - assertKeyPathIsNotNested(keyPath); - if ([keyPath isEqualToString:@"self"]) { - @throw RLMException(@"self is not a valid key-path for a KVC array collection operator as 'unionOfArrays'."); - } - - return translateErrors([&] { - NSArray *nestedResults = RLMCollectionValueForKey(self, keyPath); - NSMutableArray *flatArray = [NSMutableArray arrayWithCapacity:nestedResults.count]; - for (id array in nestedResults) { - NSArray *nsArray = RLMCollectionValueForKey(array, @"self"); - [flatArray addObjectsFromArray:nsArray]; - } - return flatArray; - }); -} - -- (NSArray *)_distinctUnionOfArraysForKeyPath:(__unused NSString *)keyPath { - return [NSSet setWithArray:[self _unionOfArraysForKeyPath:keyPath]].allObjects; -} - -- (RLMResults *)objectsWhere:(NSString *)predicateFormat, ... { - va_list args; - va_start(args, predicateFormat); - RLMResults *results = [self objectsWhere:predicateFormat args:args]; - va_end(args); - return results; -} - -- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args { - return [self objectsWithPredicate:[NSPredicate predicateWithFormat:predicateFormat arguments:args]]; -} - -- (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate { - return translateErrors([&] { - if (_results.get_mode() == Results::Mode::Empty) { - return self; - } - auto query = _objectSchema.table->where(); - RLMUpdateQueryWithPredicate(&query, predicate, _realm.schema, _objectSchema); - return [RLMResults resultsWithObjectSchema:_objectSchema - results:_results.filter(std::move(query))]; - }); -} - -- (RLMResults *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending { - return [self sortedResultsUsingDescriptors:@[[RLMSortDescriptor sortDescriptorWithProperty:property ascending:ascending]]]; -} - -- (RLMResults *)sortedResultsUsingDescriptors:(NSArray *)properties { - return translateErrors([&] { - if (_results.get_mode() == Results::Mode::Empty) { - return self; - } - - return [RLMResults resultsWithObjectSchema:_objectSchema - results:_results.sort(RLMSortOrderFromDescriptors(_objectSchema, properties))]; - }); -} - -- (id)objectAtIndexedSubscript:(NSUInteger)index { - return [self objectAtIndex:index]; -} - -- (id)aggregate:(NSString *)property method:(util::Optional (Results::*)(size_t))method methodName:(NSString *)methodName { - size_t column = RLMValidatedProperty(_objectSchema, property).column; - auto value = translateErrors([&] { return (_results.*method)(column); }, methodName); - if (!value) { - return nil; - } - return RLMMixedToObjc(*value); -} - -- (id)minOfProperty:(NSString *)property { - return [self aggregate:property method:&Results::min methodName:@"minOfProperty"]; -} - -- (id)maxOfProperty:(NSString *)property { - return [self aggregate:property method:&Results::max methodName:@"maxOfProperty"]; -} - -- (id)sumOfProperty:(NSString *)property { - return [self aggregate:property method:&Results::sum methodName:@"sumOfProperty"]; -} - -- (id)averageOfProperty:(NSString *)property { - return [self aggregate:property method:&Results::average methodName:@"averageOfProperty"]; -} - -- (void)deleteObjectsFromRealm { - return translateErrors([&] { - if (_results.get_mode() == Results::Mode::Table) { - RLMResultsValidateInWriteTransaction(self); - RLMClearTable(self.objectSchema); - } - else { - RLMTrackDeletions(_realm, ^{ _results.clear(); }); - } - }); -} - -- (NSString *)description { - return RLMDescriptionWithMaxDepth(@"RLMResults", self, RLMDescriptionMaxDepth); -} - -- (NSUInteger)indexInSource:(NSUInteger)index { - return translateErrors([&] { return _results.get(index).get_index(); }); -} - -- (realm::TableView)tableView { - return translateErrors([&] { return _results.get_tableview(); }); -} - -// The compiler complains about the method's argument type not matching due to -// it not having the generic type attached, but it doesn't seem to be possible -// to actually include the generic type -// http://www.openradar.me/radar?id=6135653276319744 -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wmismatched-parameter-types" -- (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMResults *, RLMCollectionChange *, NSError *))block { - [_realm verifyNotificationsAreSupported]; - return RLMAddNotificationBlock(self, _results, block, false); -} -#pragma clang diagnostic pop - -- (BOOL)isAttached -{ - return !!_realm; -} - -@end - -@implementation RLMLinkingObjects -@end diff --git a/Pods/Realm/Realm/RLMSchema.mm b/Pods/Realm/Realm/RLMSchema.mm deleted file mode 100644 index 3fa04b87..00000000 --- a/Pods/Realm/Realm/RLMSchema.mm +++ /dev/null @@ -1,336 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMSchema_Private.h" - -#import "RLMAccessor.h" -#import "RLMObject_Private.hpp" -#import "RLMObjectSchema_Private.hpp" -#import "RLMProperty_Private.h" -#import "RLMRealm_Private.hpp" -#import "RLMSwiftSupport.h" -#import "RLMUtil.hpp" - -#import "object_store.hpp" -#import "schema.hpp" - -#import - -#import -#include - -using namespace realm; - -const uint64_t RLMNotVersioned = realm::ObjectStore::NotVersioned; - -// RLMSchema private properties -@interface RLMSchema () -@property (nonatomic, readwrite) NSMutableDictionary *objectSchemaByName; -@end - -static RLMSchema *s_sharedSchema = [[RLMSchema alloc] init]; -static NSMutableDictionary *s_localNameToClass = [[NSMutableDictionary alloc] init]; -static NSMutableDictionary *s_privateObjectSubclasses = [[NSMutableDictionary alloc] init]; - -static enum class SharedSchemaState { - Uninitialized, - Initializing, - Initialized -} s_sharedSchemaState = SharedSchemaState::Uninitialized; - -// Caller must @synchronize on s_localNameToClass -static RLMObjectSchema *RLMRegisterClass(Class cls) { - if (RLMObjectSchema *schema = s_privateObjectSubclasses[[cls className]]) { - return schema; - } - - auto prevState = s_sharedSchemaState; - s_sharedSchemaState = SharedSchemaState::Initializing; - RLMObjectSchema *schema = [RLMObjectSchema schemaForObjectClass:cls]; - s_sharedSchemaState = prevState; - - // set unmanaged class on shared shema for unmanaged object creation - schema.standaloneClass = RLMStandaloneAccessorClassForObjectClass(schema.objectClass, schema); - - // override sharedSchema class methods for performance - RLMReplaceSharedSchemaMethod(cls, schema); - - s_privateObjectSubclasses[schema.className] = schema; - if ([cls shouldIncludeInDefaultSchema]) { - s_sharedSchema.objectSchemaByName[schema.className] = schema; - } - - return schema; -} - -// Caller must @synchronize on s_localNameToClass -static void RLMRegisterClassLocalNames(Class *classes, NSUInteger count) { - for (NSUInteger i = 0; i < count; i++) { - Class cls = classes[i]; - - if (!RLMIsObjectSubclass(cls) || RLMIsGeneratedClass(cls)) { - continue; - } - - NSString *className = NSStringFromClass(cls); - if ([RLMSwiftSupport isSwiftClassName:className]) { - className = [RLMSwiftSupport demangleClassName:className]; - } - // NSStringFromClass demangles the names for top-level Swift classes - // but not for nested classes. _T indicates it's a Swift symbol, t - // indicates it's a type, and C indicates it's a class. - else if ([className hasPrefix:@"_TtC"]) { - @throw RLMException(@"RLMObject subclasses cannot be nested within other declarations. Please move %@ to global scope.", className); - } - - if (Class existingClass = s_localNameToClass[className]) { - if (existingClass != cls) { - @throw RLMException(@"RLMObject subclasses with the same name cannot be included twice in the same target. " - @"Please make sure '%@' is only linked once to your current target.", className); - } - continue; - } - - s_localNameToClass[className] = cls; - RLMReplaceClassNameMethod(cls, className); - } -} - -@implementation RLMSchema { - NSArray *_objectSchema; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _objectSchemaByName = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (NSArray *)objectSchema { - if (!_objectSchema) { - _objectSchema = [_objectSchemaByName allValues]; - } - return _objectSchema; -} - -- (void)setObjectSchema:(NSArray *)objectSchema { - _objectSchema = objectSchema; - _objectSchemaByName = [NSMutableDictionary dictionaryWithCapacity:objectSchema.count]; - for (RLMObjectSchema *object in objectSchema) { - [_objectSchemaByName setObject:object forKey:object.className]; - } -} - -- (RLMObjectSchema *)schemaForClassName:(NSString *)className { - return _objectSchemaByName[className]; -} - -- (RLMObjectSchema *)objectForKeyedSubscript:(__unsafe_unretained id const)className { - RLMObjectSchema *schema = _objectSchemaByName[className]; - if (!schema) { - @throw RLMException(@"Object type '%@' not persisted in Realm", className); - } - return schema; -} - -+ (instancetype)schemaWithObjectClasses:(NSArray *)classes { - NSUInteger count = classes.count; - auto classArray = std::make_unique<__unsafe_unretained Class[]>(count); - [classes getObjects:classArray.get() range:NSMakeRange(0, count)]; - - RLMSchema *schema = [[self alloc] init]; - @synchronized(s_localNameToClass) { - RLMRegisterClassLocalNames(classArray.get(), count); - - schema->_objectSchemaByName = [NSMutableDictionary dictionaryWithCapacity:count]; - for (Class cls in classes) { - if (!RLMIsObjectSubclass(cls)) { - @throw RLMException(@"Can't add non-Object type '%@' to a schema.", cls); - } - schema->_objectSchemaByName[[cls className]] = RLMRegisterClass(cls); - } - } - - NSMutableArray *errors = [NSMutableArray new]; - // Verify that all of the targets of links are included in the class list - [schema->_objectSchemaByName enumerateKeysAndObjectsUsingBlock:^(id, RLMObjectSchema *objectSchema, BOOL *) { - for (RLMProperty *prop in objectSchema.properties) { - if (prop.type != RLMPropertyTypeObject && prop.type != RLMPropertyTypeArray) { - continue; - } - if (!schema->_objectSchemaByName[prop.objectClassName]) { - [errors addObject:[NSString stringWithFormat:@"- '%@.%@' links to class '%@', which is missing from the list of classes to persist", objectSchema.className, prop.name, prop.objectClassName]]; - } - } - }]; - if (errors.count) { - @throw RLMException(@"Invalid class subset list:\n%@", [errors componentsJoinedByString:@"\n"]); - } - - return schema; -} - -+ (RLMObjectSchema *)sharedSchemaForClass:(Class)cls { - @synchronized(s_localNameToClass) { - // We create instances of Swift objects during schema init, and they - // obviously need to not also try to initialize the schema - if (s_sharedSchemaState == SharedSchemaState::Initializing) { - return nil; - } - - RLMRegisterClassLocalNames(&cls, 1); - return RLMRegisterClass(cls); - } -} - -+ (instancetype)partialSharedSchema { - return s_sharedSchema; -} - -// schema based on runtime objects -+ (instancetype)sharedSchema { - @synchronized(s_localNameToClass) { - // We replace this method with one which just returns s_sharedSchema - // once initialization is complete, but we still need to check if it's - // already complete because it may have been done by another thread - // while we were waiting for the lock - if (s_sharedSchemaState == SharedSchemaState::Initialized) { - return s_sharedSchema; - } - - if (s_sharedSchemaState == SharedSchemaState::Initializing) { - @throw RLMException(@"Illegal recursive call of +[%@ %@]. Note: Properties of Swift `Object` classes must not be prepopulated with queried results from a Realm.", self, NSStringFromSelector(_cmd)); - } - - s_sharedSchemaState = SharedSchemaState::Initializing; - try { - // Make sure we've discovered all classes - { - unsigned int numClasses; - using malloc_ptr = std::unique_ptr<__unsafe_unretained Class[], decltype(&free)>; - malloc_ptr classes(objc_copyClassList(&numClasses), &free); - RLMRegisterClassLocalNames(classes.get(), numClasses); - } - - [s_localNameToClass enumerateKeysAndObjectsUsingBlock:^(NSString *, Class cls, BOOL *) { - RLMRegisterClass(cls); - }]; - } - catch (...) { - s_sharedSchemaState = SharedSchemaState::Uninitialized; - throw; - } - - // Replace this method with one that doesn't need to acquire a lock - Class metaClass = objc_getMetaClass(class_getName(self)); - IMP imp = imp_implementationWithBlock(^{ return s_sharedSchema; }); - class_replaceMethod(metaClass, @selector(sharedSchema), imp, "@@:"); - - s_sharedSchemaState = SharedSchemaState::Initialized; - } - - return s_sharedSchema; -} - -// schema based on tables in a realm -+ (instancetype)dynamicSchemaFromObjectStoreSchema:(Schema &)objectStoreSchema { - // cache descriptors for all subclasses of RLMObject - NSMutableArray *schemaArray = [NSMutableArray arrayWithCapacity:objectStoreSchema.size()]; - for (auto &objectSchema : objectStoreSchema) { - RLMObjectSchema *schema = [RLMObjectSchema objectSchemaForObjectStoreSchema:objectSchema]; - [schemaArray addObject:schema]; - } - - // set class array and mapping - RLMSchema *schema = [RLMSchema new]; - schema.objectSchema = schemaArray; - return schema; -} - -+ (Class)classForString:(NSString *)className { - if (Class cls = s_localNameToClass[className]) { - return cls; - } - - if (Class cls = NSClassFromString(className)) { - return RLMIsObjectSubclass(cls) ? cls : nil; - } - - // className might be the local name of a Swift class we haven't registered - // yet, so scan them all then recheck - { - unsigned int numClasses; - std::unique_ptr<__unsafe_unretained Class[], decltype(&free)> classes(objc_copyClassList(&numClasses), &free); - RLMRegisterClassLocalNames(classes.get(), numClasses); - } - - return s_localNameToClass[className]; -} - -- (id)copyWithZone:(NSZone *)zone { - RLMSchema *schema = [[RLMSchema allocWithZone:zone] init]; - schema->_objectSchemaByName = [[NSMutableDictionary allocWithZone:zone] - initWithDictionary:_objectSchemaByName copyItems:YES]; - return schema; -} - -- (instancetype)shallowCopy { - RLMSchema *schema = [[RLMSchema alloc] init]; - schema->_objectSchemaByName = [[NSMutableDictionary alloc] initWithCapacity:_objectSchemaByName.count]; - [_objectSchemaByName enumerateKeysAndObjectsUsingBlock:^(NSString *name, RLMObjectSchema *objectSchema, BOOL *) { - schema->_objectSchemaByName[name] = [objectSchema shallowCopy]; - }]; - return schema; -} - -- (BOOL)isEqualToSchema:(RLMSchema *)schema { - if (_objectSchemaByName.count != schema->_objectSchemaByName.count) { - return NO; - } - __block BOOL matches = YES; - [_objectSchemaByName enumerateKeysAndObjectsUsingBlock:^(NSString *name, RLMObjectSchema *objectSchema, BOOL *stop) { - if (![schema->_objectSchemaByName[name] isEqualToObjectSchema:objectSchema]) { - *stop = YES; - matches = NO; - } - }]; - return matches; -} - -- (NSString *)description { - NSMutableString *objectSchemaString = [NSMutableString string]; - NSArray *sort = @[[NSSortDescriptor sortDescriptorWithKey:@"className" ascending:YES]]; - for (RLMObjectSchema *objectSchema in [self.objectSchema sortedArrayUsingDescriptors:sort]) { - [objectSchemaString appendFormat:@"\t%@\n", - [objectSchema.description stringByReplacingOccurrencesOfString:@"\n" withString:@"\n\t"]]; - } - return [NSString stringWithFormat:@"Schema {\n%@}", objectSchemaString]; -} - -- (std::unique_ptr)objectStoreCopy { - std::vector schema; - schema.reserve(_objectSchemaByName.count); - [_objectSchemaByName enumerateKeysAndObjectsUsingBlock:[&](NSString *, RLMObjectSchema *objectSchema, BOOL *) { - schema.push_back(objectSchema.objectStoreCopy); - }]; - return std::make_unique(std::move(schema)); -} - -@end diff --git a/Pods/Realm/Realm/RLMSwiftSupport.m b/Pods/Realm/Realm/RLMSwiftSupport.m deleted file mode 100644 index e16c79ea..00000000 --- a/Pods/Realm/Realm/RLMSwiftSupport.m +++ /dev/null @@ -1,31 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMSwiftSupport.h" - -@implementation RLMSwiftSupport - -+ (BOOL)isSwiftClassName:(NSString *)className { - return [className rangeOfString:@"."].location != NSNotFound; -} - -+ (NSString *)demangleClassName:(NSString *)className { - return [className substringFromIndex:[className rangeOfString:@"."].location + 1]; -} - -@end diff --git a/Pods/Realm/Realm/RLMUpdateChecker.mm b/Pods/Realm/Realm/RLMUpdateChecker.mm deleted file mode 100644 index e282ee85..00000000 --- a/Pods/Realm/Realm/RLMUpdateChecker.mm +++ /dev/null @@ -1,48 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMUpdateChecker.hpp" - -#import "RLMRealm.h" -#import "RLMUtil.hpp" - -#if TARGET_IPHONE_SIMULATOR && !defined(REALM_COCOA_VERSION) -#import "RLMVersion.h" -#endif - -void RLMCheckForUpdates() { -#if TARGET_IPHONE_SIMULATOR - if (getenv("REALM_DISABLE_UPDATE_CHECKER") || RLMIsRunningInPlayground()) { - return; - } - - auto handler = ^(NSData *data, NSURLResponse *response, NSError *error) { - if (error || ((NSHTTPURLResponse *)response).statusCode != 200) { - return; - } - - NSString *latestVersion = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - if (![REALM_COCOA_VERSION isEqualToString:latestVersion]) { - NSLog(@"Version %@ of Realm is now available: https://github.com/realm/realm-cocoa/blob/v%@/CHANGELOG.md", latestVersion, latestVersion); - } - }; - - NSString *url = [NSString stringWithFormat:@"https://static.realm.io/update/cocoa?%@", REALM_COCOA_VERSION]; - [[NSURLSession.sharedSession dataTaskWithURL:[NSURL URLWithString:url] completionHandler:handler] resume]; -#endif -} diff --git a/Pods/Realm/Realm/RLMUtil.mm b/Pods/Realm/Realm/RLMUtil.mm deleted file mode 100644 index d2fa4448..00000000 --- a/Pods/Realm/Realm/RLMUtil.mm +++ /dev/null @@ -1,351 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMUtil.hpp" - -#import "RLMArray_Private.hpp" -#import "RLMListBase.h" -#import "RLMObjectSchema_Private.hpp" -#import "RLMObjectStore.h" -#import "RLMObject_Private.hpp" -#import "RLMProperty_Private.h" -#import "RLMSchema_Private.h" -#import "RLMSwiftSupport.h" - -#import -#import - -#include -#include - -#if !defined(REALM_COCOA_VERSION) -#import "RLMVersion.h" -#endif - -static inline bool nsnumber_is_like_integer(__unsafe_unretained NSNumber *const obj) -{ - char data_type = [obj objCType][0]; - return data_type == *@encode(bool) || - data_type == *@encode(char) || - data_type == *@encode(short) || - data_type == *@encode(int) || - data_type == *@encode(long) || - data_type == *@encode(long long) || - data_type == *@encode(unsigned short) || - data_type == *@encode(unsigned int) || - data_type == *@encode(unsigned long) || - data_type == *@encode(unsigned long long); -} - -static inline bool nsnumber_is_like_bool(__unsafe_unretained NSNumber *const obj) -{ - // @encode(BOOL) is 'B' on iOS 64 and 'c' - // objcType is always 'c'. Therefore compare to "c". - if ([obj objCType][0] == 'c') { - return true; - } - - if (nsnumber_is_like_integer(obj)) { - int value = [obj intValue]; - return value == 0 || value == 1; - } - - return false; -} - -static inline bool nsnumber_is_like_float(__unsafe_unretained NSNumber *const obj) -{ - char data_type = [obj objCType][0]; - return data_type == *@encode(float) || - data_type == *@encode(short) || - data_type == *@encode(int) || - data_type == *@encode(long) || - data_type == *@encode(long long) || - data_type == *@encode(unsigned short) || - data_type == *@encode(unsigned int) || - data_type == *@encode(unsigned long) || - data_type == *@encode(unsigned long long) || - // A double is like float if it fits within float bounds - (data_type == *@encode(double) && ABS([obj doubleValue]) <= FLT_MAX); -} - -static inline bool nsnumber_is_like_double(__unsafe_unretained NSNumber *const obj) -{ - char data_type = [obj objCType][0]; - return data_type == *@encode(double) || - data_type == *@encode(float) || - data_type == *@encode(short) || - data_type == *@encode(int) || - data_type == *@encode(long) || - data_type == *@encode(long long) || - data_type == *@encode(unsigned short) || - data_type == *@encode(unsigned int) || - data_type == *@encode(unsigned long) || - data_type == *@encode(unsigned long long); -} - -BOOL RLMIsObjectValidForProperty(__unsafe_unretained id const obj, - __unsafe_unretained RLMProperty *const property) { - if (property.optional && !RLMCoerceToNil(obj)) { - return YES; - } - - switch (property.type) { - case RLMPropertyTypeString: - return [obj isKindOfClass:[NSString class]]; - case RLMPropertyTypeBool: - if ([obj isKindOfClass:[NSNumber class]]) { - return nsnumber_is_like_bool(obj); - } - return NO; - case RLMPropertyTypeDate: - return [obj isKindOfClass:[NSDate class]]; - case RLMPropertyTypeInt: - if (NSNumber *number = RLMDynamicCast(obj)) { - return nsnumber_is_like_integer(number); - } - return NO; - case RLMPropertyTypeFloat: - if (NSNumber *number = RLMDynamicCast(obj)) { - return nsnumber_is_like_float(number); - } - return NO; - case RLMPropertyTypeDouble: - if (NSNumber *number = RLMDynamicCast(obj)) { - return nsnumber_is_like_double(number); - } - return NO; - case RLMPropertyTypeData: - return [obj isKindOfClass:[NSData class]]; - case RLMPropertyTypeAny: - return NO; - case RLMPropertyTypeObject: - case RLMPropertyTypeLinkingObjects: { - // only NSNull, nil, or objects which derive from RLMObject and match the given - // object class are valid - RLMObjectBase *objBase = RLMDynamicCast(obj); - return objBase && [objBase->_objectSchema.className isEqualToString:property.objectClassName]; - } - case RLMPropertyTypeArray: { - if (RLMArray *array = RLMDynamicCast(obj)) { - return [array.objectClassName isEqualToString:property.objectClassName]; - } - if (RLMListBase *list = RLMDynamicCast(obj)) { - return [list._rlmArray.objectClassName isEqualToString:property.objectClassName]; - } - if ([obj conformsToProtocol:@protocol(NSFastEnumeration)]) { - // check each element for compliance - for (id el in (id)obj) { - RLMObjectBase *obj = RLMDynamicCast(el); - if (!obj || ![obj->_objectSchema.className isEqualToString:property.objectClassName]) { - return NO; - } - } - return YES; - } - if (!obj || obj == NSNull.null) { - return YES; - } - return NO; - } - } - @throw RLMException(@"Invalid RLMPropertyType specified"); -} - -NSDictionary *RLMDefaultValuesForObjectSchema(__unsafe_unretained RLMObjectSchema *const objectSchema) { - if (!objectSchema.isSwiftClass) { - return [objectSchema.objectClass defaultPropertyValues]; - } - - NSMutableDictionary *defaults = nil; - if ([objectSchema.objectClass isSubclassOfClass:RLMObject.class]) { - defaults = [NSMutableDictionary dictionaryWithDictionary:[objectSchema.objectClass defaultPropertyValues]]; - } - else { - defaults = [NSMutableDictionary dictionary]; - } - RLMObject *defaultObject = [[objectSchema.objectClass alloc] init]; - for (RLMProperty *prop in objectSchema.properties) { - if (!defaults[prop.name] && defaultObject[prop.name]) { - defaults[prop.name] = defaultObject[prop.name]; - } - } - return defaults; -} - -static NSException *RLMException(NSString *reason, NSDictionary *additionalUserInfo) { - NSMutableDictionary *userInfo = @{RLMRealmVersionKey: REALM_COCOA_VERSION, - RLMRealmCoreVersionKey: @REALM_VERSION}.mutableCopy; - if (additionalUserInfo != nil) { - [userInfo addEntriesFromDictionary:additionalUserInfo]; - } - NSException *e = [NSException exceptionWithName:RLMExceptionName - reason:reason - userInfo:userInfo]; - return e; -} - -NSException *RLMException(NSString *fmt, ...) { - va_list args; - va_start(args, fmt); - NSException *e = RLMException([[NSString alloc] initWithFormat:fmt arguments:args], @{}); - va_end(args); - return e; -} - -NSException *RLMException(std::exception const& exception) { - return RLMException(@"%@", @(exception.what())); -} - -NSError *RLMMakeError(RLMError code, std::exception const& exception) { - return [NSError errorWithDomain:RLMErrorDomain - code:code - userInfo:@{NSLocalizedDescriptionKey: @(exception.what()), - @"Error Code": @(code)}]; -} - -NSError *RLMMakeError(RLMError code, const realm::util::File::AccessError& exception) { - return [NSError errorWithDomain:RLMErrorDomain - code:code - userInfo:@{NSLocalizedDescriptionKey: @(exception.what()), - NSFilePathErrorKey: @(exception.get_path().c_str()), - @"Error Code": @(code)}]; -} - -NSError *RLMMakeError(RLMError code, const realm::RealmFileException& exception) { - NSString *underlying = @(exception.underlying().c_str()); - return [NSError errorWithDomain:RLMErrorDomain - code:code - userInfo:@{NSLocalizedDescriptionKey: @(exception.what()), - NSFilePathErrorKey: @(exception.path().c_str()), - @"Error Code": @(code), - @"Underlying": underlying.length == 0 ? @"n/a" : underlying}]; -} - -NSError *RLMMakeError(std::system_error const& exception) { - BOOL isGenericCategoryError = (exception.code().category() == std::generic_category()); - NSString *category = @(exception.code().category().name()); - NSString *errorDomain = isGenericCategoryError ? NSPOSIXErrorDomain : RLMUnknownSystemErrorDomain; - - return [NSError errorWithDomain:errorDomain - code:exception.code().value() - userInfo:@{NSLocalizedDescriptionKey: @(exception.what()), - @"Error Code": @(exception.code().value()), - @"Category": category}]; -} - -NSError *RLMMakeError(NSException *exception) { - return [NSError errorWithDomain:RLMErrorDomain - code:0 - userInfo:@{NSLocalizedDescriptionKey: exception.reason}]; -} - -void RLMSetErrorOrThrow(NSError *error, NSError **outError) { - if (outError) { - *outError = error; - } - else { - NSString *msg = error.localizedDescription; - if (error.userInfo[NSFilePathErrorKey]) { - msg = [NSString stringWithFormat:@"%@: %@", error.userInfo[NSFilePathErrorKey], error.localizedDescription]; - } - @throw RLMException(msg, @{NSUnderlyingErrorKey: error}); - } -} - -// Determines if class1 descends from class2 -static inline BOOL RLMIsSubclass(Class class1, Class class2) { - class1 = class_getSuperclass(class1); - return RLMIsKindOfClass(class1, class2); -} - -static bool treatFakeObjectAsRLMObject = false; - -void RLMSetTreatFakeObjectAsRLMObject(BOOL flag) { - treatFakeObjectAsRLMObject = flag; -} - -BOOL RLMIsObjectOrSubclass(Class klass) { - if (RLMIsKindOfClass(klass, RLMObjectBase.class)) { - return YES; - } - - if (treatFakeObjectAsRLMObject) { - static Class FakeObjectClass = NSClassFromString(@"FakeObject"); - return RLMIsKindOfClass(klass, FakeObjectClass); - } - return NO; -} - -BOOL RLMIsObjectSubclass(Class klass) { - if (RLMIsSubclass(class_getSuperclass(klass), RLMObjectBase.class)) { - return YES; - } - - if (treatFakeObjectAsRLMObject) { - static Class FakeObjectClass = NSClassFromString(@"FakeObject"); - return RLMIsSubclass(klass, FakeObjectClass); - } - return NO; -} - -BOOL RLMIsDebuggerAttached() -{ - int name[] = { - CTL_KERN, - KERN_PROC, - KERN_PROC_PID, - getpid() - }; - - struct kinfo_proc info; - size_t info_size = sizeof(info); - if (sysctl(name, sizeof(name)/sizeof(name[0]), &info, &info_size, NULL, 0) == -1) { - NSLog(@"sysctl() failed: %s", strerror(errno)); - return false; - } - - return (info.kp_proc.p_flag & P_TRACED) != 0; -} - -BOOL RLMIsRunningInPlayground() { - return [[NSBundle mainBundle].bundleIdentifier hasPrefix:@"com.apple.dt.playground."]; -} - -id RLMMixedToObjc(realm::Mixed const& mixed) { - switch (mixed.get_type()) { - case realm::type_String: - return RLMStringDataToNSString(mixed.get_string()); - case realm::type_Int: - return @(mixed.get_int()); - case realm::type_Float: - return @(mixed.get_float()); - case realm::type_Double: - return @(mixed.get_double()); - case realm::type_Bool: - return @(mixed.get_bool()); - case realm::type_Timestamp: - return RLMTimestampToNSDate(mixed.get_timestamp()); - case realm::type_Binary: - return RLMBinaryDataToNSData(mixed.get_binary()); - case realm::type_Link: - case realm::type_LinkList: - default: - @throw RLMException(@"Invalid data type for RLMPropertyTypeAny property."); - } -} diff --git a/Pods/Realm/Realm/module.modulemap b/Pods/Realm/Realm/module.modulemap deleted file mode 100644 index 18b5e2ec..00000000 --- a/Pods/Realm/Realm/module.modulemap +++ /dev/null @@ -1,27 +0,0 @@ -framework module Realm { - umbrella header "Realm.h" - - export * - module * { export * } - - explicit module Private { - header "RLMAccessor.h" - header "RLMArray_Private.h" - header "RLMListBase.h" - header "RLMMigration_Private.h" - header "RLMObjectSchema_Private.h" - header "RLMObjectStore.h" - header "RLMObject_Private.h" - header "RLMOptionalBase.h" - header "RLMProperty_Private.h" - header "RLMRealmConfiguration_Private.h" - header "RLMRealm_Private.h" - header "RLMResults_Private.h" - header "RLMSchema_Private.h" - } - - explicit module Dynamic { - header "RLMRealm_Dynamic.h" - header "RLMObjectBase_Dynamic.h" - } -} diff --git a/Pods/Realm/build.sh b/Pods/Realm/build.sh deleted file mode 100755 index cbeaa225..00000000 --- a/Pods/Realm/build.sh +++ /dev/null @@ -1,1289 +0,0 @@ -#!/bin/sh - -################################################################################## -# Custom build tool for Realm Objective-C binding. -# -# (C) Copyright 2011-2015 by realm.io. -################################################################################## - -# Warning: pipefail is not a POSIX compatible option, but on OS X it works just fine. -# OS X uses a POSIX complain version of bash as /bin/sh, but apparently it does -# not strip away this feature. Also, this will fail if somebody forces the script -# to be run with zsh. -set -o pipefail -set -e - -# You can override the version of the core library -: ${REALM_CORE_VERSION:=1.0.1} # set to "current" to always use the current build - -# You can override the xcmode used -: ${XCMODE:=xcodebuild} # must be one of: xcodebuild (default), xcpretty, xctool - -# Provide a fallback value for TMPDIR, relevant for Xcode Bots -: ${TMPDIR:=$(getconf DARWIN_USER_TEMP_DIR)} - -PATH=/usr/libexec:$PATH - -if ! [ -z "${JENKINS_HOME}" ]; then - XCPRETTY_PARAMS="--no-utf --report junit --output build/reports/junit.xml" - CODESIGN_PARAMS="CODE_SIGN_IDENTITY= CODE_SIGNING_REQUIRED=NO" -fi - -export REALM_SKIP_DEBUGGER_CHECKS=YES - -usage() { -cat < 120 seconds for the tests to - # build (). Work around this by having the test phases intentionally - # exit after they finish building the first time, then run the tests for real. - ( REALM_EXIT_AFTER_BUILDING_TESTS=YES xc "$1" ) || true - # Xcode 7.2.1 fails to run tests in the iOS simulator for unknown reasons. Resetting the simulator here works - # around this issue. - sh build.sh prelaunch-simulator - xc "$1" -} - -clean_retrieve() { - mkdir -p "$2" - rm -rf "$2/$3" - cp -R "$1" "$2" -} - -move_to_clean_dir() { - rm -rf "$2" - mkdir -p "$2" - mv "$1" "$2" -} - -shutdown_simulators() { - # Shut down simulators until there's no booted ones left - # Only do one at a time because devices sometimes show up multiple times - while xcrun simctl list | grep -q Booted; do - xcrun simctl list | grep Booted | sed 's/.* (\(.*\)) (Booted)/\1/' | head -n 1 | xargs xcrun simctl shutdown - done -} - -###################################### -# Device Test Helper -###################################### - -test_devices() { - serial_numbers_str=$(system_profiler SPUSBDataType | grep "Serial Number: ") - serial_numbers=() - while read -r line; do - number=${line:15} # Serial number starts at position 15 - if [[ ${#number} == 40 ]]; then - serial_numbers+=("$number") - fi - done <<< "$serial_numbers_str" - if [[ ${#serial_numbers[@]} == 0 ]]; then - echo "At least one iOS/tvOS device must be connected to this computer to run device tests" - if [ -z "${JENKINS_HOME}" ]; then - # Don't fail if running locally and there's no device - exit 0 - fi - exit 1 - fi - local sdk="$1" - local scheme="$2" - local configuration="$3" - local failed=0 - for device in "${serial_numbers[@]}"; do - xc "-scheme '$scheme' -configuration $configuration -destination 'id=$device' -sdk $sdk test" || failed=1 - done - return $failed -} - -###################################### -# Docs -###################################### - -build_docs() { - local language="$1" - local version=$(sh build.sh get-version) - - local xcodebuild_arguments="--objc,Realm/Realm.h,--,-x,objective-c,-isysroot,$(xcrun --show-sdk-path),-I,$(pwd)" - local module="Realm" - local objc="--objc" - - if [[ "$language" == "swift" ]]; then - : ${REALM_SWIFT_VERSION:=2.2} - sh build.sh set-swift-version - xcodebuild_arguments="-scheme,RealmSwift" - module="RealmSwift" - objc="" - fi - - touch Realm/RLMPlatform.h # jazzy will fail if it can't find all public header files - jazzy \ - ${objc} \ - --swift-version 2.2 \ - --clean \ - --author Realm \ - --author_url https://realm.io \ - --github_url https://github.com/realm/realm-cocoa \ - --github-file-prefix https://github.com/realm/realm-cocoa/tree/v${version} \ - --module-version ${version} \ - --xcodebuild-arguments ${xcodebuild_arguments} \ - --module ${module} \ - --root-url https://realm.io/docs/${language}/${version}/api/ \ - --output docs/${language}_output \ - --head "$(cat docs/custom_head.html)" - - rm Realm/RLMPlatform.h -} - -###################################### -# Input Validation -###################################### - -if [ "$#" -eq 0 -o "$#" -gt 3 ]; then - usage - exit 1 -fi - -###################################### -# Variables -###################################### - -download_core() { - echo "Downloading dependency: core ${REALM_CORE_VERSION}" - TMP_DIR="$TMPDIR/core_bin" - mkdir -p "${TMP_DIR}" - CORE_TMP_TAR="${TMP_DIR}/core-${REALM_CORE_VERSION}.tar.bz2.tmp" - CORE_TAR="${TMP_DIR}/core-${REALM_CORE_VERSION}.tar.bz2" - if [ ! -f "${CORE_TAR}" ]; then - local CORE_URL="https://static.realm.io/downloads/core/realm-core-${REALM_CORE_VERSION}.tar.bz2" - set +e # temporarily disable immediate exit - local ERROR # sweeps the exit code unless declared separately - ERROR=$(curl --fail --silent --show-error --location "$CORE_URL" --output "${CORE_TMP_TAR}" 2>&1 >/dev/null) - if [[ $? -ne 0 ]]; then - echo "Downloading core failed:\n${ERROR}" - exit 1 - fi - set -e # re-enable flag - mv "${CORE_TMP_TAR}" "${CORE_TAR}" - fi - - ( - cd "${TMP_DIR}" - rm -rf core - tar xjf "${CORE_TAR}" - mv core core-${REALM_CORE_VERSION} - ) - - rm -rf core-${REALM_CORE_VERSION} core - mv ${TMP_DIR}/core-${REALM_CORE_VERSION} . - ln -s core-${REALM_CORE_VERSION} core -} - -COMMAND="$1" - -# Use Debug config if command ends with -debug, otherwise default to Release -case "$COMMAND" in - *-debug) - COMMAND="${COMMAND%-debug}" - CONFIGURATION="Debug" - ;; - *) CONFIGURATION=${CONFIGURATION:-Release} -esac -export CONFIGURATION - -source "$(dirname "$0")/scripts/swift-version.sh" - -case "$COMMAND" in - - ###################################### - # Clean - ###################################### - "clean") - find . -type d -name build -exec rm -r "{}" +\; - exit 0 - ;; - - ###################################### - # Core - ###################################### - "download-core") - if [ "$REALM_CORE_VERSION" = "current" ]; then - echo "Using version of core already in core/ directory" - exit 0 - fi - if [ -d core -a -d ../realm-core -a ! -L core ]; then - # Allow newer versions than expected for local builds as testing - # with unreleased versions is one of the reasons to use a local build - if ! $(grep -i "${REALM_CORE_VERSION} Release notes" core/release_notes.txt >/dev/null); then - echo "Local build of core is out of date." - exit 1 - else - echo "The core library seems to be up to date." - fi - elif ! [ -L core ]; then - echo "core is not a symlink. Deleting..." - rm -rf core - download_core - # With a prebuilt version we only want to check the first non-empty - # line so that checking out an older commit will download the - # appropriate version of core if the already-present version is too new - elif ! $(grep -m 1 . core/release_notes.txt | grep -i "${REALM_CORE_VERSION} RELEASE NOTES" >/dev/null); then - download_core - else - echo "The core library seems to be up to date." - fi - exit 0 - ;; - - ###################################### - # Object Store - ###################################### - "push-object-store-changes") - commit="$2" - path="$3" - if [ -z "$commit" -o -z "$path" ]; then - echo "usage: sh build.sh push-object-store-changes [base commit] [path to objectore repo]" - exit 1 - fi - - # List all commits since $commit which touched the objecstore, generate - # patches for each of them, and then apply those patches to the - # objectstore repo - git rev-list --reverse $commit..HEAD -- Realm/ObjectStore \ - | xargs -I@ git format-patch --stdout @^! Realm/ObjectStore \ - | git -C $path am -p 3 --directory src - ;; - - "pull-object-store-changes") - commit="$2" - path="$3" - if [ -z "$commit" -o -z "$path" ]; then - echo "usage: sh build.sh pull-object-store-changes [base commit] [path to objectore repo]" - exit 1 - fi - - git -C $path format-patch --stdout $commit..HEAD src | git am -p 2 --directory Realm/ObjectStore --exclude='*CMake*' --reject - ;; - - ###################################### - # Swift versioning - ###################################### - "set-swift-version") - version="$2" - if [[ -z "$version" ]]; then - version="$REALM_SWIFT_VERSION" - fi - - # Update the symlinks to point to the correct verion of the source, and - # then tell git to ignore the fact that we just changed a tracked file so - # that the new symlink doesn't accidentally get committed - rm -rf RealmSwift - ln -s "RealmSwift-swift$version" RealmSwift - git update-index --assume-unchanged RealmSwift || true - - # Only write SwiftVersion.swift if RealmSwift supports the given version of Swift. - if [[ -e "RealmSwift-swift$version" ]]; then - SWIFT_VERSION_FILE="RealmSwift/SwiftVersion.swift" - CONTENTS="let swiftLanguageVersion = \"$version\"" - if [ ! -f "$SWIFT_VERSION_FILE" ] || ! grep -q "$CONTENTS" "$SWIFT_VERSION_FILE"; then - echo "$CONTENTS" > "$SWIFT_VERSION_FILE" - fi - fi - - cd Realm/Tests - rm -rf Swift - ln -s "Swift$version" Swift - git update-index --assume-unchanged Swift || true - exit 0 - ;; - - "prelaunch-simulator") - sh $(dirname $0)/scripts/reset-simulators.sh - ;; - - ###################################### - # Building - ###################################### - "build") - sh build.sh ios-static - sh build.sh ios-dynamic - sh build.sh ios-swift - sh build.sh watchos - sh build.sh watchos-swift - sh build.sh tvos - sh build.sh tvos-swift - sh build.sh osx - sh build.sh osx-swift - exit 0 - ;; - - "ios-static") - build_combined 'Realm iOS static' Realm iphoneos iphonesimulator "-static" - exit 0 - ;; - - "ios-dynamic") - build_combined Realm Realm iphoneos iphonesimulator - exit 0 - ;; - - "ios-swift") - sh build.sh ios-dynamic - build_combined RealmSwift RealmSwift iphoneos iphonesimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/ios/Realm.framework build/ios/swift-$REALM_SWIFT_VERSION - exit 0 - ;; - - "watchos") - build_combined Realm Realm watchos watchsimulator - exit 0 - ;; - - "watchos-swift") - sh build.sh watchos - build_combined RealmSwift RealmSwift watchos watchsimulator - exit 0 - ;; - - "tvos") - build_combined Realm Realm appletvos appletvsimulator - exit 0 - ;; - - "tvos-swift") - sh build.sh tvos - build_combined RealmSwift RealmSwift appletvos appletvsimulator - exit 0 - ;; - - "osx") - xc "-scheme Realm -configuration $CONFIGURATION" - rm -rf build/osx - mkdir build/osx - cp -R build/DerivedData/Realm/Build/Products/$CONFIGURATION/Realm.framework build/osx - exit 0 - ;; - - "osx-swift") - sh build.sh osx - xc "-scheme 'RealmSwift' -configuration $CONFIGURATION build" - destination="build/osx/swift-$REALM_SWIFT_VERSION" - clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/RealmSwift.framework" "$destination" "RealmSwift.framework" - cp -R build/osx/Realm.framework "$destination" - exit 0 - ;; - - ###################################### - # Analysis - ###################################### - - "analyze-osx") - xc "-scheme Realm -configuration $CONFIGURATION analyze" - exit 0 - ;; - - ###################################### - # Testing - ###################################### - "test") - set +e # Run both sets of tests even if the first fails - failed=0 - sh build.sh test-ios-static || failed=1 - sh build.sh test-ios-dynamic || failed=1 - sh build.sh test-ios-swift || failed=1 - sh build.sh test-ios-devices || failed=1 - sh build.sh test-tvos-devices || failed=1 - sh build.sh test-osx || failed=1 - sh build.sh test-osx-swift || failed=1 - exit $failed - ;; - - "test-all") - set +e - failed=0 - sh build.sh test || failed=1 - sh build.sh test-debug || failed=1 - exit $failed - ;; - - "test-ios-static") - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s' test" - exit 0 - ;; - - "test-ios7-static") - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 5S,OS=7.1' test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s,OS=7.1' test" - exit 0 - ;; - - "test-ios-dynamic") - xc_work_around_rdar_23055637 "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s' test" - exit 0 - ;; - - "test-ios-swift") - xc_work_around_rdar_23055637 "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' build test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s' build test" - exit 0 - ;; - - "test-ios-devices") - failed=0 - trap "failed=1" ERR - sh build.sh test-ios-devices-objc - sh build.sh test-ios-devices-swift - exit $failed - ;; - - "test-ios-devices-objc") - test_devices iphoneos "Realm iOS static" "$CONFIGURATION" - exit $? - ;; - - "test-ios-devices-swift") - test_devices iphoneos "RealmSwift" "$CONFIGURATION" - exit $? - ;; - - "test-tvos") - xc_work_around_rdar_23055637 "-scheme Realm -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=Apple TV 1080p' test" - exit $? - ;; - - "test-tvos-swift") - xc_work_around_rdar_23055637 "-scheme RealmSwift -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=Apple TV 1080p' test" - exit $? - ;; - - "test-tvos-devices") - test_devices appletvos TestHost "$CONFIGURATION" - ;; - - "test-osx") - COVERAGE_PARAMS="" - if [[ "$CONFIGURATION" == "Debug" ]]; then - COVERAGE_PARAMS="GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES" - fi - xc "-scheme Realm -configuration $CONFIGURATION test $COVERAGE_PARAMS" - exit 0 - ;; - - "test-osx-swift") - xc "-scheme RealmSwift -configuration $CONFIGURATION test" - exit 0 - ;; - - ###################################### - # Full verification - ###################################### - "verify") - sh build.sh verify-cocoapods - sh build.sh verify-docs - sh build.sh verify-osx - sh build.sh verify-osx-debug - sh build.sh verify-osx-swift - sh build.sh verify-osx-swift-debug - sh build.sh verify-ios-static - sh build.sh verify-ios-static-debug - sh build.sh verify-ios7-static - sh build.sh verify-ios7-static-debug - sh build.sh verify-ios-dynamic - sh build.sh verify-ios-dynamic-debug - sh build.sh verify-ios-swift - sh build.sh verify-ios-swift-debug - sh build.sh verify-ios-device-objc - sh build.sh verify-ios-device-swift - sh build.sh verify-watchos - sh build.sh verify-tvos - sh build.sh verify-tvos-debug - sh build.sh verify-tvos-device - sh build.sh verify-swiftlint - ;; - - "verify-cocoapods") - if [[ -d .git ]]; then - # Verify the current branch, unless one was already specified in the sha environment variable. - if [[ -z $sha ]]; then - export sha=$(git rev-parse --abbrev-ref HEAD) - fi - - if [[ $(git log -1 @{push}..) != "" ]] || ! git diff-index --quiet HEAD; then - echo "WARNING: verify-cocoapods will test the latest revision of $sha found on GitHub." - echo " Any unpushed local changes will not be tested." - echo "" - sleep 1 - fi - fi - - cd examples/installation - sh build.sh test-ios-objc-cocoapods - sh build.sh test-ios-objc-cocoapods-dynamic - sh build.sh test-ios-swift-cocoapods - sh build.sh test-osx-objc-cocoapods - sh build.sh test-osx-swift-cocoapods - sh build.sh test-watchos-objc-cocoapods - sh build.sh test-watchos-swift-cocoapods - ;; - - "verify-osx-encryption") - REALM_ENCRYPT_ALL=YES sh build.sh test-osx - exit 0 - ;; - - "verify-osx") - sh build.sh test-osx - sh build.sh analyze-osx - sh build.sh examples-osx - - ( - cd examples/osx/objc/build/DerivedData/RealmExamples/Build/Products/$CONFIGURATION - DYLD_FRAMEWORK_PATH=. ./JSONImport >/dev/null - ) - exit 0 - ;; - - "verify-osx-swift") - sh build.sh test-osx-swift - exit 0 - ;; - - "verify-ios-static") - sh build.sh test-ios-static - sh build.sh examples-ios - ;; - - "verify-ios7-static") - sh build.sh test-ios7-static - ;; - - "verify-ios-dynamic") - sh build.sh test-ios-dynamic - ;; - - "verify-ios-swift") - sh build.sh test-ios-swift - sh build.sh examples-ios-swift - ;; - - "verify-ios-device-objc") - sh build.sh test-ios-devices-objc - exit 0 - ;; - - "verify-ios-device-swift") - sh build.sh test-ios-devices-swift - exit 0 - ;; - - "verify-docs") - sh build.sh docs - for lang in swift objc; do - undocumented="docs/${lang}_output/undocumented.json" - if ! cat "$undocumented" | grep '"warnings":\[\]' > /dev/null 2>&1; then - echo "Undocumented Realm $lang declarations:" - cat "$undocumented" - exit 1 - fi - done - exit 0 - ;; - - "verify-watchos") - sh build.sh watchos-swift - exit 0 - ;; - - "verify-tvos") - sh build.sh test-tvos - sh build.sh test-tvos-swift - sh build.sh examples-tvos - sh build.sh examples-tvos-swift - exit 0 - ;; - - "verify-tvos-device") - sh build.sh test-tvos-devices - exit 0 - ;; - - "verify-swiftlint") - swiftlint lint --strict - exit 0 - ;; - - ###################################### - # Docs - ###################################### - "docs") - build_docs objc - build_docs swift - exit 0 - ;; - - ###################################### - # Examples - ###################################### - "examples") - sh build.sh clean - sh build.sh examples-ios - sh build.sh examples-ios-swift - sh build.sh examples-osx - sh build.sh examples-tvos - sh build.sh examples-tvos-swift - exit 0 - ;; - - "examples-ios") - sh build.sh prelaunch-simulator - if [[ -d "examples/ios/objc" ]]; then - workspace="examples/ios/objc/RealmExamples.xcworkspace" - else - workspace="examples/ios/xcode-7/objc/RealmExamples.xcworkspace" - fi - pod install --project-directory="$workspace/.." --no-repo-update - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme RACTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - - if [ ! -z "${JENKINS_HOME}" ]; then - xc "-workspace $workspace -scheme Extension -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - fi - - exit 0 - ;; - - "examples-ios-swift") - sh build.sh prelaunch-simulator - workspace="examples/ios/swift-$REALM_SWIFT_VERSION/RealmExamples.xcworkspace" - pod install --project-directory="$workspace/.." --no-repo-update - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme ReactKitTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - exit 0 - ;; - - "examples-osx") - xc "-workspace examples/osx/objc/RealmExamples.xcworkspace -scheme JSONImport -configuration ${CONFIGURATION} build ${CODESIGN_PARAMS}" - ;; - - "examples-tvos") - workspace="examples/tvos/objc/RealmExamples.xcworkspace" - xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - exit 0 - ;; - - "examples-tvos-swift") - workspace="examples/tvos/swift/RealmExamples.xcworkspace" - xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - exit 0 - ;; - - ###################################### - # Versioning - ###################################### - "get-version") - version_file="Realm/Realm-Info.plist" - echo "$(PlistBuddy -c "Print :CFBundleVersion" "$version_file")" - exit 0 - ;; - - "set-version") - realm_version="$2" - version_files="Realm/Realm-Info.plist" - - if [ -z "$realm_version" ]; then - echo "You must specify a version." - exit 1 - fi - for version_file in $version_files; do - PlistBuddy -c "Set :CFBundleVersion $realm_version" "$version_file" - PlistBuddy -c "Set :CFBundleShortVersionString $realm_version" "$version_file" - done - exit 0 - ;; - - ###################################### - # Bitcode Detection - ###################################### - - "binary-has-bitcode") - BINARY="$2" - # Although grep has a '-q' flag to prevent logging to stdout, grep - # behaves differently when used, so redirect stdout to /dev/null. - if otool -l "$BINARY" | grep "segname __LLVM" > /dev/null 2>&1; then - exit 0 - fi - # Work around rdar://21826157 by checking for bitcode in thin binaries - - # Get architectures for binary - archs="$(lipo -info "$BINARY" | rev | cut -d ':' -f1 | rev)" - - archs_array=( $archs ) - if [[ ${#archs_array[@]} < 2 ]]; then - exit 1 # Early exit if not a fat binary - fi - - TEMPDIR=$(mktemp -d $TMPDIR/realm-bitcode-check.XXXX) - - for arch in $archs; do - lipo -thin "$arch" "$BINARY" -output "$TEMPDIR/$arch" - if otool -l "$TEMPDIR/$arch" | grep -q "segname __LLVM"; then - exit 0 - fi - done - exit 1 - ;; - - ###################################### - # CocoaPods - ###################################### - "cocoapods-setup") - if [ ! -d core ]; then - sh build.sh download-core - fi - - # CocoaPods won't automatically preserve files referenced via symlinks - for symlink in $(find . -not -path "./.git/*" -type l); do - if [[ -L "$symlink" ]]; then - link="$(dirname "$symlink")/$(readlink "$symlink")" - rm "$symlink" - cp -RH "$link" "$symlink" - fi - done - - if [[ "$2" != "swift" ]]; then - rm -rf include - mkdir -p include - mv core/include include/core - - mkdir -p include/impl/apple - mkdir -p include/util - cp Realm/*.hpp include - cp Realm/ObjectStore/*.hpp include - cp Realm/ObjectStore/impl/*.hpp include/impl - cp Realm/ObjectStore/impl/apple/*.hpp include/impl/apple - cp Realm/ObjectStore/util/*.hpp include/util - - touch Realm/RLMPlatform.h - if [ -n "$COCOAPODS_VERSION" ]; then - # This variable is set for the prepare_command available - # from the 1.0 prereleases, which requires a different - # header layout within the header_mappings_dir. - cp Realm/*.h include - else - # For CocoaPods < 1.0, we need to scope the headers within - # the header_mappings_dir by another subdirectory to avoid - # Clang from complaining about non-modular headers. - mkdir -p include/Realm - cp Realm/*.h include/Realm - fi - else - echo "let swiftLanguageVersion = \"$(get_swift_version)\"" > RealmSwift/SwiftVersion.swift - fi - ;; - - ###################################### - # Continuous Integration - ###################################### - - "ci-pr") - mkdir -p build/reports - - if [ "$target" = "docs" ]; then - sh build.sh set-swift-version - sh build.sh verify-docs - elif [ "$target" = "swiftlint" ]; then - sh build.sh verify-swiftlint - else - export sha=$ghprbSourceBranch - export REALM_SWIFT_VERSION=$swift_version - export CONFIGURATION=$configuration - export REALM_EXTRA_BUILD_ARGUMENTS='GCC_GENERATE_DEBUGGING_SYMBOLS=NO REALM_PREFIX_HEADER=Realm/RLMPrefix.h' - sh build.sh prelaunch-simulator - # Verify that no Realm files still exist - ! find ~/Library/Developer/CoreSimulator/Devices/ -name '*.realm' | grep -q . - - sh build.sh verify-$target | tee build/build.log | xcpretty -r junit -o build/reports/junit.xml || \ - (echo "\n\n***\nbuild/build.log\n***\n\n" && cat build/build.log && exit 1) - fi - - if [ "$target" = "osx" ] && [ "$configuration" = "Debug" ]; then - gcovr -r . -f ".*Realm.*" -e ".*Tests.*" -e ".*core.*" --xml > build/reports/coverage-report.xml - WS=$(pwd | sed "s/\//\\\\\//g") - sed -i ".bak" "s/\./${WS}/" build/reports/coverage-report.xml - fi - ;; - - ###################################### - # Release packaging - ###################################### - - "package-examples") - cd tightdb_objc - ./scripts/package_examples.rb - zip --symlinks -r realm-examples.zip examples -x "examples/installation/*" - ;; - - "package-test-examples") - if ! VERSION=$(echo realm-objc-*.zip | grep -o '\d*\.\d*\.\d*-[a-z]*'); then - VERSION=$(echo realm-objc-*.zip | grep -o '\d*\.\d*\.\d*') - fi - OBJC="realm-objc-${VERSION}" - SWIFT="realm-swift-${VERSION}" - unzip ${OBJC}.zip - - cp $0 ${OBJC} - cp -r $(dirname $0)/scripts ${OBJC} - cd ${OBJC} - sh build.sh examples-ios - sh build.sh examples-osx - cd .. - rm -rf ${OBJC} - - unzip ${SWIFT}.zip - - cp $0 ${SWIFT} - cp -r $(dirname $0)/scripts ${SWIFT} - cd ${SWIFT} - sh build.sh examples-ios-swift - cd .. - rm -rf ${SWIFT} - ;; - - "package-ios-static") - cd tightdb_objc - - sh build.sh prelaunch-simulator - sh build.sh test-ios-static - sh build.sh ios-static - move_to_clean_dir build/ios-static/Realm.framework xcode-7 - - zip --symlinks -r build/ios-static/realm-framework-ios.zip xcode-7 - ;; - - "package-ios-dynamic") - cd tightdb_objc - - sh build.sh prelaunch-simulator - sh build.sh ios-dynamic - move_to_clean_dir build/ios/Realm.framework xcode-7 - - zip --symlinks -r build/ios/realm-dynamic-framework-ios.zip xcode-7 - ;; - - "package-osx") - cd tightdb_objc - sh build.sh test-osx - - cd build/DerivedData/Realm/Build/Products/Release - zip --symlinks -r realm-framework-osx.zip Realm.framework - ;; - - "package-ios-swift") - cd tightdb_objc - rm -rf build/ios/Realm.framework - sh build.sh prelaunch-simulator - sh build.sh ios-swift - - cd build/ios - zip --symlinks -r realm-swift-framework-ios.zip swift-2.2 - ;; - - "package-osx-swift") - cd tightdb_objc - sh build.sh osx-swift - - cd build/osx - zip --symlinks -r realm-swift-framework-osx.zip swift-2.2 - ;; - - "package-watchos") - cd tightdb_objc - sh build.sh watchos - - cd build/watchos - zip --symlinks -r realm-framework-watchos.zip Realm.framework - ;; - - "package-watchos-swift") - cd tightdb_objc - sh build.sh watchos-swift - - cd build/watchos - zip --symlinks -r realm-swift-framework-watchos.zip RealmSwift.framework Realm.framework - ;; - - "package-tvos") - cd tightdb_objc - sh build.sh tvos - - cd build/tvos - zip --symlinks -r realm-framework-tvos.zip Realm.framework - ;; - - "package-tvos-swift") - cd tightdb_objc - sh build.sh tvos-swift - - cd build/tvos - zip --symlinks -r realm-swift-framework-tvos.zip RealmSwift.framework Realm.framework - ;; - - "package-release") - LANG="$2" - TEMPDIR=$(mktemp -d $TMPDIR/realm-release-package-${LANG}.XXXX) - - cd tightdb_objc - VERSION=$(sh build.sh get-version) - cd .. - - FOLDER=${TEMPDIR}/realm-${LANG}-${VERSION} - - mkdir -p ${FOLDER}/osx ${FOLDER}/ios ${FOLDER}/watchos ${FOLDER}/tvos - - if [[ "${LANG}" == "objc" ]]; then - mkdir -p ${FOLDER}/ios/static - mkdir -p ${FOLDER}/ios/dynamic - mkdir -p ${FOLDER}/Swift - - ( - cd ${FOLDER}/osx - unzip ${WORKSPACE}/realm-framework-osx.zip - ) - - ( - cd ${FOLDER}/ios/static - unzip ${WORKSPACE}/realm-framework-ios.zip - ) - - ( - cd ${FOLDER}/ios/dynamic - unzip ${WORKSPACE}/realm-dynamic-framework-ios.zip - ) - - ( - cd ${FOLDER}/watchos - unzip ${WORKSPACE}/realm-framework-watchos.zip - ) - - ( - cd ${FOLDER}/tvos - unzip ${WORKSPACE}/realm-framework-tvos.zip - ) - else - ( - cd ${FOLDER}/osx - unzip ${WORKSPACE}/realm-swift-framework-osx.zip - ) - - ( - cd ${FOLDER}/ios - unzip ${WORKSPACE}/realm-swift-framework-ios.zip - ) - - ( - cd ${FOLDER}/watchos - unzip ${WORKSPACE}/realm-swift-framework-watchos.zip - ) - - ( - cd ${FOLDER}/tvos - unzip ${WORKSPACE}/realm-swift-framework-tvos.zip - ) - fi - - ( - cd ${WORKSPACE}/tightdb_objc - cp -R plugin ${FOLDER} - cp LICENSE ${FOLDER}/LICENSE.txt - if [[ "${LANG}" == "objc" ]]; then - cp Realm/Swift/RLMSupport.swift ${FOLDER}/Swift/ - fi - ) - - ( - cd ${FOLDER} - unzip ${WORKSPACE}/realm-examples.zip - cd examples - if [[ "${LANG}" == "objc" ]]; then - rm -rf ios/swift-2.2 - else - rm -rf ios/objc ios/rubymotion osx - fi - ) - - cat > ${FOLDER}/docs.webloc < - - - - URL - https://realm.io/docs/${LANG}/${VERSION} - - -EOF - - ( - cd ${TEMPDIR} - zip --symlinks -r realm-${LANG}-${VERSION}.zip realm-${LANG}-${VERSION} - mv realm-${LANG}-${VERSION}.zip ${WORKSPACE} - ) - ;; - - "test-package-release") - # Generate a release package locally for testing purposes - # Real releases should always be done via Jenkins - if [ -z "${WORKSPACE}" ]; then - echo 'WORKSPACE must be set to a directory to assemble the release in' - exit 1 - fi - if [ -d "${WORKSPACE}" ]; then - echo 'WORKSPACE directory should not already exist' - exit 1 - fi - - REALM_SOURCE="$(pwd)" - mkdir -p "$WORKSPACE" - WORKSPACE="$(cd "$WORKSPACE" && pwd)" - export WORKSPACE - cd $WORKSPACE - git clone $REALM_SOURCE tightdb_objc - - echo 'Packaging iOS static' - sh tightdb_objc/build.sh package-ios-static - cp tightdb_objc/build/ios-static/realm-framework-ios.zip . - - echo 'Packaging iOS dynamic' - sh tightdb_objc/build.sh package-ios-dynamic - cp tightdb_objc/build/ios/realm-dynamic-framework-ios.zip . - - echo 'Packaging OS X' - sh tightdb_objc/build.sh package-osx - cp tightdb_objc/build/DerivedData/Realm/Build/Products/Release/realm-framework-osx.zip . - - echo 'Packaging examples' - ( - cd tightdb_objc/examples - git clean -xfd - ) - sh tightdb_objc/build.sh package-examples - cp tightdb_objc/realm-examples.zip . - - echo 'Packaging iOS Swift' - sh tightdb_objc/build.sh package-ios-swift - cp tightdb_objc/build/ios/realm-swift-framework-ios.zip . - - echo 'Packaging OS X Swift' - sh tightdb_objc/build.sh package-osx-swift - cp tightdb_objc/build/osx/realm-swift-framework-osx.zip . - - echo 'Packaging watchOS' - sh tightdb_objc/build.sh package-watchos - sh tightdb_objc/build.sh package-watchos-swift - cp tightdb_objc/build/watchos/realm-swift-framework-watchos.zip . - cp tightdb_objc/build/watchos/realm-framework-watchos.zip . - - echo 'Packaging tvOS' - sh tightdb_objc/build.sh package-tvos - sh tightdb_objc/build.sh package-tvos-swift - cp tightdb_objc/build/tvos/realm-swift-framework-tvos.zip . - cp tightdb_objc/build/tvos/realm-framework-tvos.zip . - - echo 'Building final release packages' - sh tightdb_objc/build.sh package-release objc - sh tightdb_objc/build.sh package-release swift - - echo 'Testing packaged examples' - sh tightdb_objc/build.sh package-test-examples - - ;; - - "github-release") - if [ -z "${GITHUB_ACCESS_TOKEN}" ]; then - echo 'GITHUB_ACCESS_TOKEN must be set to create GitHub releases' - exit 1 - fi - ./scripts/github_release.rb - ;; - - "add-empty-changelog") - empty_section=$(cat < CHANGELOG.md - echo >> CHANGELOG.md - echo "$changelog" >> CHANGELOG.md - ;; - - *) - echo "Unknown command '$COMMAND'" - usage - exit 1 - ;; -esac diff --git a/Pods/Realm/core/librealm-ios.a b/Pods/Realm/core/librealm-ios.a deleted file mode 100644 index 7e51484e..00000000 Binary files a/Pods/Realm/core/librealm-ios.a and /dev/null differ diff --git a/Pods/Realm/include/RLMAccessor.h b/Pods/Realm/include/RLMAccessor.h deleted file mode 100644 index adb3f05f..00000000 --- a/Pods/Realm/include/RLMAccessor.h +++ /dev/null @@ -1,63 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - - -@class RLMObjectSchema, RLMProperty, RLMObjectBase, RLMProperty; - -#ifdef __cplusplus -typedef NSUInteger RLMCreationOptions; -#else -typedef NS_OPTIONS(NSUInteger, RLMCreationOptions); -#endif - -NS_ASSUME_NONNULL_BEGIN - -// -// Accessors Class Creation/Caching -// - -// get accessor classes for an object class - generates classes if not cached -Class RLMAccessorClassForObjectClass(Class objectClass, RLMObjectSchema *schema, NSString *prefix); -Class RLMStandaloneAccessorClassForObjectClass(Class objectClass, RLMObjectSchema *schema); - -// Check if a given class is a generated accessor class -bool RLMIsGeneratedClass(Class cls); - -// -// Dynamic getters/setters -// -FOUNDATION_EXTERN void RLMDynamicValidatedSet(RLMObjectBase *obj, NSString *propName, id __nullable val); -FOUNDATION_EXTERN RLMProperty *RLMValidatedGetProperty(RLMObjectBase *obj, NSString *propName); -FOUNDATION_EXTERN id __nullable RLMDynamicGet(RLMObjectBase *obj, RLMProperty *prop); - -// by property/column -FOUNDATION_EXTERN void RLMDynamicSet(RLMObjectBase *obj, RLMProperty *prop, id val, RLMCreationOptions options); - -// -// Class modification -// - -// Replace className method for the given class -void RLMReplaceClassNameMethod(Class accessorClass, NSString *className); - -// Replace sharedSchema method for the given class -void RLMReplaceSharedSchemaMethod(Class accessorClass, RLMObjectSchema * __nullable schema); - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMAnalytics.hpp b/Pods/Realm/include/RLMAnalytics.hpp deleted file mode 100644 index 76bc4294..00000000 --- a/Pods/Realm/include/RLMAnalytics.hpp +++ /dev/null @@ -1,55 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -// Asynchronously submits build information to Realm if running in an iOS -// simulator or on OS X if a debugger is attached. Does nothing if running on an -// iOS / watchOS device or if a debugger is *not* attached. -// -// To be clear: this does *not* run when your app is in production or on -// your end-user’s devices; it will only run in the simulator or when a debugger -// is attached. -// -// Why are we doing this? In short, because it helps us build a better product -// for you. None of the data personally identifies you, your employer or your -// app, but it *will* help us understand what language you use, what iOS -// versions you target, etc. Having this info will help prioritizing our time, -// adding new features and deprecating old features. Collecting an anonymized -// bundle & anonymized MAC is the only way for us to count actual usage of the -// other metrics accurately. If we don’t have a way to deduplicate the info -// reported, it will be useless, as a single developer building their Swift app -// 10 times would report 10 times more than a single Objective-C developer that -// only builds once, making the data all but useless. -// No one likes sharing data unless it’s necessary, we get it, and we’ve -// debated adding this for a long long time. Since Realm is a free product -// without an email signup, we feel this is a necessary step so we can collect -// relevant data to build a better product for you. If you truly, absolutely -// feel compelled to not send this data back to Realm, then you can set an env -// variable named REALM_DISABLE_ANALYTICS. Since Realm is free we believe -// letting these analytics run is a small price to pay for the product & support -// we give you. -// -// Currently the following information is reported: -// - What version of Realm is being used, and from which language (obj-c or Swift). -// - What version of OS X it's running on (in case Xcode aggressively drops -// support for older versions again, we need to know what we need to support). -// - The minimum iOS/OS X version that the application is targeting (again, to -// help us decide what versions we need to support). -// - An anonymous MAC address and bundle ID to aggregate the other information on. -// - What version of Swift is being used (if applicable). - -void RLMSendAnalytics(); diff --git a/Pods/Realm/include/RLMArray.h b/Pods/Realm/include/RLMArray.h deleted file mode 100644 index fc2ef9fb..00000000 --- a/Pods/Realm/include/RLMArray.h +++ /dev/null @@ -1,369 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMObject, RLMRealm, RLMResults, RLMNotificationToken; - -/** - `RLMArray` is the container type in Realm used to define to-many relationships. - - Unlike an `NSArray`, `RLMArray`s hold a single type, specified by the `objectClassName` property. - This is referred to in these docs as the “type” of the array. - - When declaring an `RLMArray` property, the type must be marked as conforming to a - protocol by the same name as the objects it should contain (see the - `RLM_ARRAY_TYPE` macro). In addition, the property can be declared using Objective-C - generics for better compile-time type safety. - - RLM_ARRAY_TYPE(ObjectType) - ... - @property RLMArray *arrayOfObjectTypes; - - `RLMArray`s can be queried with the same predicates as `RLMObject` and `RLMResult`s. - - `RLMArray`s cannot be created directly. `RLMArray` properties on `RLMObject`s are - lazily created when accessed, or can be obtained by querying a Realm. - - ### Key-Value Observing - - `RLMArray` supports array key-value observing on `RLMArray` properties on `RLMObject` - subclasses, and the `invalidated` property on `RLMArray` instances themselves is - key-value observing compliant when the `RLMArray` is attached to a managed - `RLMObject` (`RLMArray`s on unmanaged `RLMObject`s will never become invalidated). - - Because `RLMArray`s are attached to the object which they are a property of, they - do not require using the mutable collection proxy objects from - `-mutableArrayValueForKey:` or KVC-compatible mutation methods on the containing - object. Instead, you can call the mutation methods on the `RLMArray` directly. - */ - -@interface RLMArray : NSObject - -#pragma mark - Properties - -/** - The number of objects in the array. - */ -@property (nonatomic, readonly, assign) NSUInteger count; - -/** - The class name (i.e. type) of the `RLMObject`s contained in the array. - */ -@property (nonatomic, readonly, copy) NSString *objectClassName; - -/** - The Realm which manages the array. Returns `nil` for unmanaged arrays. - */ -@property (nonatomic, readonly, nullable) RLMRealm *realm; - -/** - Indicates if the array can no longer be accessed. - */ -@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated; - -#pragma mark - Accessing Objects from an Array - -/** - Returns the object at the index specified. - - @param index The index to look up. - - @return An `RLMObject` of the type contained in the array. - */ -- (RLMObjectType)objectAtIndex:(NSUInteger)index; - -/** - Returns the first object in the array. - - Returns `nil` if called on an empty array. - - @return An `RLMObject` of the type contained in the array. - */ -- (nullable RLMObjectType)firstObject; - -/** - Returns the last object in the array. - - Returns `nil` if called on an empty array. - - @return An `RLMObject` of the type contained in the array. - */ -- (nullable RLMObjectType)lastObject; - - - -#pragma mark - Adding, Removing, and Replacing Objects in an Array - -/** - Adds an object to the end of the array. - - @warning This method may only be called during a write transaction. - - @param object An `RLMObject` of the type contained in the array. - */ -- (void)addObject:(RLMObjectType)object; - -/** - Adds an array of objects to the end of the array. - - @warning This method may only be called during a write transaction. - - @param objects An enumerable object such as `NSArray` or `RLMResults` which contains objects of the - same class as the array. - */ -- (void)addObjects:(id)objects; - -/** - Inserts an object at the given index. - - Throws an exception if the index exceeds the bounds of the array. - - @warning This method may only be called during a write transaction. - - @param anObject An `RLMObject` of the type contained in the array. - @param index The index at which to insert the object. - */ -- (void)insertObject:(RLMObjectType)anObject atIndex:(NSUInteger)index; - -/** - Removes an object at the given index. - - Throws an exception if the index exceeds the bounds of the array. - - @warning This method may only be called during a write transaction. - - @param index The array index identifying the object to be removed. - */ -- (void)removeObjectAtIndex:(NSUInteger)index; - -/** - Removes the last object in the array. - - @warning This method may only be called during a write transaction. -*/ -- (void)removeLastObject; - -/** - Removes all objects from the array. - - @warning This method may only be called during a write transaction. - */ -- (void)removeAllObjects; - -/** - Replaces an object at the given index with a new object. - - Throws an exception if the index exceeds the bounds of the array. - - @warning This method may only be called during a write transaction. - - @param index The index of the object to be replaced. - @param anObject An object (of the same type as returned from the `objectClassName` selector). - */ -- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(RLMObjectType)anObject; - -/** - Moves the object at the given source index to the given destination index. - - Throws an exception if the index exceeds the bounds of the array. - - @warning This method may only be called during a write transaction. - - @param sourceIndex The index of the object to be moved. - @param destinationIndex The index to which the object at `sourceIndex` should be moved. - */ -- (void)moveObjectAtIndex:(NSUInteger)sourceIndex toIndex:(NSUInteger)destinationIndex; - -/** - Exchanges the objects in the array at given indices. - - Throws an exception if either index exceeds the bounds of the array. - - @warning This method may only be called during a write transaction. - - @param index1 The index of the object which should replace the object at index `index2`. - @param index2 The index of the object which should replace the object at index `index1`. - */ -- (void)exchangeObjectAtIndex:(NSUInteger)index1 withObjectAtIndex:(NSUInteger)index2; - -#pragma mark - Querying an Array - -/** - Returns the index of an object in the array. - - Returns `NSNotFound` if the object is not found in the array. - - @param object An object (of the same type as returned from the `objectClassName` selector). - */ -- (NSUInteger)indexOfObject:(RLMObjectType)object; - -/** - Returns the index of the first object in the array matching the predicate. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return The index of the object, or `NSNotFound` if the object is not found in the array. - */ -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ...; - -/// :nodoc: -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args; - -/** - Returns the index of the first object in the array matching the predicate. - - @param predicate The predicate with which to filter the objects. - - @return The index of the object, or `NSNotFound` if the object is not found in the array. - */ -- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate; - -/** - Returns all the objects matching the given predicate in the array. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return An `RLMResults` of objects that match the given predicate. - */ -- (RLMResults *)objectsWhere:(NSString *)predicateFormat, ...; - -/// :nodoc: -- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args; - -/** - Returns all the objects matching the given predicate in the array. - - @param predicate The predicate with which to filter the objects. - - @return An `RLMResults` of objects that match the given predicate - */ -- (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate; - -/** - Returns a sorted `RLMResults` from the array. - - @param property The property name to sort by. - @param ascending The direction to sort in. - - @return An `RLMResults` sorted by the specified property. - */ -- (RLMResults *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending; - -/** - Returns a sorted `RLMResults` from the array. - - @param properties An array of `RLMSortDescriptor`s to sort by. - - @return An `RLMResults` sorted by the specified properties. - */ -- (RLMResults *)sortedResultsUsingDescriptors:(NSArray *)properties; - -/// :nodoc: -- (RLMObjectType)objectAtIndexedSubscript:(NSUInteger)index; - -/// :nodoc: -- (void)setObject:(RLMObjectType)newValue atIndexedSubscript:(NSUInteger)index; - -#pragma mark - Notifications - -/** - Registers a block to be called each time the array changes. - - The block will be asynchronously called with the initial array, and then - called again after each write transaction which changes any of the objects in - the array, which objects are in the results, or the order of the objects in the - array. - - The `changes` parameter will be `nil` the first time the block is called. - For each call after that, it will contain information about - which rows in the array were added, removed or modified. If a write transaction - did not modify any objects in the array, the block is not called at all. - See the `RLMCollectionChange` documentation for information on how the changes - are reported and an example of updating a `UITableView`. - - If an error occurs the block will be called with `nil` for the results - parameter and a non-`nil` error. Currently the only errors that can occur are - when opening the Realm on the background worker thread. - - Notifications are delivered via the standard run loop, and so can't be - delivered while the run loop is blocked by other activity. When - notifications can't be delivered instantly, multiple notifications may be - coalesced into a single notification. This can include the notification - with the initial results. For example, the following code performs a write - transaction immediately after adding the notification block, so there is no - opportunity for the initial notification to be delivered first. As a - result, the initial notification will reflect the state of the Realm after - the write transaction. - - Person *person = [[Person allObjectsInRealm:realm] firstObject]; - NSLog(@"person.dogs.count: %zu", person.dogs.count); // => 0 - self.token = [person.dogs addNotificationBlock(RLMArray *dogs, - RLMCollectionChange *changes, - NSError *error) { - // Only fired once for the example - NSLog(@"dogs.count: %zu", dogs.count) // => 1 - }]; - [realm transactionWithBlock:^{ - Dog *dog = [[Dog alloc] init]; - dog.name = @"Rex"; - [person.dogs addObject:dog]; - }]; - // end of run loop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `-stop` on the token. - - @warning This method cannot be called during a write transaction, or when the - containing Realm is read-only. - @warning This method may only be called on a managed array. - - @param block The block to be called each time the array changes. - @return A token which must be held for as long as you want updates to be delivered. - */ -- (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMArray *__nullable array, - RLMCollectionChange *__nullable changes, - NSError *__nullable error))block __attribute__((warn_unused_result)); - -#pragma mark - Unavailable Methods - -/** - `-[RLMArray init]` is not available because `RLMArray`s cannot be created directly. - `RLMArray` properties on `RLMObject`s are lazily created when accessed, or can be obtained by querying a Realm. - */ -- (instancetype)init __attribute__((unavailable("RLMArrays cannot be created directly"))); - -/** - `+[RLMArray new]` is not available because `RLMArray`s cannot be created directly. - `RLMArray` properties on `RLMObject`s are lazily created when accessed, or can be obtained by querying a Realm. - */ -+ (instancetype)new __attribute__((unavailable("RLMArrays cannot be created directly"))); - -@end - -/// :nodoc: -@interface RLMArray (Swift) -// for use only in Swift class definitions -- (instancetype)initWithObjectClassName:(NSString *)objectClassName; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMArray_Private.h b/Pods/Realm/include/RLMArray_Private.h deleted file mode 100644 index 592dd57f..00000000 --- a/Pods/Realm/include/RLMArray_Private.h +++ /dev/null @@ -1,24 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@interface RLMArray () -- (instancetype)initWithObjectClassName:(NSString *)objectClassName; -- (NSString *)descriptionWithMaxDepth:(NSUInteger)depth; -@end diff --git a/Pods/Realm/include/RLMArray_Private.hpp b/Pods/Realm/include/RLMArray_Private.hpp deleted file mode 100644 index 7eb9eb59..00000000 --- a/Pods/Realm/include/RLMArray_Private.hpp +++ /dev/null @@ -1,80 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMArray_Private.h" - -#import "RLMCollection_Private.hpp" - -#import - -#import -#import - -namespace realm { - class LinkView; - class Results; - class TableView; - struct SortOrder; -} - -@class RLMObjectBase; -@class RLMObjectSchema; -class RLMObservationInfo; - -@interface RLMArray () { - @protected - NSString *_objectClassName; - @public - // The name of the property which this RLMArray represents - NSString *_key; - __weak RLMObjectBase *_parentObject; -} -@end - -// -// LinkView backed RLMArray subclass -// -@interface RLMArrayLinkView : RLMArray -@property (nonatomic, unsafe_unretained) RLMObjectSchema *objectSchema; - -+ (RLMArrayLinkView *)arrayWithObjectClassName:(NSString *)objectClassName - view:(realm::LinkViewRef)view - realm:(RLMRealm *)realm - key:(NSString *)key - parentSchema:(RLMObjectSchema *)parentSchema; - -// deletes all objects in the RLMArray from their containing realms -- (void)deleteObjectsFromRealm; -@end - -void RLMValidateArrayObservationKey(NSString *keyPath, RLMArray *array); - -// Initialize the observation info for an array if needed -void RLMEnsureArrayObservationInfo(std::unique_ptr& info, - NSString *keyPath, RLMArray *array, id observed); - - -// -// RLMResults private methods -// -@interface RLMResults () -+ (instancetype)resultsWithObjectSchema:(RLMObjectSchema *)objectSchema - results:(realm::Results)results; - -- (void)deleteObjectsFromRealm; -@end diff --git a/Pods/Realm/include/RLMCollection.h b/Pods/Realm/include/RLMCollection.h deleted file mode 100644 index 030fcc76..00000000 --- a/Pods/Realm/include/RLMCollection.h +++ /dev/null @@ -1,325 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMRealm, RLMResults, RLMObject, RLMSortDescriptor, RLMNotificationToken, RLMCollectionChange; - -/** - A homogenous collection of `RLMObject` instances. Examples of conforming types include `RLMArray`, - `RLMResults`, and `RLMLinkingObjects`. - */ -@protocol RLMCollection - -@required - -#pragma mark - Properties - -/** - The number of objects in the collection. - */ -@property (nonatomic, readonly, assign) NSUInteger count; - -/** - The class name (i.e. type) of the `RLMObject`s contained in the collection. - */ -@property (nonatomic, readonly, copy) NSString *objectClassName; - -/** - The Realm which manages the collection, or `nil` for unmanaged collections. - */ -@property (nonatomic, readonly) RLMRealm *realm; - -#pragma mark - Accessing Objects from a Collection - -/** - Returns the object at the index specified. - - @param index The index to look up. - - @return An `RLMObject` of the type contained in the collection. - */ -- (id)objectAtIndex:(NSUInteger)index; - -/** - Returns the first object in the collection. - - Returns `nil` if called on an empty collection. - - @return An `RLMObject` of the type contained in the collection. - */ -- (nullable id)firstObject; - -/** - Returns the last object in the collection. - - Returns `nil` if called on an empty collection. - - @return An `RLMObject` of the type contained in the collection. - */ -- (nullable id)lastObject; - -#pragma mark - Querying a Collection - -/** - Returns the index of an object in the collection. - - Returns `NSNotFound` if the object is not found in the collection. - - @param object An object (of the same type as returned from the `objectClassName` selector). - */ -- (NSUInteger)indexOfObject:(RLMObject *)object; - -/** - Returns the index of the first object in the collection matching the predicate. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return The index of the object, or `NSNotFound` if the object is not found in the collection. - */ -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ...; - -/// :nodoc: -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args; - -/** - Returns the index of the first object in the collection matching the predicate. - - @param predicate The predicate with which to filter the objects. - - @return The index of the object, or `NSNotFound` if the object is not found in the collection. - */ -- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate; - -/** - Returns all objects matching the given predicate in the collection. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return An `RLMResults` containing objects that match the given predicate. - */ -- (RLMResults *)objectsWhere:(NSString *)predicateFormat, ...; - -/// :nodoc: -- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args; - -/** - Returns all objects matching the given predicate in the collection. - - @param predicate The predicate with which to filter the objects. - - @return An `RLMResults` containing objects that match the given predicate. - */ -- (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate; - -/** - Returns a sorted `RLMResults` from the collection. - - @param property The property name to sort by. - @param ascending The direction to sort in. - - @return An `RLMResults` sorted by the specified property. - */ -- (RLMResults *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending; - -/** - Returns a sorted `RLMResults` from the collection. - - @param properties An array of `RLMSortDescriptor`s to sort by. - - @return An `RLMResults` sorted by the specified properties. - */ -- (RLMResults *)sortedResultsUsingDescriptors:(NSArray *)properties; - -/// :nodoc: -- (id)objectAtIndexedSubscript:(NSUInteger)index; - -/** - Returns an `NSArray` containing the results of invoking `valueForKey:` using `key` on each of the collection's objects. - - @param key The name of the property. - - @return An `NSArray` containing results. - */ -- (nullable id)valueForKey:(NSString *)key; - -/** - Invokes `setValue:forKey:` on each of the collection's objects using the specified `value` and `key`. - - @warning This method may only be called during a write transaction. - - @param value The object value. - @param key The name of the property. - */ -- (void)setValue:(nullable id)value forKey:(NSString *)key; - -#pragma mark - Notifications - -/** - Registers a block to be called each time the collection changes. - - The block will be asynchronously called with the initial collection, and then - called again after each write transaction which changes either any of the - objects in the collection, or which objects are in the collection. - - The `change` parameter will be `nil` the first time the block is called. - For each call after that, it will contain information about - which rows in the collection were added, removed or modified. If a write transaction - did not modify any objects in this collection, the block is not called at all. - See the `RLMCollectionChange` documentation for information on how the changes - are reported and an example of updating a `UITableView`. - - If an error occurs the block will be called with `nil` for the collection - parameter and a non-`nil` error. Currently the only errors that can occur are - when opening the Realm on the background worker thread. - - At the time when the block is called, the collection object will be fully - evaluated and up-to-date, and as long as you do not perform a write transaction - on the same thread or explicitly call `-[RLMRealm refresh]`, accessing it will - never perform blocking work. - - Notifications are delivered via the standard run loop, and so can't be - delivered while the run loop is blocked by other activity. When - notifications can't be delivered instantly, multiple notifications may be - coalesced into a single notification. This can include the notification - with the initial collection. For example, the following code performs a write - transaction immediately after adding the notification block, so there is no - opportunity for the initial notification to be delivered first. As a - result, the initial notification will reflect the state of the Realm after - the write transaction. - - id collection = [Dog allObjects]; - NSLog(@"dogs.count: %zu", dogs.count); // => 0 - self.token = [collection addNotificationBlock:^(id dogs, - RLMCollectionChange *changes, - NSError *error) { - // Only fired once for the example - NSLog(@"dogs.count: %zu", dogs.count); // => 1 - }]; - [realm transactionWithBlock:^{ - Dog *dog = [[Dog alloc] init]; - dog.name = @"Rex"; - [realm addObject:dog]; - }]; - // end of run loop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `-stop` on the token. - - @warning This method cannot be called during a write transaction, or when the - containing Realm is read-only. - - @param block The block to be called each time the collection changes. - @return A token which must be held for as long as you want collection notifications to be delivered. - */ -- (RLMNotificationToken *)addNotificationBlock:(void (^)(id __nullable collection, - RLMCollectionChange *__nullable change, - NSError *__nullable error))block __attribute__((warn_unused_result)); - -@end - -/** - An `RLMSortDescriptor` stores a property name and a sort order for use with - `sortedResultsUsingDescriptors:`. It is similar to `NSSortDescriptor`, but supports - only the subset of functionality which can be efficiently run by Realm's query - engine. - - `RLMSortDescriptor` instances are immutable. - */ -@interface RLMSortDescriptor : NSObject - -#pragma mark - Properties - -/** - The name of the property which the sort descriptor orders results by. - */ -@property (nonatomic, readonly) NSString *property; - -/** - Whether the descriptor sorts in ascending or descending order. - */ -@property (nonatomic, readonly) BOOL ascending; - -#pragma mark - Methods - -/** - Returns a new sort descriptor for the given property name and sort direction. - */ -+ (instancetype)sortDescriptorWithProperty:(NSString *)propertyName ascending:(BOOL)ascending; - -/** - Returns a copy of the receiver with the sort direction reversed. - */ -- (instancetype)reversedSortDescriptor; - -@end - -/** - A `RLMCollectionChange` object encapsulates information about changes to collections - that are reported by Realm notifications. - - `RLMCollectionChange` is passed to the notification blocks registered with - `-addNotificationBlock` on `RLMArray` and `RLMResults`, and reports what rows in the - collection changed since the last time the notification block was called. - - The change information is available in two formats: a simple array of row - indices in the collection for each type of change, and an array of index paths - in a requested section suitable for passing directly to `UITableView`'s batch - update methods. A complete example of updating a `UITableView` named `tv`: - - [tv beginUpdates]; - [tv deleteRowsAtIndexPaths:[changes deletionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic]; - [tv insertRowsAtIndexPaths:[changes insertionsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic]; - [tv reloadRowsAtIndexPaths:[changes modificationsInSection:0] withRowAnimation:UITableViewRowAnimationAutomatic]; - [tv endUpdates]; - - All of the arrays in an `RLMCollectionChange` are always sorted in ascending order. - */ -@interface RLMCollectionChange : NSObject -/// The indices of objects in the previous version of the collection which have -/// been removed from this one. -@property (nonatomic, readonly) NSArray *deletions; - -/// The indices in the new version of the collection which were newly inserted. -@property (nonatomic, readonly) NSArray *insertions; - -/** - The indices in the new version of the collection which were modified. - - For `RLMResults`, this means that one or more of the properties of the object at - that index were modified (or an object linked to by that object was - modified). - - For `RLMArray`, the array itself being modified to contain a - different object at that index will also be reported as a modification. - */ -@property (nonatomic, readonly) NSArray *modifications; - -/// Returns the index paths of the deletion indices in the given section. -- (NSArray *)deletionsInSection:(NSUInteger)section; - -/// Returns the index paths of the insertion indices in the given section. -- (NSArray *)insertionsInSection:(NSUInteger)section; - -/// Returns the index paths of the modification indices in the given section. -- (NSArray *)modificationsInSection:(NSUInteger)section; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMCollection_Private.hpp b/Pods/Realm/include/RLMCollection_Private.hpp deleted file mode 100644 index e1df7e91..00000000 --- a/Pods/Realm/include/RLMCollection_Private.hpp +++ /dev/null @@ -1,72 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import - -namespace realm { - class List; - class Results; - class TableView; - struct CollectionChangeSet; - struct NotificationToken; -} -@class RLMObjectSchema; - -@protocol RLMFastEnumerable -@property (nonatomic, readonly) RLMRealm *realm; -@property (nonatomic, readonly) RLMObjectSchema *objectSchema; -@property (nonatomic, readonly) NSUInteger count; - -- (NSUInteger)indexInSource:(NSUInteger)index; -- (realm::TableView)tableView; -@end - -// An object which encapulates the shared logic for fast-enumerating RLMArray -// and RLMResults, and has a buffer to store strong references to the current -// set of enumerated items -@interface RLMFastEnumerator : NSObject -- (instancetype)initWithCollection:(id)collection - objectSchema:(RLMObjectSchema *)objectSchema; - -// Detach this enumerator from the source collection. Must be called before the -// source collection is changed. -- (void)detach; - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - count:(NSUInteger)len; -@end - -@interface RLMCancellationToken : RLMNotificationToken -- (instancetype)initWithToken:(realm::NotificationToken)token; -@end - -@interface RLMCollectionChange () -- (instancetype)initWithChanges:(realm::CollectionChangeSet)indices; -@end - -template -RLMNotificationToken *RLMAddNotificationBlock(id objcCollection, - Collection& collection, - void (^block)(id, RLMCollectionChange *, NSError *), - bool suppressInitialChange=false); - -NSArray *RLMCollectionValueForKey(id collection, NSString *key); -void RLMCollectionSetValueForKey(id collection, NSString *key, id value); -NSString *RLMDescriptionWithMaxDepth(NSString *name, id collection, NSUInteger depth); diff --git a/Pods/Realm/include/RLMConstants.h b/Pods/Realm/include/RLMConstants.h deleted file mode 100644 index 4faf4426..00000000 --- a/Pods/Realm/include/RLMConstants.h +++ /dev/null @@ -1,173 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#pragma mark - Enums - -/** - `RLMPropertyType` is an enumeration describing all property types supported in Realm models. - - For more information, see [Realm Models](https://realm.io/docs/objc/latest/#models). - */ -// Make sure numbers match those in -typedef NS_ENUM(int32_t, RLMPropertyType) { - -#pragma mark - Primitive types - - /** Integers: `NSInteger`, `int`, `long`, `Int` (Swift) */ - RLMPropertyTypeInt = 0, - /** Booleans: `BOOL`, `bool`, `Bool` (Swift) */ - RLMPropertyTypeBool = 1, - /** Floating-point numbers: `float`, `Float` (Swift) */ - RLMPropertyTypeFloat = 9, - /** Double-precision floating-point numbers: `double`, `Double` (Swift) */ - RLMPropertyTypeDouble = 10, - -#pragma mark - Object types - - /** Strings: `NSString`, `String` (Swift) */ - RLMPropertyTypeString = 2, - /** Binary data: `NSData` */ - RLMPropertyTypeData = 4, - /** - Any object: `id`. - - This property type is no longer supported for new models. However, old models with any-typed properties are still - supported for migration purposes. - */ - RLMPropertyTypeAny = 6, - /** Dates: `NSDate` */ - RLMPropertyTypeDate = 8, - -#pragma mark - Array/Linked object types - - /** Realm model objects. See [Realm Models](https://realm.io/docs/objc/latest/#models) for more information. */ - RLMPropertyTypeObject = 12, - /** Realm arrays. See [Realm Models](https://realm.io/docs/objc/latest/#models) for more information. */ - RLMPropertyTypeArray = 13, - /** Realm linking objects. See [Realm Models](https://realm.io/docs/objc/latest/#models) for more information. */ - RLMPropertyTypeLinkingObjects = 14, -}; - -/** - `RLMError` is an enumeration representing all recoverable errors. It is associated with the - Realm error domain specified in `RLMErrorDomain`. - */ -typedef NS_ENUM(NSInteger, RLMError) { - /** Denotes a general error that occurred when trying to open a Realm. */ - RLMErrorFail = 1, - - /** Denotes a file I/O error that occurred when trying to open a Realm. */ - RLMErrorFileAccess = 2, - - /** - Denotes a file permission error that ocurred when trying to open a Realm. - - This error can occur if the user does not have permission to open or create - the specified file in the specified access mode when opening a Realm. - */ - RLMErrorFilePermissionDenied = 3, - - /** Denotes an error where a file was to be written to disk, but another file with the same name already exists. */ - RLMErrorFileExists = 4, - - /** - Denotes an error that occurs if a file could not be found. - - This error may occur if a Realm file could not be found on disk when trying to open a - Realm as read-only, or if the directory part of the specified path was not found when - trying to write a copy. - */ - RLMErrorFileNotFound = 5, - - /** - Denotes an error that occurs if a file format upgrade is required to open the file, - but upgrades were explicitly disabled. - */ - RLMErrorFileFormatUpgradeRequired = 6, - - /** - Denotes an error that occurs if the database file is currently open in another - process which cannot share with the current process due to an - architecture mismatch. - - This error may occur if trying to share a Realm file between an i386 (32-bit) iOS - Simulator and the Realm Browser application. In this case, please use the 64-bit - version of the iOS Simulator. - */ - RLMErrorIncompatibleLockFile = 8, - - /** Denotes an error that occurs when there is insufficient available address space. */ - RLMErrorAddressSpaceExhausted = 9, - - /** Denotes an error that occurs if there is a schema version mismatch, so that a migration is required. */ - RLMErrorSchemaMismatch = 10, -}; - -#pragma mark - Constants - -#pragma mark - Notification Constants - -/** - This notification is posted by a Realm when the data in that Realm has changed. - - More specifically, this notification is posted after a Realm has been refreshed to - reflect a write transaction. This can happen when an autorefresh occurs, when - `-[RLMRealm refresh]` is called, after an implicit refresh from `-[RLMRealm beginWriteTransaction]`, - or after a local write transaction is completed. - */ -extern NSString * const RLMRealmRefreshRequiredNotification; - -/** - This notification is posted by a Realm when a write transaction has been - committed to a Realm on a different thread for the same file. - - It is not posted if `-[RLMRealm autorefresh]` is enabled, or if the Realm is - refreshed before the notification has a chance to run. - - Realms with autorefresh disabled should normally install a handler for this - notification which calls `-[RLMRealm refresh]` after doing some work. Refreshing - the Realm is optional, but not refreshing the Realm may lead to large Realm - files. This is because Realm must keep an extra copy of the data for the stale - Realm. - */ -extern NSString * const RLMRealmDidChangeNotification; - -#pragma mark - Other Constants - -/** The schema version used for uninitialized Realms */ -extern const uint64_t RLMNotVersioned; - -/** An error domain identifying Realm-specific errors. */ -extern NSString * const RLMErrorDomain; - -/** An error domain identifying non-specific system errors. */ -extern NSString * const RLMUnknownSystemErrorDomain; - -/** The corresponding value is the name of an exception thrown by Realm. */ -extern NSString * const RLMExceptionName; - -/** The corresponding value is a Realm file version. */ -extern NSString * const RLMRealmVersionKey; - -/** The corresponding key is the version of the underlying database engine. */ -extern NSString * const RLMRealmCoreVersionKey; - -/** The corresponding key is the Realm invalidated property name. */ -extern NSString * const RLMInvalidatedKey; diff --git a/Pods/Realm/include/RLMListBase.h b/Pods/Realm/include/RLMListBase.h deleted file mode 100644 index a8057a68..00000000 --- a/Pods/Realm/include/RLMListBase.h +++ /dev/null @@ -1,29 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@class RLMArray; - -// A base class for Swift generic Lists to make it possible to interact with -// them from obj-c -@interface RLMListBase : NSObject -@property (nonatomic, strong) RLMArray *_rlmArray; - -- (instancetype)initWithArray:(RLMArray *)array; -@end diff --git a/Pods/Realm/include/RLMMigration.h b/Pods/Realm/include/RLMMigration.h deleted file mode 100644 index e3bcd48e..00000000 --- a/Pods/Realm/include/RLMMigration.h +++ /dev/null @@ -1,126 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMSchema; -@class RLMArray; -@class RLMObject; - -/** - A block type which provides both the old and new versions of an object in the Realm. Object - properties can only be accessed using keyed subscripting. - - @see `-[RLMMigration enumerateObjects:block:]` - - @param oldObject The object from the original Realm (read-only). - @param newObject The object from the migrated Realm (read-write). -*/ -typedef void (^RLMObjectMigrationBlock)(RLMObject * __nullable oldObject, RLMObject * __nullable newObject); - -/** - `RLMMigration` instances encapsulate information intended to facilitate a schema migration. - - A `RLMMigration` instance is passed into a user-defined `RLMMigrationBlock` block when updating - the version of a Realm. This instance provides access to the old and new database schemas, the - objects in the Realm, and provides functionality for modifying the Realm during the migration. - */ -@interface RLMMigration : NSObject - -#pragma mark - Properties - -/** - Returns the old `RLMSchema`. This is the schema which describes the Realm before the - migration is applied. - */ -@property (nonatomic, readonly) RLMSchema *oldSchema; - -/** - Returns the new `RLMSchema`. This is the schema which describes the Realm after the - migration is applied. - */ -@property (nonatomic, readonly) RLMSchema *newSchema; - - -#pragma mark - Altering Objects during a Migration - -/** - Enumerates all the objects of a given type in the Realm, providing both the old and new versions - of each object. Within the block, object properties can only be accessed using keyed subscripting. - - @param className The name of the `RLMObject` class to enumerate. - - @warning All objects returned are of a type specific to the current migration and should not be cast - to `className`. Instead, treat them as `RLMObject`s and use keyed subscripting to access - properties. - */ -- (void)enumerateObjects:(NSString *)className block:(RLMObjectMigrationBlock)block; - -/** - Creates and returns an `RLMObject` instance of type `className` in the Realm being migrated. - - @param className The name of the `RLMObject` class to create. - @param value The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `NSArray` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `NSArray`, all properties must be present, - valid and in the same order as the properties defined in the model. - */ -- (RLMObject *)createObject:(NSString *)className withValue:(id)value; - -/** - Deletes an object from a Realm during a migration. - - It is permitted to call this method from within the block passed to `-[enumerateObjects:block:]`. - - @param object Object to be deleted from the Realm being migrated. - */ -- (void)deleteObject:(RLMObject *)object; - -/** - Deletes the data for the class with the given name. - - All objects of the given class will be deleted. If the `RLMObject` subclass no longer exists in your program, - any remaining metadata for the class will be removed from the Realm file. - - @param name The name of the `RLMObject` class to delete. - - @return A Boolean value indicating whether there was any data to delete. - */ -- (BOOL)deleteDataForClassName:(NSString *)name; - -/** - Renames a property of the given class from `oldName` to `newName`. - - @param className The name of the class whose property should be renamed. This class must be present - in both the old and new Realm schemas. - @param oldName The old name for the property to be renamed. There must not be a property with this name in the - class as defined by the new Realm schema. - @param newName The new name for the property to be renamed. There must not be a property with this name in the - class as defined by the old Realm schema. - */ -- (void)renamePropertyForClass:(NSString *)className oldName:(NSString *)oldName newName:(NSString *)newName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMMigration_Private.h b/Pods/Realm/include/RLMMigration_Private.h deleted file mode 100644 index 4b54c891..00000000 --- a/Pods/Realm/include/RLMMigration_Private.h +++ /dev/null @@ -1,34 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import -#import - -typedef void (^RLMObjectBaseMigrationBlock)(RLMObjectBase *oldObject, RLMObjectBase *newObject); - -@interface RLMMigration () - -@property (nonatomic, strong) RLMRealm *oldRealm; -@property (nonatomic, strong) RLMRealm *realm; - -- (instancetype)initWithRealm:(RLMRealm *)realm oldRealm:(RLMRealm *)oldRealm; - -- (void)execute:(RLMMigrationBlock)block; - -@end diff --git a/Pods/Realm/include/RLMObject.h b/Pods/Realm/include/RLMObject.h deleted file mode 100644 index 1598d522..00000000 --- a/Pods/Realm/include/RLMObject.h +++ /dev/null @@ -1,443 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMPropertyDescriptor; -@class RLMRealm; -@class RLMResults; -@class RLMObjectSchema; - -/** - `RLMObject` is a base class for model objects representing data stored in Realms. - - Define your model classes by subclassing `RLMObject` and adding properties to be persisted. - Then instantiate and use your custom subclasses instead of using the `RLMObject` class directly. - - // Dog.h - @interface Dog : RLMObject - @property NSString *name; - @property BOOL adopted; - @end - - // Dog.m - @implementation Dog - @end //none needed - - ### Supported property types - - - `NSString` - - `NSInteger`, `int`, `long`, `float`, and `double` - - `BOOL` or `bool` - - `NSDate` - - `NSData` - - `NSNumber`, where `X` is one of `RLMInt`, `RLMFloat`, `RLMDouble` or `RLMBool`, for optional number properties - - `RLMObject` subclasses, to model many-to-one relationships. - - `RLMArray`, where `X` is an `RLMObject` subclass, to model many-to-many relationships. - - ### Querying - - You can initiate queries directly via the class methods: `allObjects`, `objectsWhere:`, and `objectsWithPredicate:`. - These methods allow you to easily query a custom subclass for instances of that class in the default Realm. - - To search in a Realm other than the default Realm, use the `allObjectsInRealm:`, `objectsInRealm:where:`, - and `objectsInRealm:withPredicate:` class methods. - - @see `RLMRealm` - - ### Relationships - - See our [Cocoa guide](https://realm.io/docs/objc/latest#relationships) for more details. - - ### Key-Value Observing - - All `RLMObject` properties (including properties you create in subclasses) are - [Key-Value Observing compliant](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html), - except for `realm` and `objectSchema`. - - Keep the following tips in mind when observing Realm objects: - - 1. Unlike `NSMutableArray` properties, `RLMArray` properties do not require - using the proxy object returned from `-mutableArrayValueForKey:`, or defining - KVC mutation methods on the containing class. You can simply call methods on - the `RLMArray` directly; any changes will be automatically observed by the containing - object. - 2. Unmanaged `RLMObject` instances cannot be added to a Realm while they have any - observed properties. - 3. Modifying managed `RLMObject`s within `-observeValueForKeyPath:ofObject:change:context:` - is not recommended. Properties may change even when the Realm is not in a write - transaction (for example, when `-[RLMRealm refresh]` is called after changes - are made on a different thread), and notifications sent prior to the change - being applied (when `NSKeyValueObservingOptionPrior` is used) may be sent at - times when you *cannot* begin a write transaction. - */ - -@interface RLMObject : RLMObjectBase - -#pragma mark - Creating & Initializing Objects - -/** - Initializes an unmanaged instance of a Realm object. - - Call `addObject:` on a `RLMRealm` instance to add an unmanaged object into that Realm. - - @see `[RLMRealm addObject:]` - */ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - - -/** - Initializes an unmanaged instance of a Realm object. - - Pass in an `NSArray` or `NSDictionary` instance to set the values of the object's properties. - - Call `addObject:` on a `RLMRealm` instance to add an unmanaged object into that Realm. - - @see `[RLMRealm addObject:]` - */ -- (instancetype)initWithValue:(id)value NS_DESIGNATED_INITIALIZER; - - -/** - Returns the class name for a Realm object subclass. - - @warning Do not override. Realm relies on this method returning the exact class - name. - - @return The class name for the model class. - */ -+ (NSString *)className; - -/** - Creates an instance of a Realm object with a given value, and adds it to the default Realm. - - If nested objects are included in the argument, `createInDefaultRealmWithValue:` will be recursively called - on them. - - @param value The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `NSArray` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `NSArray`, all properties must be present, - valid and in the same order as the properties defined in the model. - - @see `defaultPropertyValues` - */ -+ (instancetype)createInDefaultRealmWithValue:(id)value; - -/** - Creates an instance of a Realm object with a given value, and adds it to the specified Realm. - - If nested objects are included in the argument, `createInRealm:withValue:` will be recursively called - on them. - - @param realm The Realm which should manage the newly-created object. - @param value The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `NSArray` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `NSArray`, all properties must be present, - valid and in the same order as the properties defined in the model. - - @see `defaultPropertyValues` - */ -+ (instancetype)createInRealm:(RLMRealm *)realm withValue:(id)value; - -/** - Creates or updates a Realm object within the default Realm. - - This method may only be called on Realm object types with a primary key defined. If there is already - an object with the same primary key value in the default Realm, its values are updated and the object - is returned. Otherwise, this method creates and populates a new instance of the object in the default Realm. - - If nested objects are included in the argument, `createOrUpdateInDefaultRealmWithValue:` will be - recursively called on them if they have primary keys, `createInDefaultRealmWithValue:` if they do not. - - If the argument is a Realm object already managed by the default Realm, the argument's type is the same - as the receiver, and the objects have identical values for their persisted properties, this method does nothing. - - @param value The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `NSArray` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `NSArray`, all properties must be present, - valid and in the same order as the properties defined in the model. - - @see `defaultPropertyValues`, `primaryKey` - */ -+ (instancetype)createOrUpdateInDefaultRealmWithValue:(id)value; - -/** - Creates or updates an Realm object within a specified Realm. - - This method may only be called on Realm object types with a primary key defined. If there is already - an object with the same primary key value in the given Realm, its values are updated and the object - is returned. Otherwise this method creates and populates a new instance of this object in the given Realm. - - If nested objects are included in the argument, `createOrUpdateInRealm:withValue:` will be - recursively called on them if they have primary keys, `createInRealm:withValue:` if they do not. - - If the argument is a Realm object already managed by the given Realm, the argument's type is the same - as the receiver, and the objects have identical values for their persisted properties, this method does nothing. - - @param realm The Realm which should own the object. - @param value The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `NSArray` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `NSArray`, all properties must be present, - valid and in the same order as the properties defined in the model. - - @see `defaultPropertyValues`, `primaryKey` - */ -+ (instancetype)createOrUpdateInRealm:(RLMRealm *)realm withValue:(id)value; - -#pragma mark - Properties - -/** - The Realm which manages the object, or `nil` if the object is unmanaged. - */ -@property (nonatomic, readonly, nullable) RLMRealm *realm; - -/** - The object schema which lists the persisted properties for the object. - */ -@property (nonatomic, readonly) RLMObjectSchema *objectSchema; - -/** - Indicates if the object can no longer be accessed because it is now invalid. - - An object can no longer be accessed if the object has been deleted from the Realm that manages it, or - if `invalidate` is called on that Realm. - */ -@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated; - - -#pragma mark - Customizing your Objects - -/** - Returns an array of property names for properties which should be indexed. - - Only string, integer, boolean, and `NSDate` properties are supported. - - @return An array of property names. - */ -+ (NSArray *)indexedProperties; - -/** - Override this method to specify the default values to be used for each property. - - @return A dictionary mapping property names to their default values. - */ -+ (nullable NSDictionary *)defaultPropertyValues; - -/** - Override this method to specify the name of a property to be used as the primary key. - - Only properties of types `RLMPropertyTypeString` and `RLMPropertyTypeInt` can be designated as the primary key. - Primary key properties enforce uniqueness for each value whenever the property is set, which incurs minor overhead. - Indexes are created automatically for primary key properties. - - @return The name of the property designated as the primary key. - */ -+ (nullable NSString *)primaryKey; - -/** - Override this method to specify the names of properties to ignore. These properties will not be persisted within - the Realm that manages the object. - - @return An array of property names to ignore. - */ -+ (nullable NSArray *)ignoredProperties; - -/** - Override this method to specify the names of properties that are non-optional (i.e. cannot be assigned a `nil` value). - - By default, all properties of a type whose values can be set to `nil` are considered optional properties. - To require that an object in a Realm always store a non-`nil` value for a property, - add the name of the property to the array returned from this method. - - Properties of `RLMObject` type cannot be non-optional. Array and `NSNumber` properties - can be non-optional, but there is no reason to do so: arrays do not support storing nil, and - if you want a non-optional number you should instead use the primitive type. - - @return An array of property names that are required. - */ -+ (NSArray *)requiredProperties; - -/** - Override this method to provide information related to properties containing linking objects. - - Each property of type `RLMLinkingObjects` must have a key in the dictionary returned by this method consisting - of the property name. The corresponding value must be an instance of `RLMPropertyDescriptor` that describes the class - and property that the property is linked to. - - return @{ @"owners": [RLMPropertyDescriptor descriptorWithClass:Owner.class propertyName:@"dogs"] }; - - @return A dictionary mapping property names to `RLMPropertyDescriptor` instances. - */ -+ (NSDictionary *)linkingObjectsProperties; - - -#pragma mark - Getting & Querying Objects from the Default Realm - -/** - Returns all objects of this object type from the default Realm. - - @return An `RLMResults` containing all objects of this type in the default Realm. - */ -+ (RLMResults *)allObjects; - -/** - Returns all objects of this object type matching the given predicate from the default Realm. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return An `RLMResults` containing all objects of this type in the default Realm that match the given predicate. - */ -+ (RLMResults *)objectsWhere:(NSString *)predicateFormat, ...; - -/// :nodoc: -+ (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args; - - -/** - Returns all objects of this object type matching the given predicate from the default Realm. - - @param predicate The predicate with which to filter the objects. - - @return An `RLMResults` containing all objects of this type in the default Realm that match the given predicate. - */ -+ (RLMResults *)objectsWithPredicate:(nullable NSPredicate *)predicate; - -/** - Retrieves the single instance of this object type with the given primary key from the default Realm. - - Returns the object from the default Realm which has the given primary key, or - `nil` if the object does not exist. This is slightly faster than the otherwise - equivalent `[[SubclassName objectsWhere:@"primaryKeyPropertyName = %@", key] firstObject]`. - - This method requires that `primaryKey` be overridden on the receiving subclass. - - @return An object of this object type, or `nil` if an object with the given primary key does not exist. - @see `-primaryKey` - */ -+ (nullable instancetype)objectForPrimaryKey:(nullable id)primaryKey; - - -#pragma mark - Querying Specific Realms - -/** - Returns all objects of this object type from the specified Realm. - - @param realm The Realm to query. - - @return An `RLMResults` containing all objects of this type in the specified Realm. - */ -+ (RLMResults *)allObjectsInRealm:(RLMRealm *)realm; - -/** - Returns all objects of this object type matching the given predicate from the specified Realm. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - @param realm The Realm to query. - - @return An `RLMResults` containing all objects of this type in the specified Realm that match the given predicate. - */ -+ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat, ...; - -/// :nodoc: -+ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat args:(va_list)args; - -/** - Returns all objects of this object type matching the given predicate from the specified Realm. - - @param predicate A predicate to use to filter the elements. - @param realm The Realm to query. - - @return An `RLMResults` containing all objects of this type in the specified Realm that match the given predicate. - */ -+ (RLMResults *)objectsInRealm:(RLMRealm *)realm withPredicate:(nullable NSPredicate *)predicate; - -/** - Retrieves the single instance of this object type with the given primary key from the specified Realm. - - Returns the object from the specified Realm which has the given primary key, or - `nil` if the object does not exist. This is slightly faster than the otherwise - equivalent `[[SubclassName objectsInRealm:realm where:@"primaryKeyPropertyName = %@", key] firstObject]`. - - This method requires that `primaryKey` be overridden on the receiving subclass. - - @return An object of this object type, or `nil` if an object with the given primary key does not exist. - @see `-primaryKey` - */ -+ (nullable instancetype)objectInRealm:(RLMRealm *)realm forPrimaryKey:(nullable id)primaryKey; - -#pragma mark - Other Instance Methods - -/** - Returns YES if another Realm object instance points to the same object as the receiver in the Realm managing - the receiver. - - For object types with a primary, key, `isEqual:` is overridden to use this method (along with a corresponding - implementation for `hash`). - - @param object The object to compare the receiver to. - - @return A Boolean indicating whether the object represents the same object as the receiver. - */ -- (BOOL)isEqualToObject:(RLMObject *)object; - -#pragma mark - Dynamic Accessors - -/// :nodoc: -- (nullable id)objectForKeyedSubscript:(NSString *)key; - -/// :nodoc: -- (void)setObject:(nullable id)obj forKeyedSubscript:(NSString *)key; - -@end - -#pragma mark - RLMArray Property Declaration - -/** - Properties on `RLMObject`s of type `RLMArray` must have an associated type. A type is associated - with an `RLMArray` property by defining a protocol for the object type that the array should contain. - To define the protocol for an object, you can use the macro RLM_ARRAY_TYPE: - - RLM_ARRAY_TYPE(ObjectType) - ... - @property RLMArray *arrayOfObjectTypes; - */ -#define RLM_ARRAY_TYPE(RLM_OBJECT_SUBCLASS)\ -@protocol RLM_OBJECT_SUBCLASS \ -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMObjectBase.h b/Pods/Realm/include/RLMObjectBase.h deleted file mode 100644 index fae8893d..00000000 --- a/Pods/Realm/include/RLMObjectBase.h +++ /dev/null @@ -1,41 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMRealm; -@class RLMSchema; -@class RLMObjectSchema; - -/// :nodoc: -@interface RLMObjectBase : NSObject - -@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated; - -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -+ (NSString *)className; - -// Returns whether the class is included in the default set of classes persisted in a Realm. -+ (BOOL)shouldIncludeInDefaultSchema; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMObjectBase_Dynamic.h b/Pods/Realm/include/RLMObjectBase_Dynamic.h deleted file mode 100644 index c71037d4..00000000 --- a/Pods/Realm/include/RLMObjectBase_Dynamic.h +++ /dev/null @@ -1,79 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@class RLMObjectSchema, RLMRealm; - -/** - Returns the Realm that manages the object, if one exists. - - @warning This function is useful only in specialized circumstances, for example, when building components - that integrate with Realm. If you are simply building an app on Realm, it is - recommended to retrieve the Realm that manages the object via `RLMObject`. - - @param object An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`. - - @return The Realm which manages this object. Returns `nil `for unmanaged objects. - */ -FOUNDATION_EXTERN RLMRealm *RLMObjectBaseRealm(RLMObjectBase *object); - -/** - Returns an `RLMObjectSchema` which describes the persisted properties of the object. - - @warning This function is useful only in specialized circumstances, for example, when building components - that integrate with Realm. If you are simply building an app on Realm, it is - recommended to retrieve `objectSchema` via `RLMObject`. - - @param object An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`. - - @return The object schema which lists the persisted properties for the object. - */ -FOUNDATION_EXTERN RLMObjectSchema *RLMObjectBaseObjectSchema(RLMObjectBase *object); - -/** - Returns the object corresponding to a key value. - - @warning This function is useful only in specialized circumstances, for example, when building components - that integrate with Realm. If you are simply building an app on Realm, it is - recommended to retrieve key values via `RLMObject`. - - @warning Will throw an `NSUndefinedKeyException` if `key` is not present on the object. - - @param object An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`. - @param key The name of the property. - - @return The object for the property requested. - */ -FOUNDATION_EXTERN id RLMObjectBaseObjectForKeyedSubscript(RLMObjectBase *object, NSString *key); - -/** - Sets a value for a key on the object. - - @warning This function is useful only in specialized circumstances, for example, when building components - that integrate with Realm. If you are simply building an app on Realm, it is - recommended to set key values via `RLMObject`. - - @warning Will throw an `NSUndefinedKeyException` if `key` is not present on the object. - - @param object An `RLMObjectBase` obtained via a Swift `Object` or `RLMObject`. - @param key The name of the property. - @param obj The object to set as the value of the key. - */ -FOUNDATION_EXTERN void RLMObjectBaseSetObjectForKeyedSubscript(RLMObjectBase *object, NSString *key, id obj); - diff --git a/Pods/Realm/include/RLMObjectSchema.h b/Pods/Realm/include/RLMObjectSchema.h deleted file mode 100644 index f90f5393..00000000 --- a/Pods/Realm/include/RLMObjectSchema.h +++ /dev/null @@ -1,72 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMProperty; - -/** - This class represents Realm model object schemas. - - When using Realm, `RLMObjectSchema` instances allow performing migrations and - introspecting the database's schema. - - Object schemas map to tables in the core database. - */ -@interface RLMObjectSchema : NSObject - -#pragma mark - Properties - -/** - An array of `RLMProperty` instances representing the persisted properties of a class described by the schema. - - @see `RLMProperty` - */ -@property (nonatomic, readonly, copy) NSArray *properties; - -/** - The name of the class the schema describes. - */ -@property (nonatomic, readonly) NSString *className; - -/** - The property which serves as the primary key for the class the schema describes, if any. - */ -@property (nonatomic, readonly, nullable) RLMProperty *primaryKeyProperty; - -#pragma mark - Methods - -/** - Retrieves an `RLMProperty` object by the property name. - - @param propertyName The property's name. - - @return An `RLMProperty` object, or `nil` if there is no property with the given name. - */ -- (nullable RLMProperty *)objectForKeyedSubscript:(id )propertyName; - -/** - Returns a Boolean value that indicates whether two `RLMObjectSchema` instances are equal. -*/ -- (BOOL)isEqualToObjectSchema:(RLMObjectSchema *)objectSchema; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMObjectSchema_Private.h b/Pods/Realm/include/RLMObjectSchema_Private.h deleted file mode 100644 index 31e654e5..00000000 --- a/Pods/Realm/include/RLMObjectSchema_Private.h +++ /dev/null @@ -1,74 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMRealm; - -// RLMObjectSchema private -@interface RLMObjectSchema () { -@public - bool _isSwiftClass; -} - -// writable redecleration -@property (nonatomic, readwrite, copy) NSArray *properties; -@property (nonatomic, readwrite, assign) bool isSwiftClass; - -// class used for this object schema -@property (nonatomic, readwrite, assign) Class objectClass; -@property (nonatomic, readwrite, assign) Class accessorClass; -@property (nonatomic, readwrite, assign) Class standaloneClass; - -@property (nonatomic, readwrite, nullable) RLMProperty *primaryKeyProperty; - -@property (nonatomic, readonly) NSArray *propertiesInDeclaredOrder; -@property (nonatomic, copy) NSArray *computedProperties; -@property (nonatomic, readonly) NSArray *swiftGenericProperties; - -// The Realm retains its object schemas, so they need to not retain the Realm -@property (nonatomic, unsafe_unretained, nullable) RLMRealm *realm; -// returns a cached or new schema for a given object class -+ (instancetype)schemaForObjectClass:(Class)objectClass; - -- (void)sortPropertiesByColumn; - -@end - -@interface RLMObjectSchema (Dynamic) -/** - This method is useful only in specialized circumstances, for example, when accessing objects - in a Realm produced externally. If you are simply building an app on Realm, it is not recommended - to use this method as an [RLMObjectSchema](RLMObjectSchema) is generated automatically for every [RLMObject](RLMObject) subclass. - - Initialize an RLMObjectSchema with classname, objectClass, and an array of properties - - @warning This method is useful only in specialized circumstances. - - @param objectClassName The name of the class used to refer to objects of this type. - @param objectClass The Objective-C class used when creating instances of this type. - @param properties An array of RLMProperty instances describing the persisted properties for this type. - - @return An initialized instance of RLMObjectSchema. - */ -- (instancetype)initWithClassName:(NSString *)objectClassName objectClass:(Class)objectClass properties:(NSArray *)properties; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMObjectSchema_Private.hpp b/Pods/Realm/include/RLMObjectSchema_Private.hpp deleted file mode 100644 index b2d0c574..00000000 --- a/Pods/Realm/include/RLMObjectSchema_Private.hpp +++ /dev/null @@ -1,49 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMObjectSchema_Private.h" - -#import "object_schema.hpp" -#import "RLMObject_Private.hpp" - -#import -#import - -namespace realm { - class Table; -} - -class RLMObservationInfo; - -// RLMObjectSchema private -@interface RLMObjectSchema () { - @public - std::vector _observedObjects; -} -@property (nonatomic) realm::Table *table; - -// shallow copy reusing properties and property map -- (instancetype)shallowCopy; - -// create realm::ObjectSchema copy -- (realm::ObjectSchema)objectStoreCopy; - -// initialize with realm::ObjectSchema -+ (instancetype)objectSchemaForObjectStoreSchema:(realm::ObjectSchema &)objectSchema; - -@end diff --git a/Pods/Realm/include/RLMObjectStore.h b/Pods/Realm/include/RLMObjectStore.h deleted file mode 100644 index 3479f163..00000000 --- a/Pods/Realm/include/RLMObjectStore.h +++ /dev/null @@ -1,99 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#ifdef __cplusplus -extern "C" { -#endif - -@class RLMRealm, RLMSchema, RLMObjectSchema, RLMObjectBase, RLMResults, RLMProperty; - -// -// Accessor Creation -// - -// create or get cached accessors for the given schema -void RLMRealmCreateAccessors(RLMSchema *schema); - -// Clear the cache of created accessor classes -void RLMClearAccessorCache(); - - -// -// Options for object creation -// -typedef NS_OPTIONS(NSUInteger, RLMCreationOptions) { - // Normal object creation - RLMCreationOptionsNone = 0, - // If the property is a link or array property, upsert the linked objects - // if they have a primary key, and insert them otherwise. - RLMCreationOptionsCreateOrUpdate = 1 << 0, - // Allow unmanaged objects to be promoted to managed objects - // if false objects are copied during object creation - RLMCreationOptionsPromoteStandalone = 1 << 1, -}; - - -// -// Adding, Removing, Getting Objects -// - -// add an object to the given realm -void RLMAddObjectToRealm(RLMObjectBase *object, RLMRealm *realm, bool createOrUpdate); - -// delete an object from its realm -void RLMDeleteObjectFromRealm(RLMObjectBase *object, RLMRealm *realm); - -// deletes all objects from a realm -void RLMDeleteAllObjectsFromRealm(RLMRealm *realm); - -// get objects of a given class -RLMResults *RLMGetObjects(RLMRealm *realm, NSString *objectClassName, NSPredicate *predicate) NS_RETURNS_RETAINED; - -// get an object with the given primary key -id RLMGetObject(RLMRealm *realm, NSString *objectClassName, id key) NS_RETURNS_RETAINED; - -// create object from array or dictionary -RLMObjectBase *RLMCreateObjectInRealmWithValue(RLMRealm *realm, NSString *className, id value, bool createOrUpdate) NS_RETURNS_RETAINED; - - -// -// Accessor Creation -// - - -// switch List<> properties from being backed by unmanaged RLMArrays to RLMArrayLinkView -void RLMInitializeSwiftAccessorGenerics(RLMObjectBase *object); - -#ifdef __cplusplus -} - -namespace realm { - class Table; - template class BasicRowExpr; - using RowExpr = BasicRowExpr; -} -// Create accessors -RLMObjectBase *RLMCreateObjectAccessor(RLMRealm *realm, - RLMObjectSchema *objectSchema, - NSUInteger index) NS_RETURNS_RETAINED; -RLMObjectBase *RLMCreateObjectAccessor(RLMRealm *realm, - RLMObjectSchema *objectSchema, - realm::RowExpr row) NS_RETURNS_RETAINED; -#endif diff --git a/Pods/Realm/include/RLMObject_Private.h b/Pods/Realm/include/RLMObject_Private.h deleted file mode 100644 index 5101434e..00000000 --- a/Pods/Realm/include/RLMObject_Private.h +++ /dev/null @@ -1,113 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -// RLMObject accessor and read/write realm -@interface RLMObjectBase () { - @public - RLMRealm *_realm; - // objectSchema is a cached pointer to an object stored in the RLMSchema - // owned by _realm, so it's guaranteed to stay alive as long as this object - // without retaining it (and retaining it makes iteration slower) - __unsafe_unretained RLMObjectSchema *_objectSchema; -} - -// unmanaged initializer -- (instancetype)initWithValue:(id)value schema:(RLMSchema *)schema NS_DESIGNATED_INITIALIZER; - -// live accessor initializer -- (instancetype)initWithRealm:(__unsafe_unretained RLMRealm *const)realm - schema:(__unsafe_unretained RLMObjectSchema *const)schema NS_DESIGNATED_INITIALIZER; - -// shared schema for this class -+ (RLMObjectSchema *)sharedSchema; - -// provide injection point for alternative Swift object util class -+ (Class)objectUtilClass:(BOOL)isSwift; - -@end - -@interface RLMObject () - -// unmanaged initializer -- (instancetype)initWithValue:(id)value schema:(RLMSchema *)schema NS_DESIGNATED_INITIALIZER; - -// live accessor initializer -- (instancetype)initWithRealm:(__unsafe_unretained RLMRealm *const)realm - schema:(__unsafe_unretained RLMObjectSchema *const)schema NS_DESIGNATED_INITIALIZER; - -@end - -@interface RLMDynamicObject : RLMObject - -@end - -// A reference to an object's row that doesn't keep the object accessor alive. -// Used by some Swift property types, such as LinkingObjects, to avoid retain cycles -// with their containing object. -@interface RLMWeakObjectHandle : NSObject - -- (instancetype)initWithObject:(RLMObjectBase *)object; - -// Consumes the row, so can only usefully be called once. -@property (nonatomic, readonly) RLMObjectBase *object; - -@end - -// -// Getters and setters for RLMObjectBase ivars for realm and objectSchema -// -FOUNDATION_EXTERN void RLMObjectBaseSetRealm(RLMObjectBase *object, RLMRealm *realm); -FOUNDATION_EXTERN RLMRealm *RLMObjectBaseRealm(RLMObjectBase *object); -FOUNDATION_EXTERN void RLMObjectBaseSetObjectSchema(RLMObjectBase *object, RLMObjectSchema *objectSchema); -FOUNDATION_EXTERN RLMObjectSchema *RLMObjectBaseObjectSchema(RLMObjectBase *object); - -// Dynamic access to RLMObjectBase properties -FOUNDATION_EXTERN id RLMObjectBaseObjectForKeyedSubscript(RLMObjectBase *object, NSString *key); -FOUNDATION_EXTERN void RLMObjectBaseSetObjectForKeyedSubscript(RLMObjectBase *object, NSString *key, id obj); - -// Calls valueForKey: and re-raises NSUndefinedKeyExceptions -FOUNDATION_EXTERN id RLMValidatedValueForProperty(id object, NSString *key, NSString *className); - -// Compare two RLObjectBases -FOUNDATION_EXTERN BOOL RLMObjectBaseAreEqual(RLMObjectBase *o1, RLMObjectBase *o2); - -// Get ObjectUil class for objc or swift -FOUNDATION_EXTERN Class RLMObjectUtilClass(BOOL isSwift); - -FOUNDATION_EXTERN const NSUInteger RLMDescriptionMaxDepth; - -@class RLMProperty, RLMArray; -@interface RLMObjectUtil : NSObject - -+ (NSArray *)ignoredPropertiesForClass:(Class)cls; -+ (NSArray *)indexedPropertiesForClass:(Class)cls; -+ (NSDictionary *> *)linkingObjectsPropertiesForClass:(Class)cls; - -+ (NSArray *)getGenericListPropertyNames:(id)obj; -+ (NSDictionary *)getLinkingObjectsProperties:(id)object; - -+ (void)initializeListProperty:(RLMObjectBase *)object property:(RLMProperty *)property array:(RLMArray *)array; -+ (void)initializeOptionalProperty:(RLMObjectBase *)object property:(RLMProperty *)property; -+ (void)initializeLinkingObjectsProperty:(RLMObjectBase *)object property:(RLMProperty *)property; - -+ (NSDictionary *)getOptionalProperties:(id)obj; -+ (NSArray *)requiredPropertiesForClass:(Class)cls; - -@end diff --git a/Pods/Realm/include/RLMObject_Private.hpp b/Pods/Realm/include/RLMObject_Private.hpp deleted file mode 100644 index d111cd7e..00000000 --- a/Pods/Realm/include/RLMObject_Private.hpp +++ /dev/null @@ -1,52 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMObject_Private.h" - -#import "RLMRealm_Private.hpp" - -#import // required by row.hpp -#import - -class RLMObservationInfo; - -// RLMObject accessor and read/write realm -@interface RLMObjectBase () { - @public - realm::Row _row; - RLMObservationInfo *_observationInfo; -} -@end - -// throw an exception if the object is invalidated or on the wrong thread -static inline void RLMVerifyAttached(__unsafe_unretained RLMObjectBase *const obj) { - if (!obj->_row.is_attached()) { - @throw RLMException(@"Object has been deleted or invalidated."); - } - [obj->_realm verifyThread]; -} - -// throw an exception if the object can't be modified for any reason -static inline void RLMVerifyInWriteTransaction(__unsafe_unretained RLMObjectBase *const obj) { - // first verify is attached - RLMVerifyAttached(obj); - - if (!obj->_realm.inWriteTransaction) { - @throw RLMException(@"Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first."); - } -} diff --git a/Pods/Realm/include/RLMObservation.hpp b/Pods/Realm/include/RLMObservation.hpp deleted file mode 100644 index d7ecad68..00000000 --- a/Pods/Realm/include/RLMObservation.hpp +++ /dev/null @@ -1,143 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import "binding_context.hpp" - - -#import // required by row.hpp -#import - -@class RLMObjectSchema, RLMObjectBase, RLMRealm, RLMSchema, RLMProperty; - -namespace realm { - class History; - class SharedGroup; -} - -// RLMObservationInfo stores all of the KVO-related data for RLMObjectBase and -// RLMArray. There is a one-to-one relationship between observed objects and -// RLMObservationInfo instances, so it could be folded into RLMObjectBase, and -// is a separate class mostly to avoid making all accessor objects far larger. -// -// RLMObjectSchema stores a vector of pointers to the first observation info -// created for each row. If there are multiple observation infos for a single -// row (such as if there are multiple observed objects backed by a single row, -// or if both an object and an array property of that object are observed), -// they're stored in an intrusive doubly-linked-list in the `next` and `prev` -// members. This is done primarily to make it simpler and faster to loop over -// all of the observed objects for a single row, as that needs to be done for -// every change. -class RLMObservationInfo { -public: - RLMObservationInfo(id object); - RLMObservationInfo(RLMObjectSchema *objectSchema, std::size_t row, id object); - ~RLMObservationInfo(); - - realm::Row const& getRow() const { - return row; - } - - RLMObjectSchema *getObjectSchema() const { - return objectSchema; - } - - // Send willChange/didChange notifications to all observers for this object/row - // Sends the array versions if indexes is non-nil, normal versions otherwise - void willChange(NSString *key, NSKeyValueChange kind=NSKeyValueChangeSetting, NSIndexSet *indexes=nil) const; - void didChange(NSString *key, NSKeyValueChange kind=NSKeyValueChangeSetting, NSIndexSet *indexes=nil) const; - - bool isForRow(size_t ndx) const { - return row && row.get_index() == ndx; - } - - void recordObserver(realm::Row& row, RLMObjectSchema *objectSchema, NSString *keyPath); - void removeObserver(); - bool hasObservers() const { return observerCount > 0; } - - // valueForKey: on observed object and array properties needs to return the - // same object each time for KVO to work at all. Doing this all the time - // requires some odd semantics to avoid reference cycles, so instead we do - // it only to the extent specifically required by KVO. In addition, we - // need to continue to return the same object even if this row is deleted, - // or deleting an object with active observers will explode horribly. - // Once prepareForInvalidation() is called, valueForKey() will always return - // the cached value for object and array properties without checking the - // backing row to verify it's up-to-date. - // - // prepareForInvalidation() must be called on the head of the linked list - // (i.e. on the object pointed to directly by the object schema) - id valueForKey(NSString *key); - - void prepareForInvalidation(); - -private: - // Doubly-linked-list of observed objects for the same row as this - RLMObservationInfo *next = nullptr; - RLMObservationInfo *prev = nullptr; - - // Row being observed - realm::Row row; - RLMObjectSchema *objectSchema; - - // Object doing the observing - __unsafe_unretained id object; - - // valueForKey: hack - bool invalidated = false; - size_t observerCount = 0; - NSString *lastKey = nil; - __unsafe_unretained RLMProperty *lastProp = nil; - - // objects returned from valueForKey() to keep them alive in case observers - // are added and so that they can still be accessed after row is detached - NSMutableDictionary *cachedObjects; - - void setRow(realm::Table &table, size_t newRow); - - template - void forEach(F&& f) const { - for (auto info = prev; info; info = info->prev) - f(info->object); - for (auto info = this; info; info = info->next) - f(info->object); - } - - // Default move/copy constructors don't work due to the intrusive linked - // list and we don't need them - RLMObservationInfo(RLMObservationInfo const&) = delete; - RLMObservationInfo(RLMObservationInfo&&) = delete; - RLMObservationInfo& operator=(RLMObservationInfo const&) = delete; - RLMObservationInfo& operator=(RLMObservationInfo&&) = delete; -}; - -// Get the the observation info chain for the given row -// Will simply return info if it's non-null, and will search ojectSchema's array -// for a matching one otherwise, and return null if there are none -RLMObservationInfo *RLMGetObservationInfo(RLMObservationInfo *info, size_t row, RLMObjectSchema *objectSchema); - -// delete all objects from a single table with change notifications -void RLMClearTable(RLMObjectSchema *realm); - -// invoke the block, sending notifications for cascading deletes/link nullifications -void RLMTrackDeletions(RLMRealm *realm, dispatch_block_t block); - -std::vector RLMGetObservedRows(NSArray *schema); -void RLMWillChange(std::vector const& observed, std::vector const& invalidated); -void RLMDidChange(std::vector const& observed, std::vector const& invalidated); diff --git a/Pods/Realm/include/RLMOptionalBase.h b/Pods/Realm/include/RLMOptionalBase.h deleted file mode 100644 index bab04a57..00000000 --- a/Pods/Realm/include/RLMOptionalBase.h +++ /dev/null @@ -1,34 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import - -@class RLMObjectBase, RLMProperty; - -@interface RLMOptionalBase : NSProxy - -- (instancetype)init; - -@property (nonatomic, weak) RLMObjectBase *object; - -@property (nonatomic, unsafe_unretained) RLMProperty *property; - -@property (nonatomic, strong) id underlyingValue; - -@end diff --git a/Pods/Realm/include/RLMPlatform.h b/Pods/Realm/include/RLMPlatform.h deleted file mode 100644 index e69de29b..00000000 diff --git a/Pods/Realm/include/RLMPredicateUtil.hpp b/Pods/Realm/include/RLMPredicateUtil.hpp deleted file mode 100644 index 11b8e150..00000000 --- a/Pods/Realm/include/RLMPredicateUtil.hpp +++ /dev/null @@ -1,21 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -using ExpressionVisitor = NSExpression *(*)(NSExpression *); -NSPredicate *transformPredicate(NSPredicate *, ExpressionVisitor); diff --git a/Pods/Realm/include/RLMPrefix.h b/Pods/Realm/include/RLMPrefix.h deleted file mode 100644 index df08ce9e..00000000 --- a/Pods/Realm/include/RLMPrefix.h +++ /dev/null @@ -1,35 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifdef __OBJC__ -#import -#endif - -#ifdef __cplusplus -#import -#import -#import -#import -#import - -#import -#import -#import -#import -#import -#endif diff --git a/Pods/Realm/include/RLMProperty.h b/Pods/Realm/include/RLMProperty.h deleted file mode 100644 index d9e7eb27..00000000 --- a/Pods/Realm/include/RLMProperty.h +++ /dev/null @@ -1,120 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// :nodoc: -@protocol RLMInt -@end - -/// :nodoc: -@protocol RLMBool -@end - -/// :nodoc: -@protocol RLMDouble -@end - -/// :nodoc: -@protocol RLMFloat -@end - -/// :nodoc: -@interface NSNumber () -@end - -/** - `RLMProperty` instances represent properties persisted to Realm in the context of an object schema. - - When using Realm, `RLMProperty` instances allow performing migrations and introspecting the database's schema. - - These property instances map to columns in the core database. - */ -@interface RLMProperty : NSObject - -#pragma mark - Properties - -/** - The name of the property. - */ -@property (nonatomic, readonly) NSString *name; - -/** - The type of the property. - - @see `RLMPropertyType` - */ -@property (nonatomic, readonly) RLMPropertyType type; - -/** - Indicates whether this property is indexed. - - @see `RLMObject` - */ -@property (nonatomic, readonly) BOOL indexed; - -/** - For `RLMObject` and `RLMArray` properties, the name of the class of object stored in the property. - */ -@property (nonatomic, readonly, copy, nullable) NSString *objectClassName; - -/** - For linking objects properties, the property name of the property the linking objects property is linked to. - */ -@property (nonatomic, readonly, copy, nullable) NSString *linkOriginPropertyName; - -/** - Indicates whether this property is optional. - */ -@property (nonatomic, readonly) BOOL optional; - -#pragma mark - Methods - -/** - Returns a Boolean value that indicates whether a given property object is equal to the receiver. - */ -- (BOOL)isEqualToProperty:(RLMProperty *)property; - -@end - - -/** - An `RLMPropertyDescriptor` instance represents a specific property on a given class. - */ -@interface RLMPropertyDescriptor : NSObject - -/** - Creates and returns a property descriptor. - - @param objectClass The class of this property descriptor. - @param propertyName The name of this property descriptor. - */ -+ (instancetype)descriptorWithClass:(Class)objectClass propertyName:(NSString *)propertyName; - -/// The class of the property. -@property (nonatomic, readonly) Class objectClass; - -/// The name of the property. -@property (nonatomic, readonly) NSString *propertyName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMProperty_Private.h b/Pods/Realm/include/RLMProperty_Private.h deleted file mode 100644 index 9d5a0c0e..00000000 --- a/Pods/Realm/include/RLMProperty_Private.h +++ /dev/null @@ -1,110 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import - -@class RLMObjectBase; - -FOUNDATION_EXTERN BOOL RLMPropertyTypeIsNullable(RLMPropertyType propertyType); -FOUNDATION_EXTERN BOOL RLMPropertyTypeIsNumeric(RLMPropertyType propertyType); -BOOL RLMPropertyTypeIsComputed(RLMPropertyType propertyType); - -// private property interface -@interface RLMProperty () { -@public - RLMPropertyType _type; - Ivar _swiftIvar; -} - -- (instancetype)initWithName:(NSString *)name - indexed:(BOOL)indexed - linkPropertyDescriptor:(RLMPropertyDescriptor *)linkPropertyDescriptor - property:(objc_property_t)property; - -- (instancetype)initSwiftPropertyWithName:(NSString *)name - indexed:(BOOL)indexed - linkPropertyDescriptor:(RLMPropertyDescriptor *)linkPropertyDescriptor - property:(objc_property_t)property - instance:(RLMObjectBase *)objectInstance; - -- (instancetype)initSwiftListPropertyWithName:(NSString *)name - ivar:(Ivar)ivar - objectClassName:(NSString *)objectClassName; - -- (instancetype)initSwiftOptionalPropertyWithName:(NSString *)name - indexed:(BOOL)indexed - ivar:(Ivar)ivar - propertyType:(RLMPropertyType)propertyType; - -- (instancetype)initSwiftLinkingObjectsPropertyWithName:(NSString *)name - ivar:(Ivar)ivar - objectClassName:(NSString *)objectClassName - linkOriginPropertyName:(NSString *)linkOriginPropertyName; - -// private setters -@property (nonatomic, assign) NSUInteger column; -@property (nonatomic, readwrite) NSString *name; -@property (nonatomic, readwrite, assign) RLMPropertyType type; -@property (nonatomic, readwrite) BOOL indexed; -@property (nonatomic, readwrite) BOOL optional; -@property (nonatomic, copy) NSString *objectClassName; - -// private properties -@property (nonatomic, assign) char objcType; -@property (nonatomic, copy) NSString *objcRawType; -@property (nonatomic, assign) BOOL isPrimary; -@property (nonatomic, assign) Ivar swiftIvar; -@property (nonatomic, assign) NSUInteger declarationIndex; - -// getter and setter names -@property (nonatomic, copy) NSString *getterName; -@property (nonatomic, copy) NSString *setterName; -@property (nonatomic) SEL getterSel; -@property (nonatomic) SEL setterSel; - -- (RLMProperty *)copyWithNewName:(NSString *)name; - -@end - -@interface RLMProperty (Dynamic) -/** - This method is useful only in specialized circumstances, for example, in conjunction with - +[RLMObjectSchema initWithClassName:objectClass:properties:]. If you are simply building an - app on Realm, it is not recommened to use this method. - - Initialize an RLMProperty - - @warning This method is useful only in specialized circumstances. - - @param name The property name. - @param type The property type. - @param objectClassName The object type used for Object and Array types. - @param linkOriginPropertyName The property name of the origin of a link. Used for linking objects properties. - - @return An initialized instance of RLMProperty. - */ -- (instancetype)initWithName:(NSString *)name - type:(RLMPropertyType)type - objectClassName:(NSString *)objectClassName - linkOriginPropertyName:(NSString *)linkOriginPropertyName - indexed:(BOOL)indexed - optional:(BOOL)optional; -@end - diff --git a/Pods/Realm/include/RLMProperty_Private.hpp b/Pods/Realm/include/RLMProperty_Private.hpp deleted file mode 100644 index 0e214d53..00000000 --- a/Pods/Realm/include/RLMProperty_Private.hpp +++ /dev/null @@ -1,29 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import "property.hpp" - -@interface RLMProperty () - -+ (instancetype)propertyForObjectStoreProperty:(const realm::Property&)property; - -- (realm::Property)objectStoreCopy; - -@end diff --git a/Pods/Realm/include/RLMQueryUtil.hpp b/Pods/Realm/include/RLMQueryUtil.hpp deleted file mode 100644 index ccae2a6c..00000000 --- a/Pods/Realm/include/RLMQueryUtil.hpp +++ /dev/null @@ -1,44 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import - -namespace realm { - class Query; - struct SortOrder; - class Table; - class TableView; -} - -@class RLMObjectSchema; -@class RLMProperty; -@class RLMSchema; - -extern NSString * const RLMPropertiesComparisonTypeMismatchException; -extern NSString * const RLMUnsupportedTypesFoundInPropertyComparisonException; - -// apply the given predicate to the passed in query, returning the updated query -void RLMUpdateQueryWithPredicate(realm::Query *query, NSPredicate *predicate, RLMSchema *schema, - RLMObjectSchema *objectSchema); - -// return property - throw for invalid column name -RLMProperty *RLMValidatedProperty(RLMObjectSchema *objectSchema, NSString *columnName); - -// validate the array of RLMSortDescriptors and convert it to a realm::SortOrder -realm::SortOrder RLMSortOrderFromDescriptors(RLMObjectSchema *objectSchema, NSArray *descriptors); diff --git a/Pods/Realm/include/RLMRealm.h b/Pods/Realm/include/RLMRealm.h deleted file mode 100644 index f3153a57..00000000 --- a/Pods/Realm/include/RLMRealm.h +++ /dev/null @@ -1,498 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@class RLMRealmConfiguration, RLMObject, RLMSchema, RLMMigration, RLMNotificationToken; - -NS_ASSUME_NONNULL_BEGIN - -/** - An `RLMRealm` instance (also referred to as "a Realm") represents a Realm - database. - - Realms can either be stored on disk (see `+[RLMRealm realmWithURL:]`) or in - memory (see `RLMRealmConfiguration`). - - `RLMRealm` instances are cached internally, and constructing equivalent `RLMRealm` - objects (for example, by using the same path or identifier) multiple times on a single thread - within a single iteration of the run loop will normally return the same - `RLMRealm` object. - - If you specifically want to ensure a `RLMRealm` instance is - destroyed (for example, if you wish to open a Realm, check some property, and - then possibly delete the Realm file and re-open it), place the code which uses - the Realm within an `@autoreleasepool {}` and ensure you have no other - strong references to it. - - @warning `RLMRealm` instances are not thread safe and cannot be shared across - threads or dispatch queues. Trying to do so will cause an exception to be thrown. - You must call this method on each thread you want - to interact with the Realm on. For dispatch queues, this means that you must - call it in each block which is dispatched, as a queue is not guaranteed to run - all of its blocks on the same thread. - */ - -@interface RLMRealm : NSObject - -#pragma mark - Creating & Initializing a Realm - -/** - Obtains an instance of the default Realm. - - The default Realm is used by the `RLMObject` class methods - which do not take a `RLMRealm` parameter, but is otherwise not special. The - default Realm is persisted as default.realm under the Documents directory of - your Application on iOS, and in your application's Application Support - directory on OS X. - - The default Realm is created using the default `RLMRealmConfiguration`, which - can be changed via `+[RLMRealmConfiguration setDefaultConfiguration:]`. - - @return The default `RLMRealm` instance for the current thread. - */ -+ (instancetype)defaultRealm; - -/** - Obtains an `RLMRealm` instance with the given configuration. - - @param configuration A configuration object to use when creating the Realm. - @param error If an error occurs, upon return contains an `NSError` object - that describes the problem. If you are not interested in - possible errors, pass in `NULL`. - - @return An `RLMRealm` instance. - */ -+ (nullable instancetype)realmWithConfiguration:(RLMRealmConfiguration *)configuration error:(NSError **)error; - -/** - Obtains an `RLMRealm` instance persisted at a specified file URL. - - @param fileURL The local URL of the file the Realm should be saved at. - - @return An `RLMRealm` instance. - */ -+ (instancetype)realmWithURL:(NSURL *)fileURL; - -/** - The `RLMSchema` used by the Realm. - */ -@property (nonatomic, readonly, null_unspecified) RLMSchema *schema; - -/** - Indicates if the Realm is currently engaged in a write transaction. - - @warning Wrapping mutating operations in a write transaction if this property returns `NO` - may cause a large number of write transactions to be created, which could negatively - impact Realm's performance. Always prefer performing multiple mutations in a single - transaction when possible. - */ -@property (nonatomic, readonly) BOOL inWriteTransaction; - -/** - The `RLMRealmConfiguration` object that was used to create this `RLMRealm` instance. - */ -@property (nonatomic, readonly) RLMRealmConfiguration *configuration; - -/** - Indicates if this Realm contains any objects. - */ -@property (nonatomic, readonly) BOOL isEmpty; - -#pragma mark - Notifications - -/** - The type of a block to run whenever the data within the Realm is modified. - - @see `-[RLMRealm addNotificationBlock:]` - */ -typedef void (^RLMNotificationBlock)(NSString *notification, RLMRealm *realm); - -#pragma mark - Receiving Notification when a Realm Changes - -/** - Adds a notification handler for changes in this Realm, and returns a notification token. - - Notification handlers are called after each write transaction is committed, - either on the current thread or other threads. - - Handler blocks are called on the same thread that they were added on, and may only be added on threads which are - currently within a run loop. Unless you are specifically creating and running a run loop on a background thread, this - will normally only be the main thread. - - The block has the following definition: - - typedef void(^RLMNotificationBlock)(NSString *notification, RLMRealm *realm); - - It receives the following parameters: - - - `NSString` \***notification**: The name of the incoming notification. See - `RLMRealmNotification` for information on what - notifications are sent. - - `RLMRealm` \***realm**: The Realm for which this notification occurred. - - @param block A block which is called to process Realm notifications. - - @return A token object which must be retained as long as you wish to continue - receiving change notifications. - */ -- (RLMNotificationToken *)addNotificationBlock:(RLMNotificationBlock)block __attribute__((warn_unused_result)); - -#pragma mark - Transactions - - -#pragma mark - Writing to a Realm - -/** - Begins a write transaction on the Realm. - - Only one write transaction can be open at a time. Write transactions cannot be - nested, and trying to begin a write transaction on a Realm which is - already in a write transaction will throw an exception. Calls to - `beginWriteTransaction` from `RLMRealm` instances in other threads will block - until the current write transaction completes. - - Before beginning the write transaction, `beginWriteTransaction` updates the - `RLMRealm` instance to the latest Realm version, as if `refresh` had been called, and - generates notifications if applicable. This has no effect if the Realm - was already up to date. - - It is rarely a good idea to have write transactions span multiple cycles of - the run loop, but if you do wish to do so you will need to ensure that the - Realm participating in the write transaction is kept alive until the write transaction - is committed. - */ -- (void)beginWriteTransaction; - -/** - Commits all write operations in the current write transaction, and ends the - transaction. - - @warning This method may only be called during a write transaction. - */ -- (void)commitWriteTransaction NS_SWIFT_UNAVAILABLE(""); - -/** - Commits all write operations in the current write transaction, and ends the - transaction. - - @warning This method may only be called during a write transaction. - - @param error If an error occurs, upon return contains an `NSError` object - that describes the problem. If you are not interested in - possible errors, pass in `NULL`. - - @return Whether the transaction succeeded. - */ -- (BOOL)commitWriteTransaction:(NSError **)error; - -/** - Reverts all writes made during the current write transaction and ends the transaction. - - This rolls back all objects in the Realm to the state they were in at the - beginning of the write transaction, and then ends the transaction. - - This restores the data for deleted objects, but does not revive invalidated - object instances. Any `RLMObject`s which were added to the Realm will be - invalidated rather than becoming unmanaged. - Given the following code: - - ObjectType *oldObject = [[ObjectType objectsWhere:@"..."] firstObject]; - ObjectType *newObject = [[ObjectType alloc] init]; - - [realm beginWriteTransaction]; - [realm addObject:newObject]; - [realm deleteObject:oldObject]; - [realm cancelWriteTransaction]; - - Both `oldObject` and `newObject` will return `YES` for `isInvalidated`, - but re-running the query which provided `oldObject` will once again return - the valid object. - - @warning This method may only be called during a write transaction. - */ -- (void)cancelWriteTransaction; - -/** - Performs actions contained within the given block inside a write transaction. - - @see `[RLMRealm transactionWithBlock:error:]` - */ -- (void)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block NS_SWIFT_UNAVAILABLE(""); - -/** - Performs actions contained within the given block inside a write transaction. - - Write transactions cannot be nested, and trying to execute a write transaction - on a Realm which is already participating in a write transaction will throw an - exception. Calls to `transactionWithBlock:` from `RLMRealm` instances in other - threads will block until the current write transaction completes. - - Before beginning the write transaction, `transactionWithBlock:` updates the - `RLMRealm` instance to the latest Realm version, as if `refresh` had been called, and - generates notifications if applicable. This has no effect if the Realm - was already up to date. - - @param block The block containing actions to perform. - @param error If an error occurs, upon return contains an `NSError` object - that describes the problem. If you are not interested in - possible errors, pass in `NULL`. - - @return Whether the transaction succeeded. - */ -- (BOOL)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block error:(NSError **)error; - -/** - Updates the Realm and outstanding objects managed by the Realm to point to the most recent data. - - @return Whether there were any updates for the Realm. Note that `YES` may be returned even if no data actually - changed. - */ -- (BOOL)refresh; - -/** - Set this property to `YES` to automatically update this Realm when changes happen in other threads. - - If set to `YES` (the default), changes made on other threads will be reflected - in this Realm on the next cycle of the run loop after the changes are - committed. If set to `NO`, you must manually call `-refresh` on the Realm to - update it to get the latest data. - - Note that by default, background threads do not have an active run loop and you - will need to manually call `-refresh` in order to update to the latest version, - even if `autorefresh` is set to `YES`. - - Even with this enabled, you can still call `-refresh` at any time to update the - Realm before the automatic refresh would occur. - - Notifications are sent when a write transaction is committed whether or not - automatic refreshing is enabled. - - Disabling `autorefresh` on a Realm without any strong references to it will not - have any effect, and `autorefresh` will revert back to `YES` the next time the Realm is created. - This is normally irrelevant as it means that there is - nothing to refresh (as persisted `RLMObject`s, `RLMArray`s, and `RLMResults` have strong - references to the Realm that manages them), but it means that setting - `RLMRealm.defaultRealm.autorefresh = NO` in - `application:didFinishLaunchingWithOptions:` and only later storing Realm - objects will not work. - - Defaults to `YES`. - */ -@property (nonatomic) BOOL autorefresh; - -/** - Writes a compacted and optionally encrypted copy of the Realm to the given local URL. - - The destination file cannot already exist. - - Note that if this method is called from within a write transaction, the *current* data is written, not the data from - the point when the previous write transaction was committed. - - @param fileURL Local URL to save the Realm to. - @param key Optional 64-byte encryption key to encrypt the new file with. - @param error If an error occurs, upon return contains an `NSError` object - that describes the problem. If you are not interested in - possible errors, pass in `NULL`. - - @return `YES` if the Realm was successfully written to disk, `NO` if an error occurred. -*/ -- (BOOL)writeCopyToURL:(NSURL *)fileURL encryptionKey:(nullable NSData *)key error:(NSError **)error; - -/** - Invalidates all `RLMObject`s and `RLMResults` managed by the Realm. - - A Realm holds a read lock on the version of the data accessed by it, so - that changes made to the Realm on different threads do not modify or delete the - data seen by this Realm. Calling this method releases the read lock, - allowing the space used on disk to be reused by later write transactions rather - than growing the file. This method should be called before performing long - blocking operations on a background thread on which you previously read data - from the Realm which you no longer need. - - All `RLMObject`, `RLMResults` and `RLMArray` instances obtained from this - `RLMRealm` instance on the current thread are invalidated. `RLMObject`s and `RLMArray`s - cannot be used. `RLMResults` will become empty. The Realm itself remains valid, - and a new read transaction is implicitly begun the next time data is read from the Realm. - - Calling this method multiple times in a row without reading any data from the - Realm, or before ever reading any data from the Realm, is a no-op. This method - may not be called on a read-only Realm. - */ -- (void)invalidate; - -#pragma mark - Accessing Objects - - -#pragma mark - Adding and Removing Objects from a Realm - -/** - Adds an object to the Realm. - - Once added, this object is considered to be managed by the Realm. It can be retrieved - using the `objectsWhere:` selectors on `RLMRealm` and on subclasses of `RLMObject`. - - When added, all child relationships referenced by this object will also be added to - the Realm if they are not already in it. - - If the object or any related objects are already being managed by a different Realm - an exception will be thrown. Use `-[RLMObject createInRealm:withObject:]` to insert a copy of a managed object - into a different Realm. - - The object to be added must be valid and cannot have been previously deleted - from a Realm (i.e. `isInvalidated` must be `NO`). - - @warning This method may only be called during a write transaction. - - @param object The object to be added to this Realm. - */ -- (void)addObject:(RLMObject *)object; - -/** - Adds all the objects in a collection to the Realm. - - This is the equivalent of calling `addObject:` for every object in a collection. - - @warning This method may only be called during a write transaction. - - @param array An enumerable object such as `NSArray` or `RLMResults` which contains objects to be added to - the Realm. - - @see `addObject:` - */ -- (void)addObjects:(id)array; - -/** - Adds or updates an existing object into the Realm. - - The object provided must have a designated primary key. If no objects exist in the Realm - with the same primary key value, the object is inserted. Otherwise, the existing object is - updated with any changed values. - - As with `addObject:`, the object cannot already be managed by a different - Realm. Use `-[RLMObject createOrUpdateInRealm:withValue:]` to copy values to - a different Realm. - - @warning This method may only be called during a write transaction. - - @param object The object to be added or updated. - */ -- (void)addOrUpdateObject:(RLMObject *)object; - -/** - Adds or updates all the objects in a collection into the Realm. - - This is the equivalent of calling `addOrUpdateObject:` for every object in a collection. - - @warning This method may only be called during a write transaction. - - @param array An `NSArray`, `RLMArray`, or `RLMResults` of `RLMObject`s (or subclasses) to be added to the Realm. - - @see `addOrUpdateObject:` - */ -- (void)addOrUpdateObjectsFromArray:(id)array; - -/** - Deletes an object from the Realm. Once the object is deleted it is considered invalidated. - - @warning This method may only be called during a write transaction. - - @param object The object to be deleted. - */ -- (void)deleteObject:(RLMObject *)object; - -/** - Deletes one or more objects from the Realm. - - This is the equivalent of calling `deleteObject:` for every object in a collection. - - @warning This method may only be called during a write transaction. - - @param array An `RLMArray`, `NSArray`, or `RLMResults` of `RLMObject`s (or subclasses) to be deleted. - - @see `deleteObject:` - */ -- (void)deleteObjects:(id)array; - -/** - Deletes all objects from the Realm. - - @warning This method may only be called during a write transaction. - - @see `deleteObject:` - */ -- (void)deleteAllObjects; - - -#pragma mark - Migrations - -/** - The type of a migration block used to migrate a Realm. - - @param migration A `RLMMigration` object used to perform the migration. The - migration object allows you to enumerate and alter any - existing objects which require migration. - - @param oldSchemaVersion The schema version of the Realm being migrated. - */ -typedef void (^RLMMigrationBlock)(RLMMigration *migration, uint64_t oldSchemaVersion); - -/** - Returns the schema version for a Realm at a given local URL. - - @param fileURL Local URL to a Realm file. - @param key 64-byte key used to encrypt the file, or `nil` if it is unencrypted. - @param error If an error occurs, upon return contains an `NSError` object - that describes the problem. If you are not interested in - possible errors, pass in `NULL`. - - @return The version of the Realm at `fileURL`, or `RLMNotVersioned` if the version cannot be read. - */ -+ (uint64_t)schemaVersionAtURL:(NSURL *)fileURL encryptionKey:(nullable NSData *)key error:(NSError **)error; - -/** - Performs the given Realm configuration's migration block on a Realm at the given path. - - This method is called automatically when opening a Realm for the first time and does - not need to be called explicitly. You can choose to call this method to control - exactly when and how migrations are performed. - - @param configuration The Realm configuration used to open and migrate the Realm. - @return The error that occurred while applying the migration, if any. - - @see RLMMigration - */ -+ (NSError *)migrateRealm:(RLMRealmConfiguration *)configuration; - -@end - -/** - A token which is returned from methods which subscribe to changes to a Realm. - - Change subscriptions in Realm return an `RLMNotificationToken` instance, - which can be used to unsubscribe from the changes. You must store a strong - reference to the token for as long as you want to continue to receive notifications. - When you wish to stop, call the `-stop` method. Notifications are also stopped if - the token is deallocated. - */ -@interface RLMNotificationToken : NSObject -/// Stops notifications for the change subscription that returned this token. -- (void)stop; -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMRealmConfiguration.h b/Pods/Realm/include/RLMRealmConfiguration.h deleted file mode 100644 index 598c0c0c..00000000 --- a/Pods/Realm/include/RLMRealmConfiguration.h +++ /dev/null @@ -1,91 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - An `RLMRealmConfiguration` instance describes the different options used to - create an instance of a Realm. - - `RLMRealmConfiguration` instances are just plain `NSObject`s. Unlike `RLMRealm`s - and `RLMObject`s, they can be freely shared between threads as long as you do not - mutate them. - - Creating configuration objects for class subsets (by setting the - `objectClasses` property) can be expensive. Because of this, you will normally want to - cache and reuse a single configuration object for each distinct configuration rather than - creating a new object each time you open a Realm. - */ -@interface RLMRealmConfiguration : NSObject - -#pragma mark - Default Configuration - -/** - Returns the default configuration used to create Realms when no other - configuration is explicitly specified (i.e. `+[RLMRealm defaultRealm]`). - - @return The default Realm configuration. - */ -+ (instancetype)defaultConfiguration; - -/** - Sets the default configuration to the given `RLMRealmConfiguration`. - - @param configuration The new default Realm configuration. - */ -+ (void)setDefaultConfiguration:(RLMRealmConfiguration *)configuration; - -#pragma mark - Properties - -/// The local URL of the Realm file. Mutually exclusive with `inMemoryIdentifier`. -@property (nonatomic, copy, nullable) NSURL *fileURL; - -/// A string used to identify a particular in-memory Realm. Mutually exclusive with `path`. -@property (nonatomic, copy, nullable) NSString *inMemoryIdentifier; - -/// A 64-byte key to use to encrypt the data, or `nil` if encryption is not enabled. -@property (nonatomic, copy, nullable) NSData *encryptionKey; - -/// Whether the Realm is read-only (must be `YES` for read-only files). -@property (nonatomic) BOOL readOnly; - -/// The current schema version. -@property (nonatomic) uint64_t schemaVersion; - -/// The block which migrates the Realm to the current version. -@property (nonatomic, copy, nullable) RLMMigrationBlock migrationBlock; - -/** - Whether to recreate the Realm file with the provided schema if a migration is required. - This is the case when the stored schema differs from the provided schema or - the stored schema version differs from the version on this configuration. - Setting this property to `YES` deletes the file if a migration would otherwise be required or executed. - - @note Setting this property to `YES` doesn't disable file format migrations. - */ -@property (nonatomic) BOOL deleteRealmIfMigrationNeeded; - -/// The classes persisted in the Realm. -@property (nonatomic, copy, nullable) NSArray *objectClasses; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMRealmConfiguration_Private.h b/Pods/Realm/include/RLMRealmConfiguration_Private.h deleted file mode 100644 index 91770a29..00000000 --- a/Pods/Realm/include/RLMRealmConfiguration_Private.h +++ /dev/null @@ -1,38 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@class RLMSchema; - -@interface RLMRealmConfiguration () - -@property (nonatomic, readwrite) bool cache; -@property (nonatomic, readwrite) bool dynamic; -@property (nonatomic, readwrite) bool disableFormatUpgrade; -@property (nonatomic, copy) RLMSchema *customSchema; - -// Get the default confiugration without copying it -+ (RLMRealmConfiguration *)rawDefaultConfiguration; - -+ (void)resetRealmConfigurationState; -@end - -// Get a path in the platform-appropriate documents directory with the given filename -FOUNDATION_EXTERN NSString *RLMRealmPathForFile(NSString *fileName); -FOUNDATION_EXTERN NSString *RLMRealmPathForFileAndBundleIdentifier(NSString *fileName, NSString *mainBundleIdentifier); diff --git a/Pods/Realm/include/RLMRealmConfiguration_Private.hpp b/Pods/Realm/include/RLMRealmConfiguration_Private.hpp deleted file mode 100644 index ec06f53e..00000000 --- a/Pods/Realm/include/RLMRealmConfiguration_Private.hpp +++ /dev/null @@ -1,24 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMRealmConfiguration_Private.h" -#import "shared_realm.hpp" - -@interface RLMRealmConfiguration () -- (realm::Realm::Config&)config; -@end diff --git a/Pods/Realm/include/RLMRealmUtil.hpp b/Pods/Realm/include/RLMRealmUtil.hpp deleted file mode 100644 index b69c727d..00000000 --- a/Pods/Realm/include/RLMRealmUtil.hpp +++ /dev/null @@ -1,42 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import -#import - -@class RLMRealm; - -namespace realm { - class BindingContext; -} - -// Add a Realm to the weak cache -void RLMCacheRealm(std::string const& path, RLMRealm *realm); -// Get a Realm for the given path which can be used on the current thread -RLMRealm *RLMGetThreadLocalCachedRealmForPath(std::string const& path); -// Get a Realm for the given path -RLMRealm *RLMGetAnyCachedRealmForPath(std::string const& path); -// Clear the weak cache of Realms -void RLMClearRealmCache(); - -// Install an uncaught exception handler that cancels write transactions -// for all cached realms on the current thread -void RLMInstallUncaughtExceptionHandler(); - -std::unique_ptr RLMCreateBindingContext(RLMRealm *realm); diff --git a/Pods/Realm/include/RLMRealm_Dynamic.h b/Pods/Realm/include/RLMRealm_Dynamic.h deleted file mode 100644 index 9954880f..00000000 --- a/Pods/Realm/include/RLMRealm_Dynamic.h +++ /dev/null @@ -1,113 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import -#import - -@class RLMResults; - -@interface RLMRealm (Dynamic) - -#pragma mark - Getting Objects from a Realm - -/** - Returns all objects of a given type from the Realm. - - @warning This method is useful only in specialized circumstances, for example, when building components - that integrate with Realm. The preferred way to get objects of a single class is to use the class - methods on `RLMObject`. - - @param className The name of the `RLMObject` subclass to retrieve on (e.g. `MyClass.className`). - - @return An `RLMResults` containing all objects in the Realm of the given type. - - @see `+[RLMObject allObjects]` - */ -- (RLMResults *)allObjects:(NSString *)className; - -/** - Returns all objects matching the given predicate from the Realm. - - @warning This method is useful only in specialized circumstances, for example, when building components - that integrate with Realm. The preferred way to get objects of a single class is to use the class - methods on `RLMObject`. - - @param className The type of objects you are looking for (name of the class). - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return An `RLMResults` containing results matching the given predicate. - - @see `+[RLMObject objectsWhere:]` - */ -- (RLMResults *)objects:(NSString *)className where:(NSString *)predicateFormat, ...; - -/** - Returns all objects matching the given predicate from the Realm. - - @warning This method is useful only in specialized circumstances, for example, when building components - that integrate with Realm. The preferred way to get objects of a single class is to use the class - methods on `RLMObject`. - - @param className The type of objects you are looking for (name of the class). - @param predicate The predicate with which to filter the objects. - - @return An `RLMResults` containing results matching the given predicate. - - @see `+[RLMObject objectsWhere:]` - */ -- (RLMResults *)objects:(NSString *)className withPredicate:(NSPredicate *)predicate; - -/** - Returns the object of the given type with the given primary key from the Realm. - - @warning This method is useful only in specialized circumstances, for example, when building components - that integrate with Realm. The preferred way to get an object of a single class is to use the class - methods on `RLMObject`. - - @param className The class name for the object you are looking for. - @param primaryKey The primary key value for the object you are looking for. - - @return An object, or `nil` if an object with the given primary key does not exist. - - @see `+[RLMObject objectForPrimaryKey:]` - */ -- (RLMObject *)objectWithClassName:(NSString *)className forPrimaryKey:(id)primaryKey; - -/** - Creates a `RLMObject` instance of type `className` in the Realm, and populates it using a given object. - - @warning This method is useful only in specialized circumstances, for example, when building components - that integrate with Realm. If you are simply building an app on Realm, it is recommended to - use `[RLMObject createInDefaultRealmWithValue:]`. - - @param value The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `NSArray` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `NSArray`, all properties must be present, - valid and in the same order as the properties defined in the model. - - @return An `RLMObject` instance of type `className`. - */ --(RLMObject *)createObject:(NSString *)className withValue:(id)value; - -@end diff --git a/Pods/Realm/include/RLMRealm_Private.h b/Pods/Realm/include/RLMRealm_Private.h deleted file mode 100644 index f5704a72..00000000 --- a/Pods/Realm/include/RLMRealm_Private.h +++ /dev/null @@ -1,50 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@class RLMFastEnumerator; - -// Disable syncing files to disk. Cannot be re-enabled. Use only for tests. -FOUNDATION_EXTERN void RLMDisableSyncToDisk(); - -FOUNDATION_EXTERN NSData *RLMRealmValidatedEncryptionKey(NSData *key); - -// Translate an in-flight exception resulting from opening a SharedGroup to -// an NSError or NSException (if error is nil) -void RLMRealmTranslateException(NSError **error); - -// RLMRealm private members -@interface RLMRealm () - -@property (nonatomic, readonly) BOOL dynamic; -@property (nonatomic, readwrite) RLMSchema *schema; - -+ (void)resetRealmState; - -- (void)registerEnumerator:(RLMFastEnumerator *)enumerator; -- (void)unregisterEnumerator:(RLMFastEnumerator *)enumerator; -- (void)detachAllEnumerators; - -- (void)sendNotifications:(NSString *)notification; -- (void)verifyThread; -- (void)verifyNotificationsAreSupported; - -+ (NSString *)writeableTemporaryPathForFile:(NSString *)fileName; - -@end diff --git a/Pods/Realm/include/RLMRealm_Private.hpp b/Pods/Realm/include/RLMRealm_Private.hpp deleted file mode 100644 index 3b6c98de..00000000 --- a/Pods/Realm/include/RLMRealm_Private.hpp +++ /dev/null @@ -1,38 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMRealm_Private.h" -#import "RLMUtil.hpp" -#import "shared_realm.hpp" - -#import - -namespace realm { - class Group; - class Realm; - typedef std::shared_ptr SharedRealm; -} - -@interface RLMRealm () { - @public - realm::SharedRealm _realm; -} - -// FIXME - group should not be exposed -@property (nonatomic, readonly) realm::Group *group; -@end diff --git a/Pods/Realm/include/RLMResults.h b/Pods/Realm/include/RLMResults.h deleted file mode 100644 index b0066d67..00000000 --- a/Pods/Realm/include/RLMResults.h +++ /dev/null @@ -1,332 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMObject, RLMRealm, RLMNotificationToken; - -/** - `RLMResults` is an auto-updating container type in Realm returned from object - queries. It represents the results of the query in the form of a collection of objects. - - `RLMResults` can be queried using the same predicates as `RLMObject` and `RLMArray`, - and you can chain queries to further filter results. - - `RLMResults` always reflect the current state of the Realm on the current thread, - including during write transactions on the current thread. The one exception to - this is when using `for...in` fast enumeration, which will always enumerate - over the objects which matched the query when the enumeration is begun, even if - some of them are deleted or modified to be excluded by the filter during the - enumeration. - - `RLMResults` are lazily evaluated the first time they are accessed; they only - run queries when the result of the query is requested. This means that - chaining several temporary `RLMResults` to sort and filter your data does not - perform any extra work processing the intermediate state. - - Once the results have been evaluated or a notification block has been added, - the results are eagerly kept up-to-date, with the work done to keep them - up-to-date done on a background thread whenever possible. - - `RLMResults` cannot be directly instantiated. - */ -@interface RLMResults : NSObject - -#pragma mark - Properties - -/** - The number of objects in the results collection. - */ -@property (nonatomic, readonly, assign) NSUInteger count; - -/** - The class name (i.e. type) of the `RLMObject`s contained in the results collection. - */ -@property (nonatomic, readonly, copy) NSString *objectClassName; - -/** - The Realm which manages this results collection. - */ -@property (nonatomic, readonly) RLMRealm *realm; - -/** - Indicates if the results collection is no longer valid. - - The results collection becomes invalid if `invalidate` is called on the containing `realm`. - An invalidated results collection can be accessed, but will always be empty. - */ -@property (nonatomic, readonly, getter = isInvalidated) BOOL invalidated; - -#pragma mark - Accessing Objects from an RLMResults - -/** - Returns the object at the index specified. - - @param index The index to look up. - - @return An `RLMObject` of the type contained in the results collection. - */ -- (RLMObjectType)objectAtIndex:(NSUInteger)index; - -/** - Returns the first object in the results collection. - - Returns `nil` if called on an empty results collection. - - @return An `RLMObject` of the type contained in the results collection. - */ -- (nullable RLMObjectType)firstObject; - -/** - Returns the last object in the results collection. - - Returns `nil` if called on an empty results collection. - - @return An `RLMObject` of the type contained in the results collection. - */ -- (nullable RLMObjectType)lastObject; - -#pragma mark - Querying Results - -/** - Returns the index of an object in the results collection. - - Returns `NSNotFound` if the object is not found in the results collection. - - @param object An object (of the same type as returned from the `objectClassName` selector). - */ -- (NSUInteger)indexOfObject:(RLMObjectType)object; - -/** - Returns the index of the first object in the results collection matching the predicate. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return The index of the object, or `NSNotFound` if the object is not found in the results collection. - */ -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat, ...; - -/// :nodoc: -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args; - -/** - Returns the index of the first object in the results collection matching the predicate. - - @param predicate The predicate with which to filter the objects. - - @return The index of the object, or `NSNotFound` if the object is not found in the results collection. - */ -- (NSUInteger)indexOfObjectWithPredicate:(NSPredicate *)predicate; - -/** - Returns all the objects matching the given predicate in the results collection. - - @param predicateFormat A predicate format string, optionally followed by a variable number of arguments. - - @return An `RLMResults` of objects that match the given predicate. - */ -- (RLMResults *)objectsWhere:(NSString *)predicateFormat, ...; - -/// :nodoc: -- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args; - -/** - Returns all the objects matching the given predicate in the results collection. - - @param predicate The predicate with which to filter the objects. - - @return An `RLMResults` of objects that match the given predicate. - */ -- (RLMResults *)objectsWithPredicate:(NSPredicate *)predicate; - -/** - Returns a sorted `RLMResults` from an existing results collection. - - @param property The property name to sort by. - @param ascending The direction to sort in. - - @return An `RLMResults` sorted by the specified property. - */ -- (RLMResults *)sortedResultsUsingProperty:(NSString *)property ascending:(BOOL)ascending; - -/** - Returns a sorted `RLMResults` from an existing results collection. - - @param properties An array of `RLMSortDescriptor`s to sort by. - - @return An `RLMResults` sorted by the specified properties. - */ -- (RLMResults *)sortedResultsUsingDescriptors:(NSArray *)properties; - -#pragma mark - Notifications - -/** - Registers a block to be called each time the results collection changes. - - The block will be asynchronously called with the initial results collection, - and then called again after each write transaction which changes either any - of the objects in the results, or which objects are in the results. - - The `change` parameter will be `nil` the first time the block is called. - For each call after that, it will contain information about - which rows in the results collection were added, removed or modified. If a - write transaction did not modify any objects in the results collection, - the block is not called at all. See the `RLMCollectionChange` documentation for - information on how the changes are reported and an example of updating a - `UITableView`. - - If an error occurs the block will be called with `nil` for the results - parameter and a non-`nil` error. Currently the only errors that can occur are - when opening the Realm on the background worker thread. - - At the time when the block is called, the `RLMResults` object will be fully - evaluated and up-to-date, and as long as you do not perform a write transaction - on the same thread or explicitly call `-[RLMRealm refresh]`, accessing it will - never perform blocking work. - - Notifications are delivered via the standard run loop, and so can't be - delivered while the run loop is blocked by other activity. When - notifications can't be delivered instantly, multiple notifications may be - coalesced into a single notification. This can include the notification - with the initial results. For example, the following code performs a write - transaction immediately after adding the notification block, so there is no - opportunity for the initial notification to be delivered first. As a - result, the initial notification will reflect the state of the Realm after - the write transaction. - - RLMResults *results = [Dog allObjects]; - NSLog(@"dogs.count: %zu", dogs.count); // => 0 - self.token = [results addNotificationBlock:^(RLMResults *dogs, - RLMCollectionChange *changes, - NSError *error) { - // Only fired once for the example - NSLog(@"dogs.count: %zu", dogs.count); // => 1 - }]; - [realm transactionWithBlock:^{ - Dog *dog = [[Dog alloc] init]; - dog.name = @"Rex"; - [realm addObject:dog]; - }]; - // end of run loop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `-stop` on the token. - - @warning This method cannot be called during a write transaction, or when the - containing Realm is read-only. - - @param block The block to be called whenever a change occurs. - @return A token which must be held for as long as you want updates to be delivered. - */ -- (RLMNotificationToken *)addNotificationBlock:(void (^)(RLMResults *__nullable results, - RLMCollectionChange *__nullable change, - NSError *__nullable error))block __attribute__((warn_unused_result)); - -#pragma mark - Aggregating Property Values - -/** - Returns the minimum (lowest) value of the given property among all the objects - represented by the results collection. - - NSNumber *min = [results minOfProperty:@"age"]; - - @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties. - - @param property The property whose minimum value is desired. Only properties of types `int`, `float`, `double`, and - `NSDate` are supported. - - @return The minimum value of the property. - */ -- (nullable id)minOfProperty:(NSString *)property; - -/** - Returns the maximum (highest) value of the given property among all the objects represented by the results collection. - - NSNumber *max = [results maxOfProperty:@"age"]; - - @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties. - - @param property The property whose maximum value is desired. Only properties of types `int`, `float`, `double`, and - `NSDate` are supported. - - @return The maximum value of the property. - */ -- (nullable id)maxOfProperty:(NSString *)property; - -/** - Returns the sum of the values of a given property over all the objects represented by the results collection. - - NSNumber *sum = [results sumOfProperty:@"age"]; - - @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties. - - @param property The property whose values should be summed. Only properties of types `int`, `float`, and `double` are - supported. - - @return The sum of the given property. - */ -- (NSNumber *)sumOfProperty:(NSString *)property; - -/** - Returns the average value of a given property over the objects represented by the results collection. - - NSNumber *average = [results averageOfProperty:@"age"]; - - @warning You cannot use this method on `RLMObject`, `RLMArray`, and `NSData` properties. - - @param property The property whose average value should be calculated. Only properties of types `int`, `float`, and - `double` are supported. - - @return The average value of the given property. This will be of type `double` for both `float` and `double` - properties. - */ -- (nullable NSNumber *)averageOfProperty:(NSString *)property; - -/// :nodoc: -- (id)objectAtIndexedSubscript:(NSUInteger)index; - -#pragma mark - Unavailable Methods - -/** - `-[RLMResults init]` is not available because `RLMResults` cannot be created directly. - `RLMResults` can be obtained by querying a Realm. - */ -- (instancetype)init __attribute__((unavailable("RLMResults cannot be created directly"))); - -/** - `+[RLMResults new]` is not available because `RLMResults` cannot be created directly. - `RLMResults` can be obtained by querying a Realm. - */ -+ (instancetype)new __attribute__((unavailable("RLMResults cannot be created directly"))); - -@end - -/** - `RLMLinkingObjects` is an auto-updating container type. It represents a collection of objects that link to its - parent object. - - For more information, please see the "Inverse Relationships" section in the - [documentation](https://realm.io/docs/objc/latest/#relationships). - */ -@interface RLMLinkingObjects : RLMResults -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMResults_Private.h b/Pods/Realm/include/RLMResults_Private.h deleted file mode 100644 index 1adaf144..00000000 --- a/Pods/Realm/include/RLMResults_Private.h +++ /dev/null @@ -1,29 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@class RLMObjectSchema; - -@interface RLMResults () -@property (nonatomic, unsafe_unretained) RLMObjectSchema *objectSchema; -@property (nonatomic, readonly, getter=isAttached) BOOL attached; - -+ (instancetype)emptyDetachedResults; - -@end diff --git a/Pods/Realm/include/RLMSchema.h b/Pods/Realm/include/RLMSchema.h deleted file mode 100644 index 86a3173a..00000000 --- a/Pods/Realm/include/RLMSchema.h +++ /dev/null @@ -1,77 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMObjectSchema; - -/** - `RLMSchema` instances represent collections of model object schemas persisted to a Realm. - - When using Realm, `RLMSchema` instances allow performing migrations and - introspecting the database's schema. - - Schemas map to collections of tables in the core database. - */ -@interface RLMSchema : NSObject - -#pragma mark - Properties - -/** - An `NSArray` containing `RLMObjectSchema`s for all object types in the Realm. - - This property is intended to be used during migrations for dynamic introspection. - - @see `RLMObjectSchema` - */ -@property (nonatomic, readonly, copy) NSArray *objectSchema; - -#pragma mark - Methods - -/** - Returns an `RLMObjectSchema` for the given class name in the schema. - - @param className The object class name. - @return An `RLMObjectSchema` for the given class in the schema. - - @see `RLMObjectSchema` - */ -- (nullable RLMObjectSchema *)schemaForClassName:(NSString *)className; - -/** - Looks up and returns an `RLMObjectSchema` for the given class name in the Realm. - - If there is no object of type `className` in the schema, an exception will be thrown. - - @param className The object class name. - @return An `RLMObjectSchema` for the given class in this Realm. - - @see `RLMObjectSchema` - */ -- (RLMObjectSchema *)objectForKeyedSubscript:(id )className; - -/** - Returns a Boolean value that indicates whether two `RLMSchema` instances are equivalent. - */ -- (BOOL)isEqualToSchema:(RLMSchema *)schema; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Realm/include/RLMSchema_Private.h b/Pods/Realm/include/RLMSchema_Private.h deleted file mode 100644 index 3eecb9ec..00000000 --- a/Pods/Realm/include/RLMSchema_Private.h +++ /dev/null @@ -1,65 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifdef __cplusplus -extern "C" { -#endif - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class RLMRealm; - -// -// RLMSchema private interface -// -@interface RLMSchema () - -/** - Returns an `RLMSchema` containing only the given `RLMObject` subclasses. - - @param classes The classes to be included in the schema. - - @return An `RLMSchema` containing only the given classes. - */ -+ (instancetype)schemaWithObjectClasses:(NSArray *)classes; - -@property (nonatomic, readwrite, copy) NSArray *objectSchema; - -// schema based on runtime objects -+ (instancetype)sharedSchema; - -// schema based upon all currently registered object classes -+ (instancetype)partialSharedSchema; - -// class for string -+ (nullable Class)classForString:(NSString *)className; - -// shallow copy for reusing schema properties accross the same Realm on multiple threads -- (instancetype)shallowCopy; - -+ (RLMObjectSchema *)sharedSchemaForClass:(Class)cls; - -@end - -NS_ASSUME_NONNULL_END - -#ifdef __cplusplus -} -#endif diff --git a/Pods/Realm/include/RLMSchema_Private.hpp b/Pods/Realm/include/RLMSchema_Private.hpp deleted file mode 100644 index bd9e6d63..00000000 --- a/Pods/Realm/include/RLMSchema_Private.hpp +++ /dev/null @@ -1,31 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import "RLMSchema_Private.h" - -#import - -namespace realm { - class Schema; - class ObjectSchema; -} - -@interface RLMSchema () -+ (instancetype)dynamicSchemaFromObjectStoreSchema:(realm::Schema &)objectStoreSchema; -- (std::unique_ptr)objectStoreCopy; -@end diff --git a/Pods/Realm/include/RLMSwiftBridgingHeader.h b/Pods/Realm/include/RLMSwiftBridgingHeader.h deleted file mode 100644 index 47580437..00000000 --- a/Pods/Realm/include/RLMSwiftBridgingHeader.h +++ /dev/null @@ -1,49 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import - -@interface RLMRealm (Swift) -+ (void)resetRealmState; -@end - -@interface RLMArray (Swift) - -- (instancetype)initWithObjectClassName:(NSString *)objectClassName; - -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args; -- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args; - -@end - -@interface RLMResults (Swift) - -- (NSUInteger)indexOfObjectWhere:(NSString *)predicateFormat args:(va_list)args; -- (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args; - -@end - -@interface RLMObjectBase (Swift) - -- (instancetype)initWithRealm:(RLMRealm *)realm schema:(RLMObjectSchema *)schema defaultValues:(BOOL)useDefaults; - -+ (RLMResults *)objectsWhere:(NSString *)predicateFormat args:(va_list)args; -+ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat args:(va_list)args; - -@end diff --git a/Pods/Realm/include/RLMSwiftSupport.h b/Pods/Realm/include/RLMSwiftSupport.h deleted file mode 100644 index 89db57f5..00000000 --- a/Pods/Realm/include/RLMSwiftSupport.h +++ /dev/null @@ -1,26 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -@interface RLMSwiftSupport : NSObject - -+ (BOOL)isSwiftClassName:(NSString *)className; -+ (NSString *)demangleClassName:(NSString *)className; - -@end diff --git a/Pods/Realm/include/RLMUpdateChecker.hpp b/Pods/Realm/include/RLMUpdateChecker.hpp deleted file mode 100644 index 7f01ac73..00000000 --- a/Pods/Realm/include/RLMUpdateChecker.hpp +++ /dev/null @@ -1,20 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -// Asynchronously check for updates to Realm if running on a simulator -void RLMCheckForUpdates(); diff --git a/Pods/Realm/include/RLMUtil.hpp b/Pods/Realm/include/RLMUtil.hpp deleted file mode 100644 index 6faaa022..00000000 --- a/Pods/Realm/include/RLMUtil.hpp +++ /dev/null @@ -1,200 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import -#import -#import - -#import -#import -#import -#import -#import - -namespace realm { - class Mixed; -} - -@class RLMObjectSchema; -@class RLMProperty; - -namespace realm { - class RealmFileException; -} - -__attribute__((format(NSString, 1, 2))) -NSException *RLMException(NSString *fmt, ...); -NSException *RLMException(std::exception const& exception); - -NSError *RLMMakeError(RLMError code, std::exception const& exception); -NSError *RLMMakeError(RLMError code, const realm::util::File::AccessError&); -NSError *RLMMakeError(RLMError code, const realm::RealmFileException&); -NSError *RLMMakeError(std::system_error const& exception); -NSError *RLMMakeError(NSException *exception); - -void RLMSetErrorOrThrow(NSError *error, NSError **outError); - -// returns if the object can be inserted as the given type -BOOL RLMIsObjectValidForProperty(id obj, RLMProperty *prop); - -// gets default values for the given schema (+defaultPropertyValues) -// merges with native property defaults if Swift class -NSDictionary *RLMDefaultValuesForObjectSchema(RLMObjectSchema *objectSchema); - -BOOL RLMIsDebuggerAttached(); -BOOL RLMIsRunningInPlayground(); - -// C version of isKindOfClass -static inline BOOL RLMIsKindOfClass(Class class1, Class class2) { - while (class1) { - if (class1 == class2) return YES; - class1 = class_getSuperclass(class1); - } - return NO; -} - -// Returns whether the class is a descendent of RLMObjectBase -BOOL RLMIsObjectOrSubclass(Class klass); - -// Returns whether the class is an indirect descendant of RLMObjectBase -BOOL RLMIsObjectSubclass(Class klass); - -template -static inline T *RLMDynamicCast(__unsafe_unretained id obj) { - if ([obj isKindOfClass:[T class]]) { - return obj; - } - return nil; -} - -template -static inline T RLMCoerceToNil(__unsafe_unretained T obj) { - if (static_cast(obj) == NSNull.null) { - return nil; - } - else if (__unsafe_unretained auto optional = RLMDynamicCast(obj)) { - return RLMCoerceToNil(optional.underlyingValue); - } - return obj; -} - -// Translate an rlmtype to a string representation -static inline NSString *RLMTypeToString(RLMPropertyType type) { - switch (type) { - case RLMPropertyTypeString: - return @"string"; - case RLMPropertyTypeInt: - return @"int"; - case RLMPropertyTypeBool: - return @"bool"; - case RLMPropertyTypeDate: - return @"date"; - case RLMPropertyTypeData: - return @"data"; - case RLMPropertyTypeDouble: - return @"double"; - case RLMPropertyTypeFloat: - return @"float"; - case RLMPropertyTypeAny: - return @"any"; - case RLMPropertyTypeObject: - return @"object"; - case RLMPropertyTypeArray: - return @"array"; - case RLMPropertyTypeLinkingObjects: - return @"linking objects"; - } - return @"Unknown"; -} - -// String conversion utilities -static inline NSString * RLMStringDataToNSString(realm::StringData stringData) { - static_assert(sizeof(NSUInteger) >= sizeof(size_t), - "Need runtime overflow check for size_t to NSUInteger conversion"); - if (stringData.is_null()) { - return nil; - } - else { - return [[NSString alloc] initWithBytes:stringData.data() - length:stringData.size() - encoding:NSUTF8StringEncoding]; - } -} - -static inline realm::StringData RLMStringDataWithNSString(__unsafe_unretained NSString *const string) { - static_assert(sizeof(size_t) >= sizeof(NSUInteger), - "Need runtime overflow check for NSUInteger to size_t conversion"); - return realm::StringData(string.UTF8String, - [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]); -} - -// Binary convertion utilities -static inline NSData *RLMBinaryDataToNSData(realm::BinaryData binaryData) { - return binaryData ? [NSData dataWithBytes:binaryData.data() length:binaryData.size()] : nil; -} - -static inline realm::BinaryData RLMBinaryDataForNSData(__unsafe_unretained NSData *const data) { - // this is necessary to ensure that the empty NSData isn't treated by core as the null realm::BinaryData - // because data.bytes == 0 when data.length == 0 - // the casting bit ensures that we create a data with a non-null pointer - auto bytes = static_cast(data.bytes) ?: static_cast((__bridge void *)data); - return realm::BinaryData(bytes, data.length); -} - -// Date convertion utilities -// These use the reference date and shift the seconds rather than just getting -// the time interval since the epoch directly to avoid losing sub-second precision -static inline NSDate *RLMTimestampToNSDate(realm::Timestamp ts) { - if (ts.is_null()) - return nil; - auto timeInterval = ts.get_seconds() - NSTimeIntervalSince1970 + ts.get_nanoseconds() / 1'000'000'000.0; - return [NSDate dateWithTimeIntervalSinceReferenceDate:timeInterval]; -} - -static inline realm::Timestamp RLMTimestampForNSDate(__unsafe_unretained NSDate *const date) { - auto timeInterval = date.timeIntervalSinceReferenceDate; - if (isnan(timeInterval)) - return {0, 0}; // Arbitrary choice - - // Clamp dates that we can't represent as a Timestamp to the maximum value - if (timeInterval >= std::numeric_limits::max() - NSTimeIntervalSince1970) - return {std::numeric_limits::max(), 1'000'000'000 - 1}; - if (timeInterval - NSTimeIntervalSince1970 < std::numeric_limits::min()) - return {std::numeric_limits::min(), -1'000'000'000 + 1}; - - auto seconds = static_cast(timeInterval); - auto nanoseconds = static_cast((timeInterval - seconds) * 1'000'000'000.0); - seconds += static_cast(NSTimeIntervalSince1970); - - // Seconds and nanoseconds have to have the same sign - if (nanoseconds < 0 && seconds > 0) { - nanoseconds += 1'000'000'000; - --seconds; - } - return {seconds, nanoseconds}; -} - -static inline NSUInteger RLMConvertNotFound(size_t index) { - return index == realm::not_found ? NSNotFound : index; -} - -id RLMMixedToObjc(realm::Mixed const& value); - -// For unit testing purposes, allow an Objective-C class named FakeObject to also be used -// as the base class of persisted objects. This allows for testing invalid schemas. -void RLMSetTreatFakeObjectAsRLMObject(BOOL flag); diff --git a/Pods/Realm/include/Realm.h b/Pods/Realm/include/Realm.h deleted file mode 100644 index 886f19e8..00000000 --- a/Pods/Realm/include/Realm.h +++ /dev/null @@ -1,30 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import diff --git a/Pods/Realm/include/binding_context.hpp b/Pods/Realm/include/binding_context.hpp deleted file mode 100644 index d57ce541..00000000 --- a/Pods/Realm/include/binding_context.hpp +++ /dev/null @@ -1,158 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef BINDING_CONTEXT_HPP -#define BINDING_CONTEXT_HPP - -#include "index_set.hpp" - -#include -#include - -namespace realm { -// BindingContext is the extension point for adding binding-specific behavior to -// a SharedRealm. It can be used to store additonal data associated with the -// Realm which is needed by the binding, and there are several methods which -// can be overridden to receive notifications of state changes within the Realm. -// -// A simple implementation which lets the user register functions to be -// called on refresh could look like the following: -// -// class BindingContextImplementation : public BindingContext { -// public: -// // A token returned from add_notification that can be used to remove the -// // notification later -// struct token : private std::list>::iterator { -// token(std::list>::iterator it) : std::list>::iterator(it) { } -// friend class DelegateImplementation; -// }; -// -// token add_notification(std::function func) -// { -// m_registered_notifications.push_back(std::move(func)); -// return token(std::prev(m_registered_notifications.end())); -// } -// -// void remove_notification(token entry) -// { -// m_registered_notifications.erase(entry); -// } -// -// // Override the did_change method to call each registered notification -// void did_change(std::vector const&, std::vector const&) override -// { -// // Loop oddly so that unregistering a notification from within the -// // registered function works -// for (auto it = m_registered_notifications.begin(); it != m_registered_notifications.end(); ) { -// (*it++)(); -// } -// } -// -// private: -// std::list> m_registered_notifications; -// }; -class BindingContext { -public: - virtual ~BindingContext() = default; - - // If the user adds a notification handler to the Realm, will it ever - // actually be called? - virtual bool can_deliver_notifications() const noexcept { return true; } - - // Called by the Realm when a write transaction is committed to the file by - // a different Realm instance (possibly in a different process) - virtual void changes_available() { } - - struct ObserverState; - - // Override this function if you want to recieve detailed information about - // external changes to a specific set of objects. - // This is called before each operation which may advance the read - // transaction to include - // ObserverStates for each row for which detailed change information is - // desired. - virtual std::vector get_observed_rows() { return {}; } - - // Called immediately before the read transaction is advanced if detailed - // change information was requested (by returning a non-empty array from - // get_observed_rows()). - // The observers vector is the vector returned by get_observed_row(), - // updated with change information. The invalidated vector is a list of the - // `info` fields of observed rows which will be deleted. - virtual void will_change(std::vector const& observers, - std::vector const& invalidated); - - // Called immediately after the read transaction version is advanced. Unlike - // will_change(), this is called even if detailed change information was not - // requested or if the Realm is not actually in a read transactuib, although - // both vectors will be empty in that case. - virtual void did_change(std::vector const& observers, - std::vector const& invalidated); - - // Change information for a single field of a row - struct ColumnInfo { - // Did this column change? - bool changed = false; - // For LinkList columns, what kind of change occurred? - // Always None for other column types - enum class Kind { - None, // No change - Set, // The entries at `indices` were assigned to - Insert, // New values were inserted at each of the indices given - Remove, // Values were removed at each of the indices given - SetAll // The entire LinkList has been replaced with a new set of values - } kind = Kind::None; - // The indices where things happened for Set, Insert and Remove - // Not used for None and SetAll - IndexSet indices; - }; - - // Information about an observed row in a table - // - // Each object which needs detailed change information should have an - // ObserverState entry in the vector returned from get_observed_rows(), with - // the initial table and row indexes set (and optionally the info field). - // The Realm parses the transaction log, and populates the `changes` vector - // in each ObserverState with information about what changes were made. - struct ObserverState { - // Initial table and row which is observed - // May be updated by row insertions and removals - size_t table_ndx; - size_t row_ndx; - - // Opaque userdata for the delegate's use - void* info; - - // Populated with information about which columns were changed - // May be shorter than the actual number of columns if the later columns - // are not modified - std::vector changes; - - // Simple lexographic ordering - friend bool operator<(ObserverState const& lft, ObserverState const& rgt) - { - return std::tie(lft.table_ndx, lft.row_ndx) < std::tie(rgt.table_ndx, rgt.row_ndx); - } - }; -}; - -inline void BindingContext::will_change(std::vector const&, std::vector const&) { } -inline void BindingContext::did_change(std::vector const&, std::vector const&) { } -} // namespace realm - -#endif /* BINDING_CONTEXT_HPP */ diff --git a/Pods/Realm/include/collection_notifications.hpp b/Pods/Realm/include/collection_notifications.hpp deleted file mode 100644 index ed75c315..00000000 --- a/Pods/Realm/include/collection_notifications.hpp +++ /dev/null @@ -1,71 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_COLLECTION_NOTIFICATIONS_HPP -#define REALM_COLLECTION_NOTIFICATIONS_HPP - -#include "index_set.hpp" -#include "util/atomic_shared_ptr.hpp" - -#include -#include -#include -#include - -namespace realm { -namespace _impl { - class CollectionNotifier; -} - -// A token which keeps an asynchronous query alive -struct NotificationToken { - NotificationToken() = default; - NotificationToken(std::shared_ptr<_impl::CollectionNotifier> notifier, size_t token); - ~NotificationToken(); - - NotificationToken(NotificationToken&&); - NotificationToken& operator=(NotificationToken&&); - - NotificationToken(NotificationToken const&) = delete; - NotificationToken& operator=(NotificationToken const&) = delete; - -private: - util::AtomicSharedPtr<_impl::CollectionNotifier> m_notifier; - size_t m_token; -}; - -struct CollectionChangeSet { - struct Move { - size_t from; - size_t to; - - bool operator==(Move m) const { return from == m.from && to == m.to; } - }; - - IndexSet deletions; - IndexSet insertions; - IndexSet modifications; - std::vector moves; - - bool empty() const { return deletions.empty() && insertions.empty() && modifications.empty() && moves.empty(); } -}; - -using CollectionChangeCallback = std::function; -} // namespace realm - -#endif // REALM_COLLECTION_NOTIFICATIONS_HPP diff --git a/Pods/Realm/include/core/realm.hpp b/Pods/Realm/include/core/realm.hpp deleted file mode 100644 index f635be4b..00000000 --- a/Pods/Realm/include/core/realm.hpp +++ /dev/null @@ -1,28 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_HPP -#define REALM_HPP - -#include -#include -#include -#include - -#endif // REALM_HPP diff --git a/Pods/Realm/include/core/realm/alloc.hpp b/Pods/Realm/include/core/realm/alloc.hpp deleted file mode 100644 index 4373227e..00000000 --- a/Pods/Realm/include/core/realm/alloc.hpp +++ /dev/null @@ -1,385 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ALLOC_HPP -#define REALM_ALLOC_HPP - -#include -#include - -#include -#include -#include -#include - -namespace realm { - -class Allocator; - -class Replication; - -using ref_type = size_t; - -int_fast64_t from_ref(ref_type) noexcept; -ref_type to_ref(int_fast64_t) noexcept; - -class MemRef { -public: - char* m_addr; - ref_type m_ref; - - MemRef() noexcept; - ~MemRef() noexcept; - MemRef(char* addr, ref_type ref) noexcept; - MemRef(ref_type ref, Allocator& alloc) noexcept; -}; - - -/// The common interface for Realm allocators. -/// -/// A Realm allocator must associate a 'ref' to each allocated -/// object and be able to efficiently map any 'ref' to the -/// corresponding memory address. The 'ref' is an integer and it must -/// always be divisible by 8. Also, a value of zero is used to -/// indicate a null-reference, and must therefore never be returned by -/// Allocator::alloc(). -/// -/// The purpose of the 'refs' is to decouple the memory reference from -/// the actual address and thereby allowing objects to be relocated in -/// memory without having to modify stored references. -/// -/// \sa SlabAlloc -class Allocator { -public: - /// The specified size must be divisible by 8, and must not be - /// zero. - /// - /// \throw std::bad_alloc If insufficient memory was available. - MemRef alloc(size_t size); - - /// Calls do_realloc(). - /// - /// Note: The underscore has been added because the name `realloc` - /// would conflict with a macro on the Windows platform. - MemRef realloc_(ref_type, const char* addr, size_t old_size, - size_t new_size); - - /// Calls do_free(). - /// - /// Note: The underscore has been added because the name `free - /// would conflict with a macro on the Windows platform. - void free_(ref_type, const char* addr) noexcept; - - /// Shorthand for free_(mem.m_ref, mem.m_addr). - void free_(MemRef mem) noexcept; - - /// Calls do_translate(). - char* translate(ref_type ref) const noexcept; - - /// Returns true if, and only if the object at the specified 'ref' - /// is in the immutable part of the memory managed by this - /// allocator. The method by which some objects become part of the - /// immuatble part is entirely up to the class that implements - /// this interface. - bool is_read_only(ref_type) const noexcept; - - /// Returns a simple allocator that can be used with free-standing - /// Realm objects (such as a free-standing table). A - /// free-standing object is one that is not part of a Group, and - /// therefore, is not part of an actual database. - static Allocator& get_default() noexcept; - - virtual ~Allocator() noexcept; - -#ifdef REALM_DEBUG - virtual void verify() const = 0; - - /// Terminate the program precisely when the specified 'ref' is - /// freed (or reallocated). You can use this to detect whether the - /// ref is freed (or reallocated), and even to get a stacktrace at - /// the point where it happens. Call watch(0) to stop watching - /// that ref. - void watch(ref_type); -#endif - - Replication* get_replication() noexcept; - - /// \brief The version of the format of the the node structure (in file or - /// in memory) in use by Realm objects associated with this allocator. - /// - /// Every allocator contains a file format version field, which is returned - /// by this function. In some cases (as mentioned below) the file format can - /// change. - /// - /// A value of zero means the the file format is not yet decided. This is - /// only possible for empty Realms where top-ref is zero. - /// - /// For the default allocator (get_default()), the file format version field - /// can never change, is never zero, and is set to whatever - /// Group::get_target_file_format_version_for_session() would return if the - /// original file format version was undecided and the request history type - /// was Replication::hist_None. - /// - /// For the slab allocator (AllocSlab), the file format version field is set - /// to the file format version specified by the attached file (or attached - /// memory buffer) at the time of attachment. If no file (or buffer) is - /// currently attached, the returned value has no meaning. If the Realm file - /// format is later upgraded, the file form,at version filed must be updated - /// to reflect that fact. - /// - /// In shared mode (when a Realm file is opened via a SharedGroup instance) - /// it can happen that the file format is upgraded asyncronously (via - /// another SharedGroup instance), and in that case the file format version - /// field of the allocator can get out of date, but only for a short - /// while. It is always garanteed to be, and remain up to date after the - /// opening process completes (when SharedGroup::do_open() returns). - /// - /// An empty Realm file (one whose top-ref is zero) may specify a file - /// format version of zero to indicate that the format is not yet - /// decided. In that case, this function will return zero immediately after - /// AllocSlab::attach_file() returns. It shall be guaranteed, however, that - /// the zero is changed to a proper file format version before the opening - /// process completes (Group::open() or SharedGroup::open()). It is the duty - /// of the caller of AllocSlab::attach_file() to ensure this. - /// - /// File format versions: - /// - /// 1 Initial file format version - /// - /// 2 FIXME: Does anybody remember what happened here? - /// - /// 3 Supporting null on string columns broke the file format in following - /// way: Index appends an 'X' character to all strings except the null - /// string, to be able to distinguish between null and empty - /// string. Bumped to 3 because of null support of String columns and - /// because of new format of index. - /// - /// 4 Introduction of optional in-Realm history of changes (additional - /// entries in Group::m_top). Since this change is not forward - /// compatible, the file format version had to be bumped. This change is - /// implemented in a way that achieves backwards compatibility with - /// version 3 (and in turn with version 2). - /// - /// 5 Introduced the new Timestamp column type that replaces DateTime. - /// When opening an older database file, all DateTime columns will be - /// automatically upgraded Timestamp columns. - /// - /// IMPORTANT: When introducing a new file format version, be sure to review - /// the file validity checks in AllocSlab::validate_buffer(), the file - /// format selection loginc in - /// Group::get_target_file_format_version_for_session(), and the file format - /// upgrade logic in Group::upgrade_file_format(). - int get_file_format_version() const noexcept; - -protected: - size_t m_baseline = 0; // Separation line between immutable and mutable refs. - - Replication* m_replication; - - /// See get_file_format_version(). - int m_file_format_version = 0; - -#ifdef REALM_DEBUG - ref_type m_watch; -#endif - - /// The specified size must be divisible by 8, and must not be - /// zero. - /// - /// \throw std::bad_alloc If insufficient memory was available. - virtual MemRef do_alloc(size_t size) = 0; - - /// The specified size must be divisible by 8, and must not be - /// zero. - /// - /// The default version of this function simply allocates a new - /// chunk of memory, copies over the old contents, and then frees - /// the old chunk. - /// - /// \throw std::bad_alloc If insufficient memory was available. - virtual MemRef do_realloc(ref_type, const char* addr, size_t old_size, - size_t new_size); - - /// Release the specified chunk of memory. - virtual void do_free(ref_type, const char* addr) noexcept = 0; - - /// Map the specified \a ref to the corresponding memory - /// address. Note that if is_read_only(ref) returns true, then the - /// referenced object is to be considered immutable, and it is - /// then entirely the responsibility of the caller that the memory - /// is not modified by way of the returned memory pointer. - virtual char* do_translate(ref_type ref) const noexcept = 0; - - Allocator() noexcept; - - // FIXME: This really doesn't belong in an allocator, but it is the best - // place for now, because every table has a pointer leading here. It would - // be more obvious to place it in Group, but that would add a runtime overhead, - // and access is time critical. - uint_fast64_t m_table_versioning_counter; - - /// Bump the global version counter. This method should be called when - /// version bumping is initiated. Then following calls to should_propagate_version() - /// can be used to prune the version bumping. - uint_fast64_t bump_global_version() noexcept; - - /// Determine if the "local_version" is out of sync, so that it should - /// be updated. In that case: also update it. Called from Table::bump_version - /// to control propagation of version updates on tables within the group. - bool should_propagate_version(uint_fast64_t& local_version) noexcept; - - friend class Table; - friend class Group; -}; - -inline uint_fast64_t Allocator::bump_global_version() noexcept -{ - ++m_table_versioning_counter; - return m_table_versioning_counter; -} - - -inline bool Allocator::should_propagate_version(uint_fast64_t& local_version) noexcept -{ - if (local_version != m_table_versioning_counter) { - local_version = m_table_versioning_counter; - return true; - } - else { - return false; - } -} - - - -// Implementation: - -inline int_fast64_t from_ref(ref_type v) noexcept -{ - // Check that v is divisible by 8 (64-bit aligned). - REALM_ASSERT_DEBUG(v % 8 == 0); - return util::from_twos_compl(v); -} - -inline ref_type to_ref(int_fast64_t v) noexcept -{ - REALM_ASSERT_DEBUG(!util::int_cast_has_overflow(v)); - // Check that v is divisible by 8 (64-bit aligned). - REALM_ASSERT_DEBUG(v % 8 == 0); - return ref_type(v); -} - -inline MemRef::MemRef() noexcept: - m_addr(nullptr), - m_ref(0) -{ -} - -inline MemRef::~MemRef() noexcept -{ -} - -inline MemRef::MemRef(char* addr, ref_type ref) noexcept: - m_addr(addr), - m_ref(ref) -{ -} - -inline MemRef::MemRef(ref_type ref, Allocator& alloc) noexcept: - m_addr(alloc.translate(ref)), - m_ref(ref) -{ -} - - -inline MemRef Allocator::alloc(size_t size) -{ - return do_alloc(size); -} - -inline MemRef Allocator::realloc_(ref_type ref, const char* addr, size_t old_size, - size_t new_size) -{ -#ifdef REALM_DEBUG - if (ref == m_watch) - REALM_TERMINATE("Allocator watch: Ref was reallocated"); -#endif - return do_realloc(ref, addr, old_size, new_size); -} - -inline void Allocator::free_(ref_type ref, const char* addr) noexcept -{ -#ifdef REALM_DEBUG - if (ref == m_watch) - REALM_TERMINATE("Allocator watch: Ref was freed"); -#endif - return do_free(ref, addr); -} - -inline void Allocator::free_(MemRef mem) noexcept -{ - free_(mem.m_ref, mem.m_addr); -} - -inline char* Allocator::translate(ref_type ref) const noexcept -{ - return do_translate(ref); -} - -inline bool Allocator::is_read_only(ref_type ref) const noexcept -{ - REALM_ASSERT_DEBUG(ref != 0); - REALM_ASSERT_DEBUG(m_baseline != 0); // Attached SlabAlloc - return ref < m_baseline; -} - -inline Allocator::Allocator() noexcept: - m_replication(nullptr) -{ -#ifdef REALM_DEBUG - m_watch = 0; -#endif - m_table_versioning_counter = 0; -} - -inline Allocator::~Allocator() noexcept -{ -} - -inline Replication* Allocator::get_replication() noexcept -{ - return m_replication; -} - -#ifdef REALM_DEBUG -inline void Allocator::watch(ref_type ref) -{ - m_watch = ref; -} -#endif - -inline int Allocator::get_file_format_version() const noexcept -{ - return m_file_format_version; -} - - -} // namespace realm - -#endif // REALM_ALLOC_HPP diff --git a/Pods/Realm/include/core/realm/alloc_slab.hpp b/Pods/Realm/include/core/realm/alloc_slab.hpp deleted file mode 100644 index 2eda8040..00000000 --- a/Pods/Realm/include/core/realm/alloc_slab.hpp +++ /dev/null @@ -1,569 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ALLOC_SLAB_HPP -#define REALM_ALLOC_SLAB_HPP - -#include // unint8_t etc -#include -#include -#include - -#include -#include -#include -#include - -namespace realm { - -// Pre-declarations -class Group; -class GroupWriter; - - -/// Thrown by Group and SharedGroup constructors if the specified file -/// (or memory buffer) does not appear to contain a valid Realm -/// database. -struct InvalidDatabase; - - -/// The allocator that is used to manage the memory of a Realm -/// group, i.e., a Realm database. -/// -/// Optionally, it can be attached to an pre-existing database (file -/// or memory buffer) which then becomes an immuatble part of the -/// managed memory. -/// -/// To attach a slab allocator to a pre-existing database, call -/// attach_file() or attach_buffer(). To create a new database -/// in-memory, call attach_empty(). -/// -/// For efficiency, this allocator manages its mutable memory as a set -/// of slabs. -class SlabAlloc: public Allocator { -public: - ~SlabAlloc() noexcept override; - SlabAlloc(); - - struct Config { - bool is_shared = false; - bool read_only = false; - bool no_create = false; - bool skip_validate = false; - bool session_initiator = false; - bool clear_file = false; - const char* encryption_key = nullptr; - }; - - struct Retry {}; - - /// \brief Attach this allocator to the specified file. - /// - /// It is an error if this function is called at a time where the specified - /// Realm file (file system inode) is modified asynchronously. - /// - /// In non-shared mode (when this function is called on behalf of a - /// free-standing Group instance), it is the responsibility of the - /// application to ensure that the Realm file is not modified concurrently - /// from any other thread or process. - /// - /// In shared mode (when this function is called on behalf of a SharedGroup - /// instance), the caller (SharedGroup::do_open()) must take steps to ensure - /// cross-process mutual exclusion. - /// - /// If the attached file contains an empty Realm (one whose top-ref is - /// zero), the file format version may remain undecided upon return from - /// this function. The file format is undecided if, and only if - /// get_file_format_version() returns zero. The caller is required to check - /// for this case, and decide on a file format version. This must happen - /// before the Realm opening process completes, and the decided file format - /// must be set in the allocator by calling set_file_format_version(). - /// - /// Except for \a path, the parameters are passed in through a - /// configuration object. - /// - /// \param is_shared Must be true if, and only if we are called on - /// behalf of SharedGroup. - /// - /// \param read_only Open the file in read-only mode. This implies - /// \a no_create. - /// - /// \param no_create Fail if the file does not already exist. - /// - /// \param bool skip_validate Skip validation of file header. In a - /// set of overlapping SharedGroups, only the first one (the one - /// that creates/initlializes the coordination file) may validate - /// the header, otherwise it will result in a race condition. - /// - /// \param encryption_key 32-byte key to use to encrypt and decrypt - /// the backing storage, or nullptr to disable encryption. - /// - /// \param session_initiator if set, the caller is the session initiator and - /// guarantees exclusive access to the file. If attaching in read/write mode, - /// the file is modified: files on streaming form is changed to non-streaming - /// form, and if needed the file size is adjusted to match mmap boundaries. - /// Must be set to false if is_shared is false. - /// - /// \param clear_file Always initialize the file as if it was a newly - /// created file and ignore any pre-existing contents. Requires that - /// session_initiator be true as well. - /// - /// \return The `ref` of the root node, or zero if there is none. - /// - /// Please note that attach_file can fail to attach to a file due to a collision - /// with a writer extending the file. This can only happen if the caller is *not* - /// the session initiator. When this happens, attach_file() throws SlabAlloc::Retry, - /// and the caller must retry the call. The caller should check if it has become - /// the session initiator before retrying. This can happen if the conflicting thread - /// (or process) terminates or crashes before the next retry. - /// - /// \throw util::File::AccessError - /// \throw SlabAlloc::Retry - ref_type attach_file(const std::string& path, Config& cfg); - - /// Get the attached file. Only valid when called on an allocator with - /// an attached file. - util::File& get_file(); - - /// Attach this allocator to the specified memory buffer. - /// - /// If the attached buffer contains an empty Realm (one whose top-ref is - /// zero), the file format version may remain undecided upon return from - /// this function. The file format is undecided if, and only if - /// get_file_format_version() returns zero. The caller is required to check - /// for this case, and decide on a file format version. This must happen - /// before the Realm opening process completes, and the decided file format - /// must be set in the allocator by calling set_file_format_version(). - /// - /// It is an error to call this function on an attached - /// allocator. Doing so will result in undefined behavor. - /// - /// \return The `ref` of the root node, or zero if there is none. - /// - /// \sa own_buffer() - /// - /// \throw InvalidDatabase - ref_type attach_buffer(char* data, size_t size); - - /// Reads file format from file header. Must be called from within a write - /// transaction. - int get_committed_file_format_version() const noexcept; - - /// Attach this allocator to an empty buffer. - /// - /// Upon return from this function, the file format is undecided - /// (get_file_format_version() returns zero). The caller is required to - /// decide on a file format version. This must happen before the Realm - /// opening process completes, and the decided file format must be set in - /// the allocator by calling set_file_format_version(). - /// - /// It is an error to call this function on an attached - /// allocator. Doing so will result in undefined behavor. - void attach_empty(); - - /// Detach from a previously attached file or buffer. - /// - /// This function does not reset free space tracking. To - /// completely reset the allocator, you must also call - /// reset_free_space_tracking(). - /// - /// This function has no effect if the allocator is already in the - /// detached state (idempotency). - void detach() noexcept; - - class DetachGuard; - - /// If a memory buffer has been attached using attach_buffer(), - /// mark it as owned by this slab allocator. Behaviour is - /// undefined if this function is called on a detached allocator, - /// one that is not attached using attach_buffer(), or one for - /// which this function has already been called during the latest - /// attachment. - void own_buffer() noexcept; - - /// Returns true if, and only if this allocator is currently - /// in the attached state. - bool is_attached() const noexcept; - - /// Returns true if, and only if this allocator is currently in - /// the attached state and attachment was not established using - /// attach_empty(). - bool nonempty_attachment() const noexcept; - - /// Reserve disk space now to avoid allocation errors at a later - /// point in time, and to minimize on-disk fragmentation. In some - /// cases, less fragmentation translates into improved - /// performance. On flash or SSD-drives this is likely a waste. - /// - /// Note: File::prealloc() may misbehave under race conditions (see - /// documentation of File::prealloc()). For that reason, to avoid race - /// conditions, when this allocator is used in a transactional mode, this - /// function may be called only when the caller has exclusive write - /// access. In non-transactional mode it is the responsibility of the user - /// to ensure non-concurrent file mutation. - /// - /// This function will call File::sync(). - /// - /// It is an error to call this function on an allocator that is not - /// attached to a file. Doing so will result in undefined behavior. - void resize_file(size_t new_file_size); - - /// Reserve disk space now to avoid allocation errors at a later point in - /// time, and to minimize on-disk fragmentation. In some cases, less - /// fragmentation translates into improved performance. On SSD-drives - /// preallocation is likely a waste. - /// - /// When supported by the system, a call to this function will make the - /// database file at least as big as the specified size, and cause space on - /// the target device to be allocated (note that on many systems on-disk - /// allocation is done lazily by default). If the file is already bigger - /// than the specified size, the size will be unchanged, and on-disk - /// allocation will occur only for the initial section that corresponds to - /// the specified size. On systems that do not support preallocation, this - /// function has no effect. To know whether preallocation is supported by - /// Realm on your platform, call util::File::is_prealloc_supported(). - /// - /// This function will call File::sync() if it changes the size of the file. - /// - /// It is an error to call this function on an allocator that is not - /// attached to a file. Doing so will result in undefined behavior. - void reserve_disk_space(size_t size_in_bytes); - - /// Get the size of the attached database file or buffer in number - /// of bytes. This size is not affected by new allocations. After - /// attachment, it can only be modified by a call to remap(). - /// - /// It is an error to call this function on a detached allocator, - /// or one that was attached using attach_empty(). Doing so will - /// result in undefined behavior. - size_t get_baseline() const noexcept; - - /// Get the total amount of managed memory. This is the baseline plus the - /// sum of the sizes of the allocated slabs. It includes any free space. - /// - /// It is an error to call this function on a detached - /// allocator. Doing so will result in undefined behavior. - size_t get_total_size() const noexcept; - - /// Mark all mutable memory (ref-space outside the attached file) as free - /// space. - void reset_free_space_tracking(); - - /// Remap the attached file such that a prefix of the specified - /// size becomes available in memory. If sucessfull, - /// get_baseline() will return the specified new file size. - /// - /// It is an error to call this function on a detached allocator, - /// or one that was not attached using attach_file(). Doing so - /// will result in undefined behavior. - /// - /// The file_size argument must be aligned to a *section* boundary: - /// The database file is logically split into sections, each section - /// guaranteed to be mapped as a contiguous address range. The allocation - /// of memory in the file must ensure that no allocation crosses the - /// boundary between two sections. - void remap(size_t file_size); - - /// Returns true initially, and after a call to reset_free_space_tracking() - /// up until the point of the first call to SlabAlloc::alloc(). Note that a - /// call to SlabAlloc::alloc() corresponds to a mutation event. - bool is_free_space_clean() const noexcept; - - /// \brief Update the file format version field of the allocator. - /// - /// This must be done during the opening of the Realm if the stored file - /// format version is zero (empty Realm), or after the file format is - /// upgraded. - /// - /// Note that this does not modify the attached file, only the "cached" - /// value subsequenty returned by get_file_format_version(). - /// - /// \sa get_file_format_version() - void set_file_format_version(int) noexcept; - -#ifdef REALM_DEBUG - void enable_debug(bool enable) { m_debug_out = enable; } - void verify() const override; - bool is_all_free() const; - void print() const; -#endif - struct MappedFile; - -protected: - MemRef do_alloc(size_t size) override; - MemRef do_realloc(ref_type, const char*, size_t old_size, - size_t new_size) override; - // FIXME: It would be very nice if we could detect an invalid free operation in debug mode - void do_free(ref_type, const char*) noexcept override; - char* do_translate(ref_type) const noexcept override; - void invalidate_cache() noexcept; - -private: - enum AttachMode { - attach_None, // Nothing is attached - attach_OwnedBuffer, // We own the buffer (m_data = nullptr for empty buffer) - attach_UsersBuffer, // We do not own the buffer - attach_SharedFile, // On behalf of SharedGroup - attach_UnsharedFile // Not on behalf of SharedGroup - }; - - // A slab is a dynamically allocated contiguous chunk of memory used to - // extend the amount of space available for database node - // storage. Inter-node references are represented as file offsets - // (a.k.a. "refs"), and each slab creates an apparently seamless extension - // of this file offset addressable space. Slabes are stored as rows in the - // Slabs table in order of ascending file offsets. - struct Slab { - ref_type ref_end; - char* addr; - }; - struct Chunk { - ref_type ref; - size_t size; - }; - - // Values of each used bit in m_flags - enum { - flags_SelectBit = 1 - }; - - // 24 bytes - struct Header { - uint64_t m_top_ref[2]; // 2 * 8 bytes - // Info-block 8-bytes - uint8_t m_mnemonic[4]; // "T-DB" - uint8_t m_file_format[2]; // See `library_file_format` - uint8_t m_reserved; - // bit 0 of m_flags is used to select between the two top refs. - uint8_t m_flags; - }; - - // 16 bytes - struct StreamingFooter { - uint64_t m_top_ref; - uint64_t m_magic_cookie; - }; - - static_assert(sizeof (Header) == 24, "Bad header size"); - static_assert(sizeof (StreamingFooter) == 16, "Bad footer size"); - - static const Header empty_file_header; - static void init_streaming_header(Header*, int file_format_version); - - static const uint_fast64_t footer_magic_cookie = 0x3034125237E526C8ULL; - - // The mappings are shared, if they are from a file - std::shared_ptr m_file_mappings; - - // We are caching local copies of all the additional mappings to allow - // for lock-free lookup during ref->address translation (we do not need - // to cache the first mapping, because it is immutable) (well, all the - // mappings are immutable, but the array holding them is not - it may - // have to be relocated) - std::unique_ptr>[]> m_local_mappings; - size_t m_num_local_mappings = 0; - - char* m_data = nullptr; - size_t m_initial_chunk_size = 0; - size_t m_initial_section_size = 0; - int m_section_shifts = 0; - std::unique_ptr m_section_bases; - size_t m_num_section_bases = 0; - AttachMode m_attach_mode = attach_None; - bool m_file_on_streaming_form = false; - enum FeeeSpaceState { - free_space_Clean, - free_space_Dirty, - free_space_Invalid - }; - - /// When set to free_space_Invalid, the free lists are no longer - /// up-to-date. This happens if do_free() or - /// reset_free_space_tracking() fails, presumably due to - /// std::bad_alloc being thrown during updating of the free space - /// list. In this this case, alloc(), realloc_(), and - /// get_free_read_only() must throw. This member is deliberately - /// placed here (after m_attach_mode) in the hope that it leads to - /// less padding between members due to alignment requirements. - FeeeSpaceState m_free_space_state = free_space_Clean; - - typedef std::vector slabs; - typedef std::vector chunks; - slabs m_slabs; - chunks m_free_space; - chunks m_free_read_only; - -#ifdef REALM_DEBUG - bool m_debug_out = false; -#endif - struct hash_entry { - ref_type ref = 0; - char* addr = nullptr; - size_t version = 0; - }; - mutable hash_entry cache[256]; - mutable size_t version = 1; - - /// Throws if free-lists are no longer valid. - const chunks& get_free_read_only() const; - - /// Throws InvalidDatabase if the file is not a Realm file, if the file is - /// corrupted, or if the specified encryption key is incorrect. This - /// function will not detect all forms of corruption, though. - void validate_buffer(const char* data, size_t len, const std::string& path, bool is_shared); - - /// Read the top_ref from the given buffer and set m_file_on_streaming_form - /// if the buffer contains a file in streaming form - ref_type get_top_ref(const char* data, size_t len); - - class ChunkRefEq; - class ChunkRefEndEq; - class SlabRefEndEq; - static bool ref_less_than_slab_ref_end(ref_type, const Slab&) noexcept; - - Replication* get_replication() const noexcept { return m_replication; } - void set_replication(Replication* r) noexcept { m_replication = r; } - - /// Returns the first section boundary *above* the given position. - size_t get_upper_section_boundary(size_t start_pos) const noexcept; - - /// Returns the first section boundary *at or below* the given position. - size_t get_lower_section_boundary(size_t start_pos) const noexcept; - - /// Returns true if the given position is at a section boundary - bool matches_section_boundary(size_t pos) const noexcept; - - /// Returns the index of the section holding a given address. - /// The section index is determined solely by the minimal section size, - /// and does not necessarily reflect the mapping. A mapping may - /// cover multiple sections - the initial mapping often does. - size_t get_section_index(size_t pos) const noexcept; - - /// Reverse: get the base offset of a section at a given index. Since the - /// computation is very time critical, this method just looks it up in - /// a table. The actual computation and setup of that table is done - /// during initialization with the help of compute_section_base() below. - inline size_t get_section_base(size_t index) const noexcept; - - /// Actually compute the starting offset of a section. Only used to initialize - /// a table of predefined results, which are then used by get_section_base(). - size_t compute_section_base(size_t index) const noexcept; - - /// Find a possible allocation of 'request_size' that will fit into a section - /// which is inside the range from 'start_pos' to 'start_pos'+'free_chunk_size' - /// If found return the position, if not return 0. - size_t find_section_in_range(size_t start_pos, size_t free_chunk_size, - size_t request_size) const noexcept; - - friend class Group; - friend class GroupWriter; -}; - -inline void SlabAlloc::invalidate_cache() noexcept { ++version; } - -class SlabAlloc::DetachGuard { -public: - DetachGuard(SlabAlloc& alloc) noexcept: m_alloc(&alloc) {} - ~DetachGuard() noexcept; - SlabAlloc* release() noexcept; -private: - SlabAlloc* m_alloc; -}; - - - -// Implementation: - -struct InvalidDatabase: util::File::AccessError { - InvalidDatabase(const std::string& msg, const std::string& path): - util::File::AccessError(msg, path) - { - } -}; - -inline void SlabAlloc::own_buffer() noexcept -{ - REALM_ASSERT_3(m_attach_mode, ==, attach_UsersBuffer); - REALM_ASSERT(m_data); - REALM_ASSERT(m_file_mappings == nullptr); - m_attach_mode = attach_OwnedBuffer; -} - -inline bool SlabAlloc::is_attached() const noexcept -{ - return m_attach_mode != attach_None; -} - -inline bool SlabAlloc::nonempty_attachment() const noexcept -{ - return is_attached() && m_data; -} - -inline size_t SlabAlloc::get_baseline() const noexcept -{ - REALM_ASSERT_DEBUG(is_attached()); - return m_baseline; -} - -inline bool SlabAlloc::is_free_space_clean() const noexcept -{ - return m_free_space_state == free_space_Clean; -} - -inline SlabAlloc::DetachGuard::~DetachGuard() noexcept -{ - if (m_alloc) - m_alloc->detach(); -} - -inline SlabAlloc* SlabAlloc::DetachGuard::release() noexcept -{ - SlabAlloc* alloc = m_alloc; - m_alloc = nullptr; - return alloc; -} - -inline bool SlabAlloc::ref_less_than_slab_ref_end(ref_type ref, const Slab& slab) noexcept -{ - return ref < slab.ref_end; -} - -inline size_t SlabAlloc::get_upper_section_boundary(size_t start_pos) const noexcept -{ - return get_section_base(1+get_section_index(start_pos)); -} - -inline size_t SlabAlloc::get_lower_section_boundary(size_t start_pos) const noexcept -{ - return get_section_base(get_section_index(start_pos)); -} - -inline bool SlabAlloc::matches_section_boundary(size_t pos) const noexcept -{ - return pos == get_lower_section_boundary(pos); -} - -inline size_t SlabAlloc::get_section_base(size_t index) const noexcept -{ - return m_section_bases[index]; -} - -} // namespace realm - -#endif // REALM_ALLOC_SLAB_HPP diff --git a/Pods/Realm/include/core/realm/array.hpp b/Pods/Realm/include/core/realm/array.hpp deleted file mode 100644 index 1e2d4891..00000000 --- a/Pods/Realm/include/core/realm/array.hpp +++ /dev/null @@ -1,3577 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -/* -Searching: The main finding function is: - template - void find(int64_t value, size_t start, size_t end, size_t baseindex, QueryState *state, Callback callback) const - - cond: One of Equal, NotEqual, Greater, etc. classes - Action: One of act_ReturnFirst, act_FindAll, act_Max, act_CallbackIdx, etc, constants - Callback: Optional function to call for each search result. Will be called if action == act_CallbackIdx - - find() will call find_action_pattern() or find_action() that again calls match() for each search result which optionally calls callback(): - - find() -> find_action() -------> bool match() -> bool callback() - | ^ - +-> find_action_pattern()----+ - - If callback() returns false, find() will exit, otherwise it will keep searching remaining items in array. -*/ - -#ifndef REALM_ARRAY_HPP -#define REALM_ARRAY_HPP - -#include -#include // size_t -#include -#include -#include -#include -#include - -#include // unint8_t etc - -#include -#include -#include -#include -#include -#include -#include -#include - -/* - MMX: mmintrin.h - SSE: xmmintrin.h - SSE2: emmintrin.h - SSE3: pmmintrin.h - SSSE3: tmmintrin.h - SSE4A: ammintrin.h - SSE4.1: smmintrin.h - SSE4.2: nmmintrin.h -*/ -#ifdef REALM_COMPILER_SSE -# include // SSE2 -# include // SSE42 -#endif - -namespace realm { - -enum Action {act_ReturnFirst, act_Sum, act_Max, act_Min, act_Count, act_FindAll, act_CallIdx, act_CallbackIdx, - act_CallbackVal, act_CallbackNone, act_CallbackBoth, act_Average}; - -template -inline T no0(T v) { return v == 0 ? 1 : v; } - -/// Special index value. It has various meanings depending on -/// context. It is returned by some search functions to indicate 'not -/// found'. It is similar in function to std::string::npos. -const size_t npos = size_t(-1); - -// Maximum number of bytes that the payload of an array can be -const size_t max_array_payload = 0x00ffffffL; - -/// Alias for realm::npos. -const size_t not_found = npos; - - /* wid == 16/32 likely when accessing offsets in B tree */ -#define REALM_TEMPEX(fun, wid, arg) \ - if (wid == 16) {fun<16> arg;} \ - else if (wid == 32) {fun<32> arg;} \ - else if (wid == 0) {fun<0> arg;} \ - else if (wid == 1) {fun<1> arg;} \ - else if (wid == 2) {fun<2> arg;} \ - else if (wid == 4) {fun<4> arg;} \ - else if (wid == 8) {fun<8> arg;} \ - else if (wid == 64) {fun<64> arg;} \ - else {REALM_ASSERT_DEBUG(false); fun<0> arg;} - -#define REALM_TEMPEX2(fun, targ, wid, arg) \ - if (wid == 16) {fun arg;} \ - else if (wid == 32) {fun arg;} \ - else if (wid == 0) {fun arg;} \ - else if (wid == 1) {fun arg;} \ - else if (wid == 2) {fun arg;} \ - else if (wid == 4) {fun arg;} \ - else if (wid == 8) {fun arg;} \ - else if (wid == 64) {fun arg;} \ - else {REALM_ASSERT_DEBUG(false); fun arg;} - -#define REALM_TEMPEX3(fun, targ1, targ2, wid, arg) \ - if (wid == 16) {fun arg;} \ - else if (wid == 32) {fun arg;} \ - else if (wid == 0) {fun arg;} \ - else if (wid == 1) {fun arg;} \ - else if (wid == 2) {fun arg;} \ - else if (wid == 4) {fun arg;} \ - else if (wid == 8) {fun arg;} \ - else if (wid == 64) {fun arg;} \ - else {REALM_ASSERT_DEBUG(false); fun arg;} - -#define REALM_TEMPEX4(fun, targ1, targ2, wid, targ3, arg) \ - if (wid == 16) {fun arg;} \ - else if (wid == 32) {fun arg;} \ - else if (wid == 0) {fun arg;} \ - else if (wid == 1) {fun arg;} \ - else if (wid == 2) {fun arg;} \ - else if (wid == 4) {fun arg;} \ - else if (wid == 8) {fun arg;} \ - else if (wid == 64) {fun arg;} \ - else {REALM_ASSERT_DEBUG(false); fun arg;} - -#define REALM_TEMPEX5(fun, targ1, targ2, targ3, targ4, wid, arg) \ - if (wid == 16) {fun arg;} \ - else if (wid == 32) {fun arg;} \ - else if (wid == 0) {fun arg;} \ - else if (wid == 1) {fun arg;} \ - else if (wid == 2) {fun arg;} \ - else if (wid == 4) {fun arg;} \ - else if (wid == 8) {fun arg;} \ - else if (wid == 64) {fun arg;} \ - else {REALM_ASSERT_DEBUG(false); fun arg;} - - -// Pre-definitions -class Array; -class StringColumn; -class GroupWriter; -template -class QueryState; -namespace _impl { class ArrayWriterBase; } - - -#ifdef REALM_DEBUG -class MemStats { -public: - MemStats(): - allocated(0), - used(0), - array_count(0) - { - } - size_t allocated; - size_t used; - size_t array_count; -}; -template -std::basic_ostream& operator<<(std::basic_ostream& out, MemStats stats) -{ - std::ostringstream out_2; - out_2.setf(std::ios::fixed); - out_2.precision(1); - double used_percent = 100.0 * stats.used / stats.allocated; - out_2 << "allocated = "< - size_t index_string(StringData value, IntegerColumn& result, ref_type& result_ref, - ColumnBase* column) const; -protected: -// void add_positive_local(int64_t value); - - // Includes array header. Not necessarily 8-byte aligned. - virtual size_t calc_byte_len(size_t size, size_t width) const; - - virtual size_t calc_item_count(size_t bytes, size_t width) const noexcept; - virtual WidthType GetWidthType() const { return wtype_Bits; } - - bool get_is_inner_bptree_node_from_header() const noexcept; - bool get_hasrefs_from_header() const noexcept; - bool get_context_flag_from_header() const noexcept; - WidthType get_wtype_from_header() const noexcept; - size_t get_width_from_header() const noexcept; - size_t get_size_from_header() const noexcept; - - // Undefined behavior if m_alloc.is_read_only(m_ref) returns true - size_t get_capacity_from_header() const noexcept; - - void set_header_is_inner_bptree_node(bool value) noexcept; - void set_header_hasrefs(bool value) noexcept; - void set_header_context_flag(bool value) noexcept; - void set_header_wtype(WidthType value) noexcept; - void set_header_width(int value) noexcept; - void set_header_size(size_t value) noexcept; - void set_header_capacity(size_t value) noexcept; - - static void set_header_is_inner_bptree_node(bool value, char* header) noexcept; - static void set_header_hasrefs(bool value, char* header) noexcept; - static void set_header_context_flag(bool value, char* header) noexcept; - static void set_header_wtype(WidthType value, char* header) noexcept; - static void set_header_width(int value, char* header) noexcept; - static void set_header_size(size_t value, char* header) noexcept; - static void set_header_capacity(size_t value, char* header) noexcept; - - static void init_header(char* header, bool is_inner_bptree_node, bool has_refs, - bool context_flag, WidthType width_type, int width, - size_t size, size_t capacity) noexcept; - - - // This returns the minimum value ("lower bound") of the representable values - // for the given bit width. Valid widths are 0, 1, 2, 4, 8, 16, 32, and 64. - template - static int_fast64_t lbound_for_width() noexcept; - - static int_fast64_t lbound_for_width(size_t width) noexcept; - - // This returns the maximum value ("inclusive upper bound") of the representable values - // for the given bit width. Valid widths are 0, 1, 2, 4, 8, 16, 32, and 64. - template - static int_fast64_t ubound_for_width() noexcept; - - static int_fast64_t ubound_for_width(size_t width) noexcept; - - template - void set_width() noexcept; - void set_width(size_t) noexcept; - void alloc(size_t count, size_t width); - void copy_on_write(); - -private: - - template - int64_t sum(size_t start, size_t end) const; - - template - bool minmax(int64_t& result, size_t start, size_t end, size_t* return_ndx) const; - - template - size_t find_gte(const int64_t target, size_t start, Array const* indirection) const; - - template - size_t adjust_ge(size_t start, size_t end, int_fast64_t limit, int_fast64_t diff); - -protected: - /// The total size in bytes (including the header) of a new empty - /// array. Must be a multiple of 8 (i.e., 64-bit aligned). - static const size_t initial_capacity = 128; - - /// It is an error to specify a non-zero value unless the width - /// type is wtype_Bits. It is also an error to specify a non-zero - /// size if the width type is wtype_Ignore. - static MemRef create(Type, bool context_flag, WidthType, size_t size, - int_fast64_t value, Allocator&); - - static MemRef clone(MemRef header, Allocator& alloc, Allocator& target_alloc); - - /// Get the address of the header of this array. - char* get_header() noexcept; - - /// Same as get_byte_size(). - static size_t get_byte_size_from_header(const char*) noexcept; - - // Undefined behavior if array is in immutable memory - static size_t get_capacity_from_header(const char*) noexcept; - - // Overriding method in ArrayParent - void update_child_ref(size_t, ref_type) override; - - // Overriding method in ArrayParent - ref_type get_child_ref(size_t) const noexcept override; - - void destroy_children(size_t offset = 0) noexcept; - -#ifdef REALM_DEBUG - std::pair - get_to_dot_parent(size_t ndx_in_parent) const override; -#endif - -protected: - // Getters and Setters for adaptive-packed arrays - typedef int64_t (Array::*Getter)(size_t) const; // Note: getters must not throw - typedef void (Array::*Setter)(size_t, int64_t); - typedef bool (Array::*Finder)(int64_t, size_t, size_t, size_t, QueryState*) const; - typedef void (Array::*ChunkGetter)(size_t, int64_t res[8]) const; // Note: getters must not throw - - struct VTable { - Getter getter; - ChunkGetter chunk_getter; - Setter setter; - Finder finder[cond_VTABLE_FINDER_COUNT]; // one for each active function pointer - }; - template - struct VTableForWidth; - -protected: - - /// Takes a 64-bit value and returns the minimum number of bits needed - /// to fit the value. For alignment this is rounded up to nearest - /// log2. Posssible results {0, 1, 2, 4, 8, 16, 32, 64} - static size_t bit_width(int64_t value); - -#ifdef REALM_DEBUG - void report_memory_usage_2(MemUsageHandler&) const; -#endif - -private: - Getter m_getter = nullptr; // cached to avoid indirection - const VTable* m_vtable = nullptr; - -public: - // FIXME: Should not be public - char* m_data = nullptr; // Points to first byte after header - -protected: - int64_t m_lbound; // min number that can be stored with current m_width - int64_t m_ubound; // max number that can be stored with current m_width - - size_t m_size = 0; // Number of elements currently stored. - size_t m_capacity = 0; // Number of elements that fit inside the allocated memory. - - Allocator& m_alloc; -private: - size_t m_ref; - ArrayParent* m_parent = nullptr; - size_t m_ndx_in_parent = 0; // Ignored if m_parent is null. -protected: - uint_least8_t m_width = 0; // Size of an element (meaning depend on type of array). - bool m_is_inner_bptree_node; // This array is an inner node of B+-tree. - bool m_has_refs; // Elements whose first bit is zero are refs to subarrays. - bool m_context_flag; // Meaning depends on context. - -private: - ref_type do_write_shallow(_impl::ArrayWriterBase&) const; - ref_type do_write_deep(_impl::ArrayWriterBase&, bool only_if_modified) const; - - friend class SlabAlloc; - friend class GroupWriter; - friend class StringColumn; -}; - - -class Array::NodeInfo { -public: - MemRef m_mem; - Array* m_parent; - size_t m_ndx_in_parent; - size_t m_offset, m_size; -}; - -class Array::VisitHandler { -public: - virtual bool visit(const NodeInfo& leaf_info) = 0; - virtual ~VisitHandler() noexcept {} -}; - - -class Array::UpdateHandler { -public: - virtual void update(MemRef, ArrayParent*, size_t leaf_ndx_in_parent, - size_t elem_ndx_in_leaf) = 0; - virtual ~UpdateHandler() noexcept {} -}; - - -class Array::EraseHandler { -public: - /// If the specified leaf has more than one element, this function - /// must erase the specified element from the leaf and return - /// false. Otherwise, when the leaf has a single element, this - /// function must return true without modifying the leaf. If \a - /// elem_ndx_in_leaf is `npos`, it refers to the last element in - /// the leaf. The implementation of this function must be - /// exception safe. This function is guaranteed to be called at - /// most once during each execution of Array::erase_bptree_elem(), - /// and *exactly* once during each *successful* execution of - /// Array::erase_bptree_elem(). - virtual bool erase_leaf_elem(MemRef, ArrayParent*, - size_t leaf_ndx_in_parent, - size_t elem_ndx_in_leaf) = 0; - - virtual void destroy_leaf(MemRef leaf_mem) noexcept = 0; - - /// Must replace the current root with the specified leaf. The - /// implementation of this function must not destroy the - /// underlying root node, or any of its children, as that will be - /// done by Array::erase_bptree_elem(). The implementation of this - /// function must be exception safe. - virtual void replace_root_by_leaf(MemRef leaf_mem) = 0; - - /// Same as replace_root_by_leaf(), but must replace the root with - /// an empty leaf. Also, if this function is called during an - /// execution of Array::erase_bptree_elem(), it is guaranteed that - /// it will be preceeded by a call to erase_leaf_elem(). - virtual void replace_root_by_empty_leaf() = 0; - - virtual ~EraseHandler() noexcept {} -}; - - - - - -// Implementation: - -class QueryStateBase { virtual void dyncast(){} }; - -template<> -class QueryState: public QueryStateBase { -public: - int64_t m_state; - size_t m_match_count; - size_t m_limit; - size_t m_minmax_index; // used only for min/max, to save index of current min/max value - - template - bool uses_val() - { - if (action == act_Max || action == act_Min || action == act_Sum) - return true; - else - return false; - } - - void init(Action action, IntegerColumn* akku, size_t limit) - { - m_match_count = 0; - m_limit = limit; - m_minmax_index = not_found; - - if (action == act_Max) - m_state = -0x7fffffffffffffffLL - 1LL; - else if (action == act_Min) - m_state = 0x7fffffffffffffffLL; - else if (action == act_ReturnFirst) - m_state = not_found; - else if (action == act_Sum) - m_state = 0; - else if (action == act_Count) - m_state = 0; - else if (action == act_FindAll) - m_state = reinterpret_cast(akku); - else if (action == act_CallbackIdx) { - } - else { - REALM_ASSERT_DEBUG(false); - } - } - - template - inline bool match(size_t index, uint64_t indexpattern, int64_t value) - { - if (pattern) { - if (action == act_Count) { - // If we are close to 'limit' argument in query, we cannot count-up a complete chunk. Count up single - // elements instead - if (m_match_count + 64 >= m_limit) - return false; - - m_state += fast_popcount64(indexpattern); - m_match_count = size_t(m_state); - return true; - } - // Other aggregates cannot (yet) use bit pattern for anything. Make Array-finder call with pattern = false instead - return false; - } - - ++m_match_count; - - if (action == act_Max) { - if (value > m_state) { - m_state = value; - m_minmax_index = index; - } - } - else if (action == act_Min) { - if (value < m_state) { - m_state = value; - m_minmax_index = index; - } - } - else if (action == act_Sum) - m_state += value; - else if (action == act_Count) { - m_state++; - m_match_count = size_t(m_state); - } - else if (action == act_FindAll) { - Array::add_to_column(reinterpret_cast(m_state), index); - } - else if (action == act_ReturnFirst) { - m_state = index; - return false; - } - else { - REALM_ASSERT_DEBUG(false); - } - return (m_limit > m_match_count); - } - - template - inline bool match(size_t index, uint64_t indexpattern, util::Optional value) - { - // FIXME: This is a temporary hack for nullable integers. - if (value) { - return match(index, indexpattern, *value); - } - - // If value is null, the only sensible actions are count, find_all, and return first. - // Max, min, and sum should all have no effect. - if (action == act_Count) { - m_state++; - m_match_count = size_t(m_state); - } - else if (action == act_FindAll) { - Array::add_to_column(reinterpret_cast(m_state), index); - } - else if (action == act_ReturnFirst) { - m_match_count++; - m_state = index; - return false; - } - return m_limit > m_match_count; - } -}; - -// Used only for Basic-types: currently float and double -template -class QueryState : public QueryStateBase { -public: - R m_state; - size_t m_match_count; - size_t m_limit; - size_t m_minmax_index; // used only for min/max, to save index of current min/max value - - template - bool uses_val() - { - return (action == act_Max || action == act_Min || action == act_Sum || action == act_Count); - } - - void init(Action action, Array*, size_t limit) - { - REALM_ASSERT((std::is_same::value || - std::is_same::value)); - m_match_count = 0; - m_limit = limit; - m_minmax_index = not_found; - - if (action == act_Max) - m_state = -std::numeric_limits::infinity(); - else if (action == act_Min) - m_state = std::numeric_limits::infinity(); - else if (action == act_Sum) - m_state = 0.0; - else { - REALM_ASSERT_DEBUG(false); - } - } - - template - inline bool match(size_t index, uint64_t /*indexpattern*/, resulttype value) - { - if (pattern) - return false; - - static_assert(action == act_Sum || action == act_Max || action == act_Min || action == act_Count, - "Search action not supported"); - - if (action == act_Count) { - ++m_match_count; - } - else if (!null::is_null_float(value)) { - ++m_match_count; - if (action == act_Max) { - if (value > m_state) { - m_state = value; - m_minmax_index = index; - } - } - else if (action == act_Min) { - if (value < m_state) { - m_state = value; - m_minmax_index = index; - } - } - else if (action == act_Sum) - m_state += value; - else { - REALM_ASSERT_DEBUG(false); - } - } - - return (m_limit > m_match_count); - } -}; - -inline bool RefOrTagged::is_ref() const noexcept -{ - return (m_value & 1) == 0; -} - -inline bool RefOrTagged::is_tagged() const noexcept -{ - return !is_ref(); -} - -inline ref_type RefOrTagged::get_as_ref() const noexcept -{ - // to_ref() is defined in - return to_ref(m_value); -} - -inline uint_fast64_t RefOrTagged::get_as_int() const noexcept -{ - // The bitwise AND is there in case uint_fast64_t is wider than 64 bits. - return (uint_fast64_t(m_value) & 0xFFFFFFFFFFFFFFFFULL) >> 1; -} - -inline RefOrTagged RefOrTagged::make_ref(ref_type ref) noexcept -{ - // from_ref() is defined in - int_fast64_t value = from_ref(ref); - return RefOrTagged(value); -} - -inline RefOrTagged RefOrTagged::make_tagged(uint_fast64_t i) noexcept -{ - REALM_ASSERT(i < (1ULL << 63)); - int_fast64_t value = util::from_twos_compl((i << 1) | 1); - return RefOrTagged(value); -} - -inline RefOrTagged::RefOrTagged(int_fast64_t value) noexcept: - m_value(value) -{ -} - -inline Array::Array(Allocator& alloc) noexcept: - m_alloc(alloc) -{ -} - -// Fastest way to instantiate an Array. For use with GetDirect() that only fills out m_width, m_data -// and a few other basic things needed for read-only access. Or for use if you just want a way to call -// some methods written in Array.* -inline Array::Array(no_prealloc_tag) noexcept: - m_alloc(*static_cast(0)) -{ -} - - -inline void Array::create(Type type, bool context_flag, size_t size, int_fast64_t value) -{ - MemRef mem = create_array(type, context_flag, size, value, m_alloc); // Throws - init_from_mem(mem); -} - - -inline void Array::init_from_ref(ref_type ref) noexcept -{ - REALM_ASSERT_DEBUG(ref); - char* header = m_alloc.translate(ref); - init_from_mem(MemRef(header, ref)); -} - - -inline void Array::init_from_parent() noexcept -{ - ref_type ref = get_ref_from_parent(); - init_from_ref(ref); -} - - -inline Array::Type Array::get_type() const noexcept -{ - if (m_is_inner_bptree_node) { - REALM_ASSERT_DEBUG(m_has_refs); - return type_InnerBptreeNode; - } - if (m_has_refs) - return type_HasRefs; - return type_Normal; -} - - -inline void Array::get_chunk(size_t ndx, int64_t res[8]) const noexcept -{ - REALM_ASSERT_DEBUG(ndx < m_size); - (this->*(m_vtable->chunk_getter))(ndx, res); -} - - -inline int64_t Array::get(size_t ndx) const noexcept -{ - REALM_ASSERT_DEBUG(is_attached()); - REALM_ASSERT_DEBUG(ndx < m_size); - return (this->*m_getter)(ndx); - -// Two ideas that are not efficient but may be worth looking into again: -/* - // Assume correct width is found early in REALM_TEMPEX, which is the case for B tree offsets that - // are probably either 2^16 long. Turns out to be 25% faster if found immediately, but 50-300% slower - // if found later - REALM_TEMPEX(return get, (ndx)); -*/ -/* - // Slightly slower in both of the if-cases. Also needs an matchcount m_size check too, to avoid - // reading beyond array. - if (m_width >= 8 && m_size > ndx + 7) - return get<64>(ndx >> m_shift) & m_widthmask; - else - return (this->*(m_vtable->getter))(ndx); -*/ -} - -inline int64_t Array::front() const noexcept -{ - return get(0); -} - -inline int64_t Array::back() const noexcept -{ - return get(m_size - 1); -} - -inline ref_type Array::get_as_ref(size_t ndx) const noexcept -{ - REALM_ASSERT_DEBUG(is_attached()); - REALM_ASSERT_DEBUG(m_has_refs); - int64_t v = get(ndx); - return to_ref(v); -} - -inline RefOrTagged Array::get_as_ref_or_tagged(size_t ndx) const noexcept -{ - REALM_ASSERT(has_refs()); - return RefOrTagged(get(ndx)); -} - -inline void Array::set(size_t ndx, RefOrTagged ref_or_tagged) -{ - REALM_ASSERT(has_refs()); - set(ndx, ref_or_tagged.m_value); // Throws -} - -inline void Array::add(RefOrTagged ref_or_tagged) -{ - REALM_ASSERT(has_refs()); - add(ref_or_tagged.m_value); // Throws -} - -inline void Array::ensure_minimum_width(RefOrTagged ref_or_tagged) -{ - REALM_ASSERT(has_refs()); - ensure_minimum_width(ref_or_tagged.m_value); // Throws -} - -inline bool Array::is_inner_bptree_node() const noexcept -{ - return m_is_inner_bptree_node; -} - -inline bool Array::has_refs() const noexcept -{ - return m_has_refs; -} - -inline bool Array::get_context_flag() const noexcept -{ - return m_context_flag; -} - -inline void Array::set_context_flag(bool value) noexcept -{ - m_context_flag = value; - set_header_context_flag(value); -} - -inline ref_type Array::get_ref() const noexcept -{ - return m_ref; -} - -inline MemRef Array::get_mem() const noexcept -{ - return MemRef(get_header_from_data(m_data), m_ref); -} - -inline void Array::destroy() noexcept -{ - if (!is_attached()) - return; - char* header = get_header_from_data(m_data); - m_alloc.free_(m_ref, header); - m_data = nullptr; -} - -inline void Array::destroy_deep() noexcept -{ - if (!is_attached()) - return; - - if (m_has_refs) - destroy_children(); - - char* header = get_header_from_data(m_data); - m_alloc.free_(m_ref, header); - m_data = nullptr; -} - -inline ref_type Array::write(_impl::ArrayWriterBase& out, bool deep, bool only_if_modified) const -{ - REALM_ASSERT(is_attached()); - - if (only_if_modified && m_alloc.is_read_only(m_ref)) - return m_ref; - - if (!deep || !m_has_refs) - return do_write_shallow(out); // Throws - - return do_write_deep(out, only_if_modified); // Throws -} - -inline ref_type Array::write(ref_type ref, Allocator& alloc, _impl::ArrayWriterBase& out, - bool only_if_modified) -{ - if (only_if_modified && alloc.is_read_only(ref)) - return ref; - - Array array(alloc); - array.init_from_ref(ref); - - if (!array.m_has_refs) - return array.do_write_shallow(out); // Throws - - return array.do_write_deep(out, only_if_modified); // Throws -} - -inline void Array::add(int_fast64_t value) -{ - insert(m_size, value); -} - -inline void Array::erase(size_t ndx) -{ - // This can throw, but only if array is currently in read-only - // memory. - move(ndx+1, size(), ndx); - - // Update size (also in header) - --m_size; - set_header_size(m_size); -} - - -inline void Array::erase(size_t begin, size_t end) -{ - if (begin != end) { - // This can throw, but only if array is currently in read-only memory. - move(end, size(), begin); // Throws - - // Update size (also in header) - m_size -= end - begin; - set_header_size(m_size); - } -} - -inline void Array::clear() -{ - truncate(0); // Throws -} - -inline void Array::clear_and_destroy_children() -{ - truncate_and_destroy_children(0); -} - -inline void Array::destroy(ref_type ref, Allocator& alloc) noexcept -{ - destroy(MemRef(ref, alloc), alloc); -} - -inline void Array::destroy(MemRef mem, Allocator& alloc) noexcept -{ - alloc.free_(mem); -} - -inline void Array::destroy_deep(ref_type ref, Allocator& alloc) noexcept -{ - destroy_deep(MemRef(ref, alloc), alloc); -} - -inline void Array::destroy_deep(MemRef mem, Allocator& alloc) noexcept -{ - if (!get_hasrefs_from_header(mem.m_addr)) { - alloc.free_(mem); - return; - } - Array array(alloc); - array.init_from_mem(mem); - array.destroy_deep(); -} - - -inline void Array::adjust(size_t ndx, int_fast64_t diff) -{ - // FIXME: Should be optimized - REALM_ASSERT_3(ndx, <=, m_size); - int_fast64_t v = get(ndx); - set(ndx, int64_t(v + diff)); // Throws -} - -inline void Array::adjust(size_t begin, size_t end, int_fast64_t diff) -{ - // FIXME: Should be optimized - for (size_t i = begin; i != end; ++i) - adjust(i, diff); // Throws -} - - - -//------------------------------------------------- - -inline bool Array::get_is_inner_bptree_node_from_header(const char* header) noexcept -{ - typedef unsigned char uchar; - const uchar* h = reinterpret_cast(header); - return (int(h[4]) & 0x80) != 0; -} -inline bool Array::get_hasrefs_from_header(const char* header) noexcept -{ - typedef unsigned char uchar; - const uchar* h = reinterpret_cast(header); - return (int(h[4]) & 0x40) != 0; -} -inline bool Array::get_context_flag_from_header(const char* header) noexcept -{ - typedef unsigned char uchar; - const uchar* h = reinterpret_cast(header); - return (int(h[4]) & 0x20) != 0; -} -inline Array::WidthType Array::get_wtype_from_header(const char* header) noexcept -{ - typedef unsigned char uchar; - const uchar* h = reinterpret_cast(header); - return WidthType((int(h[4]) & 0x18) >> 3); -} -inline size_t Array::get_width_from_header(const char* header) noexcept -{ - typedef unsigned char uchar; - const uchar* h = reinterpret_cast(header); - return size_t((1 << (int(h[4]) & 0x07)) >> 1); -} -inline size_t Array::get_size_from_header(const char* header) noexcept -{ - typedef unsigned char uchar; - const uchar* h = reinterpret_cast(header); - return (size_t(h[5]) << 16) + (size_t(h[6]) << 8) + h[7]; -} -inline size_t Array::get_capacity_from_header(const char* header) noexcept -{ - typedef unsigned char uchar; - const uchar* h = reinterpret_cast(header); - return (size_t(h[0]) << 16) + (size_t(h[1]) << 8) + h[2]; -} - - -inline char* Array::get_data_from_header(char* header) noexcept -{ - return header + header_size; -} -inline char* Array::get_header_from_data(char* data) noexcept -{ - return data - header_size; -} -inline const char* Array::get_data_from_header(const char* header) noexcept -{ - return get_data_from_header(const_cast(header)); -} - - -inline bool Array::get_is_inner_bptree_node_from_header() const noexcept -{ - return get_is_inner_bptree_node_from_header(get_header_from_data(m_data)); -} -inline bool Array::get_hasrefs_from_header() const noexcept -{ - return get_hasrefs_from_header(get_header_from_data(m_data)); -} -inline bool Array::get_context_flag_from_header() const noexcept -{ - return get_context_flag_from_header(get_header_from_data(m_data)); -} -inline Array::WidthType Array::get_wtype_from_header() const noexcept -{ - return get_wtype_from_header(get_header_from_data(m_data)); -} -inline size_t Array::get_width_from_header() const noexcept -{ - return get_width_from_header(get_header_from_data(m_data)); -} -inline size_t Array::get_size_from_header() const noexcept -{ - return get_size_from_header(get_header_from_data(m_data)); -} -inline size_t Array::get_capacity_from_header() const noexcept -{ - return get_capacity_from_header(get_header_from_data(m_data)); -} - - -inline void Array::set_header_is_inner_bptree_node(bool value, char* header) noexcept -{ - typedef unsigned char uchar; - uchar* h = reinterpret_cast(header); - h[4] = uchar((int(h[4]) & ~0x80) | int(value) << 7); -} - -inline void Array::set_header_hasrefs(bool value, char* header) noexcept -{ - typedef unsigned char uchar; - uchar* h = reinterpret_cast(header); - h[4] = uchar((int(h[4]) & ~0x40) | int(value) << 6); -} - -inline void Array::set_header_context_flag(bool value, char* header) noexcept -{ - typedef unsigned char uchar; - uchar* h = reinterpret_cast(header); - h[4] = uchar((int(h[4]) & ~0x20) | int(value) << 5); -} - -inline void Array::set_header_wtype(WidthType value, char* header) noexcept -{ - // Indicates how to calculate size in bytes based on width - // 0: bits (width/8) * size - // 1: multiply width * size - // 2: ignore 1 * size - typedef unsigned char uchar; - uchar* h = reinterpret_cast(header); - h[4] = uchar((int(h[4]) & ~0x18) | int(value) << 3); -} - -inline void Array::set_header_width(int value, char* header) noexcept -{ - // Pack width in 3 bits (log2) - int w = 0; - while (value) { - ++w; - value >>= 1; - } - REALM_ASSERT_3(w, <, 8); - - typedef unsigned char uchar; - uchar* h = reinterpret_cast(header); - h[4] = uchar((int(h[4]) & ~0x7) | w); -} - -inline void Array::set_header_size(size_t value, char* header) noexcept -{ - REALM_ASSERT_3(value, <=, max_array_payload); - typedef unsigned char uchar; - uchar* h = reinterpret_cast(header); - h[5] = uchar((value >> 16) & 0x000000FF); - h[6] = uchar((value >> 8) & 0x000000FF); - h[7] = uchar( value & 0x000000FF); -} - -// Note: There is a copy of this function is test_alloc.cpp -inline void Array::set_header_capacity(size_t value, char* header) noexcept -{ - REALM_ASSERT_3(value, <=, max_array_payload); - typedef unsigned char uchar; - uchar* h = reinterpret_cast(header); - h[0] = uchar((value >> 16) & 0x000000FF); - h[1] = uchar((value >> 8) & 0x000000FF); - h[2] = uchar( value & 0x000000FF); -} - - - -inline void Array::set_header_is_inner_bptree_node(bool value) noexcept -{ - set_header_is_inner_bptree_node(value, get_header_from_data(m_data)); -} -inline void Array::set_header_hasrefs(bool value) noexcept -{ - set_header_hasrefs(value, get_header_from_data(m_data)); -} -inline void Array::set_header_context_flag(bool value) noexcept -{ - set_header_context_flag(value, get_header_from_data(m_data)); -} -inline void Array::set_header_wtype(WidthType value) noexcept -{ - set_header_wtype(value, get_header_from_data(m_data)); -} -inline void Array::set_header_width(int value) noexcept -{ - set_header_width(value, get_header_from_data(m_data)); -} -inline void Array::set_header_size(size_t value) noexcept -{ - set_header_size(value, get_header_from_data(m_data)); -} -inline void Array::set_header_capacity(size_t value) noexcept -{ - set_header_capacity(value, get_header_from_data(m_data)); -} - - -inline Array::Type Array::get_type_from_header(const char* header) noexcept -{ - if (get_is_inner_bptree_node_from_header(header)) - return type_InnerBptreeNode; - if (get_hasrefs_from_header(header)) - return type_HasRefs; - return type_Normal; -} - - -inline char* Array::get_header() noexcept -{ - return get_header_from_data(m_data); -} - - -inline size_t Array::get_byte_size() const noexcept -{ - size_t num_bytes = 0; - const char* header = get_header_from_data(m_data); - switch (get_wtype_from_header(header)) { - case wtype_Bits: { - // FIXME: The following arithmetic could overflow, that - // is, even though both the total number of elements and - // the total number of bytes can be represented in - // uint_fast64_t, the total number of bits may not - // fit. Note that "num_bytes = width < 8 ? size / (8 / - // width) : size * (width / 8)" would be guaranteed to - // never overflow, but it potentially involves two slow - // divisions. - uint_fast64_t num_bits = uint_fast64_t(m_size) * m_width; - num_bytes = size_t(num_bits / 8); - if (num_bits & 0x7) - ++num_bytes; - goto found; - } - case wtype_Multiply: { - num_bytes = m_size * m_width; - goto found; - } - case wtype_Ignore: - num_bytes = m_size; - goto found; - } - REALM_ASSERT_DEBUG(false); - - found: - // Ensure 8-byte alignment - size_t rest = (~num_bytes & 0x7) + 1; - if (rest < 8) - num_bytes += rest; - - num_bytes += header_size; - - REALM_ASSERT_7(m_alloc.is_read_only(m_ref), ==, true, ||, - num_bytes, <=, get_capacity_from_header(header)); - - return num_bytes; -} - - -inline size_t Array::get_byte_size_from_header(const char* header) noexcept -{ - size_t num_bytes = 0; - size_t size = get_size_from_header(header); - switch (get_wtype_from_header(header)) { - case wtype_Bits: { - size_t width = get_width_from_header(header); - size_t num_bits = (size * width); // FIXME: Prone to overflow - num_bytes = num_bits / 8; - if (num_bits & 0x7) - ++num_bytes; - goto found; - } - case wtype_Multiply: { - size_t width = get_width_from_header(header); - num_bytes = size * width; - goto found; - } - case wtype_Ignore: - num_bytes = size; - goto found; - } - REALM_ASSERT_DEBUG(false); - - found: - // Ensure 8-byte alignment - size_t rest = (~num_bytes & 0x7) + 1; - if (rest < 8) - num_bytes += rest; - - num_bytes += header_size; - - return num_bytes; -} - - -inline void Array::init_header(char* header, bool is_inner_bptree_node, bool has_refs, - bool context_flag, WidthType width_type, int width, - size_t size, size_t capacity) noexcept -{ - // Note: Since the header layout contains unallocated bit and/or - // bytes, it is important that we put the entire header into a - // well defined state initially. - std::fill(header, header + header_size, 0); - set_header_is_inner_bptree_node(is_inner_bptree_node, header); - set_header_hasrefs(has_refs, header); - set_header_context_flag(context_flag, header); - set_header_wtype(width_type, header); - set_header_width(width, header); - set_header_size(size, header); - set_header_capacity(capacity, header); -} - - -//------------------------------------------------- - -inline MemRef Array::clone_deep(Allocator& target_alloc) const -{ - char* header = get_header_from_data(m_data); - return clone(MemRef(header, m_ref), m_alloc, target_alloc); // Throws -} - -inline void Array::move_assign(Array& a) noexcept -{ - REALM_ASSERT_3(&get_alloc(), ==, &a.get_alloc()); - // FIXME: Be carefull with the old parent info here. Should it be - // copied? - - // FIXME: It will likely be a lot better for the optimizer if we - // did a member-wise copy, rather than recreating the state from - // the referenced data. This is important because TableView efficiency, for - // example, relies on long chains of moves to be optimized away - // completely. This change should be a 'no-brainer'. - destroy_deep(); - init_from_ref(a.get_ref()); - a.detach(); -} - -inline MemRef Array::create_empty_array(Type type, bool context_flag, Allocator& alloc) -{ - size_t size = 0; - int_fast64_t value = 0; - return create_array(type, context_flag, size, value, alloc); // Throws -} - -inline MemRef Array::create_array(Type type, bool context_flag, size_t size, int_fast64_t value, - Allocator& alloc) -{ - return create(type, context_flag, wtype_Bits, size, value, alloc); // Throws -} - -inline bool Array::has_parent() const noexcept -{ - return m_parent != nullptr; -} - -inline ArrayParent* Array::get_parent() const noexcept -{ - return m_parent; -} - -inline void Array::set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept -{ - m_parent = parent; - m_ndx_in_parent = ndx_in_parent; -} - -inline size_t Array::get_ndx_in_parent() const noexcept -{ - return m_ndx_in_parent; -} - -inline void Array::set_ndx_in_parent(size_t ndx) noexcept -{ - m_ndx_in_parent = ndx; -} - -inline void Array::adjust_ndx_in_parent(int diff) noexcept -{ - // Note that `diff` is promoted to an unsigned type, and that - // C++03 still guarantees the expected result regardless of the - // sizes of `int` and `decltype(m_ndx_in_parent)`. - m_ndx_in_parent += diff; -} - -inline ref_type Array::get_ref_from_parent() const noexcept -{ - ref_type ref = m_parent->get_child_ref(m_ndx_in_parent); - return ref; -} - -inline bool Array::is_attached() const noexcept -{ - return m_data != nullptr; -} - -inline void Array::detach() noexcept -{ - m_data = nullptr; -} - -inline size_t Array::size() const noexcept -{ - REALM_ASSERT_DEBUG(is_attached()); - return m_size; -} - -inline bool Array::is_empty() const noexcept -{ - return size() == 0; -} - -inline size_t Array::get_max_byte_size(size_t num_elems) noexcept -{ - int max_bytes_per_elem = 8; - return header_size + num_elems * max_bytes_per_elem; // FIXME: Prone to overflow -} - -inline void Array::update_parent() -{ - if (m_parent) - m_parent->update_child_ref(m_ndx_in_parent, m_ref); -} - - -inline void Array::update_child_ref(size_t child_ndx, ref_type new_ref) -{ - set(child_ndx, new_ref); -} - -inline ref_type Array::get_child_ref(size_t child_ndx) const noexcept -{ - return get_as_ref(child_ndx); -} - -inline size_t Array::get_bptree_size() const noexcept -{ - REALM_ASSERT_DEBUG(is_inner_bptree_node()); - int_fast64_t v = back(); - return size_t(v / 2); // v = 1 + 2*total_elems_in_tree -} - -inline size_t Array::get_bptree_size_from_header(const char* root_header) noexcept -{ - REALM_ASSERT_DEBUG(get_is_inner_bptree_node_from_header(root_header)); - size_t root_size = get_size_from_header(root_header); - int_fast64_t v = get(root_header, root_size-1); - return size_t(v / 2); // v = 1 + 2*total_elems_in_tree -} - -inline void Array::ensure_bptree_offsets(Array& offsets) -{ - int_fast64_t first_value = get(0); - if (first_value % 2 == 0) { - offsets.init_from_ref(to_ref(first_value)); - } - else { - create_bptree_offsets(offsets, first_value); // Throws - } - offsets.set_parent(this, 0); -} - - -template -ref_type Array::bptree_append(TreeInsert& state) -{ - // FIXME: Consider exception safety. Especially, how can the split - // be carried out in an exception safe manner? - // - // Can split be done as a separate preparation step, such that if - // the actual insert fails, the split will still have occured. - // - // Unfortunately, it requires a rather significant rearrangement - // of the insertion flow. Instead of returning the sibling ref - // from insert functions, the leaf-insert functions must instead - // call the special bptree_insert() function on the parent, which - // will then cascade the split towards the root as required. - // - // At each level where a split is required (starting at the leaf): - // - // 1. Create the new sibling. - // - // 2. Copy relevant entries over such that new sibling is in - // its final state. - // - // 3. Call Array::bptree_insert() on parent with sibling ref. - // - // 4. Rearrange entries in original sibling and truncate as - // required (must not throw). - // - // What about the 'offsets' array? It will always be - // present. Consider this carefully. - - REALM_ASSERT_DEBUG(size() >= 1 + 1 + 1); // At least one child - - ArrayParent& childs_parent = *this; - size_t child_ref_ndx = size() - 2; - ref_type child_ref = get_as_ref(child_ref_ndx), new_sibling_ref; - char* child_header = static_cast(m_alloc.translate(child_ref)); - - bool child_is_leaf = !get_is_inner_bptree_node_from_header(child_header); - if (child_is_leaf) { - size_t elem_ndx_in_child = npos; // Append - new_sibling_ref = - TreeTraits::leaf_insert(MemRef(child_header, child_ref), childs_parent, - child_ref_ndx, m_alloc, elem_ndx_in_child, state); // Throws - } - else { - Array child(m_alloc); - child.init_from_mem(MemRef(child_header, child_ref)); - child.set_parent(&childs_parent, child_ref_ndx); - new_sibling_ref = child.bptree_append(state); // Throws - } - - if (REALM_LIKELY(!new_sibling_ref)) { - // +2 because stored value is 1 + 2*total_elems_in_subtree - adjust(size()-1, +2); // Throws - return 0; // Child was not split, so parent was not split either - } - - Array offsets(m_alloc); - int_fast64_t first_value = get(0); - if (first_value % 2 == 0) { - // Offsets array is present (general form) - offsets.init_from_ref(to_ref(first_value)); - offsets.set_parent(this, 0); - } - size_t child_ndx = child_ref_ndx - 1; - return insert_bptree_child(offsets, child_ndx, new_sibling_ref, state); // Throws -} - - -template -ref_type Array::bptree_insert(size_t elem_ndx, TreeInsert& state) -{ - REALM_ASSERT_3(size(), >=, 1 + 1 + 1); // At least one child - - // Conversion to general form if in compact form. Since this - // conversion will occur from root to leaf, it will maintain - // invar:bptree-node-form. - Array offsets(m_alloc); - ensure_bptree_offsets(offsets); // Throws - - size_t child_ndx, elem_ndx_in_child; - if (elem_ndx == 0) { - // Optimization for prepend - child_ndx = 0; - elem_ndx_in_child = 0; - } - else { - // There is a choice to be made when the element is to be - // inserted between two subtrees. It can either be appended to - // the first subtree, or it can be prepended to the second - // one. We currently always append to the first subtree. It is - // essentially a matter of using the lower vs. the upper bound - // when searching through the offsets array. - child_ndx = offsets.lower_bound_int(elem_ndx); - REALM_ASSERT_3(child_ndx, <, size() - 2); - size_t elem_ndx_offset = child_ndx == 0 ? 0 : to_size_t(offsets.get(child_ndx-1)); - elem_ndx_in_child = elem_ndx - elem_ndx_offset; - } - - ArrayParent& childs_parent = *this; - size_t child_ref_ndx = child_ndx + 1; - ref_type child_ref = get_as_ref(child_ref_ndx), new_sibling_ref; - char* child_header = static_cast(m_alloc.translate(child_ref)); - bool child_is_leaf = !get_is_inner_bptree_node_from_header(child_header); - if (child_is_leaf) { - REALM_ASSERT_3(elem_ndx_in_child, <=, REALM_MAX_BPNODE_SIZE); - new_sibling_ref = - TreeTraits::leaf_insert(MemRef(child_header, child_ref), childs_parent, - child_ref_ndx, m_alloc, elem_ndx_in_child, state); // Throws - } - else { - Array child(m_alloc); - child.init_from_mem(MemRef(child_header, child_ref)); - child.set_parent(&childs_parent, child_ref_ndx); - new_sibling_ref = child.bptree_insert(elem_ndx_in_child, state); // Throws - } - - if (REALM_LIKELY(!new_sibling_ref)) { - // +2 because stored value is 1 + 2*total_elems_in_subtree - adjust(size()-1, +2); // Throws - offsets.adjust(child_ndx, offsets.size(), +1); - return 0; // Child was not split, so parent was not split either - } - - return insert_bptree_child(offsets, child_ndx, new_sibling_ref, state); // Throws -} - - - -//************************************************************************************* -// Finding code * -//************************************************************************************* - -template -int64_t Array::get(size_t ndx) const noexcept -{ - return get_universal(m_data, ndx); -} - -template -int64_t Array::get_universal(const char* data, size_t ndx) const -{ - if (w == 0) { - return 0; - } - else if (w == 1) { - size_t offset = ndx >> 3; - return (data[offset] >> (ndx & 7)) & 0x01; - } - else if (w == 2) { - size_t offset = ndx >> 2; - return (data[offset] >> ((ndx & 3) << 1)) & 0x03; - } - else if (w == 4) { - size_t offset = ndx >> 1; - return (data[offset] >> ((ndx & 1) << 2)) & 0x0F; - } - else if (w == 8) { - return *reinterpret_cast(data + ndx); - } - else if (w == 16) { - size_t offset = ndx * 2; - return *reinterpret_cast(data + offset); - } - else if (w == 32) { - size_t offset = ndx * 4; - return *reinterpret_cast(data + offset); - } - else if (w == 64) { - size_t offset = ndx * 8; - return *reinterpret_cast(data + offset); - } - else { - REALM_ASSERT_DEBUG(false); - return int64_t(-1); - } -} - -/* -find() (calls find_optimized()) will call match() for each search result. - -If pattern == true: - 'indexpattern' contains a 64-bit chunk of elements, each of 'width' bits in size where each element indicates a match if its lower bit is set, otherwise - it indicates a non-match. 'index' tells the database row index of the first element. You must return true if you chose to 'consume' the chunk or false - if not. If not, then Array-finder will afterwards call match() successive times with pattern == false. - -If pattern == false: - 'index' tells the row index of a single match and 'value' tells its value. Return false to make Array-finder break its search or return true to let it continue until - 'end' or 'limit'. - -Array-finder decides itself if - and when - it wants to pass you an indexpattern. It depends on array bit width, match frequency, and wether the arithemetic and -computations for the given search criteria makes it feasible to construct such a pattern. -*/ - -// These wrapper functions only exist to enable a possibility to make the compiler see that 'value' and/or 'index' are unused, such that caller's -// computation of these values will not be made. Only works if find_action() and find_action_pattern() rewritten as macros. Note: This problem has been fixed in -// next upcoming array.hpp version -template -bool Array::find_action(size_t index, util::Optional value, QueryState* state, Callback callback) const -{ - if (action == act_CallbackIdx) - return callback(index); - else - return state->match(index, 0, value); -} -template -bool Array::find_action_pattern(size_t index, uint64_t pattern, QueryState* state, Callback callback) const -{ - static_cast(callback); - if (action == act_CallbackIdx) { - // Possible future optimization: call callback(index) like in above find_action(), in a loop for each bit set in 'pattern' - return false; - } - return state->match(index, pattern, 0); -} - - -template -uint64_t Array::cascade(uint64_t a) const -{ - // Takes a chunk of values as argument and sets the least significant bit for each - // element which is zero or non-zero, depending on the template parameter. - // Example for zero=true: - // width == 4 and a = 0x5fd07a107610f610 - // will return: 0x0001000100010001 - - // static values needed for fast population count - const uint64_t m1 = 0x5555555555555555ULL; - - if (width == 1) { - return zero ? ~a : a; - } - else if (width == 2) { - // Masks to avoid spillover between segments in cascades - const uint64_t c1 = ~0ULL/0x3 * 0x1; - - a |= (a >> 1) & c1; // cascade ones in non-zeroed segments - a &= m1; // isolate single bit in each segment - if (zero) - a ^= m1; // reverse isolated bits if checking for zeroed segments - - return a; - } - else if (width == 4) { - const uint64_t m = ~0ULL/0xF * 0x1; - - // Masks to avoid spillover between segments in cascades - const uint64_t c1 = ~0ULL/0xF * 0x7; - const uint64_t c2 = ~0ULL/0xF * 0x3; - - a |= (a >> 1) & c1; // cascade ones in non-zeroed segments - a |= (a >> 2) & c2; - a &= m; // isolate single bit in each segment - if (zero) - a ^= m; // reverse isolated bits if checking for zeroed segments - - return a; - } - else if (width == 8) { - const uint64_t m = ~0ULL/0xFF * 0x1; - - // Masks to avoid spillover between segments in cascades - const uint64_t c1 = ~0ULL/0xFF * 0x7F; - const uint64_t c2 = ~0ULL/0xFF * 0x3F; - const uint64_t c3 = ~0ULL/0xFF * 0x0F; - - a |= (a >> 1) & c1; // cascade ones in non-zeroed segments - a |= (a >> 2) & c2; - a |= (a >> 4) & c3; - a &= m; // isolate single bit in each segment - if (zero) - a ^= m; // reverse isolated bits if checking for zeroed segments - - return a; - } - else if (width == 16) { - const uint64_t m = ~0ULL/0xFFFF * 0x1; - - // Masks to avoid spillover between segments in cascades - const uint64_t c1 = ~0ULL/0xFFFF * 0x7FFF; - const uint64_t c2 = ~0ULL/0xFFFF * 0x3FFF; - const uint64_t c3 = ~0ULL/0xFFFF * 0x0FFF; - const uint64_t c4 = ~0ULL/0xFFFF * 0x00FF; - - a |= (a >> 1) & c1; // cascade ones in non-zeroed segments - a |= (a >> 2) & c2; - a |= (a >> 4) & c3; - a |= (a >> 8) & c4; - a &= m; // isolate single bit in each segment - if (zero) - a ^= m; // reverse isolated bits if checking for zeroed segments - - return a; - } - - else if (width == 32) { - const uint64_t m = ~0ULL/0xFFFFFFFF * 0x1; - - // Masks to avoid spillover between segments in cascades - const uint64_t c1 = ~0ULL/0xFFFFFFFF * 0x7FFFFFFF; - const uint64_t c2 = ~0ULL/0xFFFFFFFF * 0x3FFFFFFF; - const uint64_t c3 = ~0ULL/0xFFFFFFFF * 0x0FFFFFFF; - const uint64_t c4 = ~0ULL/0xFFFFFFFF * 0x00FFFFFF; - const uint64_t c5 = ~0ULL/0xFFFFFFFF * 0x0000FFFF; - - a |= (a >> 1) & c1; // cascade ones in non-zeroed segments - a |= (a >> 2) & c2; - a |= (a >> 4) & c3; - a |= (a >> 8) & c4; - a |= (a >> 16) & c5; - a &= m; // isolate single bit in each segment - if (zero) - a ^= m; // reverse isolated bits if checking for zeroed segments - - return a; - } - else if (width == 64) { - return (a == 0) == zero; - } - else { - REALM_ASSERT_DEBUG(false); - return uint64_t(-1); - } -} - -// This is the main finding function for Array. Other finding functions are just wrappers around this one. -// Search for 'value' using condition cond (Equal, NotEqual, Less, etc) and call find_action() or find_action_pattern() -// for each match. Break and return if find_action() returns false or 'end' is reached. - -// If nullable_array is set, then find_optimized() will treat the array is being nullable, i.e. it will skip the -// first entry and compare correctly against null, etc. -// -// If find_null is set, it means that we search for a null. In that case, `value` is ignored. If find_null is set, -// then nullable_array must be set too. -template -bool Array::find_optimized(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state, Callback callback, bool nullable_array, bool find_null) const -{ - REALM_ASSERT(!(find_null && !nullable_array)); - REALM_ASSERT_DEBUG(start <= m_size && (end <= m_size || end == size_t(-1)) && start <= end); - - size_t start2 = start; - cond c; - - if (end == npos) - end = nullable_array ? size() - 1 : size(); - - if (nullable_array) { - // We were called by find() of a nullable array. So skip first entry, take nulls in count, etc, etc. Fixme: - // Huge speed optimizations are possible here! This is a very simple generic method. - for (; start2 < end; start2++) { - int64_t v = get(start2 + 1); - if (c(v, value, v == get(0), find_null)) { - util::Optional v2(v == get(0) ? util::none : util::make_optional(v)); - if (!find_action(start2 + baseindex, v2, state, callback)) - return false; // tell caller to stop aggregating/search - } - } - return true; // tell caller to continue aggregating/search (on next array leafs) - } - - - // Test first few items with no initial time overhead - if (start2 > 0) { - if (m_size > start2 && c(get(start2), value) && start2 < end) { - if (!find_action(start2 + baseindex, get(start2), state, callback)) - return false; - } - - ++start2; - - if (m_size > start2 && c(get(start2), value) && start2 < end) { - if (!find_action(start2 + baseindex, get(start2), state, callback)) - return false; - } - - ++start2; - - if (m_size > start2 && c(get(start2), value) && start2 < end) { - if (!find_action(start2 + baseindex, get(start2), state, callback)) - return false; - } - - ++start2; - - if (m_size > start2 && c(get(start2), value) && start2 < end) { - if (!find_action(start2 + baseindex, get(start2), state, callback)) - return false; - } - - ++start2; - } - - if (!(m_size > start2 && start2 < end)) - return true; - - if (end == size_t(-1)) - end = m_size; - - // Return immediately if no items in array can match (such as if cond == Greater && value == 100 && m_ubound == 15) - if (!c.can_match(value, m_lbound, m_ubound)) - return true; - - // optimization if all items are guaranteed to match (such as cond == NotEqual && value == 100 && m_ubound == 15) - if (c.will_match(value, m_lbound, m_ubound)) { - size_t end2; - - if (action == act_CallbackIdx) - end2 = end; - else { - REALM_ASSERT_DEBUG(state->m_match_count < state->m_limit); - size_t process = state->m_limit - state->m_match_count; - end2 = end - start2 > process ? start2 + process : end; - } - if (action == act_Sum || action == act_Max || action == act_Min) { - int64_t res; - size_t res_ndx = 0; - if (action == act_Sum) - res = Array::sum(start2, end2); - if (action == act_Max) - Array::maximum(res, start2, end2, &res_ndx); - if (action == act_Min) - Array::minimum(res, start2, end2, &res_ndx); - - find_action(res_ndx + baseindex, res, state, callback); - // find_action will increment match count by 1, so we need to `-1` from the number of elements that - // we performed the fast Array methods on. - state->m_match_count += end2 - start2 - 1; - - } - else if (action == act_Count) { - state->m_state += end2 - start2; - } - else { - for (; start2 < end2; start2++) - if (!find_action(start2 + baseindex, get(start2), state, callback)) - return false; - } - return true; - } - - // finder cannot handle this bitwidth - REALM_ASSERT_3(m_width, !=, 0); - -#if defined(REALM_COMPILER_SSE) - // Only use SSE if payload is at least one SSE chunk (128 bits) in size. Also note taht SSE doesn't support - // Less-than comparison for 64-bit values. - if ((!(std::is_same::value && m_width == 64)) && end - start2 >= sizeof(__m128i) && m_width >= 8 && - (sseavx<42>() || (sseavx<30>() && std::is_same::value && m_width < 64))) { - - // find_sse() must start2 at 16-byte boundary, so search area before that using compare_equality() - __m128i* const a = reinterpret_cast<__m128i*>(round_up(m_data + start2 * bitwidth / 8, sizeof (__m128i))); - __m128i* const b = reinterpret_cast<__m128i*>(round_down(m_data + end * bitwidth / 8, sizeof (__m128i))); - - if (!compare(value, start2, (reinterpret_cast(a) - m_data) * 8 / no0(bitwidth), baseindex, state, callback)) - return false; - - // Search aligned area with SSE - if (b > a) { - if (sseavx<42>()) { - if (!find_sse(value, a, b - a, state, baseindex + ((reinterpret_cast(a) - m_data) * 8 / no0(bitwidth)), callback)) - return false; - } - else if (sseavx<30>()) { - - if (!find_sse(value, a, b - a, state, baseindex + ((reinterpret_cast(a) - m_data) * 8 / no0(bitwidth)), callback)) - return false; - } - } - - // Search remainder with compare_equality() - if (!compare(value, (reinterpret_cast(b) - m_data) * 8 / no0(bitwidth), end, baseindex, state, callback)) - return false; - - return true; - } - else { - return compare(value, start2, end, baseindex, state, callback); - } -#else -return compare(value, start2, end, baseindex, state, callback); -#endif -} - -template -inline int64_t Array::lower_bits() const -{ - if (width == 1) - return 0xFFFFFFFFFFFFFFFFULL; - else if (width == 2) - return 0x5555555555555555ULL; - else if (width == 4) - return 0x1111111111111111ULL; - else if (width == 8) - return 0x0101010101010101ULL; - else if (width == 16) - return 0x0001000100010001ULL; - else if (width == 32) - return 0x0000000100000001ULL; - else if (width == 64) - return 0x0000000000000001ULL; - else { - REALM_ASSERT_DEBUG(false); - return int64_t(-1); - } -} - -// Tests if any chunk in 'value' is 0 -template -inline bool Array::test_zero(uint64_t value) const -{ - uint64_t hasZeroByte; - uint64_t lower = lower_bits(); - uint64_t upper = lower_bits() * 1ULL << (width == 0 ? 0 : (width - 1ULL)); - hasZeroByte = (value - lower) & ~value & upper; - return hasZeroByte != 0; -} - -// Finds first zero (if eq == true) or non-zero (if eq == false) element in v and returns its position. -// IMPORTANT: This function assumes that at least 1 item matches (test this with test_zero() or other means first)! -template -size_t Array::find_zero(uint64_t v) const -{ - size_t start = 0; - uint64_t hasZeroByte; - // Warning free way of computing (1ULL << width) - 1 - uint64_t mask = (width == 64 ? ~0ULL : ((1ULL << (width == 64 ? 0 : width)) - 1ULL)); - - if (eq == (((v >> (width * start)) & mask) == 0)) { - return 0; - } - - // Bisection optimization, speeds up small bitwidths with high match frequency. More partions than 2 do NOT pay - // off because the work done by test_zero() is wasted for the cases where the value exists in first half, but - // useful if it exists in last half. Sweet spot turns out to be the widths and partitions below. - if (width <= 8) { - hasZeroByte = test_zero(v | 0xffffffff00000000ULL); - if (eq ? !hasZeroByte : (v & 0x00000000ffffffffULL) == 0) { - // 00?? -> increasing - start += 64 / no0(width) / 2; - if (width <= 4) { - hasZeroByte = test_zero(v | 0xffff000000000000ULL); - if (eq ? !hasZeroByte : (v & 0x0000ffffffffffffULL) == 0) { - // 000? - start += 64 / no0(width) / 4; - } - } - } - else { - if (width <= 4) { - // ??00 - hasZeroByte = test_zero(v | 0xffffffffffff0000ULL); - if (eq ? !hasZeroByte : (v & 0x000000000000ffffULL) == 0) { - // 0?00 - start += 64 / no0(width) / 4; - } - } - } - } - - while (eq == (((v >> (width * start)) & mask) != 0)) { - // You must only call find_zero() if you are sure that at least 1 item matches - REALM_ASSERT_3(start, <=, 8 * sizeof(v)); - start++; - } - - return start; -} - -// Generate a magic constant used for later bithacks -template -int64_t Array::find_gtlt_magic(int64_t v) const -{ - uint64_t mask1 = (width == 64 ? ~0ULL : ((1ULL << (width == 64 ? 0 : width)) - 1ULL)); // Warning free way of computing (1ULL << width) - 1 - uint64_t mask2 = mask1 >> 1; - uint64_t magic = gt ? (~0ULL / no0(mask1) * (mask2 - v)) : (~0ULL / no0(mask1) * v); - return magic; -} - -template -bool Array::find_gtlt_fast(uint64_t chunk, uint64_t magic, QueryState* state, size_t baseindex, Callback callback) const -{ - // Tests if a a chunk of values contains values that are greater (if gt == true) or less (if gt == false) than v. - // Fast, but limited to work when all values in the chunk are positive. - - uint64_t mask1 = (width == 64 ? ~0ULL : ((1ULL << (width == 64 ? 0 : width)) - 1ULL)); // Warning free way of computing (1ULL << width) - 1 - uint64_t mask2 = mask1 >> 1; - uint64_t m = gt ? (((chunk + magic) | chunk) & ~0ULL / no0(mask1) * (mask2 + 1)) : ((chunk - magic) & ~chunk&~0ULL/no0(mask1)*(mask2+1)); - size_t p = 0; - while (m) { - if (find_action_pattern(baseindex, m >> (no0(width) - 1), state, callback)) - break; // consumed, so do not call find_action() - - size_t t = first_set_bit64(m) / no0(width); - p += t; - if (!find_action(p + baseindex, (chunk >> (p * width)) & mask1, state, callback)) - return false; - - if ((t + 1) * width == 64) - m = 0; - else - m >>= (t + 1) * width; - p++; - } - - return true; -} - - -template -bool Array::find_gtlt(int64_t v, uint64_t chunk, QueryState* state, size_t baseindex, Callback callback) const -{ - // Find items in 'chunk' that are greater (if gt == true) or smaller (if gt == false) than 'v'. Fixme, __forceinline can make it crash in vS2010 - find out why - if (width == 1) { - for (size_t t = 0; t < 64; t++) { - if (gt ? static_cast(chunk & 0x1) > v : static_cast(chunk & 0x1) < v) {if (!find_action( t + baseindex, static_cast(chunk & 0x1), state, callback)) return false;} chunk >>= 1; - } - } - else if (width == 2) { - // Alot (50% +) faster than loop/compiler-unrolled loop - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 0 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 1 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 2 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 3 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 4 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 5 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 6 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 7 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 8 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 9 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 10 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 11 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 12 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 13 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 14 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 15 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 16 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 17 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 18 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 19 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 20 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 21 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 22 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 23 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 24 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 25 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 26 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 27 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 28 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 29 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 30 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - if (gt ? static_cast(chunk & 0x3) > v : static_cast(chunk & 0x3) < v) {if (!find_action( 31 + baseindex, static_cast(chunk & 0x3), state, callback)) return false;} chunk >>= 2; - } - else if (width == 4) { - // 128 ms: - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 0 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 1 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 2 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 3 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 4 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 5 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 6 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 7 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 8 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 9 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 10 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 11 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 12 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 13 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 14 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - if (gt ? static_cast(chunk & 0xf) > v : static_cast(chunk & 0xf) < v) {if (!find_action( 15 + baseindex, static_cast(chunk & 0xf), state, callback)) return false;} chunk >>= 4; - - // 187 ms: - // if (gt ? static_cast(chunk >> 0*4) & 0xf > v : static_cast(chunk >> 0*4) & 0xf < v) return 0; - } - else if (width == 8) { - // 88 ms: - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 0 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 1 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 2 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 3 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 4 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 5 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 6 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 7 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 8; - - //97 ms ms: - // if (gt ? static_cast(chunk >> 0*8) > v : static_cast(chunk >> 0*8) < v) return 0; - } - else if (width == 16) { - - if (gt ? static_cast(chunk >> 0*16) > v : static_cast(chunk >> 0*16) < v) {if (!find_action( 0 + baseindex, static_cast(chunk >> 0*16), state, callback)) return false;}; - if (gt ? static_cast(chunk >> 1*16) > v : static_cast(chunk >> 1*16) < v) {if (!find_action( 1 + baseindex, static_cast(chunk >> 1*16), state, callback)) return false;}; - if (gt ? static_cast(chunk >> 2*16) > v : static_cast(chunk >> 2*16) < v) {if (!find_action( 2 + baseindex, static_cast(chunk >> 2*16), state, callback)) return false;}; - if (gt ? static_cast(chunk >> 3*16) > v : static_cast(chunk >> 3*16) < v) {if (!find_action( 3 + baseindex, static_cast(chunk >> 3*16), state, callback)) return false;}; - - /* - // Faster but disabled due to bug in VC2010 compiler (fixed in 2012 toolchain) where last 'if' is errorneously optimized away - if (gt ? static_castchunk > v : static_castchunk < v) {if (!state->add_positive_local(0 + baseindex); else return 0;} chunk >>= 16; - if (gt ? static_castchunk > v : static_castchunk < v) {if (!state->add_positive_local(1 + baseindex); else return 1;} chunk >>= 16; - if (gt ? static_castchunk > v : static_castchunk < v) {if (!state->add_positive_local(2 + baseindex); else return 2;} chunk >>= 16; - if (gt ? static_castchunk > v : static_castchunk < v) {if (!state->add_positive_local(3 + baseindex); else return 3;} chunk >>= 16; - - // Following illustrates it: - #include - #include - #include - - size_t bug(int64_t v, uint64_t chunk) - { - bool gt = true; - - if (gt ? static_castchunk > v : static_castchunk < v) {return 0;} chunk >>= 16; - if (gt ? static_castchunk > v : static_castchunk < v) {return 1;} chunk >>= 16; - if (gt ? static_castchunk > v : static_castchunk < v) {return 2;} chunk >>= 16; - if (gt ? static_castchunk > v : static_castchunk < v) {return 3;} chunk >>= 16; - - return -1; - } - - int main(int argc, char const *const argv[]) - { - int64_t v; - FIXME: We cannot use rand() as it is not thread-safe. - if (rand()*rand() == 3) { - v = rand()*rand()*rand()*rand()*rand(); - printf("Change '3' to something else and run test again\n"); - } - else { - v = 0x2222000000000000ULL; - } - - size_t idx; - - idx = bug(200, v); - if (idx != 3) - printf("Compiler failed: idx == %d (expected idx == 3)\n", idx); - - v = 0x2222000000000000ULL; - idx = bug(200, v); - if (idx == 3) - printf("Touching v made it work\n", idx); - } - */ - } - else if (width == 32) { - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 0 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 32; - if (gt ? static_cast(chunk) > v : static_cast(chunk) < v) {if (!find_action( 1 + baseindex, static_cast(chunk), state, callback)) return false;} chunk >>= 32; - } - else if (width == 64) { - if (gt ? static_cast(v) > v : static_cast(v) < v) {if (!find_action( 0 + baseindex, static_cast(v), state, callback)) return false;}; - } - - return true; -} - - -template -inline bool Array::compare_equality(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state, Callback callback) const -{ - // Find items in this Array that are equal (eq == true) or different (eq = false) from 'value' - - REALM_ASSERT_DEBUG(start <= m_size && (end <= m_size || end == size_t(-1)) && start <= end); - - size_t ee = round_up(start, 64 / no0(width)); - ee = ee > end ? end : ee; - for (; start < ee; ++start) - if (eq ? (get(start) == value) : (get(start) != value)) { - if (!find_action(start + baseindex, get(start), state, callback)) - return false; - } - - if (start >= end) - return true; - - if (width != 32 && width != 64) { - const int64_t* p = reinterpret_cast(m_data + (start * width / 8)); - const int64_t* const e = reinterpret_cast(m_data + (end * width / 8)) - 1; - const uint64_t mask = (width == 64 ? ~0ULL : ((1ULL << (width == 64 ? 0 : width)) - 1ULL)); // Warning free way of computing (1ULL << width) - 1 - const uint64_t valuemask = ~0ULL / no0(mask) * (value & mask); // the "== ? :" is to avoid division by 0 compiler error - - while (p < e) { - uint64_t chunk = *p; - uint64_t v2 = chunk ^ valuemask; - start = (p - reinterpret_cast(m_data)) * 8 * 8 / no0(width); - size_t a = 0; - - while (eq ? test_zero(v2) : v2) { - - if (find_action_pattern(start + baseindex, cascade(v2), state, callback)) - break; // consumed - - size_t t = find_zero(v2); - a += t; - - if (a >= 64 / no0(width)) - break; - - if (!find_action(a + start + baseindex, get(start + t), state, callback)) - return false; - v2 >>= (t + 1) * width; - a += 1; - } - - ++p; - } - - // Loop ended because we are near end or end of array. No need to optimize search in remainder in this case because end of array means that - // lots of search work has taken place prior to ending here. So time spent searching remainder is relatively tiny - start = (p - reinterpret_cast(m_data)) * 8 * 8 / no0(width); - } - - while (start < end) { - if (eq ? get(start) == value : get(start) != value) { - if (!find_action( start + baseindex, get(start), state, callback)) - return false; - } - ++start; - } - - return true; -} - -// There exists a couple of find() functions that take more or less template arguments. Always call the one that -// takes as most as possible to get best performance. - -// This is the one installed into the m_vtable->finder slots. -template -bool Array::find(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state) const -{ - return find(value, start, end, baseindex, state, CallbackDummy()); -} - -template -bool Array::find(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state, - Callback callback, bool nullable_array, bool find_null) const -{ - REALM_TEMPEX4(return find, cond, action, m_width, Callback, (value, start, end, baseindex, state, callback, nullable_array, find_null)); -} - -template -bool Array::find(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state, - Callback callback, bool nullable_array, bool find_null) const -{ - return find_optimized(value, start, end, baseindex, state, callback, nullable_array, find_null); -} - -#ifdef REALM_COMPILER_SSE -// 'items' is the number of 16-byte SSE chunks. Returns index of packed element relative to first integer of first chunk -template -bool Array::find_sse(int64_t value, __m128i *data, size_t items, QueryState* state, size_t baseindex, - Callback callback) const -{ - __m128i search = {0}; - - // FIXME: Lasse, should these casts not be to int8_t, int16_t, int32_t respecitvely? - if (width == 8) - search = _mm_set1_epi8(static_cast(value)); // FIXME: Lasse, Should this not be a cast to 'signed char'? - else if (width == 16) - search = _mm_set1_epi16(static_cast(value)); - else if (width == 32) - search = _mm_set1_epi32(static_cast(value)); - else if (width == 64) { - if (std::is_same::value) - REALM_ASSERT(false); - else - search = _mm_set_epi64x(value, value); - } - - return find_sse_intern(data, &search, items, state, baseindex, callback); -} - -// Compares packed action_data with packed data (equal, less, etc) and performs aggregate action (max, min, sum, -// find_all, etc) on value inside action_data for first match, if any -template -REALM_FORCEINLINE bool Array::find_sse_intern(__m128i* action_data, __m128i* data, size_t items, - QueryState* state, size_t baseindex, Callback callback) const -{ - size_t i = 0; - __m128i compare = {0}; - unsigned int resmask; - - // Search loop. Unrolling it has been tested to NOT increase performance (apparently mem bound) - for (i = 0; i < items; ++i) { - // equal / not-equal - if (std::is_same::value || std::is_same::value) { - if (width == 8) - compare = _mm_cmpeq_epi8(action_data[i], *data); - if (width == 16) - compare = _mm_cmpeq_epi16(action_data[i], *data); - if (width == 32) - compare = _mm_cmpeq_epi32(action_data[i], *data); - if (width == 64) { - compare = _mm_cmpeq_epi64(action_data[i], *data); // SSE 4.2 only - } - } - - // greater - else if (std::is_same::value) { - if (width == 8) - compare = _mm_cmpgt_epi8(action_data[i], *data); - if (width == 16) - compare = _mm_cmpgt_epi16(action_data[i], *data); - if (width == 32) - compare = _mm_cmpgt_epi32(action_data[i], *data); - if (width == 64) - compare = _mm_cmpgt_epi64(action_data[i], *data); - } - // less - else if (std::is_same::value) { - if (width == 8) - compare = _mm_cmplt_epi8(action_data[i], *data); - else if (width == 16) - compare = _mm_cmplt_epi16(action_data[i], *data); - else if (width == 32) - compare = _mm_cmplt_epi32(action_data[i], *data); - else - REALM_ASSERT(false); - } - - resmask = _mm_movemask_epi8(compare); - - if (std::is_same::value) - resmask = ~resmask & 0x0000ffff; - -// if (resmask != 0) -// printf("resmask=%d\n", resmask); - - size_t s = i * sizeof (__m128i) * 8 / no0(width); - - while (resmask != 0) { - - uint64_t upper = lower_bits() << (no0(width / 8) - 1); - uint64_t pattern = resmask & upper; // fixme, bits at wrong offsets. Only OK because we only use them in 'count' aggregate - if (find_action_pattern(s + baseindex, pattern, state, callback)) - break; - - size_t idx = first_set_bit(resmask) * 8 / no0(width); - s += idx; - if (!find_action( s + baseindex, get_universal(reinterpret_cast(action_data), s), state, callback)) - return false; - resmask >>= (idx + 1) * no0(width) / 8; - ++s; - } - } - - return true; -} -#endif //REALM_COMPILER_SSE - -template -bool Array::compare_leafs(const Array* foreign, size_t start, size_t end, size_t baseindex, QueryState* state, - Callback callback) const -{ - cond c; - REALM_ASSERT_3(start, <=, end); - if (start == end) - return true; - - - int64_t v; - - // We can compare first element without checking for out-of-range - v = get(start); - if (c(v, foreign->get(start))) { - if (!find_action(start + baseindex, v, state, callback)) - return false; - } - - start++; - - if (start + 3 < end) { - v = get(start); - if (c(v, foreign->get(start))) - if (!find_action(start + baseindex, v, state, callback)) - return false; - - v = get(start + 1); - if (c(v, foreign->get(start + 1))) - if (!find_action(start + 1 + baseindex, v, state, callback)) - return false; - - v = get(start + 2); - if (c(v, foreign->get(start + 2))) - if (!find_action(start + 2 + baseindex, v, state, callback)) - return false; - - start += 3; - } - else if (start == end) { - return true; - } - - bool r; - REALM_TEMPEX4(r = compare_leafs, cond, action, m_width, Callback, (foreign, start, end, baseindex, state, callback)) - return r; -} - - -template -bool Array::compare_leafs(const Array* foreign, size_t start, size_t end, size_t baseindex, QueryState* state, Callback callback) const -{ - size_t fw = foreign->m_width; - bool r; - REALM_TEMPEX5(r = compare_leafs_4, cond, action, width, Callback, fw, (foreign, start, end, baseindex, state, callback)) - return r; -} - - -template -bool Array::compare_leafs_4(const Array* foreign, size_t start, size_t end, size_t baseindex, QueryState* state, - Callback callback) const -{ - cond c; - char* foreign_m_data = foreign->m_data; - - if (width == 0 && foreign_width == 0) { - if (c(0, 0)) { - while (start < end) { - if (!find_action(start + baseindex, 0, state, callback)) - return false; - start++; - } - } - else { - return true; - } - } - - -#if defined(REALM_COMPILER_SSE) - if (sseavx<42>() && width == foreign_width && (width == 8 || width == 16 || width == 32)) { - // We can only use SSE if both bitwidths are equal and above 8 bits and all values are signed - while (start < end && (((reinterpret_cast(m_data) & 0xf) * 8 + start * width) % (128) != 0)) { - int64_t v = get_universal(m_data, start); - int64_t fv = get_universal(foreign_m_data, start); - if (c(v, fv)) { - if (!find_action(start + baseindex, v, state, callback)) - return false; - } - start++; - } - if (start == end) - return true; - - - size_t sse_items = (end - start) * width / 128; - size_t sse_end = start + sse_items * 128 / no0(width); - - while (start < sse_end) { - __m128i* a = reinterpret_cast<__m128i*>(m_data + start * width / 8); - __m128i* b = reinterpret_cast<__m128i*>(foreign_m_data + start * width / 8); - - bool continue_search = find_sse_intern(a, b, 1, state, baseindex + start, callback); - - if (!continue_search) - return false; - - start += 128 / no0(width); - } - } -#endif - - -#if 0 // this method turned out to be 33% slower than a naive loop. Find out why - - // index from which both arrays are 64-bit aligned - size_t a = round_up(start, 8 * sizeof (int64_t) / (width < foreign_width ? width : foreign_width)); - - while (start < end && start < a) { - int64_t v = get_universal(m_data, start); - int64_t fv = get_universal(foreign_m_data, start); - - if (v == fv) - r++; - - start++; - } - - if (start >= end) - return r; - - uint64_t chunk; - uint64_t fchunk; - - size_t unroll_outer = (foreign_width > width ? foreign_width : width) / (foreign_width < width ? foreign_width : width); - size_t unroll_inner = 64 / (foreign_width > width ? foreign_width : width); - - while (start + unroll_outer * unroll_inner < end) { - - // fetch new most narrow chunk - if (foreign_width <= width) - fchunk = *reinterpret_cast(foreign_m_data + start * foreign_width / 8); - else - chunk = *reinterpret_cast(m_data + start * width / 8); - - for (size_t uo = 0; uo < unroll_outer; uo++) { - - // fetch new widest chunk - if (foreign_width > width) - fchunk = *reinterpret_cast(foreign_m_data + start * foreign_width / 8); - else - chunk = *reinterpret_cast(m_data + start * width / 8); - - size_t newstart = start + unroll_inner; - while (start < newstart) { - - // Isolate first value from chunk - int64_t v = (chunk << (64 - width)) >> (64 - width); - int64_t fv = (fchunk << (64 - foreign_width)) >> (64 - foreign_width); - chunk >>= width; - fchunk >>= foreign_width; - - // Sign extend if required - v = (width <= 4) ? v : (width == 8) ? int8_t(v) : (width == 16) ? int16_t(v) : (width == 32) ? int32_t(v) : int64_t(v); - fv = (foreign_width <= 4) ? fv : (foreign_width == 8) ? int8_t(fv) : (foreign_width == 16) ? int16_t(fv) : (foreign_width == 32) ? int32_t(fv) : int64_t(fv); - - if (v == fv) - r++; - - start++; - - } - - - } - } -#endif - - - -/* - // Unrolling helped less than 2% (non-frequent matches). Todo, investigate further - while (start + 1 < end) { - int64_t v = get_universal(m_data, start); - int64_t v2 = get_universal(m_data, start + 1); - - int64_t fv = get_universal(foreign_m_data, start); - int64_t fv2 = get_universal(foreign_m_data, start + 1); - - if (c(v, fv)) { - if (!find_action(start + baseindex, v, state, callback)) - return false; - } - - if (c(v2, fv2)) { - if (!find_action(start + 1 + baseindex, v2, state, callback)) - return false; - } - - start += 2; - } - */ - - while (start < end) { - int64_t v = get_universal(m_data, start); - int64_t fv = get_universal(foreign_m_data, start); - - if (c(v, fv)) { - if (!find_action(start + baseindex, v, state, callback)) - return false; - } - - start++; - } - - return true; -} - - -template -bool Array::compare(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state, - Callback callback) const -{ - bool ret = false; - - if (std::is_same::value) - ret = compare_equality(value, start, end, baseindex, state, callback); - else if (std::is_same::value) - ret = compare_equality(value, start, end, baseindex, state, callback); - else if (std::is_same::value) - ret = compare_relation(value, start, end, baseindex, state, callback); - else if (std::is_same::value) - ret = compare_relation(value, start, end, baseindex, state, callback); - else - REALM_ASSERT_DEBUG(false); - - return ret; -} - -template -bool Array::compare_relation(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state, - Callback callback) const -{ - REALM_ASSERT(start <= m_size && (end <= m_size || end == size_t(-1)) && start <= end); - uint64_t mask = (bitwidth == 64 ? ~0ULL : ((1ULL << (bitwidth == 64 ? 0 : bitwidth)) - 1ULL)); // Warning free way of computing (1ULL << width) - 1 - - size_t ee = round_up(start, 64 / no0(bitwidth)); - ee = ee > end ? end : ee; - for (; start < ee; start++) { - if (gt ? (get(start) > value) : (get(start) < value)) { - if (!find_action(start + baseindex, get(start), state, callback)) - return false; - } - } - - if (start >= end) - return true; // none found, continue (return true) regardless what find_action() would have returned on match - - const int64_t* p = reinterpret_cast(m_data + (start * bitwidth / 8)); - const int64_t* const e = reinterpret_cast(m_data + (end * bitwidth / 8)) - 1; - - // Matches are rare enough to setup fast linear search for remaining items. We use - // bit hacks from http://graphics.stanford.edu/~seander/bithacks.html#HasLessInWord - - if (bitwidth == 1 || bitwidth == 2 || bitwidth == 4 || bitwidth == 8 || bitwidth == 16) { - uint64_t magic = find_gtlt_magic(value); - - // Bit hacks only work if searched item has its most significant bit clear for 'greater than' or - // 'item <= 1 << bitwidth' for 'less than' - if (value != int64_t((magic & mask)) && value >= 0 && bitwidth >= 2 && value <= static_cast((mask >> 1) - (gt ? 1 : 0))) { - // 15 ms - while (p < e) { - uint64_t upper = lower_bits() << (no0(bitwidth) - 1); - - const int64_t v = *p; - size_t idx; - - // Bit hacks only works if all items in chunk have their most significant bit clear. Test this: - upper = upper & v; - - if (!upper) { - idx = find_gtlt_fast(v, magic, state, (p - reinterpret_cast(m_data)) * 8 * 8 / no0(bitwidth) + baseindex, callback); - } - else - idx = find_gtlt(value, v, state, (p - reinterpret_cast(m_data)) * 8 * 8 / no0(bitwidth) + baseindex, callback); - - if (!idx) - return false; - ++p; - } - } - else { - // 24 ms - while (p < e) { - int64_t v = *p; - if (!find_gtlt(value, v, state, (p - reinterpret_cast(m_data)) * 8 * 8 / no0(bitwidth) + baseindex, callback)) - return false; - ++p; - } - } - start = (p - reinterpret_cast(m_data)) * 8 * 8 / no0(bitwidth); - } - - // matchcount logic in SIMD no longer pays off for 32/64 bit ints because we have just 4/2 elements - - // Test unaligned end and/or values of width > 16 manually - while (start < end) { - if (gt ? get(start) > value : get(start) < value) { - if (!find_action( start + baseindex, get(start), state, callback)) - return false; - } - ++start; - } - return true; - -} - -template -size_t Array::find_first(int64_t value, size_t start, size_t end) const -{ - REALM_ASSERT(start <= m_size && (end <= m_size || end == size_t(-1)) && start <= end); - QueryState state; - state.init(act_ReturnFirst, nullptr, 1); // todo, would be nice to avoid this in order to speed up find_first loops - Finder finder = m_vtable->finder[cond::condition]; - (this->*finder)(value, start, end, 0, &state); - - return static_cast(state.m_state); -} - -//************************************************************************************* -// Finding code ends * -//************************************************************************************* - - -} // namespace realm - -#endif // REALM_ARRAY_HPP diff --git a/Pods/Realm/include/core/realm/array_basic.hpp b/Pods/Realm/include/core/realm/array_basic.hpp deleted file mode 100644 index 178fcff8..00000000 --- a/Pods/Realm/include/core/realm/array_basic.hpp +++ /dev/null @@ -1,119 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ARRAY_BASIC_HPP -#define REALM_ARRAY_BASIC_HPP - -#include - -namespace realm { - -/// A BasicArray can currently only be used for simple unstructured -/// types like float, double. -template -class BasicArray: public Array { -public: - explicit BasicArray(Allocator&) noexcept; - explicit BasicArray(no_prealloc_tag) noexcept; - ~BasicArray() noexcept override {} - - T get(size_t ndx) const noexcept; - bool is_null(size_t ndx) const noexcept; - void add(T value); - void set(size_t ndx, T value); - void set_null(size_t ndx); - void insert(size_t ndx, T value); - void erase(size_t ndx); - void truncate(size_t size); - void clear(); - - size_t find_first(T value, size_t begin = 0 , size_t end = npos) const; - void find_all(IntegerColumn* result, T value, size_t add_offset = 0, - size_t begin = 0, size_t end = npos) const; - - size_t count(T value, size_t begin = 0, size_t end = npos) const; - bool maximum(T& result, size_t begin = 0, size_t end = npos) const; - bool minimum(T& result, size_t begin = 0, size_t end = npos) const; - - /// Compare two arrays for equality. - bool compare(const BasicArray&) const; - - /// Get the specified element without the cost of constructing an - /// array instance. If an array instance is already available, or - /// you need to get multiple values, then this method will be - /// slower. - static T get(const char* header, size_t ndx) noexcept; - - ref_type bptree_leaf_insert(size_t ndx, T, TreeInsertBase& state); - - size_t lower_bound(T value) const noexcept; - size_t upper_bound(T value) const noexcept; - - /// Construct a basic array of the specified size and return just - /// the reference to the underlying memory. All elements will be - /// initialized to `T()`. - static MemRef create_array(size_t size, Allocator&); - - static MemRef create_array(Array::Type leaf_type, bool context_flag, size_t size, T value, - Allocator&); - - /// Create a new empty array and attach this accessor to it. This - /// does not modify the parent reference information of this - /// accessor. - /// - /// Note that the caller assumes ownership of the allocated - /// underlying node. It is not owned by the accessor. - void create(Array::Type = type_Normal, bool context_flag = false); - - /// Construct a copy of the specified slice of this basic array - /// using the specified target allocator. - MemRef slice(size_t offset, size_t size, Allocator& target_alloc) const; - MemRef slice_and_clone_children(size_t offset, size_t size, Allocator& target_alloc) const; - -#ifdef REALM_DEBUG - void to_dot(std::ostream&, StringData title = StringData()) const; -#endif - -private: - size_t find(T target, size_t begin, size_t end) const; - - size_t calc_byte_len(size_t count, size_t width) const override; - virtual size_t calc_item_count(size_t bytes, size_t width) const noexcept override; - virtual WidthType GetWidthType() const override { return wtype_Multiply; } - - template - bool minmax(T& result, size_t begin, size_t end) const; - - /// Calculate the total number of bytes needed for a basic array - /// with the specified number of elements. This includes the size - /// of the header. The result will be upwards aligned to the - /// closest 8-byte boundary. - static size_t calc_aligned_byte_size(size_t size); -}; - - -// Class typedefs for BasicArray's: ArrayFloat and ArrayDouble -typedef BasicArray ArrayFloat; -typedef BasicArray ArrayDouble; - -} // namespace realm - -#include - -#endif // REALM_ARRAY_BASIC_HPP diff --git a/Pods/Realm/include/core/realm/array_basic_tpl.hpp b/Pods/Realm/include/core/realm/array_basic_tpl.hpp deleted file mode 100644 index 131454ff..00000000 --- a/Pods/Realm/include/core/realm/array_basic_tpl.hpp +++ /dev/null @@ -1,467 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ARRAY_BASIC_TPL_HPP -#define REALM_ARRAY_BASIC_TPL_HPP - -#include -#include -#include -#include - -#include - -namespace realm { - -template -inline BasicArray::BasicArray(Allocator& alloc) noexcept: - Array(alloc) -{ -} - -template -inline BasicArray::BasicArray(no_prealloc_tag) noexcept: - Array(no_prealloc_tag()) -{ -} - - -template -inline MemRef BasicArray::create_array(size_t size, Allocator& alloc) -{ - size_t byte_size_0 = calc_aligned_byte_size(size); // Throws - // Adding zero to Array::initial_capacity to avoid taking the - // address of that member - size_t byte_size = std::max(byte_size_0, Array::initial_capacity+0); // Throws - - MemRef mem = alloc.alloc(byte_size); // Throws - - bool is_inner_bptree_node = false; - bool has_refs = false; - bool context_flag = false; - int width = sizeof (T); - init_header(mem.m_addr, is_inner_bptree_node, has_refs, context_flag, wtype_Multiply, - width, size, byte_size); - - return mem; -} - - -template -inline MemRef BasicArray::create_array(Array::Type type, bool context_flag, size_t size, - T value, Allocator& alloc) -{ - REALM_ASSERT(type == Array::type_Normal); - REALM_ASSERT(!context_flag); - MemRef mem = create_array(size, alloc); - if (size) { - BasicArray tmp(alloc); - tmp.init_from_mem(mem); - for (size_t i = 0; i < size; ++i) { - tmp.set(i, value); - } - } - return mem; -} - - -template -inline void BasicArray::create(Array::Type type, bool context_flag) -{ - REALM_ASSERT(type == Array::type_Normal); - REALM_ASSERT(!context_flag); - size_t size = 0; - MemRef mem = create_array(size, get_alloc()); // Throws - init_from_mem(mem); -} - - -template -MemRef BasicArray::slice(size_t offset, size_t size, Allocator& target_alloc) const -{ - REALM_ASSERT(is_attached()); - - // FIXME: This can be optimized as a single contiguous copy - // operation. - BasicArray slice(target_alloc); - _impl::ShallowArrayDestroyGuard dg(&slice); - slice.create(); // Throws - size_t begin = offset; - size_t end = offset + size; - for (size_t i = begin; i != end; ++i) { - T value = get(i); - slice.add(value); // Throws - } - dg.release(); - return slice.get_mem(); -} - -template -MemRef BasicArray::slice_and_clone_children(size_t offset, size_t size, - Allocator& target_alloc) const -{ - // BasicArray never contains refs, so never has children. - return slice(offset, size, target_alloc); -} - - -template -inline void BasicArray::add(T value) -{ - insert(m_size, value); -} - - -template -inline T BasicArray::get(size_t ndx) const noexcept -{ - return *(reinterpret_cast(m_data) + ndx); -} - - -template -inline bool BasicArray::is_null(size_t ndx) const noexcept -{ - // FIXME: This assumes BasicArray will only ever be instantiated for float-like T. - auto x = get(ndx); - return null::is_null_float(x); -} - - -template -inline T BasicArray::get(const char* header, size_t ndx) noexcept -{ - const char* data = get_data_from_header(header); - // FIXME: This casting assumes that T can be aliged on an 8-bype - // boundary (since data is aligned on an 8-byte boundary.) This - // restricts portability. The same problem recurs several times in - // the remainder of this file. - return *(reinterpret_cast(data) + ndx); -} - - -template -inline void BasicArray::set(size_t ndx, T value) -{ - REALM_ASSERT_3(ndx, <, m_size); - - // Check if we need to copy before modifying - copy_on_write(); // Throws - - // Set the value - T* data = reinterpret_cast(m_data) + ndx; - *data = value; -} - -template -inline void BasicArray::set_null(size_t ndx) -{ - // FIXME: This assumes BasicArray will only ever be instantiated for float-like T. - set(ndx, null::get_null_float()); -} - -template -void BasicArray::insert(size_t ndx, T value) -{ - REALM_ASSERT_3(ndx, <=, m_size); - - // Check if we need to copy before modifying - copy_on_write(); // Throws - - // Make room for the new value - alloc(m_size+1, m_width); // Throws - - // Move values below insertion - if (ndx != m_size) { - char* src_begin = m_data + ndx*m_width; - char* src_end = m_data + m_size*m_width; - char* dst_end = src_end + m_width; - std::copy_backward(src_begin, src_end, dst_end); - } - - // Set the value - T* data = reinterpret_cast(m_data) + ndx; - *data = value; - - ++m_size; -} - -template -void BasicArray::erase(size_t ndx) -{ - REALM_ASSERT_3(ndx, <, m_size); - - // Check if we need to copy before modifying - copy_on_write(); // Throws - - // move data under deletion up - if (ndx < m_size-1) { - char* dst_begin = m_data + ndx*m_width; - const char* src_begin = dst_begin + m_width; - const char* src_end = m_data + m_size*m_width; - std::copy(src_begin, src_end, dst_begin); - } - - // Update size (also in header) - --m_size; - set_header_size(m_size); -} - -template -void BasicArray::truncate(size_t size) -{ - REALM_ASSERT(is_attached()); - REALM_ASSERT_3(size, <=, m_size); - - copy_on_write(); // Throws - - // Update size in accessor and in header. This leaves the capacity - // unchanged. - m_size = size; - set_header_size(size); -} - -template -inline void BasicArray::clear() -{ - truncate(0); // Throws -} - -template -bool BasicArray::compare(const BasicArray& a) const -{ - size_t n = size(); - if (a.size() != n) - return false; - const T* data_1 = reinterpret_cast(m_data); - const T* data_2 = reinterpret_cast(a.m_data); - return std::equal(data_1, data_1+n, data_2); -} - - -template -size_t BasicArray::calc_byte_len(size_t size, size_t) const -{ - // FIXME: Consider calling `calc_aligned_byte_size(size)` - // instead. Note however, that calc_byte_len() is supposed to return - // the unaligned byte size. It is probably the case that no harm - // is done by returning the aligned version, and most callers of - // calc_byte_len() will actually benefit if calc_byte_len() was - // changed to always return the aligned byte size. - return header_size + size * sizeof (T); // FIXME: Prone to overflow -} - -template -size_t BasicArray::calc_item_count(size_t bytes, size_t) const noexcept -{ - // FIXME: ??? what about width = 0? return -1? - - size_t bytes_without_header = bytes - header_size; - return bytes_without_header / sizeof (T); -} - -template -size_t BasicArray::find(T value, size_t begin, size_t end) const -{ - if (end == npos) - end = m_size; - REALM_ASSERT(begin <= m_size && end <= m_size && begin <= end); - const T* data = reinterpret_cast(m_data); - const T* i = std::find(data + begin, data + end, value); - return i == data + end ? not_found : size_t(i - data); -} - -template -inline size_t BasicArray::find_first(T value, size_t begin, size_t end) const -{ - return this->find(value, begin, end); -} - -template -void BasicArray::find_all(IntegerColumn* result, T value, size_t add_offset, - size_t begin, size_t end) const -{ - size_t first = begin - 1; - for (;;) { - first = this->find(value, first + 1, end); - if (first == not_found) - break; - - Array::add_to_column(result, first + add_offset); - } -} - -template -size_t BasicArray::count(T value, size_t begin, size_t end) const -{ - if (end == npos) - end = m_size; - REALM_ASSERT(begin <= m_size && end <= m_size && begin <= end); - const T* data = reinterpret_cast(m_data); - return std::count(data + begin, data + end, value); -} - -#if 0 -// currently unused -template -double BasicArray::sum(size_t begin, size_t end) const -{ - if (end == npos) - end = m_size; - REALM_ASSERT(begin <= m_size && end <= m_size && begin <= end); - const T* data = reinterpret_cast(m_data); - return std::accumulate(data + begin, data + end, double(0)); -} -#endif - -template -template -bool BasicArray::minmax(T& result, size_t begin, size_t end) const -{ - if (end == npos) - end = m_size; - if (m_size == 0) - return false; - REALM_ASSERT(begin < m_size && end <= m_size && begin < end); - - T m = get(begin); - ++begin; - for (; begin < end; ++begin) { - T val = get(begin); - if (find_max ? val > m : val < m) - m = val; - } - result = m; - return true; -} - -template -bool BasicArray::maximum(T& result, size_t begin, size_t end) const -{ - return minmax(result, begin, end); -} - -template -bool BasicArray::minimum(T& result, size_t begin, size_t end) const -{ - return minmax(result, begin, end); -} - - -template -ref_type BasicArray::bptree_leaf_insert(size_t ndx, T value, TreeInsertBase& state) -{ - size_t leaf_size = size(); - REALM_ASSERT_3(leaf_size, <=, REALM_MAX_BPNODE_SIZE); - if (leaf_size < ndx) - ndx = leaf_size; - if (REALM_LIKELY(leaf_size < REALM_MAX_BPNODE_SIZE)) { - insert(ndx, value); - return 0; // Leaf was not split - } - - // Split leaf node - BasicArray new_leaf(get_alloc()); - new_leaf.create(); // Throws - if (ndx == leaf_size) { - new_leaf.add(value); - state.m_split_offset = ndx; - } - else { - // FIXME: Could be optimized by first resizing the target - // array, then copy elements with std::copy(). - for (size_t i = ndx; i != leaf_size; ++i) - new_leaf.add(get(i)); - truncate(ndx); - add(value); - state.m_split_offset = ndx + 1; - } - state.m_split_size = leaf_size + 1; - return new_leaf.get_ref(); -} - -template -inline size_t BasicArray::lower_bound(T value) const noexcept -{ - const T* begin = reinterpret_cast(m_data); - const T* end = begin + size(); - return std::lower_bound(begin, end, value) - begin; -} - -template -inline size_t BasicArray::upper_bound(T value) const noexcept -{ - const T* begin = reinterpret_cast(m_data); - const T* end = begin + size(); - return std::upper_bound(begin, end, value) - begin; -} - -template -inline size_t BasicArray::calc_aligned_byte_size(size_t size) -{ - size_t max = std::numeric_limits::max(); - size_t max_2 = max & ~size_t(7); // Allow for upwards 8-byte alignment - if (size > (max_2 - header_size) / sizeof (T)) - throw std::runtime_error("Byte size overflow"); - size_t byte_size = header_size + size * sizeof (T); - REALM_ASSERT_3(byte_size, >, 0); - size_t aligned_byte_size = ((byte_size-1) | 7) + 1; // 8-byte alignment - return aligned_byte_size; -} - - -#ifdef REALM_DEBUG - -template -void BasicArray::to_dot(std::ostream& out, StringData title) const -{ - ref_type ref = get_ref(); - if (title.size() != 0) { - out << "subgraph cluster_" << ref << " {\n"; - out << " label = \"" << title << "\";\n"; - out << " color = white;\n"; - } - - out << "n" << std::hex << ref << std::dec << "[shape=none,label=<"; - out << "
\n"; - - // Header - out << "\n"; - - // Values - size_t n = m_size; - for (size_t i = 0; i != n; ++i) - out << "\n"; - - out << "
"; - out << "0x" << std::hex << ref << std::dec << "
"; - out << "
" << get(i) << "
>];\n"; - - if (title.size() != 0) - out << "}\n"; - - to_dot_parent_edge(out); -} - -#endif // REALM_DEBUG - - -} // namespace realm - -#endif // REALM_ARRAY_BASIC_TPL_HPP diff --git a/Pods/Realm/include/core/realm/array_binary.hpp b/Pods/Realm/include/core/realm/array_binary.hpp deleted file mode 100644 index 440a3c98..00000000 --- a/Pods/Realm/include/core/realm/array_binary.hpp +++ /dev/null @@ -1,256 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ARRAY_BINARY_HPP -#define REALM_ARRAY_BINARY_HPP - -#include -#include -#include -#include - -namespace realm { - -/* -STORAGE FORMAT ---------------------------------------------------------------------------------------- -ArrayBinary stores binary elements using two ArrayInteger and one ArrayBlob. The ArrayBlob can only store one -single concecutive array of bytes (contrary to its 'Array' name that misleadingly indicates it could store multiple -elements). - -Assume we have the strings "a", "", "abc", null, "ab". Then the three arrays will contain: - -ArrayInteger m_offsets 1, 1, 5, 5, 6 -ArrayBlob m_blob aabcab -ArrayInteger m_nulls 0, 0, 0, 1, 0 // 1 indicates null, 0 indicates non-null - -So for each element the ArrayInteger, the ArrayInteger points into the ArrayBlob at the position of the first -byte of the next element. - -m_nulls is always present (except for old database files; see below), so any ArrayBinary is always nullable! -The nullable property (such as throwing exception upon set(null) on non-nullable column, etc) is handled on -column level only. - -DATABASE FILE VERSION CHANGES ---------------------------------------------------------------------------------------- -Old database files do not have any m_nulls array. To be backwardscompatible, many methods will have tests like -`if(Array::size() == 3)` and have a backwards compatible code paths for these (e.g. avoid writing to m_nulls -in set(), etc). This way no file format upgrade is needed to support nulls for BinaryData. -*/ - -class ArrayBinary: public Array { -public: - explicit ArrayBinary(Allocator&) noexcept; - ~ArrayBinary() noexcept override {} - - /// Create a new empty binary array and attach this accessor to - /// it. This does not modify the parent reference information of - /// this accessor. - /// - /// Note that the caller assumes ownership of the allocated - /// underlying node. It is not owned by the accessor. - void create(); - - // Old database files will not have the m_nulls array, so we need code paths for - // backwards compatibility for these cases. - bool legacy_array_type() const noexcept; - - //@{ - /// Overriding functions of Array - void init_from_ref(ref_type) noexcept; - void init_from_mem(MemRef) noexcept; - void init_from_parent() noexcept; - //@} - - bool is_empty() const noexcept; - size_t size() const noexcept; - - BinaryData get(size_t ndx) const noexcept; - - void add(BinaryData value, bool add_zero_term = false); - void set(size_t ndx, BinaryData value, bool add_zero_term = false); - void insert(size_t ndx, BinaryData value, bool add_zero_term = false); - void erase(size_t ndx); - void truncate(size_t size); - void clear(); - void destroy(); - - /// Get the specified element without the cost of constructing an - /// array instance. If an array instance is already available, or - /// you need to get multiple values, then this method will be - /// slower. - static BinaryData get(const char* header, size_t ndx, Allocator&) noexcept; - - ref_type bptree_leaf_insert(size_t ndx, BinaryData, bool add_zero_term, - TreeInsertBase& state); - - static size_t get_size_from_header(const char*, Allocator&) noexcept; - - /// Construct a binary array of the specified size and return just - /// the reference to the underlying memory. All elements will be - /// initialized to the binary value `defaults`, which can be either - /// null or zero-length non-null (value with size > 0 is not allowed as - /// initialization value). - static MemRef create_array(size_t size, Allocator&, BinaryData defaults); - - /// Construct a copy of the specified slice of this binary array - /// using the specified target allocator. - MemRef slice(size_t offset, size_t size, Allocator& target_alloc) const; - -#ifdef REALM_DEBUG - void to_dot(std::ostream&, bool is_strings, StringData title = StringData()) const; -#endif - bool update_from_parent(size_t old_baseline) noexcept; - -private: - ArrayInteger m_offsets; - ArrayBlob m_blob; - ArrayInteger m_nulls; -}; - - - - - -// Implementation: - -inline ArrayBinary::ArrayBinary(Allocator& alloc) noexcept: - Array(alloc), m_offsets(alloc), m_blob(alloc), - m_nulls(alloc) -{ - m_offsets.set_parent(this, 0); - m_blob.set_parent(this, 1); - m_nulls.set_parent(this, 2); -} - -inline void ArrayBinary::create() -{ - size_t size = 0; - BinaryData defaults = BinaryData(0, 0); // This init value is ignored because size = 0 - MemRef mem = create_array(size, get_alloc(), defaults); // Throws - init_from_mem(mem); -} - -inline void ArrayBinary::init_from_ref(ref_type ref) noexcept -{ - REALM_ASSERT(ref); - char* header = get_alloc().translate(ref); - init_from_mem(MemRef(header, ref)); -} - -inline void ArrayBinary::init_from_parent() noexcept -{ - ref_type ref = get_ref_from_parent(); - init_from_ref(ref); -} - -inline bool ArrayBinary::is_empty() const noexcept -{ - return m_offsets.is_empty(); -} - -// Old database files will not have the m_nulls array, so we need code paths for -// backwards compatibility for these cases. We can test if m_nulls exists by looking -// at number of references in this ArrayBinary. -inline bool ArrayBinary::legacy_array_type() const noexcept -{ - if (Array::size() == 3) - return false; // New database file - else if (Array::size() == 2) - return true; // Old database file - else - REALM_ASSERT(false); // Should never happen - return false; -} - -inline size_t ArrayBinary::size() const noexcept -{ - return m_offsets.size(); -} - -inline BinaryData ArrayBinary::get(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_offsets.size()); - - if (!legacy_array_type() && m_nulls.get(ndx)) { - return BinaryData(); - } - else { - size_t begin = ndx ? to_size_t(m_offsets.get(ndx - 1)) : 0; - size_t end = to_size_t(m_offsets.get(ndx)); - - BinaryData bd = BinaryData(m_blob.get(begin), end - begin); - // Old database file (non-nullable column should never return null) - REALM_ASSERT(!bd.is_null()); - return bd; - } -} - -inline void ArrayBinary::truncate(size_t size) -{ - REALM_ASSERT_3(size, <, m_offsets.size()); - - size_t blob_size = size ? to_size_t(m_offsets.get(size-1)) : 0; - - m_offsets.truncate(size); - m_blob.truncate(blob_size); - if (!legacy_array_type()) - m_nulls.truncate(size); -} - -inline void ArrayBinary::clear() -{ - m_blob.clear(); - m_offsets.clear(); - if (!legacy_array_type()) - m_nulls.clear(); -} - -inline void ArrayBinary::destroy() -{ - m_blob.destroy(); - m_offsets.destroy(); - if (!legacy_array_type()) - m_nulls.destroy(); - Array::destroy(); -} - -inline size_t ArrayBinary::get_size_from_header(const char* header, - Allocator& alloc) noexcept -{ - ref_type offsets_ref = to_ref(Array::get(header, 0)); - const char* offsets_header = alloc.translate(offsets_ref); - return Array::get_size_from_header(offsets_header); -} - -inline bool ArrayBinary::update_from_parent(size_t old_baseline) noexcept -{ - bool res = Array::update_from_parent(old_baseline); - if (res) { - m_blob.update_from_parent(old_baseline); - m_offsets.update_from_parent(old_baseline); - if (!legacy_array_type()) - m_nulls.update_from_parent(old_baseline); - } - return res; -} - -} // namespace realm - -#endif // REALM_ARRAY_BINARY_HPP diff --git a/Pods/Realm/include/core/realm/array_blob.hpp b/Pods/Realm/include/core/realm/array_blob.hpp deleted file mode 100644 index fce63e05..00000000 --- a/Pods/Realm/include/core/realm/array_blob.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ARRAY_BLOB_HPP -#define REALM_ARRAY_BLOB_HPP - -#include - -namespace realm { - - -class ArrayBlob: public Array { -public: - explicit ArrayBlob(Allocator&) noexcept; - ~ArrayBlob() noexcept override {} - - const char* get(size_t index) const noexcept; - bool is_null(size_t index) const noexcept; - void add(const char* data, size_t size, bool add_zero_term = false); - void insert(size_t pos, const char* data, size_t size, bool add_zero_term = false); - void replace(size_t begin, size_t end, const char* data, size_t size, - bool add_zero_term = false); - void erase(size_t begin, size_t end); - - /// Get the specified element without the cost of constructing an - /// array instance. If an array instance is already available, or - /// you need to get multiple values, then this method will be - /// slower. - static const char* get(const char* header, size_t index) noexcept; - - /// Create a new empty blob (binary) array and attach this - /// accessor to it. This does not modify the parent reference - /// information of this accessor. - /// - /// Note that the caller assumes ownership of the allocated - /// underlying node. It is not owned by the accessor. - void create(); - - /// Construct a blob of the specified size and return just the - /// reference to the underlying memory. All bytes will be - /// initialized to zero. - static MemRef create_array(size_t size, Allocator&); - -#ifdef REALM_DEBUG - void verify() const; - void to_dot(std::ostream&, StringData title = StringData()) const; -#endif - -private: - size_t calc_byte_len(size_t count, size_t width) const override; - size_t calc_item_count(size_t bytes, - size_t width) const noexcept override; - WidthType GetWidthType() const override { return wtype_Ignore; } -}; - - - - -// Implementation: - -// Creates new array (but invalid, call init_from_ref() to init) -inline ArrayBlob::ArrayBlob(Allocator& alloc) noexcept: - Array(alloc) -{ -} - -inline bool ArrayBlob::is_null(size_t index) const noexcept -{ - return (get(index) == nullptr); -} - -inline const char* ArrayBlob::get(size_t index) const noexcept -{ - return m_data + index; -} - -inline void ArrayBlob::add(const char* data, size_t size, bool add_zero_term) -{ - replace(m_size, m_size, data, size, add_zero_term); -} - -inline void ArrayBlob::insert(size_t pos, const char* data, size_t size, - bool add_zero_term) -{ - replace(pos, pos, data, size, add_zero_term); -} - -inline void ArrayBlob::erase(size_t begin, size_t end) -{ - const char* data = nullptr; - size_t size = 0; - replace(begin, end, data, size); -} - -inline const char* ArrayBlob::get(const char* header, size_t pos) noexcept -{ - const char* data = get_data_from_header(header); - return data + pos; -} - -inline void ArrayBlob::create() -{ - size_t size = 0; - MemRef mem = create_array(size, get_alloc()); // Throws - init_from_mem(mem); -} - -inline MemRef ArrayBlob::create_array(size_t size, Allocator& alloc) -{ - bool context_flag = false; - int_fast64_t value = 0; - return Array::create(type_Normal, context_flag, wtype_Ignore, size, value, alloc); // Throws -} - -inline size_t ArrayBlob::calc_byte_len(size_t count, size_t) const -{ - return header_size + count; -} - -inline size_t ArrayBlob::calc_item_count(size_t bytes, size_t) const noexcept -{ - return bytes - header_size; -} - - -} // namespace realm - -#endif // REALM_ARRAY_BLOB_HPP diff --git a/Pods/Realm/include/core/realm/array_blobs_big.hpp b/Pods/Realm/include/core/realm/array_blobs_big.hpp deleted file mode 100644 index d3947e8a..00000000 --- a/Pods/Realm/include/core/realm/array_blobs_big.hpp +++ /dev/null @@ -1,220 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ARRAY_BIG_BLOBS_HPP -#define REALM_ARRAY_BIG_BLOBS_HPP - -#include - -namespace realm { - - -class ArrayBigBlobs: public Array { -public: - typedef BinaryData value_type; - - explicit ArrayBigBlobs(Allocator&, bool nullable) noexcept; - - BinaryData get(size_t ndx) const noexcept; - void set(size_t ndx, BinaryData value, bool add_zero_term = false); - void add(BinaryData value, bool add_zero_term = false); - void insert(size_t ndx, BinaryData value, bool add_zero_term = false); - void erase(size_t ndx); - void truncate(size_t size); - void clear(); - void destroy(); - - size_t count(BinaryData value, bool is_string = false, size_t begin = 0, - size_t end = npos) const noexcept; - size_t find_first(BinaryData value, bool is_string = false, size_t begin = 0, - size_t end = npos) const noexcept; - void find_all(IntegerColumn& result, BinaryData value, bool is_string = false, - size_t add_offset = 0, - size_t begin = 0, size_t end = npos); - - /// Get the specified element without the cost of constructing an - /// array instance. If an array instance is already available, or - /// you need to get multiple values, then this method will be - /// slower. - static BinaryData get(const char* header, size_t ndx, Allocator&) noexcept; - - ref_type bptree_leaf_insert(size_t ndx, BinaryData, bool add_zero_term, - TreeInsertBase& state); - - //@{ - /// Those that return a string, discard the terminating zero from - /// the stored value. Those that accept a string argument, add a - /// terminating zero before storing the value. - StringData get_string(size_t ndx) const noexcept; - void add_string(StringData value); - void set_string(size_t ndx, StringData value); - void insert_string(size_t ndx, StringData value); - static StringData get_string(const char* header, size_t ndx, Allocator&, bool nullable) noexcept; - ref_type bptree_leaf_insert_string(size_t ndx, StringData, TreeInsertBase& state); - //@} - - /// Create a new empty big blobs array and attach this accessor to - /// it. This does not modify the parent reference information of - /// this accessor. - /// - /// Note that the caller assumes ownership of the allocated - /// underlying node. It is not owned by the accessor. - void create(); - - /// Construct a copy of the specified slice of this big blobs - /// array using the specified target allocator. - MemRef slice(size_t offset, size_t size, Allocator& target_alloc) const; - -#ifdef REALM_DEBUG - void verify() const; - void to_dot(std::ostream&, bool is_strings, StringData title = StringData()) const; -#endif - -private: - bool m_nullable; -}; - - - -// Implementation: - -inline ArrayBigBlobs::ArrayBigBlobs(Allocator& alloc, bool nullable) noexcept: - Array(alloc), m_nullable(nullable) -{ -} - -inline BinaryData ArrayBigBlobs::get(size_t ndx) const noexcept -{ - ref_type ref = get_as_ref(ndx); - if (ref == 0) - return BinaryData(); // realm::null(); - - const char* blob_header = get_alloc().translate(ref); - const char* value = ArrayBlob::get(blob_header, 0); - size_t size = get_size_from_header(blob_header); - return BinaryData(value, size); -} - -inline BinaryData ArrayBigBlobs::get(const char* header, size_t ndx, - Allocator& alloc) noexcept -{ - ref_type blob_ref = to_ref(Array::get(header, ndx)); - if (blob_ref == 0) - return BinaryData(); - - const char* blob_header = alloc.translate(blob_ref); - const char* blob_data = Array::get_data_from_header(blob_header); - size_t blob_size = Array::get_size_from_header(blob_header); - return BinaryData(blob_data, blob_size); -} - -inline void ArrayBigBlobs::erase(size_t ndx) -{ - ref_type blob_ref = Array::get_as_ref(ndx); - if (blob_ref != 0) { // nothing to destroy if null - Array::destroy(blob_ref, get_alloc()); // Shallow - } - Array::erase(ndx); -} - -inline void ArrayBigBlobs::truncate(size_t size) -{ - Array::truncate_and_destroy_children(size); -} - -inline void ArrayBigBlobs::clear() -{ - Array::clear_and_destroy_children(); -} - -inline void ArrayBigBlobs::destroy() -{ - Array::destroy_deep(); -} - -inline StringData ArrayBigBlobs::get_string(size_t ndx) const noexcept -{ - BinaryData bin = get(ndx); - if (bin.is_null()) - return realm::null(); - else - return StringData(bin.data(), bin.size()-1); // Do not include terminating zero -} - -inline void ArrayBigBlobs::set_string(size_t ndx, StringData value) -{ - REALM_ASSERT_DEBUG(!(!m_nullable && value.is_null())); - BinaryData bin(value.data(), value.size()); - bool add_zero_term = true; - set(ndx, bin, add_zero_term); -} - -inline void ArrayBigBlobs::add_string(StringData value) -{ - REALM_ASSERT_DEBUG(!(!m_nullable && value.is_null())); - BinaryData bin(value.data(), value.size()); - bool add_zero_term = true; - add(bin, add_zero_term); -} - -inline void ArrayBigBlobs::insert_string(size_t ndx, StringData value) -{ - REALM_ASSERT_DEBUG(!(!m_nullable && value.is_null())); - BinaryData bin(value.data(), value.size()); - bool add_zero_term = true; - insert(ndx, bin, add_zero_term); -} - -inline StringData ArrayBigBlobs::get_string(const char* header, size_t ndx, - Allocator& alloc, bool nullable) noexcept -{ - static_cast(nullable); - BinaryData bin = get(header, ndx, alloc); - REALM_ASSERT_DEBUG(!(!nullable && bin.is_null())); - if (bin.is_null()) - return realm::null(); - else - return StringData(bin.data(), bin.size()-1); // Do not include terminating zero -} - -inline ref_type ArrayBigBlobs::bptree_leaf_insert_string(size_t ndx, StringData value, - TreeInsertBase& state) -{ - REALM_ASSERT_DEBUG(!(!m_nullable && value.is_null())); - BinaryData bin(value.data(), value.size()); - bool add_zero_term = true; - return bptree_leaf_insert(ndx, bin, add_zero_term, state); -} - -inline void ArrayBigBlobs::create() -{ - bool context_flag = true; - Array::create(type_HasRefs, context_flag); // Throws -} - -inline MemRef ArrayBigBlobs::slice(size_t offset, size_t size, - Allocator& target_alloc) const -{ - return slice_and_clone_children(offset, size, target_alloc); -} - - -} // namespace realm - -#endif // REALM_ARRAY_BIG_BLOBS_HPP diff --git a/Pods/Realm/include/core/realm/array_integer.hpp b/Pods/Realm/include/core/realm/array_integer.hpp deleted file mode 100644 index cdae367c..00000000 --- a/Pods/Realm/include/core/realm/array_integer.hpp +++ /dev/null @@ -1,675 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * -***************************************************************************/ - -#ifndef REALM_ARRAY_INTEGER_HPP -#define REALM_ARRAY_INTEGER_HPP - -#include -#include -#include - -namespace realm { - -class ArrayInteger: public Array { -public: - typedef int64_t value_type; - - explicit ArrayInteger(no_prealloc_tag) noexcept; - explicit ArrayInteger(Allocator&) noexcept; - ~ArrayInteger() noexcept override {} - - void create(Type type = type_Normal, bool context_flag = false); - - void add(int64_t value); - void set(size_t ndx, int64_t value); - void set_uint(size_t ndx, uint64_t value) noexcept; - int64_t get(size_t ndx) const noexcept; - uint64_t get_uint(size_t ndx) const noexcept; - static int64_t get(const char* header, size_t ndx) noexcept; - bool compare(const ArrayInteger& a) const noexcept; - - /// Add \a diff to the element at the specified index. - void adjust(size_t ndx, int_fast64_t diff); - - /// Add \a diff to all the elements in the specified index range. - void adjust(size_t begin, size_t end, int_fast64_t diff); - - /// Add signed \a diff to all elements that are greater than, or equal to \a - /// limit. - void adjust_ge(int_fast64_t limit, int_fast64_t diff); - - int64_t operator[](size_t ndx) const noexcept { return get(ndx); } - int64_t front() const noexcept; - int64_t back() const noexcept; - - size_t lower_bound(int64_t value) const noexcept; - size_t upper_bound(int64_t value) const noexcept; - - std::vector to_vector() const; - -private: - template - bool minmax(size_t from, size_t to, uint64_t maxdiff, - int64_t* min, int64_t* max) const; -}; - -class ArrayIntNull: public Array { -public: - using value_type = util::Optional; - - explicit ArrayIntNull(no_prealloc_tag) noexcept; - explicit ArrayIntNull(Allocator&) noexcept; - ~ArrayIntNull() noexcept override; - - /// Construct an array of the specified type and size, and return just the - /// reference to the underlying memory. All elements will be initialized to - /// the specified value. - static MemRef create_array(Type, bool context_flag, size_t size, value_type value, - Allocator&); - void create(Type = type_Normal, bool context_flag = false); - - void init_from_ref(ref_type) noexcept; - void init_from_mem(MemRef) noexcept; - void init_from_parent() noexcept; - - size_t size() const noexcept; - bool is_empty() const noexcept; - - void insert(size_t ndx, value_type value); - void add(value_type value); - void set(size_t ndx, value_type value) noexcept; - value_type get(size_t ndx) const noexcept; - static value_type get(const char* header, size_t ndx) noexcept; - void get_chunk(size_t ndx, value_type res[8]) const noexcept; - void set_null(size_t ndx) noexcept; - bool is_null(size_t ndx) const noexcept; - int64_t null_value() const noexcept; - - value_type operator[](size_t ndx) const noexcept; - value_type front() const noexcept; - value_type back() const noexcept; - void erase(size_t ndx); - void erase(size_t begin, size_t end); - void truncate(size_t size); - void clear(); - void set_all_to_zero(); - - void move(size_t begin, size_t end, size_t dest_begin); - void move_backward(size_t begin, size_t end, size_t dest_end); - - size_t lower_bound(int64_t value) const noexcept; - size_t upper_bound(int64_t value) const noexcept; - - int64_t sum(size_t start = 0, size_t end = npos) const; - size_t count(int64_t value) const noexcept; - bool maximum(int64_t& result, size_t start = 0, size_t end = npos, - size_t* return_ndx = nullptr) const; - bool minimum(int64_t& result, size_t start = 0, size_t end = npos, - size_t* return_ndx = nullptr) const; - - bool find(int cond, Action action, value_type value, size_t start, size_t end, size_t baseindex, - QueryState* state) const; - - template - bool find(value_type value, size_t start, size_t end, size_t baseindex, - QueryState* state, Callback callback) const; - - // This is the one installed into the m_finder slots. - template - bool find(int64_t value, size_t start, size_t end, size_t baseindex, - QueryState* state) const; - - template - bool find(value_type value, size_t start, size_t end, size_t baseindex, - QueryState* state, Callback callback) const; - - // Optimized implementation for release mode - template - bool find_optimized(value_type value, size_t start, size_t end, size_t baseindex, - QueryState* state, Callback callback) const; - - // Called for each search result - template - bool find_action(size_t index, value_type value, - QueryState* state, Callback callback) const; - - template - bool find_action_pattern(size_t index, uint64_t pattern, - QueryState* state, Callback callback) const; - - // Wrappers for backwards compatibility and for simple use without - // setting up state initialization etc - template - size_t find_first(value_type value, size_t start = 0, - size_t end = npos) const; - - void find_all(IntegerColumn* result, value_type value, size_t col_offset = 0, - size_t begin = 0, size_t end = npos) const; - - - size_t find_first(value_type value, size_t begin = 0, size_t end = npos) const; - - - // Overwrite Array::bptree_leaf_insert to correctly split nodes. - ref_type bptree_leaf_insert(size_t ndx, value_type value, TreeInsertBase& state); - - MemRef slice(size_t offset, size_t size, Allocator& target_alloc) const; - - /// Construct a deep copy of the specified slice of this array using the - /// specified target allocator. Subarrays will be cloned. - MemRef slice_and_clone_children(size_t offset, size_t size, - Allocator& target_alloc) const; -protected: - void avoid_null_collision(int64_t value); -private: - template - bool minmax_helper(int64_t& result, size_t start = 0, size_t end = npos, - size_t* return_ndx = nullptr) const; - - int_fast64_t choose_random_null(int64_t incoming) const; - void replace_nulls_with(int64_t new_null); - bool can_use_as_null(int64_t value) const; -}; - - -// Implementation: - -inline ArrayInteger::ArrayInteger(Array::no_prealloc_tag) noexcept: - Array(Array::no_prealloc_tag()) -{ - m_is_inner_bptree_node = false; -} - -inline ArrayInteger::ArrayInteger(Allocator& alloc) noexcept: - Array(alloc) -{ - m_is_inner_bptree_node = false; -} - -inline void ArrayInteger::add(int64_t value) -{ - Array::add(value); -} - -inline int64_t ArrayInteger::get(size_t ndx) const noexcept -{ - return Array::get(ndx); -} - -inline int64_t ArrayInteger::get(const char* header, size_t ndx) noexcept -{ - return Array::get(header, ndx); -} - -inline void ArrayInteger::set(size_t ndx, int64_t value) -{ - Array::set(ndx, value); -} - -inline void ArrayInteger::set_uint(size_t ndx, uint_fast64_t value) noexcept -{ - // When a value of a signed type is converted to an unsigned type, the C++ - // standard guarantees that negative values are converted from the native - // representation to 2's complement, but the effect of conversions in the - // opposite direction is left unspecified by the - // standard. `realm::util::from_twos_compl()` is used here to perform the - // correct opposite unsigned-to-signed conversion, which reduces to a no-op - // when 2's complement is the native representation of negative values. - set(ndx, util::from_twos_compl(value)); -} - -inline bool ArrayInteger::compare(const ArrayInteger& a) const noexcept -{ - if (a.size() != size()) - return false; - - for (size_t i = 0; i < size(); ++i) { - if (get(i) != a.get(i)) - return false; - } - - return true; -} - -inline int64_t ArrayInteger::front() const noexcept -{ - return Array::front(); -} - -inline int64_t ArrayInteger::back() const noexcept -{ - return Array::back(); -} - -inline void ArrayInteger::adjust(size_t ndx, int_fast64_t diff) -{ - Array::adjust(ndx, diff); -} - -inline void ArrayInteger::adjust(size_t begin, size_t end, int_fast64_t diff) -{ - Array::adjust(begin, end, diff); -} - -inline void ArrayInteger::adjust_ge(int_fast64_t limit, int_fast64_t diff) -{ - Array::adjust_ge(limit, diff); -} - -inline size_t ArrayInteger::lower_bound(int64_t value) const noexcept -{ - return lower_bound_int(value); -} - -inline size_t ArrayInteger::upper_bound(int64_t value) const noexcept -{ - return upper_bound_int(value); -} - - -inline -ArrayIntNull::ArrayIntNull(no_prealloc_tag tag) noexcept: Array(tag) -{ -} - -inline -ArrayIntNull::ArrayIntNull(Allocator& alloc) noexcept: Array(alloc) -{ -} - -inline -ArrayIntNull::~ArrayIntNull() noexcept -{ -} - -inline -void ArrayIntNull::create(Type type, bool context_flag) -{ - MemRef r = create_array(type, context_flag, 0, util::none, m_alloc); - init_from_mem(r); -} - - - -inline -size_t ArrayIntNull::size() const noexcept -{ - return Array::size() - 1; -} - -inline -bool ArrayIntNull::is_empty() const noexcept -{ - return size() == 0; -} - -inline -void ArrayIntNull::insert(size_t ndx, value_type value) -{ - if (value) { - avoid_null_collision(*value); - Array::insert(ndx + 1, *value); - } - else { - Array::insert(ndx + 1, null_value()); - } -} - -inline -void ArrayIntNull::add(value_type value) -{ - if (value) { - avoid_null_collision(*value); - Array::add(*value); - } - else { - Array::add(null_value()); - } -} - -inline -void ArrayIntNull::set(size_t ndx, value_type value) noexcept -{ - if (value) { - avoid_null_collision(*value); - Array::set(ndx + 1, *value); - } - else { - Array::set(ndx + 1, null_value()); - } -} - -inline -void ArrayIntNull::set_null(size_t ndx) noexcept -{ - Array::set(ndx + 1, null_value()); -} - -inline -ArrayIntNull::value_type ArrayIntNull::get(size_t ndx) const noexcept -{ - int64_t value = Array::get(ndx + 1); - if (value == null_value()) { - return util::none; - } - return util::some(value); -} - -inline -ArrayIntNull::value_type ArrayIntNull::get(const char* header, size_t ndx) noexcept -{ - int64_t null_value = Array::get(header, 0); - int64_t value = Array::get(header, ndx + 1); - if (value == null_value) { - return util::none; - } - else { - return util::some(value); - } -} - -inline -bool ArrayIntNull::is_null(size_t ndx) const noexcept -{ - return !get(ndx); -} - -inline -int64_t ArrayIntNull::null_value() const noexcept -{ - return Array::get(0); -} - -inline -ArrayIntNull::value_type ArrayIntNull::operator[](size_t ndx) const noexcept -{ - return get(ndx); -} - -inline -ArrayIntNull::value_type ArrayIntNull::front() const noexcept -{ - return get(0); -} - -inline -ArrayIntNull::value_type ArrayIntNull::back() const noexcept -{ - return Array::back(); -} - -inline -void ArrayIntNull::erase(size_t ndx) -{ - Array::erase(ndx + 1); -} - -inline -void ArrayIntNull::erase(size_t begin, size_t end) -{ - Array::erase(begin + 1, end + 1); -} - -inline -void ArrayIntNull::truncate(size_t size) -{ - Array::truncate(size + 1); -} - -inline -void ArrayIntNull::clear() -{ - truncate(0); -} - -inline -void ArrayIntNull::set_all_to_zero() -{ - // FIXME: Array::set_all_to_zero does something else - for (size_t i = 0; i < size(); ++i) { - set(i, 0); - } -} - -inline -void ArrayIntNull::move(size_t begin, size_t end, size_t dest_begin) -{ - Array::move(begin + 1, end + 1, dest_begin + 1); -} - -inline -void ArrayIntNull::move_backward(size_t begin, size_t end, size_t dest_end) -{ - Array::move_backward(begin + 1, end + 1, dest_end + 1); -} - -inline -size_t ArrayIntNull::lower_bound(int64_t value) const noexcept -{ - // FIXME: Consider this behaviour with NULLs. - // Array::lower_bound_int assumes an already sorted array, but - // this array could be sorted with nulls first or last. - return Array::lower_bound_int(value); -} - -inline -size_t ArrayIntNull::upper_bound(int64_t value) const noexcept -{ - // FIXME: see lower_bound - return Array::upper_bound_int(value); -} - -inline -int64_t ArrayIntNull::sum(size_t start, size_t end) const -{ - // FIXME: Optimize! - int64_t sum = 0; - if (end == npos) - end = size(); - for (size_t i = start; i < end; ++i) { - value_type x = get(i); - if (x) { - sum += *x; - } - } - return sum; -} - -inline -size_t ArrayIntNull::count(int64_t value) const noexcept -{ - size_t count = Array::count(value); - if (value == null_value()) { - --count; - } - return count; -} - -// FIXME: Optimize! -template -inline -bool ArrayIntNull::minmax_helper(int64_t& result, size_t start, size_t end, size_t* return_ndx) const -{ - size_t best_index = 1; - - if (end == npos) { - end = m_size; - } - - ++start; - - REALM_ASSERT(start < m_size && end <= m_size && start < end); - - if (m_size == 1) { - // empty array - return false; - } - - if (m_width == 0) { - if (return_ndx) - *return_ndx = best_index - 1; - result = 0; - return true; - } - - int64_t m = Array::get(start); - - const int64_t null_val = null_value(); - for (; start < end; ++start) { - const int64_t v = Array::get(start); - if (find_max ? v > m : v < m) { - if (v == null_val) { - continue; - } - m = v; - best_index = start; - } - } - - result = m; - if (return_ndx) { - *return_ndx = best_index - 1; - } - return true; -} - -inline -bool ArrayIntNull::maximum(int64_t& result, size_t start, size_t end, size_t* return_ndx) const -{ - return minmax_helper(result, start, end, return_ndx); -} - -inline -bool ArrayIntNull::minimum(int64_t& result, size_t start, size_t end, size_t* return_ndx) const -{ - return minmax_helper(result, start, end, return_ndx); -} - -inline -bool ArrayIntNull::find(int cond, Action action, value_type value, size_t start, size_t end, size_t baseindex, QueryState* state) const -{ - if (value) { - return Array::find(cond, action, *value, start, end, baseindex, state, - true /*treat as nullable array*/, - false /*search parameter given in 'value' argument*/); - } - else { - return Array::find(cond, action, 0 /* unused dummy*/, start, end, baseindex, state, - true /*treat as nullable array*/, - true /*search for null, ignore value argument*/); - } -} - -template -bool ArrayIntNull::find(value_type value, size_t start, size_t end, size_t baseindex, QueryState* state, Callback callback) const -{ - if (value) { - return Array::find(*value, start, end, baseindex, state, std::forward(callback), - true /*treat as nullable array*/, - false /*search parameter given in 'value' argument*/); - } - else { - return Array::find(0 /*ignored*/, start, end, baseindex, state, std::forward(callback), - true /*treat as nullable array*/, - true /*search for null, ignore value argument*/); - } -} - - -template -bool ArrayIntNull::find(int64_t value, size_t start, size_t end, size_t baseindex, QueryState* state) const -{ - return Array::find(value, start, end, baseindex, state, - true /*treat as nullable array*/, - false /*search parameter given in 'value' argument*/); -} - - -template -bool ArrayIntNull::find(value_type value, size_t start, size_t end, size_t baseindex, QueryState* state, Callback callback) const -{ - if (value) { - return Array::find(*value, start, end, baseindex, state, std::forward(callback), - true /*treat as nullable array*/, - false /*search parameter given in 'value' argument*/); - } - else { - return Array::find(0 /*ignored*/, start, end, baseindex, state, std::forward(callback), - true /*treat as nullable array*/, - true /*search for null, ignore value argument*/); - } -} - - -template -bool ArrayIntNull::find_action(size_t index, value_type value, QueryState* state, Callback callback) const -{ - if (value) { - return Array::find_action(index, *value, state, callback, - true /*treat as nullable array*/, - false /*search parameter given in 'value' argument*/); - } - else { - return Array::find_action(index, 0 /* ignored */, state, callback, - true /*treat as nullable array*/, - true /*search for null, ignore value argument*/); - } -} - - -template -bool ArrayIntNull::find_action_pattern(size_t index, uint64_t pattern, QueryState* state, Callback callback) const -{ - return Array::find_action_pattern(index, pattern, state, callback, - true /*treat as nullable array*/, - false /*search parameter given in 'value' argument*/); -} - - -template -size_t ArrayIntNull::find_first(value_type value, size_t start, size_t end) const -{ - QueryState state; - state.init(act_ReturnFirst, nullptr, 1); - if (value) { - Array::find(*value, start, end, 0, &state, Array::CallbackDummy(), - true /*treat as nullable array*/, - false /*search parameter given in 'value' argument*/); - } - else { - Array::find(0 /*ignored*/, start, end, 0, &state, Array::CallbackDummy(), - true /*treat as nullable array*/, - true /*search for null, ignore value argument*/); - } - - if (state.m_match_count > 0) - return to_size_t(state.m_state); - else - return not_found; -} - -inline size_t ArrayIntNull::find_first(value_type value, size_t begin, size_t end) const -{ - return find_first(value, begin, end); -} - -} - -#endif // REALM_ARRAY_INTEGER_HPP diff --git a/Pods/Realm/include/core/realm/array_string.hpp b/Pods/Realm/include/core/realm/array_string.hpp deleted file mode 100644 index 16d76519..00000000 --- a/Pods/Realm/include/core/realm/array_string.hpp +++ /dev/null @@ -1,191 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ARRAY_STRING_HPP -#define REALM_ARRAY_STRING_HPP - -#include - -namespace realm { - -/* -ArrayString stores strings as a concecutive list of fixed-length blocks of m_width bytes. The -longest string it can store is (m_width - 1) bytes before it needs to expand. - -An example of the format for m_width = 4 is following sequence of bytes, where x is payload: - -xxx0 xx01 x002 0003 0004 (strings "xxx",. "xx", "x", "", realm::null()) - -So each string is 0 terminated, and the last byte in a block tells how many 0s are present, except -for a realm::null() which has the byte set to m_width (4). The byte is used to compute the length of a string -in various functions. - -New: If m_witdh = 0, then all elements are realm::null(). So to add an empty string we must expand m_width -New: StringData is null() if-and-only-if StringData::data() == 0. -*/ - -class ArrayString: public Array { -public: - static const size_t max_width = 64; - - typedef StringData value_type; - // Constructor defaults to non-nullable because we use non-nullable ArrayString so many places internally in core - // (data which isn't user payload) where null isn't needed. - explicit ArrayString(Allocator&, bool nullable = false) noexcept; - explicit ArrayString(no_prealloc_tag) noexcept; - ~ArrayString() noexcept override {} - - bool is_null(size_t ndx) const; - void set_null(size_t ndx); - StringData get(size_t ndx) const noexcept; - void add(); - void add(StringData value); - void set(size_t ndx, StringData value); - void insert(size_t ndx, StringData value); - void erase(size_t ndx); - - size_t count(StringData value, size_t begin = 0, - size_t end = npos) const noexcept; - size_t find_first(StringData value, size_t begin = 0, - size_t end = npos) const noexcept; - void find_all(IntegerColumn& result, StringData value, size_t add_offset = 0, - size_t begin = 0, size_t end = npos); - - /// Compare two string arrays for equality. - bool compare_string(const ArrayString&) const noexcept; - - /// Get the specified element without the cost of constructing an - /// array instance. If an array instance is already available, or - /// you need to get multiple values, then this method will be - /// slower. - static StringData get(const char* header, size_t ndx, bool nullable) noexcept; - - ref_type bptree_leaf_insert(size_t ndx, StringData, TreeInsertBase& state); - - /// Construct a string array of the specified size and return just - /// the reference to the underlying memory. All elements will be - /// initialized to the empty string. - static MemRef create_array(size_t size, Allocator&); - - /// Create a new empty string array and attach this accessor to - /// it. This does not modify the parent reference information of - /// this accessor. - /// - /// Note that the caller assumes ownership of the allocated - /// underlying node. It is not owned by the accessor. - void create(); - - /// Construct a copy of the specified slice of this string array - /// using the specified target allocator. - MemRef slice(size_t offset, size_t size, Allocator& target_alloc) const; - -#ifdef REALM_DEBUG - void string_stats() const; - void to_dot(std::ostream&, StringData title = StringData()) const; -#endif - -private: - size_t calc_byte_len(size_t count, size_t width) const override; - size_t calc_item_count(size_t bytes, - size_t width) const noexcept override; - WidthType GetWidthType() const override { return wtype_Multiply; } - - bool m_nullable; -}; - - - -// Implementation: - -// Creates new array (but invalid, call init_from_ref() to init) -inline ArrayString::ArrayString(Allocator& alloc, bool nullable) noexcept: -Array(alloc), m_nullable(nullable) -{ -} - -// Fastest way to instantiate an Array. For use with GetDirect() that only fills out m_width, m_data -// and a few other basic things needed for read-only access. Or for use if you just want a way to call -// some methods written in ArrayString.* -inline ArrayString::ArrayString(no_prealloc_tag) noexcept: - Array(*static_cast(nullptr)) -{ -} - -inline void ArrayString::create() -{ - size_t size = 0; - MemRef mem = create_array(size, get_alloc()); // Throws - init_from_mem(mem); -} - -inline MemRef ArrayString::create_array(size_t size, Allocator& alloc) -{ - bool context_flag = false; - int_fast64_t value = 0; - return Array::create(type_Normal, context_flag, wtype_Multiply, size, value, alloc); // Throws -} - -inline StringData ArrayString::get(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_size); - if (m_width == 0) - return m_nullable ? realm::null() : StringData(""); - - const char* data = m_data + (ndx * m_width); - size_t size = (m_width-1) - data[m_width-1]; - - if (size == static_cast(-1)) - return m_nullable ? realm::null() : StringData(""); - - REALM_ASSERT(data[size] == 0); // Realm guarantees 0 terminated return strings - return StringData(data, size); -} - -inline void ArrayString::add(StringData value) -{ - REALM_ASSERT(!(!m_nullable && value.is_null())); - insert(m_size, value); // Throws -} - -inline void ArrayString::add() -{ - add(m_nullable ? realm::null() : StringData("")); // Throws -} - -inline StringData ArrayString::get(const char* header, size_t ndx, bool nullable) noexcept -{ - REALM_ASSERT(ndx < get_size_from_header(header)); - size_t width = get_width_from_header(header); - const char* data = get_data_from_header(header) + (ndx * width); - - if (width == 0) - return nullable ? realm::null() : StringData(""); - - size_t size = (width-1) - data[width-1]; - - if (size == static_cast(-1)) - return nullable ? realm::null() : StringData(""); - - return StringData(data, size); -} - - -} // namespace realm - -#endif // REALM_ARRAY_STRING_HPP diff --git a/Pods/Realm/include/core/realm/array_string_long.hpp b/Pods/Realm/include/core/realm/array_string_long.hpp deleted file mode 100644 index 4d7389c2..00000000 --- a/Pods/Realm/include/core/realm/array_string_long.hpp +++ /dev/null @@ -1,226 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ARRAY_STRING_LONG_HPP -#define REALM_ARRAY_STRING_LONG_HPP - -#include -#include - -namespace realm { - - -class ArrayStringLong: public Array { -public: - typedef StringData value_type; - - explicit ArrayStringLong(Allocator&, bool nullable) noexcept; - ~ArrayStringLong() noexcept override{} - - /// Create a new empty long string array and attach this accessor to - /// it. This does not modify the parent reference information of - /// this accessor. - /// - /// Note that the caller assumes ownership of the allocated - /// underlying node. It is not owned by the accessor. - void create(); - - //@{ - /// Overriding functions of Array - void init_from_ref(ref_type) noexcept; - void init_from_mem(MemRef) noexcept; - void init_from_parent() noexcept; - //@} - - bool is_empty() const noexcept; - size_t size() const noexcept; - - StringData get(size_t ndx) const noexcept; - - - void add(StringData value); - void set(size_t ndx, StringData value); - void insert(size_t ndx, StringData value); - void erase(size_t ndx); - void truncate(size_t size); - void clear(); - void destroy(); - - bool is_null(size_t ndx) const; - void set_null(size_t ndx); - - size_t count(StringData value, size_t begin = 0, - size_t end = npos) const noexcept; - size_t find_first(StringData value, size_t begin = 0, - size_t end = npos) const noexcept; - void find_all(IntegerColumn &result, StringData value, size_t add_offset = 0, - size_t begin = 0, size_t end = npos) const; - - /// Get the specified element without the cost of constructing an - /// array instance. If an array instance is already available, or - /// you need to get multiple values, then this method will be - /// slower. - static StringData get(const char* header, size_t ndx, Allocator&, bool nullable) noexcept; - - ref_type bptree_leaf_insert(size_t ndx, StringData, TreeInsertBase&); - - static size_t get_size_from_header(const char*, Allocator&) noexcept; - - /// Construct a long string array of the specified size and return - /// just the reference to the underlying memory. All elements will - /// be initialized to zero size blobs. - static MemRef create_array(size_t size, Allocator&, bool nullable); - - /// Construct a copy of the specified slice of this long string - /// array using the specified target allocator. - MemRef slice(size_t offset, size_t size, Allocator& target_alloc) const; - -#ifdef REALM_DEBUG - void to_dot(std::ostream&, StringData title = StringData()) const; -#endif - - bool update_from_parent(size_t old_baseline) noexcept; -private: - ArrayInteger m_offsets; - ArrayBlob m_blob; - Array m_nulls; - bool m_nullable; -}; - - - - -// Implementation: -inline ArrayStringLong::ArrayStringLong(Allocator& alloc, bool nullable) noexcept: - Array(alloc), m_offsets(alloc), m_blob(alloc), m_nulls(nullable ? alloc : Allocator::get_default()), m_nullable(nullable) -{ - m_offsets.set_parent(this, 0); - m_blob.set_parent(this, 1); - if (nullable) - m_nulls.set_parent(this, 2); -} - -inline void ArrayStringLong::create() -{ - size_t size = 0; - MemRef mem = create_array(size, get_alloc(), m_nullable); // Throws - init_from_mem(mem); -} - -inline void ArrayStringLong::init_from_ref(ref_type ref) noexcept -{ - REALM_ASSERT(ref); - char* header = get_alloc().translate(ref); - init_from_mem(MemRef(header, ref)); - m_nullable = (Array::size() == 3); -} - -inline void ArrayStringLong::init_from_parent() noexcept -{ - ref_type ref = get_ref_from_parent(); - init_from_ref(ref); -} - -inline bool ArrayStringLong::is_empty() const noexcept -{ - return m_offsets.is_empty(); -} - -inline size_t ArrayStringLong::size() const noexcept -{ - return m_offsets.size(); -} - -inline StringData ArrayStringLong::get(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_offsets.size()); - - if (m_nullable && m_nulls.get(ndx) == 0) - return realm::null(); - - size_t begin, end; - if (0 < ndx) { - // FIXME: Consider how much of a performance problem it is, - // that we have to issue two separate calls to read two - // consecutive values from an array. - begin = to_size_t(m_offsets.get(ndx-1)); - end = to_size_t(m_offsets.get(ndx)); - } - else { - begin = 0; - end = to_size_t(m_offsets.get(0)); - } - --end; // Discount the terminating zero - - return StringData(m_blob.get(begin), end-begin); -} - -inline void ArrayStringLong::truncate(size_t size) -{ - REALM_ASSERT_3(size, <, m_offsets.size()); - - size_t blob_size = size ? to_size_t(m_offsets.get(size-1)) : 0; - - m_offsets.truncate(size); - m_blob.truncate(blob_size); - if (m_nullable) - m_nulls.truncate(size); -} - -inline void ArrayStringLong::clear() -{ - m_blob.clear(); - m_offsets.clear(); - if (m_nullable) - m_nulls.clear(); -} - -inline void ArrayStringLong::destroy() -{ - m_blob.destroy(); - m_offsets.destroy(); - if (m_nullable) - m_nulls.destroy(); - Array::destroy(); -} - -inline bool ArrayStringLong::update_from_parent(size_t old_baseline) noexcept -{ - bool res = Array::update_from_parent(old_baseline); - if (res) { - m_blob.update_from_parent(old_baseline); - m_offsets.update_from_parent(old_baseline); - if (m_nullable) - m_nulls.update_from_parent(old_baseline); - } - return res; -} - -inline size_t ArrayStringLong::get_size_from_header(const char* header, - Allocator& alloc) noexcept -{ - ref_type offsets_ref = to_ref(Array::get(header, 0)); - const char* offsets_header = alloc.translate(offsets_ref); - return Array::get_size_from_header(offsets_header); -} - - -} // namespace realm - -#endif // REALM_ARRAY_STRING_LONG_HPP diff --git a/Pods/Realm/include/core/realm/binary_data.hpp b/Pods/Realm/include/core/realm/binary_data.hpp deleted file mode 100644 index c05d4586..00000000 --- a/Pods/Realm/include/core/realm/binary_data.hpp +++ /dev/null @@ -1,215 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_BINARY_DATA_HPP -#define REALM_BINARY_DATA_HPP - -#include -#include -#include -#include - -#include -#include -#include - -namespace realm { - -/// A reference to a chunk of binary data. -/// -/// This class does not own the referenced memory, nor does it in any other way -/// attempt to manage the lifetime of it. -/// -/// \sa StringData -class BinaryData { -public: - BinaryData() noexcept : m_data(nullptr), m_size(0) {} - BinaryData(const char* data, size_t size) noexcept: m_data(data), m_size(size) {} - template - explicit BinaryData(const char (&data)[N]): m_data(data), m_size(N) {} - template - explicit BinaryData(const std::basic_string&); - - template - explicit operator std::basic_string() const; - - char operator[](size_t i) const noexcept { return m_data[i]; } - - const char* data() const noexcept { return m_data; } - size_t size() const noexcept { return m_size; } - - /// Is this a null reference? - /// - /// An instance of BinaryData is a null reference when, and only when the - /// stored size is zero (size()) and the stored pointer is the null pointer - /// (data()). - /// - /// In the case of the empty byte sequence, the stored size is still zero, - /// but the stored pointer is **not** the null pointer. Note that the actual - /// value of the pointer is immaterial in this case (as long as it is not - /// zero), because when the size is zero, it is an error to dereference the - /// pointer. - /// - /// Conversion of a BinaryData object to `bool` yields the logical negation - /// of the result of calling this function. In other words, a BinaryData - /// object is converted to true if it is not the null reference, otherwise - /// it is converted to false. - /// - /// It is important to understand that all of the functions and operators in - /// this class, and most of the functions in the Realm API in general - /// makes no distinction between a null reference and a reference to the - /// empty byte sequence. These functions and operators never look at the - /// stored pointer if the stored size is zero. - bool is_null() const noexcept; - - friend bool operator==(const BinaryData&, const BinaryData&) noexcept; - friend bool operator!=(const BinaryData&, const BinaryData&) noexcept; - - //@{ - /// Trivial bytewise lexicographical comparison. - friend bool operator<(const BinaryData&, const BinaryData&) noexcept; - friend bool operator>(const BinaryData&, const BinaryData&) noexcept; - friend bool operator<=(const BinaryData&, const BinaryData&) noexcept; - friend bool operator>=(const BinaryData&, const BinaryData&) noexcept; - //@} - - bool begins_with(BinaryData) const noexcept; - bool ends_with(BinaryData) const noexcept; - bool contains(BinaryData) const noexcept; - - template - friend std::basic_ostream& operator<<(std::basic_ostream&, const BinaryData&); - - explicit operator bool() const noexcept; - -private: - const char* m_data; - size_t m_size; -}; - -/// A read-only chunk of binary data. -class OwnedBinaryData : public OwnedData { -public: - using OwnedData::OwnedData; - - OwnedBinaryData() = default; - OwnedBinaryData(const BinaryData& data) : OwnedData(data.data(), data.size()) { } - - BinaryData get() const - { - return { data(), size() }; - } -}; - - - -// Implementation: - -template -inline BinaryData::BinaryData(const std::basic_string& s): - m_data(s.data()), - m_size(s.size()) -{ -} - -template -inline BinaryData::operator std::basic_string() const -{ - return std::basic_string(m_data, m_size); -} - -inline bool BinaryData::is_null() const noexcept -{ - return !m_data; -} - -inline bool operator==(const BinaryData& a, const BinaryData& b) noexcept -{ - return a.m_size == b.m_size && a.is_null() == b.is_null() && safe_equal(a.m_data, a.m_data + a.m_size, b.m_data); -} - -inline bool operator!=(const BinaryData& a, const BinaryData& b) noexcept -{ - return !(a == b); -} - -inline bool operator<(const BinaryData& a, const BinaryData& b) noexcept -{ - if (a.is_null() || b.is_null()) - return !a.is_null() < !b.is_null(); - - return std::lexicographical_compare(a.m_data, a.m_data + a.m_size, - b.m_data, b.m_data + b.m_size); -} - -inline bool operator>(const BinaryData& a, const BinaryData& b) noexcept -{ - return b < a; -} - -inline bool operator<=(const BinaryData& a, const BinaryData& b) noexcept -{ - return !(b < a); -} - -inline bool operator>=(const BinaryData& a, const BinaryData& b) noexcept -{ - return !(a < b); -} - -inline bool BinaryData::begins_with(BinaryData d) const noexcept -{ - if (is_null() && !d.is_null()) - return false; - - return d.m_size <= m_size && safe_equal(m_data, m_data + d.m_size, d.m_data); -} - -inline bool BinaryData::ends_with(BinaryData d) const noexcept -{ - if (is_null() && !d.is_null()) - return false; - - return d.m_size <= m_size && safe_equal(m_data + m_size - d.m_size, m_data + m_size, d.m_data); -} - -inline bool BinaryData::contains(BinaryData d) const noexcept -{ - if (is_null() && !d.is_null()) - return false; - - return d.m_size == 0 || - std::search(m_data, m_data + m_size, d.m_data, d.m_data + d.m_size) != m_data + m_size; -} - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const BinaryData& d) -{ - out << "BinaryData("<(d.m_data)<<", "< // std::unique_ptr -#include -#include -#include -#include - -namespace realm { - -/// Specialize BpTree to implement column types. -template -class BpTree; - -class ArrayInteger; -class ArrayIntNull; - -class BpTreeBase { -public: - struct unattached_tag {}; - - // Accessor concept: - Allocator& get_alloc() const noexcept; - void destroy() noexcept; - void detach(); - bool is_attached() const noexcept; - void set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept; - size_t get_ndx_in_parent() const noexcept; - void set_ndx_in_parent(size_t ndx) noexcept; - void update_from_parent(size_t old_baseline) noexcept; - MemRef clone_deep(Allocator& alloc) const; - - // BpTree interface: - const Array& root() const noexcept; - Array& root() noexcept; - bool root_is_leaf() const noexcept; - void introduce_new_root(ref_type new_sibling_ref, Array::TreeInsertBase& state, bool is_append); - void replace_root(std::unique_ptr leaf); - -protected: - explicit BpTreeBase(std::unique_ptr root); - explicit BpTreeBase(BpTreeBase&&) = default; - BpTreeBase& operator=(BpTreeBase&&) = default; - std::unique_ptr m_root; - - struct SliceHandler { - virtual MemRef slice_leaf(MemRef leaf_mem, size_t offset, size_t size, - Allocator& target_alloc) = 0; - ~SliceHandler() noexcept {} - }; - static ref_type write_subtree(const Array& root, size_t slice_offset, - size_t slice_size, size_t table_size, - SliceHandler&, _impl::OutputStream&); - friend class ColumnBase; - friend class ColumnBaseSimple; -private: - struct WriteSliceHandler; - - // FIXME: Move B+Tree functionality from Array to this class. -}; - - -// Default implementation of BpTree. This should work for all types that have monomorphic -// leaves (i.e. all leaves are of the same type). -template -class BpTree : public BpTreeBase { -public: - using value_type = T; - using LeafType = typename ColumnTypeTraits::leaf_type; - - /// LeafInfo is used by get_leaf() to provide access to a leaf - /// without instantiating unnecessary nodes along the way. - /// Upon return, out_leaf with hold a pointer to the leaf containing - /// the index given to get_leaf(). If the index happens to be - /// in the root node (i.e., the root is a leaf), it will point - /// to the root node. - /// If the index isn't in the root node, fallback will be initialized - /// to represent the leaf holding the node, and out_leaf will be set - /// to point to fallback. - struct LeafInfo { - const LeafType** out_leaf; - LeafType* fallback; - }; - - BpTree(); - explicit BpTree(BpTreeBase::unattached_tag); - explicit BpTree(Allocator& alloc); - explicit BpTree(std::unique_ptr root) : BpTreeBase(std::move(root)) {} - BpTree(BpTree&&) = default; - BpTree& operator=(BpTree&&) = default; - void init_from_ref(Allocator& alloc, ref_type ref); - void init_from_mem(Allocator& alloc, MemRef mem); - void init_from_parent(); - - size_t size() const noexcept; - bool is_empty() const noexcept { return size() == 0; } - - T get(size_t ndx) const noexcept; - bool is_null(size_t ndx) const noexcept; - void set(size_t, T value); - void set_null(size_t); - void insert(size_t ndx, T value, size_t num_rows = 1); - void erase(size_t ndx, bool is_last = false); - void move_last_over(size_t ndx, size_t last_row_ndx); - void clear(); - T front() const noexcept; - T back() const noexcept; - - size_t find_first(T value, size_t begin = 0, size_t end = npos) const; - void find_all(IntegerColumn& out_indices, T value, - size_t begin = 0, size_t end = npos) const; - - static MemRef create_leaf(Array::Type, size_t size, T value, Allocator&); - - /// See LeafInfo for information about what to put in the inout_leaf - /// parameter. - /// - /// This function cannot be used for modifying operations as it - /// does not ensure the presence of an unbroken chain of parent - /// accessors. For this reason, the identified leaf should always - /// be accessed through the returned const-qualified reference, - /// and never directly through the specfied fallback accessor. - void get_leaf(size_t ndx, size_t& out_ndx_in_leaf, - LeafInfo& inout_leaf) const noexcept; - - void update_each(Array::UpdateHandler&); - void update_elem(size_t, Array::UpdateHandler&); - - void adjust(size_t ndx, T diff); - void adjust(T diff); - void adjust_ge(T limit, T diff); - - ref_type write(size_t slice_offset, size_t slice_size, - size_t table_size, _impl::OutputStream& out) const; - -#if defined(REALM_DEBUG) - void verify() const; - static size_t verify_leaf(MemRef mem, Allocator& alloc); -#endif - static void leaf_to_dot(MemRef mem, ArrayParent* parent, size_t ndx_in_parent, - std::ostream& out, Allocator& alloc); -private: - LeafType& root_as_leaf(); - const LeafType& root_as_leaf() const; - - std::unique_ptr create_root_from_ref(Allocator& alloc, ref_type ref); - std::unique_ptr create_root_from_mem(Allocator& alloc, MemRef mem); - - struct EraseHandler; - struct UpdateHandler; - struct SetNullHandler; - struct SliceHandler; - struct AdjustHandler; - struct AdjustGEHandler; - - struct LeafValueInserter; - struct LeafNullInserter; - - template - void bptree_insert(size_t row_ndx, Array::TreeInsert& state, size_t num_rows); -}; - - -/// Implementation: - -inline BpTreeBase::BpTreeBase(std::unique_ptr root) : m_root(std::move(root)) -{ -} - -inline -Allocator& BpTreeBase::get_alloc() const noexcept -{ - return m_root->get_alloc(); -} - -inline -void BpTreeBase::destroy() noexcept -{ - if (m_root) - m_root->destroy_deep(); -} - -inline -void BpTreeBase::detach() -{ - m_root->detach(); -} - -inline -bool BpTreeBase::is_attached() const noexcept -{ - return m_root->is_attached(); -} - -inline -bool BpTreeBase::root_is_leaf() const noexcept -{ - return !m_root->is_inner_bptree_node(); -} - -inline -void BpTreeBase::set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept -{ - m_root->set_parent(parent, ndx_in_parent); -} - -inline -size_t BpTreeBase::get_ndx_in_parent() const noexcept -{ - return m_root->get_ndx_in_parent(); -} - -inline -void BpTreeBase::set_ndx_in_parent(size_t ndx) noexcept -{ - m_root->set_ndx_in_parent(ndx); -} - -inline -void BpTreeBase::update_from_parent(size_t old_baseline) noexcept -{ - m_root->update_from_parent(old_baseline); -} - -inline -MemRef BpTreeBase::clone_deep(Allocator& alloc) const -{ - return m_root->clone_deep(alloc); -} - -inline -const Array& BpTreeBase::root() const noexcept -{ - return *m_root; -} - -inline -Array& BpTreeBase::root() noexcept -{ - return *m_root; -} - -template -BpTree::BpTree() : BpTree(Allocator::get_default()) -{ -} - -template -BpTree::BpTree(Allocator& alloc) : BpTreeBase(std::unique_ptr(new LeafType(alloc))) -{ -} - -template -BpTree::BpTree(BpTreeBase::unattached_tag) : BpTreeBase(nullptr) -{ -} - -template -std::unique_ptr BpTree::create_root_from_mem(Allocator& alloc, MemRef mem) -{ - const char* header = mem.m_addr; - std::unique_ptr new_root; - bool is_inner_bptree_node = Array::get_is_inner_bptree_node_from_header(header); - - bool can_reuse_root_accessor = m_root && - &m_root->get_alloc() == &alloc && - m_root->is_inner_bptree_node() == is_inner_bptree_node; - if (can_reuse_root_accessor) { - if (is_inner_bptree_node) { - m_root->init_from_mem(mem); - } - else { - static_cast(*m_root).init_from_mem(mem); - } - return std::move(m_root); // Same root will be reinstalled. - } - - // Not reusing root note, allocating a new one. - if (is_inner_bptree_node) { - new_root.reset(new Array{alloc}); - new_root->init_from_mem(mem); - } - else { - std::unique_ptr leaf { new LeafType{alloc} }; - leaf->init_from_mem(mem); - new_root = std::move(leaf); - } - return new_root; -} - -template -std::unique_ptr BpTree::create_root_from_ref(Allocator& alloc, ref_type ref) -{ - MemRef mem = MemRef{alloc.translate(ref), ref}; - return create_root_from_mem(alloc, mem); -} - -template -void BpTree::init_from_ref(Allocator& alloc, ref_type ref) -{ - auto new_root = create_root_from_ref(alloc, ref); - replace_root(std::move(new_root)); -} - -template -void BpTree::init_from_mem(Allocator& alloc, MemRef mem) -{ - auto new_root = create_root_from_mem(alloc, mem); - replace_root(std::move(new_root)); -} - -template -void BpTree::init_from_parent() -{ - ref_type ref = root().get_ref_from_parent(); - ArrayParent* parent = m_root->get_parent(); - size_t ndx_in_parent = m_root->get_ndx_in_parent(); - auto new_root = create_root_from_ref(get_alloc(), ref); - new_root->set_parent(parent, ndx_in_parent); - m_root = std::move(new_root); -} - -template -typename BpTree::LeafType& -BpTree::root_as_leaf() -{ - REALM_ASSERT_DEBUG(root_is_leaf()); - REALM_ASSERT_DEBUG(dynamic_cast(m_root.get()) != nullptr); - return static_cast(root()); -} - -template -const typename BpTree::LeafType& -BpTree::root_as_leaf() const -{ - REALM_ASSERT_DEBUG(root_is_leaf()); - REALM_ASSERT_DEBUG(dynamic_cast(m_root.get()) != nullptr); - return static_cast(root()); -} - -template -size_t BpTree::size() const noexcept -{ - if (root_is_leaf()) { - return root_as_leaf().size(); - } - return root().get_bptree_size(); -} - -template -T BpTree::back() const noexcept -{ - // FIXME: slow - return get(size()-1); -} - -namespace _impl { - -// NullableOrNothing encapsulates the behavior of nullable and -// non-nullable leaf types, so that non-nullable leaf types -// don't have to implement is_null/set_null but BpTree can still -// support the interface (and return false / assert when null -// is not supported). -template -struct NullableOrNothing { - static bool is_null(const Leaf& leaf, size_t ndx) - { - return leaf.is_null(ndx); - } - static void set_null(Leaf& leaf, size_t ndx) - { - leaf.set_null(ndx); - } -}; -template<> -struct NullableOrNothing { - static bool is_null(const ArrayInteger&, size_t) - { - return false; - } - static void set_null(ArrayInteger&, size_t) - { - REALM_ASSERT_RELEASE(false); - } -}; - -} - -template -bool BpTree::is_null(size_t ndx) const noexcept -{ - if (root_is_leaf()) { - return _impl::NullableOrNothing::is_null(root_as_leaf(), ndx); - } - LeafType fallback(get_alloc()); - const LeafType* leaf; - LeafInfo leaf_info { &leaf, &fallback }; - size_t ndx_in_leaf; - get_leaf(ndx, ndx_in_leaf, leaf_info); - return _impl::NullableOrNothing::is_null(*leaf, ndx_in_leaf); -} - -template -T BpTree::get(size_t ndx) const noexcept -{ - REALM_ASSERT_DEBUG_EX(ndx < size(), ndx, size()); - if (root_is_leaf()) { - return root_as_leaf().get(ndx); - } - - // Use direct getter to avoid initializing leaf array: - std::pair p = root().get_bptree_leaf(ndx); - const char* leaf_header = p.first.m_addr; - size_t ndx_in_leaf = p.second; - return LeafType::get(leaf_header, ndx_in_leaf); -} - -template -template -void BpTree::bptree_insert(size_t row_ndx, Array::TreeInsert& state, size_t num_rows) -{ - ref_type new_sibling_ref; - for (size_t i = 0; i < num_rows; ++i) { - size_t row_ndx_2 = row_ndx == realm::npos ? realm::npos : row_ndx + i; - if (root_is_leaf()) { - REALM_ASSERT_DEBUG(row_ndx_2 == realm::npos || row_ndx_2 < REALM_MAX_BPNODE_SIZE); - new_sibling_ref = root_as_leaf().bptree_leaf_insert(row_ndx_2, state.m_value, state); - } - else { - if (row_ndx_2 == realm::npos) { - new_sibling_ref = root().bptree_append(state); // Throws - } - else { - new_sibling_ref = root().bptree_insert(row_ndx_2, state); // Throws - } - } - - if (REALM_UNLIKELY(new_sibling_ref)) { - bool is_append = row_ndx_2 == realm::npos; - introduce_new_root(new_sibling_ref, state, is_append); - } - } -} - -template -struct BpTree::LeafValueInserter { - using value_type = T; - T m_value; - LeafValueInserter(T value) : m_value(std::move(value)) {} - - // TreeTraits concept: - static ref_type - leaf_insert(MemRef leaf_mem, ArrayParent& parent, size_t ndx_in_parent, - Allocator& alloc, size_t ndx_in_leaf, Array::TreeInsert& state) - { - LeafType leaf { alloc }; - leaf.init_from_mem(leaf_mem); - leaf.set_parent(&parent, ndx_in_parent); - // Should not move out of m_value, because the same inserter may be used to perform - // multiple insertions (for example, if num_rows > 1). - return leaf.bptree_leaf_insert(ndx_in_leaf, state.m_value, state); - } -}; - -template -struct BpTree::LeafNullInserter { - using value_type = null; - // TreeTraits concept: - static ref_type - leaf_insert(MemRef leaf_mem, ArrayParent& parent, size_t ndx_in_parent, - Allocator& alloc, size_t ndx_in_leaf, Array::TreeInsert& state) - { - LeafType leaf { alloc }; - leaf.init_from_mem(leaf_mem); - leaf.set_parent(&parent, ndx_in_parent); - return leaf.bptree_leaf_insert(ndx_in_leaf, null{}, state); - } -}; - -template -void BpTree::insert(size_t row_ndx, T value, size_t num_rows) -{ - REALM_ASSERT_DEBUG(row_ndx == npos || row_ndx < size()); - Array::TreeInsert inserter; - inserter.m_value = std::move(value); - inserter.m_nullable = std::is_same>::value; // FIXME - bptree_insert(row_ndx, inserter, num_rows); // Throws -} - -template -struct BpTree::UpdateHandler : Array::UpdateHandler -{ - LeafType m_leaf; - const T m_value; - UpdateHandler(BpTreeBase& tree, T value) noexcept: - m_leaf(tree.get_alloc()), m_value(std::move(value)) {} - void update(MemRef mem, ArrayParent* parent, size_t ndx_in_parent, - size_t elem_ndx_in_leaf) override - { - m_leaf.init_from_mem(mem); - m_leaf.set_parent(parent, ndx_in_parent); - m_leaf.set(elem_ndx_in_leaf, m_value); // Throws - } -}; - -template -struct BpTree::SetNullHandler : Array::UpdateHandler -{ - LeafType m_leaf; - SetNullHandler(BpTreeBase& tree) noexcept: m_leaf(tree.get_alloc()) {} - void update(MemRef mem, ArrayParent* parent, size_t ndx_in_parent, - size_t elem_ndx_in_leaf) override - { - m_leaf.init_from_mem(mem); - m_leaf.set_parent(parent, ndx_in_parent); - _impl::NullableOrNothing::set_null(m_leaf, elem_ndx_in_leaf); // Throws - } -}; - -template -void BpTree::set(size_t ndx, T value) -{ - if (root_is_leaf()) { - root_as_leaf().set(ndx, std::move(value)); - } - else { - UpdateHandler set_leaf_elem(*this, std::move(value)); - m_root->update_bptree_elem(ndx, set_leaf_elem); // Throws - } -} - -template -void BpTree::set_null(size_t ndx) -{ - if (root_is_leaf()) { - _impl::NullableOrNothing::set_null(root_as_leaf(), ndx); - } - else { - SetNullHandler set_leaf_elem(*this); - m_root->update_bptree_elem(ndx, set_leaf_elem); // Throws; - } -} - -template -struct BpTree::EraseHandler : Array::EraseHandler { - BpTreeBase& m_tree; - LeafType m_leaf; - bool m_leaves_have_refs; // FIXME: Should be able to eliminate this. - EraseHandler(BpTreeBase& tree) noexcept: - m_tree(tree), - m_leaf(tree.get_alloc()), - m_leaves_have_refs(false) {} - bool erase_leaf_elem(MemRef leaf_mem, ArrayParent* parent, - size_t leaf_ndx_in_parent, - size_t elem_ndx_in_leaf) override - { - m_leaf.init_from_mem(leaf_mem); - REALM_ASSERT_3(m_leaf.size(), >=, 1); - size_t last_ndx = m_leaf.size() - 1; - if (last_ndx == 0) { - m_leaves_have_refs = m_leaf.has_refs(); - return true; - } - m_leaf.set_parent(parent, leaf_ndx_in_parent); - size_t ndx = elem_ndx_in_leaf; - if (ndx == npos) - ndx = last_ndx; - m_leaf.erase(ndx); // Throws - return false; - } - void destroy_leaf(MemRef leaf_mem) noexcept override - { - // FIXME: Seems like this would cause file space leaks if - // m_leaves_have_refs is true, but consider carefully how - // m_leaves_have_refs get its value. - m_tree.get_alloc().free_(leaf_mem); - } - void replace_root_by_leaf(MemRef leaf_mem) override - { - std::unique_ptr leaf{new LeafType(m_tree.get_alloc())}; // Throws - leaf->init_from_mem(leaf_mem); - m_tree.replace_root(std::move(leaf)); // Throws - } - void replace_root_by_empty_leaf() override - { - std::unique_ptr leaf{new LeafType(m_tree.get_alloc())}; // Throws - leaf->create(m_leaves_have_refs ? Array::type_HasRefs : - Array::type_Normal); // Throws - m_tree.replace_root(std::move(leaf)); // Throws - } -}; - -template -void BpTree::erase(size_t ndx, bool is_last) -{ - REALM_ASSERT_DEBUG(ndx < size()); - REALM_ASSERT_DEBUG(is_last == (ndx == size()-1)); - if (root_is_leaf()) { - root_as_leaf().erase(ndx); - } - else { - size_t ndx_2 = is_last ? npos : ndx; - EraseHandler handler(*this); - Array::erase_bptree_elem(m_root.get(), ndx_2, handler); - } -} - -template -void BpTree::move_last_over(size_t row_ndx, size_t last_row_ndx) -{ - // Copy value from last row over - T value = get(last_row_ndx); - set(row_ndx, value); - erase(last_row_ndx, true); -} - -template -void BpTree::clear() -{ - if (root_is_leaf()) { - if (std::is_same::value && root().get_type() == Array::type_HasRefs) { - // FIXME: This is because some column types rely on integer columns - // to contain refs. - root().clear_and_destroy_children(); - } - else { - root_as_leaf().clear(); - } - } - else { - Allocator& alloc = get_alloc(); - root().destroy_deep(); - - std::unique_ptr new_root(new LeafType(alloc)); - new_root->create(); - replace_root(std::move(new_root)); - } -} - - -template -struct BpTree::AdjustHandler : Array::UpdateHandler { - LeafType m_leaf; - const T m_diff; - AdjustHandler(BpTreeBase& tree, T diff) : m_leaf(tree.get_alloc()), - m_diff(diff) - {} - - void update(MemRef mem, ArrayParent* parent, size_t ndx_in_parent, size_t) final - { - m_leaf.init_from_mem(mem); - m_leaf.set_parent(parent, ndx_in_parent); - m_leaf.adjust(0, m_leaf.size(), m_diff); - } -}; - -template -void BpTree::adjust(T diff) -{ - if (root_is_leaf()) { - root_as_leaf().adjust(0, m_root->size(), std::move(diff)); // Throws - } - else { - AdjustHandler adjust_leaf_elem(*this, std::move(diff)); - m_root->update_bptree_leaves(adjust_leaf_elem); // Throws - } -} - -template -void BpTree::adjust(size_t ndx, T diff) -{ - static_assert(std::is_arithmetic::value, "adjust is undefined for non-arithmetic trees"); - set(ndx, get(ndx) + diff); -} - -template -struct BpTree::AdjustGEHandler : Array::UpdateHandler { - LeafType m_leaf; - const T m_limit, m_diff; - - AdjustGEHandler(BpTreeBase& tree, T limit, T diff) : m_leaf(tree.get_alloc()), - m_limit(limit), m_diff(diff) - {} - - void update(MemRef mem, ArrayParent* parent, size_t ndx_in_parent, size_t) final - { - m_leaf.init_from_mem(mem); - m_leaf.set_parent(parent, ndx_in_parent); - m_leaf.adjust_ge(m_limit, m_diff); - } -}; - -template -void BpTree::adjust_ge(T limit, T diff) -{ - if (root_is_leaf()) { - root_as_leaf().adjust_ge(std::move(limit), std::move(diff)); // Throws - } - else { - AdjustGEHandler adjust_leaf_elem(*this, std::move(limit), std::move(diff)); - m_root->update_bptree_leaves(adjust_leaf_elem); // Throws - } -} - -template -struct BpTree::SliceHandler : public BpTreeBase::SliceHandler { -public: - SliceHandler(Allocator& alloc): m_leaf(alloc) {} - MemRef slice_leaf(MemRef leaf_mem, size_t offset, size_t size, - Allocator& target_alloc) override - { - m_leaf.init_from_mem(leaf_mem); - return m_leaf.slice_and_clone_children(offset, size, target_alloc); // Throws - } -private: - LeafType m_leaf; -}; - -template -ref_type BpTree::write(size_t slice_offset, size_t slice_size, - size_t table_size, _impl::OutputStream& out) const -{ - ref_type ref; - if (root_is_leaf()) { - Allocator& alloc = Allocator::get_default(); - MemRef mem = root_as_leaf().slice_and_clone_children(slice_offset, slice_size, alloc); // Throws - Array slice(alloc); - _impl::DeepArrayDestroyGuard dg(&slice); - slice.init_from_mem(mem); - bool deep = true; - bool only_when_modified = false; - ref = slice.write(out, deep, only_when_modified); // Throws - } - else { - SliceHandler handler(get_alloc()); - ref = write_subtree(root(), slice_offset, slice_size, - table_size, handler, out); // Throws - } - return ref; -} - -template -MemRef BpTree::create_leaf(Array::Type leaf_type, size_t size, T value, Allocator& alloc) -{ - bool context_flag = false; - return LeafType::create_array(leaf_type, context_flag, size, std::move(value), alloc); -} - -template -void BpTree::get_leaf(size_t ndx, size_t& ndx_in_leaf, - LeafInfo& inout_leaf_info) const noexcept -{ - if (root_is_leaf()) { - ndx_in_leaf = ndx; - *inout_leaf_info.out_leaf = &root_as_leaf(); - return; - } - std::pair p = root().get_bptree_leaf(ndx); - inout_leaf_info.fallback->init_from_mem(p.first); - ndx_in_leaf = p.second; - *inout_leaf_info.out_leaf = inout_leaf_info.fallback; -} - -template -size_t BpTree::find_first(T value, size_t begin, size_t end) const -{ - if (root_is_leaf()) { - return root_as_leaf().find_first(value, begin, end); - } - - // FIXME: It would be better to always require that 'end' is - // specified explicitly, since Table has the size readily - // available, and Array::get_bptree_size() is deprecated. - if (end == npos) - end = size(); - - LeafType leaf_cache(get_alloc()); - size_t ndx_in_tree = begin; - while (ndx_in_tree < end) { - const LeafType* leaf; - LeafInfo leaf_info { &leaf, &leaf_cache }; - size_t ndx_in_leaf; - get_leaf(ndx_in_tree, ndx_in_leaf, leaf_info); - size_t leaf_offset = ndx_in_tree - ndx_in_leaf; - size_t end_in_leaf = std::min(leaf->size(), end - leaf_offset); - size_t ndx = leaf->find_first(value, ndx_in_leaf, end_in_leaf); // Throws (maybe) - if (ndx != not_found) - return leaf_offset + ndx; - ndx_in_tree = leaf_offset + end_in_leaf; - } - - return not_found; -} - -template -void BpTree::find_all(IntegerColumn& result, T value, size_t begin, size_t end) const -{ - if (root_is_leaf()) { - root_as_leaf().find_all(&result, value, 0, begin, end); // Throws - return; - } - - // FIXME: It would be better to always require that 'end' is - // specified explicitely, since Table has the size readily - // available, and Array::get_bptree_size() is deprecated. - if (end == npos) - end = size(); - - LeafType leaf_cache(get_alloc()); - size_t ndx_in_tree = begin; - while (ndx_in_tree < end) { - const LeafType* leaf; - LeafInfo leaf_info { &leaf, &leaf_cache }; - size_t ndx_in_leaf; - get_leaf(ndx_in_tree, ndx_in_leaf, leaf_info); - size_t leaf_offset = ndx_in_tree - ndx_in_leaf; - size_t end_in_leaf = std::min(leaf->size(), end - leaf_offset); - leaf->find_all(&result, value, leaf_offset, ndx_in_leaf, end_in_leaf); // Throws - ndx_in_tree = leaf_offset + end_in_leaf; - } -} - -#if defined(REALM_DEBUG) -template -size_t BpTree::verify_leaf(MemRef mem, Allocator& alloc) -{ - LeafType leaf(alloc); - leaf.init_from_mem(mem); - leaf.verify(); - return leaf.size(); -} - -template -void BpTree::verify() const -{ - if (root_is_leaf()) { - root_as_leaf().verify(); - } - else { - root().verify_bptree(&verify_leaf); - } -} -#endif // REALM_DEBUG - -template -void BpTree::leaf_to_dot(MemRef leaf_mem, ArrayParent* parent, size_t ndx_in_parent, - std::ostream& out, Allocator& alloc) -{ - LeafType leaf(alloc); - leaf.init_from_mem(leaf_mem); - leaf.set_parent(parent, ndx_in_parent); - leaf.to_dot(out); -} - -} // namespace realm - -#endif // REALM_BPTREE_HPP diff --git a/Pods/Realm/include/core/realm/column.hpp b/Pods/Realm/include/core/realm/column.hpp deleted file mode 100644 index 14dbb47b..00000000 --- a/Pods/Realm/include/core/realm/column.hpp +++ /dev/null @@ -1,1480 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_HPP -#define REALM_COLUMN_HPP - -#include // unint8_t etc -#include // size_t -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - - -// Pre-definitions -struct CascadeState; -class StringIndex; - -template -struct ImplicitNull; - -template -struct ImplicitNull> { - static constexpr bool value = true; -}; - -template<> -struct ImplicitNull { - static constexpr bool value = false; -}; - -template<> -struct ImplicitNull { - static constexpr bool value = true; -}; - -template<> -struct ImplicitNull { - static constexpr bool value = true; -}; - -// FIXME: Add specialization for ImplicitNull for float, double, StringData, BinaryData. - -struct ColumnTemplateBase -{ - virtual int compare_values(size_t row1, size_t row2) const = 0; -}; - -template -R aggregate(const ColType& column, T target, size_t start, size_t end, - size_t limit, size_t* return_ndx); - -template -struct ColumnTemplate : public ColumnTemplateBase -{ - // Overridden in column_string.* because == operator of StringData isn't yet locale aware; todo - virtual int compare_values(size_t row1, size_t row2) const - { - // we negate nullability such that the two ternary statements in this method can look identical to reduce - // risk of bugs - bool v1 = !is_null(row1); - bool v2 = !is_null(row2); - - if (!v1 || !v2) - return v1 == v2 ? 0 : v1 < v2 ? 1 : -1; - - T a = get_val(row1); - T b = get_val(row2); - return a == b ? 0 : a < b ? 1 : -1; - } - - // We cannot use already-existing get() methods because StringEnumColumn and LinkList inherit from - // Column and overload get() with different return type than int64_t. Todo, find a way to simplify - virtual T get_val(size_t row) const = 0; - virtual bool is_null(size_t row) const = 0; -}; - -/// Base class for all column types. -class ColumnBase { -public: - /// Get the number of entries in this column. This operation is relatively - /// slow. - virtual size_t size() const noexcept = 0; - - /// \throw LogicError Thrown if this column is not string valued. - virtual void set_string(size_t row_ndx, StringData value); - - /// Whether or not this column is nullable. - virtual bool is_nullable() const noexcept; - - /// Whether or not the value at \a row_ndx is NULL. If the column is not - /// nullable, always returns false. - virtual bool is_null(size_t row_ndx) const noexcept; - - /// Sets the value at \a row_ndx to be NULL. - /// \throw LogicError Thrown if this column is not nullable. - virtual void set_null(size_t row_ndx); - - //@{ - - /// `insert_rows()` inserts the specified number of elements into this column - /// starting at the specified row index. The new elements will have the - /// default value for the column type. - /// - /// `erase_rows()` removes the specified number of consecutive elements from - /// this column, starting at the specified row index. - /// - /// `move_last_row_over()` removes the element at the specified row index by - /// moving the element at the last row index over it. This reduces the - /// number of elements by one. - /// - /// \param prior_num_rows The number of elements in this column prior to the - /// modification. - /// - /// \param broken_reciprocal_backlinks If true, link columns must assume - /// that reciprocal backlinks have already been removed. Non-link columns - /// should ignore this argument. - - virtual void insert_rows(size_t row_ndx, size_t num_rows_to_insert, size_t prior_num_rows, bool nullable) = 0; - virtual void erase_rows(size_t row_ndx, size_t num_rows_to_erase, size_t prior_num_rows, - bool broken_reciprocal_backlinks) = 0; - virtual void move_last_row_over(size_t row_ndx, size_t prior_num_rows, - bool broken_reciprocal_backlinks) = 0; - - //@} - - /// Remove all elements from this column. - /// - /// \param num_rows The total number of rows in this column. - /// - /// \param broken_reciprocal_backlinks If true, link columns must assume - /// that reciprocal backlinks have already been removed. Non-link columns - /// should ignore this argument. - virtual void clear(size_t num_rows, bool broken_reciprocal_backlinks) = 0; - - /// \brief Swap the elements at the specified indices. - /// - /// Behaviour is undefined if: - /// - \a row_ndx_1 or \a row_ndx_2 point to an invalid element (out-of - /// bounds) - /// - \a row_ndx_1 and \a row_ndx_2 point to the same value - virtual void swap_rows(size_t row_ndx_1, size_t row_ndx_2) = 0; - - virtual void destroy() noexcept = 0; - void move_assign(ColumnBase& col) noexcept; - - virtual ~ColumnBase() noexcept {} - - // Getter function for index. For integer index, the caller must supply a buffer that we can store the - // extracted value in (it may be bitpacked, so we cannot return a pointer in to the Array as we do with - // String index). - virtual StringData get_index_data(size_t, StringIndex::StringConversionBuffer& buffer) const noexcept = 0; - - // Search index - virtual bool has_search_index() const noexcept; - virtual StringIndex* create_search_index(); - virtual void destroy_search_index() noexcept; - virtual const StringIndex* get_search_index() const noexcept; - virtual StringIndex* get_search_index() noexcept; - virtual void set_search_index_ref(ref_type, ArrayParent*, size_t ndx_in_parent, - bool allow_duplicate_values); - virtual void set_search_index_allow_duplicate_values(bool) noexcept; - - virtual Allocator& get_alloc() const noexcept = 0; - - /// Returns the 'ref' of the root array. - virtual ref_type get_ref() const noexcept = 0; - virtual MemRef get_mem() const noexcept = 0; - - virtual void replace_root_array(std::unique_ptr leaf) = 0; - virtual MemRef clone_deep(Allocator& alloc) const = 0; - virtual void detach(void) = 0; - virtual bool is_attached(void) const noexcept = 0; - - static size_t get_size_from_type_and_ref(ColumnType, ref_type, Allocator&) noexcept; - - // These assume that the right column compile-time type has been - // figured out. - static size_t get_size_from_ref(ref_type root_ref, Allocator&); - static size_t get_size_from_ref(ref_type spec_ref, ref_type columns_ref, Allocator&); - - /// Write a slice of this column to the specified output stream. - virtual ref_type write(size_t slice_offset, size_t slice_size, - size_t table_size, _impl::OutputStream&) const = 0; - - virtual void set_parent(ArrayParent*, size_t ndx_in_parent) noexcept = 0; - virtual size_t get_ndx_in_parent() const noexcept = 0; - virtual void set_ndx_in_parent(size_t ndx_in_parent) noexcept = 0; - - /// Called to update refs and memory pointers of this column accessor and - /// all its nested accessors, but only in cases where the logical contents - /// in strictly unchanged. Group::commit(), and - /// SharedGroup::commit_and_continue_as_read()() are examples of such - /// cases. In both those cases, the purpose is to keep user visible - /// accessors in a valid state across a commit. - virtual void update_from_parent(size_t old_baseline) noexcept = 0; - - //@{ - - /// cascade_break_backlinks_to() is called iteratively for each column by - /// Table::cascade_break_backlinks_to() with the same arguments as are - /// passed to Table::cascade_break_backlinks_to(). Link columns must - /// override it. The same is true for cascade_break_backlinks_to_all_rows(), - /// except that it is called from - /// Table::cascade_break_backlinks_to_all_rows(), and that it expects - /// Table::cascade_break_backlinks_to_all_rows() to pass the number of rows - /// in the table as \a num_rows. - - virtual void cascade_break_backlinks_to(size_t row_ndx, CascadeState&); - virtual void cascade_break_backlinks_to_all_rows(size_t num_rows, CascadeState&); - - //@} - - void discard_child_accessors() noexcept; - - /// For columns that are able to contain subtables, this function returns - /// the pointer to the subtable accessor at the specified row index if it - /// exists, otherwise it returns null. For other column types, this function - /// returns null. - virtual Table* get_subtable_accessor(size_t row_ndx) const noexcept; - - /// Detach and remove the subtable accessor at the specified row if it - /// exists. For column types that are unable to contain subtable, this - /// function does nothing. - virtual void discard_subtable_accessor(size_t row_ndx) noexcept; - - virtual void adj_acc_insert_rows(size_t row_ndx, size_t num_rows) noexcept; - virtual void adj_acc_erase_row(size_t row_ndx) noexcept; - /// See Table::adj_acc_move_over() - virtual void adj_acc_move_over(size_t from_row_ndx, - size_t to_row_ndx) noexcept; - virtual void adj_acc_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept; - virtual void adj_acc_clear_root_table() noexcept; - - enum { - mark_Recursive = 0x01, - mark_LinkTargets = 0x02, - mark_LinkOrigins = 0x04 - }; - - virtual void mark(int type) noexcept; - - virtual void bump_link_origin_table_version() noexcept; - - /// Refresh the dirty part of the accessor subtree rooted at this column - /// accessor. - /// - /// The following conditions are necessary and sufficient for the proper - /// operation of this function: - /// - /// - The parent table accessor (excluding its column accessors) is in a - /// valid state (already refreshed). - /// - /// - Every subtable accessor in the subtree is marked dirty if it needs to - /// be refreshed, or if it has a descendant accessor that needs to be - /// refreshed. - /// - /// - This column accessor, as well as all its descendant accessors, are in - /// structural correspondence with the underlying node hierarchy whose - /// root ref is stored in the parent (`Table::m_columns`) (see - /// AccessorConsistencyLevels). - /// - /// - The 'index in parent' property of the cached root array - /// (`root->m_ndx_in_parent`) is valid. - virtual void refresh_accessor_tree(size_t new_col_ndx, const Spec&) = 0; - -#ifdef REALM_DEBUG - // Must be upper case to avoid conflict with macro in Objective-C - virtual void verify() const = 0; - virtual void verify(const Table&, size_t col_ndx) const; - virtual void to_dot(std::ostream&, StringData title = StringData()) const = 0; - void dump_node_structure() const; // To std::cerr (for GDB) - virtual void do_dump_node_structure(std::ostream&, int level) const = 0; - void bptree_to_dot(const Array* root, std::ostream& out) const; -#endif - -protected: - using SliceHandler = BpTreeBase::SliceHandler; - - ColumnBase() {} - ColumnBase(ColumnBase&&) = default; - - // Must not assume more than minimal consistency (see - // AccessorConsistencyLevels). - virtual void do_discard_child_accessors() noexcept {} - - //@{ - /// \tparam L Any type with an appropriate `value_type`, %size(), - /// and %get() members. - template - size_t lower_bound(const L& list, T value) const noexcept; - - template - size_t upper_bound(const L& list, T value) const noexcept; - //@} - - // Node functions - - class CreateHandler { - public: - virtual ref_type create_leaf(size_t size) = 0; - ~CreateHandler() noexcept {} - }; - - static ref_type create(Allocator&, size_t size, CreateHandler&); - -#ifdef REALM_DEBUG - class LeafToDot; - virtual void leaf_to_dot(MemRef, ArrayParent*, size_t ndx_in_parent, - std::ostream&) const = 0; -#endif - -private: - class WriteSliceHandler; - - static ref_type build(size_t* rest_size_ptr, size_t fixed_height, - Allocator&, CreateHandler&); -}; - - -// FIXME: Temporary class until all column types have been migrated to use BpTree interface -class ColumnBaseSimple : public ColumnBase { -public: - //@{ - /// Returns the array node at the root of this column, but note - /// that there is no guarantee that this node is an inner B+-tree - /// node or a leaf. This is the case for a MixedColumn in - /// particular. - Array* get_root_array() noexcept { return m_array.get(); } - const Array* get_root_array() const noexcept { return m_array.get(); } - //@} - - Allocator& get_alloc() const noexcept final { return m_array->get_alloc(); } - void destroy() noexcept override { if (m_array) m_array->destroy_deep(); } - ref_type get_ref() const noexcept final { return m_array->get_ref(); } - MemRef get_mem() const noexcept final { return m_array->get_mem(); } - void detach() noexcept final { m_array->detach(); } - bool is_attached() const noexcept final { return m_array->is_attached(); } - void set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept final { m_array->set_parent(parent, ndx_in_parent); } - size_t get_ndx_in_parent() const noexcept final { return m_array->get_ndx_in_parent(); } - void set_ndx_in_parent(size_t ndx_in_parent) noexcept override { m_array->set_ndx_in_parent(ndx_in_parent); } - void update_from_parent(size_t old_baseline) noexcept override { m_array->update_from_parent(old_baseline); } - MemRef clone_deep(Allocator& alloc) const override { return m_array->clone_deep(alloc); } - -protected: - ColumnBaseSimple() {} - ColumnBaseSimple(Array* root) : m_array(root) {} - std::unique_ptr m_array; - - void replace_root_array(std::unique_ptr new_root) final; - bool root_is_leaf() const noexcept { return !m_array->is_inner_bptree_node(); } - - /// Introduce a new root node which increments the height of the - /// tree by one. - void introduce_new_root(ref_type new_sibling_ref, Array::TreeInsertBase& state, - bool is_append); - - static ref_type write(const Array* root, size_t slice_offset, size_t slice_size, - size_t table_size, SliceHandler&, _impl::OutputStream&); - -#if defined(REALM_DEBUG) - void tree_to_dot(std::ostream&) const; -#endif -}; - -class ColumnBaseWithIndex : public ColumnBase { -public: - ~ColumnBaseWithIndex() noexcept override {} - void set_ndx_in_parent(size_t ndx) noexcept override; - void update_from_parent(size_t old_baseline) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - void move_assign(ColumnBaseWithIndex& col) noexcept; - void destroy() noexcept override; - - bool has_search_index() const noexcept final { return bool(m_search_index); } - StringIndex* get_search_index() noexcept final { return m_search_index.get(); } - const StringIndex* get_search_index() const noexcept final { return m_search_index.get(); } - void destroy_search_index() noexcept override; - void set_search_index_ref(ref_type ref, ArrayParent* parent, - size_t ndx_in_parent, bool allow_duplicate_valaues) final; - StringIndex* create_search_index() override = 0; -protected: - ColumnBaseWithIndex() {} - ColumnBaseWithIndex(ColumnBaseWithIndex&&) = default; - std::unique_ptr m_search_index; -}; - - -/// A column (Column) is a single B+-tree, and the root of -/// the column is the root of the B+-tree. All leaf nodes are arrays. -template -class Column : public ColumnBaseWithIndex, public ColumnTemplate { -public: - using value_type = T; - using LeafInfo = typename BpTree::LeafInfo; - using LeafType = typename BpTree::LeafType; - - static constexpr bool nullable = ImplicitNull::value; - - struct unattached_root_tag {}; - - explicit Column() noexcept : m_tree(Allocator::get_default()) {} - explicit Column(std::unique_ptr root) noexcept; - Column(Allocator&, ref_type); - Column(unattached_root_tag, Allocator&); - Column(Column&&) noexcept = default; - ~Column() noexcept override; - - void init_from_parent(); - void init_from_ref(Allocator&, ref_type); - void init_from_mem(Allocator&, MemRef); - // Accessor concept: - void destroy() noexcept override; - Allocator& get_alloc() const noexcept final; - ref_type get_ref() const noexcept final; - MemRef get_mem() const noexcept final; - void set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept override; - size_t get_ndx_in_parent() const noexcept final; - void set_ndx_in_parent(size_t ndx) noexcept final; - void update_from_parent(size_t old_baseline) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - void detach() noexcept final; - bool is_attached() const noexcept final; - MemRef clone_deep(Allocator&) const override; - - void move_assign(Column&); - - size_t size() const noexcept override; - bool is_empty() const noexcept { return size() == 0; } - bool is_nullable() const noexcept override; - - /// Provides access to the leaf that contains the element at the - /// specified index. Upon return \a ndx_in_leaf will be set to the - /// corresponding index relative to the beginning of the leaf. - /// - /// LeafInfo is a struct defined by the underlying BpTree - /// data structure, that provides a way for the caller to do - /// leaf caching without instantiating too many objects along - /// the way. - /// - /// This function cannot be used for modifying operations as it - /// does not ensure the presence of an unbroken chain of parent - /// accessors. For this reason, the identified leaf should always - /// be accessed through the returned const-qualified reference, - /// and never directly through the specfied fallback accessor. - void get_leaf(size_t ndx, size_t& ndx_in_leaf, - LeafInfo& inout_leaf) const noexcept; - - // Getting and setting values - T get_val(size_t ndx) const noexcept final { return get(ndx); } - T get(size_t ndx) const noexcept; - bool is_null(size_t ndx) const noexcept override; - T back() const noexcept; - void set(size_t, T value); - void set_null(size_t) override; - void add(T value = T{}); - void insert(size_t ndx, T value = T{}, size_t num_rows = 1); - void erase(size_t row_ndx); - void erase(size_t row_ndx, bool is_last); - void move_last_over(size_t row_ndx, size_t last_row_ndx); - void clear(); - - // Index support - StringData get_index_data(size_t ndx, StringIndex::StringConversionBuffer& buffer) const noexcept override; - - // FIXME: Remove these - uint64_t get_uint(size_t ndx) const noexcept; - ref_type get_as_ref(size_t ndx) const noexcept; - void set_uint(size_t ndx, uint64_t value); - void set_as_ref(size_t ndx, ref_type value); - - template - void adjust(size_t ndx, U diff); - - template - void adjust(U diff); - - template - void adjust_ge(T limit, U diff); - - size_t count(T target) const; - - typename ColumnTypeTraits::sum_type - sum(size_t start = 0, size_t end = npos, size_t limit = npos, size_t* return_ndx = nullptr) const; - - typename ColumnTypeTraits::minmax_type - maximum(size_t start = 0, size_t end = npos, size_t limit = npos, size_t* return_ndx = nullptr) const; - - typename ColumnTypeTraits::minmax_type - minimum(size_t start = 0, size_t end = npos, size_t limit = npos, size_t* return_ndx = nullptr) const; - - double average(size_t start = 0, size_t end = npos, size_t limit = npos, - size_t* return_ndx = nullptr) const; - - size_t find_first(T value, size_t begin = 0, size_t end = npos) const; - void find_all(Column& out_indices, T value, - size_t begin = 0, size_t end = npos) const; - - void populate_search_index(); - StringIndex* create_search_index() override; - - //@{ - /// Find the lower/upper bound for the specified value assuming - /// that the elements are already sorted in ascending order - /// according to ordinary integer comparison. - size_t lower_bound(T value) const noexcept; - size_t upper_bound(T value) const noexcept; - //@} - - size_t find_gte(T target, size_t start) const; - - bool compare(const Column&) const noexcept; - - static ref_type create(Allocator&, Array::Type leaf_type = Array::type_Normal, - size_t size = 0, T value = T{}); - - // Overriding method in ColumnBase - ref_type write(size_t, size_t, size_t, - _impl::OutputStream&) const override; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - - /// \brief Swap the elements at the specified indices. - /// - /// If this \c Column has a search index defined, it will be updated to - /// reflect the changes induced by the swap. - /// - /// Behaviour is undefined if: - /// - \a row_ndx_1 or \a row_ndx_2 point to an invalid element (out-of - /// bounds) - /// - \a row_ndx_1 and \a row_ndx_2 point to the same value - void swap_rows(size_t, size_t) override; - void clear(size_t, bool) override; - - /// \param row_ndx Must be `realm::npos` if appending. - void insert_without_updating_index(size_t row_ndx, T value, size_t num_rows); - -#ifdef REALM_DEBUG - void verify() const override; - using ColumnBase::verify; - void to_dot(std::ostream&, StringData title) const override; - void tree_to_dot(std::ostream&) const; - MemStats stats() const; - void do_dump_node_structure(std::ostream&, int) const override; -#endif - - //@{ - /// Returns the array node at the root of this column, but note - /// that there is no guarantee that this node is an inner B+-tree - /// node or a leaf. This is the case for a MixedColumn in - /// particular. - Array* get_root_array() noexcept { return &m_tree.root(); } - const Array* get_root_array() const noexcept { return &m_tree.root(); } - //@} - -protected: - bool root_is_leaf() const noexcept { return m_tree.root_is_leaf(); } - void replace_root_array(std::unique_ptr leaf) final { m_tree.replace_root(std::move(leaf)); } - - void set_without_updating_index(size_t row_ndx, T value); - void erase_without_updating_index(size_t row_ndx, bool is_last); - void move_last_over_without_updating_index(size_t row_ndx, size_t last_row_ndx); - void swap_rows_without_updating_index(size_t row_ndx_1, size_t row_ndx_2); - - /// If any element points to an array node, this function recursively - /// destroys that array node. Note that the same is **not** true for - /// IntegerColumn::do_erase() and IntegerColumn::do_move_last_over(). - /// - /// FIXME: Be careful, clear_without_updating_index() currently forgets - /// if the leaf type is Array::type_HasRefs. - void clear_without_updating_index(); - -#ifdef REALM_DEBUG - void leaf_to_dot(MemRef, ArrayParent*, size_t ndx_in_parent, - std::ostream&) const override; - static void dump_node_structure(const Array& root, std::ostream&, int level); -#endif - -private: - class EraseLeafElem; - class CreateHandler; - class SliceHandler; - - friend class Array; - friend class ColumnBase; - friend class StringIndex; - - BpTree m_tree; - - void do_erase(size_t row_ndx, size_t num_rows_to_erase, bool is_last); -}; - -// Implementation: - -inline bool ColumnBase::has_search_index() const noexcept -{ - return get_search_index() != nullptr; -} - -inline StringIndex* ColumnBase::create_search_index() -{ - return nullptr; -} - -inline void ColumnBase::destroy_search_index() noexcept -{ -} - -inline const StringIndex* ColumnBase::get_search_index() const noexcept -{ - return nullptr; -} - -inline StringIndex* ColumnBase::get_search_index() noexcept -{ - return nullptr; -} - -inline void ColumnBase::set_search_index_ref(ref_type, ArrayParent*, size_t, bool) -{ -} - -inline void ColumnBase::set_search_index_allow_duplicate_values(bool) noexcept -{ -} - -inline void ColumnBase::discard_child_accessors() noexcept -{ - do_discard_child_accessors(); -} - -inline Table* ColumnBase::get_subtable_accessor(size_t) const noexcept -{ - return 0; -} - -inline void ColumnBase::discard_subtable_accessor(size_t) noexcept -{ - // Noop -} - -inline void ColumnBase::adj_acc_insert_rows(size_t, size_t) noexcept -{ - // Noop -} - -inline void ColumnBase::adj_acc_erase_row(size_t) noexcept -{ - // Noop -} - -inline void ColumnBase::adj_acc_move_over(size_t, size_t) noexcept -{ - // Noop -} - -inline void ColumnBase::adj_acc_swap_rows(size_t, size_t) noexcept -{ - // Noop -} - -inline void ColumnBase::adj_acc_clear_root_table() noexcept -{ - // Noop -} - -inline void ColumnBase::mark(int) noexcept -{ - // Noop -} - -inline void ColumnBase::bump_link_origin_table_version() noexcept -{ - // Noop -} - -template -void Column::set_without_updating_index(size_t ndx, T value) -{ - m_tree.set(ndx, std::move(value)); -} - -template -void Column::set(size_t ndx, T value) -{ - REALM_ASSERT_DEBUG(ndx < size()); - if (has_search_index()) { - m_search_index->set(ndx, value); - } - set_without_updating_index(ndx, std::move(value)); -} - -template -void Column::set_null(size_t ndx) -{ - REALM_ASSERT_DEBUG(ndx < size()); - if (!is_nullable()) { - throw LogicError{LogicError::column_not_nullable}; - } - if (has_search_index()) { - m_search_index->set(ndx, null{}); - } - m_tree.set_null(ndx); -} - -// When a value of a signed type is converted to an unsigned type, the C++ standard guarantees that negative values -// are converted from the native representation to 2's complement, but the opposite conversion is left as undefined. -// realm::util::from_twos_compl() is used here to perform the correct opposite unsigned-to-signed conversion, -// which reduces to a no-op when 2's complement is the native representation of negative values. -template -void Column::set_uint(size_t ndx, uint64_t value) -{ - set(ndx, util::from_twos_compl(value)); -} - -template -void Column::set_as_ref(size_t ndx, ref_type ref) -{ - set(ndx, from_ref(ref)); -} - -template -template -void Column::adjust(size_t ndx, U diff) -{ - REALM_ASSERT_3(ndx, <, size()); - m_tree.adjust(ndx, diff); -} - -template -template -void Column::adjust(U diff) -{ - m_tree.adjust(diff); -} - -template -template -void Column::adjust_ge(T limit, U diff) -{ - m_tree.adjust_ge(limit, diff); -} - -template -size_t Column::count(T target) const -{ - if (has_search_index()) { - return m_search_index->count(target); - } - return to_size_t(aggregate(*this, target, 0, size(), npos, nullptr)); -} - -template -typename ColumnTypeTraits::sum_type -Column::sum(size_t start, size_t end, size_t limit, size_t* return_ndx) const -{ - using sum_type = typename ColumnTypeTraits::sum_type; - if (nullable) - return aggregate(*this, 0, start, end, limit, return_ndx); - else - return aggregate(*this, 0, start, end, limit, return_ndx); -} - -template -double Column::average(size_t start, size_t end, size_t limit, size_t* return_ndx) const -{ - if (end == size_t(-1)) - end = size(); - - auto s = sum(start, end, limit); - size_t cnt = to_size_t(aggregate(*this, 0, start, end, limit, nullptr)); - if (return_ndx) - *return_ndx = cnt; - double avg = double(s) / (cnt == 0 ? 1 : cnt); - return avg; -} - -template -typename ColumnTypeTraits::minmax_type -Column::minimum(size_t start, size_t end, size_t limit, size_t* return_ndx) const -{ - using R = typename ColumnTypeTraits::minmax_type; - return aggregate(*this, 0, start, end, limit, return_ndx); -} - -template -typename ColumnTypeTraits::minmax_type -Column::maximum(size_t start, size_t end, size_t limit, size_t* return_ndx) const -{ - using R = typename ColumnTypeTraits::minmax_type; - return aggregate(*this, 0, start, end, limit, return_ndx); -} - -template -void Column::get_leaf(size_t ndx, size_t& ndx_in_leaf, - typename BpTree::LeafInfo& inout_leaf_info) const noexcept -{ - m_tree.get_leaf(ndx, ndx_in_leaf, inout_leaf_info); -} - -template -StringData Column::get_index_data(size_t ndx, StringIndex::StringConversionBuffer& buffer) const noexcept -{ - T x = get(ndx); - return to_str(x, buffer); -} - -template -void Column::populate_search_index() -{ - REALM_ASSERT(has_search_index()); - // Populate the index - size_t num_rows = size(); - for (size_t row_ndx = 0; row_ndx != num_rows; ++row_ndx) { - bool is_append = true; - if (is_null(row_ndx)) { - m_search_index->insert(row_ndx, null{}, 1, is_append); // Throws - } - else { - T value = get(row_ndx); - m_search_index->insert(row_ndx, value, 1, is_append); // Throws - } - } -} - -template -StringIndex* Column::create_search_index() -{ - REALM_ASSERT(!has_search_index()); - m_search_index.reset(new StringIndex(this, get_alloc())); // Throws - populate_search_index(); - return m_search_index.get(); -} - -template -size_t Column::find_first(T value, size_t begin, size_t end) const -{ - REALM_ASSERT_3(begin, <=, size()); - REALM_ASSERT(end == npos || (begin <= end && end <= size())); - - if (m_search_index && begin == 0 && end == npos) - return m_search_index->find_first(value); - return m_tree.find_first(value, begin, end); -} - -template -void Column::find_all(IntegerColumn& result, T value, size_t begin, size_t end) const -{ - REALM_ASSERT_3(begin, <=, size()); - REALM_ASSERT(end == npos || (begin <= end && end <= size())); - - if (m_search_index && begin == 0 && end == npos) - return m_search_index->find_all(result, value); - return m_tree.find_all(result, value, begin, end); -} - -inline size_t ColumnBase::get_size_from_ref(ref_type root_ref, Allocator& alloc) -{ - const char* root_header = alloc.translate(root_ref); - bool root_is_leaf = !Array::get_is_inner_bptree_node_from_header(root_header); - if (root_is_leaf) - return Array::get_size_from_header(root_header); - return Array::get_bptree_size_from_header(root_header); -} - -template -size_t ColumnBase::lower_bound(const L& list, T value) const noexcept -{ - size_t i = 0; - size_t size = list.size(); - while (0 < size) { - size_t half = size / 2; - size_t mid = i + half; - typename L::value_type probe = list.get(mid); - if (probe < value) { - i = mid + 1; - size -= half + 1; - } - else { - size = half; - } - } - return i; -} - -template -size_t ColumnBase::upper_bound(const L& list, T value) const noexcept -{ - size_t i = 0; - size_t size = list.size(); - while (0 < size) { - size_t half = size / 2; - size_t mid = i + half; - typename L::value_type probe = list.get(mid); - if (!(value < probe)) { - i = mid + 1; - size -= half + 1; - } - else { - size = half; - } - } - return i; -} - - -inline ref_type ColumnBase::create(Allocator& alloc, size_t size, CreateHandler& handler) -{ - size_t rest_size = size; - size_t fixed_height = 0; // Not fixed - return build(&rest_size, fixed_height, alloc, handler); -} - -template -Column::Column(Allocator& alloc, ref_type ref) : m_tree(BpTreeBase::unattached_tag{}) -{ - // fixme, must m_search_index be copied here? - m_tree.init_from_ref(alloc, ref); -} - -template -Column::Column(unattached_root_tag, Allocator& alloc) : m_tree(alloc) -{ -} - -template -Column::Column(std::unique_ptr root) noexcept : m_tree(std::move(root)) -{ -} - -template -Column::~Column() noexcept -{ -} - -template -void Column::init_from_parent() -{ - m_tree.init_from_parent(); -} - -template -void Column::init_from_ref(Allocator& alloc, ref_type ref) -{ - m_tree.init_from_ref(alloc, ref); -} - -template -void Column::init_from_mem(Allocator& alloc, MemRef mem) -{ - m_tree.init_from_mem(alloc, mem); -} - -template -void Column::destroy() noexcept -{ - ColumnBaseWithIndex::destroy(); - m_tree.destroy(); -} - -template -void Column::move_assign(Column& col) -{ - ColumnBaseWithIndex::move_assign(col); - m_tree = std::move(col.m_tree); -} - -template -Allocator& Column::get_alloc() const noexcept -{ - return m_tree.get_alloc(); -} - -template -void Column::set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept -{ - m_tree.set_parent(parent, ndx_in_parent); -} - -template -size_t Column::get_ndx_in_parent() const noexcept -{ - return m_tree.get_ndx_in_parent(); -} - -template -void Column::set_ndx_in_parent(size_t ndx_in_parent) noexcept -{ - ColumnBaseWithIndex::set_ndx_in_parent(ndx_in_parent); - m_tree.set_ndx_in_parent(ndx_in_parent); -} - -template -void Column::detach() noexcept -{ - m_tree.detach(); -} - -template -bool Column::is_attached() const noexcept -{ - return m_tree.is_attached(); -} - -template -ref_type Column::get_ref() const noexcept -{ - return get_root_array()->get_ref(); -} - -template -MemRef Column::get_mem() const noexcept -{ - return get_root_array()->get_mem(); -} - -template -void Column::update_from_parent(size_t old_baseline) noexcept -{ - ColumnBaseWithIndex::update_from_parent(old_baseline); - m_tree.update_from_parent(old_baseline); -} - -template -MemRef Column::clone_deep(Allocator& alloc) const -{ - return m_tree.clone_deep(alloc); -} - -template -size_t Column::size() const noexcept -{ - return m_tree.size(); -} - -template -bool Column::is_nullable() const noexcept -{ - return nullable; -} - -template -T Column::get(size_t ndx) const noexcept -{ - return m_tree.get(ndx); -} - -template -bool Column::is_null(size_t ndx) const noexcept -{ - return m_tree.is_null(ndx); -} - -template -T Column::back() const noexcept -{ - return m_tree.back(); -} - -template -ref_type Column::get_as_ref(size_t ndx) const noexcept -{ - return to_ref(get(ndx)); -} - -template -uint64_t Column::get_uint(size_t ndx) const noexcept -{ - static_assert(std::is_convertible::value, "T is not convertible to uint."); - return static_cast(get(ndx)); -} - -template -void Column::add(T value) -{ - insert(npos, std::move(value)); -} - -template -void Column::insert_without_updating_index(size_t row_ndx, T value, size_t num_rows) -{ - size_t size = this->size(); // Slow - bool is_append = row_ndx == size || row_ndx == npos; - size_t ndx_or_npos_if_append = is_append ? npos : row_ndx; - - m_tree.insert(ndx_or_npos_if_append, std::move(value), num_rows); // Throws -} - -template -void Column::insert(size_t row_ndx, T value, size_t num_rows) -{ - size_t size = this->size(); // Slow - bool is_append = row_ndx == size || row_ndx == npos; - size_t ndx_or_npos_if_append = is_append ? npos : row_ndx; - - m_tree.insert(ndx_or_npos_if_append, value, num_rows); // Throws - - if (has_search_index()) { - row_ndx = is_append ? size : row_ndx; - m_search_index->insert(row_ndx, value, num_rows, is_append); // Throws - } -} - -template -void Column::erase_without_updating_index(size_t row_ndx, bool is_last) -{ - m_tree.erase(row_ndx, is_last); -} - -template -void Column::erase(size_t row_ndx) -{ - REALM_ASSERT(size() >= 1); - size_t last_row_ndx = size() - 1; // Note that size() is slow - bool is_last = (row_ndx == last_row_ndx); - erase(row_ndx, is_last); // Throws -} - -template -void Column::erase(size_t row_ndx, bool is_last) -{ - size_t num_rows_to_erase = 1; - do_erase(row_ndx, num_rows_to_erase, is_last); // Throws -} - -template -void Column::move_last_over_without_updating_index(size_t row_ndx, size_t last_row_ndx) -{ - m_tree.move_last_over(row_ndx, last_row_ndx); -} - -template -void Column::move_last_over(size_t row_ndx, size_t last_row_ndx) -{ - REALM_ASSERT_3(row_ndx, <=, last_row_ndx); - REALM_ASSERT_DEBUG(last_row_ndx + 1 == size()); - - if (has_search_index()) { - // remove the value to be overwritten from index - bool is_last = true; // This tells StringIndex::erase() to not adjust subsequent indexes - m_search_index->erase(row_ndx, is_last); // Throws - - // update index to point to new location - if (row_ndx != last_row_ndx) { - T moved_value = get(last_row_ndx); - m_search_index->update_ref(moved_value, last_row_ndx, row_ndx); // Throws - } - } - - move_last_over_without_updating_index(row_ndx, last_row_ndx); -} - -template -void Column::swap_rows(size_t row_ndx_1, size_t row_ndx_2) -{ - REALM_ASSERT_3(row_ndx_1, <, size()); - REALM_ASSERT_3(row_ndx_2, <, size()); - REALM_ASSERT_DEBUG(row_ndx_1 != row_ndx_2); - - if (has_search_index()) { - T value_1 = get(row_ndx_1); - T value_2 = get(row_ndx_2); - size_t size = this->size(); - bool row_ndx_1_is_last = row_ndx_1 == size - 1; - bool row_ndx_2_is_last = row_ndx_2 == size - 1; - m_search_index->erase(row_ndx_1, row_ndx_1_is_last); - m_search_index->insert(row_ndx_1, value_2, 1, row_ndx_1_is_last); - - m_search_index->erase(row_ndx_2, row_ndx_2_is_last); - m_search_index->insert(row_ndx_2, value_1, 1, row_ndx_2_is_last); - } - - swap_rows_without_updating_index(row_ndx_1, row_ndx_2); -} - -template -void Column::swap_rows_without_updating_index(size_t row_ndx_1, size_t row_ndx_2) -{ - // FIXME: This can be optimized with direct getters and setters. - T value_1 = get(row_ndx_1); - T value_2 = get(row_ndx_2); - m_tree.set(row_ndx_1, value_2); - m_tree.set(row_ndx_2, value_1); -} - -template -void Column::clear_without_updating_index() -{ - m_tree.clear(); // Throws -} - -template -void Column::clear() -{ - if (has_search_index()) { - m_search_index->clear(); - } - clear_without_updating_index(); -} - -template struct NullOrDefaultValue; -template struct NullOrDefaultValue::value>::type> { - static T null_or_default_value(bool is_null) - { - if (is_null) { - return null::get_null_float(); - } - else { - return T{}; - } - } -}; -template struct NullOrDefaultValue, void> { - static util::Optional null_or_default_value(bool is_null) - { - if (is_null) { - return util::none; - } - else { - return util::some(T{}); - } - } -}; -template struct NullOrDefaultValue::value>::type> { - static T null_or_default_value(bool is_null) - { - REALM_ASSERT(!is_null); - return T{}; - } -}; - -// Implementing pure virtual method of ColumnBase. -template -void Column::insert_rows(size_t row_ndx, size_t num_rows_to_insert, size_t prior_num_rows, bool insert_nulls) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx <= prior_num_rows); - - size_t row_ndx_2 = (row_ndx == prior_num_rows ? realm::npos : row_ndx); - T value = NullOrDefaultValue::null_or_default_value(insert_nulls); - insert(row_ndx_2, value, num_rows_to_insert); // Throws -} - -// Implementing pure virtual method of ColumnBase. -template -void Column::erase_rows(size_t row_ndx, size_t num_rows_to_erase, size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(num_rows_to_erase <= prior_num_rows); - REALM_ASSERT(row_ndx <= prior_num_rows - num_rows_to_erase); - - bool is_last = (row_ndx + num_rows_to_erase == prior_num_rows); - do_erase(row_ndx, num_rows_to_erase, is_last); // Throws -} - -// Implementing pure virtual method of ColumnBase. -template -void Column::move_last_row_over(size_t row_ndx, size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx < prior_num_rows); - - size_t last_row_ndx = prior_num_rows - 1; - move_last_over(row_ndx, last_row_ndx); // Throws -} - -// Implementing pure virtual method of ColumnBase. -template -void Column::clear(size_t, bool) -{ - clear(); // Throws -} - - -template -size_t Column::lower_bound(T value) const noexcept -{ - if (root_is_leaf()) { - auto root = static_cast(get_root_array()); - return root->lower_bound(value); - } - return ColumnBase::lower_bound(*this, value); -} - -template -size_t Column::upper_bound(T value) const noexcept -{ - if (root_is_leaf()) { - auto root = static_cast(get_root_array()); - return root->upper_bound(value); - } - return ColumnBase::upper_bound(*this, value); -} - -// For a *sorted* Column, return first element E for which E >= target or return -1 if none -template -size_t Column::find_gte(T target, size_t start) const -{ - // fixme: slow reference implementation. See Array::find_gte for faster version - size_t ref = 0; - size_t idx; - for (idx = start; idx < size(); ++idx) { - if (get(idx) >= target) { - ref = idx; - break; - } - } - if (idx == size()) - ref = not_found; - - return ref; -} - - -template -bool Column::compare(const Column& c) const noexcept -{ - size_t n = size(); - if (c.size() != n) - return false; - for (size_t i=0; i -class Column::CreateHandler: public ColumnBase::CreateHandler { -public: - CreateHandler(Array::Type leaf_type, T value, Allocator& alloc): - m_value(value), m_alloc(alloc), m_leaf_type(leaf_type) {} - ref_type create_leaf(size_t size) override - { - MemRef mem = BpTree::create_leaf(m_leaf_type, size, m_value, m_alloc); // Throws - return mem.m_ref; - } -private: - const T m_value; - Allocator& m_alloc; - Array::Type m_leaf_type; -}; - -template -ref_type Column::create(Allocator& alloc, Array::Type leaf_type, size_t size, T value) -{ - CreateHandler handler(leaf_type, std::move(value), alloc); - return ColumnBase::create(alloc, size, handler); -} - -template -ref_type Column::write(size_t slice_offset, size_t slice_size, - size_t table_size, _impl::OutputStream& out) const -{ - return m_tree.write(slice_offset, slice_size, table_size, out); -} - -template -void Column::refresh_accessor_tree(size_t new_col_ndx, const Spec& spec) -{ - m_tree.init_from_parent(); - ColumnBaseWithIndex::refresh_accessor_tree(new_col_ndx, spec); -} - -template -void Column::do_erase(size_t row_ndx, size_t num_rows_to_erase, bool is_last) -{ - if (has_search_index()) { - for (size_t i = num_rows_to_erase; i > 0; --i) { - size_t row_ndx_2 = row_ndx + i - 1; - m_search_index->erase(row_ndx_2, is_last); // Throws - } - } - for (size_t i = num_rows_to_erase; i > 0; --i) { - size_t row_ndx_2 = row_ndx + i - 1; - erase_without_updating_index(row_ndx_2, is_last); // Throws - } -} - -#ifdef REALM_DEBUG - -template -void Column::verify() const -{ - m_tree.verify(); -} - -template -void Column::to_dot(std::ostream& out, StringData title) const -{ - ref_type ref = get_root_array()->get_ref(); - out << "subgraph cluster_integer_column" << ref << " {" << std::endl; - out << " label = \"Integer column"; - if (title.size() != 0) - out << "\\n'" << title << "'"; - out << "\";" << std::endl; - tree_to_dot(out); - out << "}" << std::endl; -} - -template -void Column::tree_to_dot(std::ostream& out) const -{ - ColumnBase::bptree_to_dot(get_root_array(), out); -} - -template -void Column::leaf_to_dot(MemRef leaf_mem, ArrayParent* parent, size_t ndx_in_parent, - std::ostream& out) const -{ - BpTree::leaf_to_dot(leaf_mem, parent, ndx_in_parent, out, get_alloc()); -} - -template -MemStats Column::stats() const -{ - MemStats stats; - get_root_array()->stats(stats); - return stats; -} - - -namespace _impl { - void leaf_dumper(MemRef mem, Allocator& alloc, std::ostream& out, int level); -} - -template -void Column::do_dump_node_structure(std::ostream& out, int level) const -{ - dump_node_structure(*get_root_array(), out, level); -} - -template -void Column::dump_node_structure(const Array& root, std::ostream& out, int level) -{ - root.dump_bptree_structure(out, level, &_impl::leaf_dumper); -} - -#endif // REALM_DEBUG - - -} // namespace realm - -#endif // REALM_COLUMN_HPP diff --git a/Pods/Realm/include/core/realm/column_backlink.hpp b/Pods/Realm/include/core/realm/column_backlink.hpp deleted file mode 100644 index 8640e79c..00000000 --- a/Pods/Realm/include/core/realm/column_backlink.hpp +++ /dev/null @@ -1,234 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_BACKLINK_HPP -#define REALM_COLUMN_BACKLINK_HPP - -#include - -#include -#include -#include - -namespace realm { - -/// A column of backlinks (BacklinkColumn) is a single B+-tree, and the root of -/// the column is the root of the B+-tree. All leaf nodes are single arrays of -/// type Array with the hasRefs bit set. -/// -/// The individual values in the column are either refs to Columns containing -/// the row indexes in the origin table that links to it, or in the case where -/// there is a single link, a tagged ref encoding the origin row position. -class BacklinkColumn: public IntegerColumn, public ArrayParent { -public: - BacklinkColumn(Allocator&, ref_type); - ~BacklinkColumn() noexcept override {} - - static ref_type create(Allocator&, size_t size = 0); - - bool has_backlinks(size_t row_ndx) const noexcept; - size_t get_backlink_count(size_t row_ndx) const noexcept; - size_t get_backlink(size_t row_ndx, size_t backlink_ndx) const noexcept; - - void add_backlink(size_t row_ndx, size_t origin_row_ndx); - void remove_one_backlink(size_t row_ndx, size_t origin_row_ndx); - void remove_all_backlinks(size_t num_rows); - void update_backlink(size_t row_ndx, size_t old_origin_row_ndx, - size_t new_origin_row_ndx); - void swap_backlinks(size_t row_ndx, size_t origin_row_ndx_1, - size_t origin_row_ndx_2); - - void add_row(); - - // Link origination info - Table& get_origin_table() const noexcept; - void set_origin_table(Table&) noexcept; - LinkColumnBase& get_origin_column() const noexcept; - size_t get_origin_column_index() const noexcept; - void set_origin_column(LinkColumnBase& column, size_t col_ndx) noexcept; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void swap_rows(size_t, size_t) override; - void clear(size_t, bool) override; - void adj_acc_insert_rows(size_t, size_t) noexcept override; - void adj_acc_erase_row(size_t) noexcept override; - void adj_acc_move_over(size_t, size_t) noexcept override; - void adj_acc_swap_rows(size_t, size_t) noexcept override; - void adj_acc_clear_root_table() noexcept override; - void mark(int) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - - void bump_link_origin_table_version() noexcept override; - - void cascade_break_backlinks_to(size_t row_ndx, CascadeState& state) override; - void cascade_break_backlinks_to_all_rows(size_t num_rows, CascadeState&) override; - -#ifdef REALM_DEBUG - void verify() const override; - void verify(const Table&, size_t) const override; - struct VerifyPair { - size_t origin_row_ndx, target_row_ndx; - bool operator<(const VerifyPair&) const noexcept; - }; - void get_backlinks(std::vector&); // Sorts -#endif - -protected: - // ArrayParent overrides - void update_child_ref(size_t child_ndx, ref_type new_ref) override; - ref_type get_child_ref(size_t child_ndx) const noexcept override; - -#ifdef REALM_DEBUG - std::pair get_to_dot_parent(size_t) const override; -#endif - -private: - TableRef m_origin_table; - LinkColumnBase* m_origin_column = nullptr; - size_t m_origin_column_ndx = npos; - - template - size_t for_each_link(size_t row_ndx, bool do_destroy, Func&& f); -}; - - - - -// Implementation - -inline BacklinkColumn::BacklinkColumn(Allocator& alloc, ref_type ref): - IntegerColumn(alloc, ref) // Throws -{ -} - -inline ref_type BacklinkColumn::create(Allocator& alloc, size_t size) -{ - return IntegerColumn::create(alloc, Array::type_HasRefs, size); // Throws -} - -inline bool BacklinkColumn::has_backlinks(size_t ndx) const noexcept -{ - return IntegerColumn::get(ndx) != 0; -} - -inline Table& BacklinkColumn::get_origin_table() const noexcept -{ - return *m_origin_table; -} - -inline void BacklinkColumn::set_origin_table(Table& table) noexcept -{ - REALM_ASSERT(!m_origin_table); - m_origin_table = table.get_table_ref(); -} - -inline LinkColumnBase& BacklinkColumn::get_origin_column() const noexcept -{ - return *m_origin_column; -} - -inline size_t BacklinkColumn::get_origin_column_index() const noexcept -{ - return m_origin_column_ndx; -} - -inline void BacklinkColumn::set_origin_column(LinkColumnBase& column, size_t col_ndx) noexcept -{ - m_origin_column = &column; - m_origin_column_ndx = col_ndx; -} - -inline void BacklinkColumn::add_row() -{ - IntegerColumn::add(0); -} - -inline void BacklinkColumn::adj_acc_insert_rows(size_t row_ndx, - size_t num_rows) noexcept -{ - IntegerColumn::adj_acc_insert_rows(row_ndx, num_rows); - - typedef _impl::TableFriend tf; - tf::mark(*m_origin_table); -} - -inline void BacklinkColumn::adj_acc_erase_row(size_t row_ndx) noexcept -{ - IntegerColumn::adj_acc_erase_row(row_ndx); - - typedef _impl::TableFriend tf; - tf::mark(*m_origin_table); -} - -inline void BacklinkColumn::adj_acc_move_over(size_t from_row_ndx, - size_t to_row_ndx) noexcept -{ - IntegerColumn::adj_acc_move_over(from_row_ndx, to_row_ndx); - - typedef _impl::TableFriend tf; - tf::mark(*m_origin_table); -} - -inline void BacklinkColumn::adj_acc_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept -{ - Column::adj_acc_swap_rows(row_ndx_1, row_ndx_2); - - using tf = _impl::TableFriend; - tf::mark(*m_origin_table); -} - -inline void BacklinkColumn::adj_acc_clear_root_table() noexcept -{ - IntegerColumn::adj_acc_clear_root_table(); - - typedef _impl::TableFriend tf; - tf::mark(*m_origin_table); -} - -inline void BacklinkColumn::mark(int type) noexcept -{ - if (type & mark_LinkOrigins) { - typedef _impl::TableFriend tf; - tf::mark(*m_origin_table); - } -} - -inline void BacklinkColumn::bump_link_origin_table_version() noexcept -{ - typedef _impl::TableFriend tf; - if (m_origin_table) { - bool bump_global = false; - tf::bump_version(*m_origin_table, bump_global); - } -} - -#ifdef REALM_DEBUG - -inline bool BacklinkColumn::VerifyPair::operator<(const VerifyPair& p) const noexcept -{ - return origin_row_ndx < p.origin_row_ndx; -} - -#endif // REALM_DEBUG - -} // namespace realm - -#endif // REALM_COLUMN_BACKLINK_HPP diff --git a/Pods/Realm/include/core/realm/column_binary.hpp b/Pods/Realm/include/core/realm/column_binary.hpp deleted file mode 100644 index b46ff091..00000000 --- a/Pods/Realm/include/core/realm/column_binary.hpp +++ /dev/null @@ -1,387 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_BINARY_HPP -#define REALM_COLUMN_BINARY_HPP - -#include -#include -#include - -namespace realm { - - -/// A binary column (BinaryColumn) is a single B+-tree, and the root -/// of the column is the root of the B+-tree. Leaf nodes are either of -/// type ArrayBinary (array of small blobs) or ArrayBigBlobs (array of -/// big blobs). -class BinaryColumn: public ColumnBaseSimple { -public: - typedef BinaryData value_type; - - BinaryColumn(Allocator&, ref_type, bool nullable = false); - - size_t size() const noexcept final; - bool is_empty() const noexcept { return size() == 0; } - bool is_nullable() const noexcept override; - - BinaryData get(size_t ndx) const noexcept; - bool is_null(size_t ndx) const noexcept override; - StringData get_index_data(size_t, StringIndex::StringConversionBuffer& ) const noexcept final; - - void add(BinaryData value); - void set(size_t ndx, BinaryData value, bool add_zero_term = false); - void set_null(size_t ndx) override; - void insert(size_t ndx, BinaryData value); - void erase(size_t row_ndx); - void erase(size_t row_ndx, bool is_last); - void move_last_over(size_t row_ndx); - void swap_rows(size_t row_ndx_1, size_t row_ndx_2) override; - void clear(); - size_t find_first(BinaryData value) const; - - // Requires that the specified entry was inserted as StringData. - StringData get_string(size_t ndx) const noexcept; - - void add_string(StringData value); - void set_string(size_t ndx, StringData value) override; - void insert_string(size_t ndx, StringData value); - - /// Compare two binary columns for equality. - bool compare_binary(const BinaryColumn&) const; - - static ref_type create(Allocator&, size_t size, bool nullable); - - static size_t get_size_from_ref(ref_type root_ref, Allocator&) noexcept; - - // Overrriding method in ColumnBase - ref_type write(size_t, size_t, size_t, - _impl::OutputStream&) const override; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void clear(size_t, bool) override; - void update_from_parent(size_t) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - - /// In contrast to update_from_parent(), this function is able to handle - /// cases where the accessed payload data has changed. In particular, it - /// handles cases where the B+-tree switches from having one level (root is - /// a leaf node), to having multiple levels (root is an inner node). Note - /// that this is at the expense of loosing the `noexcept` guarantee. - void update_from_ref(ref_type ref); - -#ifdef REALM_DEBUG - void verify() const override; - void to_dot(std::ostream&, StringData title) const override; - void do_dump_node_structure(std::ostream&, int) const override; -#endif - -private: - /// \param row_ndx Must be `realm::npos` if appending. - void do_insert(size_t row_ndx, BinaryData value, bool add_zero_term, - size_t num_rows); - - // Called by Array::bptree_insert(). - static ref_type leaf_insert(MemRef leaf_mem, ArrayParent&, size_t ndx_in_parent, - Allocator&, size_t insert_ndx, - Array::TreeInsert& state); - - struct InsertState: Array::TreeInsert { - bool m_add_zero_term; - }; - - class EraseLeafElem; - class CreateHandler; - class SliceHandler; - - void do_move_last_over(size_t row_ndx, size_t last_row_ndx); - void do_clear(); - - /// Root must be a leaf. Upgrades the root leaf if - /// necessary. Returns true if, and only if the root is a 'big - /// blobs' leaf upon return. - bool upgrade_root_leaf(size_t value_size); - - bool m_nullable = false; - -#ifdef REALM_DEBUG - void leaf_to_dot(MemRef, ArrayParent*, size_t ndx_in_parent, - std::ostream&) const override; -#endif - - friend class Array; - friend class ColumnBase; -}; - - - - -// Implementation - -inline StringData BinaryColumn::get_index_data(size_t, StringIndex::StringConversionBuffer&) const noexcept -{ - REALM_ASSERT(false && "Index not implemented for BinaryColumn."); - REALM_UNREACHABLE(); -} - -inline size_t BinaryColumn::size() const noexcept -{ - if (root_is_leaf()) { - bool is_big = m_array->get_context_flag(); - if (!is_big) { - // Small blobs root leaf - ArrayBinary* leaf = static_cast(m_array.get()); - return leaf->size(); - } - // Big blobs root leaf - ArrayBigBlobs* leaf = static_cast(m_array.get()); - return leaf->size(); - } - // Non-leaf root - return m_array->get_bptree_size(); -} - -inline bool BinaryColumn::is_nullable() const noexcept -{ - return m_nullable; -} - -inline void BinaryColumn::update_from_parent(size_t old_baseline) noexcept -{ - if (root_is_leaf()) { - bool is_big = m_array->get_context_flag(); - if (!is_big) { - // Small blobs root leaf - REALM_ASSERT(dynamic_cast(m_array.get())); - ArrayBinary* leaf = static_cast(m_array.get()); - leaf->update_from_parent(old_baseline); - return; - } - // Big blobs root leaf - REALM_ASSERT(dynamic_cast(m_array.get())); - ArrayBigBlobs* leaf = static_cast(m_array.get()); - leaf->update_from_parent(old_baseline); - return; - } - // Non-leaf root - m_array->update_from_parent(old_baseline); -} - -inline BinaryData BinaryColumn::get(size_t ndx) const noexcept -{ - REALM_ASSERT_DEBUG(ndx < size()); - if (root_is_leaf()) { - bool is_big = m_array->get_context_flag(); - BinaryData ret; - if (!is_big) { - // Small blobs root leaf - ArrayBinary* leaf = static_cast(m_array.get()); - ret = leaf->get(ndx); - } - else { - // Big blobs root leaf - ArrayBigBlobs* leaf = static_cast(m_array.get()); - ret = leaf->get(ndx); - } - if (!m_nullable && ret.is_null()) - return BinaryData("", 0); // return empty string (non-null) - return ret; - } - - // Non-leaf root - std::pair p = m_array->get_bptree_leaf(ndx); - const char* leaf_header = p.first.m_addr; - size_t ndx_in_leaf = p.second; - Allocator& alloc = m_array->get_alloc(); - bool is_big = Array::get_context_flag_from_header(leaf_header); - if (!is_big) { - // Small blobs - return ArrayBinary::get(leaf_header, ndx_in_leaf, alloc); - } - // Big blobs - return ArrayBigBlobs::get(leaf_header, ndx_in_leaf, alloc); -} - -inline bool BinaryColumn::is_null(size_t ndx) const noexcept -{ - return get(ndx).is_null(); -} - -inline StringData BinaryColumn::get_string(size_t ndx) const noexcept -{ - BinaryData bin = get(ndx); - REALM_ASSERT_3(0, <, bin.size()); - return StringData(bin.data(), bin.size()-1); -} - -inline void BinaryColumn::set_string(size_t ndx, StringData value) -{ - if (value.is_null() && !m_nullable) - throw LogicError(LogicError::column_not_nullable); - - BinaryData bin(value.data(), value.size()); - bool add_zero_term = true; - set(ndx, bin, add_zero_term); -} - -inline void BinaryColumn::add(BinaryData value) -{ - if (value.is_null() && !m_nullable) - throw LogicError(LogicError::column_not_nullable); - - size_t row_ndx = realm::npos; - bool add_zero_term = false; - size_t num_rows = 1; - do_insert(row_ndx, value, add_zero_term, num_rows); // Throws -} - -inline void BinaryColumn::insert(size_t row_ndx, BinaryData value) -{ - if (value.is_null() && !m_nullable) - throw LogicError(LogicError::column_not_nullable); - - size_t size = this->size(); // Slow - REALM_ASSERT_3(row_ndx, <=, size); - size_t row_ndx_2 = row_ndx == size ? realm::npos : row_ndx; - bool add_zero_term = false; - size_t num_rows = 1; - do_insert(row_ndx_2, value, add_zero_term, num_rows); // Throws -} - -inline void BinaryColumn::set_null(size_t row_ndx) -{ - set(row_ndx, BinaryData{}); -} - -inline size_t BinaryColumn::find_first(BinaryData value) const -{ - for (size_t t = 0; t < size(); t++) - if (get(t) == value) - return t; - - return not_found; -} - - -inline void BinaryColumn::erase(size_t row_ndx) -{ - size_t last_row_ndx = size() - 1; // Note that size() is slow - bool is_last = row_ndx == last_row_ndx; - erase(row_ndx, is_last); // Throws -} - -inline void BinaryColumn::move_last_over(size_t row_ndx) -{ - size_t last_row_ndx = size() - 1; // Note that size() is slow - do_move_last_over(row_ndx, last_row_ndx); // Throws -} - -inline void BinaryColumn::clear() -{ - do_clear(); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void BinaryColumn::insert_rows(size_t row_ndx, size_t num_rows_to_insert, - size_t prior_num_rows, bool insert_nulls) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx <= prior_num_rows); - REALM_ASSERT(!insert_nulls || m_nullable); - - size_t row_ndx_2 = (row_ndx == prior_num_rows ? realm::npos : row_ndx); - BinaryData value = m_nullable ? BinaryData() : BinaryData("", 0); - bool add_zero_term = false; - do_insert(row_ndx_2, value, add_zero_term, num_rows_to_insert); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void BinaryColumn::erase_rows(size_t row_ndx, size_t num_rows_to_erase, - size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(num_rows_to_erase <= prior_num_rows); - REALM_ASSERT(row_ndx <= prior_num_rows - num_rows_to_erase); - - bool is_last = (row_ndx + num_rows_to_erase == prior_num_rows); - for (size_t i = num_rows_to_erase; i > 0; --i) { - size_t row_ndx_2 = row_ndx + i - 1; - erase(row_ndx_2, is_last); // Throws - } -} - -// Implementing pure virtual method of ColumnBase. -inline void BinaryColumn::move_last_row_over(size_t row_ndx, size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx < prior_num_rows); - - size_t last_row_ndx = prior_num_rows - 1; - do_move_last_over(row_ndx, last_row_ndx); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void BinaryColumn::clear(size_t, bool) -{ - do_clear(); // Throws -} - -inline void BinaryColumn::add_string(StringData value) -{ - size_t row_ndx = realm::npos; - BinaryData value_2(value.data(), value.size()); - bool add_zero_term = true; - size_t num_rows = 1; - do_insert(row_ndx, value_2, add_zero_term, num_rows); // Throws -} - -inline void BinaryColumn::insert_string(size_t row_ndx, StringData value) -{ - size_t size = this->size(); // Slow - REALM_ASSERT_3(row_ndx, <=, size); - size_t row_ndx_2 = row_ndx == size ? realm::npos : row_ndx; - BinaryData value_2(value.data(), value.size()); - bool add_zero_term = false; - size_t num_rows = 1; - do_insert(row_ndx_2, value_2, add_zero_term, num_rows); // Throws -} - -inline size_t BinaryColumn::get_size_from_ref(ref_type root_ref, - Allocator& alloc) noexcept -{ - const char* root_header = alloc.translate(root_ref); - bool root_is_leaf = !Array::get_is_inner_bptree_node_from_header(root_header); - if (root_is_leaf) { - bool is_big = Array::get_context_flag_from_header(root_header); - if (!is_big) { - // Small blobs leaf - return ArrayBinary::get_size_from_header(root_header, alloc); - } - // Big blobs leaf - return ArrayBigBlobs::get_size_from_header(root_header); - } - return Array::get_bptree_size_from_header(root_header); -} - - -} // namespace realm - -#endif // REALM_COLUMN_BINARY_HPP diff --git a/Pods/Realm/include/core/realm/column_fwd.hpp b/Pods/Realm/include/core/realm/column_fwd.hpp deleted file mode 100644 index 81924a2a..00000000 --- a/Pods/Realm/include/core/realm/column_fwd.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_FWD_HPP -#define REALM_COLUMN_FWD_HPP - -#include - -namespace realm { - -// Regular classes -class ColumnBase; -class StringColumn; -class StringEnumColumn; -class BinaryColumn; -class SubtableColumn; -class MixedColumn; -class LinkColumn; -class LinkListColumn; - -// Templated classes -template -class Column; -template -class BasicColumn; - -namespace util { -template class Optional; -} - -// Shortcuts, aka typedefs. -using IntegerColumn = Column; -using IntNullColumn = Column>; -using DoubleColumn = Column; -using FloatColumn = Column; - -} // namespace realm - -#endif // REALM_COLUMN_FWD_HPP diff --git a/Pods/Realm/include/core/realm/column_link.hpp b/Pods/Realm/include/core/realm/column_link.hpp deleted file mode 100644 index 8efc5a27..00000000 --- a/Pods/Realm/include/core/realm/column_link.hpp +++ /dev/null @@ -1,186 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_LINK_HPP -#define REALM_COLUMN_LINK_HPP - -#include -#include -#include - -namespace realm { - -/// A link column is an extension of an integer column (Column) and maintains -/// its node structure. -/// -/// The individual values in a link column are indexes of rows in the target -/// table (offset with one to allow zero to indicate null links.) The target -/// table is specified by the table descriptor. -class LinkColumn: public LinkColumnBase { -public: - using LinkColumnBase::LinkColumnBase; - ~LinkColumn() noexcept override; - - static ref_type create(Allocator&, size_t size = 0); - - bool is_nullable() const noexcept override; - - //@{ - - /// is_null_link() is shorthand for `get_link() == realm::npos`, - /// nullify_link() is shorthand foe `set_link(realm::npos)`, and - /// insert_null_link() is shorthand for - /// `insert_link(realm::npos)`. set_link() returns the original link, with - /// `realm::npos` indicating that it was null. - - size_t get_link(size_t row_ndx) const noexcept; - bool is_null(size_t row_ndx) const noexcept override; - bool is_null_link(size_t row_ndx) const noexcept; - size_t set_link(size_t row_ndx, size_t target_row_ndx); - void set_null(size_t row_ndx) override; - void nullify_link(size_t row_ndx); - void insert_link(size_t row_ndx, size_t target_row_ndx); - void insert_null_link(size_t row_ndx); - - //@} - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void swap_rows(size_t, size_t) override; - void clear(size_t, bool) override; - void cascade_break_backlinks_to(size_t, CascadeState&) override; - void cascade_break_backlinks_to_all_rows(size_t, CascadeState&) override; - -#ifdef REALM_DEBUG - void verify(const Table&, size_t) const override; -#endif - -protected: - friend class BacklinkColumn; - void do_nullify_link(size_t row_ndx, size_t old_target_row_ndx) override; - void do_update_link(size_t row_ndx, size_t old_target_row_ndx, - size_t new_target_row_ndx) override; - void do_swap_link(size_t row_ndx, size_t target_row_ndx_1, - size_t target_row_ndx_2) override; - -private: - void remove_backlinks(size_t row_ndx); -}; - - -// Implementation - -inline LinkColumn::~LinkColumn() noexcept -{ -} - -inline bool LinkColumn::is_nullable() const noexcept -{ - return true; -} - -inline ref_type LinkColumn::create(Allocator& alloc, size_t size) -{ - return IntegerColumn::create(alloc, Array::type_Normal, size); // Throws -} - -inline bool LinkColumn::is_null(size_t row_ndx) const noexcept -{ - // Null is represented by zero - return LinkColumnBase::get(row_ndx) == 0; -} - -inline size_t LinkColumn::get_link(size_t row_ndx) const noexcept -{ - // Map zero to realm::npos, and `n+1` to `n`, where `n` is a target row index. - return to_size_t(LinkColumnBase::get(row_ndx)) - size_t(1); -} - -inline bool LinkColumn::is_null_link(size_t row_ndx) const noexcept -{ - return is_null(row_ndx); -} - -inline size_t LinkColumn::set_link(size_t row_ndx, size_t target_row_ndx) -{ - int_fast64_t old_value = LinkColumnBase::get(row_ndx); - size_t old_target_row_ndx = to_size_t(old_value) - size_t(1); - if (old_value != 0) - m_backlink_column->remove_one_backlink(old_target_row_ndx, row_ndx); // Throws - - int_fast64_t new_value = int_fast64_t(size_t(1) + target_row_ndx); - LinkColumnBase::set(row_ndx, new_value); // Throws - - if (target_row_ndx != realm::npos) - m_backlink_column->add_backlink(target_row_ndx, row_ndx); // Throws - - return old_target_row_ndx; -} - -inline void LinkColumn::set_null(size_t row_ndx) -{ - set_link(row_ndx, realm::npos); // Throws -} - -inline void LinkColumn::nullify_link(size_t row_ndx) -{ - set_null(row_ndx); // Throws -} - -inline void LinkColumn::insert_link(size_t row_ndx, size_t target_row_ndx) -{ - int_fast64_t value = int_fast64_t(size_t(1) + target_row_ndx); - LinkColumnBase::insert(row_ndx, value); // Throws - - if (target_row_ndx != realm::npos) - m_backlink_column->add_backlink(target_row_ndx, row_ndx); // Throws -} - -inline void LinkColumn::insert_null_link(size_t row_ndx) -{ - insert_link(row_ndx, realm::npos); // Throws -} - -inline void LinkColumn::do_update_link(size_t row_ndx, size_t, - size_t new_target_row_ndx) -{ - // Row pos is offset by one, to allow null refs - LinkColumnBase::set(row_ndx, new_target_row_ndx + 1); -} - -inline void LinkColumn::do_swap_link(size_t row_ndx, size_t target_row_ndx_1, - size_t target_row_ndx_2) -{ - // Row pos is offset by one, to allow null refs - ++target_row_ndx_1; - ++target_row_ndx_2; - - uint64_t value = LinkColumnBase::get_uint(row_ndx); - if (value == target_row_ndx_1) { - LinkColumnBase::set_uint(row_ndx, target_row_ndx_2); - } - else if (value == target_row_ndx_2) { - LinkColumnBase::set_uint(row_ndx, target_row_ndx_1); - } -} - -} //namespace realm - -#endif //REALM_COLUMN_LINK_HPP diff --git a/Pods/Realm/include/core/realm/column_linkbase.hpp b/Pods/Realm/include/core/realm/column_linkbase.hpp deleted file mode 100644 index 7addd10b..00000000 --- a/Pods/Realm/include/core/realm/column_linkbase.hpp +++ /dev/null @@ -1,195 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_LINKBASE_HPP -#define REALM_COLUMN_LINKBASE_HPP - -#include - -namespace realm { - -class BacklinkColumn; -class Table; - -// Abstract base class for columns containing links -class LinkColumnBase: public IntegerColumn { -public: - // Create unattached root array aaccessor. - LinkColumnBase(Allocator& alloc, ref_type ref, Table* table, size_t column_ndx); - ~LinkColumnBase() noexcept override; - - bool is_nullable() const noexcept override = 0; - void set_null(size_t) override = 0; - bool is_null(size_t) const noexcept override = 0; - - StringIndex* create_search_index() override; - - bool get_weak_links() const noexcept; - void set_weak_links(bool) noexcept; - - Table& get_target_table() const noexcept; - void set_target_table(Table&) noexcept; - BacklinkColumn& get_backlink_column() const noexcept; - void set_backlink_column(BacklinkColumn&) noexcept; - - void swap_rows(size_t, size_t) override = 0; - - virtual void do_nullify_link(size_t row_ndx, size_t old_target_row_ndx) = 0; - virtual void do_update_link(size_t row_ndx, size_t old_target_row_ndx, - size_t new_target_row_ndx) = 0; - virtual void do_swap_link(size_t row_ndx, size_t target_row_ndx_1, - size_t target_row_ndx_2) = 0; - - void adj_acc_insert_rows(size_t, size_t) noexcept override; - void adj_acc_erase_row(size_t) noexcept override; - void adj_acc_move_over(size_t, size_t) noexcept override; - void adj_acc_swap_rows(size_t, size_t) noexcept override; - void adj_acc_clear_root_table() noexcept override; - void mark(int) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - -#ifdef REALM_DEBUG - void verify(const Table&, size_t) const override; - using IntegerColumn::verify; -#endif - -protected: - // A pointer to the table that this column is part of. - Table* const m_table; - - // The index of this column within m_table.m_cols. - size_t m_column_ndx; - - TableRef m_target_table; - BacklinkColumn* m_backlink_column = nullptr; - bool m_weak_links = false; // True if these links are weak (not strong) - - /// Call Table::cascade_break_backlinks_to() for the specified target row if - /// it is not already in \a state.rows, and the number of strong links to it - /// has dropped to zero. - void check_cascade_break_backlinks_to(size_t target_table_ndx, size_t target_row_ndx, - CascadeState& state); -}; - - - - -// Implementation - -inline LinkColumnBase::LinkColumnBase(Allocator& alloc, ref_type ref, Table* table, size_t column_ndx): - IntegerColumn(alloc, ref), // Throws - m_table(table), - m_column_ndx(column_ndx) -{ -} - -inline LinkColumnBase::~LinkColumnBase() noexcept -{ -} - -inline StringIndex* LinkColumnBase::create_search_index() -{ - return nullptr; -} - -inline bool LinkColumnBase::get_weak_links() const noexcept -{ - return m_weak_links; -} - -inline void LinkColumnBase::set_weak_links(bool value) noexcept -{ - m_weak_links = value; -} - -inline Table& LinkColumnBase::get_target_table() const noexcept -{ - return *m_target_table; -} - -inline void LinkColumnBase::set_target_table(Table& table) noexcept -{ - REALM_ASSERT(!m_target_table); - m_target_table = table.get_table_ref(); -} - -inline BacklinkColumn& LinkColumnBase::get_backlink_column() const noexcept -{ - return *m_backlink_column; -} - -inline void LinkColumnBase::set_backlink_column(BacklinkColumn& column) noexcept -{ - m_backlink_column = &column; -} - -inline void LinkColumnBase::adj_acc_insert_rows(size_t row_ndx, - size_t num_rows) noexcept -{ - IntegerColumn::adj_acc_insert_rows(row_ndx, num_rows); - - typedef _impl::TableFriend tf; - tf::mark(*m_target_table); -} - -inline void LinkColumnBase::adj_acc_erase_row(size_t row_ndx) noexcept -{ - IntegerColumn::adj_acc_erase_row(row_ndx); - - typedef _impl::TableFriend tf; - tf::mark(*m_target_table); -} - -inline void LinkColumnBase::adj_acc_move_over(size_t from_row_ndx, - size_t to_row_ndx) noexcept -{ - IntegerColumn::adj_acc_move_over(from_row_ndx, to_row_ndx); - - typedef _impl::TableFriend tf; - tf::mark(*m_target_table); -} - -inline void LinkColumnBase::adj_acc_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept -{ - IntegerColumn::adj_acc_swap_rows(row_ndx_1, row_ndx_2); - - typedef _impl::TableFriend tf; - tf::mark(*m_target_table); -} - -inline void LinkColumnBase::adj_acc_clear_root_table() noexcept -{ - IntegerColumn::adj_acc_clear_root_table(); - - typedef _impl::TableFriend tf; - tf::mark(*m_target_table); -} - -inline void LinkColumnBase::mark(int type) noexcept -{ - if (type & mark_LinkTargets) { - typedef _impl::TableFriend tf; - tf::mark(*m_target_table); - } -} - - -} // namespace realm - -#endif // REALM_COLUMN_LINKBASE_HPP diff --git a/Pods/Realm/include/core/realm/column_linklist.hpp b/Pods/Realm/include/core/realm/column_linklist.hpp deleted file mode 100644 index de55988f..00000000 --- a/Pods/Realm/include/core/realm/column_linklist.hpp +++ /dev/null @@ -1,253 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_LINKLIST_HPP -#define REALM_COLUMN_LINKLIST_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace realm { - -namespace _impl { -class TransactLogConvenientEncoder; -} - - -/// A column of link lists (LinkListColumn) is a single B+-tree, and the root of -/// the column is the root of the B+-tree. All leaf nodes are single arrays of -/// type Array with the hasRefs bit set. -/// -/// The individual values in the column are either refs to Columns containing the -/// row positions in the target table, or in the case where they are empty, a zero -/// ref. -class LinkListColumn: public LinkColumnBase, public ArrayParent { -public: - using LinkColumnBase::LinkColumnBase; - LinkListColumn(Allocator& alloc, ref_type ref, Table* table, size_t column_ndx); - ~LinkListColumn() noexcept override; - - static ref_type create(Allocator&, size_t size = 0); - - bool is_nullable() const noexcept final; - - bool has_links(size_t row_ndx) const noexcept; - size_t get_link_count(size_t row_ndx) const noexcept; - - ConstLinkViewRef get(size_t row_ndx) const; - LinkViewRef get(size_t row_ndx); - - bool is_null(size_t row_ndx) const noexcept final; - void set_null(size_t row_ndx) final; - - /// Compare two columns for equality. - bool compare_link_list(const LinkListColumn&) const; - - void to_json_row(size_t row_ndx, std::ostream& out) const; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void swap_rows(size_t, size_t) override; - void clear(size_t, bool) override; - void cascade_break_backlinks_to(size_t, CascadeState&) override; - void cascade_break_backlinks_to_all_rows(size_t, CascadeState&) override; - void update_from_parent(size_t) noexcept override; - void adj_acc_clear_root_table() noexcept override; - void adj_acc_insert_rows(size_t, size_t) noexcept override; - void adj_acc_erase_row(size_t) noexcept override; - void adj_acc_move_over(size_t, size_t) noexcept override; - void adj_acc_swap_rows(size_t, size_t) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - -#ifdef REALM_DEBUG - void verify() const override; - void verify(const Table&, size_t) const override; -#endif - -protected: - void do_discard_child_accessors() noexcept override; - -private: - struct list_entry { - size_t m_row_ndx; - std::weak_ptr m_list; - bool operator<(const list_entry& other) const { return m_row_ndx < other.m_row_ndx; } - }; - - // The accessors stored in `m_list_accessors` are sorted by their row index. - // When a LinkList accessor is destroyed because the last shared_ptr pointing - // to it dies, its entry is implicitly replaced by a tombstone (an entry with - // an empty `m_list`). These tombstones are pruned at a later time by - // `prune_list_accessor_tombstones`. This is done to amortize the O(n) cost - // of `std::vector::erase` that would otherwise be incurred each time an - // accessor is removed. - mutable std::vector m_list_accessors; - mutable std::atomic m_list_accessors_contains_tombstones; - - std::shared_ptr get_ptr(size_t row_ndx) const; - - void do_nullify_link(size_t row_ndx, size_t old_target_row_ndx) override; - void do_update_link(size_t row_ndx, size_t old_target_row_ndx, - size_t new_target_row_ndx) override; - void do_swap_link(size_t row_ndx, size_t target_row_ndx_1, - size_t target_row_ndx_2) override; - - void unregister_linkview(); - ref_type get_row_ref(size_t row_ndx) const noexcept; - void set_row_ref(size_t row_ndx, ref_type new_ref); - void add_backlink(size_t target_row, size_t source_row); - void remove_backlink(size_t target_row, size_t source_row); - - // ArrayParent overrides - void update_child_ref(size_t child_ndx, ref_type new_ref) override; - ref_type get_child_ref(size_t child_ndx) const noexcept override; - - // These helpers are needed because of the way the B+-tree of links is - // traversed in cascade_break_backlinks_to() and - // cascade_break_backlinks_to_all_rows(). - void cascade_break_backlinks_to__leaf(size_t row_ndx, const Array& link_list_leaf, - CascadeState&); - void cascade_break_backlinks_to_all_rows__leaf(const Array& link_list_leaf, CascadeState&); - - void discard_child_accessors() noexcept; - - template - void adj_insert_rows(size_t row_ndx, size_t num_rows_inserted) noexcept; - - template - void adj_erase_rows(size_t row_ndx, size_t num_rows_erased) noexcept; - - template - void adj_move_over(size_t from_row_ndx, size_t to_row_ndx) noexcept; - - template - void adj_swap(size_t row_ndx_1, size_t row_ndx_2) noexcept; - - void prune_list_accessor_tombstones() noexcept; - void validate_list_accessors() const noexcept; - -#ifdef REALM_DEBUG - std::pair get_to_dot_parent(size_t) const override; -#endif - - friend class BacklinkColumn; - friend class LinkView; - friend class _impl::TransactLogConvenientEncoder; -}; - - - - - -// Implementation - -inline LinkListColumn::LinkListColumn(Allocator& alloc, ref_type ref, Table* table, size_t column_ndx): - LinkColumnBase(alloc, ref, table, column_ndx) -{ - m_list_accessors_contains_tombstones.store(false); -} - -inline LinkListColumn::~LinkListColumn() noexcept -{ - discard_child_accessors(); -} - -inline ref_type LinkListColumn::create(Allocator& alloc, size_t size) -{ - return IntegerColumn::create(alloc, Array::type_HasRefs, size); // Throws -} - -inline bool LinkListColumn::is_nullable() const noexcept -{ - return false; -} - -inline bool LinkListColumn::has_links(size_t row_ndx) const noexcept -{ - ref_type ref = LinkColumnBase::get_as_ref(row_ndx); - return (ref != 0); -} - -inline size_t LinkListColumn::get_link_count(size_t row_ndx) const noexcept -{ - ref_type ref = LinkColumnBase::get_as_ref(row_ndx); - if (ref == 0) - return 0; - return ColumnBase::get_size_from_ref(ref, get_alloc()); -} - -inline ConstLinkViewRef LinkListColumn::get(size_t row_ndx) const -{ - return get_ptr(row_ndx); -} - -inline LinkViewRef LinkListColumn::get(size_t row_ndx) -{ - return get_ptr(row_ndx); -} - -inline bool LinkListColumn::is_null(size_t) const noexcept -{ - return false; -} - -inline void LinkListColumn::set_null(size_t) -{ - throw LogicError{LogicError::column_not_nullable}; -} - -inline void LinkListColumn::do_discard_child_accessors() noexcept -{ - discard_child_accessors(); -} - -inline ref_type LinkListColumn::get_row_ref(size_t row_ndx) const noexcept -{ - return LinkColumnBase::get_as_ref(row_ndx); -} - -inline void LinkListColumn::set_row_ref(size_t row_ndx, ref_type new_ref) -{ - LinkColumnBase::set(row_ndx, new_ref); // Throws -} - -inline void LinkListColumn::add_backlink(size_t target_row, size_t source_row) -{ - m_backlink_column->add_backlink(target_row, source_row); // Throws -} - -inline void LinkListColumn::remove_backlink(size_t target_row, size_t source_row) -{ - m_backlink_column->remove_one_backlink(target_row, source_row); // Throws -} - - -} //namespace realm - -#endif //REALM_COLUMN_LINKLIST_HPP - - diff --git a/Pods/Realm/include/core/realm/column_mixed.hpp b/Pods/Realm/include/core/realm/column_mixed.hpp deleted file mode 100644 index 4a0cf508..00000000 --- a/Pods/Realm/include/core/realm/column_mixed.hpp +++ /dev/null @@ -1,261 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_MIXED_HPP -#define REALM_COLUMN_MIXED_HPP - -#include - -#include -#include -#include -#include -#include -#include - - -namespace realm { - - -// Pre-declarations -class BinaryColumn; - - -/// A mixed column (MixedColumn) is composed of three subcolumns. The first -/// subcolumn is an integer column (Column) and stores value types. The second -/// one stores values and is a subtable parent column (SubtableColumnBase), -/// which is a subclass of an integer column (Column). The last one is a binary -/// column (BinaryColumn) and stores additional data for values of type string -/// or binary data. The last subcolumn is optional. The root of a mixed column -/// is an array node of type Array that stores the root refs of the subcolumns. -class MixedColumn: public ColumnBaseSimple { -public: - /// Create a mixed column wrapper and attach it to a preexisting - /// underlying structure of arrays. - /// - /// \param table If this column is used as part of a table you - /// must pass a pointer to that table. Otherwise you must pass - /// null - /// - /// \param column_ndx If this column is used as part of a table - /// you must pass the logical index of the column within that - /// table. Otherwise you should pass zero. - MixedColumn(Allocator&, ref_type, Table* table, size_t column_ndx); - - ~MixedColumn() noexcept override; - - DataType get_type(size_t ndx) const noexcept; - size_t size() const noexcept final { return m_types->size(); } - bool is_empty() const noexcept { return size() == 0; } - - int64_t get_int(size_t ndx) const noexcept; - bool get_bool(size_t ndx) const noexcept; - OldDateTime get_olddatetime(size_t ndx) const noexcept; - Timestamp get_timestamp(size_t ndx) const noexcept; - float get_float(size_t ndx) const noexcept; - double get_double(size_t ndx) const noexcept; - StringData get_string(size_t ndx) const noexcept; - BinaryData get_binary(size_t ndx) const noexcept; - StringData get_index_data(size_t ndx, StringIndex::StringConversionBuffer& buffer) const noexcept override; - - /// The returned array ref is zero if the specified row does not - /// contain a subtable. - ref_type get_subtable_ref(size_t row_ndx) const noexcept; - - /// The returned size is zero if the specified row does not - /// contain a subtable. - size_t get_subtable_size(size_t row_ndx) const noexcept; - - Table* get_subtable_accessor(size_t row_ndx) const noexcept override; - - void discard_subtable_accessor(size_t row_ndx) noexcept override; - - /// If the value at the specified index is a subtable, return a - /// pointer to that accessor for that subtable. Otherwise return - /// null. The accessor will be created if it does not already - /// exist. - /// - /// The returned table pointer must **always** end up being - /// wrapped in some instantiation of BasicTableRef<>. - Table* get_subtable_ptr(size_t row_ndx); - - const Table* get_subtable_ptr(size_t subtable_ndx) const; - - void set_int(size_t ndx, int64_t value); - void set_bool(size_t ndx, bool value); - void set_olddatetime(size_t ndx, OldDateTime value); - void set_timestamp(size_t ndx, Timestamp value); - void set_float(size_t ndx, float value); - void set_double(size_t ndx, double value); - void set_string(size_t ndx, StringData value) override; - void set_binary(size_t ndx, BinaryData value); - void set_subtable(size_t ndx, const Table* value); - - void insert_int(size_t ndx, int64_t value); - void insert_bool(size_t ndx, bool value); - void insert_olddatetime(size_t ndx, OldDateTime value); - void insert_timestamp(size_t ndx, Timestamp value); - void insert_float(size_t ndx, float value); - void insert_double(size_t ndx, double value); - void insert_string(size_t ndx, StringData value); - void insert_binary(size_t ndx, BinaryData value); - void insert_subtable(size_t ndx, const Table* value); - - void erase(size_t row_ndx); - void move_last_over(size_t row_ndx); - void clear(); - - /// Compare two mixed columns for equality. - bool compare_mixed(const MixedColumn&) const; - - void discard_child_accessors() noexcept; - - static ref_type create(Allocator&, size_t size = 0); - - static size_t get_size_from_ref(ref_type root_ref, Allocator&) noexcept; - - // Overriding method in ColumnBase - ref_type write(size_t, size_t, size_t, - _impl::OutputStream&) const override; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void swap_rows(size_t, size_t) override; - void clear(size_t, bool) override; - void update_from_parent(size_t) noexcept override; - void adj_acc_insert_rows(size_t, size_t) noexcept override; - void adj_acc_erase_row(size_t) noexcept override; - void adj_acc_move_over(size_t, size_t) noexcept override; - void adj_acc_swap_rows(size_t, size_t) noexcept override; - void adj_acc_clear_root_table() noexcept override; - void mark(int) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - -#ifdef REALM_DEBUG - void verify() const override; - void verify(const Table&, size_t) const override; - void to_dot(std::ostream&, StringData title) const override; - void do_dump_node_structure(std::ostream&, int) const override; -#endif - -private: - enum MixedColType { - // NOTE: below numbers must be kept in sync with ColumnType - // Column types used in Mixed - mixcol_Int = 0, - mixcol_Bool = 1, - mixcol_String = 2, - // 3, used for STRING_ENUM in ColumnType - mixcol_Binary = 4, - mixcol_Table = 5, - mixcol_Mixed = 6, - mixcol_OldDateTime = 7, - mixcol_Timestamp = 8, - mixcol_Float = 9, - mixcol_Double = 10, // Positive Double - mixcol_DoubleNeg = 11, // Negative Double - mixcol_IntNeg = 12 // Negative Integers - }; - - class RefsColumn; - - /// Stores the MixedColType of each value at the given index. For - /// values that uses all 64 bits, the type also encodes the sign - /// bit by having distinct types for positive negative values. - std::unique_ptr m_types; - - /// Stores the data for each entry. For a subtable, the stored - /// value is the ref of the subtable. For string, binary data, - /// the stored value is an index within `m_binary_data`. Likewise, - /// for timestamp, an index into `m_timestamp` is stored. For other - /// types the stored value is itself. Since we only have 63 bits - /// available for a non-ref value, the sign of numeric values is - /// encoded as part of the type in `m_types`. - std::unique_ptr m_data; - - /// For string and binary data types, the bytes are stored here. - std::unique_ptr m_binary_data; - - /// Timestamps are stored here. - std::unique_ptr m_timestamp_data; - - void do_erase(size_t row_ndx, size_t num_rows_to_erase, size_t prior_num_rows); - void do_move_last_over(size_t row_ndx, size_t prior_num_rows); - void do_swap_rows(size_t, size_t); - void do_clear(size_t num_rows); - - void create(Allocator&, ref_type, Table*, size_t column_ndx); - void ensure_binary_data_column(); - void ensure_timestamp_column(); - - MixedColType clear_value(size_t ndx, MixedColType new_type); // Returns old type - void clear_value_and_discard_subtab_acc(size_t ndx, MixedColType new_type); - - // Get/set/insert 64-bit values in m_data/m_types - int64_t get_value(size_t ndx) const noexcept; - void set_value(size_t ndx, int64_t value, MixedColType); - void set_int64(size_t ndx, int64_t value, MixedColType pos_type, MixedColType neg_type); - - void insert_value(size_t row_ndx, int_fast64_t types_value, int_fast64_t data_value); - void insert_int(size_t ndx, int_fast64_t value, MixedColType type); - void insert_pos_neg(size_t ndx, int_fast64_t value, MixedColType pos_type, - MixedColType neg_type); - - void do_discard_child_accessors() noexcept override; - -#ifdef REALM_DEBUG - void do_verify(const Table*, size_t col_ndx) const; - void leaf_to_dot(MemRef, ArrayParent*, size_t, - std::ostream&) const override {} // Not used -#endif -}; - -inline StringData MixedColumn::get_index_data(size_t, StringIndex::StringConversionBuffer&) const noexcept -{ - REALM_ASSERT(false && "Index not supported for MixedColumn yet."); - REALM_UNREACHABLE(); -} - - -class MixedColumn::RefsColumn: public SubtableColumnBase { -public: - RefsColumn(Allocator& alloc, ref_type ref, Table* table, size_t column_ndx): - SubtableColumnBase(alloc, ref, table, column_ndx) - { - } - - ~RefsColumn() noexcept override {} - - using SubtableColumnBase::get_subtable_ptr; - - void refresh_accessor_tree(size_t, const Spec&) override; - - friend class MixedColumn; -}; - - -} // namespace realm - - -// Implementation -#include - - -#endif // REALM_COLUMN_MIXED_HPP diff --git a/Pods/Realm/include/core/realm/column_mixed_tpl.hpp b/Pods/Realm/include/core/realm/column_mixed_tpl.hpp deleted file mode 100644 index 92f337b2..00000000 --- a/Pods/Realm/include/core/realm/column_mixed_tpl.hpp +++ /dev/null @@ -1,507 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -namespace realm { - -inline MixedColumn::MixedColumn(Allocator& alloc, ref_type ref, - Table* table, size_t column_ndx) -{ - create(alloc, ref, table, column_ndx); -} - -inline void MixedColumn::adj_acc_insert_rows(size_t row_ndx, size_t num_rows) noexcept -{ - m_data->adj_acc_insert_rows(row_ndx, num_rows); -} - -inline void MixedColumn::adj_acc_erase_row(size_t row_ndx) noexcept -{ - m_data->adj_acc_erase_row(row_ndx); -} - -inline void MixedColumn::adj_acc_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept -{ - m_data->adj_acc_swap_rows(row_ndx_1, row_ndx_2); -} - -inline void MixedColumn::adj_acc_move_over(size_t from_row_ndx, size_t to_row_ndx) noexcept -{ - m_data->adj_acc_move_over(from_row_ndx, to_row_ndx); -} - -inline void MixedColumn::adj_acc_clear_root_table() noexcept -{ - m_data->adj_acc_clear_root_table(); -} - -inline ref_type MixedColumn::get_subtable_ref(size_t row_ndx) const noexcept -{ - REALM_ASSERT_3(row_ndx, <, m_types->size()); - if (m_types->get(row_ndx) != type_Table) - return 0; - return m_data->get_as_ref(row_ndx); -} - -inline size_t MixedColumn::get_subtable_size(size_t row_ndx) const noexcept -{ - ref_type top_ref = get_subtable_ref(row_ndx); - if (top_ref == 0) - return 0; - return _impl::TableFriend::get_size_from_ref(top_ref, m_data->get_alloc()); -} - -inline Table* MixedColumn::get_subtable_accessor(size_t row_ndx) const noexcept -{ - return m_data->get_subtable_accessor(row_ndx); -} - -inline void MixedColumn::discard_subtable_accessor(size_t row_ndx) noexcept -{ - m_data->discard_subtable_accessor(row_ndx); -} - -inline Table* MixedColumn::get_subtable_ptr(size_t row_ndx) -{ - REALM_ASSERT_3(row_ndx, <, m_types->size()); - if (m_types->get(row_ndx) != type_Table) - return 0; - return m_data->get_subtable_ptr(row_ndx); // Throws -} - -inline const Table* MixedColumn::get_subtable_ptr(size_t subtable_ndx) const -{ - return const_cast(this)->get_subtable_ptr(subtable_ndx); -} - -inline void MixedColumn::discard_child_accessors() noexcept -{ - m_data->discard_child_accessors(); -} - - -// -// Getters -// - -#define REALM_BIT63 0x8000000000000000ULL - -inline int64_t MixedColumn::get_value(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_types->size()); - - // Shift the unsigned value right - ensuring 0 gets in from left. - // Shifting signed integers right doesn't ensure 0's. - uint64_t value = uint64_t(m_data->get(ndx)) >> 1; - return int64_t(value); -} - -inline int64_t MixedColumn::get_int(size_t ndx) const noexcept -{ - // Get first 63 bits of the integer value - int64_t value = get_value(ndx); - - // restore 'sign'-bit from the column-type - MixedColType col_type = MixedColType(m_types->get(ndx)); - if (col_type == mixcol_IntNeg) { - // FIXME: Bad cast of result of '|' from unsigned to signed - value |= REALM_BIT63; // set sign bit (63) - } - else { - REALM_ASSERT_3(col_type, ==, mixcol_Int); - } - return value; -} - -inline bool MixedColumn::get_bool(size_t ndx) const noexcept -{ - REALM_ASSERT_3(m_types->get(ndx), ==, mixcol_Bool); - - return (get_value(ndx) != 0); -} - -inline OldDateTime MixedColumn::get_olddatetime(size_t ndx) const noexcept -{ - REALM_ASSERT_3(m_types->get(ndx), ==, mixcol_OldDateTime); - - return OldDateTime(get_value(ndx)); -} - -inline float MixedColumn::get_float(size_t ndx) const noexcept -{ - static_assert(std::numeric_limits::is_iec559, "'float' is not IEEE"); - static_assert((sizeof (float) * CHAR_BIT == 32), "Assume 32 bit float."); - REALM_ASSERT_3(m_types->get(ndx), ==, mixcol_Float); - - return type_punning(get_value(ndx)); -} - -inline double MixedColumn::get_double(size_t ndx) const noexcept -{ - static_assert(std::numeric_limits::is_iec559, "'double' is not IEEE"); - static_assert((sizeof (double) * CHAR_BIT == 64), "Assume 64 bit double."); - - int64_t int_val = get_value(ndx); - - // restore 'sign'-bit from the column-type - MixedColType col_type = MixedColType(m_types->get(ndx)); - if (col_type == mixcol_DoubleNeg) - int_val |= REALM_BIT63; // set sign bit (63) - else { - REALM_ASSERT_3(col_type, ==, mixcol_Double); - } - return type_punning(int_val); -} - -inline StringData MixedColumn::get_string(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_types->size()); - REALM_ASSERT_3(m_types->get(ndx), ==, mixcol_String); - REALM_ASSERT(m_binary_data); - - size_t data_ndx = size_t(int64_t(m_data->get(ndx)) >> 1); - return m_binary_data->get_string(data_ndx); -} - -inline BinaryData MixedColumn::get_binary(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_types->size()); - REALM_ASSERT_3(m_types->get(ndx), ==, mixcol_Binary); - REALM_ASSERT(m_binary_data); - - size_t data_ndx = size_t(uint64_t(m_data->get(ndx)) >> 1); - return m_binary_data->get(data_ndx); -} - -inline Timestamp MixedColumn::get_timestamp(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_types->size()); - REALM_ASSERT_3(m_types->get(ndx), ==, mixcol_Timestamp); - REALM_ASSERT(m_timestamp_data); - size_t data_ndx = size_t(uint64_t(m_data->get(ndx)) >> 1); - return m_timestamp_data->get(data_ndx); -} - -// -// Setters -// - -// Set a int64 value. -// Store 63 bit of the value in m_data. Store sign bit in m_types. - -inline void MixedColumn::set_int64(size_t ndx, int64_t value, MixedColType pos_type, MixedColType neg_type) -{ - REALM_ASSERT_3(ndx, <, m_types->size()); - - // If sign-bit is set in value, 'store' it in the column-type - MixedColType coltype = ((value & REALM_BIT63) == 0) ? pos_type : neg_type; - - // Remove refs or binary data (sets type to double) - clear_value_and_discard_subtab_acc(ndx, coltype); // Throws - - // Shift value one bit and set lowest bit to indicate that this is not a ref - value = (value << 1) + 1; - m_data->set(ndx, value); -} - -inline void MixedColumn::set_int(size_t ndx, int64_t value) -{ - set_int64(ndx, value, mixcol_Int, mixcol_IntNeg); // Throws -} - -inline void MixedColumn::set_double(size_t ndx, double value) -{ - int64_t val64 = type_punning(value); - set_int64(ndx, val64, mixcol_Double, mixcol_DoubleNeg); // Throws -} - -inline void MixedColumn::set_value(size_t ndx, int64_t value, MixedColType coltype) -{ - REALM_ASSERT_3(ndx, <, m_types->size()); - - // Remove refs or binary data (sets type to float) - clear_value_and_discard_subtab_acc(ndx, coltype); // Throws - - // Shift value one bit and set lowest bit to indicate that this is not a ref - int64_t v = (value << 1) + 1; - m_data->set(ndx, v); // Throws -} - -inline void MixedColumn::set_float(size_t ndx, float value) -{ - int64_t val64 = type_punning(value); - set_value(ndx, val64, mixcol_Float); // Throws -} - -inline void MixedColumn::set_bool(size_t ndx, bool value) -{ - set_value(ndx, (value ? 1 : 0), mixcol_Bool); // Throws -} - -inline void MixedColumn::set_olddatetime(size_t ndx, OldDateTime value) -{ - set_value(ndx, int64_t(value.get_olddatetime()), mixcol_OldDateTime); // Throws -} - -inline void MixedColumn::set_subtable(size_t ndx, const Table* t) -{ - REALM_ASSERT_3(ndx, <, m_types->size()); - typedef _impl::TableFriend tf; - ref_type ref; - if (t) { - ref = tf::clone(*t, get_alloc()); // Throws - } - else { - ref = tf::create_empty_table(get_alloc()); // Throws - } - // Remove any previous refs or binary data - clear_value_and_discard_subtab_acc(ndx, mixcol_Table); // Throws - m_data->set(ndx, ref); // Throws -} - -// -// Inserts -// - -inline void MixedColumn::insert_value(size_t row_ndx, int_fast64_t types_value, - int_fast64_t data_value) -{ - size_t size = m_types->size(); // Slow - bool is_append = row_ndx == size; - size_t row_ndx_2 = is_append ? realm::npos : row_ndx; - size_t num_rows = 1; - m_types->insert_without_updating_index(row_ndx_2, types_value, num_rows); // Throws - m_data->do_insert(row_ndx_2, data_value, num_rows); // Throws -} - -// Insert a int64 value. -// Store 63 bit of the value in m_data. Store sign bit in m_types. - -inline void MixedColumn::insert_int(size_t ndx, int_fast64_t value, MixedColType type) -{ - int_fast64_t types_value = type; - // Shift value one bit and set lowest bit to indicate that this is not a ref - int_fast64_t data_value = 1 + (value << 1); - insert_value(ndx, types_value, data_value); // Throws -} - -inline void MixedColumn::insert_pos_neg(size_t ndx, int_fast64_t value, MixedColType pos_type, - MixedColType neg_type) -{ - // 'store' the sign-bit in the integer-type - MixedColType type = (value & REALM_BIT63) == 0 ? pos_type : neg_type; - int_fast64_t types_value = type; - // Shift value one bit and set lowest bit to indicate that this is not a ref - int_fast64_t data_value = 1 + (value << 1); - insert_value(ndx, types_value, data_value); // Throws -} - -inline void MixedColumn::insert_int(size_t ndx, int_fast64_t value) -{ - insert_pos_neg(ndx, value, mixcol_Int, mixcol_IntNeg); // Throws -} - -inline void MixedColumn::insert_double(size_t ndx, double value) -{ - int_fast64_t value_2 = type_punning(value); - insert_pos_neg(ndx, value_2, mixcol_Double, mixcol_DoubleNeg); // Throws -} - -inline void MixedColumn::insert_float(size_t ndx, float value) -{ - int_fast64_t value_2 = type_punning(value); - insert_int(ndx, value_2, mixcol_Float); // Throws -} - -inline void MixedColumn::insert_bool(size_t ndx, bool value) -{ - int_fast64_t value_2 = int_fast64_t(value); - insert_int(ndx, value_2, mixcol_Bool); // Throws -} - -inline void MixedColumn::insert_olddatetime(size_t ndx, OldDateTime value) -{ - int_fast64_t value_2 = int_fast64_t(value.get_olddatetime()); - insert_int(ndx, value_2, mixcol_OldDateTime); // Throws -} - -inline void MixedColumn::insert_timestamp(size_t ndx, Timestamp value) -{ - ensure_timestamp_column(); - size_t data_ndx = m_timestamp_data->size(); - m_timestamp_data->add(value); // Throws - insert_int(ndx, int_fast64_t(data_ndx), mixcol_Timestamp); -} - -inline void MixedColumn::insert_string(size_t ndx, StringData value) -{ - ensure_binary_data_column(); - size_t blob_ndx = m_binary_data->size(); - m_binary_data->add_string(value); // Throws - - int_fast64_t value_2 = int_fast64_t(blob_ndx); - insert_int(ndx, value_2, mixcol_String); // Throws -} - -inline void MixedColumn::insert_binary(size_t ndx, BinaryData value) -{ - ensure_binary_data_column(); - size_t blob_ndx = m_binary_data->size(); - m_binary_data->add(value); // Throws - - int_fast64_t value_2 = int_fast64_t(blob_ndx); - insert_int(ndx, value_2, mixcol_Binary); // Throws -} - -inline void MixedColumn::insert_subtable(size_t ndx, const Table* t) -{ - typedef _impl::TableFriend tf; - ref_type ref; - if (t) { - ref = tf::clone(*t, get_alloc()); // Throws - } - else { - ref = tf::create_empty_table(get_alloc()); // Throws - } - int_fast64_t types_value = mixcol_Table; - int_fast64_t data_value = int_fast64_t(ref); - insert_value(ndx, types_value, data_value); // Throws -} - -inline void MixedColumn::erase(size_t row_ndx) -{ - size_t num_rows_to_erase = 1; - size_t prior_num_rows = size(); // Note that size() is slow - do_erase(row_ndx, num_rows_to_erase, prior_num_rows); // Throws -} - -inline void MixedColumn::move_last_over(size_t row_ndx) -{ - size_t prior_num_rows = size(); // Note that size() is slow - do_move_last_over(row_ndx, prior_num_rows); // Throws -} - -inline void MixedColumn::swap_rows(size_t row_ndx_1, size_t row_ndx_2) -{ - do_swap_rows(row_ndx_1, row_ndx_2); -} - -inline void MixedColumn::clear() -{ - size_t num_rows = size(); // Note that size() is slow - do_clear(num_rows); // Throws -} - -inline size_t MixedColumn::get_size_from_ref(ref_type root_ref, - Allocator& alloc) noexcept -{ - const char* root_header = alloc.translate(root_ref); - ref_type types_ref = to_ref(Array::get(root_header, 0)); - return IntegerColumn::get_size_from_ref(types_ref, alloc); -} - -inline void MixedColumn::clear_value_and_discard_subtab_acc(size_t row_ndx, - MixedColType new_type) -{ - MixedColType old_type = clear_value(row_ndx, new_type); - if (old_type == mixcol_Table) - m_data->discard_subtable_accessor(row_ndx); -} - -// Implementing pure virtual method of ColumnBase. -inline void MixedColumn::insert_rows(size_t row_ndx, size_t num_rows_to_insert, - size_t prior_num_rows, bool insert_nulls) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx <= prior_num_rows); - REALM_ASSERT(!insert_nulls); - - size_t row_ndx_2 = (row_ndx == prior_num_rows ? realm::npos : row_ndx); - - int_fast64_t type_value = mixcol_Int; - m_types->insert_without_updating_index(row_ndx_2, type_value, num_rows_to_insert); // Throws - - // The least significant bit indicates that the rest of the bits form an - // integer value, so 1 is actually zero. - int_fast64_t data_value = 1; - m_data->do_insert(row_ndx_2, data_value, num_rows_to_insert); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void MixedColumn::erase_rows(size_t row_ndx, size_t num_rows_to_erase, - size_t prior_num_rows, bool) -{ - do_erase(row_ndx, num_rows_to_erase, prior_num_rows); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void MixedColumn::move_last_row_over(size_t row_ndx, size_t prior_num_rows, bool) -{ - do_move_last_over(row_ndx, prior_num_rows); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void MixedColumn::clear(size_t num_rows, bool) -{ - do_clear(num_rows); // Throws -} - -inline void MixedColumn::mark(int type) noexcept -{ - m_data->mark(type); -} - -inline void MixedColumn::refresh_accessor_tree(size_t col_ndx, const Spec& spec) -{ - get_root_array()->init_from_parent(); - m_types->refresh_accessor_tree(col_ndx, spec); // Throws - m_data->refresh_accessor_tree(col_ndx, spec); // Throws - if (m_binary_data) { - REALM_ASSERT_3(get_root_array()->size(), >=, 3); - m_binary_data->refresh_accessor_tree(col_ndx, spec); // Throws - } - if (m_timestamp_data) { - REALM_ASSERT_3(get_root_array()->size(), >=, 4); - m_timestamp_data->refresh_accessor_tree(col_ndx, spec); // Throws - } - - - // See if m_binary_data needs to be created. - if (get_root_array()->size() >= 3) { - ref_type ref = get_root_array()->get_as_ref(2); - m_binary_data.reset(new BinaryColumn(get_alloc(), ref)); // Throws - m_binary_data->set_parent(get_root_array(), 2); - } - - // See if m_timestamp_data needs to be created. - if (get_root_array()->size() >= 4) { - ref_type ref = get_root_array()->get_as_ref(3); - m_timestamp_data.reset(new TimestampColumn(get_alloc(), ref)); // Throws - m_timestamp_data->set_parent(get_root_array(), 3); - } -} - -inline void MixedColumn::RefsColumn::refresh_accessor_tree(size_t col_ndx, const Spec& spec) -{ - SubtableColumnBase::refresh_accessor_tree(col_ndx, spec); // Throws - size_t spec_ndx_in_parent = 0; // Ignored because these are root tables - m_subtable_map.refresh_accessor_tree(spec_ndx_in_parent); // Throws -} - -} // namespace realm diff --git a/Pods/Realm/include/core/realm/column_string.hpp b/Pods/Realm/include/core/realm/column_string.hpp deleted file mode 100644 index e7ccf4e7..00000000 --- a/Pods/Realm/include/core/realm/column_string.hpp +++ /dev/null @@ -1,391 +0,0 @@ - -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_STRING_HPP -#define REALM_COLUMN_STRING_HPP - -#include -#include -#include -#include -#include -#include - -namespace realm { - -// Pre-declarations -class StringIndex; - - -/// A string column (StringColumn) is a single B+-tree, and -/// the root of the column is the root of the B+-tree. Leaf nodes are -/// either of type ArrayString (array of small strings), -/// ArrayStringLong (array of medium strings), or ArrayBigBlobs (array -/// of big strings). -/// -/// A string column can optionally be equipped with a search index. If -/// it is, then the root ref of the index is stored in -/// Table::m_columns immediately after the root ref of the string -/// column. -class StringColumn: public ColumnBaseSimple, public ColumnTemplate { -public: - typedef StringData value_type; - - StringColumn(Allocator&, ref_type, bool nullable = false); - ~StringColumn() noexcept override; - - void destroy() noexcept override; - - size_t size() const noexcept final; - bool is_empty() const noexcept { return size() == 0; } - - bool is_null(size_t ndx) const noexcept final; - void set_null(size_t ndx) final; - StringData get(size_t ndx) const noexcept; - void set(size_t ndx, StringData); - void add(); - void add(StringData value); - void insert(size_t ndx); - void insert(size_t ndx, StringData value); - void erase(size_t row_ndx); - void move_last_over(size_t row_ndx); - void swap_rows(size_t row_ndx_1, size_t row_ndx_2) override; - void clear(); - - size_t count(StringData value) const; - size_t find_first(StringData value, size_t begin = 0, - size_t end = npos) const; - void find_all(IntegerColumn& result, StringData value, size_t begin = 0, - size_t end = npos) const; - - int compare_values(size_t, size_t) const override; - - //@{ - /// Find the lower/upper bound for the specified value assuming - /// that the elements are already sorted in ascending order - /// according to StringData::operator<(). - size_t lower_bound_string(StringData value) const noexcept; - size_t upper_bound_string(StringData value) const noexcept; - //@} - - void set_string(size_t, StringData) override; - - FindRes find_all_indexref(StringData value, size_t& dst) const; - - bool is_nullable() const noexcept final; - - // Search index - StringData get_index_data(size_t ndx, StringIndex::StringConversionBuffer& buffer) const noexcept final; - bool has_search_index() const noexcept override; - void set_search_index_ref(ref_type, ArrayParent*, size_t, bool) override; - void set_search_index_allow_duplicate_values(bool) noexcept override; - StringIndex* get_search_index() noexcept override; - const StringIndex* get_search_index() const noexcept override; - std::unique_ptr release_search_index() noexcept; - StringIndex* create_search_index() override; - - // Simply inserts all column values in the index in a loop - void populate_search_index(); - void destroy_search_index() noexcept override; - - // Optimizing data layout - // Optimizing data layout. enforce == true will enforce enumeration; - // enforce == false will auto-evaluate if it should be enumerated or not - bool auto_enumerate(ref_type& keys, ref_type& values, bool enforce = false) const; - - /// Compare two string columns for equality. - bool compare_string(const StringColumn&) const; - - enum LeafType { - leaf_type_Small, ///< ArrayString - leaf_type_Medium, ///< ArrayStringLong - leaf_type_Big ///< ArrayBigBlobs - }; - - std::unique_ptr get_leaf(size_t ndx, size_t& out_ndx_in_parent, - LeafType& out_leaf_type) const; - - static ref_type create(Allocator&, size_t size = 0); - - static size_t get_size_from_ref(ref_type root_ref, Allocator&) noexcept; - - // Overrriding method in ColumnBase - ref_type write(size_t, size_t, size_t, - _impl::OutputStream&) const override; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void clear(size_t, bool) override; - void update_from_parent(size_t old_baseline) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - -#ifdef REALM_DEBUG - void verify() const override; - void verify(const Table&, size_t) const override; - void to_dot(std::ostream&, StringData title) const override; - void do_dump_node_structure(std::ostream&, int) const override; -#endif - -protected: - StringData get_val(size_t row) const override { return get(row); } - -private: - std::unique_ptr m_search_index; - bool m_nullable; - - LeafType get_block(size_t ndx, ArrayParent**, size_t& off, - bool use_retval = false) const; - - /// If you are appending and have the size of the column readily available, - /// call the 4 argument version instead. If you are not appending, either - /// one is fine. - /// - /// \param row_ndx Must be `realm::npos` if appending. - void do_insert(size_t row_ndx, StringData value, size_t num_rows); - - /// If you are appending and you do not have the size of the column readily - /// available, call the 3 argument version instead. If you are not - /// appending, either one is fine. - /// - /// \param is_append Must be true if, and only if `row_ndx` is equal to the - /// size of the column (before insertion). - void do_insert(size_t row_ndx, StringData value, size_t num_rows, bool is_append); - - /// \param row_ndx Must be `realm::npos` if appending. - void bptree_insert(size_t row_ndx, StringData value, size_t num_rows); - - // Called by Array::bptree_insert(). - static ref_type leaf_insert(MemRef leaf_mem, ArrayParent&, size_t ndx_in_parent, - Allocator&, size_t insert_ndx, - Array::TreeInsert& state); - - class EraseLeafElem; - class CreateHandler; - class SliceHandler; - - void do_erase(size_t row_ndx, bool is_last); - void do_move_last_over(size_t row_ndx, size_t last_row_ndx); - void do_swap_rows(size_t row_ndx_1, size_t row_ndx_2); - void do_clear(); - - /// Root must be a leaf. Upgrades the root leaf as - /// necessary. Returns the type of the root leaf as it is upon - /// return. - LeafType upgrade_root_leaf(size_t value_size); - - void refresh_root_accessor(); - -#ifdef REALM_DEBUG - void leaf_to_dot(MemRef, ArrayParent*, size_t ndx_in_parent, - std::ostream&) const override; -#endif - - friend class Array; - friend class ColumnBase; -}; - - - - - -// Implementation: - -inline size_t StringColumn::size() const noexcept -{ - if (root_is_leaf()) { - bool long_strings = m_array->has_refs(); - if (!long_strings) { - // Small strings root leaf - ArrayString* leaf = static_cast(m_array.get()); - return leaf->size(); - } - bool is_big = m_array->get_context_flag(); - if (!is_big) { - // Medium strings root leaf - ArrayStringLong* leaf = static_cast(m_array.get()); - return leaf->size(); - } - // Big strings root leaf - ArrayBigBlobs* leaf = static_cast(m_array.get()); - return leaf->size(); - } - // Non-leaf root - return m_array->get_bptree_size(); -} - -inline void StringColumn::add(StringData value) -{ - REALM_ASSERT(!(value.is_null() && !m_nullable)); - size_t row_ndx = realm::npos; - size_t num_rows = 1; - do_insert(row_ndx, value, num_rows); // Throws -} - -inline void StringColumn::add() -{ - add(m_nullable ? realm::null() : StringData("")); -} - -inline void StringColumn::insert(size_t row_ndx, StringData value) -{ - REALM_ASSERT(!(value.is_null() && !m_nullable)); - size_t size = this->size(); - REALM_ASSERT_3(row_ndx, <=, size); - size_t num_rows = 1; - bool is_append = row_ndx == size; - do_insert(row_ndx, value, num_rows, is_append); // Throws -} - -inline void StringColumn::insert(size_t row_ndx) -{ - insert(row_ndx, m_nullable ? realm::null() : StringData("")); -} - -inline void StringColumn::erase(size_t row_ndx) -{ - size_t last_row_ndx = size() - 1; // Note that size() is slow - bool is_last = row_ndx == last_row_ndx; - do_erase(row_ndx, is_last); // Throws -} - -inline void StringColumn::move_last_over(size_t row_ndx) -{ - size_t last_row_ndx = size() - 1; // Note that size() is slow - do_move_last_over(row_ndx, last_row_ndx); // Throws -} - -inline void StringColumn::swap_rows(size_t row_ndx_1, size_t row_ndx_2) -{ - do_swap_rows(row_ndx_1, row_ndx_2); // Throws -} - -inline void StringColumn::clear() -{ - do_clear(); // Throws -} - -inline int StringColumn::compare_values(size_t row1, size_t row2) const -{ - StringData a = get(row1); - StringData b = get(row2); - - if (a.is_null() && !b.is_null()) - return 1; - else if (b.is_null() && !a.is_null()) - return -1; - else if (a.is_null() && b.is_null()) - return 0; - - if (a == b) - return 0; - return utf8_compare(a, b) ? 1 : -1; -} - -inline void StringColumn::set_string(size_t row_ndx, StringData value) -{ - REALM_ASSERT(!(value.is_null() && !m_nullable)); - set(row_ndx, value); // Throws -} - -inline bool StringColumn::has_search_index() const noexcept -{ - return m_search_index != 0; -} - -inline StringIndex* StringColumn::get_search_index() noexcept -{ - return m_search_index.get(); -} - -inline const StringIndex* StringColumn::get_search_index() const noexcept -{ - return m_search_index.get(); -} - -inline size_t StringColumn::get_size_from_ref(ref_type root_ref, - Allocator& alloc) noexcept -{ - const char* root_header = alloc.translate(root_ref); - bool root_is_leaf = !Array::get_is_inner_bptree_node_from_header(root_header); - if (root_is_leaf) { - bool long_strings = Array::get_hasrefs_from_header(root_header); - if (!long_strings) { - // Small strings leaf - return ArrayString::get_size_from_header(root_header); - } - bool is_big = Array::get_context_flag_from_header(root_header); - if (!is_big) { - // Medium strings leaf - return ArrayStringLong::get_size_from_header(root_header, alloc); - } - // Big strings leaf - return ArrayBigBlobs::get_size_from_header(root_header); - } - return Array::get_bptree_size_from_header(root_header); -} - -// Implementing pure virtual method of ColumnBase. -inline void StringColumn::insert_rows(size_t row_ndx, size_t num_rows_to_insert, - size_t prior_num_rows, bool insert_nulls) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx <= prior_num_rows); - REALM_ASSERT(!insert_nulls || m_nullable); - - StringData value = m_nullable ? realm::null() : StringData(""); - bool is_append = (row_ndx == prior_num_rows); - do_insert(row_ndx, value, num_rows_to_insert, is_append); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void StringColumn::erase_rows(size_t row_ndx, size_t num_rows_to_erase, - size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(num_rows_to_erase <= prior_num_rows); - REALM_ASSERT(row_ndx <= prior_num_rows - num_rows_to_erase); - - bool is_last = (row_ndx + num_rows_to_erase == prior_num_rows); - for (size_t i = num_rows_to_erase; i > 0; --i) { - size_t row_ndx_2 = row_ndx + i - 1; - do_erase(row_ndx_2, is_last); // Throws - } -} - -// Implementing pure virtual method of ColumnBase. -inline void StringColumn::move_last_row_over(size_t row_ndx, size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx < prior_num_rows); - - size_t last_row_ndx = prior_num_rows - 1; - do_move_last_over(row_ndx, last_row_ndx); // Throws -} - -// Implementing pure virtual method of ColumnBase. -inline void StringColumn::clear(size_t, bool) -{ - do_clear(); // Throws -} - -} // namespace realm - -#endif // REALM_COLUMN_STRING_HPP diff --git a/Pods/Realm/include/core/realm/column_string_enum.hpp b/Pods/Realm/include/core/realm/column_string_enum.hpp deleted file mode 100644 index 51667d52..00000000 --- a/Pods/Realm/include/core/realm/column_string_enum.hpp +++ /dev/null @@ -1,313 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_STRING_ENUM_HPP -#define REALM_COLUMN_STRING_ENUM_HPP - -#include - -namespace realm { - -// Pre-declarations -class StringIndex; - - -/// From the point of view of the application, an enumerated strings column -/// (StringEnumColumn) is like a string column (StringColumn), yet it manages -/// its stings in such a way that each unique string is stored only once. In -/// fact, an enumerated strings column is a combination of two subcolumns; a -/// regular string column (StringColumn) that stores the unique strings, and an -/// integer column that stores one unique string index for each entry in the -/// enumerated strings column. -/// -/// In terms of the underlying node structure, the subcolumn containing the -/// unique strings is not a true part of the enumerated strings column. Instead -/// it is a part of the spec structure that describes the table of which the -/// enumerated strings column is a part. This way, the unique strings can be -/// shared across enumerated strings columns of multiple subtables. This also -/// means that the root of an enumerated strings column coincides with the root -/// of the integer subcolumn, and in some sense, an enumerated strings column is -/// just the integer subcolumn. -/// -/// An enumerated strings column can optionally be equipped with a -/// search index. If it is, then the root ref of the index is stored -/// in Table::m_columns immediately after the root ref of the -/// enumerated strings column. -class StringEnumColumn: public IntegerColumn { -public: - typedef StringData value_type; - - StringEnumColumn(Allocator&, ref_type ref, ref_type keys_ref, bool nullable); - ~StringEnumColumn() noexcept override; - void destroy() noexcept override; - MemRef clone_deep(Allocator& alloc) const override; - - int compare_values(size_t row1, size_t row2) const override - { - StringData a = get(row1); - StringData b = get(row2); - - if (a.is_null() && !b.is_null()) - return 1; - else if (b.is_null() && !a.is_null()) - return -1; - else if (a.is_null() && b.is_null()) - return 0; - - if (a == b) - return 0; - - return utf8_compare(a, b) ? 1 : -1; - } - - StringData get(size_t ndx) const noexcept; - bool is_null(size_t ndx) const noexcept final; - void set(size_t ndx, StringData value); - void set_null(size_t ndx) override; - void add(); - void add(StringData value); - void insert(size_t ndx); - void insert(size_t ndx, StringData value); - void erase(size_t row_ndx); - void move_last_over(size_t row_ndx); - void clear(); - bool is_nullable() const noexcept final; - - size_t count(StringData value) const; - size_t find_first(StringData value, size_t begin = 0, size_t end = npos) const; - void find_all(IntegerColumn& res, StringData value, - size_t begin = 0, size_t end = npos) const; - FindRes find_all_indexref(StringData value, size_t& dst) const; - - size_t count(size_t key_index) const; - size_t find_first(size_t key_index, size_t begin=0, size_t end=-1) const; - void find_all(IntegerColumn& res, size_t key_index, size_t begin = 0, size_t end = -1) const; - - //@{ - /// Find the lower/upper bound for the specified value assuming - /// that the elements are already sorted in ascending order - /// according to StringData::operator<(). - size_t lower_bound_string(StringData value) const noexcept; - size_t upper_bound_string(StringData value) const noexcept; - //@} - - void set_string(size_t, StringData) override; - - void adjust_keys_ndx_in_parent(int diff) noexcept; - - // Search index - StringData get_index_data(size_t ndx, StringIndex::StringConversionBuffer& buffer) const noexcept final; - void set_search_index_allow_duplicate_values(bool) noexcept override; - StringIndex* create_search_index() override; - void install_search_index(std::unique_ptr) noexcept; - void destroy_search_index() noexcept override; - - // Compare two string columns for equality - bool compare_string(const StringColumn&) const; - bool compare_string(const StringEnumColumn&) const; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void clear(size_t, bool) override; - void update_from_parent(size_t) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - - size_t get_key_ndx(StringData value) const; - size_t get_key_ndx_or_add(StringData value); - - StringColumn& get_keys(); - const StringColumn& get_keys() const; - -#ifdef REALM_DEBUG - void verify() const override; - void verify(const Table&, size_t) const override; - void do_dump_node_structure(std::ostream&, int) const override; - void to_dot(std::ostream&, StringData title) const override; -#endif - -private: - // Member variables - StringColumn m_keys; - bool m_nullable; - - /// If you are appending and have the size of the column readily available, - /// call the 4 argument version instead. If you are not appending, either - /// one is fine. - /// - /// \param row_ndx Must be `realm::npos` if appending. - void do_insert(size_t row_ndx, StringData value, size_t num_rows); - - /// If you are appending and you do not have the size of the column readily - /// available, call the 3 argument version instead. If you are not - /// appending, either one is fine. - /// - /// \param is_append Must be true if, and only if `row_ndx` is equal to the - /// size of the column (before insertion). - void do_insert(size_t row_ndx, StringData value, size_t num_rows, bool is_append); - - void do_erase(size_t row_ndx, bool is_last); - void do_move_last_over(size_t row_ndx, size_t last_row_ndx); - void do_clear(); -}; - - - - - -// Implementation: - -inline StringData StringEnumColumn::get(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, IntegerColumn::size()); - size_t key_ndx = to_size_t(IntegerColumn::get(ndx)); - StringData sd = m_keys.get(key_ndx); - REALM_ASSERT_DEBUG(!(!m_nullable && sd.is_null())); - return sd; -} - -inline bool StringEnumColumn::is_null(size_t ndx) const noexcept -{ - return is_nullable() ? get(ndx).is_null() : false; -} - -inline void StringEnumColumn::add() -{ - add(m_nullable ? realm::null() : StringData("")); -} - -inline void StringEnumColumn::add(StringData value) -{ - REALM_ASSERT_DEBUG(!(!m_nullable && value.is_null())); - size_t row_ndx = realm::npos; - size_t num_rows = 1; - do_insert(row_ndx, value, num_rows); // Throws -} - -inline void StringEnumColumn::insert(size_t row_ndx) -{ - insert(row_ndx, m_nullable ? realm::null() : StringData("")); -} - -inline void StringEnumColumn::insert(size_t row_ndx, StringData value) -{ - REALM_ASSERT_DEBUG(!(!m_nullable && value.is_null())); - size_t size = this->size(); - REALM_ASSERT_3(row_ndx, <=, size); - size_t num_rows = 1; - bool is_append = row_ndx == size; - do_insert(row_ndx, value, num_rows, is_append); // Throws -} - -inline void StringEnumColumn::erase(size_t row_ndx) -{ - size_t last_row_ndx = size() - 1; // Note that size() is slow - bool is_last = row_ndx == last_row_ndx; - do_erase(row_ndx, is_last); // Throws -} - -inline void StringEnumColumn::move_last_over(size_t row_ndx) -{ - size_t last_row_ndx = size() - 1; // Note that size() is slow - do_move_last_over(row_ndx, last_row_ndx); // Throws -} - -inline void StringEnumColumn::clear() -{ - do_clear(); // Throws -} - -// Overriding virtual method of Column. -inline void StringEnumColumn::insert_rows(size_t row_ndx, size_t num_rows_to_insert, - size_t prior_num_rows, bool insert_nulls) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx <= prior_num_rows); - REALM_ASSERT(!insert_nulls || m_nullable); - - StringData value = m_nullable ? realm::null() : StringData(""); - bool is_append = (row_ndx == prior_num_rows); - do_insert(row_ndx, value, num_rows_to_insert, is_append); // Throws -} - -// Overriding virtual method of Column. -inline void StringEnumColumn::erase_rows(size_t row_ndx, size_t num_rows_to_erase, - size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(num_rows_to_erase <= prior_num_rows); - REALM_ASSERT(row_ndx <= prior_num_rows - num_rows_to_erase); - - bool is_last = (row_ndx + num_rows_to_erase == prior_num_rows); - for (size_t i = num_rows_to_erase; i > 0; --i) { - size_t row_ndx_2 = row_ndx + i - 1; - do_erase(row_ndx_2, is_last); // Throws - } -} - -// Overriding virtual method of Column. -inline void StringEnumColumn::move_last_row_over(size_t row_ndx, size_t prior_num_rows, bool) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx < prior_num_rows); - - size_t last_row_ndx = prior_num_rows - 1; - do_move_last_over(row_ndx, last_row_ndx); // Throws -} - -// Overriding virtual method of Column. -inline void StringEnumColumn::clear(size_t, bool) -{ - do_clear(); // Throws -} - -inline size_t StringEnumColumn::lower_bound_string(StringData value) const noexcept -{ - return ColumnBase::lower_bound(*this, value); -} - -inline size_t StringEnumColumn::upper_bound_string(StringData value) const noexcept -{ - return ColumnBase::upper_bound(*this, value); -} - -inline void StringEnumColumn::set_string(size_t row_ndx, StringData value) -{ - set(row_ndx, value); // Throws -} - -inline void StringEnumColumn::set_null(size_t row_ndx) -{ - set(row_ndx, realm::null{}); -} - -inline StringColumn& StringEnumColumn::get_keys() -{ - return m_keys; -} - -inline const StringColumn& StringEnumColumn::get_keys() const -{ - return m_keys; -} - - -} // namespace realm - -#endif // REALM_COLUMN_STRING_ENUM_HPP diff --git a/Pods/Realm/include/core/realm/column_table.hpp b/Pods/Realm/include/core/realm/column_table.hpp deleted file mode 100644 index 12afbea3..00000000 --- a/Pods/Realm/include/core/realm/column_table.hpp +++ /dev/null @@ -1,614 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_TABLE_HPP -#define REALM_COLUMN_TABLE_HPP - -#include - -#include -#include -#include -#include - -namespace realm { - - -/// Base class for any type of column that can contain subtables. -// FIXME: Don't derive from IntegerColumn, but define a BpTree specialization. -class SubtableColumnBase: public IntegerColumn, public Table::Parent { -public: - void discard_child_accessors() noexcept; - - ~SubtableColumnBase() noexcept override; - - static ref_type create(Allocator&, size_t size = 0); - - Table* get_subtable_accessor(size_t) const noexcept override; - - void insert_rows(size_t, size_t, size_t, bool) override; - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - void clear(size_t, bool) override; - void swap_rows(size_t, size_t) override; - void discard_subtable_accessor(size_t) noexcept override; - void update_from_parent(size_t) noexcept override; - void adj_acc_insert_rows(size_t, size_t) noexcept override; - void adj_acc_erase_row(size_t) noexcept override; - void adj_acc_move_over(size_t, size_t) noexcept override; - void adj_acc_clear_root_table() noexcept override; - void adj_acc_swap_rows(size_t, size_t) noexcept override; - void mark(int) noexcept override; - void refresh_accessor_tree(size_t, const Spec&) override; - -#ifdef REALM_DEBUG - void verify() const override; - void verify(const Table&, size_t) const override; -#endif - -protected: - /// A pointer to the table that this column is part of. For a free-standing - /// column, this pointer is null. - Table* const m_table; - - /// The index of this column within m_table.m_cols. For a free-standing - /// column, this index is zero. - size_t m_column_ndx; - - struct SubtableMap { - ~SubtableMap() noexcept {} - bool empty() const noexcept { return m_entries.empty(); } - Table* find(size_t subtable_ndx) const noexcept; - void add(size_t subtable_ndx, Table*); - // Returns true if, and only if at least one entry was detached and - // removed from the map. - bool detach_and_remove_all() noexcept; - // Returns true if, and only if the entry was found and removed, and it - // was the last entry in the map. - bool detach_and_remove(size_t subtable_ndx) noexcept; - // Returns true if, and only if the entry was found and removed, and it - // was the last entry in the map. - bool remove(Table*) noexcept; - void update_from_parent(size_t old_baseline) const noexcept; - template - void adj_insert_rows(size_t row_ndx, size_t num_rows_inserted) noexcept; - // Returns true if, and only if an entry was found and removed, and it - // was the last entry in the map. - template - bool adj_erase_rows(size_t row_ndx, size_t num_rows_erased) noexcept; - // Returns true if, and only if an entry was found and removed, and it - // was the last entry in the map. - template - bool adj_move_over(size_t from_row_ndx, size_t to_row_ndx) noexcept; - template - void adj_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept; - - void update_accessors(const size_t* col_path_begin, const size_t* col_path_end, - _impl::TableFriend::AccessorUpdater&); - void recursive_mark() noexcept; - void refresh_accessor_tree(size_t spec_ndx_in_parent); - private: - struct entry { - size_t m_subtable_ndx; - Table* m_table; - }; - typedef std::vector entries; - entries m_entries; - }; - - /// Contains all existing accessors that are attached to a subtable in this - /// column. It can map a row index into a pointer to the corresponding - /// accessor when it exists. - /// - /// There is an invariant in force: Either `m_table` is null, or there is an - /// additional referece count on `*m_table` when, and only when the map is - /// non-empty. - mutable SubtableMap m_subtable_map; - - SubtableColumnBase(Allocator&, ref_type, Table*, size_t column_ndx); - - /// Get a pointer to the accessor of the specified subtable. The - /// accessor will be created if it does not already exist. - /// - /// The returned table pointer must **always** end up being - /// wrapped in some instantiation of BasicTableRef<>. - /// - /// NOTE: This method must be used only for subtables with - /// independent specs, i.e. for elements of a MixedColumn. - Table* get_subtable_ptr(size_t subtable_ndx); - - // Overriding method in ArrayParent - void update_child_ref(size_t, ref_type) override; - - // Overriding method in ArrayParent - ref_type get_child_ref(size_t) const noexcept override; - - // Overriding method in Table::Parent - Table* get_parent_table(size_t*) noexcept override; - - // Overriding method in Table::Parent - void child_accessor_destroyed(Table*) noexcept override; - - /// Assumes that the two tables have the same spec. - static bool compare_subtable_rows(const Table&, const Table&); - - /// Construct a copy of the columns array of the specified table - /// and return just the ref to that array. - /// - /// In the clone, no string column will be of the enumeration - /// type. - ref_type clone_table_columns(const Table*); - - size_t* record_subtable_path(size_t* begin, - size_t* end) noexcept override; - - void update_table_accessors(const size_t* col_path_begin, const size_t* col_path_end, - _impl::TableFriend::AccessorUpdater&); - - /// \param row_ndx Must be `realm::npos` if appending. - void do_insert(size_t row_ndx, int_fast64_t value, size_t num_rows); - -#ifdef REALM_DEBUG - std::pair - get_to_dot_parent(size_t ndx_in_parent) const override; -#endif - - friend class Table; -}; - - - -class SubtableColumn: public SubtableColumnBase { -public: - /// Create a subtable column accessor and attach it to a - /// preexisting underlying structure of arrays. - /// - /// \param table If this column is used as part of a table you must - /// pass a pointer to that table. Otherwise you must pass null. - /// - /// \param column_ndx If this column is used as part of a table - /// you must pass the logical index of the column within that - /// table. Otherwise you should pass zero. - SubtableColumn(Allocator&, ref_type, Table* table, size_t column_ndx); - - ~SubtableColumn() noexcept override {} - - size_t get_subtable_size(size_t ndx) const noexcept; - - /// Get a pointer to the accessor of the specified subtable. The - /// accessor will be created if it does not already exist. - /// - /// The returned table pointer must **always** end up being - /// wrapped in some instantiation of BasicTableRef<>. - Table* get_subtable_ptr(size_t subtable_ndx); - - const Table* get_subtable_ptr(size_t subtable_ndx) const; - - // When passing a table to add() or insert() it is assumed that - // the table spec is compatible with this column. The number of - // columns must be the same, and the corresponding columns must - // have the same data type (as returned by - // Table::get_column_type()). - - void add(const Table* value = nullptr); - void insert(size_t ndx, const Table* value = nullptr); - void set(size_t ndx, const Table*); - void clear_table(size_t ndx); - - using SubtableColumnBase::insert; - - void erase_rows(size_t, size_t, size_t, bool) override; - void move_last_row_over(size_t, size_t, bool) override; - - /// Compare two subtable columns for equality. - bool compare_table(const SubtableColumn&) const; - - void refresh_accessor_tree(size_t, const Spec&) override; - -#ifdef REALM_DEBUG - void verify(const Table&, size_t) const override; - void do_dump_node_structure(std::ostream&, int) const override; - void to_dot(std::ostream&, StringData title) const override; -#endif - -private: - mutable size_t m_subspec_ndx; // Unknown if equal to `npos` - - size_t get_subspec_ndx() const noexcept; - - void destroy_subtable(size_t ndx) noexcept; - - void do_discard_child_accessors() noexcept override; -}; - - - - - -// Implementation - -// Overriding virtual method of Column. -inline void SubtableColumnBase::insert_rows(size_t row_ndx, size_t num_rows_to_insert, - size_t prior_num_rows, bool insert_nulls) -{ - REALM_ASSERT_DEBUG(prior_num_rows == size()); - REALM_ASSERT(row_ndx <= prior_num_rows); - REALM_ASSERT(!insert_nulls); - - size_t row_ndx_2 = (row_ndx == prior_num_rows ? realm::npos : row_ndx); - int_fast64_t value = 0; - do_insert(row_ndx_2, value, num_rows_to_insert); // Throws -} - -// Overriding virtual method of Column. -inline void SubtableColumnBase::erase_rows(size_t row_ndx, size_t num_rows_to_erase, - size_t prior_num_rows, - bool broken_reciprocal_backlinks) -{ - IntegerColumn::erase_rows(row_ndx, num_rows_to_erase, prior_num_rows, - broken_reciprocal_backlinks); // Throws - - const bool fix_ndx_in_parent = true; - bool last_entry_removed = - m_subtable_map.adj_erase_rows(row_ndx, num_rows_to_erase); - typedef _impl::TableFriend tf; - if (last_entry_removed) - tf::unbind_ptr(*m_table); -} - -// Overriding virtual method of Column. -inline void SubtableColumnBase::move_last_row_over(size_t row_ndx, size_t prior_num_rows, - bool broken_reciprocal_backlinks) -{ - IntegerColumn::move_last_row_over(row_ndx, prior_num_rows, broken_reciprocal_backlinks); // Throws - - const bool fix_ndx_in_parent = true; - size_t last_row_ndx = prior_num_rows - 1; - bool last_entry_removed = - m_subtable_map.adj_move_over(last_row_ndx, row_ndx); - typedef _impl::TableFriend tf; - if (last_entry_removed) - tf::unbind_ptr(*m_table); -} - -inline void SubtableColumnBase::clear(size_t, bool) -{ - discard_child_accessors(); - clear_without_updating_index(); // Throws - // FIXME: This one is needed because - // IntegerColumn::clear_without_updating_index() forgets about the - // leaf type. A better solution should probably be sought after. - get_root_array()->set_type(Array::type_HasRefs); -} - -inline void SubtableColumnBase::swap_rows(size_t row_ndx_1, size_t row_ndx_2) -{ - IntegerColumn::swap_rows(row_ndx_1, row_ndx_2); // Throws - - const bool fix_ndx_in_parent = true; - m_subtable_map.adj_swap_rows(row_ndx_1, row_ndx_2); -} - -inline void SubtableColumnBase::mark(int type) noexcept -{ - if (type & mark_Recursive) - m_subtable_map.recursive_mark(); -} - -inline void SubtableColumnBase::refresh_accessor_tree(size_t col_ndx, const Spec& spec) -{ - IntegerColumn::refresh_accessor_tree(col_ndx, spec); // Throws - m_column_ndx = col_ndx; -} - -inline void SubtableColumnBase::adj_acc_insert_rows(size_t row_ndx, - size_t num_rows) noexcept -{ - // This function must assume no more than minimal consistency of the - // accessor hierarchy. This means in particular that it cannot access the - // underlying node structure. See AccessorConsistencyLevels. - - const bool fix_ndx_in_parent = false; - m_subtable_map.adj_insert_rows(row_ndx, num_rows); -} - -inline void SubtableColumnBase::adj_acc_erase_row(size_t row_ndx) noexcept -{ - // This function must assume no more than minimal consistency of the - // accessor hierarchy. This means in particular that it cannot access the - // underlying node structure. See AccessorConsistencyLevels. - - const bool fix_ndx_in_parent = false; - size_t num_rows_erased = 1; - bool last_entry_removed = - m_subtable_map.adj_erase_rows(row_ndx, num_rows_erased); - typedef _impl::TableFriend tf; - if (last_entry_removed) - tf::unbind_ptr(*m_table); -} - -inline void SubtableColumnBase::adj_acc_move_over(size_t from_row_ndx, - size_t to_row_ndx) noexcept -{ - // This function must assume no more than minimal consistency of the - // accessor hierarchy. This means in particular that it cannot access the - // underlying node structure. See AccessorConsistencyLevels. - - const bool fix_ndx_in_parent = false; - bool last_entry_removed = - m_subtable_map.adj_move_over(from_row_ndx, to_row_ndx); - typedef _impl::TableFriend tf; - if (last_entry_removed) - tf::unbind_ptr(*m_table); -} - -inline void SubtableColumnBase::adj_acc_clear_root_table() noexcept -{ - // This function must assume no more than minimal consistency of the - // accessor hierarchy. This means in particular that it cannot access the - // underlying node structure. See AccessorConsistencyLevels. - - IntegerColumn::adj_acc_clear_root_table(); - discard_child_accessors(); -} - -inline void SubtableColumnBase::adj_acc_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept -{ - const bool fix_ndx_in_parent = false; - m_subtable_map.adj_swap_rows(row_ndx_1, row_ndx_2); -} - -inline Table* SubtableColumnBase::get_subtable_accessor(size_t row_ndx) const noexcept -{ - // This function must assume no more than minimal consistency of the - // accessor hierarchy. This means in particular that it cannot access the - // underlying node structure. See AccessorConsistencyLevels. - - Table* subtable = m_subtable_map.find(row_ndx); - return subtable; -} - -inline void SubtableColumnBase::discard_subtable_accessor(size_t row_ndx) noexcept -{ - // This function must assume no more than minimal consistency of the - // accessor hierarchy. This means in particular that it cannot access the - // underlying node structure. See AccessorConsistencyLevels. - - bool last_entry_removed = m_subtable_map.detach_and_remove(row_ndx); - typedef _impl::TableFriend tf; - if (last_entry_removed) - tf::unbind_ptr(*m_table); -} - -inline void SubtableColumnBase::SubtableMap::add(size_t subtable_ndx, Table* table) -{ - entry e; - e.m_subtable_ndx = subtable_ndx; - e.m_table = table; - m_entries.push_back(e); -} - -template -void SubtableColumnBase::SubtableMap::adj_insert_rows(size_t row_ndx, size_t num_rows_inserted) noexcept -{ - for (auto& entry : m_entries) { - if (entry.m_subtable_ndx >= row_ndx) { - entry.m_subtable_ndx += num_rows_inserted; - typedef _impl::TableFriend tf; - if (fix_ndx_in_parent) - tf::set_ndx_in_parent(*(entry.m_table), entry.m_subtable_ndx); - } - } -} - -template -bool SubtableColumnBase::SubtableMap::adj_erase_rows(size_t row_ndx, size_t num_rows_erased) noexcept -{ - if (m_entries.empty()) - return false; - typedef _impl::TableFriend tf; - auto end = m_entries.end(); - auto i = m_entries.begin(); - do { - if (i->m_subtable_ndx >= row_ndx + num_rows_erased) { - i->m_subtable_ndx -= num_rows_erased; - if (fix_ndx_in_parent) - tf::set_ndx_in_parent(*(i->m_table), i->m_subtable_ndx); - } - else if (i->m_subtable_ndx >= row_ndx) { - // Must hold a counted reference while detaching - TableRef table(i->m_table); - tf::detach(*table); - // Move last over - *i = *--end; - continue; - } - ++i; - } - while (i != end); - m_entries.erase(end, m_entries.end()); - return m_entries.empty(); -} - - -template -bool SubtableColumnBase::SubtableMap::adj_move_over(size_t from_row_ndx, - size_t to_row_ndx) noexcept -{ - typedef _impl::TableFriend tf; - - size_t i = 0, n = m_entries.size(); - // We return true if, and only if we remove the last entry in the map. We - // need special handling for the case, where the set of entries are already - // empty, otherwise the final return statement would return true in this - // case, even though we didn't actually remove an entry. - if (n == 0) - return false; - - while (i < n) { - entry& e = m_entries[i]; - if (REALM_UNLIKELY(e.m_subtable_ndx == to_row_ndx)) { - // Must hold a counted reference while detaching - TableRef table(e.m_table); - tf::detach(*table); - // Delete entry by moving last over (faster and avoids invalidating - // iterators) - e = m_entries[--n]; - m_entries.pop_back(); - } - else { - if (REALM_UNLIKELY(e.m_subtable_ndx == from_row_ndx)) { - e.m_subtable_ndx = to_row_ndx; - if (fix_ndx_in_parent) - tf::set_ndx_in_parent(*(e.m_table), e.m_subtable_ndx); - } - ++i; - } - } - return m_entries.empty(); -} - -template -void SubtableColumnBase::SubtableMap::adj_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept -{ - using tf = _impl::TableFriend; - for (auto& entry : m_entries) { - if (REALM_UNLIKELY(entry.m_subtable_ndx == row_ndx_1)) { - entry.m_subtable_ndx = row_ndx_2; - if (fix_ndx_in_parent) - tf::set_ndx_in_parent(*(entry.m_table), entry.m_subtable_ndx); - } - else if (REALM_UNLIKELY(entry.m_subtable_ndx == row_ndx_2)) { - entry.m_subtable_ndx = row_ndx_1; - if (fix_ndx_in_parent) - tf::set_ndx_in_parent(*(entry.m_table), entry.m_subtable_ndx); - } - } -} - -inline SubtableColumnBase::SubtableColumnBase(Allocator& alloc, ref_type ref, - Table* table, size_t column_ndx): - IntegerColumn(alloc, ref), // Throws - m_table(table), - m_column_ndx(column_ndx) -{ -} - -inline void SubtableColumnBase::update_child_ref(size_t child_ndx, ref_type new_ref) -{ - set(child_ndx, new_ref); -} - -inline ref_type SubtableColumnBase::get_child_ref(size_t child_ndx) const noexcept -{ - return get_as_ref(child_ndx); -} - -inline void SubtableColumnBase::discard_child_accessors() noexcept -{ - bool last_entry_removed = m_subtable_map.detach_and_remove_all(); - if (last_entry_removed && m_table) - _impl::TableFriend::unbind_ptr(*m_table); -} - -inline SubtableColumnBase::~SubtableColumnBase() noexcept -{ - discard_child_accessors(); -} - -inline bool SubtableColumnBase::compare_subtable_rows(const Table& a, const Table& b) -{ - return _impl::TableFriend::compare_rows(a,b); -} - -inline ref_type SubtableColumnBase::clone_table_columns(const Table* t) -{ - return _impl::TableFriend::clone_columns(*t, get_root_array()->get_alloc()); -} - -inline ref_type SubtableColumnBase::create(Allocator& alloc, size_t size) -{ - return IntegerColumn::create(alloc, Array::type_HasRefs, size); // Throws -} - -inline size_t* SubtableColumnBase::record_subtable_path(size_t* begin, size_t* end) noexcept -{ - if (end == begin) - return 0; // Error, not enough space in buffer - *begin++ = m_column_ndx; - if (end == begin) - return 0; // Error, not enough space in buffer - return _impl::TableFriend::record_subtable_path(*m_table, begin, end); -} - -inline void SubtableColumnBase::update_table_accessors(const size_t* col_path_begin, - const size_t* col_path_end, - _impl::TableFriend::AccessorUpdater& updater) -{ - // This function must assume no more than minimal consistency of the - // accessor hierarchy. This means in particular that it cannot access the - // underlying node structure. See AccessorConsistencyLevels. - - m_subtable_map.update_accessors(col_path_begin, col_path_end, updater); // Throws -} - -inline void SubtableColumnBase::do_insert(size_t row_ndx, int_fast64_t value, size_t num_rows) -{ - IntegerColumn::insert_without_updating_index(row_ndx, value, num_rows); // Throws - bool is_append = row_ndx == realm::npos; - if (!is_append) { - const bool fix_ndx_in_parent = true; - m_subtable_map.adj_insert_rows(row_ndx, num_rows); - } -} - - -inline SubtableColumn::SubtableColumn(Allocator& alloc, ref_type ref, - Table* table, size_t column_ndx): - SubtableColumnBase(alloc, ref, table, column_ndx), - m_subspec_ndx(realm::npos) -{ -} - -inline const Table* SubtableColumn::get_subtable_ptr(size_t subtable_ndx) const -{ - return const_cast(this)->get_subtable_ptr(subtable_ndx); -} - -inline void SubtableColumn::refresh_accessor_tree(size_t col_ndx, const Spec& spec) -{ - SubtableColumnBase::refresh_accessor_tree(col_ndx, spec); // Throws - m_subspec_ndx = spec.get_subspec_ndx(col_ndx); - m_subtable_map.refresh_accessor_tree(m_subspec_ndx); // Throws -} - -inline size_t SubtableColumn::get_subspec_ndx() const noexcept -{ - if (REALM_UNLIKELY(m_subspec_ndx == realm::npos)) { - typedef _impl::TableFriend tf; - const Spec& spec = tf::get_spec(*m_table); - m_subspec_ndx = spec.get_subspec_ndx(m_column_ndx); - } - return m_subspec_ndx; -} - - -} // namespace realm - -#endif // REALM_COLUMN_TABLE_HPP diff --git a/Pods/Realm/include/core/realm/column_timestamp.hpp b/Pods/Realm/include/core/realm/column_timestamp.hpp deleted file mode 100644 index fa1748f0..00000000 --- a/Pods/Realm/include/core/realm/column_timestamp.hpp +++ /dev/null @@ -1,143 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_TIMESTAMP_HPP -#define REALM_COLUMN_TIMESTAMP_HPP - -#include -#include - -namespace realm { - -// Inherits from ColumnTemplate to get a compare_values() that can be called without knowing the -// column type -class TimestampColumn : public ColumnBaseSimple, public ColumnTemplate { -public: - TimestampColumn(Allocator& alloc, ref_type ref); - ~TimestampColumn() noexcept override; - - static ref_type create(Allocator& alloc, size_t size, bool nullable); - - /// Get the number of entries in this column. This operation is relatively - /// slow. - size_t size() const noexcept override; - /// Whether or not this column is nullable. - bool is_nullable() const noexcept override; - /// Whether or not the value at \a row_ndx is NULL. If the column is not - /// nullable, always returns false. - bool is_null(size_t row_ndx) const noexcept override; - /// Sets the value at \a row_ndx to be NULL. - /// \throw LogicError Thrown if this column is not nullable. - void set_null(size_t row_ndx) override; - void insert_rows(size_t row_ndx, size_t num_rows_to_insert, size_t prior_num_rows, bool nullable) override; - void erase_rows(size_t row_ndx, size_t num_rows_to_erase, size_t prior_num_rows, - bool broken_reciprocal_backlinks) override; - void move_last_row_over(size_t row_ndx, size_t prior_num_rows, - bool broken_reciprocal_backlinks) override; - void clear(size_t num_rows, bool broken_reciprocal_backlinks) override; - void swap_rows(size_t row_ndx_1, size_t row_ndx_2) override; - void destroy() noexcept override; - - bool has_search_index() const noexcept final { return bool(m_search_index); } - StringIndex* get_search_index() noexcept final { return m_search_index.get(); } - StringIndex* get_search_index() const noexcept final { return m_search_index.get(); } - void destroy_search_index() noexcept override; - void set_search_index_ref(ref_type ref, ArrayParent* parent, size_t ndx_in_parent, - bool allow_duplicate_values) final; - void populate_search_index(); - StringIndex* create_search_index() override; - - StringData get_index_data(size_t, StringIndex::StringConversionBuffer& buffer) const noexcept override; - ref_type write(size_t slice_offset, size_t slice_size, size_t table_size, _impl::OutputStream&) const override; - void update_from_parent(size_t old_baseline) noexcept override; - void set_ndx_in_parent(size_t ndx) noexcept override; - void refresh_accessor_tree(size_t new_col_ndx, const Spec&) override; -#ifdef REALM_DEBUG - void verify() const override; - void to_dot(std::ostream&, StringData title = StringData()) const override; - void do_dump_node_structure(std::ostream&, int level) const override; - void leaf_to_dot(MemRef, ArrayParent*, size_t ndx_in_parent, std::ostream&) const override; -#endif - void add(const Timestamp& ts = Timestamp{}); - Timestamp get(size_t row_ndx) const noexcept; - Timestamp get_val(size_t row_ndx) const noexcept override { return get(row_ndx); } - void set(size_t row_ndx, const Timestamp& ts); - bool compare(const TimestampColumn& c) const noexcept; - - Timestamp maximum(size_t* result_index) const; - Timestamp minimum(size_t* result_index) const; - size_t count(Timestamp) const; - void erase(size_t row_ndx, bool is_last); - - template - size_t find(Timestamp value, size_t begin, size_t end) const noexcept - { - // FIXME: Here we can do all sorts of clever optimizations. Use bithack-search on seconds, then for each match check - // nanoseconds, etc, etc, etc. Lots of possibilities. Below code is naive and slow but works. - - Condition cond; - for (size_t t = begin; t < end; t++) { - Timestamp ts = get(t); - if (cond(ts, value, ts.is_null(), value.is_null())) - return t; - } - return npos; - } - - typedef Timestamp value_type; - -private: - std::unique_ptr>> m_seconds; - std::unique_ptr> m_nanoseconds; - - std::unique_ptr m_search_index; - - template - class CreateHandler; - - template - Timestamp minmax(size_t* result_index) const noexcept - { - // Condition is realm::Greater for maximum and realm::Less for minimum. - - if (size() == 0) { - if (result_index) - *result_index = npos; - return Timestamp(null{}); - } - - Timestamp best = get(0); - size_t best_index = 0; - - for (size_t i = 1; i < size(); ++i) { - Timestamp candidate = get(i); - if (Condition()(candidate, best, candidate.is_null(), best.is_null())) { - best = candidate; - best_index = i; - } - } - if (result_index) - *result_index = best_index; - return best; - } -}; - -} // namespace realm - -#endif // REALM_COLUMN_TIMESTAMP_HPP diff --git a/Pods/Realm/include/core/realm/column_tpl.hpp b/Pods/Realm/include/core/realm/column_tpl.hpp deleted file mode 100644 index 8710a947..00000000 --- a/Pods/Realm/include/core/realm/column_tpl.hpp +++ /dev/null @@ -1,141 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_TPL_HPP -#define REALM_COLUMN_TPL_HPP - -#include - -#include -#include -#include - -namespace realm { - -template -class FloatDoubleNode; -template -class IntegerNode; -template -class SequentialGetter; - -template -struct ColumnTypeTraits2; - -template -struct ColumnTypeTraits2 { - typedef IntegerColumn column_type; - typedef ArrayInteger array_type; -}; -template -struct ColumnTypeTraits2 { - typedef IntegerColumn column_type; - typedef ArrayInteger array_type; -}; -template -struct ColumnTypeTraits2 { - typedef FloatColumn column_type; - typedef ArrayFloat array_type; -}; -template -struct ColumnTypeTraits2 { - typedef DoubleColumn column_type; - typedef ArrayDouble array_type; -}; - - -namespace _impl { - -template -struct FindInLeaf { - using LeafType = typename ColType::LeafType; - - template - static bool find(const LeafType& leaf, T target, size_t local_start, size_t local_end, size_t leaf_start, QueryState& state) - { - Condition cond; - bool cont = true; - // todo, make an additional loop with hard coded `false` instead of is_null(v) for non-nullable columns - bool null_target = null::is_null_float(target); - for (size_t local_index = local_start; cont && local_index < local_end; local_index++) { - auto v = leaf.get(local_index); - if (cond(v, target, null::is_null_float(v), null_target)) { - cont = state.template match(leaf_start + local_index , 0, static_cast(v)); - } - } - return cont; - } -}; - -template<> -struct FindInLeaf { - using LeafType = IntegerColumn::LeafType; - - template - static bool find(const LeafType& leaf, T target, size_t local_start, size_t local_end, size_t leaf_start, QueryState& state) - { - const int c = Condition::condition; - return leaf.find(c, action, target, local_start, local_end, leaf_start, &state); - } -}; - -template<> -struct FindInLeaf { - using LeafType = IntNullColumn::LeafType; - - template - static bool find(const LeafType& leaf, T target, size_t local_start, size_t local_end, size_t leaf_start, QueryState& state) - { - constexpr int cond = Condition::condition; - return leaf.find(cond, action, target, local_start, local_end, leaf_start, &state); - } -}; - -} // namespace _impl - -template -R aggregate(const ColType& column, T target, size_t start, size_t end, - size_t limit, size_t* return_ndx) -{ - if (end == npos) - end = column.size(); - - QueryState state; - state.init(action, nullptr, limit); - SequentialGetter sg { &column }; - - bool cont = true; - for (size_t s = start; cont && s < end; ) { - sg.cache_next(s); - size_t start2 = s - sg.m_leaf_start; - size_t end2 = sg.local_end(end); - cont = _impl::FindInLeaf::template find(*sg.m_leaf_ptr, target, start2, end2, sg.m_leaf_start, state); - s = sg.m_leaf_start + end2; - } - - if (return_ndx) - *return_ndx = action == act_Sum ? state.m_match_count : state.m_minmax_index; - - return state.m_state; -} - - -} // namespace realm - -#endif // REALM_COLUMN_TPL_HPP diff --git a/Pods/Realm/include/core/realm/column_type.hpp b/Pods/Realm/include/core/realm/column_type.hpp deleted file mode 100644 index 96181131..00000000 --- a/Pods/Realm/include/core/realm/column_type.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COLUMN_TYPE_HPP -#define REALM_COLUMN_TYPE_HPP - -namespace realm { - - -// Note: Enumeration value assignments must be kept in sync with -// . -enum ColumnType { - // Column types - col_type_Int = 0, - col_type_Bool = 1, - col_type_String = 2, - col_type_StringEnum = 3, // double refs - col_type_Binary = 4, - col_type_Table = 5, - col_type_Mixed = 6, - col_type_OldDateTime = 7, - col_type_Timestamp = 8, - col_type_Float = 9, - col_type_Double = 10, - col_type_Reserved4 = 11, // Decimal - col_type_Link = 12, - col_type_LinkList = 13, - col_type_BackLink = 14 -}; - - -// Column attributes can be combined using bitwise or. -enum ColumnAttr { - col_attr_None = 0, - col_attr_Indexed = 1, - - /// Specifies that this column forms a unique constraint. It requires - /// `col_attr_Indexed`. - col_attr_Unique = 2, - - /// Reserved for future use. - col_attr_Reserved = 4, - - /// Specifies that the links of this column are strong, not weak. Applies - /// only to link columns (`type_Link` and `type_LinkList`). - col_attr_StrongLinks = 8, - - /// Specifies that elements in the column can be null. - col_attr_Nullable = 16 -}; - - -} // namespace realm - -#endif // REALM_COLUMN_TYPE_HPP diff --git a/Pods/Realm/include/core/realm/column_type_traits.hpp b/Pods/Realm/include/core/realm/column_type_traits.hpp deleted file mode 100644 index d03fd332..00000000 --- a/Pods/Realm/include/core/realm/column_type_traits.hpp +++ /dev/null @@ -1,177 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_COLUMN_TYPE_TRAITS_HPP -#define REALM_COLUMN_TYPE_TRAITS_HPP - -#include -#include -#include - -namespace realm { - -class OldDateTime; -class ArrayBinary; -class ArrayInteger; -class ArrayIntNull; -template class BasicArray; - -template -struct ColumnTypeTraits; - -template<> -struct ColumnTypeTraits { - using column_type = Column; - using leaf_type = ArrayInteger; - using sum_type = int64_t; - using minmax_type = int64_t; - static const DataType id = type_Int; - static const ColumnType column_id = col_type_Int; - static const ColumnType real_column_type = col_type_Int; -}; - -template<> -struct ColumnTypeTraits> { - using column_type = Column>; - using leaf_type = ArrayIntNull; - using sum_type = int64_t; - using minmax_type = int64_t; - static const DataType id = type_Int; - static const ColumnType column_id = col_type_Int; - static const ColumnType real_column_type = col_type_Int; -}; - -template<> -struct ColumnTypeTraits : - ColumnTypeTraits -{ - static const DataType id = type_Bool; - static const ColumnType column_id = col_type_Bool; -}; - -template<> -struct ColumnTypeTraits> : - ColumnTypeTraits> -{ - static const DataType id = type_Bool; - static const ColumnType column_id = col_type_Bool; -}; - -template<> -struct ColumnTypeTraits { - using column_type = FloatColumn; - using leaf_type = BasicArray; - using sum_type = double; - using minmax_type = float; - static const DataType id = type_Float; - static const ColumnType column_id = col_type_Float; - static const ColumnType real_column_type = col_type_Float; -}; - -template<> -struct ColumnTypeTraits { - using column_type = DoubleColumn; - using leaf_type = BasicArray; - using sum_type = double; - using minmax_type = double; - static const DataType id = type_Double; - static const ColumnType column_id = col_type_Double; - static const ColumnType real_column_type = col_type_Double; -}; - -template<> -struct ColumnTypeTraits : - ColumnTypeTraits -{ - static const DataType id = type_OldDateTime; - static const ColumnType column_id = col_type_OldDateTime; -}; - -template<> -struct ColumnTypeTraits> : - ColumnTypeTraits> -{ - static const DataType id = type_OldDateTime; - static const ColumnType column_id = col_type_OldDateTime; -}; - -template<> -struct ColumnTypeTraits { - using column_type = StringEnumColumn; - using leaf_type = ArrayInteger; - using sum_type = int64_t; - static const DataType id = type_String; - static const ColumnType column_id = col_type_String; - static const ColumnType real_column_type = col_type_String; -}; - -template<> -struct ColumnTypeTraits { - using column_type = BinaryColumn; - using leaf_type = ArrayBinary; - static const DataType id = type_Binary; - static const ColumnType column_id = col_type_Binary; - static const ColumnType real_column_type = col_type_Binary; -}; - -template -struct GetColumnType; -template<> -struct GetColumnType -{ - using type = IntegerColumn; -}; -template<> -struct GetColumnType -{ - using type = IntNullColumn; -}; -template -struct GetColumnType { - // FIXME: Null definition - using type = FloatColumn; -}; -template -struct GetColumnType { - // FIXME: Null definition - using type = DoubleColumn; -}; - -// Only purpose is to return 'double' if and only if source column (T) is float and you're doing a sum (A) -template -struct ColumnTypeTraitsSum { - typedef T sum_type; -}; - -template<> -struct ColumnTypeTraitsSum -{ - typedef double sum_type; -}; - -template -struct ColumnTypeTraitsSum, A> -{ - using sum_type = int64_t; -}; - -} - -#endif // REALM_COLUMN_TYPE_TRAITS_HPP diff --git a/Pods/Realm/include/core/realm/commit_log.hpp b/Pods/Realm/include/core/realm/commit_log.hpp deleted file mode 100644 index 2c92b6ad..00000000 --- a/Pods/Realm/include/core/realm/commit_log.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_COMMIT_LOG_HPP -#define REALM_COMMIT_LOG_HPP - -#include -#include - -#include -#include - - -namespace realm { - -// FIXME: Why is this exception class exposed? -class LogFileError: public std::runtime_error { -public: - LogFileError(const std::string& file_name): - std::runtime_error(file_name) - { - } -}; - -/// Create a writelog collector and associate it with a filepath. You'll need -/// one writelog collector for each shared group. Commits from writelog -/// collectors for a specific filepath may later be obtained through other -/// writelog collectors associated with said filepath. The caller assumes -/// ownership of the writelog collector and must destroy it, but only AFTER -/// destruction of the shared group using it. -std::unique_ptr -make_client_history(const std::string& path, const char* encryption_key = nullptr); - -} // namespace realm - - -#endif // REALM_COMMIT_LOG_HPP diff --git a/Pods/Realm/include/core/realm/data_type.hpp b/Pods/Realm/include/core/realm/data_type.hpp deleted file mode 100644 index 37ff60fb..00000000 --- a/Pods/Realm/include/core/realm/data_type.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_DATA_TYPE_HPP -#define REALM_DATA_TYPE_HPP - -namespace realm { - -// Note: Value assignments must be kept in sync with -// Note: Value assignments must be kept in sync with -// Note: Value assignments must be kept in sync with -// Note: Value assignments must be kept in sync with "com/realm/ColumnType.java" -enum DataType { - type_Int = 0, - type_Bool = 1, - type_Float = 9, - type_Double = 10, - type_String = 2, - type_Binary = 4, - type_OldDateTime = 7, - type_Timestamp = 8, - type_Table = 5, - type_Mixed = 6, - type_Link = 12, - type_LinkList = 13 -}; - -/// See Descriptor::set_link_type(). -enum LinkType { - link_Strong, - link_Weak -}; - -} // namespace realm - -#endif // REALM_DATA_TYPE_HPP diff --git a/Pods/Realm/include/core/realm/descriptor.hpp b/Pods/Realm/include/core/realm/descriptor.hpp deleted file mode 100644 index 1b431cd1..00000000 --- a/Pods/Realm/include/core/realm/descriptor.hpp +++ /dev/null @@ -1,830 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_DESCRIPTOR_HPP -#define REALM_DESCRIPTOR_HPP - -#include - -#include -#include -#include - - -namespace realm { - -namespace _impl { class DescriptorFriend; } - - -/// Accessor for table type descriptors. -/// -/// A table type descriptor is an entity that specifies the dynamic -/// type of a Realm table. Objects of this class are accessors -/// through which the descriptor can be inspected and -/// changed. Accessors can become detached, see is_attached() for more -/// on this. The descriptor itself is stored inside the database file, -/// or elsewhere in case of a free-standing table or a table in a -/// free-standing group. -/// -/// The dynamic type consists first, and foremost of an ordered list -/// of column descriptors. Each column descriptor specifies the name -/// and type of the column. -/// -/// When a table has a subtable column, every cell in than column -/// contains a subtable. All those subtables have the same dynamic -/// type, and therefore have a shared descriptor. See is_root() for -/// more on this. -/// -/// The Table class contains convenience methods, such as -/// Table::get_column_count() and Table::add_column(), that allow you -/// to inspect and change the dynamic type of simple tables without -/// resorting to use of descriptors. For example, the following two -/// statements have the same effect: -/// -/// table->add_column(type, name); -/// table->get_descriptor()->add_column(type, name); -/// -/// Note, however, that this equivalence holds only as long as no -/// shared subtable descriptors are involved. -/// -/// \sa Table::get_descriptor() -class Descriptor { -public: - /// Get the number of columns in the associated tables. - size_t get_column_count() const noexcept; - - /// Get the type of the column at the specified index. - /// - /// The consequences of specifying a column index that is out of - /// range, are undefined. - DataType get_column_type(size_t column_ndx) const noexcept; - - /// Get the name of the column at the specified index. - /// - /// The consequences of specifying a column index that is out of - /// range, are undefined. - StringData get_column_name(size_t column_ndx) const noexcept; - - /// Search for a column with the specified name. - /// - /// This function finds the first column with the specified name, - /// and returns its index. If there are no such columns, it - /// returns `not_found`. - size_t get_column_index(StringData name) const noexcept; - - /// Get the index of the column to which links in the column at the specified - /// index refer. - /// - /// The consequences of specifying a column index that is out of - /// range, are undefined. - /// - /// The consequences of specifying a column index that does not refer - /// to a link column, are undefined. - size_t get_column_link_target(size_t column_ndx) const noexcept; - - /// Get whether or not the specified column is nullable. - /// - /// The consequences of specifying a column index that is out of - /// range, are undefined. - bool is_nullable(size_t column_ndx) const noexcept; - - //@{ - - /// add_column() and add_column_link() are a shorthands for calling - /// insert_column() and insert_column_link(), respectively, with a column - /// index equal to the original number of columns. The returned value is - /// that column index. - /// - /// insert_column() inserts a new column into all the tables associated with - /// this descriptor. If any of the tables are not empty, the new column will - /// be filled with the default value associated with the specified data - /// type. This function cannot be used to insert link-type columns. For - /// that, you have to use insert_column_link() instead. - /// - /// This function modifies the dynamic type of all the tables that - /// share this descriptor. It does this by inserting a new column - /// with the specified name and type into the descriptor at the - /// specified index, and into each of the tables that share this - /// descriptor. - /// - /// insert_column_link() is like insert_column(), but inserts a link-type - /// column to a group-level table. It is not possible to add link-type - /// columns to tables that are not group-level tables. This functions must - /// be used in place of insert_column() when the column type is `type_Link` - /// or `type_LinkList`. A link-type column is associated with a particular - /// target table. All links in a link-type column refer to rows in the - /// target table of that column. The target table must also be a group-level - /// table, and it must belong to the same group as the origin table. - /// - /// \param name Name of new column. All strings are valid column names as - /// long as they are valid UTF-8 encodings and the number of bytes does not - /// exceed `max_column_name_length`. An attempt to add a column with a name - /// that is longer than `max_column_name_length` will cause an exception to - /// be thrown. - /// - /// \param subdesc If a non-null pointer is passed, and the - /// specified type is `type_Table`, then this function - /// automatically retrieves the descriptor associated with the new - /// subtable column, and stores a reference to its accessor in - /// `*subdesc`. - /// - /// \param col_ndx Insert the new column at this index. Preexisting columns - /// at indexes equal to, or greater than `col_ndx` will be shifted to the - /// next higher index. It is an error to specify an index that is greater - /// than the number of columns prior to the insertion. - /// - /// \param link_type See set_link_type(). - /// - /// \sa Table::add_column() - /// \sa Table::insert_column() - /// \sa Table::add_column_link() - /// \sa Table::insert_column_link() - /// \sa is_root() - - static const size_t max_column_name_length = 63; - - size_t add_column(DataType type, StringData name, DescriptorRef* subdesc = nullptr, bool nullable = false); - - void insert_column(size_t col_ndx, DataType type, StringData name, - DescriptorRef* subdesc = nullptr, bool nullable = false); - - size_t add_column_link(DataType type, StringData name, Table& target, - LinkType = link_Weak); - void insert_column_link(size_t col_ndx, DataType type, StringData name, Table& target, - LinkType = link_Weak); - //@} - - /// Remove the specified column from each of the associated - /// tables. If the removed column is the only column in the - /// descriptor, then the table size will drop to zero for all - /// tables that were not already empty. - /// - /// This function modifies the dynamic type of all the tables that - /// share this descriptor. It does this by removing the column at - /// the specified index from the descriptor, and from each of the - /// tables that share this descriptor. The consequences of - /// specifying a column index that is out of range, are undefined. - /// - /// If the removed column was a subtable column, then the - /// associated descriptor accessor will be detached, if it - /// exists. This function will also detach all accessors of - /// subtables of the root table. Only the accessor of the root - /// table will remain attached. The root table is the table - /// associated with the root descriptor. - /// - /// \param col_ndx The index of the column to be removed. It is an error to - /// specify an index that is greater than, or equal to the number of - /// columns. - /// - /// \sa is_root() - /// \sa Table::remove_column() - void remove_column(size_t col_ndx); - - /// Rename the specified column. - /// - /// This function modifies the dynamic type of all the tables that - /// share this descriptor. The consequences of specifying a column - /// index that is out of range, are undefined. - /// - /// This function will detach all accessors of subtables of the - /// root table. Only the accessor of the root table will remain - /// attached. The root table is the table associated with the root - /// descriptor. - /// - /// \param col_ndx The index of the column to be renamed. It is an error to - /// specify an index that is greater than, or equal to the number of - /// columns. - /// - /// \sa is_root() - /// \sa Table::rename_column() - void rename_column(size_t col_ndx, StringData new_name); - - /// There are two kinds of links, 'weak' and 'strong'. A strong link is one - /// that implies ownership, i.e., that the origin row (parent) owns the - /// target row (child). Simply stated, this means that when the origin row - /// (parent) is removed, so is the target row (child). If there are multiple - /// strong links to a target row, the origin rows share ownership, and the - /// target row is removed when the last owner disappears. Weak links do not - /// imply ownership, and will be nullified or removed when the target row - /// disappears. - /// - /// To put this in precise terms; when a strong link is broken, and the - /// target row has no other strong links to it, the target row is removed. A - /// row that is implicitly removed in this way, is said to be - /// *cascade-removed*. When a weak link is broken, nothing is - /// cascade-removed. - /// - /// A link is considered broken if - /// - /// - the link is nullified, removed, or replaced by a different link - /// (Row::nullify_link(), Row::set_link(), LinkView::remove_link(), - /// LinkView::set_link(), LinkView::clear()), or if - /// - /// - the origin row is explicitly removed (Row::move_last_over(), - /// Table::clear()), or if - /// - /// - the origin row is cascade-removed, or if - /// - /// - the origin column is removed from the table (Table::remove_column()), - /// or if - /// - /// - the origin table is removed from the group. - /// - /// Note that a link is *not* considered broken when it is replaced by a - /// link to the same target row. I.e., no no rows will be cascade-removed - /// due to such an operation. - /// - /// When a row is explicitly removed (such as by Table::move_last_over()), - /// all links to it are automatically removed or nullified. For single link - /// columns (type_Link), links to the removed row are nullified. For link - /// list columns (type_LinkList), links to the removed row are removed from - /// the list. - /// - /// When a row is cascade-removed there can no longer be any strong links to it, - /// but if there are any weak links, they will be removed or nullified. - /// - /// It is important to understand that this cascade-removal scheme is too - /// simplistic to enable detection and removal of orphaned link-cycles. In - /// this respect, it suffers from the same limitations as a reference - /// counting scheme generally does. - /// - /// It is also important to understand, that the possible presence of a link - /// cycle can cause a row to be cascade-removed as a consequence of being - /// modified. This happens, for example, if two rows, A and B, have strong - /// links to each other, and there are no other strong links to either of - /// them. In this case, if A->B is changed to A->C, then both A and B will - /// be cascade-removed. This can lead to obscure bugs in some applications, - /// such as in the following case: - /// - /// table.set_link(col_ndx_1, row_ndx, ...); - /// table.set_int(col_ndx_2, row_ndx, ...); // Oops, `row_ndx` may no longer refer to the same row - /// - /// To be safe, applications, that may encounter cycles, are advised to - /// adopt the following pattern: - /// - /// Row row = table[row_ndx]; - /// row.set_link(col_ndx_1, ...); - /// if (row) - /// row.set_int(col_ndx_2, ...); // Ok, because we check whether the row has disappeared - /// - /// \param col_ndx The index of the link column (`type_Link` or - /// `type_LinkList`) to be modified. It is an error to specify an index that - /// is greater than, or equal to the number of columns, or to specify the - /// index of a non-link column. - void set_link_type(size_t col_ndx, LinkType); - - //@{ - /// Get the descriptor for the specified subtable column. - /// - /// This function provides access to the shared subtable - /// descriptor for the subtables in the specified column. The - /// specified column must be a column whose type is 'table'. The - /// consequences of specifying a column of a different type, or - /// specifying an index that is out of range, are undefined. - /// - /// Note that this function cannot be used with 'mixed' columns, - /// since subtables of that kind have independent dynamic types, - /// and therefore, have independent descriptors. You can only get - /// access to the descriptor of a subtable in a mixed column by - /// first getting access to the subtable itself. - /// - /// \sa is_root() - DescriptorRef get_subdescriptor(size_t column_ndx); - ConstDescriptorRef get_subdescriptor(size_t column_ndx) const; - //@} - - //@{ - /// Returns the parent table descriptor, if any. - /// - /// If this descriptor is the *root descriptor*, then this - /// function returns null. Otherwise it returns the accessor of - /// the parent descriptor. - /// - /// \sa is_root() - DescriptorRef get_parent() noexcept; - ConstDescriptorRef get_parent() const noexcept; - //@} - - //@{ - /// Get the table associated with the root descriptor. - /// - /// \sa get_parent() - /// \sa is_root() - TableRef get_root_table() noexcept; - ConstTableRef get_root_table() const noexcept; - //@} - - //@{ - /// Get the target table associated with the specified link column. This - /// descriptor must be a root descriptor (is_root()), and the specified column must be a - /// link column (`type_Link` or `type_LinkList`). - TableRef get_link_target(size_t col_ndx) noexcept; - ConstTableRef get_link_target(size_t col_ndx) const noexcept; - //@} - - /// Is this a root descriptor? - /// - /// Descriptors of tables with independent dynamic type are root - /// descriptors. Root descriptors are never shared. Tables that - /// are direct members of groups have independent dynamic - /// types. The same is true for free-standing tables and subtables - /// in columns of type 'mixed'. - /// - /// When a table has a column of type 'table', the cells in that - /// column contain subtables. All those subtables have the same - /// dynamic type, and they share a single dynamic type - /// descriptor. Such shared descriptors are never root - /// descriptors. - /// - /// A type descriptor can even be shared by subtables with - /// different parent tables, but only if the parent tables - /// themselves have a shared type descriptor. For example, if a - /// table has a column `foo` of type 'table', and each of the - /// subtables in `foo` has a column `bar` of type 'table', then - /// all the subtables in all the `bar` columns share the same - /// dynamic type descriptor. - /// - /// \sa Table::has_shared_type() - bool is_root() const noexcept; - - /// Determine whether this accessor is still attached. - /// - /// A table descriptor accessor may get detached from the - /// underlying descriptor for various reasons (see below). When it - /// does, it no longer refers to that descriptor, and can no - /// longer be used, except for calling is_attached(). The - /// consequences of calling other methods on a detached accessor - /// are undefined. Descriptor accessors obtained by calling - /// functions in the Realm API are always in the 'attached' - /// state immediately upon return from those functions. - /// - /// A descriptor accessor that is obtained directly from a table - /// becomes detached if the table becomes detached. A shared - /// subtable descriptor accessor that is obtained by a call to - /// get_subdescriptor() becomes detached if the parent descriptor - /// accessor becomes detached, or if the corresponding subtable - /// column is removed. A descriptor accessor does not get detached - /// under any other circumstances. - bool is_attached() const noexcept; - - //@{ - /// \brief Compare two table descriptors. - /// - /// Two table descriptors are equal if they have the same number of columns, - /// and for each column index, the two columns have the same name, data - /// type, and set of attributes. - /// - /// For link columns (`type_Link` and `type_LinkList`), the target table - /// (get_link_target()) of the two columns must be the same. - /// - /// For subtable columns (`type_Table`), the two corresponding - /// subdescriptors must themselves be equal, as if by a recursive call to - /// operator==(). - /// - /// The consequences of comparing a detached descriptor are - /// undefined. - bool operator==(const Descriptor&) const noexcept; - bool operator!=(const Descriptor&) const noexcept; - //@} - - /// If the specified column is optimized to store only unique values, then - /// this function returns the number of unique values currently - /// stored. Otherwise it returns zero. This function is mainly intended for - /// debugging purposes. - size_t get_num_unique_values(size_t column_ndx) const; - - ~Descriptor() noexcept; - - -private: - TableRef m_root_table; // Table associated with root descriptor. Detached iff null. - DescriptorRef m_parent; // Null iff detached or root descriptor. - Spec* m_spec; // Valid if attached. Owned iff valid and `m_parent`. - - mutable unsigned long m_ref_count; - - // Whenever a subtable descriptor accessor is created, it is - // stored in this map. This ensures that when get_subdescriptor() - // is called to created multiple DescriptorRef objects that - // overlap in time, then they will all refer to the same - // descriptor object. - // - // It also enables the necessary recursive detaching of descriptor - // objects. - struct subdesc_entry { - size_t m_column_ndx; - Descriptor* m_subdesc; - subdesc_entry(size_t column_ndx, Descriptor*); - }; - typedef std::vector subdesc_map; - mutable subdesc_map m_subdesc_map; - - Descriptor() noexcept; - - void bind_ptr() const noexcept; - void unbind_ptr() const noexcept; - - // Called by the root table if this becomes the root - // descriptor. Otherwise it is called by the descriptor that - // becomes its parent. - // - // Puts this descriptor accessor into the attached state. This - // attaches it to the underlying structure of array nodes. It does - // not establish the parents reference to this descriptor, that is - // the job of the parent. When this function returns, - // is_attached() will return true. - // - // Not idempotent. - // - // The specified table is not allowed to be a subtable with a - // shareable spec. That is, Table::has_shared_spec() must return - // false. - // - // The specified spec must be the spec of the specified table or - // of one of its direct or indirect subtable columns. - // - // When the specified spec is the spec of the root table, the - // parent must be specified as null. When the specified spec is - // not the root spec, a proper parent must be specified. - void attach(Table*, Descriptor* parent, Spec*) noexcept; - - // Detach accessor from underlying descriptor. Caller must ensure - // that a reference count exists upon return, for example by - // obtaining an extra reference count before the call. - // - // This function is called either by the root table if this is the - // root descriptor, or by the parent descriptor, if it is not. - // - // Puts this descriptor accessor into the detached state. This - // detaches it from the underlying structure of array nodes. It - // also calls detach_subdesc_accessors(). When this function - // returns, is_attached() will return false. - // - // Not idempotent. - void detach() noexcept; - - // Recursively detach all subtable descriptor accessors that - // exist, that is, all subtable descriptor accessors that have - // this descriptor as ancestor. - void detach_subdesc_accessors() noexcept; - - // Remove the entry from m_subdesc_map that refers to the - // specified subtable descriptor. It must be there. - void remove_subdesc_entry(Descriptor* subdesc) const noexcept; - - // Record the path in terms of subtable column indexes from the - // root descriptor to this descriptor. If this descriptor is a - // root descriptor, the path is empty. Returns zero if the path is - // too long to fit in the specified buffer. Otherwise the path - // indexes will be stored between `begin_2`and `end`, where - // `begin_2` is the returned pointer. - size_t* record_subdesc_path(size_t* begin, size_t* end) const noexcept; - - // Returns a pointer to the accessor of the specified - // subdescriptor if that accessor exists, otherwise this function - // return null. - Descriptor* get_subdesc_accessor(size_t column_ndx) noexcept; - - void move_column(size_t from_ndx, size_t to_ndx); - - void adj_insert_column(size_t col_ndx) noexcept; - void adj_erase_column(size_t col_ndx) noexcept; - void adj_move_column(size_t col_ndx_1, size_t col_ndx_2) noexcept; - - friend class util::bind_ptr; - friend class util::bind_ptr; - friend class _impl::DescriptorFriend; -}; - - - - -// Implementation: - -inline size_t Descriptor::get_column_count() const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec->get_public_column_count(); -} - -inline StringData Descriptor::get_column_name(size_t ndx) const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec->get_column_name(ndx); -} - -inline DataType Descriptor::get_column_type(size_t ndx) const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec->get_public_column_type(ndx); -} - -inline bool Descriptor::is_nullable(size_t ndx) const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec->get_column_attr(ndx) & col_attr_Nullable; -} - -inline size_t Descriptor::get_column_index(StringData name) const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec->get_column_index(name); -} - -inline size_t Descriptor::get_column_link_target(size_t column_ndx) const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec->get_opposite_link_table_ndx(column_ndx); -} - -inline size_t Descriptor::add_column(DataType type, StringData name, DescriptorRef* subdesc, - bool nullable) -{ - size_t col_ndx = m_spec->get_public_column_count(); - insert_column(col_ndx, type, name, subdesc, nullable); // Throws - return col_ndx; -} - -inline void Descriptor::insert_column(size_t col_ndx, DataType type, StringData name, - DescriptorRef* subdesc, bool nullable) -{ - typedef _impl::TableFriend tf; - - if (REALM_UNLIKELY(!is_attached())) - throw LogicError(LogicError::detached_accessor); - if (REALM_UNLIKELY(col_ndx > get_column_count())) - throw LogicError(LogicError::column_index_out_of_range); - if (REALM_UNLIKELY(tf::is_link_type(ColumnType(type)))) - throw LogicError(LogicError::illegal_type); - - LinkTargetInfo invalid_link; - tf::insert_column(*this, col_ndx, type, name, invalid_link, nullable); // Throws - adj_insert_column(col_ndx); - if (subdesc && type == type_Table) - *subdesc = get_subdescriptor(col_ndx); -} - -inline size_t Descriptor::add_column_link(DataType type, StringData name, Table& target, - LinkType link_type) -{ - size_t col_ndx = m_spec->get_public_column_count(); - insert_column_link(col_ndx, type, name, target, link_type); // Throws - return col_ndx; -} - -inline void Descriptor::insert_column_link(size_t col_ndx, DataType type, StringData name, - Table& target, LinkType link_type) -{ - typedef _impl::TableFriend tf; - - if (REALM_UNLIKELY(!is_attached() || !target.is_attached())) - throw LogicError(LogicError::detached_accessor); - if (REALM_UNLIKELY(col_ndx > get_column_count())) - throw LogicError(LogicError::column_index_out_of_range); - if (REALM_UNLIKELY(!tf::is_link_type(ColumnType(type)))) - throw LogicError(LogicError::illegal_type); - if (REALM_UNLIKELY(!is_root())) - throw LogicError(LogicError::wrong_kind_of_descriptor); - // Both origin and target must be group-level tables, and in the same group. - Group* origin_group = tf::get_parent_group(*get_root_table()); - Group* target_group = tf::get_parent_group(target); - if (!origin_group || !target_group) - throw LogicError(LogicError::wrong_kind_of_table); - if (origin_group != target_group) - throw LogicError(LogicError::group_mismatch); - - LinkTargetInfo link(&target); - tf::insert_column(*this, col_ndx, type, name, link); // Throws - adj_insert_column(col_ndx); - - tf::set_link_type(*get_root_table(), col_ndx, link_type); // Throws -} - -inline void Descriptor::remove_column(size_t col_ndx) -{ - typedef _impl::TableFriend tf; - - if (REALM_UNLIKELY(!is_attached())) - throw LogicError(LogicError::detached_accessor); - if (REALM_UNLIKELY(col_ndx >= get_column_count())) - throw LogicError(LogicError::column_index_out_of_range); - - tf::erase_column(*this, col_ndx); // Throws - adj_erase_column(col_ndx); -} - -inline void Descriptor::rename_column(size_t col_ndx, StringData name) -{ - typedef _impl::TableFriend tf; - - if (REALM_UNLIKELY(!is_attached())) - throw LogicError(LogicError::detached_accessor); - if (REALM_UNLIKELY(col_ndx >= get_column_count())) - throw LogicError(LogicError::column_index_out_of_range); - - tf::rename_column(*this, col_ndx, name); // Throws -} - -inline void Descriptor::move_column(size_t from_ndx, size_t to_ndx) -{ - REALM_ASSERT(is_attached()); - typedef _impl::TableFriend tf; - tf::move_column(*this, from_ndx, to_ndx); // Throws - adj_move_column(from_ndx, to_ndx); -} - -inline void Descriptor::set_link_type(size_t col_ndx, LinkType link_type) -{ - typedef _impl::TableFriend tf; - - if (REALM_UNLIKELY(!is_attached())) - throw LogicError(LogicError::detached_accessor); - if (REALM_UNLIKELY(col_ndx >= get_column_count())) - throw LogicError(LogicError::column_index_out_of_range); - if (REALM_UNLIKELY(!tf::is_link_type(ColumnType(get_column_type(col_ndx))))) - throw LogicError(LogicError::illegal_type); - - tf::set_link_type(*get_root_table(), col_ndx, link_type); // Throws -} - -inline ConstDescriptorRef Descriptor::get_subdescriptor(size_t column_ndx) const -{ - return const_cast(this)->get_subdescriptor(column_ndx); -} - -inline DescriptorRef Descriptor::get_parent() noexcept -{ - return m_parent; -} - -inline ConstDescriptorRef Descriptor::get_parent() const noexcept -{ - return const_cast(this)->get_parent(); -} - -inline TableRef Descriptor::get_root_table() noexcept -{ - return m_root_table; -} - -inline ConstTableRef Descriptor::get_root_table() const noexcept -{ - return const_cast(this)->get_root_table(); -} - -inline TableRef Descriptor::get_link_target(size_t col_ndx) noexcept -{ - REALM_ASSERT(is_attached()); - REALM_ASSERT(is_root()); - return get_root_table()->get_link_target(col_ndx); -} - -inline ConstTableRef Descriptor::get_link_target(size_t col_ndx) const noexcept -{ - REALM_ASSERT(is_attached()); - REALM_ASSERT(is_root()); - return get_root_table()->get_link_target(col_ndx); -} - -inline bool Descriptor::is_root() const noexcept -{ - return !m_parent; -} - -inline Descriptor::Descriptor() noexcept: m_ref_count(0) -{ -} - -inline void Descriptor::bind_ptr() const noexcept -{ - ++m_ref_count; -} - -inline void Descriptor::unbind_ptr() const noexcept -{ - if (--m_ref_count == 0) - delete this; -} - -inline void Descriptor::attach(Table* table, Descriptor* parent, Spec* spec) noexcept -{ - REALM_ASSERT(!is_attached()); - REALM_ASSERT(!table->has_shared_type()); - m_root_table.reset(table); - m_parent.reset(parent); - m_spec = spec; -} - -inline bool Descriptor::is_attached() const noexcept -{ - return bool(m_root_table); -} - -inline Descriptor::subdesc_entry::subdesc_entry(size_t n, Descriptor* d): - m_column_ndx(n), - m_subdesc(d) -{ -} - -inline bool Descriptor::operator==(const Descriptor& d) const noexcept -{ - REALM_ASSERT(is_attached()); - REALM_ASSERT(d.is_attached()); - return *m_spec == *d.m_spec; -} - -inline bool Descriptor::operator!=(const Descriptor& d) const noexcept -{ - return !(*this == d); -} - -// The purpose of this class is to give internal access to some, but -// not all of the non-public parts of the Descriptor class. -class _impl::DescriptorFriend { -public: - static Descriptor* create() - { - return new Descriptor; // Throws - } - - static void attach(Descriptor& desc, Table* table, Descriptor* parent, Spec* spec) noexcept - { - desc.attach(table, parent, spec); - } - - static void detach(Descriptor& desc) noexcept - { - desc.detach(); - } - - static Table& get_root_table(Descriptor& desc) noexcept - { - return *desc.m_root_table; - } - - static const Table& get_root_table(const Descriptor& desc) noexcept - { - return *desc.m_root_table; - } - - static Spec& get_spec(Descriptor& desc) noexcept - { - return *desc.m_spec; - } - - static const Spec& get_spec(const Descriptor& desc) noexcept - { - return *desc.m_spec; - } - - static size_t* record_subdesc_path(const Descriptor& desc, size_t* begin, - size_t* end) noexcept - { - return desc.record_subdesc_path(begin, end); - } - - static Descriptor* get_subdesc_accessor(Descriptor& desc, size_t column_ndx) noexcept - { - return desc.get_subdesc_accessor(column_ndx); - } - - static void move_column(Descriptor& desc, size_t from_ndx, size_t to_ndx) - { - return desc.move_column(from_ndx, to_ndx); - } - - static void adj_insert_column(Descriptor& desc, size_t col_ndx) noexcept - { - desc.adj_insert_column(col_ndx); - } - - static void adj_erase_column(Descriptor& desc, size_t col_ndx) noexcept - { - desc.adj_erase_column(col_ndx); - } - - static void adj_move_column(Descriptor& desc, size_t col_ndx_1, size_t col_ndx_2) noexcept - { - desc.adj_move_column(col_ndx_1, col_ndx_2); - } -}; - -} // namespace realm - -#endif // REALM_DESCRIPTOR_HPP diff --git a/Pods/Realm/include/core/realm/descriptor_fwd.hpp b/Pods/Realm/include/core/realm/descriptor_fwd.hpp deleted file mode 100644 index 482b0fe0..00000000 --- a/Pods/Realm/include/core/realm/descriptor_fwd.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_DESCRIPTOR_FWD_HPP -#define REALM_DESCRIPTOR_FWD_HPP - -#include - - -namespace realm { - -class Descriptor; -typedef util::bind_ptr DescriptorRef; -typedef util::bind_ptr ConstDescriptorRef; - -} // namespace realm - -#endif // REALM_DESCRIPTOR_FWD_HPP diff --git a/Pods/Realm/include/core/realm/disable_sync_to_disk.hpp b/Pods/Realm/include/core/realm/disable_sync_to_disk.hpp deleted file mode 100644 index 4b29959f..00000000 --- a/Pods/Realm/include/core/realm/disable_sync_to_disk.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_DISABLE_SYNC_TO_DISK_HPP -#define REALM_DISABLE_SYNC_TO_DISK_HPP - -#include - -namespace realm { - -/// Completely disable synchronization with storage device to speed up unit -/// testing. This is an unsafe mode of operation, and should never be used in -/// production. This function is thread safe. -void disable_sync_to_disk(); - -/// Returns true after disable_sync_to_disk() has been called. This function is -/// thread safe. -bool get_disable_sync_to_disk() noexcept; - -} // namespace realm - -#endif // REALM_DISABLE_SYNC_TO_DISK_HPP diff --git a/Pods/Realm/include/core/realm/exceptions.hpp b/Pods/Realm/include/core/realm/exceptions.hpp deleted file mode 100644 index 8d768888..00000000 --- a/Pods/Realm/include/core/realm/exceptions.hpp +++ /dev/null @@ -1,251 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_EXCEPTIONS_HPP -#define REALM_EXCEPTIONS_HPP - -#include - -#include - -namespace realm { - -/// Thrown by various functions to indicate that a specified table does not -/// exist. -class NoSuchTable: public std::exception { -public: - const char* what() const noexcept override; -}; - - -/// Thrown by various functions to indicate that a specified table name is -/// already in use. -class TableNameInUse: public std::exception { -public: - const char* what() const noexcept override; -}; - - -// Thrown by functions that require a table to **not** be the target of link -// columns, unless those link columns are part of the table itself. -class CrossTableLinkTarget: public std::exception { -public: - const char* what() const noexcept override; -}; - - -/// Thrown by various functions to indicate that the dynamic type of a table -/// does not match a particular other table type (dynamic or static). -class DescriptorMismatch: public std::exception { -public: - const char* what() const noexcept override; -}; - - -/// The \c FileFormatUpgradeRequired exception can be thrown by the \c -/// SharedGroup constructor when opening a database that uses a deprecated file -/// format, and the user has indicated he does not want automatic upgrades to -/// be performed. This exception indicates that until an upgrade of the file -/// format is performed, the database will be unavailable for read or write -/// operations. -class FileFormatUpgradeRequired: public std::exception { -public: - const char* what() const noexcept override; -}; - -/// Thrown when memory can no longer be mapped to. When mmap/remap fails. -class AddressSpaceExhausted: public std::runtime_error { -public: - AddressSpaceExhausted(const std::string& msg); - /// runtime_error::what() returns the msg provided in the constructor. -}; - - -/// The \c LogicError exception class is intended to be thrown only when -/// applications (or bindings) violate rules that are stated (or ought to have -/// been stated) in the documentation of the public API, and only in cases -/// where the violation could have been easily and efficiently predicted by the -/// application. In other words, this exception class is for the cases where -/// the error is due to incorrect use of the public API. -/// -/// This class is not supposed to be caught by applications. It is not even -/// supposed to be considered part of the public API, and therefore the -/// documentation of the public API should **not** mention the \c LogicError -/// exception class by name. Note how this contrasts with other exception -/// classes, such as \c NoSuchTable, which are part of the public API, and are -/// supposed to be mentioned in the documentation by name. The \c LogicError -/// exception is part of Realm's private API. -/// -/// In other words, the \c LogicError class should exclusively be used in -/// replacement (or in addition to) asserts (debug or not) in order to -/// guarantee program interruption, while still allowing for complete -/// test-cases to be written and run. -/// -/// To this effect, the special `CHECK_LOGIC_ERROR()` macro is provided as a -/// test framework plugin to allow unit tests to check that the functions in -/// the public API do throw \c LogicError when rules are violated. -/// -/// The reason behind hiding this class from the public API is to prevent users -/// from getting used to the idea that "Undefined Behaviour" equates a specific -/// exception being thrown. The whole point of properly documenting "Undefined -/// Behaviour" cases is to help the user know what the limits are, without -/// constraining the database to handle every and any use-case thrown at it. -/// -/// FIXME: This exception class should probably be moved to the `_impl` -/// namespace, in order to avoid some confusion. -class LogicError: public std::exception { -public: - enum ErrorKind { - string_too_big, - binary_too_big, - table_name_too_long, - column_name_too_long, - table_index_out_of_range, - row_index_out_of_range, - column_index_out_of_range, - string_position_out_of_range, - link_index_out_of_range, - bad_version, - illegal_type, - - /// Indicates that an argument has a value that is illegal in combination - /// with another argument, or with the state of an involved object. - illegal_combination, - - /// Indicates a data type mismatch, such as when `Table::find_pkey_int()` is - /// called and the type of the primary key is not `type_Int`. - type_mismatch, - - /// Indicates that two involved tables are not in the same group. - group_mismatch, - - /// Indicates that an involved descriptor is of the wrong kind, i.e., if - /// it is a subtable descriptor, and the function requires a root table - /// descriptor. - wrong_kind_of_descriptor, - - /// Indicates that an involved table is of the wrong kind, i.e., if it - /// is a subtable, and the function requires a root table, or if it is a - /// free-standing table, and the function requires a group-level table. - wrong_kind_of_table, - - /// Indicates that an involved accessor is was detached, i.e., was not - /// attached to an underlying object. - detached_accessor, - - /// Indicates that a specified row index of a target table (a link) is - /// out of range. This is used for disambiguation in cases such as - /// Table::set_link() where one specifies both a row index of the origin - /// table, and a row index of the target table. - target_row_index_out_of_range, - - // Indicates that an involved column lacks a search index. - no_search_index, - - /// Indicates that a modification was attempted that would have produced a - /// duplicate primary value. - unique_constraint_violation, - - /// User attempted to insert null in non-nullable column - column_not_nullable, - - /// Group::open() is called on a group accessor that is already in the - /// attached state. Or Group::open() or Group::commit() is called on a - /// group accessor that is managed by a SharedGroup object. - wrong_group_state, - - /// No active transaction on a particular SharedGroup object (e.g., - /// SharedGroup::commit()), or the active transaction on the SharedGroup - /// object is of the wrong type (read/write), or an attampt was made to - /// initiate a new transaction while one is already in progress on the - /// same SharedGroup object. - wrong_transact_state, - - /// Attempted use of a continuous transaction through a SharedGroup - /// object with no history. See Replication::get_history(). - no_history, - - /// Durability setting (as passed to the SharedGroup constructor) was - /// not consistent across the session. - mixed_durability, - - /// History type (as specified by the Replication implementation passed - /// to the SharedGroup constructor) was not consistent across the - /// session. - mixed_history_type - }; - - LogicError(ErrorKind message); - - const char* what() const noexcept override; - ErrorKind kind() const noexcept; -private: - ErrorKind m_kind; -}; - - - - -// Implementation: - -inline const char* NoSuchTable::what() const noexcept -{ - return "No such table exists"; -} - -inline const char* TableNameInUse::what() const noexcept -{ - return "The specified table name is already in use"; -} - -inline const char* CrossTableLinkTarget::what() const noexcept -{ - return "Table is target of cross-table link columns"; -} - -inline const char* DescriptorMismatch::what() const noexcept -{ - return "Table descriptor mismatch"; -} - -inline const char* FileFormatUpgradeRequired::what() const noexcept -{ - return "Database upgrade required but prohibited"; -} - -inline AddressSpaceExhausted::AddressSpaceExhausted(const std::string& msg): - std::runtime_error(msg) -{ -} - -inline LogicError::LogicError(LogicError::ErrorKind kind): - m_kind(kind) -{ -} - -inline LogicError::ErrorKind LogicError::kind() const noexcept -{ - return m_kind; -} - - -} // namespace realm - -#endif // REALM_EXCEPTIONS_HPP diff --git a/Pods/Realm/include/core/realm/group.hpp b/Pods/Realm/include/core/realm/group.hpp deleted file mode 100644 index 431c3415..00000000 --- a/Pods/Realm/include/core/realm/group.hpp +++ /dev/null @@ -1,1381 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_GROUP_HPP -#define REALM_GROUP_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - -class SharedGroup; -namespace _impl { -class GroupFriend; -class TransactLogConvenientEncoder; -class TransactLogParser; -} - - -/// A group is a collection of named tables. -/// -/// Tables occur in the group in an unspecified order, but an order that -/// generally remains fixed. The order is guaranteed to remain fixed between two -/// points in time if no tables are added to, or removed from the group during -/// that time. When tables are added to, or removed from the group, the order -/// may change arbitrarily. -/// -/// If `table` is a table accessor attached to a group-level table, and `group` -/// is a group accessor attached to the group, then the following is guaranteed, -/// even after a change in the table order: -/// -/// \code{.cpp} -/// -/// table == group.get_table(table.get_index_in_group()) -/// -/// \endcode -/// -class Group: private Table::Parent { -public: - /// Construct a free-standing group. This group instance will be - /// in the attached state, but neither associated with a file, nor - /// with an external memory buffer. - Group(); - - enum OpenMode { - /// Open in read-only mode. Fail if the file does not already exist. - mode_ReadOnly, - /// Open in read/write mode. Create the file if it doesn't exist. - mode_ReadWrite, - /// Open in read/write mode. Fail if the file does not already exist. - mode_ReadWriteNoCreate - }; - - /// Equivalent to calling open(const std::string&, const char*, OpenMode) - /// on an unattached group accessor. - explicit Group(const std::string& file, const char* encryption_key = nullptr, - OpenMode = mode_ReadOnly); - - /// Equivalent to calling open(BinaryData, bool) on an unattached - /// group accessor. Note that if this constructor throws, the - /// ownership of the memory buffer will remain with the caller, - /// regardless of whether \a take_ownership is set to `true` or - /// `false`. - explicit Group(BinaryData, bool take_ownership = true); - - struct unattached_tag {}; - - /// Create a Group instance in its unattached state. It may then - /// be attached to a database file later by calling one of the - /// open() methods. You may test whether this instance is - /// currently in its attached state by calling - /// is_attached(). Calling any other method (except the - /// destructor) while in the unattached state has undefined - /// behavior. - Group(unattached_tag) noexcept; - - // FIXME: Implement a proper copy constructor (fairly trivial). - Group(const Group&) = delete; - - ~Group() noexcept override; - - /// Attach this Group instance to the specified database file. - /// - /// By default, the specified file is opened in read-only mode - /// (mode_ReadOnly). This allows opening a file even when the - /// caller lacks permission to write to that file. The opened - /// group may still be modified freely, but the changes cannot be - /// written back to the same file using the commit() function. An - /// attempt to do that, will cause an exception to be thrown. When - /// opening in read-only mode, it is an error if the specified - /// file does not already exist in the file system. - /// - /// Alternatively, the file can be opened in read/write mode - /// (mode_ReadWrite). This allows use of the commit() function, - /// but, of course, it also requires that the caller has - /// permission to write to the specified file. When opening in - /// read-write mode, an attempt to create the specified file will - /// be made, if it does not already exist in the file system. - /// - /// In any case, if the file already exists, it must contain a - /// valid Realm database. In many cases invalidity will be - /// detected and cause the InvalidDatabase exception to be thrown, - /// but you should not rely on it. - /// - /// Note that changes made to the database via a Group instance - /// are not automatically committed to the specified file. You - /// may, however, at any time, explicitly commit your changes by - /// calling the commit() method, provided that the specified - /// open-mode is not mode_ReadOnly. Alternatively, you may call - /// write() to write the entire database to a new file. Writing - /// the database to a new file does not end, or in any other way - /// change the association between the Group instance and the file - /// that was specified in the call to open(). - /// - /// A file that is passed to Group::open(), may not be modified by - /// a third party until after the Group object is - /// destroyed. Behavior is undefined if a file is modified by a - /// third party while any Group object is associated with it. - /// - /// Calling open() on a Group instance that is already in the - /// attached state has undefined behavior. - /// - /// Accessing a Realm database file through manual construction - /// of a Group object does not offer any level of thread safety or - /// transaction safety. When any of those kinds of safety are a - /// concern, consider using a SharedGroup instead. When accessing - /// a database file in read/write mode through a manually - /// constructed Group object, it is entirely the responsibility of - /// the application that the file is not accessed in any way by a - /// third party during the life-time of that group object. It is, - /// on the other hand, safe to concurrently access a database file - /// by multiple manually created Group objects, as long as all of - /// them are opened in read-only mode, and there is no other party - /// that modifies the file concurrently. - /// - /// Do not call this function on a group instance that is managed - /// by a shared group. Doing so will result in undefined behavior. - /// - /// Even if this function throws, it may have the side-effect of - /// creating the specified file, and the file may get left behind - /// in an invalid state. Of course, this can only happen if - /// read/write mode (mode_ReadWrite) was requested, and the file - /// did not already exist. - /// - /// \param file File system path to a Realm database file. - /// - /// \param encryption_key 32-byte key used to encrypt and decrypt - /// the database file, or nullptr to disable encryption. - /// - /// \param mode Specifying a mode that is not mode_ReadOnly - /// requires that the specified file can be opened in read/write - /// mode. In general there is no reason to open a group in - /// read/write mode unless you want to be able to call - /// Group::commit(). - /// - /// \throw util::File::AccessError If the file could not be - /// opened. If the reason corresponds to one of the exception - /// types that are derived from util::File::AccessError, the - /// derived exception type is thrown. Note that InvalidDatabase is - /// among these derived exception types. - void open(const std::string& file, const char* encryption_key = nullptr, - OpenMode mode = mode_ReadOnly); - - /// Attach this Group instance to the specified memory buffer. - /// - /// This is similar to constructing a group from a file except - /// that in this case the database is assumed to be stored in the - /// specified memory buffer. - /// - /// If \a take_ownership is `true`, you pass the ownership of the - /// specified buffer to the group. In this case the buffer will - /// eventually be freed using std::free(), so the buffer you pass, - /// must have been allocated using std::malloc(). - /// - /// On the other hand, if \a take_ownership is set to `false`, it - /// is your responsibility to keep the memory buffer alive during - /// the lifetime of the group, and in case the buffer needs to be - /// deallocated afterwards, that is your responsibility too. - /// - /// If this function throws, the ownership of the memory buffer - /// will remain with the caller, regardless of whether \a - /// take_ownership is set to `true` or `false`. - /// - /// Calling open() on a Group instance that is already in the - /// attached state has undefined behavior. - /// - /// Do not call this function on a group instance that is managed - /// by a shared group. Doing so will result in undefined behavior. - /// - /// \throw InvalidDatabase If the specified buffer does not appear - /// to contain a valid database. - void open(BinaryData, bool take_ownership = true); - - /// A group may be created in the unattached state, and then later - /// attached to a file with a call to open(). Calling any method - /// other than open(), and is_attached() on an unattached instance - /// results in undefined behavior. - bool is_attached() const noexcept; - - /// Returns true if, and only if the number of tables in this - /// group is zero. - bool is_empty() const noexcept; - - /// Returns the number of tables in this group. - size_t size() const noexcept; - - //@{ - - /// has_table() returns true if, and only if this group contains a table - /// with the specified name. - /// - /// find_table() returns the index of the first table in this group with the - /// specified name, or `realm::not_found` if this group does not contain a - /// table with the specified name. - /// - /// get_table_name() returns the name of table at the specified index. - /// - /// The versions of get_table(), that accepts a \a name argument, return the - /// first table with the specified name, or null if no such table exists. - /// - /// add_table() adds a table with the specified name to this group. It - /// throws TableNameInUse if \a require_unique_name is true and \a name - /// clashes with the name of an existing table. If \a require_unique_name is - /// false, it is possible to add more than one table with the same - /// name. Whenever a table is added, the order of the preexisting tables may - /// change arbitrarily, and the new table may not end up as the last one - /// either. But know that you can always call Table::get_index_in_group() on - /// the returned table accessor to find out at which index it ends up. - /// - /// get_or_add_table() checks if a table exists in this group with the specified - /// name. If it doesn't exist, a table is created. - /// - /// get_or_insert_table() works slightly differently from get_or_add_table(), - /// in that it considers the position of the requested table as part of that - /// table's identifying "key", in addition to the name. - /// - /// remove_table() removes the specified table from this group. A table can - /// be removed only when it is not the target of a link column of a - /// different table. Whenever a table is removed, the order of the remaining - /// tables may change arbitrarily. - /// - /// rename_table() changes the name of a preexisting table. If \a - /// require_unique_name is false, it becomes possible to have more than one - /// table with a given name in a single group. - /// - /// The template functions work exactly like their non-template namesakes - /// except as follows: The template versions of get_table() and - /// get_or_add_table() throw DescriptorMismatch if the dynamic type of the - /// specified table does not match the statically specified custom table - /// type. The template versions of add_table() and get_or_add_table() set - /// the dynamic type (descriptor) to match the statically specified custom - /// table type. - /// - /// \tparam T An instance of the BasicTable class template. - /// - /// \param index Index of table in this group. - /// - /// \param name Name of table. All strings are valid table names as long as - /// they are valid UTF-8 encodings and the number of bytes does not exceed - /// `max_table_name_length`. A call to add_table() or get_or_add_table() - /// with a name that is longer than `max_table_name_length` will cause an - /// exception to be thrown. - /// - /// \param new_name New name for preexisting table. - /// - /// \param require_unique_name When set to true (the default), it becomes - /// impossible to add a table with a name that is already in use, or to - /// rename a table to a name that is already in use. - /// - /// \param was_added When specified, the boolean variable is set to true if - /// the table was added, and to false otherwise. If the function throws, the - /// boolean variable retains its original value. - /// - /// \return get_table(), add_table(), and get_or_add_table() return a table - /// accessor attached to the requested (or added) table. get_table() may - /// return null. - /// - /// \throw DescriptorMismatch Thrown by get_table() and get_or_add_table() - /// tf the dynamic table type does not match the statically specified custom - /// table type (\a T). - /// - /// \throw NoSuchTable Thrown by remove_table() and rename_table() if there - /// is no table with the specified \a name. - /// - /// \throw TableNameInUse Thrown by add_table() if \a require_unique_name is - /// true and \a name clashes with the name of a preexisting table. Thrown by - /// rename_table() if \a require_unique_name is true and \a new_name clashes - /// with the name of a preexisting table. - /// - /// \throw CrossTableLinkTarget Thrown by remove_table() if the specified - /// table is the target of a link column of a different table. - - static const size_t max_table_name_length = 63; - - bool has_table(StringData name) const noexcept; - size_t find_table(StringData name) const noexcept; - StringData get_table_name(size_t table_ndx) const; - - TableRef get_table(size_t index); - ConstTableRef get_table(size_t index) const; - - TableRef get_table(StringData name); - ConstTableRef get_table(StringData name) const; - - TableRef add_table(StringData name, bool require_unique_name = true); - TableRef insert_table(size_t index, StringData name, bool require_unique_name = true); - TableRef get_or_add_table(StringData name, bool* was_added = nullptr); - TableRef get_or_insert_table(size_t index, StringData name, bool* was_added = nullptr); - - template - BasicTableRef get_table(size_t index); - - template - BasicTableRef get_table(size_t index) const; - - template - BasicTableRef get_table(StringData name); - - template - BasicTableRef get_table(StringData name) const; - - template - BasicTableRef add_table(StringData name, bool require_unique_name = true); - - template - BasicTableRef insert_table(size_t index, StringData name, bool require_unique_name = true); - - template - BasicTableRef get_or_add_table(StringData name, bool* was_added = nullptr); - - template - BasicTableRef get_or_insert_table(size_t index, StringData name, bool* was_added = nullptr); - - void remove_table(size_t index); - void remove_table(StringData name); - - void rename_table(size_t index, StringData new_name, bool require_unique_name = true); - void rename_table(StringData name, StringData new_name, bool require_unique_name = true); - - //@} - - /// Move the table at \a from_index such that it ends up at \a - /// to_index. Other tables are shifted as necessary in such a way that their - /// order is preserved. - /// - /// Note that \a to_index is the desired final index of the moved table, - /// therefore, `move_table(1,1)` is a no-op, while `move_table(1,2)` moves - /// the table at index 1 by one position, such that it ends up at index 2. A - /// side-effect of that, is that the table, that was originally at index 2, - /// is moved to index 1. - void move_table(size_t from_index, size_t to_index); - - // Serialization - - /// Write this database to the specified output stream. - /// - /// \param pad If true, the file is padded to ensure the footer is aligned - /// to the end of a page - void write(std::ostream&, bool pad=false) const; - - /// Write this database to a new file. It is an error to specify a - /// file that already exists. This is to protect against - /// overwriting a database file that is currently open, which - /// would cause undefined behaviour. - /// - /// \param file A filesystem path. - /// - /// \param encryption_key 32-byte key used to encrypt the database file, - /// or nullptr to disable encryption. - /// - /// \throw util::File::AccessError If the file could not be - /// opened. If the reason corresponds to one of the exception - /// types that are derived from util::File::AccessError, the - /// derived exception type is thrown. In particular, - /// util::File::Exists will be thrown if the file exists already. - void write(const std::string& file, const char* encryption_key=0) const; - - /// Write this database to a memory buffer. - /// - /// Ownership of the returned buffer is transferred to the - /// caller. The memory will have been allocated using - /// std::malloc(). - BinaryData write_to_mem() const; - - /// Commit changes to the attached file. This requires that the - /// attached file is opened in read/write mode. - /// - /// Calling this function on an unattached group, a free-standing - /// group, a group whose attached file is opened in read-only - /// mode, a group that is attached to a memory buffer, or a group - /// that is managed by a shared group, is an error and will result - /// in undefined behavior. - /// - /// Table accesors will remain valid across the commit. Note that - /// this is not the case when working with proper transactions. - void commit(); - - //@{ - /// Some operations on Tables in a Group can cause indirect changes to other - /// fields, including in other Tables in the same Group. Specifically, - /// removing a row will set any links to that row to null, and if it had the - /// last strong links to other rows, will remove those rows. When this - /// happens, The cascade notification handler will be called with a - /// CascadeNotification containing information about what indirect changes - /// will occur, before any changes are made. - /// - /// has_cascade_notification_handler() returns true if and only if there is - /// currently a non-null notification handler registered. - /// - /// set_cascade_notification_handler() replaces the current handler (if any) - /// with the passed in handler. Pass in nullptr to remove the current handler - /// without registering a new one. - /// - /// CascadeNotification contains a vector of rows which will be removed and - /// a vector of links which will be set to null (or removed, for entries in - /// LinkLists). - struct CascadeNotification { - struct row { - /// Non-zero iff the removal of this row is ordered - /// (Table::remove()), as opposed to ordered - /// (Table::move_last_over()). Implicit removals are always - /// unordered. - /// - /// This flag does not take part in comparisons (operator==() and - /// operator<()). - size_t is_ordered_removal : 1; - - /// Index within group of a group-level table. - size_t table_ndx : std::numeric_limits::digits - 1; - - /// Row index which will be removed. - size_t row_ndx; - - row(): is_ordered_removal(0) {} - - bool operator==(const row&) const noexcept; - bool operator!=(const row&) const noexcept; - - /// Trivial lexicographic order - bool operator<(const row&) const noexcept; - }; - - struct link { - const Table* origin_table; ///< A group-level table. - size_t origin_col_ndx; ///< Link column being nullified. - size_t origin_row_ndx; ///< Row in column being nullified. - /// The target row index which is being removed. Mostly relevant for - /// LinkList (to know which entries are being removed), but also - /// valid for Link. - size_t old_target_row_ndx; - }; - - /// A sorted list of rows which will be removed by the current operation. - std::vector rows; - - /// An unordered list of links which will be nullified by the current - /// operation. - std::vector links; - }; - - bool has_cascade_notification_handler() const noexcept; - void set_cascade_notification_handler(std::function new_handler) noexcept; - - //@} - - //@{ - /// During sync operation, schema changes may happen at runtime as connected - /// clients update their schema as part of an app update. Since this is a - /// relatively rare event, no attempt is made at limiting the amount of work - /// the handler is required to do to update its information about table and - /// column indices (i.e., all table and column indices must be recalculated). - /// - /// At the time of writing, only additive schema changes may occur in that - /// scenario. - /// - /// has_schema_change_notification_handler() returns true iff there is currently - /// a non-null notification handler registered. - /// - /// set_schema_change_notification_handler() replaces the current handler (if any) - /// with the passed in handler. Pass in nullptr to remove the current handler - /// without registering a new one. - - bool has_schema_change_notification_handler() const noexcept; - void set_schema_change_notification_handler(std::function new_handler) noexcept; - - //@} - - // Conversion - template - void to_json(S& out, size_t link_depth = 0, - std::map* renames = nullptr) const; - void to_string(std::ostream& out) const; - - /// Compare two groups for equality. Two groups are equal if, and - /// only if, they contain the same tables in the same order, that - /// is, for each table T at index I in one of the groups, there is - /// a table at index I in the other group that is equal to T. - /// Tables are equal if they have the same content and the same table name. - bool operator==(const Group&) const; - - /// Compare two groups for inequality. See operator==(). - bool operator!=(const Group& g) const { return !(*this == g); } - -#ifdef REALM_DEBUG - void verify() const; - void print() const; - void print_free() const; - MemStats stats(); - void enable_mem_diagnostics(bool enable = true) { m_alloc.enable_debug(enable); } - void to_dot(std::ostream&) const; - void to_dot() const; // To std::cerr (for GDB) - void to_dot(const char* file_path) const; -#else - void verify() const {} -#endif - -private: - SlabAlloc m_alloc; - - /// `m_top` is the root node (or top array) of the Realm, and has the - /// following layout: - /// - ///
-    ///
-    ///   slot  value
-    ///   -----------------------
-    ///   1st   m_table_names
-    ///   2nd   m_tables
-    ///   3rd   Logical file size
-    ///   4th   GroupWriter::m_free_positions (optional)
-    ///   5th   GroupWriter::m_free_lengths   (optional)
-    ///   6th   GroupWriter::m_free_versions  (optional)
-    ///   7th   Transaction number / version  (optional)
-    ///   8th   In-Realm history type         (optional)
-    ///   9th   In-Realm history ref          (optional)
-    ///
-    /// 
- /// - /// The 'in-Realm history type' slot stores a value of - /// Replication::HistoryType, although never - /// Replication::hist_OutOfRealm. For more information about that, see - /// Replication::get_history_type(). - /// - /// The first three entries are mandatory. In files created by - /// Group::write(), none of the optional entries are present and the size of - /// `m_top` is 3. In files updated by Group::commit(), the 4th and 5th entry - /// is present, and the size of `m_top` is 5. In files updated by way of a - /// transaction (SharedGroup::commit()), the 4th, 5th, 6th, and 7th entry is - /// present, and the size of `m_top` is 7. In files that contain a changeset - /// history, the 8th and 9th entry is present. - /// - /// When a group accessor is attached to a newly created file or an empty - /// memory buffer where there is no top array yet, `m_top`, `m_tables`, and - /// `m_table_names` with be left in the detached state until the initiation - /// of the first write transaction. In particular, they will remain in the - /// detached state during read transactions that precede the first write - /// transaction. - Array m_top; - ArrayInteger m_tables; - ArrayString m_table_names; - - typedef std::vector table_accessors; - mutable table_accessors m_table_accessors; - - bool m_attached = false; - const bool m_is_shared; - - std::function m_notify_handler; - std::function m_schema_change_handler; - - struct shared_tag {}; - Group(shared_tag) noexcept; - - void init_array_parents() noexcept; - - /// If `top_ref` is not zero, attach this group accessor to the specified - /// underlying node structure. If `top_ref` is zero and \a - /// create_group_when_missing is true, create a new node structure that - /// represents an empty group, and attach this group accessor to it. It is - /// an error to call this function on an already attached group accessor. - void attach(ref_type top_ref, bool create_group_when_missing); - - /// Detach this group accessor from the underlying node structure. If this - /// group accessors is already in the detached state, this function does - /// nothing (idempotency). - void detach() noexcept; - - /// \param writable Must be set to true when, and only when attaching for a - /// write transaction. - void attach_shared(ref_type new_top_ref, size_t new_file_size, bool writable); - - void create_empty_group(); - - void reset_free_space_tracking(); - - void remap(size_t new_file_size); - void remap_and_update_refs(ref_type new_top_ref, size_t new_file_size); - - /// Recursively update refs stored in all cached array - /// accessors. This includes cached array accessors in any - /// currently attached table accessors. This ensures that the - /// group instance itself, as well as any attached table accessor - /// that exists across Group::commit() will remain valid. This - /// function is not appropriate for use in conjunction with - /// commits via shared group. - void update_refs(ref_type top_ref, size_t old_baseline) noexcept; - - // Overriding method in ArrayParent - void update_child_ref(size_t, ref_type) override; - - // Overriding method in ArrayParent - ref_type get_child_ref(size_t) const noexcept override; - - // Overriding method in Table::Parent - StringData get_child_name(size_t) const noexcept override; - - // Overriding method in Table::Parent - void child_accessor_destroyed(Table*) noexcept override; - - // Overriding method in Table::Parent - Group* get_parent_group() noexcept override; - - class TableWriter; - class DefaultTableWriter; - - static void write(std::ostream&, const Allocator&, TableWriter&, bool no_top_array, - bool pad_for_encryption, uint_fast64_t version_number); - - typedef void (*DescSetter)(Table&); - typedef bool (*DescMatcher)(const Spec&); - - Table* do_get_table(size_t table_ndx, DescMatcher desc_matcher); - const Table* do_get_table(size_t table_ndx, DescMatcher desc_matcher) const; - Table* do_get_table(StringData name, DescMatcher desc_matcher); - const Table* do_get_table(StringData name, DescMatcher desc_matcher) const; - Table* do_insert_table(size_t, StringData name, DescSetter desc_setter, bool require_unique_name); - Table* do_insert_table(size_t, StringData name, DescSetter desc_setter); - Table* do_get_or_add_table(StringData name, DescMatcher desc_matcher, DescSetter setter, - bool* was_added); - Table* do_get_or_insert_table(size_t, StringData name, DescMatcher desc_matcher, - DescSetter desc_setter, bool* was_added); - - void create_and_insert_table(size_t new_table_ndx, StringData name); - Table* create_table_accessor(size_t table_ndx); - - void detach_table_accessors() noexcept; // Idempotent - - void mark_all_table_accessors() noexcept; - - void write(const std::string& file, const char* encryption_key, - uint_fast64_t version_number) const; - void write(util::File& file, const char* encryption_key, - uint_fast64_t version_number) const; - void write(std::ostream&, bool pad, uint_fast64_t version_numer) const; - - Replication* get_replication() const noexcept; - void set_replication(Replication*) noexcept; - class TransactAdvancer; - void advance_transact(ref_type new_top_ref, size_t new_file_size, _impl::NoCopyInputStream&); - void refresh_dirty_accessors(); - template - void update_table_indices(F&& map_function); - - int get_file_format_version() const noexcept; - void set_file_format_version(int) noexcept; - int get_committed_file_format_version() const noexcept; - - /// The specified history type must be a value of Replication::HistoryType. - static int get_target_file_format_version_for_session(int current_file_format_version, - int history_type) noexcept; - - /// Must be called from within a write transaction - void upgrade_file_format(int target_file_format_version); - -#ifdef REALM_DEBUG - std::pair - get_to_dot_parent(size_t ndx_in_parent) const override; -#endif - - void send_cascade_notification(const CascadeNotification& notification) const; - void send_schema_change_notification() const; - - static void get_version_and_history_type(const Array& top, - _impl::History::version_type& version, - int& history_type) noexcept; - static ref_type get_history_ref(const Array& top) noexcept; - void set_history_parent(Array& history_root) noexcept; - void prepare_history_parent(Array& history_root, int history_type); - - friend class Table; - friend class GroupWriter; - friend class SharedGroup; - friend class _impl::GroupFriend; - friend class _impl::TransactLogConvenientEncoder; - friend class _impl::TransactLogParser; - friend class Replication; - friend class TrivialReplication; -}; - - - - - -// Implementation - -inline Group::Group(const std::string& file, const char* key, OpenMode mode): - m_alloc(), // Throws - m_top(m_alloc), - m_tables(m_alloc), - m_table_names(m_alloc), - m_is_shared(false) -{ - init_array_parents(); - - open(file, key, mode); // Throws -} - -inline Group::Group(BinaryData buffer, bool take_ownership): - m_alloc(), // Throws - m_top(m_alloc), - m_tables(m_alloc), - m_table_names(m_alloc), - m_is_shared(false) -{ - init_array_parents(); - open(buffer, take_ownership); // Throws -} - -inline Group::Group(unattached_tag) noexcept: - m_alloc(), // Throws - m_top(m_alloc), - m_tables(m_alloc), - m_table_names(m_alloc), - m_is_shared(false) -{ - init_array_parents(); -} - -inline Group* Group::get_parent_group() noexcept -{ - return this; -} - -inline Group::Group(shared_tag) noexcept: - m_alloc(), // Throws - m_top(m_alloc), - m_tables(m_alloc), - m_table_names(m_alloc), - m_is_shared(true) -{ - init_array_parents(); -} - -inline bool Group::is_attached() const noexcept -{ - return m_attached; -} - -inline bool Group::is_empty() const noexcept -{ - if (!is_attached()) - return false; - if (m_table_names.is_attached()) - return m_table_names.is_empty(); - return true; -} - -inline size_t Group::size() const noexcept -{ - if (!is_attached()) - return 0; - if (m_table_names.is_attached()) - return m_table_names.size(); - return 0; -} - -inline StringData Group::get_table_name(size_t table_ndx) const -{ - if (table_ndx >= size()) - throw LogicError(LogicError::table_index_out_of_range); - return m_table_names.get(table_ndx); -} - -inline bool Group::has_table(StringData name) const noexcept -{ - size_t ndx = find_table(name); - return ndx != not_found; -} - -inline size_t Group::find_table(StringData name) const noexcept -{ - if (!is_attached()) - return 0; - if (m_table_names.is_attached()) - return m_table_names.find_first(name); - return not_found; -} - -inline TableRef Group::get_table(size_t table_ndx) -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = nullptr; // Do not check descriptor - Table* table = do_get_table(table_ndx, desc_matcher); // Throws - return TableRef(table); -} - -inline ConstTableRef Group::get_table(size_t table_ndx) const -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = nullptr; // Do not check descriptor - const Table* table = do_get_table(table_ndx, desc_matcher); // Throws - return ConstTableRef(table); -} - -inline TableRef Group::get_table(StringData name) -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = nullptr; // Do not check descriptor - Table* table = do_get_table(name, desc_matcher); // Throws - return TableRef(table); -} - -inline ConstTableRef Group::get_table(StringData name) const -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = nullptr; // Do not check descriptor - const Table* table = do_get_table(name, desc_matcher); // Throws - return ConstTableRef(table); -} - -inline TableRef Group::insert_table(size_t table_ndx, StringData name, bool require_unique_name) -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescSetter desc_setter = nullptr; // Do not add any columns - Table* table = do_insert_table(table_ndx, name, desc_setter, require_unique_name); // Throws - return TableRef(table); -} - -inline TableRef Group::add_table(StringData name, bool require_unique_name) -{ - return insert_table(size(), name, require_unique_name); -} - -inline TableRef Group::get_or_insert_table(size_t table_ndx, StringData name, bool* was_added) -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = nullptr; // Do not check descriptor - DescSetter desc_setter = nullptr; // Do not add any columns - Table* table = do_get_or_insert_table(table_ndx, name, desc_matcher, desc_setter, was_added); // Throws - return TableRef(table); -} - -inline TableRef Group::get_or_add_table(StringData name, bool* was_added) -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = nullptr; // Do not check descriptor - DescSetter desc_setter = nullptr; // Do not add any columns - Table* table = do_get_or_add_table(name, desc_matcher, desc_setter, was_added); // Throws - return TableRef(table); -} - -template -inline BasicTableRef Group::get_table(size_t table_ndx) -{ - static_assert(IsBasicTable::value, "Invalid table type"); - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = &T::matches_dynamic_type; - Table* table = do_get_table(table_ndx, desc_matcher); // Throws - return BasicTableRef(static_cast(table)); -} - -template -inline BasicTableRef Group::get_table(size_t table_ndx) const -{ - static_assert(IsBasicTable::value, "Invalid table type"); - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = &T::matches_dynamic_type; - const Table* table = do_get_table(table_ndx, desc_matcher); // Throws - return BasicTableRef(static_cast(table)); -} - -template -inline BasicTableRef Group::get_table(StringData name) -{ - static_assert(IsBasicTable::value, "Invalid table type"); - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = &T::matches_dynamic_type; - Table* table = do_get_table(name, desc_matcher); // Throws - return BasicTableRef(static_cast(table)); -} - -template -inline BasicTableRef Group::get_table(StringData name) const -{ - static_assert(IsBasicTable::value, "Invalid table type"); - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = &T::matches_dynamic_type; - const Table* table = do_get_table(name, desc_matcher); // Throws - return BasicTableRef(static_cast(table)); -} - -template -inline BasicTableRef Group::insert_table(size_t table_ndx, StringData name, - bool require_unique_name) -{ - static_assert(IsBasicTable::value, "Invalid table type"); - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescSetter desc_setter = &T::set_dynamic_type; - Table* table = do_insert_table(table_ndx, name, desc_setter, require_unique_name); // Throws - return BasicTableRef(static_cast(table)); -} - -template -inline BasicTableRef Group::add_table(StringData name, bool require_unique_name) -{ - return insert_table(size(), name, require_unique_name); -} - -template -BasicTableRef Group::get_or_insert_table(size_t table_ndx, StringData name, bool* was_added) -{ - static_assert(IsBasicTable::value, "Invalid table type"); - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = &T::matches_dynamic_type; - DescSetter desc_setter = &T::set_dynamic_type; - Table* table = do_get_or_insert_table(table_ndx, name, desc_matcher, - desc_setter, was_added); // Throws - return BasicTableRef(static_cast(table)); -} - -template -BasicTableRef Group::get_or_add_table(StringData name, bool* was_added) -{ - static_assert(IsBasicTable::value, "Invalid table type"); - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - DescMatcher desc_matcher = &T::matches_dynamic_type; - DescSetter desc_setter = &T::set_dynamic_type; - Table* table = do_get_or_add_table(name, desc_matcher, - desc_setter, was_added); // Throws - return BasicTableRef(static_cast(table)); -} - -template -void Group::to_json(S& out, size_t link_depth, - std::map* renames) const -{ - if (!is_attached()) - throw LogicError(LogicError::detached_accessor); - - std::map renames2; - renames = renames ? renames : &renames2; - - out << "{"; - - for (size_t i = 0; i < m_tables.size(); ++i) { - StringData name = m_table_names.get(i); - std::map& m = *renames; - if (m[name] != "") - name = m[name]; - - ConstTableRef table = get_table(i); - - if (i) - out << ","; - out << "\"" << name << "\""; - out << ":"; - table->to_json(out, link_depth, renames); - } - - out << "}"; -} - -inline void Group::init_array_parents() noexcept -{ - m_table_names.set_parent(&m_top, 0); - m_tables.set_parent(&m_top, 1); -} - -inline void Group::update_child_ref(size_t child_ndx, ref_type new_ref) -{ - m_tables.set(child_ndx, new_ref); -} - -inline ref_type Group::get_child_ref(size_t child_ndx) const noexcept -{ - return m_tables.get_as_ref(child_ndx); -} - -inline StringData Group::get_child_name(size_t child_ndx) const noexcept -{ - return m_table_names.get(child_ndx); -} - -inline void Group::child_accessor_destroyed(Table*) noexcept -{ - // Ignore -} - -inline bool Group::has_cascade_notification_handler() const noexcept -{ - return !!m_notify_handler; -} - -inline void Group::set_cascade_notification_handler(std::function new_handler) noexcept -{ - m_notify_handler = std::move(new_handler); -} - -inline void Group::send_cascade_notification(const CascadeNotification& notification) const -{ - if (m_notify_handler) - m_notify_handler(notification); -} - -inline bool Group::has_schema_change_notification_handler() const noexcept -{ - return !!m_schema_change_handler; -} - -inline void Group::set_schema_change_notification_handler(std::function new_handler) noexcept -{ - m_schema_change_handler = std::move(new_handler); -} - -inline void Group::send_schema_change_notification() const -{ - if (m_schema_change_handler) - m_schema_change_handler(); -} - -inline void Group::get_version_and_history_type(const Array& top, - _impl::History::version_type& version, - int& history_type) noexcept -{ - _impl::History::version_type version_2 = 0; - int history_type_2 = 0; - if (top.is_attached()) { - if (top.size() >= 6) { - REALM_ASSERT(top.size() >= 7); - version_2 = _impl::History::version_type(top.get(6) / 2); - } - if (top.size() >= 8) { - REALM_ASSERT(top.size() >= 9); - history_type_2 = int(top.get(7) / 2); - } - } - // Version 0 is not a legal initial version, so it has to be set to 1 - // instead. - if (version_2 == 0) - version_2 = 1; - version = version_2; - history_type = history_type_2; -} - -inline ref_type Group::get_history_ref(const Array& top) noexcept -{ - if (top.is_attached()) { - if (top.size() >= 8) { - REALM_ASSERT(top.size() >= 9); - return top.get_as_ref(8); - } - } - return 0; -} - -inline void Group::set_history_parent(Array& history_root) noexcept -{ - history_root.set_parent(&m_top, 8); -} - -inline void Group::prepare_history_parent(Array& history_root, int history_type) -{ - REALM_ASSERT(m_alloc.get_file_format_version() >= 4); - // Ensure that there are slots for both the history type and the history - // ref. - while (m_top.size() < 9) - m_top.add(0); // Throws - m_top.set(7, RefOrTagged::make_tagged(history_type)); // Throws - set_history_parent(history_root); -} - -class Group::TableWriter { -public: - virtual ref_type write_names(_impl::OutputStream&) = 0; - virtual ref_type write_tables(_impl::OutputStream&) = 0; - virtual ~TableWriter() noexcept {} -}; - -inline const Table* Group::do_get_table(size_t table_ndx, DescMatcher desc_matcher) const -{ - return const_cast(this)->do_get_table(table_ndx, desc_matcher); // Throws -} - -inline const Table* Group::do_get_table(StringData name, DescMatcher desc_matcher) const -{ - return const_cast(this)->do_get_table(name, desc_matcher); // Throws -} - -inline void Group::reset_free_space_tracking() -{ - m_alloc.reset_free_space_tracking(); // Throws -} - -inline Replication* Group::get_replication() const noexcept -{ - return m_alloc.get_replication(); -} - -inline void Group::set_replication(Replication* repl) noexcept -{ - m_alloc.set_replication(repl); -} - -// The purpose of this class is to give internal access to some, but -// not all of the non-public parts of the Group class. -class _impl::GroupFriend { -public: - static Allocator& get_alloc(Group& group) noexcept - { - return group.m_alloc; - } - - static Table& get_table(Group& group, size_t ndx_in_group) - { - Group::DescMatcher desc_matcher = 0; // Do not check descriptor - Table* table = group.do_get_table(ndx_in_group, desc_matcher); // Throws - return *table; - } - - static const Table& get_table(const Group& group, size_t ndx_in_group) - { - Group::DescMatcher desc_matcher = 0; // Do not check descriptor - const Table* table = group.do_get_table(ndx_in_group, desc_matcher); // Throws - return *table; - } - - static Table* get_table(Group& group, StringData name) - { - Group::DescMatcher desc_matcher = 0; // Do not check descriptor - Table* table = group.do_get_table(name, desc_matcher); // Throws - return table; - } - - static const Table* get_table(const Group& group, StringData name) - { - Group::DescMatcher desc_matcher = 0; // Do not check descriptor - const Table* table = group.do_get_table(name, desc_matcher); // Throws - return table; - } - - static Table& insert_table(Group& group, size_t table_ndx, StringData name, - bool require_unique_name) - { - Group::DescSetter desc_setter = nullptr; // Do not add any columns - return *group.do_insert_table(table_ndx, name, desc_setter, require_unique_name); - } - - static Table& add_table(Group& group, StringData name, bool require_unique_name) - { - return insert_table(group, group.size(), name, require_unique_name); - } - - static Table& get_or_insert_table(Group& group, size_t table_ndx, StringData name, - bool* was_inserted) - { - Group::DescMatcher desc_matcher = nullptr; // Do not check descriptor - Group::DescSetter desc_setter = nullptr; // Do not add any columns - return *group.do_get_or_insert_table(table_ndx, name, desc_matcher, desc_setter, was_inserted); - } - - static Table& get_or_add_table(Group& group, StringData name, bool* was_inserted) - { - Group::DescMatcher desc_matcher = nullptr; // Do not check descriptor - Group::DescSetter desc_setter = nullptr; // Do not add any columns - return *group.do_get_or_add_table(name, desc_matcher, desc_setter, was_inserted); - } - - static void send_cascade_notification(const Group& group, const Group::CascadeNotification& notification) - { - group.send_cascade_notification(notification); - } - - static Replication* get_replication(const Group& group) noexcept - { - return group.get_replication(); - } - - static void set_replication(Group& group, Replication* repl) noexcept - { - group.set_replication(repl); - } - - static void detach(Group& group) noexcept - { - group.detach(); - } - - static void attach_shared(Group& group, ref_type new_top_ref, size_t new_file_size, - bool writable) - { - group.attach_shared(new_top_ref, new_file_size, writable); // Throws - } - - static void reset_free_space_tracking(Group& group) - { - group.reset_free_space_tracking(); // Throws - } - - static void remap(Group& group, size_t new_file_size) - { - group.remap(new_file_size); // Throws - } - - static void remap_and_update_refs(Group& group, ref_type new_top_ref, size_t new_file_size) - { - group.remap_and_update_refs(new_top_ref, new_file_size); // Throws - } - - static void advance_transact(Group& group, ref_type new_top_ref, size_t new_file_size, - _impl::NoCopyInputStream& in) - { - group.advance_transact(new_top_ref, new_file_size, in); // Throws - } - - static void create_empty_group_when_missing(Group& group) - { - if (!group.m_top.is_attached()) - group.create_empty_group(); // Throws - } - - static void get_version_and_history_type(Allocator& alloc, ref_type top_ref, - _impl::History::version_type& version, - int& history_type) noexcept - { - Array top(alloc); - if (top_ref != 0) - top.init_from_ref(top_ref); - Group::get_version_and_history_type(top, version, history_type); - } - - static ref_type get_history_ref(const Group& group) noexcept - { - return Group::get_history_ref(group.m_top); - } - - static ref_type get_history_ref(Allocator& alloc, ref_type top_ref) noexcept - { - Array top(alloc); - if (top_ref != 0) - top.init_from_ref(top_ref); - return Group::get_history_ref(top); - } - - static void set_history_parent(Group& group, Array& history_root) noexcept - { - group.set_history_parent(history_root); - } - - static void prepare_history_parent(Group& group, Array& history_root, int history_type) - { - group.prepare_history_parent(history_root, history_type); // Throws - } - - static int get_file_format_version(const Group& group) noexcept - { - return group.get_file_format_version(); - } - - static void set_file_format_version(Group& group, int file_format_version) noexcept - { - group.set_file_format_version(file_format_version); - } - - static int get_committed_file_format_version(const Group& group) noexcept - { - return group.get_committed_file_format_version(); - } - - static int get_target_file_format_version_for_session(int current_file_format_version, - int history_type) noexcept - { - return Group::get_target_file_format_version_for_session(current_file_format_version, - history_type); - } - - static void upgrade_file_format(Group& group, int target_file_format_version) - { - group.upgrade_file_format(target_file_format_version); // Throws - } - -}; - - -struct CascadeState: Group::CascadeNotification { - /// If non-null, then no recursion will be performed for rows of that - /// table. The effect is then exactly as if all the rows of that table were - /// added to \a state.rows initially, and then removed again after the - /// explicit invocations of Table::cascade_break_backlinks_to() (one for - /// each initiating row). This is used by Table::clear() to avoid - /// reentrance. - /// - /// Must never be set concurrently with stop_on_link_list_column. - Table* stop_on_table = nullptr; - - /// If non-null, then Table::cascade_break_backlinks_to() will skip the - /// removal of reciprocal backlinks for the link list at - /// stop_on_link_list_row_ndx in this column, and no recursion will happen - /// on its behalf. This is used by LinkView::clear() to avoid reentrance. - /// - /// Must never be set concurrently with stop_on_table. - LinkListColumn* stop_on_link_list_column = nullptr; - - /// Is ignored if stop_on_link_list_column is null. - size_t stop_on_link_list_row_ndx = 0; - - /// If false, the links field is not needed, so any work done just for that - /// can be skipped. - bool track_link_nullifications = false; -}; - -inline bool Group::CascadeNotification::row::operator==(const row& r) const noexcept -{ - return table_ndx == r.table_ndx && row_ndx == r.row_ndx; -} - -inline bool Group::CascadeNotification::row::operator!=(const row& r) const noexcept -{ - return !(*this == r); -} - -inline bool Group::CascadeNotification::row::operator<(const row& r) const noexcept -{ - return table_ndx < r.table_ndx || (table_ndx == r.table_ndx && row_ndx < r.row_ndx); -} - -} // namespace realm - -#endif // REALM_GROUP_HPP diff --git a/Pods/Realm/include/core/realm/group_shared.hpp b/Pods/Realm/include/core/realm/group_shared.hpp deleted file mode 100644 index de732353..00000000 --- a/Pods/Realm/include/core/realm/group_shared.hpp +++ /dev/null @@ -1,1189 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_GROUP_SHARED_HPP -#define REALM_GROUP_SHARED_HPP - -#ifdef REALM_DEBUG - #include // usleep() -#endif - -#include -#include -#include -#include -#ifndef _WIN32 -#include -#endif -#include -#include -#include -#include -#include - -namespace realm { - -namespace _impl { -class SharedGroupFriend; -class WriteLogCollector; -} - -/// Thrown by SharedGroup::open() if the lock file is already open in another -/// process which can't share mutexes with this process -struct IncompatibleLockFile: std::runtime_error { - IncompatibleLockFile(const std::string& msg): - std::runtime_error("Incompatible lock file. " + msg) - { - } -}; - -/// A SharedGroup facilitates transactions. -/// -/// When multiple threads or processes need to access a database -/// concurrently, they must do so using transactions. By design, -/// Realm does not allow for multiple threads (or processes) to -/// share a single instance of SharedGroup. Instead, each concurrently -/// executing thread or process must use a separate instance of -/// SharedGroup. -/// -/// Each instance of SharedGroup manages a single transaction at a -/// time. That transaction can be either a read transaction, or a -/// write transaction. -/// -/// Utility classes ReadTransaction and WriteTransaction are provided -/// to make it safe and easy to work with transactions in a scoped -/// manner (by means of the RAII idiom). However, transactions can -/// also be explicitly started (begin_read(), begin_write()) and -/// stopped (end_read(), commit(), rollback()). -/// -/// If a transaction is active when the SharedGroup is destroyed, that -/// transaction is implicitly terminated, either by a call to -/// end_read() or rollback(). -/// -/// Two processes that want to share a database file must reside on -/// the same host. -/// -/// -/// Desired exception behavior (not yet fully implemented) -/// ------------------------------------------------------ -/// -/// - If any data access API function throws an unexpected exception during a -/// read transaction, the shared group accessor is left in state "error -/// during read". -/// -/// - If any data access API function throws an unexpected exception during a -/// write transaction, the shared group accessor is left in state "error -/// during write". -/// -/// - If SharedGroup::begin_write() or SharedGroup::begin_read() throws an -/// unexpected exception, the shared group accessor is left in state "no -/// transaction in progress". -/// -/// - SharedGroup::end_read() and SharedGroup::rollback() do not throw. -/// -/// - If SharedGroup::commit() throws an unexpected exception, the shared group -/// accessor is left in state "error during write" and the transaction was -/// not committed. -/// -/// - If SharedGroup::advance_read() or SharedGroup::promote_to_write() throws -/// an unexpected exception, the shared group accessor is left in state "error -/// during read". -/// -/// - If SharedGroup::commit_and_continue_as_read() or -/// SharedGroup::rollback_and_continue_as_read() throws an unexpected -/// exception, the shared group accessor is left in state "error during -/// write". -/// -/// It has not yet been decided exactly what an "unexpected exception" is, but -/// `std::bad_alloc` is surely one example. On the other hand, an expected -/// exception is one that is mentioned in the function specific documentation, -/// and is used to abort an operation due to a special, but expected condition. -/// -/// States -/// ------ -/// -/// - A newly created shared group accessor is in state "no transaction in -/// progress". -/// -/// - In state "error during read", almost all Realm API functions are -/// illegal on the connected group of accessors. The only valid operations -/// are destruction of the shared group, and SharedGroup::end_read(). If -/// SharedGroup::end_read() is called, the new state becomes "no transaction -/// in progress". -/// -/// - In state "error during write", almost all Realm API functions are -/// illegal on the connected group of accessors. The only valid operations -/// are destruction of the shared group, and SharedGroup::rollback(). If -/// SharedGroup::end_write() is called, the new state becomes "no transaction -/// in progress" -class SharedGroup { -public: - enum DurabilityLevel { - durability_Full, - durability_MemOnly, - durability_Async ///< Not yet supported on windows. - }; - - /// \brief Same as calling the corresponding version of open() on a instance - /// constructed in the unattached state. Exception safety note: if the - /// `upgrade_callback` throws, then the file will be closed properly and the - /// upgrade will be aborted. - explicit SharedGroup(const std::string& file, bool no_create = false, - DurabilityLevel durability = durability_Full, - const char* encryption_key = nullptr, - bool allow_file_format_upgrade = true, - std::function upgrade_callback = std::function()); - - /// \brief Same as calling the corresponding version of open() on a instance - /// constructed in the unattached state. Exception safety note: if the - /// `upgrade_callback` throws, then the file will be closed properly and - /// the upgrade will be aborted. - explicit SharedGroup(Replication& repl, - DurabilityLevel durability = durability_Full, - const char* encryption_key = nullptr, - bool allow_file_format_upgrade = true, - std::function upgrade_callback = std::function()); - - struct unattached_tag {}; - - /// Create a SharedGroup instance in its unattached state. It may - /// then be attached to a database file later by calling - /// open(). You may test whether this instance is currently in its - /// attached state by calling is_attached(). Calling any other - /// function (except the destructor) while in the unattached state - /// has undefined behavior. - SharedGroup(unattached_tag) noexcept; - - ~SharedGroup() noexcept; - - /// Attach this SharedGroup instance to the specified database file. - /// - /// If the database file does not already exist, it will be created (unless - /// \a no_create is set to true.) When multiple threads are involved, it is - /// safe to let the first thread, that gets to it, create the file. - /// - /// While at least one instance of SharedGroup exists for a specific - /// database file, a "lock" file will be present too. The lock file will be - /// placed in the same directory as the database file, and its name will be - /// derived by appending ".lock" to the name of the database file. - /// - /// When multiple SharedGroup instances refer to the same file, they must - /// specify the same durability level, otherwise an exception will be - /// thrown. - /// - /// If \a allow_file_format_upgrade is set to `true`, this function will - /// automatically upgrade the file format used in the specified Realm file - /// if necessary (and if it is possible). In order to prevent this, set \a - /// allow_upgrade to `false`. - /// - /// If \a allow_upgrade is set to `false`, only two outcomes are possible: - /// - /// - the specified Realm file is already using the latest file format, and - /// can be used, or - /// - /// - the specified Realm file uses a deprecated file format, resulting a - /// the throwing of FileFormatUpgradeRequired. - /// - /// Calling open() on a SharedGroup instance that is already in the attached - /// state has undefined behavior. - /// - /// \param file Filesystem path to a Realm database file. - /// - /// \throw util::File::AccessError If the file could not be opened. If the - /// reason corresponds to one of the exception types that are derived from - /// util::File::AccessError, the derived exception type is thrown. Note that - /// InvalidDatabase is among these derived exception types. - /// - /// \throw FileFormatUpgradeRequired only if \a allow_upgrade is `false` - /// and an upgrade is required. - void open(const std::string& file, bool no_create = false, - DurabilityLevel = durability_Full, - const char* encryption_key = nullptr, bool allow_file_format_upgrade = true); - - /// Open this group in replication mode. The specified Replication instance - /// must remain in existence for as long as the SharedGroup. - void open(Replication&, DurabilityLevel = durability_Full, - const char* encryption_key = nullptr, bool allow_file_format_upgrade = true); - - /// Close any open database, returning to the unattached state. - void close() noexcept; - - /// A SharedGroup may be created in the unattached state, and then - /// later attached to a file with a call to open(). Calling any - /// function other than open(), is_attached(), and ~SharedGroup() - /// on an unattached instance results in undefined behavior. - bool is_attached() const noexcept; - - /// Reserve disk space now to avoid allocation errors at a later - /// point in time, and to minimize on-disk fragmentation. In some - /// cases, less fragmentation translates into improved - /// performance. - /// - /// When supported by the system, a call to this function will - /// make the database file at least as big as the specified size, - /// and cause space on the target device to be allocated (note - /// that on many systems on-disk allocation is done lazily by - /// default). If the file is already bigger than the specified - /// size, the size will be unchanged, and on-disk allocation will - /// occur only for the initial section that corresponds to the - /// specified size. On systems that do not support preallocation, - /// this function has no effect. To know whether preallocation is - /// supported by Realm on your platform, call - /// util::File::is_prealloc_supported(). - /// - /// It is an error to call this function on an unattached shared - /// group. Doing so will result in undefined behavior. - void reserve(size_t size_in_bytes); - - /// Querying for changes: - /// - /// NOTE: - /// "changed" means that one or more commits has been made to the database - /// since the SharedGroup (on which wait_for_change() is called) last - /// started, committed, promoted or advanced a transaction. If the SharedGroup - /// has not yet begun a transaction, "changed" is undefined. - /// - /// No distinction is made between changes done by another process - /// and changes done by another thread in the same process as the caller. - /// - /// Has db been changed ? - bool has_changed(); - - /// The calling thread goes to sleep until the database is changed, or - /// until wait_for_change_release() is called. After a call to wait_for_change_release() - /// further calls to wait_for_change() will return immediately. To restore - /// the ability to wait for a change, a call to enable_wait_for_change() - /// is required. Return true if the database has changed, false if it might have. - bool wait_for_change(); - - /// release any thread waiting in wait_for_change() on *this* SharedGroup. - void wait_for_change_release(); - - /// re-enable waiting for change - void enable_wait_for_change(); - // Transactions: - - using version_type = _impl::History::version_type; - - struct VersionID { - version_type version = std::numeric_limits::max(); - uint_fast32_t index = 0; - - VersionID() {} - VersionID(version_type version, uint_fast32_t index) - { - this->version = version; - this->index = index; - } - - bool operator==(const VersionID& other) { return version == other.version; } - bool operator!=(const VersionID& other) { return version != other.version; } - bool operator<(const VersionID& other) { return version < other.version; } - bool operator<=(const VersionID& other) { return version <= other.version; } - bool operator>(const VersionID& other) { return version > other.version; } - bool operator>=(const VersionID& other) { return version >= other.version; } - }; - - /// Thrown by begin_read() if the specified version does not correspond to a - /// bound (or tethered) snapshot. - struct BadVersion; - - - //@{ - - /// begin_read() initiates a new read transaction. A read transaction is - /// bound to, and provides access to a particular snapshot of the underlying - /// Realm (in general the latest snapshot, but see \a version). It cannot be - /// used to modify the Realm, and in that sense, a read transaction is not a - /// real transaction. - /// - /// begin_write() initiates a new write transaction. A write transaction - /// allows the application to both read and modify the underlying Realm - /// file. At most one write transaction can be in progress at any given time - /// for a particular underlying Realm file. If another write transaction is - /// already in progress, begin_write() will block the caller until the other - /// write transaction terminates. No guarantees are made about the order in - /// which multiple concurrent requests will be served. - /// - /// It is an error to call begin_read() or begin_write() on a SharedGroup - /// object with an active read or write transaction. - /// - /// If begin_read() or begin_write() throws, no transaction is initiated, - /// and the application may try to initiate a new read or write transaction - /// later. - /// - /// end_read() terminates the active read transaction. If no read - /// transaction is active, end_read() does nothing. It is an error to call - /// this function on a SharedGroup object with an active write - /// transaction. end_read() does not throw. - /// - /// commit() commits all changes performed in the context of the active - /// write transaction, and thereby terminates that transaction. This - /// produces a new snapshot in the underlying Realm. commit() returns the - /// version associated with the new snapshot. It is an error to call - /// commit() when there is no active write transaction. If commit() throws, - /// no changes will have been committed, and the transaction will still be - /// active, but in a bad state. In that case, the application must either - /// call rollback() to terminate the bad transaction (in which case a new - /// transaction can be initiated), call close() which also terminates the - /// bad transaction, or destroy the SharedGroup object entirely. When the - /// transaction is in a bad state, the application is not allowed to call - /// any method on the Group accessor or on any of its subordinate accessors - /// (Table, Row, Descriptor). Note that the transaction is also left in a - /// bad state when a modifying operation on any subordinate accessor throws. - /// - /// rollback() terminates the active write transaction and discards any - /// changes performed in the context of it. If no write transaction is - /// active, rollback() does nothing. It is an error to call this function in - /// a SharedGroup object with an active read transaction. rollback() does - /// not throw. - /// - /// the Group accessor and all subordinate accessors (Table, Row, - /// Descriptor) that are obtained in the context of a particular read or - /// write transaction will become detached upon termination of that - /// transaction, which means that they can no longer be used to access the - /// underlying objects. - /// - /// Subordinate accessors that were detached at the end of the previous - /// read or write transaction will not be automatically reattached when a - /// new transaction is initiated. The application must reobtain new - /// accessors during a new transaction to regain access to the underlying - /// objects. - /// - /// \param version If specified, this must be the version associated with a - /// *bound* snapshot. A snapshot is said to be bound (or tethered) if there - /// is at least one active read or write transaction bound to it. A read - /// transaction is bound to the snapshot that it provides access to. A write - /// transaction is bound to the latest snapshot available at the time of - /// initiation of the write transaction. If the specified version is not - /// associated with a bound snapshot, this function throws BadVersion. - /// - /// \throw BadVersion Thrown by begin_read() if the specified version does - /// not correspond to a bound (or tethered) snapshot. - - const Group& begin_read(VersionID version = VersionID()); - void end_read() noexcept; - Group& begin_write(); - version_type commit(); - void rollback() noexcept; - - //@} - - enum TransactStage { - transact_Ready, - transact_Reading, - transact_Writing - }; - - /// Get the current transaction type - TransactStage get_transact_stage() const noexcept; - - /// Get a version id which may be used to request a different SharedGroup - /// to start transaction at a specific version. - VersionID get_version_of_current_transaction(); - - /// Report the number of distinct versions currently stored in the database. - /// Note: the database only cleans up versions as part of commit, so ending - /// a read transaction will not immediately release any versions. - uint_fast64_t get_number_of_versions(); - - /// Compact the database file. - /// - The method will throw if called inside a transaction. - /// - The method will throw if called in unattached state. - /// - The method will return false if other SharedGroups are accessing the database - /// in which case compaction is not done. This is not necessarily an error. - /// It will return true following successful compaction. - /// While compaction is in progress, attempts by other - /// threads or processes to open the database will wait. - /// Be warned that resource requirements for compaction is proportional to the amount - /// of live data in the database. - /// Compaction works by writing the database contents to a temporary database file and - /// then replacing the database with the temporary one. The name of the temporary - /// file is formed by appending ".tmp_compaction_space" to the name of the database - /// - /// FIXME: This function is not yet implemented in an exception-safe manner, - /// therefore, if it throws, the application should not attempt to - /// continue. If may not even be safe to destroy the SharedGroup object. - bool compact(); - -#ifdef REALM_DEBUG - void test_ringbuf(); -#endif - - /// To handover a table view, query, linkview or row accessor of type T, you must - /// wrap it into a Handover for the transfer. Wrapping and unwrapping of a handover - /// object is done by the methods 'export_for_handover()' and 'import_from_handover()' - /// declared below. 'export_for_handover()' returns a Handover object, and - /// 'import_for_handover()' consumes that object, producing a new accessor which - /// is ready for use in the context of the importing SharedGroup. - /// - /// The Handover always creates a new accessor object at the importing side. - /// For TableViews, there are 3 forms of handover. - /// - /// - with payload move: the payload is handed over and ends up as a payload - /// held by the accessor at the importing side. The accessor on the exporting - /// side will rerun its query and generate a new payload, if TableView::sync_if_needed() is - /// called. If the original payload was in sync at the exporting side, it will - /// also be in sync at the importing side. This is indicated to handover_export() - /// by the argument MutableSourcePayload::Move - /// - /// - with payload copy: a copy of the payload is handed over, so both the accessors - /// on the exporting side *and* the accessors created at the importing side has - /// their own payload. This is indicated to handover_export() by the argument - /// ConstSourcePayload::Copy - /// - /// - without payload: the payload stays with the accessor on the exporting - /// side. On the importing side, the new accessor is created without payload. - /// a call to TableView::sync_if_needed() will trigger generation of a new payload. - /// This form of handover is indicated to handover_export() by the argument - /// ConstSourcePayload::Stay. - /// - /// For all other (non-TableView) accessors, handover is done with payload copy, - /// since the payload is trivial. - /// - /// Handover *without* payload is useful when you want to ship a tableview with its query for - /// execution in a background thread. Handover with *payload move* is useful when you want to - /// transfer the result back. - /// - /// Handover *without* payload or with payload copy is guaranteed *not* to change - /// the accessors on the exporting side and is mutually exclusive with respect to - /// advance_read(), promote_to_write etc - but it is not interlocked with deletion of - /// the accessors: The caller must ensure that the accessors relevant for the export - /// operation stays valid for the duration of the export. Usually, this is trivially - /// ensured because the reference to the accessor will keep it alive. - /// - /// Handover is also *not* interlocked with other operations on the TableView, because - /// it would require lots of locking. - /// This is a decision we might have to change! (FIXME) - /// - /// Handover with payload *move* is *not* thread safe and should be carried out - /// by the thread that "owns" the involved accessors. - /// - /// Handover is transitive: - /// If the object being handed over depends on other views (table- or link- ), those - /// objects will be handed over as well. The mode of handover (payload copy, payload - /// move, without payload) is applied recursively. Note: If you are handing over - /// a tableview dependent upon another tableview and using MutableSourcePayload::Move, - /// you are on thin ice! - /// - /// On the importing side, the top-level accessor being created during import takes ownership - /// of all other accessors (if any) being created as part of the import. - - /// Type used to support handover of accessors between shared groups. - template - struct Handover; - - /// thread-safe/const export (mode is Stay or Copy) - /// during export, the following operations on the shared group is locked: - /// - advance_read(), promote_to_write(), commit_and_continue_as_read(), - /// rollback_and_continue_as_read(), close() - template - std::unique_ptr> export_for_handover(const T& accessor, ConstSourcePayload mode); - - // specialization for handover of Rows - template - std::unique_ptr>> export_for_handover(const BasicRow& accessor); - - // destructive export (mode is Move) - template - std::unique_ptr> export_for_handover(T& accessor, MutableSourcePayload mode); - - /// Import an accessor wrapped in a handover object. The import will fail if the - /// importing SharedGroup is viewing a version of the database that is different - /// from the exporting SharedGroup. The call to import_from_handover is not thread-safe. - template - std::unique_ptr import_from_handover(std::unique_ptr> handover); - - // we need to special case handling of LinkViews, because they are ref counted. - std::unique_ptr> export_linkview_for_handover(const LinkViewRef& accessor); - LinkViewRef import_linkview_from_handover(std::unique_ptr> handover); - - // likewise for Tables. - std::unique_ptr> export_table_for_handover(const TableRef& accessor); - TableRef import_table_from_handover(std::unique_ptr> handover); - -private: - struct SharedInfo; - struct ReadCount; - struct ReadLockInfo { - uint_fast64_t m_version = std::numeric_limits::max(); - uint_fast32_t m_reader_idx = 0; - ref_type m_top_ref = 0; - size_t m_file_size = 0; - }; - class ReadLockUnlockGuard; - - // Member variables - Group m_group; - ReadLockInfo m_read_lock; - uint_fast32_t m_local_max_entry; - util::File m_file; - util::File::Map m_file_map; // Never remapped - util::File::Map m_reader_map; - bool m_wait_for_change_enabled; - std::string m_lockfile_path; - std::string m_lockfile_prefix; - std::string m_db_path; - std::string m_coordination_dir; - const char* m_key; - TransactStage m_transact_stage; - util::Mutex m_handover_lock; - util::InterprocessMutex m_writemutex; - util::InterprocessMutex m_balancemutex; - util::InterprocessMutex m_controlmutex; -#ifndef _WIN32 - util::InterprocessCondVar m_room_to_write; - util::InterprocessCondVar m_work_to_do; - util::InterprocessCondVar m_daemon_becomes_ready; - util::InterprocessCondVar m_new_commit_available; -#endif - std::function m_upgrade_callback; - - void do_open(const std::string& file, bool no_create, DurabilityLevel, bool is_backend, - const char* encryption_key, bool allow_file_format_upgrade); - - // Ring buffer management - bool ringbuf_is_empty() const noexcept; - size_t ringbuf_size() const noexcept; - size_t ringbuf_capacity() const noexcept; - bool ringbuf_is_first(size_t ndx) const noexcept; - void ringbuf_remove_first() noexcept; - size_t ringbuf_find(uint64_t version) const noexcept; - ReadCount& ringbuf_get(size_t ndx) noexcept; - ReadCount& ringbuf_get_first() noexcept; - ReadCount& ringbuf_get_last() noexcept; - void ringbuf_put(const ReadCount& v); - void ringbuf_expand(); - - /// Grab a read lock on the snapshot associated with the specified - /// version. If `version_id == VersionID()`, a read lock will be grabbed on - /// the latest available snapshot. Fails if the snapshot is no longer - /// available. - /// - /// As a side effect update memory mapping to ensure that the ringbuffer entries - /// referenced in the readlock info is accessible. - /// - /// FIXME: It needs to be made more clear exactly under which conditions - /// this function fails. Also, why is it useful to promise anything about - /// detection of bad versions? Can we really promise enough to make such a - /// promise useful to the caller? - void grab_read_lock(ReadLockInfo&, VersionID); - - // Release a specific read lock. The read lock MUST have been obtained by a - // call to grab_read_lock(). - void release_read_lock(ReadLockInfo&) noexcept; - - void do_begin_read(VersionID, bool writable); - void do_end_read() noexcept; - void do_begin_write(); - version_type do_commit(); - void do_end_write() noexcept; - - /// Returns the version of the latest snapshot. - version_type get_version_of_latest_snapshot(); - - /// Returns the version of the snapshot bound in the current read or write - /// transaction. It is an error to call this function when no transaction is - /// in progress. - version_type get_version_of_bound_snapshot() const noexcept; - - // make sure the given index is within the currently mapped area. - // if not, expand the mapped area. Returns true if the area is expanded. - bool grow_reader_mapping(uint_fast32_t index); - - // Must be called only by someone that has a lock on the write - // mutex. - void low_level_commit(uint_fast64_t new_version); - - void do_async_commits(); - - void upgrade_file_format(bool allow_file_format_upgrade, int target_file_format_version); - - //@{ - /// See LangBindHelper. - template void advance_read(O* observer, VersionID); - template void promote_to_write(O* observer); - version_type commit_and_continue_as_read(); - template void rollback_and_continue_as_read(O* observer); - //@} - - /// Returns true if, and only if _impl::History::update_early_from_top_ref() - /// was called during the execution of this function. - template bool do_advance_read(O* observer, VersionID, _impl::History&); - - /// If there is an associated \ref Replication object, then this function - /// returns `repl->get_history()` where `repl` is that Replication object, - /// otherwise this function returns null. - _impl::History* get_history(); - - int get_file_format_version() const noexcept; - - friend class _impl::SharedGroupFriend; -}; - - - -class ReadTransaction { -public: - ReadTransaction(SharedGroup& sg): - m_shared_group(sg) - { - m_shared_group.begin_read(); // Throws - } - - ~ReadTransaction() noexcept - { - m_shared_group.end_read(); - } - - bool has_table(StringData name) const noexcept - { - return get_group().has_table(name); - } - - ConstTableRef get_table(size_t table_ndx) const - { - return get_group().get_table(table_ndx); // Throws - } - - ConstTableRef get_table(StringData name) const - { - return get_group().get_table(name); // Throws - } - - template - BasicTableRef get_table(StringData name) const - { - return get_group().get_table(name); // Throws - } - - const Group& get_group() const noexcept; - - /// Get the version of the snapshot to which this read transaction is bound. - SharedGroup::version_type get_version() const noexcept; - -private: - SharedGroup& m_shared_group; -}; - - -class WriteTransaction { -public: - WriteTransaction(SharedGroup& sg): - m_shared_group(&sg) - { - m_shared_group->begin_write(); // Throws - } - - ~WriteTransaction() noexcept - { - if (m_shared_group) - m_shared_group->rollback(); - } - - bool has_table(StringData name) const noexcept - { - return get_group().has_table(name); - } - - TableRef get_table(size_t table_ndx) const - { - return get_group().get_table(table_ndx); // Throws - } - - TableRef get_table(StringData name) const - { - return get_group().get_table(name); // Throws - } - - TableRef add_table(StringData name, bool require_unique_name = true) const - { - return get_group().add_table(name, require_unique_name); // Throws - } - - TableRef get_or_add_table(StringData name, bool* was_added = nullptr) const - { - return get_group().get_or_add_table(name, was_added); // Throws - } - - template - BasicTableRef get_table(StringData name) const - { - return get_group().get_table(name); // Throws - } - - template - BasicTableRef add_table(StringData name, bool require_unique_name = true) const - { - return get_group().add_table(name, require_unique_name); // Throws - } - - template - BasicTableRef get_or_add_table(StringData name, bool* was_added = nullptr) const - { - return get_group().get_or_add_table(name, was_added); // Throws - } - - Group& get_group() const noexcept; - - /// Get the version of the snapshot on which this write transaction is - /// based. - SharedGroup::version_type get_version() const noexcept; - - SharedGroup::version_type commit() - { - REALM_ASSERT(m_shared_group); - SharedGroup::version_type new_version = m_shared_group->commit(); - m_shared_group = nullptr; - return new_version; - } - - void rollback() noexcept - { - REALM_ASSERT(m_shared_group); - m_shared_group->rollback(); - m_shared_group = nullptr; - } - -private: - SharedGroup* m_shared_group; -}; - - - - - - -// Implementation: - -struct SharedGroup::BadVersion: std::exception {}; - -inline SharedGroup::SharedGroup(const std::string& file, bool no_create, - DurabilityLevel durability, const char* encryption_key, - bool allow_file_format_upgrade, std::function upgrade_callback): - m_group(Group::shared_tag()), - m_upgrade_callback(std::move(upgrade_callback)) -{ - open(file, no_create, durability, encryption_key, allow_file_format_upgrade); // Throws -} - -inline SharedGroup::SharedGroup(unattached_tag) noexcept: - m_group(Group::shared_tag()) -{ -} - -inline SharedGroup::SharedGroup(Replication& repl, DurabilityLevel durability, - const char* encryption_key, bool allow_file_format_upgrade, - std::function upgrade_callback): - m_group(Group::shared_tag()), - m_upgrade_callback(std::move(upgrade_callback)) -{ - open(repl, durability, encryption_key, allow_file_format_upgrade); // Throws -} - -inline void SharedGroup::open(const std::string& path, bool no_create_file, - DurabilityLevel durability, const char* encryption_key, - bool allow_file_format_upgrade) -{ - // Exception safety: Since open() is called from constructors, if it throws, - // it must leave the file closed. - - bool is_backend = false; - do_open(path, no_create_file, durability, is_backend, encryption_key, - allow_file_format_upgrade); // Throws -} - -inline void SharedGroup::open(Replication& repl, DurabilityLevel durability, - const char* encryption_key, bool allow_file_format_upgrade) -{ - // Exception safety: Since open() is called from constructors, if it throws, - // it must leave the file closed. - - REALM_ASSERT(!is_attached()); - - repl.initialize(*this); // Throws - - typedef _impl::GroupFriend gf; - gf::set_replication(m_group, &repl); - - std::string file = repl.get_database_path(); - bool no_create = false; - bool is_backend = false; - do_open(file, no_create, durability, is_backend, encryption_key, - allow_file_format_upgrade); // Throws -} - -inline bool SharedGroup::is_attached() const noexcept -{ - return m_file_map.is_attached(); -} - -inline SharedGroup::TransactStage SharedGroup::get_transact_stage() const noexcept -{ - return m_transact_stage; -} - -inline SharedGroup::version_type SharedGroup::get_version_of_bound_snapshot() const noexcept -{ - return m_read_lock.m_version; -} - -class SharedGroup::ReadLockUnlockGuard { -public: - ReadLockUnlockGuard(SharedGroup& shared_group, ReadLockInfo& read_lock) noexcept: - m_shared_group(shared_group), - m_read_lock(&read_lock) - { - } - ~ReadLockUnlockGuard() noexcept - { - if (m_read_lock) - m_shared_group.release_read_lock(*m_read_lock); - } - void release() noexcept - { - m_read_lock = 0; - } -private: - SharedGroup& m_shared_group; - ReadLockInfo* m_read_lock; -}; - - -template -struct SharedGroup::Handover { - std::unique_ptr patch; - std::unique_ptr clone; - VersionID version; -}; - -template -std::unique_ptr> SharedGroup::export_for_handover(const T& accessor, ConstSourcePayload mode) -{ - util::LockGuard lg(m_handover_lock); - if (m_transact_stage != transact_Reading) - throw LogicError(LogicError::wrong_transact_state); - std::unique_ptr> result(new Handover()); - // Implementation note: - // often, the return value from clone will be T*, BUT it may be ptr to some base of T - // instead, so we must cast it to T*. This is always safe, because no matter the type, - // clone() will clone the actual accessor instance, and hence return an instance of the - // same type. - result->clone.reset(dynamic_cast(accessor.clone_for_handover(result->patch, mode).release())); - result->version = get_version_of_current_transaction(); - return move(result); -} - - -template -std::unique_ptr>> SharedGroup::export_for_handover(const BasicRow& accessor) -{ - util::LockGuard lg(m_handover_lock); - if (m_transact_stage != transact_Reading) - throw LogicError(LogicError::wrong_transact_state); - std::unique_ptr>> result(new Handover>()); - // See implementation note above. - result->clone.reset(dynamic_cast*>(accessor.clone_for_handover(result->patch).release())); - result->version = get_version_of_current_transaction(); - return move(result); -} - - -template -std::unique_ptr> SharedGroup::export_for_handover(T& accessor, MutableSourcePayload mode) -{ - // We'll take a lock here for the benefit of users truly knowing what they are doing. - util::LockGuard lg(m_handover_lock); - if (m_transact_stage != transact_Reading) - throw LogicError(LogicError::wrong_transact_state); - std::unique_ptr> result(new Handover()); - // see implementation note above. - result->clone.reset(dynamic_cast(accessor.clone_for_handover(result->patch, mode).release())); - result->version = get_version_of_current_transaction(); - return move(result); -} - - -template -std::unique_ptr SharedGroup::import_from_handover(std::unique_ptr> handover) -{ - if (handover->version != get_version_of_current_transaction()) { - throw BadVersion(); - } - std::unique_ptr result = move(handover->clone); - result->apply_and_consume_patch(handover->patch, m_group); - return result; -} - -template -inline void SharedGroup::advance_read(O* observer, VersionID version_id) -{ - if (m_transact_stage != transact_Reading) - throw LogicError(LogicError::wrong_transact_state); - - // It is an error if the new version precedes the currently bound one. - if (version_id.version < m_read_lock.m_version) - throw LogicError(LogicError::bad_version); - - _impl::History* hist = get_history(); // Throws - if (!hist) - throw LogicError(LogicError::no_history); - - do_advance_read(observer, version_id, *hist); // Throws -} - -template -inline void SharedGroup::promote_to_write(O* observer) -{ - if (m_transact_stage != transact_Reading) - throw LogicError(LogicError::wrong_transact_state); - - _impl::History* hist = get_history(); // Throws - if (!hist) - throw LogicError(LogicError::no_history); - - do_begin_write(); // Throws - try { - VersionID version = VersionID(); // Latest - bool history_updated = do_advance_read(observer, version, *hist); // Throws - - Replication* repl = m_group.get_replication(); - REALM_ASSERT(repl); // Presence of `repl` follows from the presence of `hist` - version_type current_version = m_read_lock.m_version; - repl->initiate_transact(current_version, history_updated); // Throws - - // If the group has no top array (top_ref == 0), create a new node - // structure for an empty group now, to be ready for modifications. See - // also Group::attach_shared(). - using gf = _impl::GroupFriend; - gf::create_empty_group_when_missing(m_group); // Throws - } - catch (...) { - do_end_write(); - throw; - } - - m_transact_stage = transact_Writing; -} - -template -inline void SharedGroup::rollback_and_continue_as_read(O* observer) -{ - if (m_transact_stage != transact_Writing) - throw LogicError(LogicError::wrong_transact_state); - - _impl::History* hist = get_history(); // Throws - if (!hist) - throw LogicError(LogicError::no_history); - - util::LockGuard lg(m_handover_lock); - - // Mark all managed space (beyond the attached file) as free. - using gf = _impl::GroupFriend; - gf::reset_free_space_tracking(m_group); // Throws - - BinaryData uncommitted_changes = hist->get_uncommitted_changes(); - - // FIXME: We are currently creating two transaction log parsers, one here, - // and one in advance_transact(). That is wasteful as the parser creation is - // expensive. - _impl::SimpleInputStream in(uncommitted_changes.data(), uncommitted_changes.size()); - _impl::TransactLogParser parser; // Throws - _impl::TransactReverser reverser; - parser.parse(in, reverser); // Throws - - if (observer && uncommitted_changes.size()) { - _impl::ReversedNoCopyInputStream reversed_in(reverser); - parser.parse(reversed_in, *observer); // Throws - observer->parse_complete(); // Throws - } - - ref_type top_ref = m_read_lock.m_top_ref; - size_t file_size = m_read_lock.m_file_size; - _impl::ReversedNoCopyInputStream reversed_in(reverser); - gf::advance_transact(m_group, top_ref, file_size, reversed_in); // Throws - - do_end_write(); - - Replication* repl = gf::get_replication(m_group); - REALM_ASSERT(repl); // Presence of `repl` follows from the presence of `hist` - repl->abort_transact(); - - m_transact_stage = transact_Reading; -} - -template -inline bool SharedGroup::do_advance_read(O* observer, VersionID version_id, _impl::History& hist) -{ - util::LockGuard lg(m_handover_lock); - ReadLockInfo new_read_lock; - grab_read_lock(new_read_lock, version_id); // Throws - REALM_ASSERT(new_read_lock.m_version >= m_read_lock.m_version); - if (new_read_lock.m_version == m_read_lock.m_version) { - release_read_lock(new_read_lock); - return false; // _impl::History::update_early_from_top_ref() was not called - } - - ReadLockUnlockGuard g(*this, new_read_lock); - { - version_type new_version = new_read_lock.m_version; - size_t new_file_size = new_read_lock.m_file_size; - ref_type new_top_ref = new_read_lock.m_top_ref; - hist.update_early_from_top_ref(new_version, new_file_size, new_top_ref); // Throws - } - - if (observer) { - // This has to happen in the context of the originally bound snapshot - // and while the read transaction is still in a fully functional state. - _impl::TransactLogParser parser; - version_type old_version = m_read_lock.m_version; - version_type new_version = new_read_lock.m_version; - _impl::ChangesetInputStream in(hist, old_version, new_version); - parser.parse(in, *observer); // Throws - observer->parse_complete(); // Throws - } - - // The old read lock must be retained for as long as the change history is - // accessed (until Group::advance_transact() returns). This ensures that the - // oldest needed changeset remains in the history, even when the history is - // implemented as a separate unversioned entity outside the Realm (i.e., the - // old implementation and ShortCircuitHistory in - // test_lang_Bind_helper.cpp). On the other hand, if it had been the case, - // that the history was always implemented as a versioned entity, that was - // part of the Realm state, then it would not have been necessary to retain - // the old read lock beyond this point. - - { - version_type old_version = m_read_lock.m_version; - version_type new_version = new_read_lock.m_version; - ref_type new_top_ref = new_read_lock.m_top_ref; - size_t new_file_size = new_read_lock.m_file_size; - _impl::ChangesetInputStream in(hist, old_version, new_version); - m_group.advance_transact(new_top_ref, new_file_size, in); // Throws - } - - g.release(); - release_read_lock(m_read_lock); - m_read_lock = new_read_lock; - - return true; // _impl::History::update_early_from_top_ref() was called -} - -inline _impl::History* SharedGroup::get_history() -{ - using gf = _impl::GroupFriend; - if (Replication* repl = gf::get_replication(m_group)) - return repl->get_history(); - return 0; -} - -inline int SharedGroup::get_file_format_version() const noexcept -{ - using gf = _impl::GroupFriend; - return gf::get_file_format_version(m_group); -} - - -// The purpose of this class is to give internal access to some, but -// not all of the non-public parts of the SharedGroup class. -class _impl::SharedGroupFriend { -public: - static Group& get_group(SharedGroup& sg) noexcept - { - return sg.m_group; - } - - template - static void advance_read(SharedGroup& sg, O* obs, SharedGroup::VersionID ver) - { - sg.advance_read(obs, ver); // Throws - } - - template - static void promote_to_write(SharedGroup& sg, O* obs) - { - sg.promote_to_write(obs); // Throws - } - - static SharedGroup::version_type commit_and_continue_as_read(SharedGroup& sg) - { - return sg.commit_and_continue_as_read(); // Throws - } - - template - static void rollback_and_continue_as_read(SharedGroup& sg, O* obs) - { - sg.rollback_and_continue_as_read(obs); // Throws - } - - static void async_daemon_open(SharedGroup& sg, const std::string& file) - { - bool no_create = true; - SharedGroup::DurabilityLevel durability = SharedGroup::durability_Async; - bool is_backend = true; - const char* encryption_key = nullptr; - bool allow_file_format_upgrade = false; - sg.do_open(file, no_create, durability, is_backend, encryption_key, - allow_file_format_upgrade); // Throws - } - - static int get_file_format_version(const SharedGroup& sg) noexcept - { - return sg.get_file_format_version(); - } - - static SharedGroup::version_type get_version_of_latest_snapshot(SharedGroup& sg) - { - return sg.get_version_of_latest_snapshot(); - } - - static SharedGroup::version_type get_version_of_bound_snapshot(const SharedGroup& sg) noexcept - { - return sg.get_version_of_bound_snapshot(); - } -}; - -inline const Group& ReadTransaction::get_group() const noexcept -{ - using sgf = _impl::SharedGroupFriend; - return sgf::get_group(m_shared_group); -} - -inline SharedGroup::version_type ReadTransaction::get_version() const noexcept -{ - using sgf = _impl::SharedGroupFriend; - return sgf::get_version_of_bound_snapshot(m_shared_group); -} - -inline Group& WriteTransaction::get_group() const noexcept -{ - REALM_ASSERT(m_shared_group); - using sgf = _impl::SharedGroupFriend; - return sgf::get_group(*m_shared_group); -} - -inline SharedGroup::version_type WriteTransaction::get_version() const noexcept -{ - using sgf = _impl::SharedGroupFriend; - return sgf::get_version_of_bound_snapshot(*m_shared_group); -} - -} // namespace realm - -#endif // REALM_GROUP_SHARED_HPP diff --git a/Pods/Realm/include/core/realm/group_writer.hpp b/Pods/Realm/include/core/realm/group_writer.hpp deleted file mode 100644 index f49dcb36..00000000 --- a/Pods/Realm/include/core/realm/group_writer.hpp +++ /dev/null @@ -1,156 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_GROUP_WRITER_HPP -#define REALM_GROUP_WRITER_HPP - -#include // unint8_t etc -#include - -#include -#include -#include -#include - - -namespace realm { - -// Pre-declarations -class Group; -class SlabAlloc; - - -/// This class is not supposed to be reused for multiple write sessions. In -/// particular, do not reuse it in case any of the functions throw. -/// -/// FIXME: Move this class to namespace realm::_impl and to subdir src/realm/impl. -class GroupWriter: public _impl::ArrayWriterBase { -public: - // For groups in transactional mode (Group::m_is_shared), this constructor - // must be called while a write transaction is in progress. - // - // The constructor adds free-space tracking information to the specified - // group, if it is not already present (4th and 5th entry in - // Group::m_top). If the specified group is in transactional mode - // (Group::m_is_shared), the constructor also adds version tracking - // information to the group, if it is not already present (6th and 7th entry - // in Group::m_top). - GroupWriter(Group&); - - void set_versions(uint64_t current, uint64_t read_lock) noexcept; - - /// Write all changed array nodes into free space. - /// - /// Returns the new top ref. When in full durability mode, call - /// commit() with the returned top ref. - ref_type write_group(); - - /// Flush changes to physical medium, then write the new top ref - /// to the file header, then flush again. Pass the top ref - /// returned by write_group(). - void commit(ref_type new_top_ref); - - size_t get_file_size() const noexcept; - - /// Write the specified chunk into free space. - void write(const char* data, size_t size); - - ref_type write_array(const char*, size_t, uint32_t) override; - -#ifdef REALM_DEBUG - void dump(); -#endif - -private: - Group& m_group; - SlabAlloc& m_alloc; - ArrayInteger m_free_positions; // 4th slot in Group::m_top - ArrayInteger m_free_lengths; // 5th slot in Group::m_top - ArrayInteger m_free_versions; // 6th slot in Group::m_top - uint64_t m_current_version; - uint64_t m_readlock_version; - util::File::Map m_file_map; - - // Merge adjacent chunks - void merge_free_space(); - - /// Allocate a chunk of free space of the specified size. The - /// specified size must be 8-byte aligned. Extend the file if - /// required. The returned chunk is removed from the amount of - /// remaing free space. The returned chunk is guaranteed to be - /// within a single contiguous memory mapping. - /// - /// \return The position within the database file of the allocated - /// chunk. - size_t get_free_space(size_t size); - - /// Find a block of free space that is at least as big as the - /// specified size and which will allow an allocation that is mapped - /// inside a contiguous address range. The specified size does not - /// need to be 8-byte aligned. Extend the file if required. - /// The returned chunk is not removed from the amount of remaing - /// free space. - /// - /// \return A pair (`chunk_ndx`, `chunk_size`) where `chunk_ndx` - /// is the index of a chunk whose size is at least the requestd - /// size, and `chunk_size` is the size of that chunk. - std::pair reserve_free_space(size_t size); - - /// Search only a range of the free list for a block as big as the - /// specified size. Return a pair with index and size of the found chunk. - /// \param found indicates whether a suitable block was found. - std::pair - search_free_space_in_part_of_freelist(size_t size, size_t begin, - size_t end, bool& found); - - /// Extend the file to ensure that a chunk of free space of the - /// specified size is available. The specified size does not need - /// to be 8-byte aligned. This function guarantees that it will - /// add at most one entry to the free-lists. - /// - /// \return A pair (`chunk_ndx`, `chunk_size`) where `chunk_ndx` - /// is the index of a chunk whose size is at least the requestd - /// size, and `chunk_size` is the size of that chunk. - std::pair extend_free_space(size_t requested_size); - - void write_array_at(ref_type, const char* data, size_t size); - size_t split_freelist_chunk(size_t index, size_t start_pos, - size_t alloc_pos, size_t chunk_size, bool is_shared); -}; - - - - -// Implementation: - -inline size_t GroupWriter::get_file_size() const noexcept -{ - return m_file_map.get_size(); -} - -inline void GroupWriter::set_versions(uint64_t current, uint64_t read_lock) noexcept -{ - REALM_ASSERT(read_lock <= current); - m_current_version = current; - m_readlock_version = read_lock; -} - -} // namespace realm - -#endif // REALM_GROUP_WRITER_HPP diff --git a/Pods/Realm/include/core/realm/handover_defs.hpp b/Pods/Realm/include/core/realm/handover_defs.hpp deleted file mode 100644 index ec495ef4..00000000 --- a/Pods/Realm/include/core/realm/handover_defs.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_HANDOVER_DEFS -#define REALM_HANDOVER_DEFS - -#include -#include - -namespace realm { - -enum class ConstSourcePayload { Copy, Stay }; -enum class MutableSourcePayload { Move }; - -struct RowBaseHandoverPatch; -struct TableViewHandoverPatch; - -struct TableHandoverPatch { - size_t m_table_num; -}; - -struct LinkViewHandoverPatch { - std::unique_ptr m_table; - size_t m_col_num; - size_t m_row_ndx; -}; - -// Base class for handover patches for query nodes. Subclasses are declared in query_engine.hpp. -struct QueryNodeHandoverPatch { - virtual ~QueryNodeHandoverPatch() = default; -}; - -using QueryNodeHandoverPatches = std::vector>; - -struct QueryHandoverPatch { - std::unique_ptr m_table; - std::unique_ptr table_view_data; - std::unique_ptr link_view_data; - QueryNodeHandoverPatches m_node_data; -}; - -struct TableViewHandoverPatch { - std::unique_ptr m_table; - std::unique_ptr linked_table; - std::unique_ptr linked_row; - bool was_in_sync; - QueryHandoverPatch query_patch; - std::unique_ptr linkview_patch; -}; - - -struct RowBaseHandoverPatch { - std::unique_ptr m_table; - size_t row_ndx; -}; - - -} // end namespace Realm - -#endif diff --git a/Pods/Realm/include/core/realm/history.hpp b/Pods/Realm/include/core/realm/history.hpp deleted file mode 100644 index 40282f9d..00000000 --- a/Pods/Realm/include/core/realm/history.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_HISTORY_HPP -#define REALM_HISTORY_HPP - -#include -#include - -#include - - -namespace realm { - -std::unique_ptr make_in_realm_history(const std::string& realm_path); - -} // namespace realm - - -#endif // REALM_HISTORY_HPP diff --git a/Pods/Realm/include/core/realm/impl/array_writer.hpp b/Pods/Realm/include/core/realm/impl/array_writer.hpp deleted file mode 100644 index 35c5fed2..00000000 --- a/Pods/Realm/include/core/realm/impl/array_writer.hpp +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * -***************************************************************************/ - -#ifndef REALM_ARRAY_WRITER_HPP -#define REALM_ARRAY_WRITER_HPP - -#include - -namespace realm { -namespace _impl { - -class ArrayWriterBase { -public: - virtual ~ArrayWriterBase() {} - - /// Write the specified array data and its checksum into free - /// space. - /// - /// Returns the ref (position in the target stream) of the written copy of - /// the specified array data. - virtual ref_type write_array(const char* data, size_t size, uint32_t checksum) = 0; -}; - -} // namespace impl_ -} // namespace realm - -#endif // REALM_ARRAY_WRITER_HPP diff --git a/Pods/Realm/include/core/realm/impl/continuous_transactions_history.hpp b/Pods/Realm/include/core/realm/impl/continuous_transactions_history.hpp deleted file mode 100644 index 4efe6877..00000000 --- a/Pods/Realm/include/core/realm/impl/continuous_transactions_history.hpp +++ /dev/null @@ -1,214 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_IMPL_CONTINUOUS_TRANSACTIONS_HISTORY_HPP -#define REALM_IMPL_CONTINUOUS_TRANSACTIONS_HISTORY_HPP - -#include -#include - -#include - -namespace realm { - -class Group; - -namespace _impl { - -/// Read-only access to history of changesets as needed to enable continuous -/// transactions. -class History { -public: - using version_type = uint_fast64_t; - - /// May be called during a read transaction to gain early access to the - /// history as it appears in a new snapshot that succeeds the one bound in - /// the current read transaction. - /// - /// May also be called at other times as long as the caller owns a read lock - /// (SharedGroup::grab_read_lock()) on the Realm for the specified file size - /// and top ref, and the allocator is in a 'free space clean' state - /// (SlabAlloc::is_free_space_clean()). - /// - /// This function may cause a remapping of the Realm file - /// (SlabAlloc::remap()) if it needs to make the new snapshot fully visible - /// in memory. - /// - /// Note that this method of gaining early access to the history in a new - /// snaphot only gives read access. It does not allow for modifications of - /// the history or any other part of the new snapshot. For modifications to - /// be allowed, `Group::m_top` (the parent of the history) would first have - /// to be updated to reflect the new snapshot, but at that time we are no - /// longer in an 'early access' situation. - /// - /// This is not a problem from the point of view of this history interface, - /// as it only contains methods for reading from the history, but some - /// implementations will want to also provide for ways to modify the - /// history, but in those cases, modifications must occur only after the - /// Group accessor has been fully updated to reflect the new snapshot. - virtual void update_early_from_top_ref(version_type new_version, size_t new_file_size, - ref_type new_top_ref) = 0; - - virtual void update_from_parent(version_type current_version) = 0; - - /// Get all changesets between the specified versions. References to those - /// changesets will be made availble in successive entries of `buffer`. The - /// number of retreived changesets is exactly `end_version - - /// begin_version`. If this number is greater than zero, the changeset made - /// avaialable in `buffer[0]` is the one that brought the database from - /// `begin_version` to `begin_version + 1`. - /// - /// It is an error to specify a version (for \a begin_version or \a - /// end_version) that is outside the range [V,W] where V is the version that - /// immediately precedes the first changeset available in the history as the - /// history appears in the **latest** available snapshot, and W is the - /// versionm that immediately succeeds the last changeset available in the - /// history as the history appears in the snapshot bound to the **current** - /// transaction. This restriction is necessary to allow for different kinds - /// of implementations of the history (separate standalone history or - /// history as part of versioned Realm state). - /// - /// The calee retains ownership of the memory referenced by those entries, - /// i.e., the memory referenced by `buffer[i].changeset` is **not** handed - /// over to the caller. - /// - /// This function may be called only during a transaction (prior to - /// initiation of commit operation), and only after a successfull invocation - /// of update_early_from_top_ref(). In that case, the caller may assume that - /// the memory references stay valid for the remainder of the transaction - /// (up until initiation of the commit operation). - virtual void get_changesets(version_type begin_version, version_type end_version, - BinaryData* buffer) const noexcept = 0; - - /// \brief Specify the version of the oldest bound snapshot. - /// - /// This function must be called by the associated SharedGroup object during - /// each successfully committed write transaction. It must be called before - /// the transaction is finalized (Replication::finalize_commit()) or aborted - /// (Replication::abort_transact()), but after the initiation of the commit - /// operation (Replication::prepare_commit()). This allows history - /// implementations to add new history entries before triming off old ones, - /// and this, in turn, guarantees that the history never becomes empty, - /// except in the initial empty Realm state. - /// - /// The caller must pass the version (\a version) of the oldest snapshot - /// that is currently (or was recently) bound via a transaction of the - /// current session. This gives the history implementation an opportunity to - /// trim off leading (early) history entries. - /// - /// Since this function must be called during a write transaction, there - /// will always be at least one snapshot that is currently bound via a - /// transaction. - /// - /// The caller must guarantee that the passed version (\a version) is less - /// than or equal to `begin_version` in all future invocations of - /// get_changesets(). - /// - /// The caller is allowed to pass a version that is less than the version - /// passed in a preceeding invocation. - /// - /// This function should be called as late as possible, to maximize the - /// trimming opportunity, but at a time where the write transaction is still - /// open for additional modifications. This is necessary because some types - /// of histories are stored inside the Realm file. - virtual void set_oldest_bound_version(version_type version) = 0; - - /// Get the list of uncommited changes accumulated so far in the current - /// write transaction. - /// - /// The callee retains ownership of the referenced memory. The ownership is - /// not handed over the the caller. - /// - /// This function may be called only during a write transaction (prior to - /// initiation of commit operation). In that case, the caller may assume that the - /// returned memory reference stays valid for the remainder of the transaction (up - /// until initiation of the commit operation). - virtual BinaryData get_uncommitted_changes() noexcept = 0; - -#ifdef REALM_DEBUG - virtual void verify() const = 0; -#endif - - virtual ~History() noexcept {} -}; - - -/// This class is intended to eventually become a basis for implementing the -/// Replication API for the purpose of supporting continuous transactions. That -/// is, its purpose is to replace the current implementation in commit_log.cpp, -/// which places the history in separate files. -/// -/// By ensuring that the root node of the history is correctly configured with -/// Group::m_top as its parent, this class allows for modifications of the -/// history as long as those modifications happen after the remainder of the -/// Group accessor is updated to reflect the new snapshot (see -/// History::update_early_from_top_ref()). -class InRealmHistory: public History { -public: - void initialize(Group&); - - /// Must never be called more than once per transaction. Returns the version - /// produced by the added changeset. - version_type add_changeset(BinaryData); - - void update_early_from_top_ref(version_type, size_t, ref_type) override; - void update_from_parent(version_type) override; - void get_changesets(version_type, version_type, BinaryData*) const noexcept override; - void set_oldest_bound_version(version_type) override; - -#ifdef REALM_DEBUG - void verify() const override; -#endif - -private: - Group* m_group = 0; - - /// Version on which the first changeset in the history is based, or if the - /// history is empty, the version associatede with currently bound - /// snapshot. In general, the version associatede with currently bound - /// snapshot is equal to `m_base_version + m_size`, but after - /// add_changeset() is called, it is equal to one minus that. - version_type m_base_version; - - /// Current number of entries in the history. A cache of - /// `m_changesets->size()`. - size_t m_size; - - /// A list of changesets, one for each entry in the history. If null, the - /// history is empty. - /// - /// FIXME: Ideally, the B+tree accessor below should have been just - /// Bptree, but Bptree seems to not allow that yet. - /// - /// FIXME: The memory-wise indirection is an unfortunate consequence of the - /// fact that it is impossible to construct a BinaryColumn without already - /// having a ref to a valid underlying node structure. This, in turn, is an - /// unfortunate consequence of the fact that a column accessor contains a - /// dynamically allocated root node accessor, and the type of the required - /// root node accessor depends on the size of the B+-tree. - std::unique_ptr m_changesets; - - void update_from_ref(ref_type, version_type); -}; - -} // namespace _impl -} // namespace realm - -#endif // REALM_IMPL_CONTINUOUS_TRANSACTIONS_HISTORY_HPP diff --git a/Pods/Realm/include/core/realm/impl/destroy_guard.hpp b/Pods/Realm/include/core/realm/impl/destroy_guard.hpp deleted file mode 100644 index a8b8cf74..00000000 --- a/Pods/Realm/include/core/realm/impl/destroy_guard.hpp +++ /dev/null @@ -1,231 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_IMPL_DESTROY_GUARD_HPP -#define REALM_IMPL_DESTROY_GUARD_HPP - -#include -#include - -namespace realm { -namespace _impl { - - -/// Calls `ptr->destroy()` if the guarded pointer (`ptr`) is not null -/// when the guard is destroyed. For arrays (`T` = `Array`) this means -/// that the array is destroyed in a shallow fashion. See -/// `DeepArrayDestroyGuard` for an alternative. -template -class DestroyGuard { -public: - DestroyGuard() noexcept; - - DestroyGuard(T*) noexcept; - - ~DestroyGuard() noexcept; - - void reset(T*) noexcept; - - T* get() const noexcept; - - T* release() noexcept; - -private: - T* m_ptr; -}; - -using ShallowArrayDestroyGuard = DestroyGuard; - - -/// Calls `ptr->destroy_deep()` if the guarded Array pointer (`ptr`) -/// is not null when the guard is destroyed. -class DeepArrayDestroyGuard { -public: - DeepArrayDestroyGuard() noexcept; - - DeepArrayDestroyGuard(Array*) noexcept; - - ~DeepArrayDestroyGuard() noexcept; - - void reset(Array*) noexcept; - - Array* get() const noexcept; - - Array* release() noexcept; - -private: - Array* m_ptr; -}; - - -/// Calls `Array::destroy_deep(ref, alloc)` if the guarded 'ref' -/// (`ref`) is not zero when the guard is destroyed. -class DeepArrayRefDestroyGuard { -public: - DeepArrayRefDestroyGuard(Allocator&) noexcept; - - DeepArrayRefDestroyGuard(ref_type, Allocator&) noexcept; - - ~DeepArrayRefDestroyGuard() noexcept; - - void reset(ref_type) noexcept; - - ref_type get() const noexcept; - - ref_type release() noexcept; - -private: - ref_type m_ref; - Allocator& m_alloc; -}; - - - - - -// Implementation: - -// DestroyGuard - -template -inline DestroyGuard::DestroyGuard() noexcept: - m_ptr(nullptr) -{ -} - -template -inline DestroyGuard::DestroyGuard(T* ptr) noexcept: - m_ptr(ptr) -{ -} - -template -inline DestroyGuard::~DestroyGuard() noexcept -{ - if (m_ptr) - m_ptr->destroy(); -} - -template -inline void DestroyGuard::reset(T* ptr) noexcept -{ - if (m_ptr) - m_ptr->destroy(); - m_ptr = ptr; -} - -template -inline T* DestroyGuard::get() const noexcept -{ - return m_ptr; -} - -template -inline T* DestroyGuard::release() noexcept -{ - T* ptr = m_ptr; - m_ptr = nullptr; - return ptr; -} - - -// DeepArrayDestroyGuard - -inline DeepArrayDestroyGuard::DeepArrayDestroyGuard() noexcept: - m_ptr(nullptr) -{ -} - -inline DeepArrayDestroyGuard::DeepArrayDestroyGuard(Array* ptr) noexcept: - m_ptr(ptr) -{ -} - -inline DeepArrayDestroyGuard::~DeepArrayDestroyGuard() noexcept -{ - if (m_ptr) - m_ptr->destroy_deep(); -} - -inline void DeepArrayDestroyGuard::reset(Array* ptr) noexcept -{ - if (m_ptr) - m_ptr->destroy_deep(); - m_ptr = ptr; -} - -inline Array* DeepArrayDestroyGuard::get() const noexcept -{ - return m_ptr; -} - -inline Array* DeepArrayDestroyGuard::release() noexcept -{ - Array* ptr = m_ptr; - m_ptr = nullptr; - return ptr; -} - - -// DeepArrayRefDestroyGuard - -inline DeepArrayRefDestroyGuard::DeepArrayRefDestroyGuard(Allocator& alloc) noexcept: - m_ref(0), - m_alloc(alloc) -{ -} - -inline DeepArrayRefDestroyGuard::DeepArrayRefDestroyGuard(ref_type ref, - Allocator& alloc) noexcept: - m_ref(ref), - m_alloc(alloc) -{ -} - -inline DeepArrayRefDestroyGuard::~DeepArrayRefDestroyGuard() noexcept -{ - if (m_ref) - Array::destroy_deep(m_ref, m_alloc); -} - -inline void DeepArrayRefDestroyGuard::reset(ref_type ref) noexcept -{ - if (m_ref) - Array::destroy_deep(m_ref, m_alloc); - m_ref = ref; -} - -inline ref_type DeepArrayRefDestroyGuard::get() const noexcept -{ - return m_ref; -} - -inline ref_type DeepArrayRefDestroyGuard::release() noexcept -{ - ref_type ref = m_ref; - m_ref = 0; - return ref; -} - - -} // namespace _impl -} // namespace realm - -#endif // REALM_IMPL_DESTROY_GUARD_HPP diff --git a/Pods/Realm/include/core/realm/impl/input_stream.hpp b/Pods/Realm/include/core/realm/impl/input_stream.hpp deleted file mode 100644 index 19725d53..00000000 --- a/Pods/Realm/include/core/realm/impl/input_stream.hpp +++ /dev/null @@ -1,242 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_IMPL_INPUT_STREAM_HPP -#define REALM_IMPL_INPUT_STREAM_HPP - -#include - -#include -#include - - -namespace realm { -namespace _impl { - - -class InputStream { -public: - /// Read bytes from this input stream and place them in the specified - /// buffer. The returned value is the actual number of bytes that were read, - /// and this is some number `n` such that `n <= min(size, m)` where `m` is - /// the number of bytes that could have been read from this stream before - /// reaching its end. Also, `n` cannot be zero unless `m` or `size` is - /// zero. The intention is that `size` should be non-zero, a the return - /// value used as the end-of-input indicator. - /// - /// Implementations are only allowed to block (put the calling thread to - /// sleep) up until the point in time where the first byte can be made - /// availble. - virtual size_t read(char* buffer, size_t size) = 0; - - virtual ~InputStream() noexcept {} -}; - - -class SimpleInputStream: public InputStream { -public: - SimpleInputStream(const char* data, size_t size) noexcept: - m_ptr(data), - m_end(data + size) - { - } - size_t read(char* buffer, size_t size) override - { - size_t n = std::min(size, size_t(m_end-m_ptr)); - const char* begin = m_ptr; - m_ptr += n; - const char* end = m_ptr; - std::copy(begin, end, buffer); - return n; - } -private: - const char* m_ptr; - const char* const m_end; -}; - - -class NoCopyInputStream { -public: - /// \return the number of accessible bytes. - /// A value of zero indicates end-of-input. - /// For non-zero return value, \a begin and \a end are - /// updated to reflect the start and limit of a - /// contiguous memory chunk. - virtual size_t next_block(const char*& begin, const char*& end) = 0; - - virtual ~NoCopyInputStream() noexcept {} -}; - - -class NoCopyInputStreamAdaptor: public NoCopyInputStream { -public: - NoCopyInputStreamAdaptor(InputStream& in, char* buffer, size_t buffer_size) noexcept: - m_in(in), - m_buffer(buffer), - m_buffer_size(buffer_size) - { - } - size_t next_block(const char*& begin, const char*& end) override - { - size_t n = m_in.read(m_buffer, m_buffer_size); - begin = m_buffer; - end = m_buffer + n; - return n; - } -private: - InputStream& m_in; - char* m_buffer; - size_t m_buffer_size; -}; - - -class SimpleNoCopyInputStream: public NoCopyInputStream { -public: - SimpleNoCopyInputStream(const char* data, size_t size): - m_data(data), - m_size(size) - { - } - - size_t next_block(const char*& begin, const char*& end) override - { - if (m_size == 0) - return 0; - size_t size = m_size; - begin = m_data; - end = m_data + size; - m_size = 0; - return size; - } - -private: - const char* m_data; - size_t m_size; -}; - -class MultiLogNoCopyInputStream: public NoCopyInputStream { -public: - MultiLogNoCopyInputStream(const BinaryData* logs_begin, const BinaryData* logs_end): - m_logs_begin(logs_begin), m_logs_end(logs_end) - { - if (m_logs_begin != m_logs_end) - m_curr_buf_remaining_size = m_logs_begin->size(); - } - - size_t read(char* buffer, size_t size) - { - if (m_logs_begin == m_logs_end) - return 0; - for (;;) { - if (m_curr_buf_remaining_size > 0) { - size_t offset = m_logs_begin->size() - m_curr_buf_remaining_size; - const char* data = m_logs_begin->data() + offset; - size_t size_2 = std::min(m_curr_buf_remaining_size, size); - m_curr_buf_remaining_size -= size_2; - // FIXME: Eliminate the need for copying by changing the API of - // Replication::InputStream such that blocks can be handed over - // without copying. This is a straight forward change, but the - // result is going to be more complicated and less conventional. - std::copy(data, data + size_2, buffer); - return size_2; - } - - ++m_logs_begin; - if (m_logs_begin == m_logs_end) - return 0; - m_curr_buf_remaining_size = m_logs_begin->size(); - } - } - - size_t next_block(const char*& begin, const char*& end) override - { - while (m_logs_begin < m_logs_end) { - size_t result = m_logs_begin->size(); - const char* data = m_logs_begin->data(); - m_logs_begin++; - if (result == 0) - continue; // skip empty blocks - begin = data; - end = data + result; - return result; - } - return 0; - } - -private: - const BinaryData* m_logs_begin; - const BinaryData* m_logs_end; - size_t m_curr_buf_remaining_size; -}; - - -class ChangesetInputStream: public NoCopyInputStream { -public: - using version_type = History::version_type; - ChangesetInputStream(History&, version_type begin_version, version_type end_version); - size_t next_block(const char*& begin, const char*& end) override; -private: - History& m_history; - version_type m_begin_version, m_end_version; - BinaryData m_changesets[8]; // Buffer - BinaryData* m_changesets_begin = 0; - BinaryData* m_changesets_end = 0; -}; - - -inline ChangesetInputStream::ChangesetInputStream(History& hist, version_type begin_version, - version_type end_version): - m_history(hist), - m_begin_version(begin_version), - m_end_version(end_version) -{ -} - -inline size_t ChangesetInputStream::next_block(const char*& begin, const char*& end) -{ - for (;;) { - if (REALM_UNLIKELY(m_changesets_begin == m_changesets_end)) { - if (m_begin_version == m_end_version) - return 0; // End of input - version_type n = sizeof m_changesets / sizeof m_changesets[0]; - version_type avail = m_end_version - m_begin_version; - if (n > avail) - n = avail; - version_type end_version = m_begin_version + n; - m_history.get_changesets(m_begin_version, end_version, m_changesets); - m_begin_version = end_version; - m_changesets_begin = m_changesets; - m_changesets_end = m_changesets_begin + n; - } - - BinaryData changeset = *m_changesets_begin++; - if (changeset.size() > 0) { - begin = changeset.data(); - end = changeset.data() + changeset.size(); - return changeset.size(); - } - } -} - - -} // namespace _impl -} // namespace realm - -#endif // REALM_IMPL_INPUT_STREAM_HPP diff --git a/Pods/Realm/include/core/realm/impl/output_stream.hpp b/Pods/Realm/include/core/realm/impl/output_stream.hpp deleted file mode 100644 index c49f562e..00000000 --- a/Pods/Realm/include/core/realm/impl/output_stream.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_IMPL_OUTPUT_STREAM_HPP -#define REALM_IMPL_OUTPUT_STREAM_HPP - -#include -#include - -#include - -#include - -#include - -namespace realm { -namespace _impl { - - -class OutputStream: public ArrayWriterBase { -public: - OutputStream(std::ostream&); - ~OutputStream() noexcept; - - ref_type get_ref_of_next_array() const noexcept; - - void write(const char* data, size_t size); - - ref_type write_array(const char* data, size_t size, uint32_t checksum) override; - -private: - ref_type m_next_ref; - std::ostream& m_out; - - void do_write(const char* data, size_t size); -}; - - - - - -// Implementation: - -inline OutputStream::OutputStream(std::ostream& out): - m_next_ref(0), - m_out(out) -{ -} - -inline OutputStream::~OutputStream() noexcept -{ -} - -inline size_t OutputStream::get_ref_of_next_array() const noexcept -{ - return m_next_ref; -} - - -} // namespace _impl -} // namespace realm - -#endif // REALM_IMPL_OUTPUT_STREAM_HPP diff --git a/Pods/Realm/include/core/realm/impl/sequential_getter.hpp b/Pods/Realm/include/core/realm/impl/sequential_getter.hpp deleted file mode 100644 index e2218a8e..00000000 --- a/Pods/Realm/include/core/realm/impl/sequential_getter.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_IMPL_SEQUENTIAL_GETTER_HPP -#define REALM_IMPL_SEQUENTIAL_GETTER_HPP - -namespace realm { - -class SequentialGetterBase { -public: - virtual ~SequentialGetterBase() noexcept {} -}; - -template -class SequentialGetter : public SequentialGetterBase { -public: - using T = typename ColType::value_type; - using ArrayType = typename ColType::LeafType; - - SequentialGetter() {} - - SequentialGetter(const Table& table, size_t column_ndx) - { - if (column_ndx != not_found) - m_column = static_cast(&table.get_column_base(column_ndx)); - init(m_column); - } - - SequentialGetter(const ColType* column) - { - init(column); - } - - ~SequentialGetter() noexcept override {} - - void init(const ColType* column) - { - m_array_ptr.reset(); // Explicitly destroy the old one first, because we're reusing the memory. - m_array_ptr.reset(new(&m_leaf_accessor_storage) ArrayType(column->get_alloc())); - m_column = column; - m_leaf_end = 0; - } - - REALM_FORCEINLINE bool cache_next(size_t index) - { - // Return wether or not leaf array has changed (could be useful to know for caller) - if (index >= m_leaf_end || index < m_leaf_start) { - typename ColType::LeafInfo leaf { &m_leaf_ptr, m_array_ptr.get() }; - size_t ndx_in_leaf; - m_column->get_leaf(index, ndx_in_leaf, leaf); - m_leaf_start = index - ndx_in_leaf; - const size_t leaf_size = m_leaf_ptr->size(); - m_leaf_end = m_leaf_start + leaf_size; - return true; - } - return false; - } - - - REALM_FORCEINLINE T get_next(size_t index) - { -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4800) // Disable the Microsoft warning about bool performance issue. -#endif - - cache_next(index); - T av = m_leaf_ptr->get(index - m_leaf_start); - return av; - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - } - - size_t local_end(size_t global_end) - { - if (global_end > m_leaf_end) - return m_leaf_end - m_leaf_start; - else - return global_end - m_leaf_start; - } - - size_t m_leaf_start; - size_t m_leaf_end; - const ColType* m_column; - - const ArrayType* m_leaf_ptr = nullptr; -private: - // Leaf cache for when the root of the column is not a leaf. - // This dog and pony show is because Array has a reference to Allocator internally, - // but we need to be able to transfer queries between contexts, so init() reinitializes - // the leaf cache in the context of the current column. - typename std::aligned_storage::type m_leaf_accessor_storage; - std::unique_ptr m_array_ptr; -}; - -} // namespace realm - -#endif // REALM_IMPL_SEQUENTIAL_GETTER_HPP diff --git a/Pods/Realm/include/core/realm/impl/simulated_failure.hpp b/Pods/Realm/include/core/realm/impl/simulated_failure.hpp deleted file mode 100644 index 6bc6ed54..00000000 --- a/Pods/Realm/include/core/realm/impl/simulated_failure.hpp +++ /dev/null @@ -1,218 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_IMPL_SIMULATED_FAILURE_HPP -#define REALM_IMPL_SIMULATED_FAILURE_HPP - -#include -#include - -#include - -#ifdef REALM_DEBUG -# define REALM_ENABLE_SIMULATED_FAILURE -#endif - -namespace realm { -namespace _impl { - -class SimulatedFailure: public std::system_error { -public: - enum FailureType { - generic, - slab_alloc__reset_free_space_tracking, - slab_alloc__remap, - shared_group__grow_reader_mapping, - sync_client__read_head, - sync_server__read_head, - _num_failure_types - }; - - class OneShotPrimeGuard; - class RandomPrimeGuard; - - /// Prime the specified failure type on the calling thread for triggering - /// once. - static void prime_one_shot(FailureType); - - /// Prime the specified failure type on the calling thread for triggering - /// randomly \a n out of \a m times. - static void prime_random(FailureType, int n, int m, uint_fast64_t seed = 0); - - /// Unprime the specified failure type on the calling thread. - static void unprime(FailureType) noexcept; - - /// Returns true according to the mode of priming of the specified failure - /// type on the calling thread, but only if REALM_ENABLE_SIMULATED_FAILURE - /// was defined during compilation. If REALM_ENABLE_SIMULATED_FAILURE was - /// not defined, this function always return false. - static bool check_trigger(FailureType) noexcept; - - /// The specified error code is set to `make_error_code(failure_type)` if - /// check_trigger() returns true. Otherwise it is set to - /// `std::error_code()`. Returns a copy of the updated error code. - static std::error_code trigger(FailureType failure_type, std::error_code&) noexcept; - - /// Throws SimulatedFailure if check_trigger() returns true. The exception - /// will be constructed with an error code equal to - /// `make_error_code(failure_type)`. - static void trigger(FailureType failure_type); - - /// Returns true when, and only when REALM_ENABLE_SIMULATED_FAILURE was - /// defined during compilation. - static constexpr bool is_enabled(); - - SimulatedFailure(std::error_code); - -private: -#ifdef REALM_ENABLE_SIMULATED_FAILURE - static void do_prime_one_shot(FailureType); - static void do_prime_random(FailureType, int n, int m, uint_fast64_t seed); - static void do_unprime(FailureType) noexcept; - static bool do_check_trigger(FailureType) noexcept; -#endif -}; - -std::error_code make_error_code(SimulatedFailure::FailureType) noexcept; - - -class SimulatedFailure::OneShotPrimeGuard { -public: - OneShotPrimeGuard(FailureType); - ~OneShotPrimeGuard() noexcept; -private: - const FailureType m_type; -}; - - -class SimulatedFailure::RandomPrimeGuard { -public: - RandomPrimeGuard(FailureType, int n, int m, uint_fast64_t seed = 0); - ~RandomPrimeGuard() noexcept; -private: - const FailureType m_type; -}; - - - - - -// Implementation - -inline void SimulatedFailure::prime_one_shot(FailureType failure_type) -{ -#ifdef REALM_ENABLE_SIMULATED_FAILURE - do_prime_one_shot(failure_type); -#else - static_cast(failure_type); -#endif -} - -inline void SimulatedFailure::prime_random(FailureType failure_type, int n, int m, - uint_fast64_t seed) -{ -#ifdef REALM_ENABLE_SIMULATED_FAILURE - do_prime_random(failure_type, n, m, seed); -#else - static_cast(failure_type); - static_cast(n); - static_cast(m); - static_cast(seed); -#endif -} - -inline void SimulatedFailure::unprime(FailureType failure_type) noexcept -{ -#ifdef REALM_ENABLE_SIMULATED_FAILURE - do_unprime(failure_type); -#else - static_cast(failure_type); -#endif -} - -inline bool SimulatedFailure::check_trigger(FailureType failure_type) noexcept -{ -#ifdef REALM_ENABLE_SIMULATED_FAILURE - return do_check_trigger(failure_type); -#else - static_cast(failure_type); - return false; -#endif -} - -inline std::error_code SimulatedFailure::trigger(FailureType failure_type, - std::error_code& ec) noexcept -{ - if (check_trigger(failure_type)) { - ec = make_error_code(failure_type); - } - else { - ec = std::error_code(); - } - return ec; -} - -inline void SimulatedFailure::trigger(FailureType failure_type) -{ - if (check_trigger(failure_type)) - throw SimulatedFailure(make_error_code(failure_type)); -} - -inline constexpr bool SimulatedFailure::is_enabled() -{ -#ifdef REALM_ENABLE_SIMULATED_FAILURE - return true; -#else - return false; -#endif -} - -inline SimulatedFailure::SimulatedFailure(std::error_code ec): - std::system_error(ec) -{ -} - -inline SimulatedFailure::OneShotPrimeGuard::OneShotPrimeGuard(FailureType failure_type): - m_type(failure_type) -{ - prime_one_shot(m_type); -} - -inline SimulatedFailure::OneShotPrimeGuard::~OneShotPrimeGuard() noexcept -{ - unprime(m_type); -} - -inline SimulatedFailure::RandomPrimeGuard::RandomPrimeGuard(FailureType failure_type, int n, int m, - uint_fast64_t seed): - m_type(failure_type) -{ - prime_random(m_type, n, m, seed); -} - -inline SimulatedFailure::RandomPrimeGuard::~RandomPrimeGuard() noexcept -{ - unprime(m_type); -} - -} // namespace _impl -} // namespace realm - -#endif // REALM_IMPL_SIMULATED_FAILURE_HPP diff --git a/Pods/Realm/include/core/realm/impl/transact_log.hpp b/Pods/Realm/include/core/realm/impl/transact_log.hpp deleted file mode 100644 index 6d04cffa..00000000 --- a/Pods/Realm/include/core/realm/impl/transact_log.hpp +++ /dev/null @@ -1,2612 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_IMPL_TRANSACT_LOG_HPP -#define REALM_IMPL_TRANSACT_LOG_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace realm { -namespace _impl { - -/// Transaction log instruction encoding -enum Instruction { - instr_InsertGroupLevelTable = 1, - instr_EraseGroupLevelTable = 2, // Remove columnless table from group - instr_RenameGroupLevelTable = 3, - instr_MoveGroupLevelTable = 45, - instr_SelectTable = 4, - instr_SetInt = 5, - instr_SetIntUnique = 31, - instr_SetBool = 6, - instr_SetFloat = 7, - instr_SetDouble = 8, - instr_SetString = 9, - instr_SetStringUnique = 32, - instr_SetBinary = 10, - instr_SetOldDateTime = 11, - instr_SetTimestamp = 48, - instr_SetTable = 12, - instr_SetMixed = 13, - instr_SetLink = 14, - instr_NullifyLink = 15, // Set link to null due to target being erased - instr_SetNull = 16, - instr_InsertSubstring = 43, // FIXME: Reenumerate - instr_EraseFromString = 44, // FIXME: Reenumerate - instr_InsertEmptyRows = 17, - instr_EraseRows = 18, // Remove (multiple) rows - instr_SwapRows = 19, - instr_ChangeLinkTargets = 47, // Replace links pointing to row A with links to row B - instr_ClearTable = 20, // Remove all rows in selected table - instr_OptimizeTable = 21, - instr_SelectDescriptor = 22, // Select descriptor from currently selected root table - instr_InsertColumn = 23, // Insert new non-nullable column into to selected descriptor (nullable is instr_InsertNullableColumn) - instr_InsertLinkColumn = 24, // do, but for a link-type column - instr_InsertNullableColumn = 25, // Insert nullable column - instr_EraseColumn = 26, // Remove column from selected descriptor - instr_EraseLinkColumn = 27, // Remove link-type column from selected descriptor - instr_RenameColumn = 28, // Rename column in selected descriptor - instr_MoveColumn = 46, // Move column in selected descriptor // FIXME: Reenumerate - instr_AddSearchIndex = 29, // Add a search index to a column - instr_RemoveSearchIndex = 30, // Remove a search index from a column - instr_SetLinkType = 33, // Strong/weak - instr_SelectLinkList = 34, - instr_LinkListSet = 35, // Assign to link list entry - instr_LinkListInsert = 36, // Insert entry into link list - instr_LinkListMove = 37, // Move an entry within a link list - instr_LinkListSwap = 38, // Swap two entries within a link list - instr_LinkListErase = 39, // Remove an entry from a link list - instr_LinkListNullify = 40, // Remove an entry from a link list due to linked row being erased - instr_LinkListClear = 41, // Ramove all entries from a link list - instr_LinkListSetAll = 42, // Assign to link list entry -}; - - -class TransactLogStream { -public: - /// Ensure contiguous free space in the transaction log - /// buffer. This method must update `out_free_begin` - /// and `out_free_end` such that they refer to a chunk - /// of free space whose size is at least \a n. - /// - /// \param n The required amount of contiguous free space. Must be - /// small (probably not greater than 1024) - /// \param n Must be small (probably not greater than 1024) - virtual void transact_log_reserve(size_t size, char** out_free_begin, char** out_free_end) = 0; - - /// Copy the specified data into the transaction log buffer. This - /// function should be called only when the specified data does - /// not fit inside the chunk of free space currently referred to - /// by `out_free_begin` and `out_free_end`. - /// - /// This method must update `out_begin` and - /// `out_end` such that, upon return, they still - /// refer to a (possibly empty) chunk of free space. - virtual void transact_log_append(const char* data, size_t size, char** out_free_begin, char** out_free_end) = 0; -}; - -class TransactLogBufferStream: public TransactLogStream { -public: - void transact_log_reserve(size_t size, char** out_free_begin, char** out_free_end) override; - void transact_log_append(const char* data, size_t size, char** out_free_begin, char** out_free_end) override; - - const char* transact_log_data() const; - - util::Buffer m_buffer; -}; - - -// LCOV_EXCL_START (because the NullInstructionObserver is trivial) -class NullInstructionObserver { -public: - /// The following methods are also those that TransactLogParser expects - /// to find on the `InstructionHandler`. - - // No selection needed: - bool select_table(size_t, size_t, const size_t*) { return true; } - bool select_descriptor(size_t, const size_t*) { return true; } - bool select_link_list(size_t, size_t, size_t) { return true; } - bool insert_group_level_table(size_t, size_t, StringData) { return true; } - bool erase_group_level_table(size_t, size_t) { return true; } - bool rename_group_level_table(size_t, StringData) { return true; } - bool move_group_level_table(size_t, size_t) { return true; } - - // Must have table selected: - bool insert_empty_rows(size_t, size_t, size_t, bool) { return true; } - bool erase_rows(size_t, size_t, size_t, bool) { return true; } - bool swap_rows(size_t, size_t) { return true; } - bool change_link_targets(size_t, size_t) { return true; } - bool clear_table() { return true; } - bool set_int(size_t, size_t, int_fast64_t) { return true; } - bool set_int_unique(size_t, size_t, size_t, int_fast64_t) { return true; } - bool set_bool(size_t, size_t, bool) { return true; } - bool set_float(size_t, size_t, float) { return true; } - bool set_double(size_t, size_t, double) { return true; } - bool set_string(size_t, size_t, StringData) { return true; } - bool set_string_unique(size_t, size_t, size_t, StringData) { return true; } - bool set_binary(size_t, size_t, BinaryData) { return true; } - bool set_olddatetime(size_t, size_t, OldDateTime) { return true; } - bool set_timestamp(size_t, size_t, Timestamp) { return true; } - bool set_table(size_t, size_t) { return true; } - bool set_mixed(size_t, size_t, const Mixed&) { return true; } - bool set_link(size_t, size_t, size_t, size_t) { return true; } - bool set_null(size_t, size_t) { return true; } - bool nullify_link(size_t, size_t, size_t) { return true; } - bool insert_substring(size_t, size_t, size_t, StringData) { return true; } - bool erase_substring(size_t, size_t, size_t, size_t) { return true; } - bool optimize_table() { return true; }; - - // Must have descriptor selected: - bool insert_link_column(size_t, DataType, StringData, size_t, size_t) { return true; } - bool insert_column(size_t, DataType, StringData, bool) { return true; } - bool erase_link_column(size_t, size_t, size_t) { return true; } - bool erase_column(size_t) { return true; } - bool rename_column(size_t, StringData) { return true; } - bool move_column(size_t, size_t) { return true; } - bool add_search_index(size_t) { return true; } - bool remove_search_index(size_t) { return true; } - bool set_link_type(size_t, LinkType) { return true; } - - // Must have linklist selected: - bool link_list_set(size_t, size_t) { return true; } - bool link_list_insert(size_t, size_t) { return true; } - bool link_list_move(size_t, size_t) { return true; } - bool link_list_swap(size_t, size_t) { return true; } - bool link_list_erase(size_t) { return true; } - bool link_list_nullify(size_t) { return true; } - bool link_list_clear(size_t) { return true; } - - void parse_complete() {} -}; -// LCOV_EXCL_STOP (NullInstructionObserver) - - -/// See TransactLogConvenientEncoder for information about the meaning of the -/// arguments of each of the functions in this class. -class TransactLogEncoder { -public: - /// The following methods are also those that TransactLogParser expects - /// to find on the `InstructionHandler`. - - // No selection needed: - bool select_table(size_t group_level_ndx, size_t levels, const size_t* path); - bool select_descriptor(size_t levels, const size_t* path); - bool select_link_list(size_t col_ndx, size_t row_ndx, size_t link_target_group_level_ndx); - bool insert_group_level_table(size_t table_ndx, size_t num_tables, StringData name); - bool erase_group_level_table(size_t table_ndx, size_t num_tables); - bool rename_group_level_table(size_t table_ndx, StringData new_name); - bool move_group_level_table(size_t from_table_ndx, size_t to_table_ndx); - - /// Must have table selected. - bool insert_empty_rows(size_t row_ndx, size_t num_rows_to_insert, size_t prior_num_rows, - bool unordered); - bool erase_rows(size_t row_ndx, size_t num_rows_to_erase, size_t prior_num_rows, - bool unordered); - bool swap_rows(size_t row_ndx_1, size_t row_ndx_2); - bool change_link_targets(size_t row_ndx, size_t new_row_ndx); - bool clear_table(); - - bool set_int(size_t col_ndx, size_t row_ndx, int_fast64_t); - bool set_int_unique(size_t col_ndx, size_t row_ndx, size_t prior_num_rows, int_fast64_t); - bool set_bool(size_t col_ndx, size_t row_ndx, bool); - bool set_float(size_t col_ndx, size_t row_ndx, float); - bool set_double(size_t col_ndx, size_t row_ndx, double); - bool set_string(size_t col_ndx, size_t row_ndx, StringData); - bool set_string_unique(size_t col_ndx, size_t row_ndx, size_t prior_num_rows, StringData); - bool set_binary(size_t col_ndx, size_t row_ndx, BinaryData); - bool set_olddatetime(size_t col_ndx, size_t row_ndx, OldDateTime); - bool set_timestamp(size_t col_ndx, size_t row_ndx, Timestamp); - bool set_table(size_t col_ndx, size_t row_ndx); - bool set_mixed(size_t col_ndx, size_t row_ndx, const Mixed&); - bool set_link(size_t col_ndx, size_t row_ndx, size_t, size_t target_group_level_ndx); - bool set_null(size_t col_ndx, size_t row_ndx); - bool nullify_link(size_t col_ndx, size_t row_ndx, size_t target_group_level_ndx); - bool insert_substring(size_t col_ndx, size_t row_ndx, size_t pos, StringData); - bool erase_substring(size_t col_ndx, size_t row_ndx, size_t pos, size_t size); - bool optimize_table(); - - // Must have descriptor selected: - bool insert_link_column(size_t col_ndx, DataType, StringData name, size_t link_target_table_ndx, size_t backlink_col_ndx); - bool insert_column(size_t col_ndx, DataType, StringData name, bool nullable = false); - bool erase_link_column(size_t col_ndx, size_t link_target_table_ndx, size_t backlink_col_ndx); - bool erase_column(size_t col_ndx); - bool rename_column(size_t col_ndx, StringData new_name); - bool move_column(size_t col_ndx_1, size_t col_ndx_2); - bool add_search_index(size_t col_ndx); - bool remove_search_index(size_t col_ndx); - bool set_link_type(size_t col_ndx, LinkType); - - // Must have linklist selected: - bool link_list_set(size_t link_ndx, size_t value); - bool link_list_set_all(const IntegerColumn& values); - bool link_list_insert(size_t link_ndx, size_t value); - bool link_list_move(size_t from_link_ndx, size_t to_link_ndx); - bool link_list_swap(size_t link1_ndx, size_t link2_ndx); - bool link_list_erase(size_t link_ndx); - bool link_list_nullify(size_t link_ndx); - bool link_list_clear(size_t old_list_size); - - /// End of methods expected by parser. - - - TransactLogEncoder(TransactLogStream& out_stream); - void set_buffer(char* new_free_begin, char* new_free_end); - char* write_position() const { return m_transact_log_free_begin; } - -private: - // Make sure this is in agreement with the actual integer encoding - // scheme (see encode_int()). - static const int max_enc_bytes_per_int = 10; - static const int max_enc_bytes_per_double = sizeof (double); - static const int max_enc_bytes_per_num = max_enc_bytes_per_int < - max_enc_bytes_per_double ? max_enc_bytes_per_double : max_enc_bytes_per_int; - - TransactLogStream& m_stream; - - // These two delimit a contiguous region of free space in a - // transaction log buffer following the last written data. It may - // be empty. - char* m_transact_log_free_begin = 0; - char* m_transact_log_free_end = 0; - - char* reserve(size_t size); - /// \param ptr Must be in the range [m_transact_log_free_begin, m_transact_log_free_end] - void advance(char* ptr) noexcept; - - template - void append_simple_instr(Instruction, const util::Tuple& numbers); - - template - void append_string_instr(Instruction, const util::Tuple& numbers, StringData); - - template - void append_mixed_instr(Instruction, const util::Tuple& numbers, const Mixed&); - - template - bool append_variable_size_instr(Instruction instr, const util::Tuple& numbers, - I var_begin, I var_end); - - template - static char* encode_int(char*, T value); - static char* encode_float(char*, float value); - static char* encode_double(char*, double value); - template - struct EncodeNumber; -}; - -class TransactLogConvenientEncoder { -public: - void insert_group_level_table(size_t table_ndx, size_t num_tables, StringData name); - void erase_group_level_table(size_t table_ndx, size_t num_tables); - void rename_group_level_table(size_t table_ndx, StringData new_name); - void move_group_level_table(size_t from_table_ndx, size_t to_table_ndx); - void insert_column(const Descriptor&, size_t col_ndx, DataType type, StringData name, - LinkTargetInfo& link, bool nullable = false); - void erase_column(const Descriptor&, size_t col_ndx); - void rename_column(const Descriptor&, size_t col_ndx, StringData name); - void move_column(const Descriptor&, size_t from, size_t to); - - void set_int(const Table*, size_t col_ndx, size_t ndx, int_fast64_t value); - void set_int_unique(const Table*, size_t col_ndx, size_t ndx, int_fast64_t value); - void set_bool(const Table*, size_t col_ndx, size_t ndx, bool value); - void set_float(const Table*, size_t col_ndx, size_t ndx, float value); - void set_double(const Table*, size_t col_ndx, size_t ndx, double value); - void set_string(const Table*, size_t col_ndx, size_t ndx, StringData value); - void set_string_unique(const Table*, size_t col_ndx, size_t ndx, StringData value); - void set_binary(const Table*, size_t col_ndx, size_t ndx, BinaryData value); - void set_olddatetime(const Table*, size_t col_ndx, size_t ndx, OldDateTime value); - void set_timestamp(const Table*, size_t col_ndx, size_t ndx, Timestamp value); - void set_table(const Table*, size_t col_ndx, size_t ndx); - void set_mixed(const Table*, size_t col_ndx, size_t ndx, const Mixed& value); - void set_link(const Table*, size_t col_ndx, size_t ndx, size_t value); - void set_null(const Table*, size_t col_ndx, size_t ndx); - void set_link_list(const LinkView&, const IntegerColumn& values); - void insert_substring(const Table*, size_t col_ndx, size_t row_ndx, size_t pos, StringData); - void erase_substring(const Table*, size_t col_ndx, size_t row_ndx, size_t pos, size_t size); - - /// \param prior_num_rows The number of rows in the table prior to the - /// modification. - void insert_empty_rows(const Table*, size_t row_ndx, size_t num_rows_to_insert, - size_t prior_num_rows); - - /// \param prior_num_rows The number of rows in the table prior to the - /// modification. - void erase_rows(const Table*, size_t row_ndx, size_t num_rows_to_erase, size_t prior_num_rows, - bool is_move_last_over); - - void swap_rows(const Table*, size_t row_ndx_1, size_t row_ndx_2); - void change_link_targets(const Table*, size_t row_ndx, size_t new_row_ndx); - void add_search_index(const Table*, size_t col_ndx); - void remove_search_index(const Table*, size_t col_ndx); - void set_link_type(const Table*, size_t col_ndx, LinkType); - void clear_table(const Table*); - void optimize_table(const Table*); - - void link_list_set(const LinkView&, size_t link_ndx, size_t value); - void link_list_insert(const LinkView&, size_t link_ndx, size_t value); - void link_list_move(const LinkView&, size_t from_link_ndx, size_t to_link_ndx); - void link_list_swap(const LinkView&, size_t link_ndx_1, size_t link_ndx_2); - void link_list_erase(const LinkView&, size_t link_ndx); - void link_list_clear(const LinkView&); - - //@{ - - /// Implicit nullifications due to removal of target row. This is redundant - /// information from the point of view of replication, as the removal of the - /// target row will reproduce the implicit nullifications in the target - /// Realm anyway. The purpose of this instruction is to allow observers - /// (reactor pattern) to be explicitly notified about the implicit - /// nullifications. - - void nullify_link(const Table*, size_t col_ndx, size_t ndx); - void link_list_nullify(const LinkView&, size_t link_ndx); - - //@} - - void on_table_destroyed(const Table*) noexcept; - void on_spec_destroyed(const Spec*) noexcept; - void on_link_list_destroyed(const LinkView&) noexcept; - -protected: - TransactLogConvenientEncoder(TransactLogStream& encoder); - - void reset_selection_caches() noexcept; - void set_buffer(char* new_free_begin, char* new_free_end) { m_encoder.set_buffer(new_free_begin, new_free_end); } - char* write_position() const { return m_encoder.write_position(); } - -private: - TransactLogEncoder m_encoder; - // These are mutable because they are caches. - mutable util::Buffer m_subtab_path_buf; - mutable const Table* m_selected_table; - mutable const Spec* m_selected_spec; - // Has to be atomic to support concurrent reset when a linklist - // is unselected. This can happen on a different thread. In case - // of races, setting of a new value must win. - mutable std::atomic m_selected_link_list; - - void unselect_all() noexcept; - void select_table(const Table*); // unselects descriptor and link list - void select_desc(const Descriptor&); // unselects link list - void select_link_list(const LinkView&); // unselects descriptor - - void record_subtable_path(const Table&, size_t*& out_begin, size_t*& out_end); - void do_select_table(const Table*); - void do_select_desc(const Descriptor&); - void do_select_link_list(const LinkView&); - - friend class TransactReverser; -}; - - -class TransactLogParser { -public: - class BadTransactLog; // Exception - - TransactLogParser(); - ~TransactLogParser() noexcept; - - /// See `TransactLogEncoder` for a list of methods that the `InstructionHandler` must define. - /// parse() promises that the path passed by reference to - /// InstructionHandler::select_descriptor() will remain valid - /// during subsequent calls to all descriptor modifying functions. - template - void parse(InputStream&, InstructionHandler&); - - template - void parse(NoCopyInputStream&, InstructionHandler&); - -private: - util::Buffer m_input_buffer; - - // The input stream is assumed to consist of chunks of memory organised such that - // every instruction resides in a single chunk only. - NoCopyInputStream* m_input; - // pointer into transaction log, each instruction is parsed from m_input_begin and onwards. - // Each instruction are assumed to be contiguous in memory. - const char* m_input_begin; - // pointer to one past current instruction log chunk. If m_input_begin reaches m_input_end, - // a call to next_input_buffer will move m_input_begin and m_input_end to a new chunk of - // memory. Setting m_input_end to 0 disables this check, and is used if it is already known - // that all of the instructions are in memory. - const char* m_input_end; - util::StringBuffer m_string_buffer; - static const int m_max_levels = 1024; - util::Buffer m_path; - - REALM_NORETURN void parser_error() const; - - template - void parse_one(InstructionHandler&); - bool has_next() noexcept; - - template - T read_int(); - - void read_bytes(char* data, size_t size); - BinaryData read_buffer(util::StringBuffer&, size_t size); - - float read_float(); - double read_double(); - - StringData read_string(util::StringBuffer&); - BinaryData read_binary(util::StringBuffer&); - Timestamp read_timestamp(); - void read_mixed(Mixed*); - - // Advance m_input_begin and m_input_end to reflect the next block of instructions - // Returns false if no more input was available - bool next_input_buffer(); - - // return true if input was available - bool read_char(char&); // throws - - bool is_valid_data_type(int type); - bool is_valid_link_type(int type); -}; - - -class TransactLogParser::BadTransactLog: public std::exception { -public: - const char* what() const noexcept override - { - return "Bad transaction log"; - } -}; - - - -/// Implementation: - -inline void TransactLogBufferStream::transact_log_reserve(size_t n, char** inout_new_begin, char** out_new_end) -{ - char* data = m_buffer.data(); - REALM_ASSERT(*inout_new_begin >= data); - REALM_ASSERT(*inout_new_begin <= (data + m_buffer.size())); - size_t size = *inout_new_begin - data; - m_buffer.reserve_extra(size, n); - data = m_buffer.data(); // May have changed - *inout_new_begin = data + size; - *out_new_end = data + m_buffer.size(); -} - -inline void TransactLogBufferStream::transact_log_append(const char* data, size_t size, char** out_new_begin, char** out_new_end) -{ - transact_log_reserve(size, out_new_begin, out_new_end); - *out_new_begin = std::copy(data, data + size, *out_new_begin); -} - -inline const char* TransactLogBufferStream::transact_log_data() const -{ - return m_buffer.data(); -} - -inline TransactLogEncoder::TransactLogEncoder(TransactLogStream& stream): - m_stream(stream) -{ -} - -inline void TransactLogEncoder::set_buffer(char* free_begin, char* free_end) -{ - REALM_ASSERT(free_begin <= free_end); - m_transact_log_free_begin = free_begin; - m_transact_log_free_end = free_end; -} - -inline void TransactLogConvenientEncoder::reset_selection_caches() noexcept -{ - unselect_all(); -} - -inline char* TransactLogEncoder::reserve(size_t n) -{ - if (size_t(m_transact_log_free_end - m_transact_log_free_begin) < n) { - m_stream.transact_log_reserve(n, &m_transact_log_free_begin, &m_transact_log_free_end); - } - return m_transact_log_free_begin; -} - -inline void TransactLogEncoder::advance(char* ptr) noexcept -{ - REALM_ASSERT_DEBUG(m_transact_log_free_begin <= ptr); - REALM_ASSERT_DEBUG(ptr <= m_transact_log_free_end); - m_transact_log_free_begin = ptr; -} - - -// The integer encoding is platform independent. Also, it does not -// depend on the type of the specified integer. Integers of any type -// can be encoded as long as the specified buffer is large enough (see -// below). The decoding does not have to use the same type. Decoding -// will fail if, and only if the encoded value falls outside the range -// of the requested destination type. -// -// The encoding uses one or more bytes. It never uses more than 8 bits -// per byte. The last byte in the sequence is the first one that has -// its 8th bit set to zero. -// -// Consider a particular non-negative value V. Let W be the number of -// bits needed to encode V using the trivial binary encoding of -// integers. The total number of bytes produced is then -// ceil((W+1)/7). The first byte holds the 7 least significant bits of -// V. The last byte holds at most 6 bits of V including the most -// significant one. The value of the first bit of the last byte is -// always 2**((N-1)*7) where N is the total number of bytes. -// -// A negative value W is encoded by setting the sign bit to one and -// then encoding the positive result of -(W+1) as described above. The -// advantage of this representation is that it converts small negative -// values to small positive values which require a small number of -// bytes. This would not have been true for 2's complements -// representation, for example. The sign bit is always stored as the -// 7th bit of the last byte. -// -// value bits value + sign max bytes -// -------------------------------------------------- -// int8_t 7 8 2 -// uint8_t 8 9 2 -// int16_t 15 16 3 -// uint16_t 16 17 3 -// int32_t 31 32 5 -// uint32_t 32 33 5 -// int64_t 63 64 10 -// uint64_t 64 65 10 -// -template -char* TransactLogEncoder::encode_int(char* ptr, T value) -{ - static_assert(std::numeric_limits::is_integer, "Integer required"); - bool negative = util::is_negative(value); - if (negative) { - // The following conversion is guaranteed by C++11 to never - // overflow (contrast this with "-value" which indeed could - // overflow). See C99+TC3 section 6.2.6.2 paragraph 2. - value = -(value + 1); - } - // At this point 'value' is always a positive number. Also, small - // negative numbers have been converted to small positive numbers. - REALM_ASSERT(!util::is_negative(value)); - // One sign bit plus number of value bits - const int num_bits = 1 + std::numeric_limits::digits; - // Only the first 7 bits are available per byte. Had it not been - // for the fact that maximum guaranteed bit width of a char is 8, - // this value could have been increased to 15 (one less than the - // number of value bits in 'unsigned'). - const int bits_per_byte = 7; - const int max_bytes = (num_bits + (bits_per_byte-1)) / bits_per_byte; - static_assert(max_bytes <= max_enc_bytes_per_int, "Bad max_enc_bytes_per_int"); - // An explicit constant maximum number of iterations is specified - // in the hope that it will help the optimizer (to do loop - // unrolling, for example). - typedef unsigned char uchar; - for (int i=0; i> (bits_per_byte-1) == 0) - break; - *reinterpret_cast(ptr) = - uchar((1U<>= bits_per_byte; - } - *reinterpret_cast(ptr) = - uchar(negative ? (1U<<(bits_per_byte-1)) | unsigned(value) : value); - return ++ptr; -} - -inline char* TransactLogEncoder::encode_float(char* ptr, float value) -{ - static_assert(std::numeric_limits::is_iec559 && - sizeof (float) * std::numeric_limits::digits == 32, - "Unsupported 'float' representation"); - const char* val_ptr = reinterpret_cast(&value); - return std::copy(val_ptr, val_ptr + sizeof value, ptr); -} - -inline char* TransactLogEncoder::encode_double(char* ptr, double value) -{ - static_assert(std::numeric_limits::is_iec559 && - sizeof (double) * std::numeric_limits::digits == 64, - "Unsupported 'double' representation"); - const char* val_ptr = reinterpret_cast(&value); - return std::copy(val_ptr, val_ptr + sizeof value, ptr); -} - -template -struct TransactLogEncoder::EncodeNumber { - void operator()(T value, char** ptr) - { - auto value_2 = value + 0; // Perform integral promotion - *ptr = encode_int(*ptr, value_2); - } -}; -template<> -struct TransactLogEncoder::EncodeNumber { - void operator()(float value, char** ptr) - { - *ptr = encode_float(*ptr, value); - } -}; -template<> -struct TransactLogEncoder::EncodeNumber { - void operator()(double value, char** ptr) - { - *ptr = encode_double(*ptr, value); - } -}; - -template -void TransactLogEncoder::append_simple_instr(Instruction instr, const util::Tuple& numbers) -{ - size_t num_numbers = util::TypeCount::value; - size_t max_required_bytes = 1 + max_enc_bytes_per_num * num_numbers; - char* ptr = reserve(max_required_bytes); // Throws - *ptr++ = char(instr); - util::for_each(numbers, &ptr); - advance(ptr); -} - -template -void TransactLogEncoder::append_string_instr(Instruction instr, const util::Tuple& numbers, - StringData string) -{ - size_t num_numbers = util::TypeCount::value + 1; - size_t max_required_bytes = 1 + max_enc_bytes_per_num * num_numbers + string.size(); - char* ptr = reserve(max_required_bytes); // Throws - *ptr++ = char(instr); - util::for_each(append(numbers, string.size()), &ptr); - ptr = std::copy(string.data(), string.data() + string.size(), ptr); - advance(ptr); -} - -template -void TransactLogEncoder::append_mixed_instr(Instruction instr, const util::Tuple& numbers, - const Mixed& value) -{ - DataType type = value.get_type(); - auto numbers_2 = append(numbers, type); - switch (type) { - case type_Int: - append_simple_instr(instr, append(numbers_2, value.get_int())); // Throws - return; - case type_Bool: - append_simple_instr(instr, append(numbers_2, value.get_bool())); // Throws - return; - case type_Float: - append_simple_instr(instr, append(numbers_2, value.get_float())); // Throws - return; - case type_Double: - append_simple_instr(instr, append(numbers_2, value.get_double())); // Throws - return; - case type_OldDateTime: { - auto value_2 = value.get_olddatetime().get_olddatetime(); - append_simple_instr(instr, append(numbers_2, value_2)); // Throws - return; - } - case type_String: { - append_string_instr(instr, numbers_2, value.get_string()); // Throws - return; - } - case type_Binary: { - BinaryData value_2 = value.get_binary(); - StringData value_3(value_2.data(), value_2.size()); - append_string_instr(instr, numbers_2, value_3); // Throws - return; - } - case type_Timestamp: { - Timestamp ts= value.get_timestamp(); - int64_t seconds = ts.get_seconds(); - int32_t nano_seconds = ts.get_nanoseconds(); - auto numbers_3 = append(numbers_2, seconds); - append_simple_instr(instr, append(numbers_3, nano_seconds)); // Throws - return; - } - case type_Table: - append_simple_instr(instr, numbers_2); // Throws - return; - case type_Mixed: - // Mixed in mixed is not possible - REALM_ASSERT_RELEASE(false); - case type_Link: - case type_LinkList: - // FIXME: Need to handle new link types here. - REALM_ASSERT_RELEASE(false); - } - REALM_ASSERT_RELEASE(false); -} - -template -bool TransactLogEncoder::append_variable_size_instr(Instruction instr, - const util::Tuple& numbers, - I var_begin, I var_end) -{ - // Space is reserved in chunks to avoid excessive over allocation. -#ifdef REALM_DEBUG - const int max_numbers_per_chunk = 2; // Increase the chance of chunking in debug mode -#else - const int max_numbers_per_chunk = 8; -#endif - size_t num_numbers = util::TypeCount::value + max_numbers_per_chunk; - size_t max_required_bytes = 1 + max_enc_bytes_per_num * num_numbers; - char* ptr = reserve(max_required_bytes); // Throws - *ptr++ = char(instr); - util::for_each(numbers, &ptr); - I i = var_begin; - while (var_end - i > max_numbers_per_chunk) { - for (int j = 0; j < max_numbers_per_chunk; ++j) - ptr = encode_int(ptr, *i++); - advance(ptr); - size_t max_required_bytes_2 = max_enc_bytes_per_num * max_numbers_per_chunk; - ptr = reserve(max_required_bytes_2); // Throws - } - while (i != var_end) - ptr = encode_int(ptr, *i++); - advance(ptr); - return true; -} - -inline void TransactLogConvenientEncoder::unselect_all() noexcept -{ - m_selected_table = nullptr; - m_selected_spec = nullptr; - // no race with on_link_list_destroyed since both are setting to nullptr - m_selected_link_list = nullptr; -} - -inline void TransactLogConvenientEncoder::select_table(const Table* table) -{ - if (table != m_selected_table) - do_select_table(table); // Throws - m_selected_spec = nullptr; - // no race with on_link_list_destroyed since both are setting to nullptr - m_selected_link_list = nullptr; -} - -inline void TransactLogConvenientEncoder::select_desc(const Descriptor& desc) -{ - typedef _impl::DescriptorFriend df; - if (&df::get_spec(desc) != m_selected_spec) - do_select_desc(desc); // Throws - // no race with on_link_list_destroyed since both are setting to nullptr - m_selected_link_list = nullptr; -} - -inline void TransactLogConvenientEncoder::select_link_list(const LinkView& list) -{ - // A race between this and a call to on_link_list_destroyed() must - // end up with m_selected_link_list pointing to the list argument given - // here. We assume that the list given to on_link_list_destroyed() can - // *never* be the same as the list argument given here. We resolve the - // race by a) always updating m_selected_link_list in do_select_link_list() - // and b) only atomically and conditionally updating it in - // on_link_list_destroyed(). - if (&list != m_selected_link_list) { - do_select_link_list(list); // Throws - } - m_selected_spec = nullptr; -} - - -inline bool TransactLogEncoder::insert_group_level_table(size_t table_ndx, size_t prior_num_tables, - StringData name) -{ - append_string_instr(instr_InsertGroupLevelTable, util::tuple(table_ndx, prior_num_tables), - name); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::insert_group_level_table(size_t table_ndx, - size_t prior_num_tables, - StringData name) -{ - unselect_all(); - m_encoder.insert_group_level_table(table_ndx, prior_num_tables, name); // Throws -} - -inline bool TransactLogEncoder::erase_group_level_table(size_t table_ndx, size_t prior_num_tables) -{ - append_simple_instr(instr_EraseGroupLevelTable, util::tuple(table_ndx, prior_num_tables)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::erase_group_level_table(size_t table_ndx, size_t prior_num_tables) -{ - unselect_all(); - m_encoder.erase_group_level_table(table_ndx, prior_num_tables); // Throws -} - -inline bool TransactLogEncoder::rename_group_level_table(size_t table_ndx, StringData new_name) -{ - append_string_instr(instr_RenameGroupLevelTable, util::tuple(table_ndx), new_name); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::rename_group_level_table(size_t table_ndx, - StringData new_name) -{ - unselect_all(); - m_encoder.rename_group_level_table(table_ndx, new_name); // Throws -} - -inline bool TransactLogEncoder::move_group_level_table(size_t from_table_ndx, size_t to_table_ndx) -{ - REALM_ASSERT(from_table_ndx != to_table_ndx); - append_simple_instr(instr_MoveGroupLevelTable, util::tuple(from_table_ndx, to_table_ndx)); - return true; -} - -inline void TransactLogConvenientEncoder::move_group_level_table(size_t from_table_ndx, size_t to_table_ndx) -{ - unselect_all(); - m_encoder.move_group_level_table(from_table_ndx, to_table_ndx); -} - -inline bool TransactLogEncoder::insert_column(size_t col_ndx, DataType type, StringData name, - bool nullable) -{ - Instruction instr = (nullable ? instr_InsertNullableColumn : instr_InsertColumn); - append_string_instr(instr, util::tuple(col_ndx, type), name); // Throws - return true; -} - -inline bool TransactLogEncoder::insert_link_column(size_t col_ndx, DataType type, StringData name, - size_t link_target_table_ndx, - size_t backlink_col_ndx) -{ - REALM_ASSERT(_impl::TableFriend::is_link_type(ColumnType(type))); - append_string_instr(instr_InsertLinkColumn, util::tuple(col_ndx, type, link_target_table_ndx, - backlink_col_ndx), name); // Throws - return true; -} - - -inline void TransactLogConvenientEncoder::insert_column(const Descriptor& desc, size_t col_ndx, - DataType type, - StringData name, - LinkTargetInfo& link, - bool nullable) -{ - select_desc(desc); // Throws - if (link.is_valid()) { - typedef _impl::TableFriend tf; - typedef _impl::DescriptorFriend df; - size_t target_table_ndx = link.m_target_table->get_index_in_group(); - const Table& origin_table = df::get_root_table(desc); - REALM_ASSERT(origin_table.is_group_level()); - const Spec& target_spec = tf::get_spec(*(link.m_target_table)); - size_t origin_table_ndx = origin_table.get_index_in_group(); - size_t backlink_col_ndx = target_spec.find_backlink_column(origin_table_ndx, col_ndx); - REALM_ASSERT_3(backlink_col_ndx, ==, link.m_backlink_col_ndx); - m_encoder.insert_link_column(col_ndx, type, name, target_table_ndx, backlink_col_ndx); // Throws - } - else { - m_encoder.insert_column(col_ndx, type, name, nullable); // Throws - } -} - -inline bool TransactLogEncoder::erase_column(size_t col_ndx) -{ - append_simple_instr(instr_EraseColumn, util::tuple(col_ndx)); // Throws - return true; -} - -inline bool TransactLogEncoder::erase_link_column(size_t col_ndx, size_t link_target_table_ndx, - size_t backlink_col_ndx) -{ - append_simple_instr(instr_EraseLinkColumn, util::tuple(col_ndx, link_target_table_ndx, - backlink_col_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::erase_column(const Descriptor& desc, size_t col_ndx) -{ - select_desc(desc); // Throws - - DataType type = desc.get_column_type(col_ndx); - typedef _impl::TableFriend tf; - if (!tf::is_link_type(ColumnType(type))) { - m_encoder.erase_column(col_ndx); // Throws - } - else { // it's a link column: - REALM_ASSERT(desc.is_root()); - typedef _impl::DescriptorFriend df; - const Table& origin_table = df::get_root_table(desc); - REALM_ASSERT(origin_table.is_group_level()); - const Table& target_table = *tf::get_link_target_table_accessor(origin_table, col_ndx); - size_t target_table_ndx = target_table.get_index_in_group(); - const Spec& target_spec = tf::get_spec(target_table); - size_t origin_table_ndx = origin_table.get_index_in_group(); - size_t backlink_col_ndx = target_spec.find_backlink_column(origin_table_ndx, col_ndx); - m_encoder.erase_link_column(col_ndx, target_table_ndx, backlink_col_ndx); // Throws - } -} - -inline bool TransactLogEncoder::rename_column(size_t col_ndx, StringData new_name) -{ - append_string_instr(instr_RenameColumn, util::tuple(col_ndx), new_name); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::rename_column(const Descriptor& desc, size_t col_ndx, - StringData name) -{ - select_desc(desc); // Throws - m_encoder.rename_column(col_ndx, name); // Throws -} - - -inline bool TransactLogEncoder::move_column(size_t from, size_t to) -{ - append_simple_instr(instr_MoveColumn, util::tuple(from, to)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::move_column(const Descriptor& desc, size_t from, size_t to) -{ - select_desc(desc); // Throws - m_encoder.move_column(from, to); -} - - -inline bool TransactLogEncoder::set_int(size_t col_ndx, size_t ndx, int_fast64_t value) -{ - append_simple_instr(instr_SetInt, util::tuple(col_ndx, ndx, value)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_int(const Table* t, size_t col_ndx, - size_t ndx, int_fast64_t value) -{ - select_table(t); // Throws - m_encoder.set_int(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_int_unique(size_t col_ndx, size_t ndx, size_t prior_num_rows, int_fast64_t value) -{ - append_simple_instr(instr_SetIntUnique, util::tuple(col_ndx, ndx, prior_num_rows, value)); - return true; -} - -inline void TransactLogConvenientEncoder::set_int_unique(const Table* t, size_t col_ndx, - size_t ndx, int_fast64_t value) -{ - select_table(t); // Throws - m_encoder.set_int_unique(col_ndx, ndx, t->size(), value); // Throws -} - -inline bool TransactLogEncoder::set_bool(size_t col_ndx, size_t ndx, bool value) -{ - append_simple_instr(instr_SetBool, util::tuple(col_ndx, ndx, value)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_bool(const Table* t, size_t col_ndx, - size_t ndx, bool value) -{ - select_table(t); // Throws - m_encoder.set_bool(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_float(size_t col_ndx, size_t ndx, float value) -{ - append_simple_instr(instr_SetFloat, util::tuple(col_ndx, ndx, value)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_float(const Table* t, size_t col_ndx, - size_t ndx, float value) -{ - select_table(t); // Throws - m_encoder.set_float(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_double(size_t col_ndx, size_t ndx, double value) -{ - append_simple_instr(instr_SetDouble, util::tuple(col_ndx, ndx, value)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_double(const Table* t, size_t col_ndx, - size_t ndx, double value) -{ - select_table(t); // Throws - m_encoder.set_double(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_string(size_t col_ndx, size_t ndx, StringData value) -{ - if (value.is_null()) { - set_null(col_ndx, ndx); // Throws - } - else { - append_string_instr(instr_SetString, util::tuple(col_ndx, ndx), value); // Throws - } - return true; -} - -inline void TransactLogConvenientEncoder::set_string(const Table* t, size_t col_ndx, - size_t ndx, StringData value) -{ - select_table(t); // Throws - m_encoder.set_string(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_string_unique(size_t col_ndx, size_t ndx, size_t prior_num_rows, StringData value) -{ - if (value.is_null()) { - // FIXME: This loses SetUnique information. - set_null(col_ndx, ndx); // Throws - } - else { - append_string_instr(instr_SetStringUnique, util::tuple(col_ndx, ndx, prior_num_rows), value); // Throws - } - return true; -} - -inline void TransactLogConvenientEncoder::set_string_unique(const Table* t, size_t col_ndx, - size_t ndx, StringData value) -{ - select_table(t); // Throws - m_encoder.set_string_unique(col_ndx, ndx, t->size(), value); // Throws -} - -inline bool TransactLogEncoder::set_binary(size_t col_ndx, size_t row_ndx, BinaryData value) -{ - if (value.is_null()) { - set_null(col_ndx, row_ndx); // Throws - } - else { - StringData value_2(value.data(), value.size()); - append_string_instr(instr_SetBinary, util::tuple(col_ndx, row_ndx), value_2); // Throws - } - return true; -} - -inline void TransactLogConvenientEncoder::set_binary(const Table* t, size_t col_ndx, - size_t ndx, BinaryData value) -{ - select_table(t); // Throws - m_encoder.set_binary(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_olddatetime(size_t col_ndx, size_t ndx, OldDateTime value) -{ - append_simple_instr(instr_SetOldDateTime, util::tuple(col_ndx, ndx, - value.get_olddatetime())); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_olddatetime(const Table* t, size_t col_ndx, - size_t ndx, OldDateTime value) -{ - select_table(t); // Throws - m_encoder.set_olddatetime(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_timestamp(size_t col_ndx, size_t ndx, Timestamp value) -{ - append_simple_instr(instr_SetTimestamp, util::tuple(col_ndx, ndx, - value.get_seconds(), value.get_nanoseconds())); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_timestamp(const Table* t, size_t col_ndx, size_t ndx, Timestamp value) -{ - select_table(t); // Throws - m_encoder.set_timestamp(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_table(size_t col_ndx, size_t ndx) -{ - append_simple_instr(instr_SetTable, util::tuple(col_ndx, ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_table(const Table* t, size_t col_ndx, - size_t ndx) -{ - select_table(t); // Throws - m_encoder.set_table(col_ndx, ndx); // Throws -} - -inline bool TransactLogEncoder::set_mixed(size_t col_ndx, size_t ndx, const Mixed& value) -{ - append_mixed_instr(instr_SetMixed, util::tuple(col_ndx, ndx), value); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_mixed(const Table* t, size_t col_ndx, - size_t ndx, const Mixed& value) -{ - select_table(t); // Throws - m_encoder.set_mixed(col_ndx, ndx, value); // Throws -} - -inline bool TransactLogEncoder::set_link(size_t col_ndx, size_t ndx, - size_t value, size_t target_group_level_ndx) -{ - // Map `realm::npos` to zero, and `n` to `n+1`, where `n` is a target row - // index. - size_t value_2 = size_t(1) + value; - append_simple_instr(instr_SetLink, util::tuple(col_ndx, ndx, value_2, - target_group_level_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_link(const Table* t, size_t col_ndx, - size_t ndx, size_t value) -{ - select_table(t); // Throws - size_t target_group_level_ndx = t->get_descriptor()->get_column_link_target(col_ndx); - m_encoder.set_link(col_ndx, ndx, value, target_group_level_ndx); // Throws -} - -inline bool TransactLogEncoder::set_null(size_t col_ndx, size_t ndx) -{ - append_simple_instr(instr_SetNull, util::tuple(col_ndx, ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_null(const Table* t, size_t col_ndx, - size_t row_ndx) -{ - select_table(t); // Throws - m_encoder.set_null(col_ndx, row_ndx); // Throws -} - -inline bool TransactLogEncoder::nullify_link(size_t col_ndx, size_t ndx, - size_t target_group_level_ndx) -{ - append_simple_instr(instr_NullifyLink, util::tuple(col_ndx, ndx, - target_group_level_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::nullify_link(const Table* t, size_t col_ndx, size_t ndx) -{ - select_table(t); // Throws - size_t target_group_level_ndx = t->get_descriptor()->get_column_link_target(col_ndx); - m_encoder.nullify_link(col_ndx, ndx, target_group_level_ndx); // Throws -} - -inline bool TransactLogEncoder::insert_substring(size_t col_ndx, size_t row_ndx, size_t pos, - StringData value) -{ - append_string_instr(instr_InsertSubstring, util::tuple(col_ndx, row_ndx, pos), - value); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::insert_substring(const Table* t, size_t col_ndx, - size_t row_ndx, size_t pos, - StringData value) -{ - if (value.size() > 0) { - select_table(t); // Throws - m_encoder.insert_substring(col_ndx, row_ndx, pos, value); // Throws - } -} - -inline bool TransactLogEncoder::erase_substring(size_t col_ndx, size_t row_ndx, size_t pos, - size_t size) -{ - append_simple_instr(instr_EraseFromString, util::tuple(col_ndx, row_ndx, pos, size)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::erase_substring(const Table* t, size_t col_ndx, - size_t row_ndx, size_t pos, - size_t size) -{ - if (size > 0) { - select_table(t); // Throws - m_encoder.erase_substring(col_ndx, row_ndx, pos, size); // Throws - } -} - -inline bool TransactLogEncoder::insert_empty_rows(size_t row_ndx, size_t num_rows_to_insert, - size_t prior_num_rows, bool unordered) -{ - append_simple_instr(instr_InsertEmptyRows, util::tuple(row_ndx, num_rows_to_insert, - prior_num_rows, unordered)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::insert_empty_rows(const Table* t, size_t row_ndx, - size_t num_rows_to_insert, - size_t prior_num_rows) -{ - select_table(t); // Throws - bool unordered = false; - m_encoder.insert_empty_rows(row_ndx, num_rows_to_insert, prior_num_rows, - unordered); // Throws -} - -inline bool TransactLogEncoder::erase_rows(size_t row_ndx, size_t num_rows_to_erase, - size_t prior_num_rows, bool unordered) -{ - append_simple_instr(instr_EraseRows, util::tuple(row_ndx, num_rows_to_erase, prior_num_rows, - unordered)); // Throws - return true; -} - - -inline void TransactLogConvenientEncoder::erase_rows(const Table* t, size_t row_ndx, - size_t num_rows_to_erase, - size_t prior_num_rows, - bool is_move_last_over) -{ - select_table(t); // Throws - bool unordered = is_move_last_over; - m_encoder.erase_rows(row_ndx, num_rows_to_erase, prior_num_rows, unordered); // Throws -} - -inline bool TransactLogEncoder::swap_rows(size_t row_ndx_1, size_t row_ndx_2) -{ - append_simple_instr(instr_SwapRows, util::tuple(row_ndx_1, row_ndx_2)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::swap_rows(const Table* t, size_t row_ndx_1, size_t row_ndx_2) -{ - REALM_ASSERT(row_ndx_1 < row_ndx_2); - select_table(t); // Throws - m_encoder.swap_rows(row_ndx_1, row_ndx_2); -} - -inline bool TransactLogEncoder::change_link_targets(size_t row_ndx, size_t new_row_ndx) -{ - append_simple_instr(instr_ChangeLinkTargets, util::tuple(row_ndx, new_row_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::change_link_targets(const Table* t, size_t row_ndx, - size_t new_row_ndx) -{ - select_table(t); // Throws - m_encoder.change_link_targets(row_ndx, new_row_ndx); -} - -inline bool TransactLogEncoder::add_search_index(size_t col_ndx) -{ - append_simple_instr(instr_AddSearchIndex, util::tuple(col_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::add_search_index(const Table* t, size_t col_ndx) -{ - select_table(t); // Throws - m_encoder.add_search_index(col_ndx); // Throws -} - - -inline bool TransactLogEncoder::remove_search_index(size_t col_ndx) -{ - append_simple_instr(instr_RemoveSearchIndex, util::tuple(col_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::remove_search_index(const Table* t, size_t col_ndx) -{ - select_table(t); // Throws - m_encoder.remove_search_index(col_ndx); // Throws -} - -inline bool TransactLogEncoder::set_link_type(size_t col_ndx, LinkType link_type) -{ - append_simple_instr(instr_SetLinkType, util::tuple(col_ndx, int(link_type))); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_link_type(const Table* t, size_t col_ndx, LinkType link_type) -{ - select_table(t); // Throws - m_encoder.set_link_type(col_ndx, link_type); // Throws -} - - -inline bool TransactLogEncoder::clear_table() -{ - append_simple_instr(instr_ClearTable, util::tuple()); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::clear_table(const Table* t) -{ - select_table(t); // Throws - m_encoder.clear_table(); // Throws -} - -inline bool TransactLogEncoder::optimize_table() -{ - append_simple_instr(instr_OptimizeTable, util::tuple()); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::optimize_table(const Table* t) -{ - select_table(t); // Throws - m_encoder.optimize_table(); // Throws -} - -inline bool TransactLogEncoder::link_list_set(size_t link_ndx, size_t value) -{ - append_simple_instr(instr_LinkListSet, util::tuple(link_ndx, value)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::link_list_set(const LinkView& list, size_t link_ndx, - size_t value) -{ - select_link_list(list); // Throws - m_encoder.link_list_set(link_ndx, value); // Throws -} - -inline bool TransactLogEncoder::link_list_nullify(size_t link_ndx) -{ - append_simple_instr(instr_LinkListNullify, util::tuple(link_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::link_list_nullify(const LinkView& list, size_t link_ndx) -{ - select_link_list(list); // Throws - m_encoder.link_list_nullify(link_ndx); // Throws -} - -inline bool TransactLogEncoder::link_list_set_all(const IntegerColumn& values) -{ - struct iter { - iter(const IntegerColumn& values, size_t ndx): m_values(&values), m_ndx(ndx) {} - const IntegerColumn* m_values; - size_t m_ndx; - bool operator==(const iter& i) const { return m_ndx == i.m_ndx; } - bool operator!=(const iter& i) const { return m_ndx != i.m_ndx; } - size_t operator-(const iter& i) const { return m_ndx - i.m_ndx; } - int_fast64_t operator*() const { return m_values->get(m_ndx); } - iter& operator++() { ++m_ndx; return *this; } - iter operator++(int) { iter i = *this; ++m_ndx; return i; } - }; - size_t num_values = values.size(); - append_variable_size_instr(instr_LinkListSetAll, util::tuple(num_values), - iter(values, 0), iter(values, num_values)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::set_link_list(const LinkView& list, const IntegerColumn& values) -{ - select_link_list(list); // Throws - m_encoder.link_list_set_all(values); // Throws -} - -inline bool TransactLogEncoder::link_list_insert(size_t link_ndx, size_t value) -{ - append_simple_instr(instr_LinkListInsert, util::tuple(link_ndx, value)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::link_list_insert(const LinkView& list, size_t link_ndx, - size_t value) -{ - select_link_list(list); // Throws - m_encoder.link_list_insert(link_ndx, value); // Throws -} - -inline bool TransactLogEncoder::link_list_move(size_t from_link_ndx, size_t to_link_ndx) -{ - REALM_ASSERT(from_link_ndx != to_link_ndx); - append_simple_instr(instr_LinkListMove, util::tuple(from_link_ndx, to_link_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::link_list_move(const LinkView& list, size_t from_link_ndx, - size_t to_link_ndx) -{ - select_link_list(list); // Throws - m_encoder.link_list_move(from_link_ndx, to_link_ndx); // Throws -} - -inline bool TransactLogEncoder::link_list_swap(size_t link1_ndx, size_t link2_ndx) -{ - append_simple_instr(instr_LinkListSwap, util::tuple(link1_ndx, link2_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::link_list_swap(const LinkView& list, size_t link1_ndx, - size_t link2_ndx) -{ - select_link_list(list); // Throws - m_encoder.link_list_swap(link1_ndx, link2_ndx); // Throws -} - -inline bool TransactLogEncoder::link_list_erase(size_t link_ndx) -{ - append_simple_instr(instr_LinkListErase, util::tuple(link_ndx)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::link_list_erase(const LinkView& list, size_t link_ndx) -{ - select_link_list(list); // Throws - m_encoder.link_list_erase(link_ndx); // Throws -} - -inline bool TransactLogEncoder::link_list_clear(size_t old_list_size) -{ - append_simple_instr(instr_LinkListClear, util::tuple(old_list_size)); // Throws - return true; -} - -inline void TransactLogConvenientEncoder::on_table_destroyed(const Table* t) noexcept -{ - if (m_selected_table == t) - m_selected_table = nullptr; -} - -inline void TransactLogConvenientEncoder::on_spec_destroyed(const Spec* s) noexcept -{ - if (m_selected_spec == s) - m_selected_spec = nullptr; -} - - -inline void TransactLogConvenientEncoder::on_link_list_destroyed(const LinkView& list) noexcept -{ - const LinkView* lw_ptr = &list; - // atomically clear m_selected_link_list iff it already points to 'list': - // (lw_ptr will be modified if the swap fails, but we ignore that) - m_selected_link_list.compare_exchange_strong(lw_ptr, nullptr, - std::memory_order_relaxed, - std::memory_order_relaxed); -} - - -inline TransactLogParser::TransactLogParser(): - m_input_buffer(1024) // Throws -{ -} - - -inline TransactLogParser::~TransactLogParser() noexcept -{ -} - - -template -void TransactLogParser::parse(NoCopyInputStream& in, InstructionHandler& handler) -{ - m_input = ∈ - m_input_begin = m_input_end = nullptr; - - while (has_next()) - parse_one(handler); // Throws -} - -template -void TransactLogParser::parse(InputStream& in, InstructionHandler& handler) -{ - NoCopyInputStreamAdaptor in_2(in, m_input_buffer.data(), m_input_buffer.size()); - parse(in_2, handler); // Throws -} - -inline bool TransactLogParser::has_next() noexcept -{ - return m_input_begin != m_input_end || next_input_buffer(); -} - -template -void TransactLogParser::parse_one(InstructionHandler& handler) -{ - char instr; - if (!read_char(instr)) - parser_error(); -// std::cerr << "parsing " << util::promote(instr) << " @ " << std::hex << long(m_input_begin) << std::dec << "\n"; - switch (Instruction(instr)) { - case instr_SetInt: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - // FIXME: Don't depend on the existence of int64_t, - // but don't allow values to use more than 64 bits - // either. - int_fast64_t value = read_int(); // Throws - if (!handler.set_int(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetIntUnique: { - std::size_t col_ndx = read_int(); // Throws - std::size_t row_ndx = read_int(); // Throws - std::size_t prior_num_rows = read_int(); // Throws - // FIXME: Don't depend on the existence of int64_t, - // but don't allow values to use more than 64 bits - // either. - int_fast64_t value = read_int(); // Throws - if (!handler.set_int_unique(col_ndx, row_ndx, prior_num_rows, value)) // Throws - parser_error(); - return; - } - case instr_SetBool: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - bool value = read_int(); // Throws - if (!handler.set_bool(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetFloat: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - float value = read_float(); // Throws - if (!handler.set_float(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetDouble: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - double value = read_double(); // Throws - if (!handler.set_double(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetString: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - StringData value = read_string(m_string_buffer); // Throws - if (!handler.set_string(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetStringUnique: { - std::size_t col_ndx = read_int(); // Throws - std::size_t row_ndx = read_int(); // Throws - std::size_t prior_num_rows = read_int(); // Throws - StringData value = read_string(m_string_buffer); // Throws - if (!handler.set_string_unique(col_ndx, row_ndx, prior_num_rows, value)) // Throws - parser_error(); - return; - } - case instr_SetBinary: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - BinaryData value = read_binary(m_string_buffer); // Throws - if (!handler.set_binary(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetOldDateTime: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - int_fast64_t value = read_int(); // Throws - if (!handler.set_olddatetime(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetTimestamp: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - int64_t seconds = read_int(); // Throws - int32_t nanoseconds = read_int(); // Throws - Timestamp value = Timestamp(seconds, nanoseconds); - if (!handler.set_timestamp(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetTable: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - if (!handler.set_table(col_ndx, row_ndx)) // Throws - parser_error(); - return; - } - case instr_SetMixed: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - Mixed value; - read_mixed(&value); // Throws - if (!handler.set_mixed(col_ndx, row_ndx, value)) // Throws - parser_error(); - return; - } - case instr_SetLink: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - size_t value = read_int(); // Throws - // Map zero to realm::npos, and `n+1` to `n`, where `n` is a target row index. - size_t target_row_ndx = size_t(value - 1); - size_t target_group_level_ndx = read_int(); // Throws - if (!handler.set_link(col_ndx, row_ndx, target_row_ndx, target_group_level_ndx)) // Throws - parser_error(); - return; - } - case instr_SetNull: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - if (!handler.set_null(col_ndx, row_ndx)) // Throws - parser_error(); - return; - } - case instr_NullifyLink: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - size_t target_group_level_ndx = read_int(); // Throws - if (!handler.nullify_link(col_ndx, row_ndx, target_group_level_ndx)) // Throws - parser_error(); - return; - } - case instr_InsertSubstring: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - size_t pos = read_int(); // Throws - StringData value = read_string(m_string_buffer); // Throws - if (!handler.insert_substring(col_ndx, row_ndx, pos, value)) // Throws - parser_error(); - return; - } - case instr_EraseFromString: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - size_t pos = read_int(); // Throws - size_t size = read_int(); // Throws - if (!handler.erase_substring(col_ndx, row_ndx, pos, size)) // Throws - parser_error(); - return; - } - case instr_InsertEmptyRows: { - size_t row_ndx = read_int(); // Throws - size_t num_rows_to_insert = read_int(); // Throws - size_t prior_num_rows = read_int(); // Throws - bool unordered = read_int(); // Throws - if (!handler.insert_empty_rows(row_ndx, num_rows_to_insert, prior_num_rows, - unordered)) // Throws - parser_error(); - return; - } - case instr_EraseRows: { - size_t row_ndx = read_int(); // Throws - size_t num_rows_to_erase = read_int(); // Throws - size_t prior_num_rows = read_int(); // Throws - bool unordered = read_int(); // Throws - if (!handler.erase_rows(row_ndx, num_rows_to_erase, prior_num_rows, - unordered)) // Throws - parser_error(); - return; - } - case instr_SwapRows: { - size_t row_ndx_1 = read_int(); // Throws - size_t row_ndx_2 = read_int(); // Throws - if (!handler.swap_rows(row_ndx_1, row_ndx_2)) // Throws - parser_error(); - return; - } - case instr_ChangeLinkTargets: { - size_t row_ndx = read_int(); // Throws - size_t new_row_ndx = read_int(); // Throws - if (!handler.change_link_targets(row_ndx, new_row_ndx)) // Throws - parser_error(); - return; - } - case instr_SelectTable: { - int levels = read_int(); // Throws - if (levels < 0 || levels > m_max_levels) - parser_error(); - m_path.reserve(0, 2*levels); // Throws - size_t* path = m_path.data(); - size_t group_level_ndx = read_int(); // Throws - for (int i = 0; i != levels; ++i) { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - path[2*i + 0] = col_ndx; - path[2*i + 1] = row_ndx; - } - if (!handler.select_table(group_level_ndx, levels, path)) // Throws - parser_error(); - return; - } - case instr_ClearTable: { - if (!handler.clear_table()) // Throws - parser_error(); - return; - } - case instr_LinkListSet: { - size_t link_ndx = read_int(); // Throws - size_t value = read_int(); // Throws - if (!handler.link_list_set(link_ndx, value)) // Throws - parser_error(); - return; - } - case instr_LinkListSetAll: { - // todo, log that it's a SetAll we're doing - size_t size = read_int(); // Throws - for (size_t i = 0; i < size; i++) { - size_t link = read_int(); // Throws - if (!handler.link_list_set(i, link)) // Throws - parser_error(); - } - return; - } - case instr_LinkListInsert: { - size_t link_ndx = read_int(); // Throws - size_t value = read_int(); // Throws - if (!handler.link_list_insert(link_ndx, value)) // Throws - parser_error(); - return; - } - case instr_LinkListMove: { - size_t from_link_ndx = read_int(); // Throws - size_t to_link_ndx = read_int(); // Throws - if (!handler.link_list_move(from_link_ndx, to_link_ndx)) // Throws - parser_error(); - return; - } - case instr_LinkListSwap: { - size_t link1_ndx = read_int(); // Throws - size_t link2_ndx = read_int(); // Throws - if (!handler.link_list_swap(link1_ndx, link2_ndx)) // Throws - parser_error(); - return; - } - case instr_LinkListErase: { - size_t link_ndx = read_int(); // Throws - if (!handler.link_list_erase(link_ndx)) // Throws - parser_error(); - return; - } - case instr_LinkListNullify: { - size_t link_ndx = read_int(); // Throws - if (!handler.link_list_nullify(link_ndx)) // Throws - parser_error(); - return; - } - case instr_LinkListClear: { - size_t old_list_size = read_int(); // Throws - if (!handler.link_list_clear(old_list_size)) // Throws - parser_error(); - return; - } - case instr_SelectLinkList: { - size_t col_ndx = read_int(); // Throws - size_t row_ndx = read_int(); // Throws - size_t target_group_level_ndx = read_int(); // Throws - if (!handler.select_link_list(col_ndx, row_ndx, target_group_level_ndx)) // Throws - parser_error(); - return; - } - case instr_AddSearchIndex: { - size_t col_ndx = read_int(); // Throws - if (!handler.add_search_index(col_ndx)) // Throws - parser_error(); - return; - } - case instr_RemoveSearchIndex: { - size_t col_ndx = read_int(); // Throws - if (!handler.remove_search_index(col_ndx)) // Throws - parser_error(); - return; - } - case instr_SetLinkType: { - size_t col_ndx = read_int(); // Throws - int link_type = read_int(); // Throws - if (!is_valid_link_type(link_type)) - parser_error(); - if (!handler.set_link_type(col_ndx, LinkType(link_type))) // Throws - parser_error(); - return; - } - case instr_InsertColumn: - case instr_InsertNullableColumn: { - size_t col_ndx = read_int(); // Throws - int type = read_int(); // Throws - if (!is_valid_data_type(type)) - parser_error(); - if (REALM_UNLIKELY(type == type_Link || type == type_LinkList)) - parser_error(); - StringData name = read_string(m_string_buffer); // Throws - bool nullable = (Instruction(instr) == instr_InsertNullableColumn); - if (REALM_UNLIKELY(nullable && (type == type_Table || type == type_Mixed))) { - // Nullability not supported for Table and Mixed columns. - parser_error(); - } - if (!handler.insert_column(col_ndx, DataType(type), name, nullable)) // Throws - parser_error(); - return; - } - case instr_InsertLinkColumn: { - size_t col_ndx = read_int(); // Throws - int type = read_int(); // Throws - if (!is_valid_data_type(type)) - parser_error(); - if (REALM_UNLIKELY(type != type_Link && type != type_LinkList)) - parser_error(); - size_t link_target_table_ndx = read_int(); // Throws - size_t backlink_col_ndx = read_int(); // Throws - StringData name = read_string(m_string_buffer); // Throws - if (!handler.insert_link_column(col_ndx, DataType(type), name, - link_target_table_ndx, backlink_col_ndx)) // Throws - parser_error(); - return; - } - case instr_EraseColumn: { - size_t col_ndx = read_int(); // Throws - if (!handler.erase_column(col_ndx)) // Throws - parser_error(); - return; - } - case instr_EraseLinkColumn: { - size_t col_ndx = read_int(); // Throws - size_t link_target_table_ndx = read_int(); // Throws - size_t backlink_col_ndx = read_int(); // Throws - if (!handler.erase_link_column(col_ndx, link_target_table_ndx, - backlink_col_ndx)) // Throws - parser_error(); - return; - } - case instr_RenameColumn: { - size_t col_ndx = read_int(); // Throws - StringData name = read_string(m_string_buffer); // Throws - if (!handler.rename_column(col_ndx, name)) // Throws - parser_error(); - return; - } - case instr_MoveColumn: { - size_t col_ndx_1 = read_int(); // Throws - size_t col_ndx_2 = read_int(); // Throws - if (!handler.move_column(col_ndx_1, col_ndx_2)) // Throws - parser_error(); - return; - } - case instr_SelectDescriptor: { - int levels = read_int(); // Throws - if (levels < 0 || levels > m_max_levels) - parser_error(); - m_path.reserve(0, levels); // Throws - size_t* path = m_path.data(); - for (int i = 0; i != levels; ++i) { - size_t col_ndx = read_int(); // Throws - path[i] = col_ndx; - } - if (!handler.select_descriptor(levels, path)) // Throws - parser_error(); - return; - } - case instr_InsertGroupLevelTable: { - size_t table_ndx = read_int(); // Throws - size_t num_tables = read_int(); // Throws - StringData name = read_string(m_string_buffer); // Throws - if (!handler.insert_group_level_table(table_ndx, num_tables, name)) // Throws - parser_error(); - return; - } - case instr_EraseGroupLevelTable: { - size_t table_ndx = read_int(); // Throws - size_t prior_num_tables = read_int(); // Throws - if (!handler.erase_group_level_table(table_ndx, prior_num_tables)) // Throws - parser_error(); - return; - } - case instr_RenameGroupLevelTable: { - size_t table_ndx = read_int(); // Throws - StringData new_name = read_string(m_string_buffer); // Throws - if (!handler.rename_group_level_table(table_ndx, new_name)) // Throws - parser_error(); - return; - } - case instr_MoveGroupLevelTable: { - size_t from_table_ndx = read_int(); // Throws - size_t to_table_ndx = read_int(); // Throws - if (!handler.move_group_level_table(from_table_ndx, to_table_ndx)) // Throws - parser_error(); - return; - } - case instr_OptimizeTable: { - if (!handler.optimize_table()) // Throws - parser_error(); - return; - } - } - - throw BadTransactLog(); -} - - -template -T TransactLogParser::read_int() -{ - T value = 0; - int part = 0; - const int max_bytes = (std::numeric_limits::digits+1+6)/7; - for (int i = 0; i != max_bytes; ++i) { - char c; - if (!read_char(c)) - goto bad_transact_log; - part = static_cast(c); - if (0xFF < part) - goto bad_transact_log; // Only the first 8 bits may be used in each byte - if ((part & 0x80) == 0) { - T p = part & 0x3F; - if (util::int_shift_left_with_overflow_detect(p, i*7)) - goto bad_transact_log; - value |= p; - break; - } - if (i == max_bytes-1) - goto bad_transact_log; // Too many bytes - value |= T(part & 0x7F) << (i*7); - } - if (part & 0x40) { - // The real value is negative. Because 'value' is positive at - // this point, the following negation is guaranteed by C++11 - // to never overflow. See C99+TC3 section 6.2.6.2 paragraph 2. - value = -value; - if (util::int_subtract_with_overflow_detect(value, 1)) - goto bad_transact_log; - } - return value; - - bad_transact_log: - throw BadTransactLog(); -} - - -inline void TransactLogParser::read_bytes(char* data, size_t size) -{ - for (;;) { - const size_t avail = m_input_end - m_input_begin; - if (size <= avail) - break; - const char* to = m_input_begin + avail; - std::copy(m_input_begin, to, data); - if (!next_input_buffer()) - throw BadTransactLog(); - data += avail; - size -= avail; - } - const char* to = m_input_begin + size; - std::copy(m_input_begin, to, data); - m_input_begin = to; -} - - -inline BinaryData TransactLogParser::read_buffer(util::StringBuffer& buf, size_t size) -{ - const size_t avail = m_input_end - m_input_begin; - if (avail >= size) { - m_input_begin += size; - return BinaryData(m_input_begin - size, size); - } - - buf.clear(); - buf.resize(size); // Throws - read_bytes(buf.data(), size); - return BinaryData(buf.data(), size); -} - - -inline float TransactLogParser::read_float() -{ - static_assert(std::numeric_limits::is_iec559 && - sizeof (float) * std::numeric_limits::digits == 32, - "Unsupported 'float' representation"); - float value; - read_bytes(reinterpret_cast(&value), sizeof value); // Throws - return value; -} - - -inline double TransactLogParser::read_double() -{ - static_assert(std::numeric_limits::is_iec559 && - sizeof (double) * std::numeric_limits::digits == 64, - "Unsupported 'double' representation"); - double value; - read_bytes(reinterpret_cast(&value), sizeof value); // Throws - return value; -} - - -inline StringData TransactLogParser::read_string(util::StringBuffer& buf) -{ - size_t size = read_int(); // Throws - - if (size > Table::max_string_size) - parser_error(); - - BinaryData buffer = read_buffer(buf, size); - return StringData{buffer.data(), size}; -} - -inline Timestamp TransactLogParser::read_timestamp() -{ - REALM_ASSERT(false); - return Timestamp(null{}); -} - - -inline BinaryData TransactLogParser::read_binary(util::StringBuffer& buf) -{ - size_t size = read_int(); // Throws - - if (size > Table::max_binary_size) - parser_error(); - - return read_buffer(buf, size); -} - - -inline void TransactLogParser::read_mixed(Mixed* mixed) -{ - DataType type = DataType(read_int()); // Throws - switch (type) { - case type_Int: { - // FIXME: Don't depend on the existence of - // int64_t, but don't allow values to use more - // than 64 bits either. - int_fast64_t value = read_int(); // Throws - mixed->set_int(value); - return; - } - case type_Bool: { - bool value = read_int(); // Throws - mixed->set_bool(value); - return; - } - case type_Float: { - float value = read_float(); // Throws - mixed->set_float(value); - return; - } - case type_Double: { - double value = read_double(); // Throws - mixed->set_double(value); - return; - } - case type_OldDateTime: { - int_fast64_t value = read_int(); // Throws - mixed->set_olddatetime(value); - return; - } - case type_Timestamp: { - Timestamp value = read_timestamp(); // Throws - mixed->set_timestamp(value); - return; - } - case type_String: { - StringData value = read_string(m_string_buffer); // Throws - mixed->set_string(value); - return; - } - case type_Binary: { - BinaryData value = read_binary(m_string_buffer); // Throws - mixed->set_binary(value); - return; - } - case type_Table: { - *mixed = Mixed::subtable_tag(); - return; - } - case type_Mixed: - break; - case type_Link: - case type_LinkList: - // FIXME: Need to handle new link types here - break; - } - throw BadTransactLog(); -} - - -inline bool TransactLogParser::next_input_buffer() -{ - size_t sz = m_input->next_block(m_input_begin, m_input_end); - if (sz == 0) - return false; - else - return true; -} - - -inline bool TransactLogParser::read_char(char& c) -{ - if (m_input_begin == m_input_end && !next_input_buffer()) - return false; - c = *m_input_begin++; - return true; -} - - -inline bool TransactLogParser::is_valid_data_type(int type) -{ - switch (DataType(type)) { - case type_Int: - case type_Bool: - case type_Float: - case type_Double: - case type_String: - case type_Binary: - case type_OldDateTime: - case type_Timestamp: - case type_Table: - case type_Mixed: - case type_Link: - case type_LinkList: - return true; - } - return false; -} - - -inline bool TransactLogParser::is_valid_link_type(int type) -{ - switch (LinkType(type)) { - case link_Strong: - case link_Weak: - return true; - } - return false; -} - - -class TransactReverser { -public: - bool select_table(size_t group_level_ndx, size_t levels, const size_t* path) - { - sync_table(); - m_encoder.select_table(group_level_ndx, levels, path); - m_pending_ts_instr = get_inst(); - return true; - } - - bool select_descriptor(size_t levels, const size_t* path) - { - sync_descriptor(); - m_encoder.select_descriptor(levels, path); - m_pending_ds_instr = get_inst(); - return true; - } - - bool insert_group_level_table(size_t table_ndx, size_t num_tables, StringData) - { - sync_table(); - m_encoder.erase_group_level_table(table_ndx, num_tables + 1); - append_instruction(); - return true; - } - - bool erase_group_level_table(size_t table_ndx, size_t num_tables) - { - sync_table(); - m_encoder.insert_group_level_table(table_ndx, num_tables - 1, ""); - append_instruction(); - return true; - } - - bool rename_group_level_table(size_t, StringData) - { - sync_table(); - return true; - } - - bool move_group_level_table(size_t from_table_ndx, size_t to_table_ndx) - { - sync_table(); - m_encoder.move_group_level_table(to_table_ndx, from_table_ndx); - append_instruction(); - return true; - } - - bool optimize_table() - { - return true; // No-op - } - - bool insert_empty_rows(size_t row_ndx, size_t num_rows_to_insert, size_t prior_num_rows, - bool unordered) - { - size_t num_rows_to_erase = num_rows_to_insert; - size_t prior_num_rows_2 = prior_num_rows + num_rows_to_insert; - m_encoder.erase_rows(row_ndx, num_rows_to_erase, prior_num_rows_2, unordered); // Throws - append_instruction(); - return true; - } - - bool erase_rows(size_t row_ndx, size_t num_rows_to_erase, size_t prior_num_rows, - bool unordered) - { - size_t num_rows_to_insert = num_rows_to_erase; - // Number of rows in table after removal, but before inverse insertion - size_t prior_num_rows_2 = prior_num_rows - num_rows_to_erase; - m_encoder.insert_empty_rows(row_ndx, num_rows_to_insert, prior_num_rows_2, - unordered); // Throws - append_instruction(); - return true; - } - - bool swap_rows(size_t row_ndx_1, size_t row_ndx_2) - { - m_encoder.swap_rows(row_ndx_1, row_ndx_2); - append_instruction(); - return true; - } - - bool change_link_targets(size_t row_ndx, size_t new_row_ndx) - { - static_cast(row_ndx); - static_cast(new_row_ndx); - // There is no instruction we can generate here to change back. - return true; - } - - bool set_int(size_t col_ndx, size_t row_ndx, int_fast64_t value) - { - m_encoder.set_int(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_int_unique(size_t col_ndx, size_t row_ndx, size_t prior_num_rows, int_fast64_t value) - { - m_encoder.set_int_unique(col_ndx, row_ndx, prior_num_rows, value); - append_instruction(); - return true; - } - - bool set_bool(size_t col_ndx, size_t row_ndx, bool value) - { - m_encoder.set_bool(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_float(size_t col_ndx, size_t row_ndx, float value) - { - m_encoder.set_float(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_double(size_t col_ndx, size_t row_ndx, double value) - { - m_encoder.set_double(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_string(size_t col_ndx, size_t row_ndx, StringData value) - { - m_encoder.set_string(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_string_unique(size_t col_ndx, size_t row_ndx, size_t prior_num_rows, StringData value) - { - m_encoder.set_string_unique(col_ndx, row_ndx, prior_num_rows, value); - append_instruction(); - return true; - } - - bool set_binary(size_t col_ndx, size_t row_ndx, BinaryData value) - { - m_encoder.set_binary(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_olddatetime(size_t col_ndx, size_t row_ndx, OldDateTime value) - { - m_encoder.set_olddatetime(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_timestamp(size_t col_ndx, size_t row_ndx, Timestamp value) - { - m_encoder.set_timestamp(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_table(size_t col_ndx, size_t row_ndx) - { - m_encoder.set_table(col_ndx, row_ndx); - append_instruction(); - return true; - } - - bool set_mixed(size_t col_ndx, size_t row_ndx, const Mixed& value) - { - m_encoder.set_mixed(col_ndx, row_ndx, value); - append_instruction(); - return true; - } - - bool set_null(size_t col_ndx, size_t row_ndx) - { - m_encoder.set_null(col_ndx, row_ndx); - append_instruction(); - return true; - } - - bool set_link(size_t col_ndx, size_t row_ndx, size_t value, size_t target_group_level_ndx) - { - m_encoder.set_link(col_ndx, row_ndx, value, target_group_level_ndx); - append_instruction(); - return true; - } - - bool insert_substring(size_t, size_t, size_t, StringData) - { - return true; // No-op - } - - bool erase_substring(size_t, size_t, size_t, size_t) - { - return true; // No-op - } - - bool clear_table() - { - m_encoder.insert_empty_rows(0, 0, 0, true); // FIXME: Explain what is going on here (Finn). - append_instruction(); - return true; - } - - bool add_search_index(size_t) - { - return true; // No-op - } - - bool remove_search_index(size_t) - { - return true; // No-op - } - - bool set_link_type(size_t, LinkType) - { - return true; // No-op - } - - bool insert_link_column(size_t col_idx, DataType, StringData, - size_t target_table_idx, size_t backlink_col_ndx) - { - m_encoder.erase_link_column(col_idx, target_table_idx, backlink_col_ndx); - append_instruction(); - return true; - } - - bool erase_link_column(size_t col_idx, size_t target_table_idx, - size_t backlink_col_idx) - { - DataType type = type_Link; // The real type of the column doesn't matter here, - // but the encoder asserts that it's actually a link type. - m_encoder.insert_link_column(col_idx, type, "", target_table_idx, backlink_col_idx); - append_instruction(); - return true; - } - - bool insert_column(size_t col_idx, DataType, StringData, bool) - { - m_encoder.erase_column(col_idx); - append_instruction(); - return true; - } - - bool erase_column(size_t col_idx) - { - m_encoder.insert_column(col_idx, DataType(), ""); - append_instruction(); - return true; - } - - bool rename_column(size_t, StringData) - { - return true; // No-op - } - - bool move_column(size_t col_ndx_1, size_t col_ndx_2) - { - m_encoder.move_column(col_ndx_2, col_ndx_1); - append_instruction(); - return true; - } - - bool select_link_list(size_t col_ndx, size_t row_ndx, size_t link_target_group_level_ndx) - { - sync_linkview(); - m_encoder.select_link_list(col_ndx, row_ndx, link_target_group_level_ndx); - m_pending_lv_instr = get_inst(); - return true; - } - - bool link_list_set(size_t row, size_t value) - { - m_encoder.link_list_set(row, value); - append_instruction(); - return true; - } - - bool link_list_insert(size_t link_ndx, size_t) - { - m_encoder.link_list_erase(link_ndx); - append_instruction(); - return true; - } - - bool link_list_move(size_t from_link_ndx, size_t to_link_ndx) - { - m_encoder.link_list_move(from_link_ndx, to_link_ndx); - append_instruction(); - return true; - } - - bool link_list_swap(size_t link1_ndx, size_t link2_ndx) - { - m_encoder.link_list_swap(link1_ndx, link2_ndx); - append_instruction(); - return true; - } - - bool link_list_erase(size_t link_ndx) - { - m_encoder.link_list_insert(link_ndx, 0); - append_instruction(); - return true; - } - - bool link_list_clear(size_t old_list_size) - { - // Append in reverse order because the reversed log is itself applied - // in reverse, and this way it generates all back-insertions rather than - // all front-insertions - for (size_t i = old_list_size; i > 0; --i) { - m_encoder.link_list_insert(i - 1, 0); - append_instruction(); - } - return true; - } - - bool nullify_link(size_t col_ndx, size_t row_ndx, size_t target_group_level_ndx) - { - size_t value = 0; - // FIXME: Is zero this right value to pass here, or should - // TransactReverser::nullify_link() also have taken a - // `target_group_level_ndx` argument. - m_encoder.set_link(col_ndx, row_ndx, value, target_group_level_ndx); - append_instruction(); - return true; - } - - bool link_list_nullify(size_t link_ndx) - { - m_encoder.link_list_insert(link_ndx, 0); - append_instruction(); - return true; - } - -private: - _impl::TransactLogBufferStream m_buffer; - _impl::TransactLogEncoder m_encoder{m_buffer}; - struct Instr { size_t begin; size_t end; }; - std::vector m_instructions; - size_t current_instr_start = 0; - Instr m_pending_ts_instr{0, 0}; - Instr m_pending_ds_instr{0, 0}; - Instr m_pending_lv_instr{0, 0}; - - Instr get_inst() - { - Instr instr; - instr.begin = current_instr_start; - current_instr_start = transact_log_size(); - instr.end = current_instr_start; - return instr; - } - - size_t transact_log_size() const - { - REALM_ASSERT_3(m_encoder.write_position(), >=, m_buffer.transact_log_data()); - return m_encoder.write_position() - m_buffer.transact_log_data(); - } - - void append_instruction() - { - m_instructions.push_back(get_inst()); - } - - void append_instruction(Instr instr) - { - m_instructions.push_back(instr); - } - - void sync_select(Instr& pending_instr) - { - if (pending_instr.begin != pending_instr.end) { - append_instruction(pending_instr); - pending_instr = {0, 0}; - } - } - - void sync_linkview() - { - sync_select(m_pending_lv_instr); - } - - void sync_descriptor() - { - sync_linkview(); - sync_select(m_pending_ds_instr); - } - - void sync_table() - { - sync_descriptor(); - sync_select(m_pending_ts_instr); - } - - friend class ReversedNoCopyInputStream; -}; - - -class ReversedNoCopyInputStream: public NoCopyInputStream { -public: - ReversedNoCopyInputStream(TransactReverser& reverser): - m_instr_order(reverser.m_instructions) - { - // push any pending select_table or select_descriptor into the buffer - reverser.sync_table(); - - m_buffer = reverser.m_buffer.transact_log_data(); - m_current = m_instr_order.size(); - } - - size_t next_block(const char*& begin, const char*& end) override - { - if (m_current != 0) { - m_current--; - begin = m_buffer + m_instr_order[m_current].begin; - end = m_buffer + m_instr_order[m_current].end; - return end-begin; - } - return 0; - } - -private: - const char* m_buffer; - std::vector& m_instr_order; - size_t m_current; -}; - -} // namespace _impl -} // namespace realm - -#endif // REALM_IMPL_TRANSACT_LOG_HPP diff --git a/Pods/Realm/include/core/realm/importer.hpp b/Pods/Realm/include/core/realm/importer.hpp deleted file mode 100644 index 16534798..00000000 --- a/Pods/Realm/include/core/realm/importer.hpp +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef REALM_IMPORTER_HPP -#define REALM_IMPORTER_HPP - -/* -Main method: import_csv(). Arguments: ---------------------------------------------------------------------------------------------------------------------- -empty_as_string_flag: - Imports a column that has occurences of empty strings as String type column. Else fields arec onverted to false/0/0.0 - -type_detection_rows: - tells how many rows to read before analyzing data types (to see if numeric rows are really - numeric everywhere, and not strings that happen to just mostly contain numeric characters - - -This library supports: ---------------------------------------------------------------------------------------------------------------------- - * Auto detection of float vs. double, depending on number of significant digits - * Bool types can be case insensitive "true, false, 0, 1, yes, no" - * Newline inside data fields, plus auto detection of non-conforming non-quoted newlines (as in some IBM sample files) - * Realm types String, Integer, Bool, Float and Double - * Auto detection of header and naming of Realm columns accordingly - * double-quoted and non-quoted fields, and these can be mixed arbitrarely - * double-quotes inside data field - * *nix + MacOSv9 + Windows line feed - * Scientific notation of floats/doubles (+1.23e-10) - * Comma in floats - but ONLY if field is double-quoted - * FAST FAST FAST (200 MB/s). Uses state-machine instead of traditional char-by-char loop with state checks inside - - -Problems: ---------------------------------------------------------------------------------------------------------------------- - A csv file does not tell its sheme. So we auto-detect it, based on the first N rows. However if a given column - contains 'false, false, false, hello' and we detect and create Realm table scheme using the first 3 rows, we fail - when we meet 'hello' (this error is handled with a thorough error message) - - Does not support commas in floats unless field is double-quoted - - -Design: ---------------------------------------------------------------------------------------------------------------------- - -import_csv(csv file handle, realm table) - Calls tokenize(csv file handle): - reads payload chunk and returns std::vector> with the right dimensions filled with rows and columns of - the chunk payload - Calls parse_float(), parse_bool(), etc, which tests for type and returns converted values - Calls table.add_empty_row(), table.set_float(), table.set_bool() -*/ - -#include - -// Disk read chunk size. This MUST be large enough to contain at least TWO rows of csv plaintext! It's a good idea -// to set it as low as ever possible (like 32 K) even though it's counter-intuitive with respect to performance. It -// will make the operating system read 32 K from disk and return it, and then read-ahead 32-64 K more after fread() -// has returned. This read-ahead behaviour does NOT occur if we request megabyte-sized chunks (observed on Windows 7 / -// Ubuntu) -static const size_t chunk_size = 32*1024; - -// Number of rows to csv-parse + insert into realm in each iteration. -static const size_t record_chunks = 100; - -// Width of each column when printing them on screen (non-Quiet mode) -const size_t print_width = 25; - -#include -#include - -namespace realm { - -class Importer -{ -public: - Importer(); - size_t import_csv_auto(FILE* file, Table& table, size_t type_detection_rows = 1000, - size_t import_rows = static_cast(-1)); - - size_t import_csv_manual(FILE* file, Table& table, std::vector scheme, std::vector column_names, - size_t skip_first_rows = 0, size_t import_rows = static_cast(-1)); - - bool Quiet; // Quiet mode, only print to screen upon errors - char Separator; // csv delimitor/separator - bool Empty_as_string; // Import columns that have occurences of empty strings as String type column - -private: - size_t import_csv(FILE* file, Table& table, std::vector *scheme, std::vector *column_names, - size_t type_detection_rows, size_t skip_first_rows, size_t import_rows); - template - float parse_float(const char*col, bool* success = nullptr); - template - double parse_double(const char* col, bool* success = nullptr, size_t* significants = nullptr); - template - int64_t parse_integer(const char* col, bool* success = nullptr); - template - bool parse_bool(const char*col, bool* success = nullptr); - std::vector types (std::vector v); - size_t tokenize(std::vector> & payload, size_t records); - std::vector detect_scheme (std::vector> payload, size_t begin, size_t end); - std::vector lowest_common (std::vector types1, std::vector types2); - - char src[2*chunk_size]; // .csv input buffer - size_t m_top; // points at top of buffer - size_t m_curpos; // points at next byte to parse - FILE* m_file; // handle to .csv file - size_t m_fields; // number of fields in each row - size_t m_row; // current row in .csv file, including field-embedded line breaks. Used for err msg only -}; - -} // namespace realm - -#endif // REALM_IMPORTER_HPP diff --git a/Pods/Realm/include/core/realm/index_string.hpp b/Pods/Realm/include/core/realm/index_string.hpp deleted file mode 100644 index a14c6d7b..00000000 --- a/Pods/Realm/include/core/realm/index_string.hpp +++ /dev/null @@ -1,521 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_INDEX_STRING_HPP -#define REALM_INDEX_STRING_HPP - -#include -#include -#include -#include - -#include -#include - - /* -The StringIndex class is used for both type_String and all integral types, such as type_Bool, type_OldDateTime and -type_Int. When used for integral types, the 64-bit integer is simply casted to a string of 8 bytes through a -pretty simple "wrapper layer" in all public methods. - -The StringIndex data structure is like an "inversed" B+ tree where the leafs contain row indexes and the non-leafs -contain 4-byte chunks of payload. Imagine a table with following strings: - - hello, kitty, kitten, foobar, kitty, foobar - -The topmost level of the index tree contains prefixes of the payload strings of length <= 4. The next level contains -prefixes of the remaining parts of the strings. Unnecessary levels of the tree are optimized away; the prefix "foob" -is shared only by rows that are identical ("foobar"), so "ar" is not needed to be stored in the tree. - - hell kitt foob - | /\ | - 0 en y {3, 5} - | \ - {1, 4} 2 - -Each non-leafs consists of two integer arrays of the same length, one containing payload and the other containing -references to the sublevel nodes. - -The leafs can be either a single value or a Column. If the reference in its parent node has its least significant -bit set, then the remaining upper bits specify the row index at which the string is stored. If the bit is clear, -it must be interpreted as a reference to a Column that stores the row indexes at which the string is stored. - -If a Column is used, then all row indexes are guaranteed to be sorted increasingly, which means you an search in it -using our binary search functions such as upper_bound() and lower_bound(). -*/ - -namespace realm { - -class Spec; -class Timestamp; - -class StringIndex { -public: - StringIndex(ColumnBase* target_column, Allocator&); - StringIndex(ref_type, ArrayParent*, size_t ndx_in_parent, ColumnBase* target_column, - bool allow_duplicate_values, Allocator&); - ~StringIndex() noexcept {} - void set_target(ColumnBase* target_column) noexcept; - - // Accessor concept: - Allocator& get_alloc() const noexcept; - void destroy() noexcept; - void detach(); - bool is_attached() const noexcept; - void set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept; - size_t get_ndx_in_parent() const noexcept; - void set_ndx_in_parent(size_t ndx_in_parent) noexcept; - void update_from_parent(size_t old_baseline) noexcept; - void refresh_accessor_tree(size_t, const Spec&); - ref_type get_ref() const noexcept; - - // StringIndex interface: - - static const size_t string_conversion_buffer_size = 12; // 12 is the biggest element size of any non-string/binary Realm type - using StringConversionBuffer = std::array; - - bool is_empty() const; - - template - void insert(size_t row_ndx, T value, size_t num_rows, bool is_append); - template - void insert(size_t row_ndx, util::Optional value, size_t num_rows, bool is_append); - - template - void set(size_t row_ndx, T new_value); - template - void set(size_t row_ndx, util::Optional new_value); - - template - void erase(size_t row_ndx, bool is_last); - - template - size_t find_first(T value) const; - template - void find_all(IntegerColumn& result, T value) const; - template - FindRes find_all(T value, ref_type& ref) const; - template - size_t count(T value) const; - template - void update_ref(T value, size_t old_row_ndx, size_t new_row_ndx); - - void clear(); - - void distinct(IntegerColumn& result) const; - bool has_duplicate_values() const noexcept; - - /// By default, duplicate values are allowed. - void set_allow_duplicate_values(bool) noexcept; - -#ifdef REALM_DEBUG - void verify() const; - void verify_entries(const StringColumn& column) const; - void do_dump_node_structure(std::ostream&, int) const; - void to_dot() const { to_dot(std::cerr); } - void to_dot(std::ostream&, StringData title = StringData()) const; -#endif - - typedef int32_t key_type; - - static key_type create_key(StringData) noexcept; - static key_type create_key(StringData, size_t) noexcept; - -private: - std::unique_ptr m_array; - ColumnBase* m_target_column; - bool m_deny_duplicate_values; - - struct inner_node_tag {}; - StringIndex(inner_node_tag, Allocator&); - - static Array* create_node(Allocator&, bool is_leaf); - - void insert_with_offset(size_t row_ndx, StringData value, size_t offset); - void insert_row_list(size_t ref, size_t offset, StringData value); - key_type get_last_key() const; - - /// Add small signed \a diff to all elements that are greater than, or equal - /// to \a min_row_ndx. - void adjust_row_indexes(size_t min_row_ndx, int diff); - - struct NodeChange { - size_t ref1; - size_t ref2; - enum ChangeType { none, insert_before, insert_after, split } type; - NodeChange(ChangeType t, size_t r1=0, size_t r2=0) : ref1(r1), ref2(r2), type(t) {} - NodeChange() : ref1(0), ref2(0), type(none) {} - }; - - // B-Tree functions - void TreeInsert(size_t row_ndx, key_type, size_t offset, StringData value); - NodeChange do_insert(size_t ndx, key_type, size_t offset, StringData value); - /// Returns true if there is room or it can join existing entries - bool leaf_insert(size_t row_ndx, key_type, size_t offset, StringData value, bool noextend=false); - void node_insert_split(size_t ndx, size_t new_ref); - void node_insert(size_t ndx, size_t ref); - void do_delete(size_t ndx, StringData, size_t offset); - void do_update_ref(StringData value, size_t row_ndx, size_t new_row_ndx, size_t offset); - - StringData get(size_t ndx, StringConversionBuffer& buffer) const; - - void node_add_key(ref_type ref); - -#ifdef REALM_DEBUG - static void dump_node_structure(const Array& node, std::ostream&, int level); - void to_dot_2(std::ostream&, StringData title = StringData()) const; - static void array_to_dot(std::ostream&, const Array&); - static void keys_to_dot(std::ostream&, const Array&, StringData title = StringData()); -#endif -}; - - - - -// Implementation: - -template struct GetIndexData; - -template<> struct GetIndexData { - static StringData get_index_data(const int64_t& value, StringIndex::StringConversionBuffer& buffer) - { - const char* c = reinterpret_cast(&value); - std::copy(c, c + sizeof(int64_t), buffer.data()); - return StringData{buffer.data(), sizeof(int64_t)}; - } -}; - -template<> struct GetIndexData { - static StringData get_index_data(StringData data, StringIndex::StringConversionBuffer&) - { - return data; - } -}; - -template<> struct GetIndexData { - static StringData get_index_data(null, StringIndex::StringConversionBuffer&) - { - return null{}; - } -}; - -template<> struct GetIndexData { - static StringData get_index_data(const Timestamp&, StringIndex::StringConversionBuffer&); -}; - -template struct GetIndexData> { - static StringData get_index_data(const util::Optional& value, StringIndex::StringConversionBuffer& buffer) - { - if (value) - return GetIndexData::get_index_data(*value, buffer); - return null{}; - } -}; - -template<> struct GetIndexData { - static StringData get_index_data(float, StringIndex::StringConversionBuffer&) - { - REALM_ASSERT_RELEASE(false); // LCOV_EXCL_LINE; Index on float not supported - } -}; - -template<> struct GetIndexData { - static StringData get_index_data(double, StringIndex::StringConversionBuffer&) - { - REALM_ASSERT_RELEASE(false); // LCOV_EXCL_LINE; Index on float not supported - } -}; - -template<> struct GetIndexData: GetIndexData {}; - -// to_str() is used by the integer index. The existing StringIndex is re-used for this -// by making IntegerColumn convert its integers to strings by calling to_str(). - -template -inline StringData to_str(T&& value, StringIndex::StringConversionBuffer& buffer) -{ - return GetIndexData::type>::get_index_data(value, buffer); -} - - -inline StringIndex::StringIndex(ColumnBase* target_column, Allocator& alloc): - m_array(create_node(alloc, true)), // Throws - m_target_column(target_column), - m_deny_duplicate_values(false) -{ -} - -inline StringIndex::StringIndex(ref_type ref, ArrayParent* parent, size_t ndx_in_parent, - ColumnBase* target_column, - bool deny_duplicate_values, Allocator& alloc): - m_array(new Array(alloc)), - m_target_column(target_column), - m_deny_duplicate_values(deny_duplicate_values) -{ - REALM_ASSERT_EX(Array::get_context_flag_from_header(alloc.translate(ref)), ref, size_t(alloc.translate(ref))); - m_array->init_from_ref(ref); - set_parent(parent, ndx_in_parent); -} - -inline StringIndex::StringIndex(inner_node_tag, Allocator& alloc): - m_array(create_node(alloc, false)), // Throws - m_target_column(nullptr), - m_deny_duplicate_values(false) -{ -} - -inline void StringIndex::set_allow_duplicate_values(bool allow) noexcept -{ - m_deny_duplicate_values = !allow; -} - -// Byte order of the key is *reversed*, so that for the integer index, the least significant -// byte comes first, so that it fits little-endian machines. That way we can perform fast -// range-lookups and iterate in order, etc, as future features. This, however, makes the same -// features slower for string indexes. Todo, we should reverse the order conditionally, depending -// on the column type. -inline StringIndex::key_type StringIndex::create_key(StringData str) noexcept -{ - key_type key = 0; - - if (str.size() >= 4) goto four; - if (str.size() < 2) { - if (str.size() == 0) goto none; - goto one; - } - if (str.size() == 2) goto two; - goto three; - - // Create 4 byte index key - // (encoded like this to allow literal comparisons - // independently of endianness) - four: - key |= (key_type(static_cast(str[3])) << 0); - three: - key |= (key_type(static_cast(str[2])) << 8); - two: - key |= (key_type(static_cast(str[1])) << 16); - one: - key |= (key_type(static_cast(str[0])) << 24); - none: - return key; -} - -// Index works as follows: All non-NULL values are stored as if they had appended an 'X' character at the end. So -// "foo" is stored as if it was "fooX", and "" (empty string) is stored as "X". And NULLs are stored as empty strings. -inline StringIndex::key_type StringIndex::create_key(StringData str, size_t offset) noexcept -{ - if (str.is_null()) - return 0; - - if (offset > str.size()) - return 0; - - // for very short strings - size_t tail = str.size() - offset; - if (tail <= sizeof(key_type)-1) { - char buf[sizeof(key_type)]; - memset(buf, 0, sizeof(key_type)); - buf[tail] = 'X'; - memcpy(buf, str.data() + offset, tail); - return create_key(StringData(buf, tail + 1)); - } - // else fallback - return create_key(str.substr(offset)); -} - -template -void StringIndex::insert(size_t row_ndx, T value, size_t num_rows, bool is_append) -{ - REALM_ASSERT_3(row_ndx, !=, npos); - - // If the new row is inserted after the last row in the table, we don't need - // to adjust any row indexes. - if (!is_append) { - for (size_t i = 0; i < num_rows; ++i) { - size_t row_ndx_2 = row_ndx + i; - adjust_row_indexes(row_ndx_2, 1); // Throws - } - } - - StringConversionBuffer buffer; - - for (size_t i = 0; i < num_rows; ++i) { - size_t row_ndx_2 = row_ndx + i; - size_t offset = 0; // First key from beginning of string - insert_with_offset(row_ndx_2, to_str(value, buffer), offset); // Throws - } -} - -template -void StringIndex::insert(size_t row_ndx, util::Optional value, size_t num_rows, bool is_append) -{ - if (value) { - insert(row_ndx, *value, num_rows, is_append); - } - else { - insert(row_ndx, null{}, num_rows, is_append); - } -} - -template -void StringIndex::set(size_t row_ndx, T new_value) -{ - StringConversionBuffer buffer; - StringConversionBuffer buffer2; - StringData old_value = get(row_ndx, buffer); - StringData new_value2 = to_str(new_value, buffer2); - - // Note that insert_with_offset() throws UniqueConstraintViolation. - - if (REALM_LIKELY(new_value2 != old_value)) { - size_t offset = 0; // First key from beginning of string - insert_with_offset(row_ndx, new_value2, offset); // Throws - - bool is_last = true; // To avoid updating refs - erase(row_ndx, is_last); // Throws - } -} - -template -void StringIndex::set(size_t row_ndx, util::Optional new_value) -{ - if (new_value) { - set(row_ndx, *new_value); - } - else { - set(row_ndx, null{}); - } -} - -template -void StringIndex::erase(size_t row_ndx, bool is_last) -{ - StringConversionBuffer buffer; - StringData value = get(row_ndx, buffer); - - do_delete(row_ndx, value, 0); - - // Collapse top nodes with single item - while (m_array->is_inner_bptree_node()) { - REALM_ASSERT(m_array->size() > 1); // node cannot be empty - if (m_array->size() > 2) - break; - - ref_type ref = m_array->get_as_ref(1); - m_array->set(1, 1); // avoid destruction of the extracted ref - m_array->destroy_deep(); - m_array->init_from_ref(ref); - m_array->update_parent(); - } - - // If it is last item in column, we don't have to update refs - if (!is_last) - adjust_row_indexes(row_ndx, -1); -} - -template -size_t StringIndex::find_first(T value) const -{ - // Use direct access method - StringConversionBuffer buffer; - return m_array->index_string_find_first(to_str(value, buffer), m_target_column); -} - -template -void StringIndex::find_all(IntegerColumn& result, T value) const -{ - // Use direct access method - StringConversionBuffer buffer; - return m_array->index_string_find_all(result, to_str(value, buffer), m_target_column); -} - -template -FindRes StringIndex::find_all(T value, ref_type& ref) const -{ - // Use direct access method - StringConversionBuffer buffer; - return m_array->index_string_find_all_no_copy(to_str(value, buffer), ref, m_target_column); -} - -template -size_t StringIndex::count(T value) const -{ - // Use direct access method - StringConversionBuffer buffer; - return m_array->index_string_count(to_str(value, buffer), m_target_column); -} - -template -void StringIndex::update_ref(T value, size_t old_row_ndx, size_t new_row_ndx) -{ - StringConversionBuffer buffer; - do_update_ref(to_str(value, buffer), old_row_ndx, new_row_ndx, 0); -} - -inline -void StringIndex::destroy() noexcept -{ - return m_array->destroy_deep(); -} - -inline -bool StringIndex::is_attached() const noexcept -{ - return m_array->is_attached(); -} - -inline -void StringIndex::refresh_accessor_tree(size_t, const Spec&) -{ - m_array->init_from_parent(); -} - -inline -ref_type StringIndex::get_ref() const noexcept -{ - return m_array->get_ref(); -} - -inline -void StringIndex::set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept -{ - m_array->set_parent(parent, ndx_in_parent); -} - -inline -size_t StringIndex::get_ndx_in_parent() const noexcept -{ - return m_array->get_ndx_in_parent(); -} - -inline -void StringIndex::set_ndx_in_parent(size_t ndx_in_parent) noexcept -{ - m_array->set_ndx_in_parent(ndx_in_parent); -} - -inline -void StringIndex::update_from_parent(size_t old_baseline) noexcept -{ - m_array->update_from_parent(old_baseline); -} - -} //namespace realm - -#endif // REALM_INDEX_STRING_HPP diff --git a/Pods/Realm/include/core/realm/lang_bind_helper.hpp b/Pods/Realm/include/core/realm/lang_bind_helper.hpp deleted file mode 100644 index bc2ecc15..00000000 --- a/Pods/Realm/include/core/realm/lang_bind_helper.hpp +++ /dev/null @@ -1,394 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_LANG_BIND_HELPER_HPP -#define REALM_LANG_BIND_HELPER_HPP - -#include - -#include -#include -#include -#include -#include - -#include - -namespace realm { - - -/// These functions are only to be used by language bindings to gain -/// access to certain memebers that are othewise private. -/// -/// \note Applications are not supposed to call any of these functions -/// directly. -/// -/// All of the get_subtable_ptr() functions bind the table accessor pointer -/// before it is returned (bind_table_ptr()). The caller is then responsible for -/// making the corresponding call to unbind_table_ptr(). -class LangBindHelper { -public: - /// Increment the reference counter of the specified table accessor. This is - /// done automatically by all of the functions in this class that return - /// table accessor pointers, but if the binding/application makes a copy of - /// such a pointer, and the copy needs to have an "independent life", then - /// the binding/application must bind that copy using this function. - static void bind_table_ptr(const Table*) noexcept; - - /// Decrement the reference counter of the specified table accessor. The - /// binding/application must call this function for every bound table - /// accessor pointer object, when that pointer object ends its life. - static void unbind_table_ptr(const Table*) noexcept; - - /// Construct a new freestanding table. The table accessor pointer is bound - /// by the callee before it is returned (bind_table_ptr()). - static Table* new_table(); - - /// Construct a new freestanding table as a copy of the specified one. The - /// table accessor pointer is bound by the callee before it is returned - /// (bind_table_ptr()). - static Table* copy_table(const Table&); - - //@{ - - /// These functions are like their namesakes in Group, but these bypass the - /// construction of a smart-pointer object (TableRef). The table accessor - /// pointer is bound by the callee before it is returned (bind_table_ptr()). - - static Table* get_table(Group&, size_t index_in_group); - static const Table* get_table(const Group&, size_t index_in_group); - - static Table* get_table(Group&, StringData name); - static const Table* get_table(const Group&, StringData name); - - static Table* add_table(Group&, StringData name, bool require_unique_name = true); - static Table* get_or_add_table(Group&, StringData name, bool* was_added = nullptr); - - //@} - - static Table* get_subtable_ptr(Table*, size_t column_ndx, size_t row_ndx); - static const Table* get_subtable_ptr(const Table*, size_t column_ndx, - size_t row_ndx); - - // FIXME: This is an 'oddball', do we really need it? If we do, - // please provide a comment that explains why it is needed! - static Table* get_subtable_ptr_during_insert(Table*, size_t col_ndx, - size_t row_ndx); - - static Table* get_subtable_ptr(TableView*, size_t column_ndx, size_t row_ndx); - static const Table* get_subtable_ptr(const TableView*, size_t column_ndx, - size_t row_ndx); - static const Table* get_subtable_ptr(const ConstTableView*, size_t column_ndx, - size_t row_ndx); - - /// Calls parent.set_mixed_subtable(col_ndx, row_ndx, &source). Note - /// that the source table must have a descriptor that is - /// compatible with the target subtable column. - static void set_mixed_subtable(Table& parent, size_t col_ndx, size_t row_ndx, - const Table& source); - - static const LinkViewRef& get_linklist_ptr(Row&, size_t col_ndx); - static void unbind_linklist_ptr(const LinkViewRef&); - - using VersionID = SharedGroup::VersionID; - - //@{ - - /// Continuous transactions. - /// - /// advance_read() is equivalent to terminating the current read transaction - /// (SharedGroup::end_read()), and initiating a new one - /// (SharedGroup::begin_read()), except that all subordinate accessors - /// (Table, Row, Descriptor) will remain attached to the underlying objects, - /// unless those objects were removed in the target snapshot. By default, - /// the read transaction is advanced to the latest available snapshot, but - /// see SharedGroup::begin_read() for information about \a version. - /// - /// promote_to_write() is equivalent to terminating the current read - /// transaction (SharedGroup::end_read()), and initiating a new write - /// transaction (SharedGroup::begin_write()), except that all subordinate - /// accessors (Table, Row, Descriptor) will remain attached to the - /// underlying objects, unless those objects were removed in the target - /// snapshot. - /// - /// commit_and_continue_as_read() is equivalent to committing the current - /// write transaction (SharedGroup::commit()) and initiating a new read - /// transaction, which is bound to the snapshot produced by the write - /// transaction (SharedGroup::begin_read()), except that all subordinate - /// accessors (Table, Row, Descriptor) will remain attached to the - /// underlying objects. commit_and_continue_as_read() returns the version - /// produced by the committed transaction. - /// - /// rollback_and_continue_as_read() is equivalent to rolling back the - /// current write transaction (SharedGroup::rollback()) and initiating a new - /// read transaction, which is bound to the snapshot, that the write - /// transaction was based on (SharedGroup::begin_read()), except that all - /// subordinate accessors (Table, Row, Descriptor) will remain attached to - /// the underlying objects, unless they were attached to object that were - /// added during the rolled back transaction. - /// - /// If advance_read(), promote_to_write(), commit_and_continue_as_read(), or - /// rollback_and_continue_as_read() throws, the associated group accessor - /// and all of its subordinate accessors are left in a state that may not be - /// fully consistent. Only minimal consistency is guaranteed (see - /// AccessorConsistencyLevels). In this case, the application is required to - /// either destroy the SharedGroup object, forcing all associated accessors - /// to become detached, or take some other equivalent action that involves a - /// complete accessor detachment, such as terminating the transaction in - /// progress. Until then it is an error, and unsafe if the application - /// attempts to access any of those accessors. - /// - /// The application must use SharedGroup::end_read() if it wants to - /// terminate the transaction after advance_read() or promote_to_write() has - /// thrown an exception. Likewise, it must use SharedGroup::rollback() if it - /// wants to terminate the transaction after commit_and_continue_as_read() - /// or rollback_and_continue_as_read() has thrown an exception. - /// - /// \param history The modification history accessor associated with the - /// specified SharedGroup object. - /// - /// \param observer An optional custom replication instruction handler. The - /// application may pass such a handler to observe the sequence of - /// modifications that advances (or rolls back) the state of the Realm. - /// - /// \throw SharedGroup::BadVersion Thrown by advance_read() if the specified - /// version does not correspond to a bound (or tethered) snapshot. - - static void advance_read(SharedGroup&, VersionID = VersionID()); - template static void advance_read(SharedGroup&, O&& observer, VersionID = VersionID()); - static void promote_to_write(SharedGroup&); - template static void promote_to_write(SharedGroup&, O&& observer); - static SharedGroup::version_type commit_and_continue_as_read(SharedGroup&); - static void rollback_and_continue_as_read(SharedGroup&); - template static void rollback_and_continue_as_read(SharedGroup&, O&& observer); - - //@} - - /// Returns the name of the specified data type. Examples: - /// - ///
-    ///
-    ///   type_Int          ->  "int"
-    ///   type_Bool         ->  "bool"
-    ///   type_Float        ->  "float"
-    ///   ...
-    ///
-    /// 
- static const char* get_data_type_name(DataType) noexcept; - - static SharedGroup::version_type get_version_of_latest_snapshot(SharedGroup&); -}; - - - - -// Implementation: - -inline Table* LangBindHelper::new_table() -{ - typedef _impl::TableFriend tf; - Allocator& alloc = Allocator::get_default(); - size_t ref = tf::create_empty_table(alloc); // Throws - Table::Parent* parent = nullptr; - size_t ndx_in_parent = 0; - Table* table = tf::create_accessor(alloc, ref, parent, ndx_in_parent); // Throws - tf::bind_ptr(*table); - return table; -} - -inline Table* LangBindHelper::copy_table(const Table& table) -{ - typedef _impl::TableFriend tf; - Allocator& alloc = Allocator::get_default(); - size_t ref = tf::clone(table, alloc); // Throws - Table::Parent* parent = nullptr; - size_t ndx_in_parent = 0; - Table* copy_of_table = tf::create_accessor(alloc, ref, parent, ndx_in_parent); // Throws - tf::bind_ptr(*copy_of_table); - return copy_of_table; -} - -inline Table* LangBindHelper::get_subtable_ptr(Table* t, size_t column_ndx, - size_t row_ndx) -{ - Table* subtab = t->get_subtable_ptr(column_ndx, row_ndx); // Throws - subtab->bind_ptr(); - return subtab; -} - -inline const Table* LangBindHelper::get_subtable_ptr(const Table* t, size_t column_ndx, - size_t row_ndx) -{ - const Table* subtab = t->get_subtable_ptr(column_ndx, row_ndx); // Throws - subtab->bind_ptr(); - return subtab; -} - -inline Table* LangBindHelper::get_subtable_ptr(TableView* tv, size_t column_ndx, - size_t row_ndx) -{ - return get_subtable_ptr(&tv->get_parent(), column_ndx, tv->get_source_ndx(row_ndx)); -} - -inline const Table* LangBindHelper::get_subtable_ptr(const TableView* tv, size_t column_ndx, - size_t row_ndx) -{ - return get_subtable_ptr(&tv->get_parent(), column_ndx, tv->get_source_ndx(row_ndx)); -} - -inline const Table* LangBindHelper::get_subtable_ptr(const ConstTableView* tv, - size_t column_ndx, size_t row_ndx) -{ - return get_subtable_ptr(&tv->get_parent(), column_ndx, tv->get_source_ndx(row_ndx)); -} - -inline Table* LangBindHelper::get_table(Group& group, size_t index_in_group) -{ - typedef _impl::GroupFriend gf; - Table* table = &gf::get_table(group, index_in_group); // Throws - table->bind_ptr(); - return table; -} - -inline const Table* LangBindHelper::get_table(const Group& group, size_t index_in_group) -{ - typedef _impl::GroupFriend gf; - const Table* table = &gf::get_table(group, index_in_group); // Throws - table->bind_ptr(); - return table; -} - -inline Table* LangBindHelper::get_table(Group& group, StringData name) -{ - typedef _impl::GroupFriend gf; - Table* table = gf::get_table(group, name); // Throws - if (table) - table->bind_ptr(); - return table; -} - -inline const Table* LangBindHelper::get_table(const Group& group, StringData name) -{ - typedef _impl::GroupFriend gf; - const Table* table = gf::get_table(group, name); // Throws - if (table) - table->bind_ptr(); - return table; -} - -inline Table* LangBindHelper::add_table(Group& group, StringData name, bool require_unique_name) -{ - typedef _impl::GroupFriend gf; - Table* table = &gf::add_table(group, name, require_unique_name); // Throws - table->bind_ptr(); - return table; -} - -inline Table* LangBindHelper::get_or_add_table(Group& group, StringData name, bool* was_added) -{ - typedef _impl::GroupFriend gf; - Table* table = &gf::get_or_add_table(group, name, was_added); // Throws - table->bind_ptr(); - return table; -} - -inline void LangBindHelper::unbind_table_ptr(const Table* t) noexcept -{ - t->unbind_ptr(); -} - -inline void LangBindHelper::bind_table_ptr(const Table* t) noexcept -{ - t->bind_ptr(); -} - -inline void LangBindHelper::set_mixed_subtable(Table& parent, size_t col_ndx, - size_t row_ndx, const Table& source) -{ - parent.set_mixed_subtable(col_ndx, row_ndx, &source); -} - -inline const LinkViewRef& LangBindHelper::get_linklist_ptr(Row& row, size_t col_ndx) -{ - LinkViewRef* link_view = new LinkViewRef(row.get_linklist(col_ndx)); - return *link_view; -} - -inline void LangBindHelper::unbind_linklist_ptr(const LinkViewRef& link_view) -{ - delete (&link_view); -} - -inline void LangBindHelper::advance_read(SharedGroup& sg, VersionID version) -{ - using sgf = _impl::SharedGroupFriend; - _impl::NullInstructionObserver* observer = nullptr; - sgf::advance_read(sg, observer, version); // Throws -} - -template -inline void LangBindHelper::advance_read(SharedGroup& sg, O&& observer, VersionID version) -{ - using sgf = _impl::SharedGroupFriend; - sgf::advance_read(sg, &observer, version); // Throws -} - -inline void LangBindHelper::promote_to_write(SharedGroup& sg) -{ - using sgf = _impl::SharedGroupFriend; - _impl::NullInstructionObserver* observer = nullptr; - sgf::promote_to_write(sg, observer); // Throws -} - -template -inline void LangBindHelper::promote_to_write(SharedGroup& sg, O&& observer) -{ - using sgf = _impl::SharedGroupFriend; - sgf::promote_to_write(sg, &observer); // Throws -} - -inline SharedGroup::version_type LangBindHelper::commit_and_continue_as_read(SharedGroup& sg) -{ - using sgf = _impl::SharedGroupFriend; - return sgf::commit_and_continue_as_read(sg); // Throws -} - -inline void LangBindHelper::rollback_and_continue_as_read(SharedGroup& sg) -{ - using sgf = _impl::SharedGroupFriend; - _impl::NullInstructionObserver* observer = nullptr; - sgf::rollback_and_continue_as_read(sg, observer); // Throws -} - -template -inline void LangBindHelper::rollback_and_continue_as_read(SharedGroup& sg, O&& observer) -{ - using sgf = _impl::SharedGroupFriend; - sgf::rollback_and_continue_as_read(sg, &observer); // Throws -} - -inline SharedGroup::version_type LangBindHelper::get_version_of_latest_snapshot(SharedGroup& sg) -{ - using sgf = _impl::SharedGroupFriend; - return sgf::get_version_of_latest_snapshot(sg); // Throws -} - -} // namespace realm - -#endif // REALM_LANG_BIND_HELPER_HPP diff --git a/Pods/Realm/include/core/realm/link_view.hpp b/Pods/Realm/include/core/realm/link_view.hpp deleted file mode 100644 index 1d9359a0..00000000 --- a/Pods/Realm/include/core/realm/link_view.hpp +++ /dev/null @@ -1,378 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_LINK_VIEW_HPP -#define REALM_LINK_VIEW_HPP - -#include -#include -#include -#include - -namespace realm { - -class LinkListColumn; - -namespace _impl { -class LinkListFriend; -class TransactLogConvenientEncoder; -} - - -/// The effect of calling most of the link list functions on a detached accessor -/// is unspecified and may lead to general corruption, or even a crash. The -/// exceptions are is_attached() and the destructor. -/// -/// FIXME: Rename this class to `LinkList`. -class LinkView : public RowIndexes, public std::enable_shared_from_this { -public: - ~LinkView() noexcept; - bool is_attached() const noexcept; - - /// This method will return true if the LinkView is detached (no assert). - bool is_empty() const noexcept; - - /// This method will return 0 if the LinkView is detached (no assert). - size_t size() const noexcept override; - - bool operator==(const LinkView&) const noexcept; - bool operator!=(const LinkView&) const noexcept; - - // Getting links - Table::ConstRowExpr operator[](size_t link_ndx) const noexcept; - Table::RowExpr operator[](size_t link_ndx) noexcept; - Table::ConstRowExpr get(size_t link_ndx) const noexcept; - Table::RowExpr get(size_t link_ndx) noexcept; - - // Modifiers - void add(size_t target_row_ndx); - void insert(size_t link_ndx, size_t target_row_ndx); - void set(size_t link_ndx, size_t target_row_ndx); - /// Move the link at \a from_ndx such that it ends up at \a to_ndx. Other - /// links are shifted as necessary in such a way that their order is - /// preserved. - /// - /// Note that \a to_ndx is the desired final index of the moved link, - /// therefore, `move(1,1)` is a no-op, while `move(1,2)` moves the link at - /// index 1 by one position, such that it ends up at index 2. A side-effect - /// of that, is that the link, that was originally at index 2, is moved to - /// index 1. - void move(size_t from_ndx, size_t to_ndx); - void swap(size_t link1_ndx, size_t link2_ndx); - void remove(size_t link_ndx); - void clear(); - - void sort(size_t column, bool ascending = true); - void sort(std::vector columns, std::vector ascending); - - TableView get_sorted_view(std::vector column_indexes, std::vector ascending) const; - TableView get_sorted_view(size_t column_index, bool ascending = true) const; - - /// Remove the target row of the specified link from the target table. This - /// also removes the specified link from this link list, and any other link - /// pointing to that row. This is merely a shorthand for - /// `get_target_table.move_last_over(get(link_ndx))`. - void remove_target_row(size_t link_ndx); - - /// Remove all target rows pointed to by links in this link list, and clear - /// this link list. - void remove_all_target_rows(); - - /// Search this list for a link to the specified target table row (specified - /// by its index in the target table). If found, the index of the link to - /// that row within this list is returned, otherwise `realm::not_found` is - /// returned. - size_t find(size_t target_row_ndx, size_t start=0) const noexcept; - - const ColumnBase& get_column_base(size_t index) const override; // FIXME: `ColumnBase` is not part of the public API, so this function must be made private. - const Table& get_origin_table() const noexcept; - Table& get_origin_table() noexcept; - - size_t get_origin_row_index() const noexcept; - - const Table& get_target_table() const noexcept; - Table& get_target_table() noexcept; - - // No-op because LinkViews are always kept in sync. - uint_fast64_t sync_if_needed() const override; - bool is_in_sync() const override { return true; } - -private: - struct ctor_cookie {}; - - TableRef m_origin_table; - LinkListColumn& m_origin_column; - mutable size_t m_ref_count; - - using HandoverPatch = LinkViewHandoverPatch; - static void generate_patch(const ConstLinkViewRef& ref, std::unique_ptr& patch); - static LinkViewRef create_from_and_consume_patch(std::unique_ptr& patch, Group& group); - - void detach(); - void set_origin_row_index(size_t row_ndx) noexcept; - - size_t do_set(size_t link_ndx, size_t target_row_ndx); - size_t do_remove(size_t link_ndx); - void do_clear(bool broken_reciprocal_backlinks); - - void do_nullify_link(size_t old_target_row_ndx); - void do_update_link(size_t old_target_row_ndx, size_t new_target_row_ndx); - void do_swap_link(size_t target_row_ndx_1, size_t target_row_ndx_2); - - void refresh_accessor_tree(size_t new_row_ndx) noexcept; - - void update_from_parent(size_t old_baseline) noexcept; - - Replication* get_repl() noexcept; - void repl_unselect() noexcept; - friend class _impl::TransactLogConvenientEncoder; - -#ifdef REALM_DEBUG - void verify(size_t row_ndx) const; -#endif - // allocate using make_shared: - static std::shared_ptr create(Table* origin_table, LinkListColumn&, size_t row_ndx); - - friend class _impl::LinkListFriend; - friend class LinkListColumn; - friend class LangBindHelper; - friend class SharedGroup; - friend class Query; - friend class TableViewBase; - - // must be public for use by make_shared, but cannot be called from outside, - // because ctor_cookie is private -public: - LinkView(const ctor_cookie&, Table* origin_table, LinkListColumn&, size_t row_ndx); -}; - - -// Implementation - -inline LinkView::LinkView(const ctor_cookie&, Table* origin_table, LinkListColumn& column, size_t row_ndx): - RowIndexes(IntegerColumn::unattached_root_tag(), column.get_alloc()), // Throws - m_origin_table(origin_table->get_table_ref()), - m_origin_column(column), - m_ref_count(0) -{ - Array& root = *m_row_indexes.get_root_array(); - root.set_parent(&column, row_ndx); - if (ref_type ref = root.get_ref_from_parent()) - root.init_from_ref(ref); -} - -inline std::shared_ptr -LinkView::create(Table* origin_table, LinkListColumn& column, size_t row_ndx) -{ - return std::make_shared(ctor_cookie(), origin_table, column, row_ndx); -} - -inline LinkView::~LinkView() noexcept -{ - if (is_attached()) { - repl_unselect(); - m_origin_column.unregister_linkview(); - } -} - -inline void LinkView::detach() -{ - REALM_ASSERT(is_attached()); - repl_unselect(); - m_origin_table.reset(); - m_row_indexes.detach(); -} - -inline bool LinkView::is_attached() const noexcept -{ - return static_cast(m_origin_table); -} - -inline bool LinkView::is_empty() const noexcept -{ - if (!is_attached()) - return true; - - if (!m_row_indexes.is_attached()) - return true; - - return m_row_indexes.is_empty(); -} - -inline size_t LinkView::size() const noexcept -{ - if (!is_attached()) - return 0; - - if (!m_row_indexes.is_attached()) - return 0; - - return m_row_indexes.size(); -} - -inline bool LinkView::operator==(const LinkView& link_list) const noexcept -{ - Table& target_table_1 = m_origin_column.get_target_table(); - Table& target_table_2 = link_list.m_origin_column.get_target_table(); - if (target_table_1.get_index_in_group() != target_table_2.get_index_in_group()) - return false; - if (!m_row_indexes.is_attached() || m_row_indexes.is_empty()) { - return !link_list.m_row_indexes.is_attached() || - link_list.m_row_indexes.is_empty(); - } - return link_list.m_row_indexes.is_attached() && - m_row_indexes.compare(link_list.m_row_indexes); -} - -inline bool LinkView::operator!=(const LinkView& link_list) const noexcept -{ - return !(*this == link_list); -} - -inline Table::ConstRowExpr LinkView::get(size_t link_ndx) const noexcept -{ - return const_cast(this)->get(link_ndx); -} - -inline Table::RowExpr LinkView::get(size_t link_ndx) noexcept -{ - REALM_ASSERT(is_attached()); - REALM_ASSERT(m_row_indexes.is_attached()); - REALM_ASSERT_3(link_ndx, <, m_row_indexes.size()); - - Table& target_table = m_origin_column.get_target_table(); - size_t target_row_ndx = to_size_t(m_row_indexes.get(link_ndx)); - return target_table[target_row_ndx]; -} - -inline Table::ConstRowExpr LinkView::operator[](size_t link_ndx) const noexcept -{ - return get(link_ndx); -} - -inline Table::RowExpr LinkView::operator[](size_t link_ndx) noexcept -{ - return get(link_ndx); -} - -inline void LinkView::add(size_t target_row_ndx) -{ - REALM_ASSERT(is_attached()); - size_t ins_pos = (m_row_indexes.is_attached()) ? m_row_indexes.size() : 0; - insert(ins_pos, target_row_ndx); -} - -inline size_t LinkView::find(size_t target_row_ndx, size_t start) const noexcept -{ - REALM_ASSERT(is_attached()); - REALM_ASSERT_3(target_row_ndx, <, m_origin_column.get_target_table().size()); - REALM_ASSERT_3(start, <=, size()); - - if (!m_row_indexes.is_attached()) - return not_found; - - return m_row_indexes.find_first(target_row_ndx, start); -} - -inline const ColumnBase& LinkView::get_column_base(size_t index) const -{ - return get_target_table().get_column_base(index); -} - -inline const Table& LinkView::get_origin_table() const noexcept -{ - return *m_origin_table; -} - -inline Table& LinkView::get_origin_table() noexcept -{ - return *m_origin_table; -} - -inline size_t LinkView::get_origin_row_index() const noexcept -{ - REALM_ASSERT(is_attached()); - return m_row_indexes.get_root_array()->get_ndx_in_parent(); -} - -inline void LinkView::set_origin_row_index(size_t row_ndx) noexcept -{ - REALM_ASSERT(is_attached()); - m_row_indexes.get_root_array()->set_ndx_in_parent(row_ndx); -} - -inline const Table& LinkView::get_target_table() const noexcept -{ - return m_origin_column.get_target_table(); -} - -inline Table& LinkView::get_target_table() noexcept -{ - return m_origin_column.get_target_table(); -} - -inline void LinkView::refresh_accessor_tree(size_t new_row_ndx) noexcept -{ - Array& root = *m_row_indexes.get_root_array(); - root.set_ndx_in_parent(new_row_ndx); - if (ref_type ref = root.get_ref_from_parent()) { - root.init_from_ref(ref); - } - else { - root.detach(); - } -} - -inline void LinkView::update_from_parent(size_t old_baseline) noexcept -{ - if (m_row_indexes.is_attached()) - m_row_indexes.update_from_parent(old_baseline); -} - -inline Replication* LinkView::get_repl() noexcept -{ - typedef _impl::TableFriend tf; - return tf::get_repl(*m_origin_table); -} - - -// The purpose of this class is to give internal access to some, but not all of -// the non-public parts of LinkView. -class _impl::LinkListFriend { -public: - static void do_set(LinkView& list, size_t link_ndx, size_t target_row_ndx) - { - list.do_set(link_ndx, target_row_ndx); - } - - static void do_remove(LinkView& list, size_t link_ndx) - { - list.do_remove(link_ndx); - } - - static void do_clear(LinkView& list) - { - bool broken_reciprocal_backlinks = false; - list.do_clear(broken_reciprocal_backlinks); - } -}; - -} // namespace realm - -#endif // REALM_LINK_VIEW_HPP diff --git a/Pods/Realm/include/core/realm/link_view_fwd.hpp b/Pods/Realm/include/core/realm/link_view_fwd.hpp deleted file mode 100644 index b1b40f9a..00000000 --- a/Pods/Realm/include/core/realm/link_view_fwd.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_LINK_VIEW_FWD_HPP -#define REALM_LINK_VIEW_FWD_HPP - -#include - -namespace realm { - -class LinkView; -using LinkViewRef = std::shared_ptr; -using ConstLinkViewRef = std::shared_ptr; - -} // namespace realm - -#endif // REALM_LINK_VIEW_FWD_HPP diff --git a/Pods/Realm/include/core/realm/mixed.hpp b/Pods/Realm/include/core/realm/mixed.hpp deleted file mode 100644 index 0d6c588c..00000000 --- a/Pods/Realm/include/core/realm/mixed.hpp +++ /dev/null @@ -1,624 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_MIXED_HPP -#define REALM_MIXED_HPP - -#include // int64_t - not part of C++03, not even required by C++11 (see C++11 section 18.4.1) - -#include // size_t -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - - -/// This class represents a polymorphic Realm value. -/// -/// At any particular moment an instance of this class stores a -/// definite value of a definite type. If, for instance, that is an -/// integer value, you may call get_int() to extract that value. You -/// may call get_type() to discover what type of value is currently -/// stored. Calling get_int() on an instance that does not store an -/// integer, has undefined behavior, and likewise for all the other -/// types that can be stored. -/// -/// It is crucial to understand that the act of extracting a value of -/// a particular type requires definite knowledge about the stored -/// type. Calling a getter method for any particular type, that is not -/// the same type as the stored value, has undefined behavior. -/// -/// While values of numeric types are contained directly in a Mixed -/// instance, character and binary data are merely referenced. A Mixed -/// instance never owns the referenced data, nor does it in any other -/// way attempt to manage its lifetime. -/// -/// For compatibility with C style strings, when a string (character -/// data) is stored in a Realm database, it is always followed by a -/// terminating null character. This is also true when strings are -/// stored in a mixed type column. This means that in the following -/// code, if the 'mixed' value of the 8th row stores a string, then \c -/// c_str will always point to a null-terminated string: -/// -/// \code{.cpp} -/// -/// const char* c_str = my_table[7].mixed.data(); // Always null-terminated -/// -/// \endcode -/// -/// Note that this assumption does not hold in general for strings in -/// instances of Mixed. Indeed there is nothing stopping you from -/// constructing a new Mixed instance that refers to a string without -/// a terminating null character. -/// -/// At the present time no soultion has been found that would allow -/// for a Mixed instance to directly store a reference to a table. The -/// problem is roughly as follows: From most points of view, the -/// desirable thing to do, would be to store the table reference in a -/// Mixed instance as a plain pointer without any ownership -/// semantics. This would have no negative impact on the performance -/// of copying and destroying Mixed instances, and it would serve just -/// fine for passing a table as argument when setting the value of an -/// entry in a mixed column. In that case a copy of the referenced -/// table would be inserted into the mixed column. -/// -/// On the other hand, when retrieving a table reference from a mixed -/// column, storing it as a plain pointer in a Mixed instance is no -/// longer an acceptable option. The complex rules for managing the -/// lifetime of a Table instance, that represents a subtable, -/// necessitates the use of a "smart pointer" such as -/// TableRef. Enhancing the Mixed class to be able to act as a -/// TableRef would be possible, but would also lead to several new -/// problems. One problem is the risk of a Mixed instance outliving a -/// stack allocated Table instance that it references. This would be a -/// fatal error. Another problem is the impact that the nontrivial -/// table reference has on the performance of copying and destroying -/// Mixed instances. -/// -/// \sa StringData -class Mixed { -public: - Mixed() noexcept; - - Mixed(bool) noexcept; - Mixed(int64_t) noexcept; - Mixed(float) noexcept; - Mixed(double) noexcept; - Mixed(StringData) noexcept; - Mixed(BinaryData) noexcept; - Mixed(OldDateTime) noexcept; - Mixed(Timestamp) noexcept; - - // These are shortcuts for Mixed(StringData(c_str)), and are - // needed to avoid unwanted implicit conversion of char* to bool. - Mixed( char* c_str) noexcept { set_string(c_str); } - Mixed(const char* c_str) noexcept { set_string(c_str); } - - struct subtable_tag {}; - Mixed(subtable_tag) noexcept: m_type(type_Table) {} - - ~Mixed() noexcept {} - - DataType get_type() const noexcept { return m_type; } - - int64_t get_int() const noexcept; - bool get_bool() const noexcept; - float get_float() const noexcept; - double get_double() const noexcept; - StringData get_string() const noexcept; - BinaryData get_binary() const noexcept; - OldDateTime get_olddatetime() const noexcept; - Timestamp get_timestamp() const noexcept; - - void set_int(int64_t) noexcept; - void set_bool(bool) noexcept; - void set_float(float) noexcept; - void set_double(double) noexcept; - void set_string(StringData) noexcept; - void set_binary(BinaryData) noexcept; - void set_binary(const char* data, size_t size) noexcept; - void set_olddatetime(OldDateTime) noexcept; - void set_timestamp(Timestamp) noexcept; - - template - friend std::basic_ostream& operator<<(std::basic_ostream&, const Mixed&); - -private: - DataType m_type; - union { - int64_t m_int; - bool m_bool; - float m_float; - double m_double; - const char* m_data; - int_fast64_t m_date; - Timestamp m_timestamp; - }; - size_t m_size = 0; -}; - -// Note: We cannot compare two mixed values, since when the type of -// both is type_Table, we would have to compare the two tables, but -// the mixed values do not provide access to those tables. - -// Note: The mixed values are specified as Wrap. If they were -// not, these operators would apply to simple comparisons, such as int -// vs int64_t, and cause ambiguity. This is because the constructors -// of Mixed are not explicit. - -// Compare mixed with integer -template -bool operator==(Wrap, const T&) noexcept; -template -bool operator!=(Wrap, const T&) noexcept; -template -bool operator==(const T&, Wrap) noexcept; -template -bool operator!=(const T&, Wrap) noexcept; - -// Compare mixed with boolean -bool operator==(Wrap, bool) noexcept; -bool operator!=(Wrap, bool) noexcept; -bool operator==(bool, Wrap) noexcept; -bool operator!=(bool, Wrap) noexcept; - -// Compare mixed with float -bool operator==(Wrap, float); -bool operator!=(Wrap, float); -bool operator==(float, Wrap); -bool operator!=(float, Wrap); - -// Compare mixed with double -bool operator==(Wrap, double); -bool operator!=(Wrap, double); -bool operator==(double, Wrap); -bool operator!=(double, Wrap); - -// Compare mixed with string -bool operator==(Wrap, StringData) noexcept; -bool operator!=(Wrap, StringData) noexcept; -bool operator==(StringData, Wrap) noexcept; -bool operator!=(StringData, Wrap) noexcept; -bool operator==(Wrap, const char* c_str) noexcept; -bool operator!=(Wrap, const char* c_str) noexcept; -bool operator==(const char* c_str, Wrap) noexcept; -bool operator!=(const char* c_str, Wrap) noexcept; -bool operator==(Wrap, char* c_str) noexcept; -bool operator!=(Wrap, char* c_str) noexcept; -bool operator==(char* c_str, Wrap) noexcept; -bool operator!=(char* c_str, Wrap) noexcept; - -// Compare mixed with binary data -bool operator==(Wrap, BinaryData) noexcept; -bool operator!=(Wrap, BinaryData) noexcept; -bool operator==(BinaryData, Wrap) noexcept; -bool operator!=(BinaryData, Wrap) noexcept; - -// Compare mixed with date -bool operator==(Wrap, OldDateTime) noexcept; -bool operator!=(Wrap, OldDateTime) noexcept; -bool operator==(OldDateTime, Wrap) noexcept; -bool operator!=(OldDateTime, Wrap) noexcept; - - - - -// Implementation: - -inline Mixed::Mixed() noexcept -{ - m_type = type_Int; - m_int = 0; -} - -inline Mixed::Mixed(int64_t v) noexcept -{ - m_type = type_Int; - m_int = v; -} - -inline Mixed::Mixed(bool v) noexcept -{ - m_type = type_Bool; - m_bool = v; -} - -inline Mixed::Mixed(float v) noexcept -{ - m_type = type_Float; - m_float = v; -} - -inline Mixed::Mixed(double v) noexcept -{ - m_type = type_Double; - m_double = v; -} - -inline Mixed::Mixed(StringData v) noexcept -{ - m_type = type_String; - m_data = v.data(); - m_size = v.size(); -} - -inline Mixed::Mixed(BinaryData v) noexcept -{ - m_type = type_Binary; - m_data = v.data(); - m_size = v.size(); -} - -inline Mixed::Mixed(OldDateTime v) noexcept -{ - m_type = type_OldDateTime; - m_date = v.get_olddatetime(); -} - -inline Mixed::Mixed(Timestamp v) noexcept -{ - m_type = type_Timestamp; - m_timestamp = v; -} - -inline int64_t Mixed::get_int() const noexcept -{ - REALM_ASSERT(m_type == type_Int); - return m_int; -} - -inline bool Mixed::get_bool() const noexcept -{ - REALM_ASSERT(m_type == type_Bool); - return m_bool; -} - -inline float Mixed::get_float() const noexcept -{ - REALM_ASSERT(m_type == type_Float); - return m_float; -} - -inline double Mixed::get_double() const noexcept -{ - REALM_ASSERT(m_type == type_Double); - return m_double; -} - -inline StringData Mixed::get_string() const noexcept -{ - REALM_ASSERT(m_type == type_String); - return StringData(m_data, m_size); -} - -inline BinaryData Mixed::get_binary() const noexcept -{ - REALM_ASSERT(m_type == type_Binary); - return BinaryData(m_data, m_size); -} - -inline OldDateTime Mixed::get_olddatetime() const noexcept -{ - REALM_ASSERT(m_type == type_OldDateTime); - return m_date; -} - -inline Timestamp Mixed::get_timestamp() const noexcept -{ - REALM_ASSERT(m_type == type_Timestamp); - return m_timestamp; -} - -inline void Mixed::set_int(int64_t v) noexcept -{ - m_type = type_Int; - m_int = v; -} - -inline void Mixed::set_bool(bool v) noexcept -{ - m_type = type_Bool; - m_bool = v; -} - -inline void Mixed::set_float(float v) noexcept -{ - m_type = type_Float; - m_float = v; -} - -inline void Mixed::set_double(double v) noexcept -{ - m_type = type_Double; - m_double = v; -} - -inline void Mixed::set_string(StringData v) noexcept -{ - m_type = type_String; - m_data = v.data(); - m_size = v.size(); -} - -inline void Mixed::set_binary(BinaryData v) noexcept -{ - set_binary(v.data(), v.size()); -} - -inline void Mixed::set_binary(const char* data, size_t size) noexcept -{ - m_type = type_Binary; - m_data = data; - m_size = size; -} - -inline void Mixed::set_olddatetime(OldDateTime v) noexcept -{ - m_type = type_OldDateTime; - m_date = v.get_olddatetime(); -} - -inline void Mixed::set_timestamp(Timestamp v) noexcept -{ - REALM_ASSERT(false && "not yet implemented"); - m_type = type_Timestamp; - m_timestamp = v; -} - - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const Mixed& m) -{ - out << "Mixed("; - switch (m.m_type) { - case type_Int: out << m.m_int; break; - case type_Bool: out << m.m_bool; break; - case type_Float: out << m.m_float; break; - case type_Double: out << m.m_double; break; - case type_String: out << StringData(m.m_data, m.m_size); break; - case type_Binary: out << BinaryData(m.m_data, m.m_size); break; - case type_OldDateTime: out << OldDateTime(m.m_date); break; - case type_Timestamp: out << Timestamp(m.m_timestamp); break; - case type_Table: out << "subtable"; break; - case type_Mixed: - case type_Link: - case type_LinkList: - REALM_ASSERT(false); - } - out << ")"; - return out; -} - - -// Compare mixed with integer - -template -inline bool operator==(Wrap a, const T& b) noexcept -{ - return Mixed(a).get_type() == type_Int && Mixed(a).get_int() == b; -} - -template -inline bool operator!=(Wrap a, const T& b) noexcept -{ - return Mixed(a).get_type() != type_Int || Mixed(a).get_int() != b; -} - -template -inline bool operator==(const T& a, Wrap b) noexcept -{ - return type_Int == Mixed(b).get_type() && a == Mixed(b).get_int(); -} - -template -inline bool operator!=(const T& a, Wrap b) noexcept -{ - return type_Int != Mixed(b).get_type() || a != Mixed(b).get_int(); -} - - -// Compare mixed with boolean - -inline bool operator==(Wrap a, bool b) noexcept -{ - return Mixed(a).get_type() == type_Bool && Mixed(a).get_bool() == b; -} - -inline bool operator!=(Wrap a, bool b) noexcept -{ - return Mixed(a).get_type() != type_Bool || Mixed(a).get_bool() != b; -} - -inline bool operator==(bool a, Wrap b) noexcept -{ - return type_Bool == Mixed(b).get_type() && a == Mixed(b).get_bool(); -} - -inline bool operator!=(bool a, Wrap b) noexcept -{ - return type_Bool != Mixed(b).get_type() || a != Mixed(b).get_bool(); -} - - -// Compare mixed with float - -inline bool operator==(Wrap a, float b) -{ - return Mixed(a).get_type() == type_Float && Mixed(a).get_float() == b; -} - -inline bool operator!=(Wrap a, float b) -{ - return Mixed(a).get_type() != type_Float || Mixed(a).get_float() != b; -} - -inline bool operator==(float a, Wrap b) -{ - return type_Float == Mixed(b).get_type() && a == Mixed(b).get_float(); -} - -inline bool operator!=(float a, Wrap b) -{ - return type_Float != Mixed(b).get_type() || a != Mixed(b).get_float(); -} - - -// Compare mixed with double - -inline bool operator==(Wrap a, double b) -{ - return Mixed(a).get_type() == type_Double && Mixed(a).get_double() == b; -} - -inline bool operator!=(Wrap a, double b) -{ - return Mixed(a).get_type() != type_Double || Mixed(a).get_double() != b; -} - -inline bool operator==(double a, Wrap b) -{ - return type_Double == Mixed(b).get_type() && a == Mixed(b).get_double(); -} - -inline bool operator!=(double a, Wrap b) -{ - return type_Double != Mixed(b).get_type() || a != Mixed(b).get_double(); -} - - -// Compare mixed with string - -inline bool operator==(Wrap a, StringData b) noexcept -{ - return Mixed(a).get_type() == type_String && Mixed(a).get_string() == b; -} - -inline bool operator!=(Wrap a, StringData b) noexcept -{ - return Mixed(a).get_type() != type_String || Mixed(a).get_string() != b; -} - -inline bool operator==(StringData a, Wrap b) noexcept -{ - return type_String == Mixed(b).get_type() && a == Mixed(b).get_string(); -} - -inline bool operator!=(StringData a, Wrap b) noexcept -{ - return type_String != Mixed(b).get_type() || a != Mixed(b).get_string(); -} - -inline bool operator==(Wrap a, const char* b) noexcept -{ - return a == StringData(b); -} - -inline bool operator!=(Wrap a, const char* b) noexcept -{ - return a != StringData(b); -} - -inline bool operator==(const char* a, Wrap b) noexcept -{ - return StringData(a) == b; -} - -inline bool operator!=(const char* a, Wrap b) noexcept -{ - return StringData(a) != b; -} - -inline bool operator==(Wrap a, char* b) noexcept -{ - return a == StringData(b); -} - -inline bool operator!=(Wrap a, char* b) noexcept -{ - return a != StringData(b); -} - -inline bool operator==(char* a, Wrap b) noexcept -{ - return StringData(a) == b; -} - -inline bool operator!=(char* a, Wrap b) noexcept -{ - return StringData(a) != b; -} - - -// Compare mixed with binary data - -inline bool operator==(Wrap a, BinaryData b) noexcept -{ - return Mixed(a).get_type() == type_Binary && Mixed(a).get_binary() == b; -} - -inline bool operator!=(Wrap a, BinaryData b) noexcept -{ - return Mixed(a).get_type() != type_Binary || Mixed(a).get_binary() != b; -} - -inline bool operator==(BinaryData a, Wrap b) noexcept -{ - return type_Binary == Mixed(b).get_type() && a == Mixed(b).get_binary(); -} - -inline bool operator!=(BinaryData a, Wrap b) noexcept -{ - return type_Binary != Mixed(b).get_type() || a != Mixed(b).get_binary(); -} - - -// Compare mixed with date - -inline bool operator==(Wrap a, OldDateTime b) noexcept -{ - return Mixed(a).get_type() == type_OldDateTime && OldDateTime(Mixed(a).get_olddatetime()) == b; -} - -inline bool operator!=(Wrap a, OldDateTime b) noexcept -{ - return Mixed(a).get_type() != type_OldDateTime || OldDateTime(Mixed(a).get_olddatetime()) != b; -} - -inline bool operator==(OldDateTime a, Wrap b) noexcept -{ - return type_OldDateTime == Mixed(b).get_type() && a == OldDateTime(Mixed(b).get_olddatetime()); -} - -inline bool operator!=(OldDateTime a, Wrap b) noexcept -{ - return type_OldDateTime != Mixed(b).get_type() || a != OldDateTime(Mixed(b).get_olddatetime()); -} - - -} // namespace realm - -#endif // REALM_MIXED_HPP diff --git a/Pods/Realm/include/core/realm/null.hpp b/Pods/Realm/include/core/realm/null.hpp deleted file mode 100644 index 30134c8d..00000000 --- a/Pods/Realm/include/core/realm/null.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_NULL_HPP -#define REALM_NULL_HPP - -#include - -#include -#include -#include -#include - -namespace realm { - -/* -Represents null in Query, find(), get(), set(), etc. - -Float/Double: Realm can both store user-given NaNs and null. Any user-given signaling NaN is converted to -0x7fa00000 (if float) or 0x7ff4000000000000 (if double). Any user-given quiet NaN is converted to -0x7fc00000 (if float) or 0x7ff8000000000000 (if double). So Realm does not preserve the optional bits in -user-given NaNs. - -However, since both clang and gcc on x64 and ARM, and also Java on x64, return these bit patterns when -requesting NaNs, these will actually seem to roundtrip bit-exact for the end-user in most cases. - -If set_null() is called, a null is stored in form of the bit pattern 0xffffffff (if float) or -0xffffffffffffffff (if double). These are quiet NaNs. - -Executing a query that involves a float/double column that contains NaNs gives an undefined result. If -it contains signaling NaNs, it may throw an exception. - -Notes on IEEE: - -A NaN float is any bit pattern `s 11111111 S xxxxxxxxxxxxxxxxxxxxxx` where `s` and `x` are arbitrary, but at -least 1 `x` must be 1. If `S` is 1, it's a quiet NaN, else it's a signaling NaN. - -A NaN doubule is the same as above, but for `s eeeeeeeeeee S xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` - -The `S` bit is at position 22 (float) or 51 (double). -*/ - -struct null { - null() {} - operator int64_t() { throw(LogicError::type_mismatch); } - template - operator util::Optional() { return util::none; } - - template - bool operator == (const T&) const { REALM_ASSERT(false); return false; } - template - bool operator != (const T&) const { REALM_ASSERT(false); return false; } - template - bool operator > (const T&) const { REALM_ASSERT(false); return false; } - template - bool operator >= (const T&) const { REALM_ASSERT(false); return false; } - template - bool operator <= (const T&) const { REALM_ASSERT(false); return false; } - template - bool operator < (const T&) const { REALM_ASSERT(false); return false; } - - /// Returns whether `v` bitwise equals the null bit-pattern - template - static bool is_null_float(T v) { - T i = null::get_null_float(); - return std::memcmp(&i, &v, sizeof(T)) == 0; - } - - /// Returns the quiet NaNs that represent null for floats/doubles in Realm in stored payload. - template - static T get_null_float() { - typename std::conditional::value, uint32_t, uint64_t>::type i; - int64_t double_nan = 0x7ff80000000000aa; - i = std::is_same::value ? 0x7fc000aa : static_cast(double_nan); - T d = type_punning(i); - REALM_ASSERT_DEBUG(std::isnan(static_cast(d))); - REALM_ASSERT_DEBUG(!is_signaling(d)); - return d; - } - - /// Takes a NaN as argument and returns whether or not it's signaling - template - static bool is_signaling(T v) { - REALM_ASSERT(std::isnan(static_cast(v))); - typename std::conditional::value, uint32_t, uint64_t>::type i; - size_t signal_bit = std::is_same::value ? 22 : 51; // If this bit is set, it's quiet - i = type_punning(v); - return !(i & (1ull << signal_bit)); - } - - /// Converts any signaling or quiet NaN to their their respective bit patterns that are used on x64 gcc+clang, - /// ARM clang and x64 Java. - template - static T to_realm(T v) { - if (std::isnan(static_cast(v))) { - typename std::conditional::value, uint32_t, uint64_t>::type i; - if (std::is_same::value) { - i = is_signaling(v) ? 0x7fa00000 : 0x7fc00000; - } - else { - i = static_cast(is_signaling(v) ? 0x7ff4000000000000 : 0x7ff8000000000000); - } - return type_punning(i); - } - else { - return v; - } - } - -}; - -} // namespace realm - -#endif // REALM_NULL_HPP diff --git a/Pods/Realm/include/core/realm/olddatetime.hpp b/Pods/Realm/include/core/realm/olddatetime.hpp deleted file mode 100644 index 47aca7c7..00000000 --- a/Pods/Realm/include/core/realm/olddatetime.hpp +++ /dev/null @@ -1,148 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_DATETIME_HPP -#define REALM_DATETIME_HPP - -#include -#include - -namespace realm { - - -class OldDateTime { -public: - OldDateTime() noexcept: m_time(0) {} - - /// Construct from the number of seconds since Jan 1 00:00:00 UTC - /// 1970. - /// FIXME: See if we can make this private again. Required by query_expression.hpp - OldDateTime(int_fast64_t d) noexcept : m_time(d) {} - - /// Return the time as seconds since Jan 1 00:00:00 UTC 1970. - int_fast64_t get_olddatetime() const noexcept { return m_time; } - - friend bool operator==(const OldDateTime&, const OldDateTime&) noexcept; - friend bool operator!=(const OldDateTime&, const OldDateTime&) noexcept; - friend bool operator< (const OldDateTime&, const OldDateTime&) noexcept; - friend bool operator<= (const OldDateTime&, const OldDateTime&) noexcept; - friend bool operator> (const OldDateTime&, const OldDateTime&) noexcept; - friend bool operator>= (const OldDateTime&, const OldDateTime&) noexcept; - - /// Construct from broken down local time. - /// - /// \note This constructor uses std::mktime() to convert the - /// specified local time to seconds since the Epoch, that is, the - /// result depends on the current globally specified time zone - /// setting. - /// - /// \param year The year (the minimum valid value is 1970). - /// - /// \param month The month in the range [1, 12]. - /// - /// \param day The day of the month in the range [1, 31]. - /// - /// \param hours Hours since midnight in the range [0, 23]. - /// - /// \param minutes Minutes after the hour in the range [0, 59]. - /// - /// \param seconds Seconds after the minute in the range [0, - /// 60]. Note that the range allows for leap seconds. - OldDateTime(int year, int month, int day, int hours = 0, int minutes = 0, int seconds = 0); - - template - friend std::basic_ostream& operator<<(std::basic_ostream& out, const OldDateTime&); - - // This is used by query_expression.hpp to generalize its templates and simplify the code *alot*; it is needed - // because OldDateTime is internally stored in an int64_t column. - operator int_fast64_t() noexcept; - -private: - int_fast64_t m_time; // Seconds since Jan 1 00:00:00 UTC 1970. - static std::time_t assemble(int year, int month, int day, int hours, int minutes, int seconds); - template - friend class Value; -}; - - -// Implementation: - -inline bool operator==(const OldDateTime& a, const OldDateTime& b) noexcept -{ - return a.m_time == b.m_time; -} - -inline bool operator!=(const OldDateTime& a, const OldDateTime& b) noexcept -{ - return a.m_time != b.m_time; -} - -inline bool operator<(const OldDateTime& a, const OldDateTime& b) noexcept -{ - return a.m_time < b.m_time; -} - -inline bool operator<=(const OldDateTime& a, const OldDateTime& b) noexcept -{ - return a.m_time <= b.m_time; -} - -inline bool operator>(const OldDateTime& a, const OldDateTime& b) noexcept -{ - return a.m_time > b.m_time; -} - -inline bool operator>=(const OldDateTime& a, const OldDateTime& b) noexcept -{ - return a.m_time >= b.m_time; -} - -inline OldDateTime::operator int_fast64_t() noexcept -{ - return m_time; -} - -inline OldDateTime::OldDateTime(int year, int month, int day, int hours, int minutes, int seconds): - m_time(assemble(year, month, day, hours, minutes, seconds)) {} - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const OldDateTime& d) -{ - out << "OldDateTime("< -#include - -namespace realm { - -/// A chunk of owned data. -class OwnedData { -public: - /// Construct a null reference. - OwnedData() noexcept {} - - /// If \a data is 'null', \a size must be zero. - OwnedData(const char* data, size_t size) : m_size(size) - { - REALM_ASSERT_DEBUG(data || size == 0); - if (data) { - m_data = std::unique_ptr(new char[size]); - memcpy(m_data.get(), data, size); - } - } - - /// If \a data is 'null', \a size must be zero. - OwnedData(std::unique_ptr data, size_t size) noexcept : - m_data(std::move(data)), m_size(size) - { - REALM_ASSERT_DEBUG(m_data || m_size == 0); - } - - OwnedData(const OwnedData& other) : OwnedData(other.m_data.get(), other.m_size) { } - OwnedData& operator=(const OwnedData& other); - - OwnedData(OwnedData&&) = default; - OwnedData& operator=(OwnedData&&) = default; - - const char* data() const { return m_data.get(); } - size_t size() const { return m_size; } - -private: - std::unique_ptr m_data; - size_t m_size = 0; -}; - -inline OwnedData& OwnedData::operator=(const OwnedData& other) -{ - if (this != &other) { - if (other.m_data) { - m_data = std::unique_ptr(new char[other.m_size]); - memcpy(m_data.get(), other.m_data.get(), other.m_size); - } else { - m_data = nullptr; - } - m_size = other.m_size; - } - return *this; -} - -} // namespace realm - -#endif // REALM_OWNED_DATA_HPP diff --git a/Pods/Realm/include/core/realm/query.hpp b/Pods/Realm/include/core/realm/query.hpp deleted file mode 100644 index eec5238b..00000000 --- a/Pods/Realm/include/core/realm/query.hpp +++ /dev/null @@ -1,431 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_QUERY_HPP -#define REALM_QUERY_HPP - -#include -#include -#include -#include -#include -#include - -#define REALM_MULTITHREAD_QUERY 0 - -#if REALM_MULTITHREAD_QUERY -// FIXME: Use our C++ thread abstraction API since it provides a much -// higher level of encapsulation and safety. -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - - -// Pre-declarations -class ParentNode; -class Table; -class TableView; -class TableViewBase; -class ConstTableView; -class Array; -class Expression; -class SequentialGetterBase; -class Group; - -struct QueryGroup { - enum class State { - Default, - OrCondition, - OrConditionChildren, - }; - - QueryGroup() = default; - - QueryGroup(const QueryGroup&); - QueryGroup& operator=(const QueryGroup&); - - QueryGroup(QueryGroup&&) = default; - QueryGroup& operator=(QueryGroup&&) = default; - - QueryGroup(const QueryGroup&, QueryNodeHandoverPatches&); - - std::unique_ptr m_root_node; - - bool m_pending_not = false; - size_t m_subtable_column = not_found; - State m_state = State::Default; -}; - -class Query { -public: - Query(const Table& table, TableViewBase* tv = nullptr); - Query(const Table& table, std::unique_ptr); - Query(const Table& table, const LinkViewRef& lv); - Query(); - Query(std::unique_ptr); - virtual ~Query() noexcept; - - Query(const Query& copy); - Query& operator = (const Query& source); - - Query(Query&&); - Query& operator=(Query&&); - - // Find links that point to a specific target row - Query& links_to(size_t column_ndx, const ConstRow& target_row); - - // Conditions: null - Query& equal(size_t column_ndx, null); - Query& not_equal(size_t column_ndx, null); - - // Conditions: int64_t - Query& equal(size_t column_ndx, int64_t value); - Query& not_equal(size_t column_ndx, int64_t value); - Query& greater(size_t column_ndx, int64_t value); - Query& greater_equal(size_t column_ndx, int64_t value); - Query& less(size_t column_ndx, int64_t value); - Query& less_equal(size_t column_ndx, int64_t value); - Query& between(size_t column_ndx, int64_t from, int64_t to); - - // Conditions: int (we need those because conversion from '1234' is ambiguous with float/double) - Query& equal(size_t column_ndx, int value); - Query& not_equal(size_t column_ndx, int value); - Query& greater(size_t column_ndx, int value); - Query& greater_equal(size_t column_ndx, int value); - Query& less(size_t column_ndx, int value); - Query& less_equal(size_t column_ndx, int value); - Query& between(size_t column_ndx, int from, int to); - - // Conditions: 2 int columns - Query& equal_int(size_t column_ndx1, size_t column_ndx2); - Query& not_equal_int(size_t column_ndx1, size_t column_ndx2); - Query& greater_int(size_t column_ndx1, size_t column_ndx2); - Query& less_int(size_t column_ndx1, size_t column_ndx2); - Query& greater_equal_int(size_t column_ndx1, size_t column_ndx2); - Query& less_equal_int(size_t column_ndx1, size_t column_ndx2); - - // Conditions: float - Query& equal(size_t column_ndx, float value); - Query& not_equal(size_t column_ndx, float value); - Query& greater(size_t column_ndx, float value); - Query& greater_equal(size_t column_ndx, float value); - Query& less(size_t column_ndx, float value); - Query& less_equal(size_t column_ndx, float value); - Query& between(size_t column_ndx, float from, float to); - - // Conditions: 2 float columns - Query& equal_float(size_t column_ndx1, size_t column_ndx2); - Query& not_equal_float(size_t column_ndx1, size_t column_ndx2); - Query& greater_float(size_t column_ndx1, size_t column_ndx2); - Query& greater_equal_float(size_t column_ndx1, size_t column_ndx2); - Query& less_float(size_t column_ndx1, size_t column_ndx2); - Query& less_equal_float(size_t column_ndx1, size_t column_ndx2); - - // Conditions: double - Query& equal(size_t column_ndx, double value); - Query& not_equal(size_t column_ndx, double value); - Query& greater(size_t column_ndx, double value); - Query& greater_equal(size_t column_ndx, double value); - Query& less(size_t column_ndx, double value); - Query& less_equal(size_t column_ndx, double value); - Query& between(size_t column_ndx, double from, double to); - - // Conditions: 2 double columns - Query& equal_double(size_t column_ndx1, size_t column_ndx2); - Query& not_equal_double(size_t column_ndx1, size_t column_ndx2); - Query& greater_double(size_t column_ndx1, size_t column_ndx2); - Query& greater_equal_double(size_t column_ndx1, size_t column_ndx2); - Query& less_double(size_t column_ndx1, size_t column_ndx2); - Query& less_equal_double(size_t column_ndx1, size_t column_ndx2); - - Query& equal(size_t column_ndx, Timestamp value); - Query& not_equal(size_t column_ndx, Timestamp value); - Query& greater(size_t column_ndx, Timestamp value); - Query& greater_equal(size_t column_ndx, Timestamp value); - Query& less_equal(size_t column_ndx, Timestamp value); - Query& less(size_t column_ndx, Timestamp value); - - // Conditions: bool - Query& equal(size_t column_ndx, bool value); - - // Conditions: date - Query& equal_olddatetime(size_t column_ndx, OldDateTime value) { return equal(column_ndx, int64_t(value.get_olddatetime())); } - Query& not_equal_olddatetime(size_t column_ndx, OldDateTime value) { return not_equal(column_ndx, int64_t(value.get_olddatetime())); } - Query& greater_olddatetime(size_t column_ndx, OldDateTime value) { return greater(column_ndx, int64_t(value.get_olddatetime())); } - Query& greater_equal_olddatetime(size_t column_ndx, OldDateTime value) { return greater_equal(column_ndx, int64_t(value.get_olddatetime())); } - Query& less_olddatetime(size_t column_ndx, OldDateTime value) { return less(column_ndx, int64_t(value.get_olddatetime())); } - Query& less_equal_olddatetime(size_t column_ndx, OldDateTime value) { return less_equal(column_ndx, int64_t(value.get_olddatetime())); } - Query& between_olddatetime(size_t column_ndx, OldDateTime from, OldDateTime to) { return between(column_ndx, int64_t(from.get_olddatetime()), int64_t(to.get_olddatetime())); } - - // Conditions: strings - Query& equal(size_t column_ndx, StringData value, bool case_sensitive=true); - Query& not_equal(size_t column_ndx, StringData value, bool case_sensitive=true); - Query& begins_with(size_t column_ndx, StringData value, bool case_sensitive=true); - Query& ends_with(size_t column_ndx, StringData value, bool case_sensitive=true); - Query& contains(size_t column_ndx, StringData value, bool case_sensitive=true); - - // These are shortcuts for equal(StringData(c_str)) and - // not_equal(StringData(c_str)), and are needed to avoid unwanted - // implicit conversion of char* to bool. - Query& equal(size_t column_ndx, const char* c_str, bool case_sensitive=true); - Query& not_equal(size_t column_ndx, const char* c_str, bool case_sensitive=true); - - // Conditions: binary data - Query& equal(size_t column_ndx, BinaryData value); - Query& not_equal(size_t column_ndx, BinaryData value); - Query& begins_with(size_t column_ndx, BinaryData value); - Query& ends_with(size_t column_ndx, BinaryData value); - Query& contains(size_t column_ndx, BinaryData value); - - // Negation - Query& Not(); - - // Grouping - Query& group(); - Query& end_group(); - Query& subtable(size_t column); - Query& end_subtable(); - Query& Or(); - - Query& and_query(const Query& q); - Query& and_query(Query&& q); - Query operator||(const Query& q); - Query operator&&(const Query& q); - Query operator!(); - - - // Searching - size_t find(size_t begin_at_table_row=size_t(0)); - TableView find_all(size_t start = 0, size_t end=size_t(-1), size_t limit = size_t(-1)); - ConstTableView find_all(size_t start = 0, size_t end=size_t(-1), size_t limit = size_t(-1)) const; - - // Aggregates - size_t count(size_t start = 0, size_t end=size_t(-1), size_t limit = size_t(-1)) const; - - int64_t sum_int(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)) const; - - double average_int(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)) const; - - int64_t maximum_int(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - int64_t minimum_int(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - double sum_float( size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)) const; - - double average_float(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)) const; - - float maximum_float(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - float minimum_float(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - double sum_double( size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)) const; - - double average_double(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)) const; - - double maximum_double(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - double minimum_double(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - OldDateTime maximum_olddatetime(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - OldDateTime minimum_olddatetime(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1), size_t* return_ndx = nullptr) const; - - Timestamp maximum_timestamp(size_t column_ndx, size_t* return_ndx, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)); - - Timestamp minimum_timestamp(size_t column_ndx, size_t* return_ndx, size_t start = 0, size_t end = size_t(-1), - size_t limit = size_t(-1)); - - // Deletion - size_t remove(size_t start = 0, size_t end=size_t(-1), size_t limit = size_t(-1)); - -#if REALM_MULTITHREAD_QUERY - // Multi-threading - TableView find_all_multi(size_t start = 0, size_t end=size_t(-1)); - ConstTableView find_all_multi(size_t start = 0, size_t end=size_t(-1)) const; - int set_threads(unsigned int threadcount); -#endif - - TableRef& get_table() {return m_table;} - - // True if matching rows are guaranteed to be returned in table order. - bool produces_results_in_table_order() const { return !m_view; } - - // Calls sync_if_needed on the restricting view, if present. - // Returns the current version of the table(s) this query depends on, - // or util::none if the query is not associated with a table. - util::Optional sync_view_if_needed() const; - - std::string validate(); - -protected: - Query(Table& table, TableViewBase* tv = nullptr); - void create(); - - void init(const Table& table) const; - bool is_initialized() const; - size_t find_internal(size_t start = 0, size_t end=size_t(-1)) const; - size_t peek_tableview(size_t tv_index) const; - void handle_pending_not(); - void set_table(TableRef tr); - - static bool comp(const std::pair& a, const std::pair& b); - -public: - using HandoverPatch = QueryHandoverPatch; - - virtual std::unique_ptr clone_for_handover(std::unique_ptr& patch, - ConstSourcePayload mode) const - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new Query(*this, *patch, mode)); - return retval; - } - - virtual std::unique_ptr clone_for_handover(std::unique_ptr& patch, - MutableSourcePayload mode) - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new Query(*this, *patch, mode)); - return retval; - } - - virtual void apply_and_consume_patch(std::unique_ptr& patch, Group& group) - { - apply_patch(*patch, group); - patch.reset(); - } - - void apply_patch(HandoverPatch& patch, Group& group); - Query(const Query& source, HandoverPatch& patch, ConstSourcePayload mode); - Query(Query& source, HandoverPatch& patch, MutableSourcePayload mode); -private: - void fetch_descriptor(); - - void add_expression_node(std::unique_ptr); - - template - Query& equal(size_t column_ndx1, size_t column_ndx2); - - template - Query& less(size_t column_ndx1, size_t column_ndx2); - - template - Query& less_equal(size_t column_ndx1, size_t column_ndx2); - - template - Query& greater(size_t column_ndx1, size_t column_ndx2); - - template - Query& greater_equal(size_t column_ndx1, size_t column_ndx2); - - template - Query& not_equal(size_t column_ndx1, size_t column_ndx2); - - template - Query& add_condition(size_t column_ndx, T value); - - template - double average(size_t column_ndx, size_t* resultcount = nullptr, size_t start = 0, - size_t end=size_t(-1), size_t limit = size_t(-1)) const; - - template - R aggregate(R (ColClass::*method)(size_t, size_t, size_t, size_t*) const, - size_t column_ndx, size_t* resultcount, size_t start, size_t end, size_t limit, - size_t* return_ndx = nullptr) const; - - void aggregate_internal(Action TAction, DataType TSourceColumn, bool nullable, - ParentNode* pn, QueryStateBase* st, - size_t start, size_t end, SequentialGetterBase* source_column) const; - - void find_all(TableViewBase& tv, size_t start = 0, size_t end=size_t(-1), size_t limit = size_t(-1)) const; - void delete_nodes() noexcept; - - bool has_conditions() const { return m_groups.size() > 0 && m_groups[0].m_root_node; } - ParentNode* root_node() const - { - REALM_ASSERT(m_groups.size()); - return m_groups[0].m_root_node.get(); - } - - void add_node(std::unique_ptr); - - friend class Table; - friend class TableViewBase; - - std::string error_code; - - std::vector m_groups; - - // Used to access schema while building query: - std::vector m_subtable_path; - - ConstDescriptorRef m_current_descriptor; - TableRef m_table; - - // points to the base class of the restricting view. If the restricting - // view is a link view, m_source_link_view is non-zero. If it is a table view, - // m_source_table_view is non-zero. - RowIndexes* m_view = nullptr; - - // At most one of these can be non-zero, and if so the non-zero one indicates the restricting view. - LinkViewRef m_source_link_view; // link views are refcounted and shared. - TableViewBase* m_source_table_view = nullptr; // table views are not refcounted, and not owned by the query. - std::unique_ptr m_owned_source_table_view; // <--- except when indicated here -}; - -// Implementation: - -inline Query& Query::equal(size_t column_ndx, const char* c_str, bool case_sensitive) -{ - return equal(column_ndx, StringData(c_str), case_sensitive); -} - -inline Query& Query::not_equal(size_t column_ndx, const char* c_str, bool case_sensitive) -{ - return not_equal(column_ndx, StringData(c_str), case_sensitive); -} - -} // namespace realm - -#endif // REALM_QUERY_HPP diff --git a/Pods/Realm/include/core/realm/query_conditions.hpp b/Pods/Realm/include/core/realm/query_conditions.hpp deleted file mode 100644 index c32cc9a0..00000000 --- a/Pods/Realm/include/core/realm/query_conditions.hpp +++ /dev/null @@ -1,387 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_QUERY_CONDITIONS_HPP -#define REALM_QUERY_CONDITIONS_HPP - -#include -#include - -#include -#include -#include - -namespace realm { - -// Array::VTable only uses the first 4 conditions (enums) in an array of function pointers -enum {cond_Equal, cond_NotEqual, cond_Greater, cond_Less, cond_VTABLE_FINDER_COUNT, cond_None, cond_LeftNotNull }; - -// Quick hack to make "Queries with Integer null columns" able to compile in Visual Studio 2015 which doesn't full support sfinae -// (real cause hasn't been investigated yet, cannot exclude that we don't obey c++11 standard) -struct HackClass -{ - template - bool can_match(A, B, C) { REALM_ASSERT(false); return false; } - template - bool will_match(A, B, C) { REALM_ASSERT(false); return false; } -}; - -// Does v2 contain v1? -struct Contains : public HackClass { - bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const { return v2.contains(v1); } - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const { return v2.contains(v1); } - bool operator()(BinaryData v1, BinaryData v2, bool = false, bool = false) const { return v2.contains(v1); } - - template bool operator()(A, B) const { REALM_ASSERT(false); return false; } - template bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - bool operator()(int64_t, int64_t, bool, bool) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -// Does v2 begin with v1? -struct BeginsWith : public HackClass { - bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const { return v2.begins_with(v1); } - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const { return v2.begins_with(v1); } - bool operator()(BinaryData v1, BinaryData v2, bool = false, bool = false) const { return v2.begins_with(v1); } - - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - template - bool operator()(A, B) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -// Does v2 end with v1? -struct EndsWith : public HackClass { - bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const { return v2.ends_with(v1); } - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const { return v2.ends_with(v1); } - bool operator()(BinaryData v1, BinaryData v2, bool = false, bool = false) const { return v2.ends_with(v1); } - - template - bool operator()(A, B) const { REALM_ASSERT(false); return false; } - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -struct Equal { - static const int avx = 0x00; // _CMP_EQ_OQ -// bool operator()(const bool v1, const bool v2, bool v1null = false, bool v2null = false) const { return v1 == v2; } - bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const - { - return v1 == v2; - } - bool operator()(BinaryData v1, BinaryData v2, bool = false, bool = false) const { return v1 == v2; } - - template - bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const - { - return (v1null && v2null) || (!v1null && !v2null && v1 == v2); - } - static const int condition = cond_Equal; - bool can_match(int64_t v, int64_t lbound, int64_t ubound) { return (v >= lbound && v <= ubound); } - bool will_match(int64_t v, int64_t lbound, int64_t ubound) { return (v == 0 && ubound == 0 && lbound == 0); } -}; - -struct NotEqual { - static const int avx = 0x0B; // _CMP_FALSE_OQ - bool operator()(StringData v1, const char*, const char*, StringData v2, bool = false, bool = false) const { return v1 != v2; } - // bool operator()(BinaryData v1, BinaryData v2, bool = false, bool = false) const { return v1 != v2; } - - template - bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const - { - if (!v1null && !v2null) - return v1 != v2; - - if (v1null && v2null) - return false; - - return true; - } - - static const int condition = cond_NotEqual; - bool can_match(int64_t v, int64_t lbound, int64_t ubound) { return !(v == 0 && ubound == 0 && lbound == 0); } - bool will_match(int64_t v, int64_t lbound, int64_t ubound) { return (v > ubound || v < lbound); } - - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } -}; - -// Does v2 contain v1? -struct ContainsIns : public HackClass { - bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false, bool = false) const - { - if (v2.is_null() && !v1.is_null()) - return false; - - if (v1.size() == 0 && !v2.is_null()) - return true; - - return search_case_fold(v2, v1_upper, v1_lower, v1.size()) != v2.size(); - } - - // Slow version, used if caller hasn't stored an upper and lower case version - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const - { - if (v2.is_null() && !v1.is_null()) - return false; - - if (v1.size() == 0 && !v2.is_null()) - return true; - - std::string v1_upper = case_map(v1, true, IgnoreErrors); - std::string v1_lower = case_map(v1, false, IgnoreErrors); - return search_case_fold(v2, v1_upper.c_str(), v1_lower.c_str(), v1.size()) != v2.size(); - } - - template bool operator()(A, B) const { REALM_ASSERT(false); return false; } - template bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - bool operator()(int64_t, int64_t, bool, bool) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -// Does v2 begin with v1? -struct BeginsWithIns : public HackClass { - bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false, bool = false) const - { - if (v2.is_null() && !v1.is_null()) - return false; - return v1.size() <= v2.size() && equal_case_fold(v2.prefix(v1.size()), v1_upper, v1_lower); - } - - // Slow version, used if caller hasn't stored an upper and lower case version - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const - { - if (v2.is_null() && !v1.is_null()) - return false; - - if (v1.size() > v2.size()) - return false; - std::string v1_upper = case_map(v1, true, IgnoreErrors); - std::string v1_lower = case_map(v1, false, IgnoreErrors); - return equal_case_fold(v2.prefix(v1.size()), v1_upper.c_str(), v1_lower.c_str()); - } - - template bool operator()(A, B) const { REALM_ASSERT(false); return false; } - template bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - bool operator()(int64_t, int64_t, bool, bool) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -// Does v2 end with v1? -struct EndsWithIns : public HackClass { - bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false, bool = false) const - { - if (v2.is_null() && !v1.is_null()) - return false; - - return v1.size() <= v2.size() && equal_case_fold(v2.suffix(v1.size()), v1_upper, v1_lower); - } - - // Slow version, used if caller hasn't stored an upper and lower case version - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const - { - if (v2.is_null() && !v1.is_null()) - return false; - - if (v1.size() > v2.size()) - return false; - std::string v1_upper = case_map(v1, true, IgnoreErrors); - std::string v1_lower = case_map(v1, false, IgnoreErrors); - return equal_case_fold(v2.suffix(v1.size()), v1_upper.c_str(), v1_lower.c_str()); - } - - template bool operator()(A, B) const { REALM_ASSERT(false); return false; } - template bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - bool operator()(int64_t, int64_t, bool, bool) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -struct EqualIns : public HackClass { - bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false, bool = false) const - { - if (v1.is_null() != v2.is_null()) - return false; - - return v1.size() == v2.size() && equal_case_fold(v2, v1_upper, v1_lower); - } - - // Slow version, used if caller hasn't stored an upper and lower case version - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const - { - if (v1.is_null() != v2.is_null()) - return false; - - if (v1.size() != v2.size()) - return false; - std::string v1_upper = case_map(v1, true, IgnoreErrors); - std::string v1_lower = case_map(v1, false, IgnoreErrors); - return equal_case_fold(v2, v1_upper.c_str() , v1_lower.c_str()); - } - - template bool operator()(A, B) const { REALM_ASSERT(false); return false; } - template bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - bool operator()(int64_t, int64_t, bool, bool) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -struct NotEqualIns : public HackClass { - bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false, bool = false) const - { - if (v1.is_null() != v2.is_null()) - return true; - return v1.size() != v2.size() || !equal_case_fold(v2, v1_upper, v1_lower); - } - - // Slow version, used if caller hasn't stored an upper and lower case version - bool operator()(StringData v1, StringData v2, bool = false, bool = false) const - { - if (v1.is_null() != v2.is_null()) - return true; - - if (v1.size() != v2.size()) - return true; - std::string v1_upper = case_map(v1, true, IgnoreErrors); - std::string v1_lower = case_map(v1, false, IgnoreErrors); - return !equal_case_fold(v2, v1_upper.c_str(), v1_lower.c_str()); - } - - template - bool operator()(A, B) const { REALM_ASSERT(false); return false; } - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - - static const int condition = -1; -}; - -struct Greater { - static const int avx = 0x1E; // _CMP_GT_OQ - template - bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const - { - if (v1null || v2null) - return false; - - return v1 > v2; - } - static const int condition = cond_Greater; - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - - bool can_match(int64_t v, int64_t lbound, int64_t ubound) { static_cast(lbound); return ubound > v; } - bool will_match(int64_t v, int64_t lbound, int64_t ubound) { static_cast(ubound); return lbound > v; } -}; - -struct None { - template - bool operator()(const T&, const T&, bool = false, bool = false) const {return true;} - static const int condition = cond_None; - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - bool can_match(int64_t v, int64_t lbound, int64_t ubound) {static_cast(lbound); static_cast(ubound); static_cast(v); return true; } - bool will_match(int64_t v, int64_t lbound, int64_t ubound) {static_cast(lbound); static_cast(ubound); static_cast(v); return true; } -}; - -struct NotNull { - template - bool operator()(const T&, const T&, bool v = false, bool = false) const { return !v; } - static const int condition = cond_LeftNotNull; - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - bool can_match(int64_t v, int64_t lbound, int64_t ubound) { static_cast(lbound); static_cast(ubound); static_cast(v); return true; } - bool will_match(int64_t v, int64_t lbound, int64_t ubound) { static_cast(lbound); static_cast(ubound); static_cast(v); return true; } -}; - - -struct Less { - static const int avx = 0x11; // _CMP_LT_OQ - template - bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const { - if (v1null || v2null) - return false; - - return v1 < v2; - } - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - static const int condition = cond_Less; - bool can_match(int64_t v, int64_t lbound, int64_t ubound) { static_cast(ubound); return lbound < v; } - bool will_match(int64_t v, int64_t lbound, int64_t ubound) { static_cast(lbound); return ubound < v; } -}; - -struct LessEqual : public HackClass { - static const int avx = 0x12; // _CMP_LE_OQ - template - bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const { - if (v1null && v2null) - return true; - - return (!v1null && !v2null && v1 <= v2); - } - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - static const int condition = -1; -}; - -struct GreaterEqual : public HackClass { - static const int avx = 0x1D; // _CMP_GE_OQ - template - bool operator()(const T& v1, const T& v2, bool v1null = false, bool v2null = false) const { - if (v1null && v2null) - return true; - - return (!v1null && !v2null && v1 >= v2); - } - template - bool operator()(A, B, C, D) const { REALM_ASSERT(false); return false; } - static const int condition = -1; -}; - - -// CompareLess is a temporary hack to have a generalized way to compare any realm types. Todo, enable correct < -// operator of StringData (currently gives circular header dependency with utf8.hpp) -template -struct CompareLess -{ - static bool compare(T v1, T v2, bool = false, bool = false) - { - return v1 < v2; - } -}; -template<> -struct CompareLess -{ - static bool compare(StringData v1, StringData v2, bool = false, bool = false) - { - bool ret = utf8_compare(v1.data(), v2.data()); - return ret; - } -}; - -} // namespace realm - -#endif // REALM_QUERY_CONDITIONS_HPP diff --git a/Pods/Realm/include/core/realm/query_engine.hpp b/Pods/Realm/include/core/realm/query_engine.hpp deleted file mode 100644 index fd802a32..00000000 --- a/Pods/Realm/include/core/realm/query_engine.hpp +++ /dev/null @@ -1,1785 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -/* -A query consists of node objects, one for each query condition. Each node contains pointers to all other nodes: - -node1 node2 node3 ------- ----- ----- -node2* node1* node1* -node3* node3* node2* - -The construction of all this takes part in query.cpp. Each node has two important functions: - - aggregate(start, end) - aggregate_local(start, end) - -The aggregate() function executes the aggregate of a query. You can call the method on any of the nodes -(except children nodes of OrNode and SubtableNode) - it has the same behaviour. The function contains -scheduling that calls aggregate_local(start, end) on different nodes with different start/end ranges, -depending on what it finds is most optimal. - -The aggregate_local() function contains a tight loop that tests the condition of its own node, and upon match -it tests all other conditions at that index to report a full match or not. It will remain in the tight loop -after a full match. - -So a call stack with 2 and 9 being local matches of a node could look like this: - -aggregate(0, 10) - node1->aggregate_local(0, 3) - node2->find_first_local(2, 3) - node3->find_first_local(2, 3) - node3->aggregate_local(3, 10) - node1->find_first_local(4, 5) - node2->find_first_local(4, 5) - node1->find_first_local(7, 8) - node2->find_first_local(7, 8) - -find_first_local(n, n + 1) is a function that can be used to test a single row of another condition. Note that -this is very simplified. There are other statistical arguments to the methods, and also, find_first_local() can be -called from a callback function called by an integer Array. - - -Template arguments in methods: ----------------------------------------------------------------------------------------------------- - -TConditionFunction: Each node has a condition from query_conditions.c such as Equal, GreaterEqual, etc - -TConditionValue: Type of values in condition column. That is, int64_t, float, int, bool, etc - -TAction: What to do with each search result, from the enums act_ReturnFirst, act_Count, act_Sum, etc - -TResult: Type of result of actions - float, double, int64_t, etc. Special notes: For act_Count it's - int64_t, for RLM_FIND_ALL it's int64_t which points at destination array. - -TSourceColumn: Type of source column used in actions, or *ignored* if no source column is used (like for - act_Count, act_ReturnFirst) - - -There are two important classes used in queries: ----------------------------------------------------------------------------------------------------- -SequentialGetter Column iterator used to get successive values with leaf caching. Used both for condition columns - and aggregate source column - -AggregateState State of the aggregate - contains a state variable that stores intermediate sum, max, min, - etc, etc. - -*/ - -#ifndef REALM_QUERY_ENGINE_HPP -#define REALM_QUERY_ENGINE_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#if _MSC_FULL_VER >= 160040219 -# include -#endif - -namespace realm { - -// Number of matches to find in best condition loop before breaking out to probe other conditions. Too low value gives too many -// constant time overheads everywhere in the query engine. Too high value makes it adapt less rapidly to changes in match -// frequencies. -const size_t findlocals = 64; - -// Average match distance in linear searches where further increase in distance no longer increases query speed (because time -// spent on handling each match becomes insignificant compared to time spent on the search). -const size_t bestdist = 512; - -// Minimum number of matches required in a certain condition before it can be used to compute statistics. Too high value can spent -// too much time in a bad node (with high match frequency). Too low value gives inaccurate statistics. -const size_t probe_matches = 4; - -const size_t bitwidth_time_unit = 64; - -typedef bool (*CallbackDummy)(int64_t); - - -class ParentNode { - typedef ParentNode ThisType; -public: - ParentNode() = default; - virtual ~ParentNode() = default; - - void gather_children(std::vector& v) - { - m_children.clear(); - size_t i = v.size(); - v.push_back(this); - - if (m_child) - m_child->gather_children(v); - - m_children = v; - m_children.erase(m_children.begin() + i); - m_children.insert(m_children.begin(), this); - } - - struct score_compare { - bool operator ()(const ParentNode* a, const ParentNode* b) const { return a->cost() < b->cost(); } - }; - - double cost() const - { - return 8 * bitwidth_time_unit / m_dD + m_dT; // dt = 1/64 to 1. Match dist is 8 times more important than bitwidth - } - - size_t find_first(size_t start, size_t end); - - virtual void init(const Table& table) - { - m_table = &table; - if (m_child) - m_child->init(table); - m_column_action_specializer = nullptr; - } - - virtual bool is_initialized() const - { - return m_table != nullptr; - } - - virtual size_t find_first_local(size_t start, size_t end) = 0; - - virtual void aggregate_local_prepare(Action TAction, DataType col_id, bool nullable); - - template - bool column_action_specialization(QueryStateBase* st, SequentialGetterBase* source_column, size_t r) - { - // TResult: type of query result - // TSourceValue: type of aggregate source - using TSourceValue = typename TSourceColumn::value_type; - using TResult = typename ColumnTypeTraitsSum::sum_type; - - // Sum of float column must accumulate in double - static_assert( !(TAction == act_Sum && (std::is_same::value && - !std::is_same::value)), ""); - - TSourceValue av{}; - // uses_val test because compiler cannot see that IntegerColumn::get has no side effect and result is discarded - if (static_cast*>(st)->template uses_val() && source_column != nullptr) { - REALM_ASSERT_DEBUG(dynamic_cast*>(source_column) != nullptr); - av = static_cast*>(source_column)->get_next(r); - } - REALM_ASSERT_DEBUG(dynamic_cast*>(st) != nullptr); - bool cont = static_cast*>(st)->template match(r, 0, av); - return cont; - } - - virtual size_t aggregate_local(QueryStateBase* st, size_t start, size_t end, size_t local_limit, - SequentialGetterBase* source_column); - - - virtual std::string validate() - { - if (error_code != "") - return error_code; - if (m_child == nullptr) - return ""; - else - return m_child->validate(); - } - - ParentNode(const ParentNode& from, QueryNodeHandoverPatches* patches) : - m_child(from.m_child ? from.m_child->clone(patches) : nullptr), - m_condition_column_idx(from.m_condition_column_idx), m_dD(from.m_dD), m_dT(from.m_dT), - m_probes(from.m_probes), m_matches(from.m_matches) - { - } - - void add_child(std::unique_ptr child) - { - if (m_child) - m_child->add_child(std::move(child)); - else - m_child = std::move(child); - } - - virtual std::unique_ptr clone(QueryNodeHandoverPatches* = nullptr) const = 0; - - virtual void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) - { - if (m_child) - m_child->apply_handover_patch(patches, group); - } - - std::unique_ptr m_child; - std::vector m_children; - size_t m_condition_column_idx = npos; // Column of search criteria - - double m_dD; // Average row distance between each local match at current position - double m_dT; // Time overhead of testing index i + 1 if we have just tested index i. > 1 for linear scans, 0 for index/tableview - - size_t m_probes = 0; - size_t m_matches = 0; -protected: - typedef bool (ParentNode::* Column_action_specialized)(QueryStateBase*, SequentialGetterBase*, size_t); - Column_action_specialized m_column_action_specializer; - const Table* m_table; - std::string error_code; - - const ColumnBase& get_column_base(const Table& table, size_t ndx) - { - return table.get_column_base(ndx); - } - - ColumnType get_real_column_type(const Table& table, size_t ndx) - { - return table.get_real_column_type(ndx); - } -}; - -// Used for performing queries on a Tableview. This is done by simply passing the TableView to this query condition -class ListviewNode: public ParentNode { -public: - ListviewNode(TableView& tv) : m_size(tv.size()), m_tv(tv) { m_dT = 0.0; } - - // Return the n'th table row index contained in the TableView. - size_t tableindex(size_t n) - { - return to_size_t(m_tv.m_row_indexes.get(n)); - } - - void init(const Table& table) override - { - m_table = &table; - - m_dD = m_table->size() / (m_tv.size() + 1.0); - - m_next = 0; - if (m_size > 0) - m_max = tableindex(m_size - 1); - if (m_child) m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - // Simply return index of first table row which is >= start - size_t r; - r = m_tv.m_row_indexes.find_gte(start, m_next); - - if (r >= end) - return not_found; - - m_next = r; - return tableindex(r); - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new ListviewNode(*this, patches)); - } - - ListviewNode(const ListviewNode& from, QueryNodeHandoverPatches* patches) - : ParentNode(from, patches), m_max(from.m_max), m_next(from.m_next), m_size(from.m_size), m_tv(from.m_tv) - { - } - -protected: - size_t m_max = 0; - size_t m_next = 0; - size_t m_size; - - TableView& m_tv; -}; - -// For conditions on a subtable (encapsulated in subtable()...end_subtable()). These return the parent row as match if and -// only if one or more subtable rows match the condition. -class SubtableNode: public ParentNode { -public: - SubtableNode(size_t column, std::unique_ptr condition) : - m_condition(std::move(condition)), m_column(column) - { - m_dT = 100.0; - } - - void init(const Table& table) override - { - m_dD = 10.0; - m_table = &table; - - // m_condition is first node in condition of subtable query. - if (m_condition) { - // Can't call init() here as usual since the subtable can be degenerate - // m_condition->init(table); - std::vector v; - m_condition->gather_children(v); - } - - // m_child is next node of parent query - if (m_child) - m_child->init(table); - } - - std::string validate() override - { - if (error_code != "") - return error_code; - if (m_condition == nullptr) - return "Unbalanced subtable/end_subtable block"; - else - return m_condition->validate(); - } - - size_t find_first_local(size_t start, size_t end) override - { - REALM_ASSERT(m_table); - REALM_ASSERT(m_condition); - - for (size_t s = start; s < end; ++s) { - ConstTableRef subtable = m_table->get_subtable(m_column, s); - - if (subtable->is_degenerate()) - return not_found; - - m_condition->init(*subtable); - const size_t subsize = subtable->size(); - const size_t sub = m_condition->find_first(0, subsize); - - if (sub != not_found) - return s; - } - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new SubtableNode(*this, patches)); - } - - SubtableNode(const SubtableNode& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_condition(from.m_condition ? from.m_condition->clone(patches) : nullptr), m_column(from.m_column) - { - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - m_condition->apply_handover_patch(patches, group); - ParentNode::apply_handover_patch(patches, group); - } - - std::unique_ptr m_condition; - size_t m_column = npos; -}; - -namespace _impl { - -template -struct CostHeuristic; - -template<> -struct CostHeuristic -{ - static const double dD; - static const double dT; -}; - -template<> -struct CostHeuristic -{ - static const double dD; - static const double dT; -}; - -// FIXME: Add AdaptiveStringColumn, BasicColumn, etc. - -} - -class ColumnNodeBase : public ParentNode -{ -protected: - ColumnNodeBase(size_t column_idx) - { - m_condition_column_idx = column_idx; - } - - ColumnNodeBase(const ColumnNodeBase& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_last_local_match(from.m_last_local_match), m_local_matches(from.m_local_matches), - m_local_limit(from.m_local_limit), m_fastmode_disabled(from.m_fastmode_disabled), m_action(from.m_action), - m_state(from.m_state), m_source_column(from.m_source_column) - { - } - - template - bool match_callback(int64_t v) - { - using TSourceValue = typename ColType::value_type; - using QueryStateType = typename ColumnTypeTraitsSum::sum_type; - - size_t i = to_size_t(v); - m_last_local_match = i; - m_local_matches++; - - auto state = static_cast*>(m_state); - auto source_column = static_cast*>(m_source_column); - - // Test remaining sub conditions of this node. m_children[0] is the node that called match_callback(), so skip it - for (size_t c = 1; c < m_children.size(); c++) { - m_children[c]->m_probes++; - size_t m = m_children[c]->find_first_local(i, i + 1); - if (m != i) - return true; - } - - bool b; - if (state->template uses_val()) { // Compiler cannot see that IntegerColumn::Get has no side effect and result is discarded - TSourceValue av = source_column->get_next(i); - b = state->template match(i, 0, av); - } - else { - b = state->template match(i, 0, TSourceValue{}); - } - - return b; - } - - // Aggregate bookkeeping - size_t m_last_local_match = npos; - size_t m_local_matches = 0; - size_t m_local_limit = 0; - bool m_fastmode_disabled = false; - Action m_action; - QueryStateBase* m_state = nullptr; - SequentialGetterBase* m_source_column = nullptr; // Column of values used in aggregate (act_FindAll, actReturnFirst, act_Sum, etc) -}; - -template -class IntegerNodeBase : public ColumnNodeBase -{ - using ThisType = IntegerNodeBase; -public: - using TConditionValue = typename ColType::value_type; - static const bool nullable = ColType::nullable; - - template - bool find_callback_specialization(size_t s, size_t end_in_leaf) - { - using AggregateColumnType = typename GetColumnType::type; - bool cont; - size_t start_in_leaf = s - this->m_leaf_start; - cont = this->m_leaf_ptr->template find - (m_value, start_in_leaf, end_in_leaf, this->m_leaf_start, nullptr, - std::bind1st(std::mem_fun(&ThisType::template match_callback), this)); - return cont; - } - -protected: - using LeafType = typename ColType::LeafType; - using LeafInfo = typename ColType::LeafInfo; - - size_t aggregate_local_impl(QueryStateBase* st, size_t start, size_t end, size_t local_limit, - SequentialGetterBase* source_column, int c) - { - REALM_ASSERT(m_children.size() > 0); - m_local_matches = 0; - m_local_limit = local_limit; - m_last_local_match = start - 1; - m_state = st; - - // If there are no other nodes than us (m_children.size() == 1) AND the column used for our condition is - // the same as the column used for the aggregate action, then the entire query can run within scope of that - // column only, with no references to other columns: - bool fastmode = should_run_in_fastmode(source_column); - for (size_t s = start; s < end; ) { - cache_leaf(s); - - size_t end_in_leaf; - if (end > m_leaf_end) - end_in_leaf = m_leaf_end - m_leaf_start; - else - end_in_leaf = end - m_leaf_start; - - if (fastmode) { - bool cont; - size_t start_in_leaf = s - m_leaf_start; - cont = m_leaf_ptr->find(c, m_action, m_value, start_in_leaf, end_in_leaf, m_leaf_start, static_cast*>(st)); - if (!cont) - return not_found; - } - // Else, for each match in this node, call our IntegerNodeBase::match_callback to test remaining nodes and/or extract - // aggregate payload from aggregate column: - else { - m_source_column = source_column; - bool cont = (this->*m_find_callback_specialized)(s, end_in_leaf); - if (!cont) - return not_found; - } - - if (m_local_matches == m_local_limit) - break; - - s = end_in_leaf + m_leaf_start; - } - - if (m_local_matches == m_local_limit) { - m_dD = (m_last_local_match + 1 - start) / (m_local_matches + 1.0); - return m_last_local_match + 1; - } - else { - m_dD = (end - start) / (m_local_matches + 1.0); - return end; - } - } - - IntegerNodeBase(TConditionValue value, size_t column_idx) : ColumnNodeBase(column_idx), - m_value(std::move(value)) - { - m_dT = _impl::CostHeuristic::dT; - m_dD = _impl::CostHeuristic::dD; - } - - IntegerNodeBase(const ThisType& from, QueryNodeHandoverPatches* patches) : ColumnNodeBase(from, patches), - m_value(from.m_value), m_condition_column(from.m_condition_column), - m_find_callback_specialized(from.m_find_callback_specialized) - { - // state is transient/only valid during search, no need to copy - m_dT = _impl::CostHeuristic::dT; - m_dD = _impl::CostHeuristic::dD; - } - - void init(const Table& table) override - { - ColumnNodeBase::init(table); - - m_dD = _impl::CostHeuristic::dD; - - const ColumnBase* col = &get_column_base(table, m_condition_column_idx); - REALM_ASSERT_DEBUG(dynamic_cast(col) != nullptr); - m_condition_column = static_cast(col); - m_table = &table; - - // Clear leaf cache - m_leaf_end = 0; - m_array_ptr.reset(); // Explicitly destroy the old one first, because we're reusing the memory. - m_array_ptr.reset(new(&m_leaf_cache_storage) LeafType(table.get_alloc())); - - if (m_child) { - m_child->init(table); - } - } - - void get_leaf(const ColType& col, size_t ndx) - { - size_t ndx_in_leaf; - LeafInfo leaf_info{&m_leaf_ptr, m_array_ptr.get()}; - col.get_leaf(ndx, ndx_in_leaf, leaf_info); - m_leaf_start = ndx - ndx_in_leaf; - m_leaf_end = m_leaf_start + m_leaf_ptr->size(); - } - - void cache_leaf(size_t s) - { - if (s >= m_leaf_end || s < m_leaf_start) { - get_leaf(*m_condition_column, s); - size_t w = m_leaf_ptr->get_width(); - m_dT = (w == 0 ? 1.0 / REALM_MAX_BPNODE_SIZE : w / float(bitwidth_time_unit)); - } - } - - bool should_run_in_fastmode(SequentialGetterBase* source_column) const - { - return (m_children.size() == 1 && - (source_column == nullptr || - (!m_fastmode_disabled - && static_cast*>(source_column)->m_column == m_condition_column))); - } - - // Search value: - TConditionValue m_value; - - // Column on which search criteria are applied - const ColType* m_condition_column = nullptr; - - // Leaf cache - using LeafCacheStorage = typename std::aligned_storage::type; - LeafCacheStorage m_leaf_cache_storage; - std::unique_ptr m_array_ptr; - const LeafType* m_leaf_ptr = nullptr; - size_t m_leaf_start = npos; - size_t m_leaf_end = 0; - size_t m_local_end; - - // Aggregate optimization - using TFind_callback_specialized = bool(ThisType::*)(size_t, size_t); - TFind_callback_specialized m_find_callback_specialized = nullptr; -}; - -// FIXME: Add specialization that uses index for TConditionFunction = Equal -template -class IntegerNode : public IntegerNodeBase { - using BaseType = IntegerNodeBase; - using ThisType = IntegerNode; -public: - static const bool special_null_node = false; - using TConditionValue = typename BaseType::TConditionValue; - - IntegerNode(TConditionValue value, size_t column_ndx) : IntegerNodeBase(value, column_ndx) - { - } - - void aggregate_local_prepare(Action action, DataType col_id, bool nullable) override - { - this->m_fastmode_disabled = (col_id == type_Float || col_id == type_Double); - this->m_action = action; - this->m_find_callback_specialized = get_specialized_callback(action, col_id, nullable); - } - - size_t aggregate_local(QueryStateBase* st, size_t start, size_t end, size_t local_limit, - SequentialGetterBase* source_column) override - { - constexpr int cond = TConditionFunction::condition; - return this->aggregate_local_impl(st, start, end, local_limit, source_column, cond); - } - - - size_t find_first_local(size_t start, size_t end) override - { - REALM_ASSERT(this->m_table); - - while (start < end) { - - // Cache internal leaves - if (start >= this->m_leaf_end || start < this->m_leaf_start) { - this->get_leaf(*this->m_condition_column, start); - } - - // FIXME: Create a fast bypass when you just need to check 1 row, which is used alot from within core. - // It should just call array::get and save the initial overhead of find_first() which has become quite - // big. Do this when we have cleaned up core a bit more. - - size_t end2; - if (end > this->m_leaf_end) - end2 = this->m_leaf_end - this->m_leaf_start; - else - end2 = end - this->m_leaf_start; - - size_t s; - s = this->m_leaf_ptr->template find_first(this->m_value, start - this->m_leaf_start, end2); - - if (s == not_found) { - start = this->m_leaf_end; - continue; - } - else - return s + this->m_leaf_start; - } - - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new IntegerNode(*this, patches)); - } - - IntegerNode(const IntegerNode& from, QueryNodeHandoverPatches* patches) : BaseType(from, patches) - { - } - -protected: - using TFind_callback_specialized = typename BaseType::TFind_callback_specialized; - - static TFind_callback_specialized get_specialized_callback(Action action, DataType col_id, bool nullable) - { - switch (action) { - case act_Count: return get_specialized_callback_2_int(col_id, nullable); - case act_Sum: return get_specialized_callback_2(col_id, nullable); - case act_Max: return get_specialized_callback_2(col_id, nullable); - case act_Min: return get_specialized_callback_2(col_id, nullable); - case act_FindAll: return get_specialized_callback_2_int(col_id, nullable); - case act_CallbackIdx: return get_specialized_callback_2_int(col_id, nullable); - default: break; - } - REALM_ASSERT(false); // Invalid aggregate function - return nullptr; - } - - template - static TFind_callback_specialized get_specialized_callback_2(DataType col_id, bool nullable) - { - switch (col_id) { - case type_Int: return get_specialized_callback_3(nullable); - case type_Float: return get_specialized_callback_3(nullable); - case type_Double: return get_specialized_callback_3(nullable); - default: break; - } - REALM_ASSERT(false); // Invalid aggregate source column - return nullptr; - } - - template - static TFind_callback_specialized get_specialized_callback_2_int(DataType col_id, bool nullable) - { - if (col_id == type_Int) { - return get_specialized_callback_3(nullable); - } - REALM_ASSERT(false); // Invalid aggregate source column - return nullptr; - } - - template - static TFind_callback_specialized get_specialized_callback_3(bool nullable) - { - if (nullable) { - return &BaseType::template find_callback_specialization; - } else { - return &BaseType::template find_callback_specialization; - } - } -}; - - -// This node is currently used for floats and doubles only -template -class FloatDoubleNode: public ParentNode { -public: - using TConditionValue = typename ColType::value_type; - static const bool special_null_node = false; - - FloatDoubleNode(TConditionValue v, size_t column_ndx) : m_value(v) - { - m_condition_column_idx = column_ndx; - m_dT = 1.0; - } - FloatDoubleNode(null, size_t column_ndx) : m_value(null::get_null_float()) - { - m_condition_column_idx = column_ndx; - m_dT = 1.0; - } - - void init(const Table& table) override - { - m_dD = 100.0; - m_table = &table; - m_condition_column.init(static_cast(&get_column_base(table, m_condition_column_idx))); - - if (m_child) - m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - TConditionFunction cond; - - auto find = [&](bool nullability) { - bool m_value_nan = nullability ? null::is_null_float(m_value) : false; - for (size_t s = start; s < end; ++s) { - TConditionValue v = m_condition_column.get_next(s); - REALM_ASSERT(!(null::is_null_float(v) && !nullability)); - if (cond(v, m_value, nullability ? null::is_null_float(v) : false, m_value_nan)) - return s; - } - return not_found; - }; - - // This will inline the second case but no the first. Todo, use templated lambda when switching to c++14 - if (m_table->is_nullable(m_condition_column_idx)) - return find(true); - else - return find(false); - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new FloatDoubleNode(*this, patches)); - } - - FloatDoubleNode(const FloatDoubleNode& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_value(from.m_value) - { - // m_condition_column is not copied - } - -protected: - TConditionValue m_value; - SequentialGetter m_condition_column; -}; - - -template -class BinaryNode: public ParentNode { -public: - using TConditionValue = BinaryData; - static const bool special_null_node = false; - - template - int64_t find_all(IntegerColumn* /*res*/, size_t /*start*/, size_t /*end*/, size_t /*limit*/, size_t /*source_column*/) {REALM_ASSERT(false); return 0;} - - BinaryNode(BinaryData v, size_t column) : m_value(v) - { - m_dT = 100.0; - m_condition_column_idx = column; - } - - BinaryNode(null, size_t column) : BinaryNode(BinaryData{}, column) - { - } - - void init(const Table& table) override - { - m_dD = 100.0; - m_table = &table; - m_condition_column = static_cast(&get_column_base(table, m_condition_column_idx)); - m_column_type = get_real_column_type(table, m_condition_column_idx); - - if (m_child) - m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - TConditionFunction condition; - for (size_t s = start; s < end; ++s) { - BinaryData value = m_condition_column->get(s); - if (condition(m_value.get(), value)) - return s; - } - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new BinaryNode(*this, patches)); - } - - BinaryNode(const BinaryNode& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_value(from.m_value), m_condition_column(from.m_condition_column), m_column_type(from.m_column_type) - { - } - -private: - OwnedBinaryData m_value; - const BinaryColumn* m_condition_column; - ColumnType m_column_type; -}; - - -template -class TimestampNode : public ParentNode { -public: - using TConditionValue = Timestamp; - static const bool special_null_node = false; - - template - int64_t find_all(IntegerColumn* /*res*/, size_t /*start*/, size_t /*end*/, size_t /*limit*/, size_t /*source_column*/) { REALM_ASSERT(false); return 0; } - - TimestampNode(Timestamp v, size_t column) : m_value(v) - { - m_dT = 100.0; - m_condition_column_idx = column; - } - - TimestampNode(null, size_t column) : TimestampNode(Timestamp(null{}), column) - { - } - - void init(const Table& table) override - { - m_dD = 100.0; - m_table = &table; - m_condition_column = static_cast(&get_column_base(table, m_condition_column_idx)); - REALM_ASSERT(dynamic_cast(&get_column_base(table, m_condition_column_idx))); - m_column_type = get_real_column_type(table, m_condition_column_idx); - REALM_ASSERT_3(m_column_type, == , col_type_Timestamp); - - if (m_child) - m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - size_t ret = m_condition_column->find(m_value, start, end); - return ret; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new TimestampNode(*this, patches)); - } - - TimestampNode(const TimestampNode& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_value(from.m_value), m_condition_column(from.m_condition_column), m_column_type(from.m_column_type) - { - } - -private: - Timestamp m_value; - const TimestampColumn* m_condition_column; - ColumnType m_column_type; -}; - -class StringNodeBase : public ParentNode { -public: - using TConditionValue = StringData; - static const bool special_null_node = true; - - template - int64_t find_all(IntegerColumn*, size_t, size_t, size_t, size_t) - { - REALM_ASSERT(false); - return 0; - } - - StringNodeBase(StringData v, size_t column) : - m_value(v.is_null() ? util::none : util::make_optional(std::string(v))) - { - m_condition_column_idx = column; - m_dT = 10.0; - } - - void init(const Table& table) override - { - m_probes = 0; - m_matches = 0; - m_end_s = 0; - m_leaf_start = 0; - m_leaf_end = 0; - m_table = &table; - m_condition_column = &get_column_base(table, m_condition_column_idx); - m_column_type = get_real_column_type(table, m_condition_column_idx); - } - - void clear_leaf_state() - { - m_leaf.reset(nullptr); - } - - StringNodeBase(const StringNodeBase& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_value(from.m_value), m_condition_column(from.m_condition_column), m_column_type(from.m_column_type), - m_leaf_type(from.m_leaf_type), m_end_s(0), m_leaf_start(0), m_leaf_end(0) - { - } - -protected: - util::Optional m_value; - - const ColumnBase* m_condition_column; - ColumnType m_column_type; - - // Used for linear scan through short/long-string - std::unique_ptr m_leaf; - StringColumn::LeafType m_leaf_type; - size_t m_end_s; - size_t m_leaf_start; - size_t m_leaf_end; - -}; - -// Conditions for strings. Note that Equal is specialized later in this file! -template -class StringNode: public StringNodeBase { -public: - StringNode(StringData v, size_t column) : StringNodeBase(v, column) - { - auto upper = case_map(v, true); - auto lower = case_map(v, false); - if (!upper || !lower) { - error_code = "Malformed UTF-8: " + std::string(v); - } - else { - m_ucase = std::move(*upper); - m_lcase = std::move(*lower); - } - } - - void init(const Table& table) override - { - clear_leaf_state(); - - m_dD = 100.0; - - StringNodeBase::init(table); - - if (m_child) - m_child->init(table); - } - - - size_t find_first_local(size_t start, size_t end) override - { - TConditionFunction cond; - - for (size_t s = start; s < end; ++s) { - StringData t; - - if (m_column_type == col_type_StringEnum) { - // enum - t = static_cast(m_condition_column)->get(s); - } - else { - // short or long - const StringColumn* asc = static_cast(m_condition_column); - REALM_ASSERT_3(s, <, asc->size()); - if (s >= m_end_s || s < m_leaf_start) { - // we exceeded current leaf's range - clear_leaf_state(); - size_t ndx_in_leaf; - m_leaf = asc->get_leaf(s, ndx_in_leaf, m_leaf_type); - m_leaf_start = s - ndx_in_leaf; - - if (m_leaf_type == StringColumn::leaf_type_Small) - m_end_s = m_leaf_start + static_cast(*m_leaf).size(); - else if (m_leaf_type == StringColumn::leaf_type_Medium) - m_end_s = m_leaf_start + static_cast(*m_leaf).size(); - else - m_end_s = m_leaf_start + static_cast(*m_leaf).size(); - } - - if (m_leaf_type == StringColumn::leaf_type_Small) - t = static_cast(*m_leaf).get(s - m_leaf_start); - else if (m_leaf_type == StringColumn::leaf_type_Medium) - t = static_cast(*m_leaf).get(s - m_leaf_start); - else - t = static_cast(*m_leaf).get_string(s - m_leaf_start); - } - if (cond(StringData(m_value), m_ucase.data(), m_lcase.data(), t)) - return s; - } - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new StringNode(*this, patches)); - } - - StringNode(const StringNode& from, QueryNodeHandoverPatches* patches) : StringNodeBase(from, patches), - m_ucase(from.m_ucase), m_lcase(from.m_lcase) - { - } - -protected: - std::string m_ucase; - std::string m_lcase; -}; - - - -// Specialization for Equal condition on Strings - we specialize because we can utilize indexes (if they exist) for Equal. -// Future optimization: make specialization for greater, notequal, etc -template<> -class StringNode: public StringNodeBase { -public: - StringNode(StringData v, size_t column): StringNodeBase(v,column) - { - } - ~StringNode() noexcept override - { - deallocate(); - } - - void deallocate() noexcept - { - // Must be called after each query execution too free temporary resources used by the execution. Run in - // destructor, but also in Init because a user could define a query once and execute it multiple times. - clear_leaf_state(); - - if (m_index_matches_destroy) - m_index_matches->destroy(); - - m_index_matches_destroy = false; - m_index_matches.reset(); - m_index_getter.reset(); - } - - void init(const Table& table) override - { - deallocate(); - m_dD = 10.0; - StringNodeBase::init(table); - - if (m_column_type == col_type_StringEnum) { - m_dT = 1.0; - m_key_ndx = static_cast(m_condition_column)->get_key_ndx(m_value); - } - else if (m_condition_column->has_search_index()) { - m_dT = 0.0; - } - else { - m_dT = 10.0; - } - - if (m_condition_column->has_search_index()) { - - FindRes fr; - size_t index_ref; - - if (m_column_type == col_type_StringEnum) { - fr = static_cast(m_condition_column)->find_all_indexref(m_value, index_ref); - } - else { - fr = static_cast(m_condition_column)->find_all_indexref(m_value, index_ref); - } - - m_index_matches_destroy = false; - m_last_indexed = 0; - m_last_start = 0; - - switch (fr) { - case FindRes_single: - m_index_matches.reset(new IntegerColumn(IntegerColumn::unattached_root_tag(), Allocator::get_default())); // Throws - m_index_matches->get_root_array()->create(Array::type_Normal); // Throws - m_index_matches->add(index_ref); - m_index_matches_destroy = true; // we own m_index_matches, so we must destroy it - break; - - case FindRes_column: - // todo: Apparently we can't use m_index.get_alloc() because it uses default allocator which simply makes - // translate(x) = x. Shouldn't it inherit owner column's allocator?! - m_index_matches.reset(new IntegerColumn(IntegerColumn::unattached_root_tag(), m_condition_column->get_alloc())); // Throws - m_index_matches->get_root_array()->init_from_ref(index_ref); - break; - - case FindRes_not_found: - m_index_matches.reset(); - m_index_getter.reset(); - m_index_size = 0; - break; - } - - if (m_index_matches) { - m_index_getter.reset(new SequentialGetter(m_index_matches.get())); - m_index_size = m_index_getter->m_column->size(); - } - - } - else if (m_column_type != col_type_String) { - REALM_ASSERT_DEBUG(dynamic_cast(m_condition_column)); - m_cse.init(static_cast(m_condition_column)); - } - - if (m_child) - m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - REALM_ASSERT(m_table); - - if (m_condition_column->has_search_index()) { - // Indexed string column - if (!m_index_getter) - return not_found; // no matches in the index - - size_t f = not_found; - - if (m_last_start > start) - m_last_indexed = 0; - m_last_start = start; - - while (f == not_found && m_last_indexed < m_index_size) { - m_index_getter->cache_next(m_last_indexed); - f = m_index_getter->m_leaf_ptr->find_gte(start, m_last_indexed - m_index_getter->m_leaf_start, nullptr); - - if (f >= end || f == not_found) { - m_last_indexed = m_index_getter->m_leaf_end; - } - else { - start = to_size_t(m_index_getter->m_leaf_ptr->get(f)); - if (start >= end) - return not_found; - else { - m_last_indexed = f + m_index_getter->m_leaf_start; - return start; - } - } - } - return not_found; - } - - if (m_column_type != col_type_String) { - // Enum string column - if (m_key_ndx == not_found) - return not_found; // not in key set - - for (size_t s = start; s < end; ++s) { - m_cse.cache_next(s); - s = m_cse.m_leaf_ptr->find_first(m_key_ndx, s - m_cse.m_leaf_start, m_cse.local_end(end)); - if (s == not_found) - s = m_cse.m_leaf_end - 1; - else - return s + m_cse.m_leaf_start; - } - - return not_found; - } - - // Normal string column, with long or short leaf - for (size_t s = start; s < end; ++s) { - const StringColumn* asc = static_cast(m_condition_column); - if (s >= m_leaf_end || s < m_leaf_start) { - clear_leaf_state(); - size_t ndx_in_leaf; - m_leaf = asc->get_leaf(s, ndx_in_leaf, m_leaf_type); - m_leaf_start = s - ndx_in_leaf; - if (m_leaf_type == StringColumn::leaf_type_Small) - m_leaf_end = m_leaf_start + static_cast(*m_leaf).size(); - else if (m_leaf_type == StringColumn::leaf_type_Medium) - m_leaf_end = m_leaf_start + static_cast(*m_leaf).size(); - else - m_leaf_end = m_leaf_start + static_cast(*m_leaf).size(); - REALM_ASSERT(m_leaf); - } - size_t end2 = (end > m_leaf_end ? m_leaf_end - m_leaf_start : end - m_leaf_start); - - if (m_leaf_type == StringColumn::leaf_type_Small) - s = static_cast(*m_leaf).find_first(m_value, s - m_leaf_start, end2); - else if (m_leaf_type == StringColumn::leaf_type_Medium) - s = static_cast(*m_leaf).find_first(m_value, s - m_leaf_start, end2); - else - s = static_cast(*m_leaf).find_first(str_to_bin(m_value), true, s - m_leaf_start, end2); - - if (s == not_found) - s = m_leaf_end - 1; - else - return s + m_leaf_start; - } - - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new StringNode(*this, patches)); - } - - StringNode(const StringNode& from, QueryNodeHandoverPatches* patches) : StringNodeBase(from, patches), - m_index_matches_destroy(false) - { - } - -private: - inline BinaryData str_to_bin(const StringData& s) noexcept - { - return BinaryData(s.data(), s.size()); - } - - size_t m_key_ndx = not_found; - size_t m_last_indexed; - - // Used for linear scan through enum-string - SequentialGetter m_cse; - - // Used for index lookup - std::unique_ptr m_index_matches; - bool m_index_matches_destroy = false; - std::unique_ptr> m_index_getter; - size_t m_index_size; - size_t m_last_start; -}; - -// OR node contains at least two node pointers: Two or more conditions to OR -// together in m_conditions, and the next AND condition (if any) in m_child. -// -// For 'second.equal(23).begin_group().first.equal(111).Or().first.equal(222).end_group().third().equal(555)', this -// will first set m_conditions[0] = left-hand-side through constructor, and then later, when .first.equal(222) is invoked, -// invocation will set m_conditions[1] = right-hand-side through Query& Query::Or() (see query.cpp). In there, m_child is -// also set to next AND condition (if any exists) following the OR. -class OrNode: public ParentNode { -public: - template - int64_t find_all(IntegerColumn*, size_t, size_t, size_t, size_t) - { - REALM_ASSERT(false); - return 0; - } - - OrNode(std::unique_ptr condition) - { - m_dT = 50.0; - if (condition) - m_conditions.emplace_back(std::move(condition)); - } - - OrNode(const OrNode& other, QueryNodeHandoverPatches* patches) : ParentNode(other, patches) - { - for (const auto& condition : other.m_conditions) { - m_conditions.emplace_back(condition->clone(patches)); - } - } - - void init(const Table& table) override - { - m_dD = 10.0; - - m_start.clear(); - m_start.resize(m_conditions.size(), 0); - - m_last.clear(); - m_last.resize(m_conditions.size(), 0); - - m_was_match.clear(); - m_was_match.resize(m_conditions.size(), false); - - std::vector v; - for (auto& condition : m_conditions) { - condition->init(table); - v.clear(); - condition->gather_children(v); - } - - if (m_child) - m_child->init(table); - - m_table = &table; - } - - size_t find_first_local(size_t start, size_t end) override - { - if (start >= end) - return not_found; - - size_t index = not_found; - - for (size_t c = 0; c < m_conditions.size(); ++c) { - // out of order search; have to discard cached results - if (start < m_start[c]) { - m_last[c] = 0; - m_was_match[c] = false; - } - // already searched this range and didn't match - else if (m_last[c] >= end) - continue; - // already search this range and *did* match - else if (m_was_match[c] && m_last[c] >= start) { - if (index > m_last[c]) - index = m_last[c]; - continue; - } - - m_start[c] = start; - size_t fmax = std::max(m_last[c], start); - size_t f = m_conditions[c]->find_first(fmax, end); - m_was_match[c] = f != not_found; - m_last[c] = f == not_found ? end : f; - if (f != not_found && index > m_last[c]) - index = m_last[c]; - } - - return index; - } - - std::string validate() override - { - if (error_code != "") - return error_code; - if (m_conditions.size() == 0) - return "Missing left-hand side of OR"; - if (m_conditions.size() == 1) - return "Missing right-hand side of OR"; - std::string s; - if (m_child != 0) - s = m_child->validate(); - if (s != "") - return s; - for (size_t i = 0; i < m_conditions.size(); ++i) { - s = m_conditions[i]->validate(); - if (s != "") - return s; - } - return ""; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new OrNode(*this, patches)); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - for (auto it = m_conditions.rbegin(); it != m_conditions.rend(); ++it) - (*it)->apply_handover_patch(patches, group); - - ParentNode::apply_handover_patch(patches, group); - } - - std::vector> m_conditions; -private: - // start index of the last find for each cond - std::vector m_start; - // last looked at index of the lasft find for each cond - // is a matching index if m_was_match is true - std::vector m_last; - std::vector m_was_match; -}; - - - -class NotNode: public ParentNode { -public: - template - int64_t find_all(IntegerColumn*, size_t, size_t, size_t, size_t) - { - REALM_ASSERT(false); - return 0; - } - - NotNode(std::unique_ptr condition) : m_condition(std::move(condition)) - { - m_dT = 50.0; - } - - void init(const Table& table) override - { - m_dD = 10.0; - - std::vector v; - - m_condition->init(table); - v.clear(); - m_condition->gather_children(v); - - // Heuristics bookkeeping: - m_known_range_start = 0; - m_known_range_end = 0; - m_first_in_known_range = not_found; - - if (m_child) - m_child->init(table); - - m_table = &table; - } - - size_t find_first_local(size_t start, size_t end) override; - - std::string validate() override - { - if (error_code != "") - return error_code; - if (m_condition == 0) - return "Missing argument to Not"; - std::string s; - if (m_child != 0) - s = m_child->validate(); - if (s != "") - return s; - s = m_condition->validate(); - if (s != "") - return s; - return ""; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new NotNode(*this, patches)); - } - - NotNode(const NotNode& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_condition(from.m_condition ? from.m_condition->clone(patches) : nullptr), - m_known_range_start(from.m_known_range_start), m_known_range_end(from.m_known_range_end), - m_first_in_known_range(from.m_first_in_known_range) - { - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - m_condition->apply_handover_patch(patches, group); - ParentNode::apply_handover_patch(patches, group); - } - - std::unique_ptr m_condition; -private: - // FIXME This heuristic might as well be reused for all condition nodes. - size_t m_known_range_start; - size_t m_known_range_end; - size_t m_first_in_known_range; - - bool evaluate_at(size_t rowndx); - void update_known(size_t start, size_t end, size_t first); - size_t find_first_loop(size_t start, size_t end); - size_t find_first_covers_known(size_t start, size_t end); - size_t find_first_covered_by_known(size_t start, size_t end); - size_t find_first_overlap_lower(size_t start, size_t end); - size_t find_first_overlap_upper(size_t start, size_t end); - size_t find_first_no_overlap(size_t start, size_t end); -}; - - -// Compare two columns with eachother row-by-row -template -class TwoColumnsNode: public ParentNode { -public: - using TConditionValue = typename ColType::value_type; - - template - int64_t find_all(IntegerColumn* /*res*/, size_t /*start*/, size_t /*end*/, size_t /*limit*/, size_t /*source_column*/) {REALM_ASSERT(false); return 0;} - - TwoColumnsNode(size_t column1, size_t column2) - { - m_dT = 100.0; - m_condition_column_idx1 = column1; - m_condition_column_idx2 = column2; - } - - ~TwoColumnsNode() noexcept override - { - delete[] m_value.data(); - } - - void init(const Table& table) override - { - m_dD = 100.0; - m_table = &table; - - const ColumnBase* cb = &get_column_base(table, m_condition_column_idx1); - REALM_ASSERT_DEBUG(dynamic_cast(cb)); - const ColType* c = static_cast(cb); - m_getter1.init(c); - - c = static_cast(&get_column_base(table, m_condition_column_idx2)); - m_getter2.init(c); - - if (m_child) - m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - size_t s = start; - - while (s < end) { - if (std::is_same::value) { - // For int64_t we've created an array intrinsics named compare_leafs which template expands bitwidths - // of boths arrays to make Get faster. - m_getter1.cache_next(s); - m_getter2.cache_next(s); - - QueryState qs; - bool resume = m_getter1.m_leaf_ptr->template compare_leafs(m_getter2.m_leaf_ptr, s - m_getter1.m_leaf_start, m_getter1.local_end(end), 0, &qs, CallbackDummy()); - - if (resume) - s = m_getter1.m_leaf_end; - else - return to_size_t(qs.m_state) + m_getter1.m_leaf_start; - } - else { - // This is for float and double. - -#if 0 && defined(REALM_COMPILER_AVX) -// AVX has been disabled because of array alignment (see https://app.asana.com/0/search/8836174089724/5763107052506) -// -// For AVX you can call things like if (sseavx<1>()) to test for AVX, and then utilize _mm256_movemask_ps (VC) -// or movemask_cmp_ps (gcc/clang) -// -// See https://github.com/rrrlasse/realm/tree/AVX for an example of utilizing AVX for a two-column search which has -// been benchmarked to: floats: 288 ms vs 552 by using AVX compared to 2-level-unrolled FPU loop. doubles: 415 ms vs -// 475 (more bandwidth bound). Tests against SSE have not been performed; AVX may not pay off. Please benchmark -#endif - - TConditionValue v1 = m_getter1.get_next(s); - TConditionValue v2 = m_getter2.get_next(s); - TConditionFunction C; - - if (C(v1, v2)) - return s; - else - s++; - } - } - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new TwoColumnsNode(*this, patches)); - } - - TwoColumnsNode(const TwoColumnsNode& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_value(from.m_value), m_condition_column(from.m_condition_column), m_column_type(from.m_column_type), - m_condition_column_idx1(from.m_condition_column_idx1), m_condition_column_idx2(from.m_condition_column_idx2) - { - // NOT copied: - // m_getter1 = from.m_getter1; - // m_getter2 = from.m_getter2; - } - -private: - BinaryData m_value; - const BinaryColumn* m_condition_column; - ColumnType m_column_type; - - size_t m_condition_column_idx1; - size_t m_condition_column_idx2; - - SequentialGetter m_getter1; - SequentialGetter m_getter2; -}; - - -// For Next-Generation expressions like col1 / col2 + 123 > col4 * 100. -class ExpressionNode: public ParentNode { - -public: - ExpressionNode(std::unique_ptr expression) : m_expression(std::move(expression)) - { - m_dD = 10.0; - m_dT = 50.0; - } - - void init(const Table& table) override - { - m_expression->set_base_table(&table); - if (m_child) - m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - return m_expression->find_first(start, end); - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new ExpressionNode(*this, patches)); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - m_expression->apply_handover_patch(patches, group); - ParentNode::apply_handover_patch(patches, group); - } - -private: - ExpressionNode(const ExpressionNode& from, QueryNodeHandoverPatches* patches) : ParentNode(from, patches), - m_expression(from.m_expression->clone(patches)) - { - } - - std::unique_ptr m_expression; -}; - - -struct LinksToNodeHandoverPatch : public QueryNodeHandoverPatch { - std::unique_ptr m_target_row; - size_t m_origin_column; -}; - -class LinksToNode : public ParentNode { -public: - LinksToNode(size_t origin_column_index, const ConstRow& target_row) : - m_origin_column(origin_column_index), - m_target_row(target_row) - { - m_dD = 10.0; - m_dT = 50.0; - } - - void init(const Table& table) override - { - m_table = &table; - if (m_child) - m_child->init(table); - } - - size_t find_first_local(size_t start, size_t end) override - { - if (!m_target_row.is_attached()) - return not_found; - - DataType type = m_table->get_column_type(m_origin_column); - REALM_ASSERT(type == type_Link || type == type_LinkList); - - if (type == type_Link) { - LinkColumnBase& clb = const_cast(m_table)->get_column_link_base(m_origin_column); - LinkColumn& cl = static_cast(clb); - return cl.find_first(m_target_row.get_index() + 1, start, end); // LinkColumn stores link to row N as the integer N + 1 - } - else if (type == type_LinkList) { - LinkColumnBase& clb = const_cast(m_table)->get_column_link_base(m_origin_column); - LinkListColumn& cll = static_cast(clb); - - for (size_t i = start; i < end; i++) { - LinkViewRef lv = cll.get(i); - if (lv->find(m_target_row.get_index()) != not_found) - return i; - } - } - - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new LinksToNode(*this, patches)); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - REALM_ASSERT(patches.size()); - std::unique_ptr abstract_patch = std::move(patches.back()); - patches.pop_back(); - - auto patch = dynamic_cast(abstract_patch.get()); - REALM_ASSERT(patch); - - m_origin_column = patch->m_origin_column; - m_target_row.apply_and_consume_patch(patch->m_target_row, group); - - ParentNode::apply_handover_patch(patches, group); - } - -private: - size_t m_origin_column; - ConstRow m_target_row; - - LinksToNode(const LinksToNode& source, QueryNodeHandoverPatches* patches) : ParentNode(source, patches), - m_origin_column(patches ? npos : source.m_origin_column), - m_target_row(patches ? ConstRow() : source.m_target_row) - { - if (!patches) - return; - - std::unique_ptr patch(new LinksToNodeHandoverPatch); - patch->m_origin_column = source.m_origin_column; - ConstRow::generate_patch(source.m_target_row, patch->m_target_row); - patches->emplace_back(patch.release()); - } -}; - -} // namespace realm - -#endif // REALM_QUERY_ENGINE_HPP diff --git a/Pods/Realm/include/core/realm/query_expression.hpp b/Pods/Realm/include/core/realm/query_expression.hpp deleted file mode 100644 index ca51b30b..00000000 --- a/Pods/Realm/include/core/realm/query_expression.hpp +++ /dev/null @@ -1,2776 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -/* -This file lets you write queries in C++ syntax like: Expression* e = (first + 1 / second >= third + 12.3); - -Type conversion/promotion semantics is the same as in the C++ expressions, e.g float + int > double == float + -(float)int > double. - - -Grammar: ------------------------------------------------------------------------------------------------------------------------ - Expression: Subexpr2 Compare Subexpr2 - operator! Expression - - Subexpr2: Value - Columns - Subexpr2 Operator Subexpr2 - power(Subexpr2) // power(x) = x * x, as example of unary operator - - Value: T - - Operator>: +, -, *, / - - Compare: ==, !=, >=, <=, >, < - - T: bool, int, int64_t, float, double, StringData - - -Class diagram ------------------------------------------------------------------------------------------------------------------------ -Subexpr2 - void evaluate(size_t i, ValueBase* destination) - -Compare: public Subexpr2 - size_t find_first(size_t start, size_t end) // main method that executes query - - unique_ptr m_left; // left expression subtree - unique_ptr m_right; // right expression subtree - -Operator: public Subexpr2 - void evaluate(size_t i, ValueBase* destination) - unique_ptr m_left; // left expression subtree - unique_ptr m_right; // right expression subtree - -Value: public Subexpr2 - void evaluate(size_t i, ValueBase* destination) - T m_v[8]; - -Columns: public Subexpr2 - void evaluate(size_t i, ValueBase* destination) - SequentialGetter sg; // class bound to a column, lets you read values in a fast way - Table* m_table; - -class ColumnAccessor<>: public Columns - - -Call diagram: ------------------------------------------------------------------------------------------------------------------------ -Example of 'table.first > 34.6 + table.second': - -size_t Compare::find_first()-------------+ - | | - | | - | | - +--> Columns::evaluate() +--------> Operator::evaluate() - | | - Value::evaluate() Columns::evaluate() - -Operator, Value and Columns have an evaluate(size_t i, ValueBase* destination) method which returns a Value -containing 8 values representing table rows i...i + 7. - -So Value contains 8 concecutive values and all operations are based on these chunks. This is -to save overhead by virtual calls needed for evaluating a query that has been dynamically constructed at runtime. - - -Memory allocation: ------------------------------------------------------------------------------------------------------------------------ -Subexpressions created by the end-user are stack allocated. They are cloned to the heap when passed to UnaryOperator, -Operator, and Compare. Those types own the clones and deallocate them when destroyed. - - -Caveats, notes and todos ------------------------------------------------------------------------------------------------------------------------ - * Perhaps disallow columns from two different tables in same expression - * The name Columns (with s) an be confusing because we also have Column (without s) - * We have Columns::m_table, Query::m_table and ColumnAccessorBase::m_table that point at the same thing, even with - ColumnAccessor<> extending Columns. So m_table is redundant, but this is in order to keep class dependencies and - entanglement low so that the design is flexible (if you perhaps later want a Columns class that is not dependent - on ColumnAccessor) - -Nulls ------------------------------------------------------------------------------------------------------------------------ -First note that at array level, nulls are distinguished between non-null in different ways: -String: - m_data == 0 && m_size == 0 - -Integer, Bool, OldDateTime stored in ArrayIntNull: - value == get(0) (entry 0 determins a magic value that represents nulls) - -Float/double: - null::is_null(value) which tests if value bit-matches one specific bit pattern reserved for null - -The Columns class encapsulates all this into a simple class that, for any type T has - evaluate(size_t index) that reads values from a column, taking nulls in count - get(index) - set(index) - is_null(index) - set_null(index) -*/ - -#ifndef REALM_QUERY_EXPRESSION_HPP -#define REALM_QUERY_EXPRESSION_HPP - -#include -#include -#include - -#include - -// Normally, if a next-generation-syntax condition is supported by the old query_engine.hpp, a query_engine node is -// created because it's faster (by a factor of 5 - 10). Because many of our existing next-generation-syntax unit -// unit tests are indeed simple enough to fallback to old query_engine, query_expression gets low test coverage. Undef -// flag to get higher query_expression test coverage. This is a good idea to try out each time you develop on/modify -// query_expression. - -#define REALM_OLDQUERY_FALLBACK - -namespace realm { - -template -T minimum(T a, T b) -{ - return a < b ? a : b; -} - -// FIXME, this needs to exist elsewhere -typedef int64_t Int; -typedef bool Bool; -typedef realm::OldDateTime OldDateTime; -typedef float Float; -typedef double Double; -typedef realm::StringData String; -typedef realm::BinaryData Binary; - -// Hack to avoid template instantiation errors. See create(). Todo, see if we can simplify only_numeric somehow -namespace { -template -T only_numeric(U in) -{ - return static_cast(util::unwrap(in)); -} - -template -int only_numeric(const StringData&) -{ - REALM_ASSERT(false); - return 0; -} - -template -int only_numeric(const BinaryData&) -{ - REALM_ASSERT(false); - return 0; -} - -template -StringData only_string(T in) -{ - REALM_ASSERT(false); - static_cast(in); - return StringData(); -} - -StringData only_string(StringData in) -{ - return in; -} - -template -T no_timestamp(U in) -{ - return static_cast(util::unwrap(in)); -} - -template -int no_timestamp(const Timestamp&) -{ - REALM_ASSERT(false); - return 0; -} - - -} // anonymous namespace - -templatestruct Plus { - T operator()(T v1, T v2) const { return v1 + v2; } - typedef T type; -}; - -templatestruct Minus { - T operator()(T v1, T v2) const { return v1 - v2; } - typedef T type; -}; - -templatestruct Div { - T operator()(T v1, T v2) const { return v1 / v2; } - typedef T type; -}; - -templatestruct Mul { - T operator()(T v1, T v2) const { return v1 * v2; } - typedef T type; -}; - -// Unary operator -templatestruct Pow { - T operator()(T v) const { return v * v; } - typedef T type; -}; - -// Finds a common type for T1 and T2 according to C++ conversion/promotion in arithmetic (float + int => float, etc) -template::is_integer || std::is_same::value, - bool T2_is_int = std::numeric_limits::is_integer || std::is_same::value, - bool T1_is_widest = (sizeof(T1) > sizeof(T2) || std::is_same::value ) > struct Common; -template -struct Common { - typedef T1 type; -}; -template -struct Common { - typedef T2 type; -}; -template -struct Common { - typedef T1 type; -}; -template -struct Common { - typedef T2 type; -}; - - -struct RowIndex { - enum DetachedTag { - Detached - }; - - explicit RowIndex() : m_row_index(npos) { } - explicit RowIndex(size_t row_index) : m_row_index(row_index) { } - RowIndex(DetachedTag) : m_row_index() { } - - bool is_attached() const { return bool(m_row_index); } - bool is_null() const { return is_attached() && *m_row_index == npos; } - - bool operator == (const RowIndex& other) const { - // Row indexes that are detached are never equal to any other row index. - if (!is_attached() || !other.is_attached()) - return false; - return m_row_index == other.m_row_index; - } - bool operator != (const RowIndex& other) const { return !(*this == other); } - -private: - util::Optional m_row_index; -}; - - -struct ValueBase -{ - static const size_t default_size = 8; - virtual void export_bool(ValueBase& destination) const = 0; - virtual void export_Timestamp(ValueBase& destination) const = 0; - virtual void export_int(ValueBase& destination) const = 0; - virtual void export_float(ValueBase& destination) const = 0; - virtual void export_int64_t(ValueBase& destination) const = 0; - virtual void export_double(ValueBase& destination) const = 0; - virtual void export_StringData(ValueBase& destination) const = 0; - virtual void export_BinaryData(ValueBase& destination) const = 0; - virtual void export_RowIndex(ValueBase& destination) const = 0; - virtual void export_null(ValueBase& destination) const = 0; - virtual void import(const ValueBase& destination) = 0; - - // If true, all values in the class come from a link list of a single field in the parent table (m_table). If - // false, then values come from successive rows of m_table (query operations are operated on in bulks for speed) - bool m_from_link_list; - - // Number of values stored in the class. - size_t m_values; -}; - -class Expression -{ -public: - Expression() { } - virtual ~Expression() {} - - virtual size_t find_first(size_t start, size_t end) const = 0; - virtual void set_base_table(const Table* table) = 0; - virtual const Table* get_base_table() const = 0; - - virtual std::unique_ptr clone(QueryNodeHandoverPatches*) const = 0; - virtual void apply_handover_patch(QueryNodeHandoverPatches&, Group&) { } -}; - -template -std::unique_ptr make_expression(Args&&... args) -{ - return std::unique_ptr(new T(std::forward(args)...)); -} - -class Subexpr -{ -public: - virtual ~Subexpr() {} - - virtual std::unique_ptr clone(QueryNodeHandoverPatches* = nullptr) const = 0; - virtual void apply_handover_patch(QueryNodeHandoverPatches&, Group&) { } - - // When the user constructs a query, it always "belongs" to one single base/parent table (regardless of - // any links or not and regardless of any queries assembled with || or &&). When you do a Query::find(), - // then Query::m_table is set to this table, and set_base_table() is called on all Columns and LinkMaps in - // the query expression tree so that they can set/update their internals as required. - // - // During thread-handover of a Query, set_base_table() is also called to make objects point at the new table - // instead of the old one from the old thread. - virtual void set_base_table(const Table*) {} - - // Recursively fetch tables of columns in expression tree. Used when user first builds a stand-alone expression and - // binds it to a Query at a later time - virtual const Table* get_base_table() const - { - return nullptr; - } - - virtual void evaluate(size_t index, ValueBase& destination) = 0; -}; - -template -std::unique_ptr make_subexpr(Args&&... args) -{ - return std::unique_ptr(new T(std::forward(args)...)); -} - -template -class Columns; -template -class Value; -class ConstantStringValue; -template -class Subexpr2; -template -class Operator; -template -class UnaryOperator; -template -class Compare; -template -class UnaryLinkCompare; -class ColumnAccessorBase; - - -// Handle cases where left side is a constant (int, float, int64_t, double, StringData) -template -Query create(L left, const Subexpr2& right) -{ - // Purpose of below code is to intercept the creation of a condition and test if it's supported by the old - // query_engine.hpp which is faster. If it's supported, create a query_engine.hpp node, otherwise create a - // query_expression.hpp node. - // - // This method intercepts only Value Subexpr2. Interception of Subexpr2 Subexpr is elsewhere. - -#ifdef REALM_OLDQUERY_FALLBACK // if not defined, then never fallback to query_engine.hpp; always use query_expression - const Columns* column = dynamic_cast*>(&right); - - if (column && - ((std::numeric_limits::is_integer && std::numeric_limits::is_integer) || - (std::is_same::value && std::is_same::value) || - (std::is_same::value && std::is_same::value) || - (std::is_same::value && std::is_same::value) || - (std::is_same::value && std::is_same::value) || - (std::is_same::value && std::is_same::value)) - && - !column->links_exist()) { - const Table* t = column->get_base_table(); - Query q = Query(*t); - - if (std::is_same::value) - q.greater(column->m_column, only_numeric(left)); - else if (std::is_same::value) - q.less(column->m_column, only_numeric(left)); - else if (std::is_same::value) - q.equal(column->m_column, left); - else if (std::is_same::value) - q.not_equal(column->m_column, left); - else if (std::is_same::value) - q.greater_equal(column->m_column, only_numeric(left)); - else if (std::is_same::value) - q.less_equal(column->m_column, only_numeric(left)); - else if (std::is_same::value) - q.equal(column->m_column, only_string(left), false); - else if (std::is_same::value) - q.not_equal(column->m_column, only_string(left), false); - else if (std::is_same::value) - q.begins_with(column->m_column, only_string(left)); - else if (std::is_same::value) - q.begins_with(column->m_column, only_string(left), false); - else if (std::is_same::value) - q.ends_with(column->m_column, only_string(left)); - else if (std::is_same::value) - q.ends_with(column->m_column, only_string(left), false); - else if (std::is_same::value) - q.contains(column->m_column, only_string(left)); - else if (std::is_same::value) - q.contains(column->m_column, only_string(left), false); - else { - // query_engine.hpp does not support this Cond. Please either add support for it in query_engine.hpp or - // fallback to using use 'return new Compare<>' instead. - REALM_ASSERT(false); - } - // Return query_engine.hpp node - return q; - } - else -#endif - { - // Return query_expression.hpp node - using CommonType = typename Common::type; - using ValueType = typename std::conditional::value, ConstantStringValue, Value>::type; - return make_expression>(make_subexpr(left), right.clone()); - } -} - - -// All overloads where left-hand-side is Subexpr2: -// -// left-hand-side operator right-hand-side -// Subexpr2 +, -, *, /, <, >, ==, !=, <=, >= R, Subexpr2 -// -// For L = R = {int, int64_t, float, double, StringData, Timestamp}: -template -class Overloads -{ - typedef typename Common::type CommonType; - - std::unique_ptr clone_subexpr() const - { - return static_cast&>(*this).clone(); - } - -public: - - // Arithmetic, right side constant - Operator> operator + (R right) const - { - return { clone_subexpr(), make_subexpr>(right) }; - } - Operator> operator - (R right) const - { - return { clone_subexpr(), make_subexpr>(right) }; - } - Operator> operator * (R right) const - { - return { clone_subexpr(), make_subexpr>(right) }; - } - Operator> operator / (R right) const - { - return { clone_subexpr(), make_subexpr>(right) }; - } - - // Arithmetic, right side subexpression - Operator> operator + (const Subexpr2& right) const - { - return { clone_subexpr(), right.clone() }; - } - Operator> operator - (const Subexpr2& right) const - { - return { clone_subexpr(), right.clone() }; - } - Operator> operator * (const Subexpr2& right) const - { - return { clone_subexpr(), right.clone() }; - } - Operator> operator / (const Subexpr2& right) const - { - return { clone_subexpr(), right.clone() }; - } - - // Compare, right side constant - Query operator > (R right) - { - return create(right, static_cast&>(*this)); - } - Query operator < (R right) - { - return create(right, static_cast&>(*this)); - } - Query operator >= (R right) - { - return create(right, static_cast&>(*this)); - } - Query operator <= (R right) - { - return create(right, static_cast&>(*this)); - } - Query operator == (R right) - { - return create(right, static_cast&>(*this)); - } - Query operator != (R right) - { - return create(right, static_cast&>(*this)); - } - - // Purpose of this method is to intercept the creation of a condition and test if it's supported by the old - // query_engine.hpp which is faster. If it's supported, create a query_engine.hpp node, otherwise create a - // query_expression.hpp node. - // - // This method intercepts Subexpr2 Subexpr2 only. Value Subexpr2 is intercepted elsewhere. - template - Query create2 (const Subexpr2& right) - { -#ifdef REALM_OLDQUERY_FALLBACK // if not defined, never fallback query_engine; always use query_expression - // Test if expressions are of type Columns. Other possibilities are Value and Operator. - const Columns* left_col = dynamic_cast*>(static_cast*>(this)); - const Columns* right_col = dynamic_cast*>(&right); - - // query_engine supports 'T-column ' for T = {int64_t, float, double}, op = {<, >, ==, !=, <=, >=}, - // but only if both columns are non-nullable, and aren't in linked tables. - if (left_col && right_col && std::is_same::value && !left_col->is_nullable() && !right_col->is_nullable() - && !left_col->links_exist() && !right_col->links_exist() && !std::is_same::value) { - const Table* t = left_col->get_base_table(); - Query q = Query(*t); - - if (std::numeric_limits::is_integer || std::is_same::value) { - if (std::is_same::value) - q.less_int(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.greater_int(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.equal_int(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.not_equal_int(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.less_equal_int(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.greater_equal_int(left_col->m_column, right_col->m_column); - else { - REALM_ASSERT(false); - } - } - else if (std::is_same::value) { - if (std::is_same::value) - q.less_float(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.greater_float(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.equal_float(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.not_equal_float(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.less_equal_float(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.greater_equal_float(left_col->m_column, right_col->m_column); - else { - REALM_ASSERT(false); - } - } - else if (std::is_same::value) { - if (std::is_same::value) - q.less_double(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.greater_double(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.equal_double(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.not_equal_double(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.less_equal_double(left_col->m_column, right_col->m_column); - else if (std::is_same::value) - q.greater_equal_double(left_col->m_column, right_col->m_column); - else { - REALM_ASSERT(false); - } - } - else { - REALM_ASSERT(false); - } - // Return query_engine.hpp node - return q; - } - else -#endif - { - // Return query_expression.hpp node - return make_expression::type>>(clone_subexpr(), right.clone()); - } - } - - // Compare, right side subexpression - Query operator == (const Subexpr2& right) - { - return create2(right); - } - Query operator != (const Subexpr2& right) - { - return create2(right); - } - Query operator > (const Subexpr2& right) - { - return create2(right); - } - Query operator < (const Subexpr2& right) - { - return create2(right); - } - Query operator >= (const Subexpr2& right) - { - return create2(right); - } - Query operator <= (const Subexpr2& right) - { - return create2(right); - } -}; - -// With this wrapper class we can define just 20 overloads inside Overloads instead of 5 * 20 = 100. Todo: We can -// consider if it's simpler/better to remove this class completely and just list all 100 overloads manually anyway. -template -class Subexpr2 : public Subexpr, public Overloads, public Overloads, public -Overloads, public Overloads, public Overloads, public Overloads, -public Overloads, public Overloads, public Overloads, public Overloads -{ -public: - virtual ~Subexpr2() {}; - -#define RLM_U2(t, o) using Overloads::operator o; -#define RLM_U(o) RLM_U2(int, o) RLM_U2(float, o) RLM_U2(double, o) RLM_U2(int64_t, o) RLM_U2(StringData, o) RLM_U2(bool, o) RLM_U2(OldDateTime, o) RLM_U2(Timestamp, o) RLM_U2(null, o) - RLM_U(+) RLM_U(-) RLM_U(*) RLM_U(/ ) RLM_U(> ) RLM_U(< ) RLM_U(== ) RLM_U(!= ) RLM_U(>= ) RLM_U(<= ) -}; - -// Subexpr2 only provides equality comparisons. Their implementations can be found later in this file. -template<> -class Subexpr2 : public Subexpr -{ -}; - - -/* -This class is used to store N values of type T = {int64_t, bool, OldDateTime or StringData}, and allows an entry -to be null too. It's used by the Value class for internal storage. - -To indicate nulls, we could have chosen a separate bool vector or some other bitmask construction. But for -performance, we customize indication of nulls to match the same indication that is used in the persisted database -file - -Queries in query_expression.hpp execute by processing chunks of 8 rows at a time. Assume you have a column: - - price (int) = {1, 2, 3, null, 1, 6, 6, 9, 5, 2, null} - -And perform a query: - - Query q = (price + 2 == 5); - -query_expression.hpp will then create a NullableVector = {5, 5, 5, 5, 5, 5, 5, 5} and then read values -NullableVector = {1, 2, 3, null, 1, 6, 6, 9} from the column, and then perform `+` and `==` on these chunks. - -See the top of this file for more information on all this. - -Assume the user specifies the null constant in a query: - -Query q = (price == null) - -The query system will then construct a NullableVector of type `null` (NullableVector). This allows compile -time optimizations for these cases. -*/ - -template -struct NullableVector -{ - using Underlying = typename util::RemoveOptional::type; - using t_storage = typename std::conditional::value - || std::is_same::value, int64_t, Underlying>::type; - - NullableVector() {}; - - NullableVector& operator= (const NullableVector& other) - { - if (this != &other) { - init(other.m_size); - std::copy(other.m_first, other.m_first + other.m_size, m_first); - m_null = other.m_null; - } - return *this; - } - - NullableVector(const NullableVector& other) - { - init(other.m_size); - std::copy(other.m_first, other.m_first + other.m_size, m_first); - m_null = other.m_null; - } - - ~NullableVector() - { - dealloc(); - } - - T operator[](size_t index) const - { - REALM_ASSERT_3(index, <, m_size); - return static_cast(m_first[index]); - } - - inline bool is_null(size_t index) const - { - REALM_ASSERT((std::is_same::value)); - return m_first[index] == m_null; - } - - inline void set_null(size_t index) - { - REALM_ASSERT((std::is_same::value)); - m_first[index] = m_null; - } - - template - typename std::enable_if::value, void>::type - set(size_t index, t_storage value) - { - REALM_ASSERT((std::is_same::value)); - - // If value collides with magic null value, then switch to a new unique representation for null - if (REALM_UNLIKELY(value == m_null)) { - // adding a prime will generate 2^64 unique values. Todo: Only works on 2's complement architecture - uint64_t candidate = static_cast(m_null) + 0xfffffffbULL; - while (std::find(m_first, m_first + m_size, static_cast(candidate)) != m_first + m_size) - candidate += 0xfffffffbULL; - std::replace(m_first, m_first + m_size, m_null, static_cast(candidate)); - } - m_first[index] = value; - } - - template - typename std::enable_if::value, - void>::type - set(size_t index, t_storage value) { - m_first[index] = value; - } - - - inline util::Optional get(size_t index) const - { - if (is_null(index)) - return util::none; - - return util::make_optional((*this)[index]); - } - - inline void set(size_t index, util::Optional value) - { - if (value) { - Underlying v = *value; - set(index, v); - } - else { - set_null(index); - } - } - - void fill(T value) - { - for (size_t t = 0; t < m_size; t++) { - if (std::is_same::value) - set_null(t); - else - set(t, value); - } - } - - void init(size_t size) - { - if (size == m_size) - return; - - dealloc(); - m_size = size; - if (m_size > 0) { - if (m_size > prealloc) - m_first = reinterpret_cast(new t_storage[m_size]); - else - m_first = m_cache; - } - } - - void init(size_t size, T values) - { - init(size); - fill(values); - } - - void dealloc() - { - if (m_first) { - if (m_size > prealloc) - delete[] m_first; - m_first = nullptr; - } - } - - t_storage m_cache[prealloc]; - t_storage* m_first = &m_cache[0]; - size_t m_size = 0; - - int64_t m_null = reinterpret_cast(&m_null); // choose magic value to represent nulls -}; - -// Double -// NOTE: fails in gcc 4.8 without `inline`. Do not remove. Same applies for all methods below. -template<> -inline bool NullableVector::is_null(size_t index) const -{ - return null::is_null_float(m_first[index]); -} - -template<> -inline void NullableVector::set_null(size_t index) -{ - m_first[index] = null::get_null_float(); -} - -// Float -template<> -inline bool NullableVector::is_null(size_t index) const -{ - return null::is_null_float(m_first[index]); -} - -template<> -inline void NullableVector::set_null(size_t index) -{ - m_first[index] = null::get_null_float(); -} - - -// Null -template<> -inline void NullableVector::set_null(size_t) -{ - return; -} -template<> -inline bool NullableVector::is_null(size_t) const -{ - return true; -} - - -// OldDateTime -template<> -inline bool NullableVector::is_null(size_t index) const -{ - return m_first[index].get_olddatetime() == m_null; -} - - -template<> -inline void NullableVector::set_null(size_t index) -{ - m_first[index] = m_null; -} - -// StringData - -template<> -inline bool NullableVector::is_null(size_t index) const -{ - return m_first[index].is_null(); -} - -template<> -inline void NullableVector::set_null(size_t index) -{ - m_first[index] = StringData(); -} - -// BinaryData - -template<> -inline bool NullableVector::is_null(size_t index) const -{ - return m_first[index].is_null(); -} - -template<> -inline void NullableVector::set_null(size_t index) -{ - m_first[index] = BinaryData(); -} - -// RowIndex -template<> -inline bool NullableVector::is_null(size_t index) const -{ - return m_first[index].is_null(); -} -template<> -inline void NullableVector::set_null(size_t index) -{ - m_first[index] = RowIndex(); -} - - -// Timestamp - -template<> -inline bool NullableVector::is_null(size_t index) const -{ - return m_first[index].is_null(); -} - -template<> -inline void NullableVector::set_null(size_t index) -{ - m_first[index] = Timestamp(null{}); -} - - -template -struct OperatorOptionalAdapter { - template - util::Optional operator()(const util::Optional& left, const util::Optional& right) - { - if (!left || !right) - return util::none; - return Operator()(*left, *right); - } - - template - util::Optional operator()(const util::Optional& arg) - { - if (!arg) - return util::none; - return Operator()(*arg); - } -}; - -// Stores N values of type T. Can also exchange data with other ValueBase of different types -template -class Value : public ValueBase, public Subexpr2 -{ -public: - Value() - { - init(false, ValueBase::default_size, T()); - } - Value(T v) - { - init(false, ValueBase::default_size, v); - } - - Value(bool from_link_list, size_t values) - { - init(from_link_list, values, T()); - } - - Value(bool from_link_list, size_t values, T v) - { - init(from_link_list, values, v); - } - - Value(const Value&) = default; - Value& operator=(const Value&) = default; - - void init(bool from_link_list, size_t values, T v) { - m_storage.init(values, v); - ValueBase::m_from_link_list = from_link_list; - ValueBase::m_values = values; - } - - void init(bool from_link_list, size_t values) { - m_storage.init(values); - ValueBase::m_from_link_list = from_link_list; - ValueBase::m_values = values; - } - - void evaluate(size_t, ValueBase& destination) override - { - destination.import(*this); - } - - - template - REALM_FORCEINLINE void fun(const Value* left, const Value* right) - { - OperatorOptionalAdapter o; - - if (!left->m_from_link_list && !right->m_from_link_list) { - // Operate on values one-by-one (one value is one row; no links) - size_t min = std::min(left->m_values, right->m_values); - init(false, min); - - for (size_t i = 0; i < min; i++) { - m_storage.set(i, o(left->m_storage.get(i), right->m_storage.get(i))); - } - } - else if (left->m_from_link_list && right->m_from_link_list) { - // FIXME: Many-to-many links not supported yet. Need to specify behaviour - REALM_ASSERT_DEBUG(false); - } - else if (!left->m_from_link_list && right->m_from_link_list) { - // Right values come from link. Left must come from single row. - REALM_ASSERT_DEBUG(left->m_values > 0); - init(true, right->m_values); - - auto left_value = left->m_storage.get(0); - for (size_t i = 0; i < right->m_values; i++) { - m_storage.set(i, o(left_value, right->m_storage.get(i))); - } - } - else if (left->m_from_link_list && !right->m_from_link_list) { - // Same as above, but with left values coming from links - REALM_ASSERT_DEBUG(right->m_values > 0); - init(true, left->m_values); - - auto right_value = right->m_storage.get(0); - for (size_t i = 0; i < left->m_values; i++) { - m_storage.set(i, o(left->m_storage.get(i), right_value)); - } - } - } - - template - REALM_FORCEINLINE void fun(const Value* value) - { - init(value->m_from_link_list, value->m_values); - - OperatorOptionalAdapter o; - for (size_t i = 0; i < value->m_values; i++) { - m_storage.set(i, o(value->m_storage.get(i))); - } - } - - - // Below import and export methods are for type conversion between float, double, int64_t, etc. - template - typename std::enable_if::value>::type - REALM_FORCEINLINE export2(ValueBase& destination) const - { - Value& d = static_cast&>(destination); - d.init(ValueBase::m_from_link_list, ValueBase::m_values, D()); - for (size_t t = 0; t < ValueBase::m_values; t++) { - if (m_storage.is_null(t)) - d.m_storage.set_null(t); - else { - d.m_storage.set(t, static_cast(m_storage[t])); - } - } - } - - template - typename std::enable_if::value>::type - REALM_FORCEINLINE export2(ValueBase&) const - { - // export2 is instantiated for impossible conversions like T=StringData, D=int64_t. These are never - // performed at runtime but would result in a compiler error if we did not provide this implementation. - REALM_ASSERT_DEBUG(false); - } - - REALM_FORCEINLINE void export_Timestamp(ValueBase& destination) const override - { - export2(destination); - } - - REALM_FORCEINLINE void export_bool(ValueBase& destination) const override - { - export2(destination); - } - - REALM_FORCEINLINE void export_int64_t(ValueBase& destination) const override - { - export2(destination); - } - - REALM_FORCEINLINE void export_float(ValueBase& destination) const override - { - export2(destination); - } - - REALM_FORCEINLINE void export_int(ValueBase& destination) const override - { - export2(destination); - } - - REALM_FORCEINLINE void export_double(ValueBase& destination) const override - { - export2(destination); - } - REALM_FORCEINLINE void export_StringData(ValueBase& destination) const override - { - export2(destination); - } - REALM_FORCEINLINE void export_BinaryData(ValueBase& destination) const override - { - export2(destination); - } - REALM_FORCEINLINE void export_RowIndex(ValueBase& destination) const override - { - export2(destination); - } - REALM_FORCEINLINE void export_null(ValueBase& destination) const override - { - Value& d = static_cast&>(destination); - d.init(m_from_link_list, m_values); - } - - REALM_FORCEINLINE void import(const ValueBase& source) override - { - if (std::is_same::value) - source.export_int(*this); - else if (std::is_same::value) - source.export_Timestamp(*this); - else if (std::is_same::value) - source.export_bool(*this); - else if (std::is_same::value) - source.export_float(*this); - else if (std::is_same::value) - source.export_double(*this); - else if (std::is_same::value || std::is_same::value || std::is_same::value) - source.export_int64_t(*this); - else if (std::is_same::value) - source.export_StringData(*this); - else if (std::is_same::value) - source.export_BinaryData(*this); - else if (std::is_same::value) - source.export_RowIndex(*this); - else if (std::is_same::value) - source.export_null(*this); - else - REALM_ASSERT_DEBUG(false); - } - - // Given a TCond (==, !=, >, <, >=, <=) and two Value, return index of first match - template - REALM_FORCEINLINE static size_t compare(Value* left, Value* right) - { - TCond c; - - if (!left->m_from_link_list && !right->m_from_link_list) { - // Compare values one-by-one (one value is one row; no link lists) - size_t min = minimum(left->ValueBase::m_values, right->ValueBase::m_values); - for (size_t m = 0; m < min; m++) { - - if (c(left->m_storage[m], right->m_storage[m], left->m_storage.is_null(m), right->m_storage.is_null(m))) - return m; - } - } - else if (left->m_from_link_list && right->m_from_link_list) { - // FIXME: Many-to-many links not supported yet. Need to specify behaviour - REALM_ASSERT_DEBUG(false); - } - else if (!left->m_from_link_list && right->m_from_link_list) { - // Right values come from link list. Left must come from single row. Semantics: Match if at least 1 - // linked-to-value fulfills the condition - REALM_ASSERT_DEBUG(left->m_values > 0); - for (size_t r = 0; r < right->m_values; r++) { - if (c(left->m_storage[0], right->m_storage[r], left->m_storage.is_null(0), right->m_storage.is_null(r))) - return 0; - } - } - else if (left->m_from_link_list && !right->m_from_link_list) { - // Same as above, but with left values coming from link list. - REALM_ASSERT_DEBUG(right->m_values > 0); - for (size_t l = 0; l < left->m_values; l++) { - if (c(left->m_storage[l], right->m_storage[0], left->m_storage.is_null(l), right->m_storage.is_null(0))) - return 0; - } - } - - return not_found; // no match - } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr>(*this); - } - - NullableVector m_storage; -}; - -class ConstantStringValue : public Value -{ -public: - ConstantStringValue(const StringData& string) : Value(), - m_string(string.is_null() ? util::none : util::make_optional(std::string(string))) - { - init(false, ValueBase::default_size, m_string); - } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return std::unique_ptr(new ConstantStringValue(*this)); - } - -private: - ConstantStringValue(const ConstantStringValue& other) : Value(), m_string(other.m_string) - { - init(other.m_from_link_list, other.m_values, m_string); - } - - util::Optional m_string; -}; - -// All overloads where left-hand-side is L: -// -// left-hand-side operator right-hand-side -// L +, -, *, /, <, >, ==, !=, <=, >= Subexpr2 -// -// For L = R = {int, int64_t, float, double, Timestamp}: -// Compare numeric values -template -Query operator > (double left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator > (float left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator > (int left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator > (int64_t left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator > (Timestamp left, const Subexpr2& right) { - return create(left, right); -} - -template -Query operator < (double left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator < (float left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator < (int left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator < (int64_t left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator < (Timestamp left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator == (double left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator == (float left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator == (int left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator == (int64_t left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator == (Timestamp left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator >= (double left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator >= (float left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator >= (int left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator >= (int64_t left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator >= (Timestamp left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator <= (double left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator <= (float left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator <= (int left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator <= (int64_t left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator <= (Timestamp left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator != (double left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator != (float left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator != (int left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator != (int64_t left, const Subexpr2& right) { - return create(left, right); -} -template -Query operator != (Timestamp left, const Subexpr2& right) { - return create(left, right); -} - -// Arithmetic -template -Operator::type>> operator + (double left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator + (float left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator + (int left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator + (int64_t left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator - (double left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator - (float left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator - (int left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator - (int64_t left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator * (double left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator * (float left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator * (int left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator * (int64_t left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator / (double left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator / (float left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator / (int left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} -template -Operator::type>> operator / (int64_t left, const Subexpr2& right) { - return { make_subexpr>(left), right.clone() }; -} - -// Unary operators -template -UnaryOperator> power (const Subexpr2& left) { - return { left.clone() }; -} - - - -// Classes used for LinkMap (see below). -struct LinkMapFunction -{ - // Your consume() method is given row index of the linked-to table as argument, and you must return wether or - // not you want the LinkMapFunction to exit (return false) or continue (return true) harvesting the link tree - // for the current main table row index (it will be a link tree if you have multiple type_LinkList columns - // in a link()->link() query. - virtual bool consume(size_t row_index) = 0; -}; - -struct FindNullLinks : public LinkMapFunction -{ - FindNullLinks() : m_has_link(false) {}; - - bool consume(size_t row_index) override - { - static_cast(row_index); - m_has_link = true; - return false; // we've found a row index, so this can't be a null-link, so exit link harvesting - } - - bool m_has_link; -}; - -struct MakeLinkVector : public LinkMapFunction -{ - MakeLinkVector(std::vector& result) : m_links(result) {} - - bool consume(size_t row_index) override - { - m_links.push_back(row_index); - return true; // continue evaluation - } - std::vector &m_links; -}; - -struct CountLinks : public LinkMapFunction -{ - bool consume(size_t) override - { - m_link_count++; - return true; - } - - size_t result() const { return m_link_count; } - - size_t m_link_count = 0; -}; - - -/* -The LinkMap and LinkMapFunction classes are used for query conditions on links themselves (contrary to conditions on -the value payload they point at). - -MapLink::map_links() takes a row index of the link column as argument and follows any link chain stated in the query -(through the link()->link() methods) until the final payload table is reached, and then applies LinkMapFunction on -the linked-to row index(es). - -If all link columns are type_Link, then LinkMapFunction is only invoked for a single row index. If one or more -columns are type_LinkList, then it may result in multiple row indexes. - -The reason we use this map pattern is that we can exit the link-tree-traversal as early as possible, e.g. when we've -found the first link that points to row '5'. Other solutions could be a std::vector harvest_all_links(), or an -iterator pattern. First solution can't exit, second solution requires internal state. -*/ -class LinkMap -{ -public: - LinkMap() = default; - LinkMap(const Table* table, const std::vector& columns) : m_link_column_indexes(columns) - { - set_base_table(table); - } - - void set_base_table(const Table* table) - { - if (table == m_base_table) - return; - - m_base_table = table; - m_link_columns.clear(); - m_link_types.clear(); - m_only_unary_links = true; - - for (size_t link_column_index : m_link_column_indexes) { - // Link column can be either LinkList or single Link - ColumnType type = table->get_real_column_type(link_column_index); - REALM_ASSERT(Table::is_link_type(type) || type == col_type_BackLink); - m_link_types.push_back(type); - - if (type == col_type_LinkList) { - const LinkListColumn& cll = table->get_column_link_list(link_column_index); - m_link_columns.push_back(&cll); - m_only_unary_links = false; - table = &cll.get_target_table(); - } - else if (type == col_type_Link) { - const LinkColumn& cl = table->get_column_link(link_column_index); - m_link_columns.push_back(&cl); - table = &cl.get_target_table(); - } - else if (type == col_type_BackLink) { - const BacklinkColumn& bl = table->get_column_backlink(link_column_index); - m_link_columns.push_back(&bl); - m_only_unary_links = false; - table = &bl.get_origin_table(); - } - } - - m_target_table = table; - } - - std::vector get_links(size_t index) - { - std::vector res; - get_links(index, res); - return res; - } - - size_t count_links(size_t row) - { - CountLinks counter; - map_links(row, counter); - return counter.result(); - } - - void map_links(size_t row, LinkMapFunction& lm) - { - map_links(0, row, lm); - } - - bool only_unary_links() const - { - return m_only_unary_links; - } - - const Table* base_table() const - { - return m_base_table; - } - - const Table* target_table() const - { - return m_target_table; - } - - std::vector m_link_columns; - -private: - void map_links(size_t column, size_t row, LinkMapFunction& lm) - { - bool last = (column + 1 == m_link_columns.size()); - ColumnType type = m_link_types[column]; - if (type == col_type_Link) { - const LinkColumn& cl = *static_cast(m_link_columns[column]); - size_t r = to_size_t(cl.get(row)); - if (r == 0) - return; - r--; // LinkColumn stores link to row N as N + 1 - if (last) { - bool continue2 = lm.consume(r); - if (!continue2) - return; - } - else - map_links(column + 1, r, lm); - } - else if (type == col_type_LinkList) { - const LinkListColumn& cll = *static_cast(m_link_columns[column]); - ConstLinkViewRef lvr = cll.get(row); - for (size_t t = 0; t < lvr->size(); t++) { - size_t r = lvr->get(t).get_index(); - if (last) { - bool continue2 = lm.consume(r); - if (!continue2) - return; - } - else - map_links(column + 1, r, lm); - } - } - else if (type == col_type_BackLink) { - const BacklinkColumn& bl = *static_cast(m_link_columns[column]); - size_t count = bl.get_backlink_count(row); - for (size_t i = 0; i < count; ++i) { - size_t r = bl.get_backlink(row, i); - if (last) { - bool continue2 = lm.consume(r); - if (!continue2) - return; - } else - map_links(column + 1, r, lm); - } - } - } - - - void get_links(size_t row, std::vector& result) - { - MakeLinkVector mlv = MakeLinkVector(result); - map_links(row, mlv); - } - - std::vector m_link_column_indexes; - std::vector m_link_types; - const Table* m_base_table = nullptr; - const Table* m_target_table = nullptr; - bool m_only_unary_links = true; - - template - friend Query compare(const Subexpr2&, const ConstRow&); -}; - -template -Query string_compare(const Columns& left, T right, bool case_insensitive); -template -Query string_compare(const Columns& left, const Columns& right, bool case_insensitive); - -template -Value make_value_for_link(bool only_unary_links, size_t size) -{ - Value value; - if (only_unary_links) { - REALM_ASSERT(size <= 1); - value.init(false, 1); - value.m_storage.set_null(0); - } - else { - value.init(true, size); - } - return value; -} - - -// If we add a new Realm type T and quickly want Query support for it, then simply inherit from it like -// `template <> class Columns : public SimpleQuerySupport` and you're done. Any operators of the set -// { ==, >=, <=, !=, >, < } that are supported by T will be supported by the "query expression syntax" -// automatically. NOTE: This method of Query support will be slow because it goes through Table::get. -// To get faster Query support, either add SequentialGetter support (faster) or create a query_engine.hpp -// node for it (super fast). - -template -class SimpleQuerySupport : public Subexpr2 { -public: - SimpleQuerySupport(size_t column, const Table* table, const std::vector& links = {}) : - m_column(column), m_link_map(table, links) - { - } - - bool is_nullable() const noexcept - { - return m_link_map.base_table()->is_nullable(m_column); - } - - const Table* get_base_table() const override - { - return m_link_map.base_table(); - } - - void set_base_table(const Table* table) override - { - m_link_map.set_base_table(table); - } - - void evaluate(size_t index, ValueBase& destination) override - { - Value& d = static_cast&>(destination); - - if (links_exist()) { - std::vector links = m_link_map.get_links(index); - Value v = make_value_for_link(m_link_map.only_unary_links(), links.size()); - - for (size_t t = 0; t < links.size(); t++) { - size_t link_to = links[t]; - v.m_storage.set(t, m_link_map.target_table()->template get(m_column, link_to)); - } - destination.import(v); - } - else { - // Not a link column - const Table* target_table = m_link_map.target_table(); - for (size_t t = 0; t < destination.m_values && index + t < target_table->size(); t++) { - d.m_storage.set(t, target_table->get(m_column, index + t)); - } - } - } - - bool links_exist() const - { - return m_link_map.m_link_columns.size() > 0; - } - - // Column index of payload column of m_table - size_t m_column; - LinkMap m_link_map; -}; - - -template <> -class Columns : public SimpleQuerySupport { - using SimpleQuerySupport::SimpleQuerySupport; - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr>(*this); - } -}; - -template <> -class Columns : public SimpleQuerySupport { - using SimpleQuerySupport::SimpleQuerySupport; - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr>(*this); - } -}; - - -template <> -class Columns : public SimpleQuerySupport { -public: - using SimpleQuerySupport::SimpleQuerySupport; - std::unique_ptr clone(QueryNodeHandoverPatches* = nullptr) const override - { - return make_subexpr>(*this); - } - - Query equal(StringData sd, bool case_sensitive = true) - { - return string_compare(*this, sd, case_sensitive); - } - - Query equal(const Columns& col, bool case_sensitive = true) - { - return string_compare(*this, col, case_sensitive); - } - - Query not_equal(StringData sd, bool case_sensitive = true) - { - return string_compare(*this, sd, case_sensitive); - } - - Query not_equal(const Columns& col, bool case_sensitive = true) - { - return string_compare(*this, col, case_sensitive); - } - - Query begins_with(StringData sd, bool case_sensitive = true) - { - return string_compare(*this, sd, case_sensitive); - } - - Query begins_with(const Columns& col, bool case_sensitive = true) - { - return string_compare(*this, col, case_sensitive); - } - - Query ends_with(StringData sd, bool case_sensitive = true) - { - return string_compare(*this, sd, case_sensitive); - } - - Query ends_with(const Columns& col, bool case_sensitive = true) - { - return string_compare(*this, col, case_sensitive); - } - - Query contains(StringData sd, bool case_sensitive = true) - { - return string_compare(*this, sd, case_sensitive); - } - - Query contains(const Columns& col, bool case_sensitive = true) - { - return string_compare(*this, col, case_sensitive); - } -}; - - -template -Query string_compare(const Columns& left, T right, bool case_sensitive) -{ - StringData sd(right); - if (case_sensitive) - return create(sd, left); - else - return create(sd, left); -} - -template -Query string_compare(const Columns& left, const Columns& right, bool case_sensitive) -{ - if (case_sensitive) - return make_expression>(right.clone(), left.clone()); - else - return make_expression>(right.clone(), left.clone()); -} - -// Columns == Columns -inline Query operator == (const Columns& left, const Columns& right) { - return string_compare(left, right, true); -} - -// Columns != Columns -inline Query operator != (const Columns& left, const Columns& right) { - return string_compare(left, right, true); -} - -// String == Columns -template -Query operator == (T left, const Columns& right) { - return operator==(right, left); -} - -// String != Columns -template -Query operator != (T left, const Columns& right) { - return operator!=(right, left); -} - -// Columns == String -template -Query operator == (const Columns& left, T right) { - return string_compare(left, right, true); -} - -// Columns != String -template -Query operator != (const Columns& left, T right) { - return string_compare(left, right, true); -} - - - -inline Query operator==(const Columns& left, BinaryData right) { - return create(right, left); -} - -inline Query operator==(BinaryData left, const Columns& right) { - return create(left, right); -} - -inline Query operator!=(const Columns& left, BinaryData right) { - return create(right, left); -} - -inline Query operator!=(BinaryData left, const Columns& right) { - return create(left, right); -} - - -// This class is intended to perform queries on the *pointers* of links, contrary to performing queries on *payload* -// in linked-to tables. Queries can be "find first link that points at row X" or "find first null-link". Currently -// only "find first null link" and "find first non-null link" is supported. More will be added later. When we add -// more, I propose to remove the template argument from this class and instead template it by -// a criteria-class (like the FindNullLinks class below in find_first()) in some generalized fashion. -template -class UnaryLinkCompare : public Expression -{ -public: - UnaryLinkCompare(LinkMap lm) : m_link_map(lm) - { - } - - void set_base_table(const Table* table) override - { - m_link_map.set_base_table(table); - } - - // Return main table of query (table on which table->where()... is invoked). Note that this is not the same as - // any linked-to payload tables - const Table* get_base_table() const override - { - return m_link_map.base_table(); - } - - size_t find_first(size_t start, size_t end) const override - { - for (; start < end;) { - std::vector l = m_link_map.get_links(start); - // We have found a Link which is NULL, or LinkList with 0 entries. Return it as match. - - FindNullLinks fnl; - m_link_map.map_links(start, fnl); - if (fnl.m_has_link == has_links) - return start; - - start++; - } - - return not_found; - } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return std::unique_ptr(new UnaryLinkCompare(*this)); - } - -private: - UnaryLinkCompare(const UnaryLinkCompare&) = default; - - mutable LinkMap m_link_map; -}; - -class LinkCount : public Subexpr2 { -public: - LinkCount(LinkMap link_map): m_link_map(link_map) { } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr(*this); - } - - const Table* get_base_table() const override - { - return m_link_map.base_table(); - } - - void set_base_table(const Table* table) override - { - m_link_map.set_base_table(table); - } - - void evaluate(size_t index, ValueBase& destination) override - { - size_t count = m_link_map.count_links(index); - destination.import(Value(false, 1, count)); - } - -private: - LinkMap m_link_map; -}; - -struct ConstantRowValueHandoverPatch : public QueryNodeHandoverPatch { - std::unique_ptr row_patch; -}; - -class ConstantRowValue : public Subexpr2 { -public: - ConstantRowValue(const ConstRow& row) : m_row(row) { } - - void set_base_table(const Table*) override { } - const Table* get_base_table() const override { return nullptr; } - - void evaluate(size_t, ValueBase& destination) override - { - if (m_row.is_attached()) { - Value v(RowIndex(m_row.get_index())); - destination.import(v); - } else { - Value v(RowIndex::Detached); - destination.import(v); - } - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new ConstantRowValue(*this, patches)); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - REALM_ASSERT(patches.size()); - std::unique_ptr abstract_patch = std::move(patches.back()); - patches.pop_back(); - - auto patch = dynamic_cast(abstract_patch.get()); - REALM_ASSERT(patch); - - m_row.apply_and_consume_patch(patch->row_patch, group); - } - -private: - ConstantRowValue(const ConstantRowValue& source, QueryNodeHandoverPatches* patches) - : m_row(patches ? ConstRow() : source.m_row) - { - if (!patches) - return; - - std::unique_ptr patch(new ConstantRowValueHandoverPatch); - ConstRow::generate_patch(source.m_row, patch->row_patch); - patches->emplace_back(patch.release()); - } - - ConstRow m_row; -}; - -template -class SubColumns; - -// This is for LinkList and BackLink too since they're declared as typedefs of Link. -template <> class Columns : public Subexpr2 -{ -public: - Query is_null() { - if (m_link_map.m_link_columns.size() > 1) - throw std::runtime_error("Combining link() and is_null() is currently not supported"); - // Todo, it may be useful to support the above, but we would need to figure out an intuitive behaviour - return make_expression>(m_link_map); - } - - Query is_not_null() { - if (m_link_map.m_link_columns.size() > 1) - throw std::runtime_error("Combining link() and is_not_null() is currently not supported"); - // Todo, it may be useful to support the above, but we would need to figure out an intuitive behaviour - return make_expression>(m_link_map); - } - - LinkCount count() const - { - return LinkCount(m_link_map); - } - - template - SubColumns column(size_t column) const - { - return SubColumns(Columns(column, m_link_map.target_table()), m_link_map); - } - - LinkMap link_map() const { return m_link_map; } - - const Table* get_base_table() const override { return m_link_map.base_table(); } - void set_base_table(const Table* table) override { m_link_map.set_base_table(table); } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr>(*this); - } - - void evaluate(size_t index, ValueBase& destination) override - { - std::vector links = m_link_map.get_links(index); - Value v = make_value_for_link(m_link_map.only_unary_links(), links.size()); - - for (size_t t = 0; t < links.size(); t++) { - v.m_storage.set(t, RowIndex(links[t])); - } - destination.import(v); - } - -private: - Columns(size_t column, const Table* table, const std::vector& links={}) : - m_link_map(table, links) - { - static_cast(column); - } - - LinkMap m_link_map; - friend class Table; -}; - - -template -Query compare(const Subexpr2& left, const ConstRow& row) -{ - static_assert(std::is_same::value || std::is_same::value, - "Links can only be compared for equality."); - const Columns* column = dynamic_cast*>(&left); - if (column) { - LinkMap link_map = column->link_map(); - REALM_ASSERT(link_map.target_table() == row.get_table() || !row.is_attached()); -#ifdef REALM_OLDQUERY_FALLBACK - if (link_map.m_link_columns.size() == 1) { - // We can fall back to Query::links_to for != and == operations on links, but only - // for == on link lists. This is because negating query.links_to(…) is equivalent to - // to "ALL linklist != row" rather than the "ANY linklist != row" semantics we're after. - if (link_map.m_link_types[0] == col_type_Link || - (link_map.m_link_types[0] == col_type_LinkList && std::is_same::value)) { - const Table* t = column->get_base_table(); - Query query(*t); - - if (std::is_same::value) { - // Negate the following `links_to`. - query.Not(); - } - query.links_to(link_map.m_link_column_indexes[0], row); - return query; - } - } -#endif - } - return make_expression>(left.clone(), make_subexpr(row)); -} - -inline Query operator == (const Subexpr2& left, const ConstRow& row) { return compare(left, row); } -inline Query operator != (const Subexpr2& left, const ConstRow& row) { return compare(left, row); } -inline Query operator == (const ConstRow& row, const Subexpr2& right) { return compare(right, row); } -inline Query operator != (const ConstRow& row, const Subexpr2& right) { return compare(right, row); } - -template -Query compare(const Subexpr2& left, null) -{ - static_assert(std::is_same::value || std::is_same::value, - "Links can only be compared for equality."); - return make_expression>(left.clone(), make_subexpr>()); -} - -inline Query operator == (const Subexpr2& left, null) { return compare(left, null()); } -inline Query operator != (const Subexpr2& left, null) { return compare(left, null()); } -inline Query operator == (null, const Subexpr2& right) { return compare(right, null()); } -inline Query operator != (null, const Subexpr2& right) { return compare(right, null()); } - - -template -class Columns : public Subexpr2 -{ -public: - using ColType = typename ColumnTypeTraits::column_type; - - Columns(size_t column, const Table* table, const std::vector& links={}): - m_link_map(table, links), m_column(column), m_nullable(m_link_map.target_table()->is_nullable(m_column)) - { - } - - Columns(const Columns& other): - m_link_map(other.m_link_map), m_column(other.m_column), m_nullable(other.m_nullable) - { - } - - Columns& operator=(const Columns& other) - { - if (this != &other) { - m_link_map = other.m_link_map; - m_sg.reset(); - m_column = other.m_column; - m_nullable = other.m_nullable; - } - return *this; - } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr>(*this); - } - - // See comment in base class - void set_base_table(const Table* table) override - { - m_link_map.set_base_table(table); - - m_nullable = m_link_map.target_table()->is_nullable(m_column); - const ColumnBase* c = &m_link_map.target_table()->get_column_base(m_column); - - if (m_sg == nullptr) { - if (m_nullable && std::is_same::value) { - m_sg.reset(new SequentialGetter()); - } - else { - m_sg.reset(new SequentialGetter()); - } - } - - if (m_nullable && std::is_same::value) { - static_cast&>(*m_sg).init(static_cast(c)); - } - else { - static_cast&>(*m_sg).init(static_cast(c)); - } - } - - - // Recursively fetch tables of columns in expression tree. Used when user first builds a stand-alone expression - // and binds it to a Query at a later time - const Table* get_base_table() const override - { - return m_link_map.base_table(); - } - - template - void evaluate_internal(size_t index, ValueBase& destination) { - using U = typename ColType2::value_type; - auto sgc = static_cast*>(m_sg.get()); - - if (links_exist()) { - // LinkList with more than 0 values. Create Value with payload for all fields - - std::vector links = m_link_map.get_links(index); - auto v = make_value_for_link::type>(m_link_map.only_unary_links(), links.size()); - - for (size_t t = 0; t < links.size(); t++) { - size_t link_to = links[t]; - sgc->cache_next(link_to); - - if (sgc->m_column->is_null(link_to)) - v.m_storage.set_null(t); - else - v.m_storage.set(t, sgc->get_next(link_to)); - } - destination.import(v); - } - else { - // Not a Link column - // make sequential getter load the respective leaf to access data at column row 'index' - sgc->cache_next(index); - size_t colsize = sgc->m_column->size(); - - // Now load `ValueBase::default_size` rows from from the leaf into m_storage. If it's an integer - // leaf, then it contains the method get_chunk() which copies these values in a super fast way (first - // case of the `if` below. Otherwise, copy the values one by one in a for-loop (the `else` case). - if (std::is_same::value && index + ValueBase::default_size <= sgc->m_leaf_end) { - Value v; - - // If you want to modify 'default_size' then update Array::get_chunk() - REALM_ASSERT_3(ValueBase::default_size, ==, 8); - - auto sgc_2 = static_cast*>(m_sg.get()); - sgc_2->m_leaf_ptr->get_chunk(index - sgc->m_leaf_start, - static_cast*>(static_cast(&v))->m_storage.m_first); - - destination.import(v); - } - else - { - size_t rows = colsize - index; - if (rows > ValueBase::default_size) - rows = ValueBase::default_size; - Value::type> v(false, rows); - - for (size_t t = 0; t < rows; t++) - v.m_storage.set(t, sgc->get_next(index + t)); - - destination.import(v); - } - } - } - - // Load values from Column into destination - void evaluate(size_t index, ValueBase& destination) override { - if (m_nullable && std::is_same::value) { - evaluate_internal(index, destination); - } - else { - evaluate_internal(index, destination); - } - } - - bool links_exist() const - { - return m_link_map.m_link_columns.size() > 0; - } - - bool is_nullable() const - { - return m_nullable; - } - - LinkMap m_link_map; - - // Fast (leaf caching) value getter for payload column (column in table on which query condition is executed) - std::unique_ptr m_sg; - - // Column index of payload column of m_table - size_t m_column; - -private: - // set to false by default for stand-alone Columns declaration that are not yet associated with any table - // or oclumn. Call init() to update it or use a constructor that takes table + column index as argument. - bool m_nullable = false; -}; - -template -class SubColumnAggregate; -namespace aggregate_operations { - template - class Minimum; - template - class Maximum; - template - class Sum; - template - class Average; -} - -template -class SubColumns : public Subexpr { -public: - SubColumns(Columns column, LinkMap link_map) - : m_column(column) - , m_link_map(link_map) - { - } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr>(*this); - } - - const Table* get_base_table() const override - { - return m_link_map.base_table(); - } - - void set_base_table(const Table* table) override - { - m_link_map.set_base_table(table); - m_column.set_base_table(m_link_map.target_table()); - } - - void evaluate(size_t, ValueBase&) override - { - // SubColumns can only be used in an expression in conjunction with its aggregate methods. - REALM_ASSERT(false); - } - - SubColumnAggregate> min() const - { - return { m_column, m_link_map }; - } - - SubColumnAggregate> max() const - { - return { m_column, m_link_map }; - } - - SubColumnAggregate> sum() const - { - return { m_column, m_link_map }; - } - - SubColumnAggregate> average() const - { - return { m_column, m_link_map }; - } - -private: - Columns m_column; - LinkMap m_link_map; -}; - -template -class SubColumnAggregate : public Subexpr2 -{ -public: - SubColumnAggregate(Columns column, LinkMap link_map) - : m_column(column) - , m_link_map(link_map) - { - } - - std::unique_ptr clone(QueryNodeHandoverPatches*) const override - { - return make_subexpr(*this); - } - - const Table* get_base_table() const override - { - return m_link_map.base_table(); - } - - void set_base_table(const Table* table) override - { - m_link_map.set_base_table(table); - m_column.set_base_table(m_link_map.target_table()); - } - - void evaluate(size_t index, ValueBase& destination) override - { - std::vector links = m_link_map.get_links(index); - std::sort(links.begin(), links.end()); - - Operation op; - for (size_t link_index = 0; link_index < links.size(); ) { - Value value; - size_t link = links[link_index]; - m_column.evaluate(link, value); - - // Columns::evaluate fetches values in chunks of ValueBase::default_size. Process all values - // within the chunk that came from rows that we link to. - const auto& value_storage = value.m_storage; - for (size_t value_index = 0; value_index < value.m_values; ) { - if (!value_storage.is_null(value_index)) { - op.accumulate(value_storage[value_index]); - } - if (++link_index >= links.size()) { - break; - } - - size_t previous_link = link; - link = links[link_index]; - value_index += link - previous_link; - } - } - if (op.is_null()) { - destination.import(Value(false, 1, null())); - } else { - destination.import(Value(false, 1, op.result())); - } - } - -private: - Columns m_column; - LinkMap m_link_map; -}; - -struct SubQueryCountHandoverPatch : QueryNodeHandoverPatch { - QueryHandoverPatch m_query; -}; - -class SubQueryCount : public Subexpr2 { -public: - SubQueryCount(Query q, LinkMap link_map) : m_query(std::move(q)), m_link_map(std::move(link_map)) { } - - const Table* get_base_table() const override - { - return m_link_map.base_table(); - } - - void set_base_table(const Table* table) override - { - m_link_map.set_base_table(table); - } - - void evaluate(size_t index, ValueBase& destination) override - { - std::vector links = m_link_map.get_links(index); - std::sort(links.begin(), links.end()); - - size_t count = std::accumulate(links.begin(), links.end(), 0, [this](size_t running_count, size_t link){ - return running_count + m_query.count(link, link + 1, 1); - }); - - destination.import(Value(false, 1, count)); - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - if (patches) - return std::unique_ptr(new SubQueryCount(*this, patches)); - - return make_subexpr(*this); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - REALM_ASSERT(patches.size()); - std::unique_ptr abstract_patch = std::move(patches.back()); - patches.pop_back(); - - auto patch = dynamic_cast(abstract_patch.get()); - REALM_ASSERT(patch); - - m_query.apply_patch(patch->m_query, group); - } - -private: - SubQueryCount(const SubQueryCount& other, QueryNodeHandoverPatches* patches) : m_link_map(other.m_link_map) - { - std::unique_ptr patch(new SubQueryCountHandoverPatch); - m_query = Query(other.m_query, patch->m_query, ConstSourcePayload::Copy); - patches->emplace_back(patch.release()); - } - - Query m_query; - LinkMap m_link_map; -}; - -// The unused template parameter is a hack to avoid a circular dependency between table.hpp and query_expression.hpp. -template -class SubQuery { -public: - SubQuery(Columns link_column, Query query) : m_query(std::move(query)), m_link_map(link_column.link_map()) - { - REALM_ASSERT(m_link_map.target_table() == m_query.get_table()); - } - - SubQueryCount count() const - { - return SubQueryCount(m_query, m_link_map); - } - -private: - Query m_query; - LinkMap m_link_map; -}; - -namespace aggregate_operations { - template - class BaseAggregateOperation { - static_assert(std::is_same::value || std::is_same::value || std::is_same::value, - "Numeric aggregates can only be used with subcolumns of numeric types"); - public: - using ResultType = R; - - void accumulate(T value) - { - m_count++; - m_result = Derived::apply(m_result, value); - } - - bool is_null() const { return m_count == 0; } - ResultType result() const { return m_result; } - - protected: - size_t m_count = 0; - ResultType m_result = Derived::initial_value(); - }; - - template - class Minimum : public BaseAggregateOperation> { - public: - static T initial_value() { return std::numeric_limits::max(); } - static T apply(T a, T b) { return std::min(a, b); } - }; - - template - class Maximum : public BaseAggregateOperation> { - public: - static T initial_value() { return std::numeric_limits::min(); } - static T apply(T a, T b) { return std::max(a, b); } - }; - - template - class Sum : public BaseAggregateOperation> { - public: - static T initial_value() { return T(); } - static T apply(T a, T b) { return a + b; } - bool is_null() const { return false; } - }; - - template - class Average : public BaseAggregateOperation, double> { - using Base = BaseAggregateOperation, double>; - public: - static double initial_value() { return 0; } - static double apply(double a, T b) { return a + b; } - double result() const { return Base::m_result / Base::m_count; } - }; -} - -template -class UnaryOperator : public Subexpr2 -{ -public: - UnaryOperator(std::unique_ptr left) : m_left(std::move(left)) {} - - UnaryOperator(const UnaryOperator& other, QueryNodeHandoverPatches* patches) : - m_left(other.m_left->clone(patches)) - { - } - - UnaryOperator& operator=(const UnaryOperator& other) - { - if (this != &other) { - m_left = other.m_left->clone(); - } - return *this; - } - - UnaryOperator(UnaryOperator&&) = default; - UnaryOperator& operator=(UnaryOperator&&) = default; - - // See comment in base class - void set_base_table(const Table* table) override - { - m_left->set_base_table(table); - } - - // Recursively fetch tables of columns in expression tree. Used when user first builds a stand-alone expression and - // binds it to a Query at a later time - const Table* get_base_table() const override - { - return m_left->get_base_table(); - } - - // destination = operator(left) - void evaluate(size_t index, ValueBase& destination) override - { - Value result; - Value left; - m_left->evaluate(index, left); - result.template fun(&left); - destination.import(result); - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return make_subexpr(*this, patches); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - m_left->apply_handover_patch(patches, group); - } - -private: - typedef typename oper::type T; - std::unique_ptr m_left; -}; - - -template -class Operator : public Subexpr2 -{ -public: - Operator(std::unique_ptr left, std::unique_ptr right) : - m_left(std::move(left)), m_right(std::move(right)) - { - } - - Operator(const Operator& other, QueryNodeHandoverPatches* patches) : m_left(other.m_left->clone(patches)), - m_right(other.m_right->clone(patches)) - { - } - - Operator& operator=(const Operator& other) - { - if (this != &other) { - m_left = other.m_left->clone(); - m_right = other.m_right->clone(); - } - return *this; - } - - Operator(Operator&&) = default; - Operator& operator=(Operator&&) = default; - - // See comment in base class - void set_base_table(const Table* table) override - { - m_left->set_base_table(table); - m_right->set_base_table(table); - } - - // Recursively fetch tables of columns in expression tree. Used when user first builds a stand-alone expression and - // binds it to a Query at a later time - const Table* get_base_table() const override - { - const Table* l = m_left->get_base_table(); - const Table* r = m_right->get_base_table(); - - // Queries do not support multiple different tables; all tables must be the same. - REALM_ASSERT(l == nullptr || r == nullptr || l == r); - - // nullptr pointer means expression which isn't yet associated with any table, or is a Value - return l ? l : r; - } - - // destination = operator(left, right) - void evaluate(size_t index, ValueBase& destination) override - { - Value result; - Value left; - Value right; - m_left->evaluate(index, left); - m_right->evaluate(index, right); - result.template fun(&left, &right); - destination.import(result); - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return make_subexpr(*this, patches); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - m_right->apply_handover_patch(patches, group); - m_left->apply_handover_patch(patches, group); - } - -private: - typedef typename oper::type T; - std::unique_ptr m_left; - std::unique_ptr m_right; -}; - - -template -class Compare : public Expression -{ -public: - Compare(std::unique_ptr left, std::unique_ptr right) : - m_left(std::move(left)), m_right(std::move(right)) - { - } - - // See comment in base class - void set_base_table(const Table* table) override - { - m_left->set_base_table(table); - m_right->set_base_table(table); - } - - // Recursively fetch tables of columns in expression tree. Used when user first builds a stand-alone expression and - // binds it to a Query at a later time - const Table* get_base_table() const override - { - const Table* l = m_left->get_base_table(); - const Table* r = m_right->get_base_table(); - - // All main tables in each subexpression of a query (table.columns() or table.link()) must be the same. - REALM_ASSERT(l == nullptr || r == nullptr || l == r); - - // nullptr pointer means expression which isn't yet associated with any table, or is a Value - return l ? l : r; - } - - size_t find_first(size_t start, size_t end) const override - { - size_t match; - Value right; - Value left; - - for (; start < end;) { - m_left->evaluate(start, left); - m_right->evaluate(start, right); - match = Value::template compare(&left, &right); - - if (match != not_found && match + start < end) - return start + match; - - size_t rows = (left.m_from_link_list || right.m_from_link_list) ? 1 : minimum(right.m_values, left.m_values); - start += rows; - } - - return not_found; // no match - } - - std::unique_ptr clone(QueryNodeHandoverPatches* patches) const override - { - return std::unique_ptr(new Compare(*this, patches)); - } - - void apply_handover_patch(QueryNodeHandoverPatches& patches, Group& group) override - { - m_right->apply_handover_patch(patches, group); - m_left->apply_handover_patch(patches, group); - } - -private: - Compare(const Compare& other, QueryNodeHandoverPatches* patches) : m_left(other.m_left->clone(patches)), - m_right(other.m_right->clone(patches)) - { - } - - std::unique_ptr m_left; - std::unique_ptr m_right; -}; - -} -#endif // REALM_QUERY_EXPRESSION_HPP - diff --git a/Pods/Realm/include/core/realm/realm_nmmintrin.h b/Pods/Realm/include/core/realm/realm_nmmintrin.h deleted file mode 100644 index 883f01dd..00000000 --- a/Pods/Realm/include/core/realm/realm_nmmintrin.h +++ /dev/null @@ -1,164 +0,0 @@ -#ifndef REALM_NMMINTRIN_H -#define REALM_NMMINTRIN_H - -/* - We must support runtime detection of CPU support of SSE when distributing Realm as a closed source library. - - This is a problem on gcc and llvm: To use SSE intrinsics we need to pass -msse on the command line (to get offered - __builtin_ accessors used by intrinsics functions). However, the -msse flag allows gcc to emit SSE instructions - in its code generation/optimization. This is unwanted because the binary would crash on non-SSE CPUs. - - Since there exists no flag in gcc that enables intrinsics but probits SSE in code generation, we define our - own intrinsics to be assembled by the back end assembler and omit passing -msse to gcc. -*/ - -#ifndef _MSC_VER - -#ifdef REALM_COMPILER_SSE - #include // SSE2 (using __m128i) -#endif - -namespace realm { - -#if 0 -#ifdef REALM_COMPILER_AVX -typedef float __m256 __attribute__((__vector_size__(32), __may_alias__)); -typedef double __m256d __attribute__((__vector_size__(32), __may_alias__)); - -const int _CMP_EQ_OQ = 0x00; // Equal (ordered, non-signaling) -const int _CMP_NEQ_OQ = 0x0c; // Not-equal (ordered, non-signaling) -const int _CMP_LT_OQ = 0x11; // Less-than (ordered, non-signaling) -const int _CMP_LE_OQ = 0x12; // Less-than-or-equal (ordered, non-signaling) -const int _CMP_GE_OQ = 0x1d; // Greater-than-or-equal (ordered, non-signaling) -const int _CMP_GT_OQ = 0x1e; // Greater-than (ordered, non-signaling) - - -template -static int movemask_cmp_ps(__m256* y1, __m256* y2) -{ - int ret; - __asm__("vmovaps %0, %%ymm0" : : "m"(*y1) : "%xmm0" ); - __asm__("vmovaps %0, %%ymm1" : : "m"(*y2) : "%xmm1" ); - __asm__("vcmpps %0, %%ymm0, %%ymm1, %%ymm0" : : "I"(op) : "%xmm0" ); - __asm__("vmovmskps %%ymm0, %0" : "=r"(ret) : : ); - return ret; -} - -template -static inline int movemask_cmp_pd(__m256d* y1, __m256d* y2) -{ - int ret; - __asm__("vmovapd %0, %%ymm0" : : "m"(*y1) : "%xmm0" ); - __asm__("vmovapd %0, %%ymm1" : : "m"(*y2) : "%xmm1" ); - __asm__("vcmppd %0, %%ymm0, %%ymm1, %%ymm0" : : "I"(op) : "%xmm0" ); - __asm__("vmovmskpd %%ymm0, %0" : "=r"(ret) : : ); - return ret; -} - - - -static inline int movemask_cmp_ps(__m256* y1, __m256* y2, int op) -{ - // todo, use constexpr; - if (op == _CMP_EQ_OQ) - return movemask_cmp_ps<_CMP_NEQ_OQ>(y1, y2); - else if (op == _CMP_NEQ_OQ) - return movemask_cmp_ps<_CMP_NEQ_OQ>(y1, y2); - else if (op == _CMP_LT_OQ) - return movemask_cmp_ps<_CMP_LT_OQ>(y1, y2); - else if (op == _CMP_LE_OQ) - return movemask_cmp_ps<_CMP_LE_OQ>(y1, y2); - else if (op == _CMP_GE_OQ) - return movemask_cmp_ps<_CMP_GE_OQ>(y1, y2); - else if (op == _CMP_GT_OQ) - return movemask_cmp_ps<_CMP_GT_OQ>(y1, y2); - - REALM_ASSERT(false); - return 0; -} - -static inline int movemask_cmp_pd(__m256d* y1, __m256d* y2, int op) -{ - // todo, use constexpr; - if (op == _CMP_EQ_OQ) - return movemask_cmp_pd<_CMP_NEQ_OQ>(y1, y2); - else if (op == _CMP_NEQ_OQ) - return movemask_cmp_pd<_CMP_NEQ_OQ>(y1, y2); - else if (op == _CMP_LT_OQ) - return movemask_cmp_pd<_CMP_LT_OQ>(y1, y2); - else if (op == _CMP_LE_OQ) - return movemask_cmp_pd<_CMP_LE_OQ>(y1, y2); - else if (op == _CMP_GE_OQ) - return movemask_cmp_pd<_CMP_GE_OQ>(y1, y2); - else if (op == _CMP_GT_OQ) - return movemask_cmp_pd<_CMP_GT_OQ>(y1, y2); - - REALM_ASSERT(false); - return 0; -} - - -#endif -#endif - -// Instructions introduced by SSE 3 and 4.2 -static inline __m128i _mm_cmpgt_epi64(__m128i xmm1, __m128i xmm2) -{ - __asm__("pcmpgtq %1, %0" : "+x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -static inline __m128i _mm_cmpeq_epi64(__m128i xmm1, __m128i xmm2) -{ - __asm__("pcmpeqq %1, %0" : "+x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -static inline __m128i __attribute__((always_inline)) _mm_min_epi8(__m128i xmm1, __m128i xmm2) -{ - __asm__("pminsb %1, %0" : "+x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -static inline __m128i __attribute__((always_inline)) _mm_max_epi8(__m128i xmm1, __m128i xmm2) -{ - __asm__("pmaxsb %1, %0" : "+x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -static inline __m128i __attribute__((always_inline)) _mm_max_epi32(__m128i xmm1, __m128i xmm2) -{ - __asm__("pmaxsd %1, %0" : "+x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -static inline __m128i __attribute__((always_inline)) _mm_min_epi32(__m128i xmm1, __m128i xmm2) -{ - __asm__("pminsd %1, %0" : "+x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -static inline __m128i __attribute__((always_inline)) _mm_cvtepi8_epi16(__m128i xmm2) -{ - __m128i xmm1; - __asm__("pmovsxbw %1, %0" : "=x" (xmm1) : "xm" (xmm2) : "xmm1"); - return xmm1; -} -static inline __m128i __attribute__((always_inline)) _mm_cvtepi16_epi32(__m128i xmm2) -{ - __m128i xmm1; - asm("pmovsxwd %1, %0" : "=x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -static inline __m128i __attribute__((always_inline)) _mm_cvtepi32_epi64(__m128i xmm2) -{ - __m128i xmm1; - __asm__("pmovsxdq %1, %0" : "=x" (xmm1) : "xm" (xmm2)); - return xmm1; -} - -} // namespace realm - -#endif -#endif diff --git a/Pods/Realm/include/core/realm/replication.hpp b/Pods/Realm/include/core/realm/replication.hpp deleted file mode 100644 index a9c5a0b2..00000000 --- a/Pods/Realm/include/core/realm/replication.hpp +++ /dev/null @@ -1,538 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_REPLICATION_HPP -#define REALM_REPLICATION_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - -// FIXME: Be careful about the possibility of one modification function being called by another where both do transaction logging. - -// FIXME: The current table/subtable selection scheme assumes that a TableRef of a subtable is not accessed after any modification of one of its ancestor tables. - -// FIXME: Checking on same Table* requires that ~Table checks and nullifies on match. Another option would be to store m_selected_table as a TableRef. Yet another option would be to assign unique identifiers to each Table instance via Allocator. Yet another option would be to explicitely invalidate subtables recursively when parent is modified. - -/// Replication is enabled by passing an instance of an implementation of this -/// class to the SharedGroup constructor. -class Replication: - public _impl::TransactLogConvenientEncoder, - protected _impl::TransactLogStream { -public: - // Be sure to keep this type aligned with what is actually used in - // SharedGroup. - using version_type = _impl::History::version_type; - using InputStream = _impl::NoCopyInputStream; - class TransactLogApplier; - class Interrupted; // Exception - class SimpleIndexTranslator; - - virtual std::string get_database_path() = 0; - - /// Called during construction of the associated SharedGroup object. - /// - /// \param shared_group The assocoated SharedGroup object. - virtual void initialize(SharedGroup& shared_group) = 0; - - /// Called by the associated SharedGroup object when a session is - /// initiated. A *session* is a sequence of of temporally overlapping - /// accesses to a specific Realm file, where each access consists of a - /// SharedGroup object through which the Realm file is open. Session - /// initiation occurs during the first opening of the Realm file within such - /// a session. - /// - /// Session initiation fails if this function throws. - /// - /// \param version The current version of the associated Realm. Out-of-Realm - /// history implementation can use this to trim off history entries that - /// were successfully added to the history, but for which the corresponding - /// subsequent commits on the Realm file failed. - /// - /// The default implementation does nothing. - virtual void initiate_session(version_type version) = 0; - - /// Called by the associated SharedGroup object when a session is - /// terminated. See initiate_session() for the definition of a - /// session. Session termination occurs upon closing the Realm through the - /// last SharedGroup object within the session. - /// - /// The default implementation does nothing. - virtual void terminate_session() noexcept = 0; - - /// Called by the associated SharedGroup to close any open files - /// or release similar system resources. - /// - /// This is a special purpose function that solves a problem that is - /// specific to the implementation available through . At - /// least for now, it is not to be considered a genuine part of the - /// Replication interface. The default implementation does nothing and other - /// implementations should not override this function. - virtual void commit_log_close() noexcept {} - - //@{ - - /// From the point of view of the Replication class, a transaction is - /// initiated when, and only when the associated SharedGroup object calls - /// initiate_transact() and the call is successful. The associated - /// SharedGroup object must terminate every initiated transaction either by - /// calling finalize_commit() or by calling abort_transact(). It may only - /// call finalize_commit(), however, after calling prepare_commit(), and - /// only when prepare_commit() succeeds. If prepare_commit() fails (i.e., - /// throws) abort_transact() must still be called. - /// - /// The associated SharedGroup object is supposed to terminate a transaction - /// as soon as possible, and is required to terminate it before attempting - /// to initiate a new one. - /// - /// initiate_transact() is called by the associated SharedGroup object as - /// part of the initiation of a transaction, and at a time where the caller - /// has acquired exclusive write access to the local Realm. The Replication - /// implementation is allowed to perform "precursor transactions" on the - /// local Realm at this time. During the initiated transaction, the - /// associated SharedGroup object must inform the Replication object of all - /// modifying operations by calling set_value() and friends. - /// - /// FIXME: There is currently no way for implementations to perform - /// precursor transactions, since a regular transaction would cause a dead - /// lock when it tries to acquire a write lock. Consider giving access to - /// special non-locking precursor transactions via an extra argument to this - /// function. - /// - /// prepare_commit() serves as the first phase of a two-phase commit. This - /// function is called by the associated SharedGroup object immediately - /// before the commit operation on the local Realm. The associated - /// SharedGroup object will then, as the second phase, either call - /// finalize_commit() or abort_transact() depending on whether the commit - /// operation succeeded or not. The Replication implementation is allowed to - /// modify the Realm via the associated SharedGroup object at this time - /// (important to in-Realm histories). - /// - /// initiate_transact() and prepare_commit() are allowed to block the - /// calling thread if, for example, they need to communicate over the - /// network. If a calling thread is blocked in one of these functions, it - /// must be possible to interrupt the blocking operation by having another - /// thread call interrupt(). The contract is as follows: When interrupt() is - /// called, then any execution of initiate_transact() or prepare_commit(), - /// initiated before the interruption, must complete without blocking, or - /// the execution must be aborted by throwing an Interrupted exception. If - /// initiate_transact() or prepare_commit() throws Interrupted, it counts as - /// a failed operation. - /// - /// finalize_commit() is called by the associated SharedGroup object - /// immediately after a successful commit operation on the local Realm. This - /// happens at a time where modification of the Realm is no longer possible - /// via the associated SharedGroup object. In the case of in-Realm - /// histories, the changes are automatically finalized as part of the commit - /// operation performed by the caller prior to the invocation of - /// finalize_commit(), so in that case, finalize_commit() might not need to - /// do anything. - /// - /// abort_transact() is called by the associated SharedGroup object to - /// terminate a transaction without committing. That is, any transaction - /// that is not terminated by finalize_commit() is terminated by - /// abort_transact(). This could be due to an explicit rollback, or due to a - /// failed commit attempt. - /// - /// Note that finalize_commit() and abort_transact() are not allowed to - /// throw. - /// - /// \param current_version The version of the snapshot that the current - /// transaction is based on. - /// - /// \param history_updated Pass true only when the history has already been - /// updated to reflect the currently bound snapshot, such as when - /// _impl::History::update_early_from_top_ref() was called during the - /// transition from a read transaction to the current write transaction. - /// - /// \return prepare_commit() returns the version of the new snapshot - /// produced by the transaction. - /// - /// \throw Interrupted Thrown by initiate_transact() and prepare_commit() if - /// a blocking operation was interrupted. - - void initiate_transact(version_type current_version, bool history_updated); - version_type prepare_commit(version_type current_version); - void finalize_commit() noexcept; - void abort_transact() noexcept; - - //@} - - - /// Interrupt any blocking call to a function in this class. This function - /// may be called asyncronously from any thread, but it may not be called - /// from a system signal handler. - /// - /// Some of the public function members of this class may block, but only - /// when it it is explicitely stated in the documention for those functions. - /// - /// FIXME: Currently we do not state blocking behaviour for all the - /// functions that can block. - /// - /// After any function has returned with an interruption indication, the - /// only functions that may safely be called are abort_transact() and the - /// destructor. If a client, after having received an interruption - /// indication, calls abort_transact() and then clear_interrupt(), it may - /// resume normal operation through this Replication object. - void interrupt() noexcept; - - /// May be called by a client to reset this Replication object after an - /// interrupted transaction. It is not an error to call this function in a - /// situation where no interruption has occured. - void clear_interrupt() noexcept; - - /// Apply a changeset to the specified group. - /// - /// \param logger If specified, and the library was compiled in debug mode, - /// then a line describing each individual operation is writted to the - /// specified logger. - /// - /// \throw BadTransactLog If the changeset could not be successfully parsed, - /// or ended prematurely. - static void apply_changeset(InputStream& changeset, Group&, util::Logger* logger = nullptr); - - enum HistoryType { - /// No history available. No support for either continuous transactions - /// or inter-client synchronization. - hist_None = 0, - - /// Out-of-Realm history supporting continuous transactions. - hist_OutOfRealm = 1, - - /// In-Realm history supporting continuous transactions - /// (_impl::InRealmHistory). - hist_InRealm = 2, - - /// In-Realm history supporting continuous transactions and inter-client - /// synchronization (_impl::SyncHistory). - hist_Sync = 3 - }; - - /// Returns the type of history maintained by this Replication - /// implementation, or \ref hist_None if no history is maintained by it. - /// - /// This type is used to ensure that all session participants agree on - /// history type, and that the Realm file contains a compatible type of - /// history, at the beginning of a new session. - /// - /// As a special case, if there is no top array (Group::m_top) at the - /// beginning of a new session, then all history types (as returned by - /// get_history_type()) are allowed during that session. Note that this is - /// only possible if there was no preceding session, or if no transaction - /// was sucessfully comitted during any of the preceding sessions. As soon - /// as a transaction is successfully committed, the Realm contains at least - /// a top array, and from that point on, the history type is generally - /// fixed, although still subject to certain allowed changes (as mentioned - /// below). - /// - /// For the sake of backwards compatibility with older Realm files that does - /// not store any history type, the following rule shall apply: - /// - /// - If the top array of a Realm file (Group::m_top) does not contain a - /// history type, because it is too short, it shall be understood as - /// implicitely storing the type \ref hist_None. - /// - /// Note: In what follows, the meaning of *preceding session* is: The last - /// preceding session that modified the Realm by sucessfully committing a - /// new snapshot. - /// - /// Older Realm files do not store any history type, even when they were - /// last used with a history of type \ref hist_OutOfRealm. Howewver, since - /// such histories (\ref hist_OutOfRealm) are placed outside the Realm file, - /// and are transient (recreated at the beginning of each new session), a - /// new session is not obliged to use the same type of history (\ref - /// hist_OutOfRealm). For this reason, and to achieve further backwards - /// compatibility, the following rules are adopted: - /// - /// - At the beginning of a new session, if there is no stored history - /// type (no top array), or if the stored history type is \ref - /// hist_None, assume that the history type used during the preceding - /// session was \ref hist_None or \ref hist_OutOfRealm, or that there - /// was no preceding session. In all other cases, assume that the stored - /// history type is the type used during the preceding session. - /// - /// - When storing the history type, store \ref hist_None if the history - /// type used in the current session is \ref hist_None or \ref - /// hist_OutOfRealm. In all other cases, store the actual history type - /// used. - /// - /// It shall be allowed to switch to a \ref hist_InRealm history if the - /// stored history type is either \ref hist_None or \ref - /// hist_OutOfRealm. Fortunately, this can be done simply by adding a - /// history to the Realm file (of type \ref hist_InRealm), and that is - /// possible because a \ref hist_InRealm history is independent of any - /// history used in a previous session (as long as it was session-confined), - /// or whether any history was used at all. Conversely, if a \ref - /// hist_OutOfRealm history was used in the previous session, then the - /// contents of that history becomes obsolete at the end of the previous - /// session. - /// - /// On the other hand, as soon as a history of type \ref hist_InRealm is - /// added to a Realm file, that history type is binding for all subsequent - /// sessions. In theory, this constraint is not necessary, and a later - /// switch to \ref hist_None or \ref hist_OutOfRealm would be possible - /// because of the fact that the contents of the history becomes obsolete at - /// the end of the session, however, because the \ref hist_InRealm history - /// remains in the Realm file, there are practical complications, and for - /// that reason, such switching shall not be supported. - /// - /// The \ref hist_Sync history type can only be used if the stored history - /// type is also \ref hist_Sync, or when there is no top array - /// yet. Additionally, when the stored history type is \ref hist_Sync, then - /// all subsequent sesssions must have the same type. These restrictions - /// apply because such a history needs to be maintained persistently across - /// sessions. That is, the contents of such a history is not obsolete at the - /// end of the session, and is in general needed during subsequent sessions. - /// - /// In general, if there is no stored history type (no top array) at the - /// beginning of a new session, or if the stored type disagrees with what is - /// returned by get_history_type() (which is possible due to particular - /// allowed changes of history type), the actual history type (as returned - /// by get_history_type()) used during that session, must be stored in the - /// Realm during the first successfully committed transaction of that - /// session, if any are sucessfully committed. But note that there is still - /// no need to expand the top array to store the history type \ref - /// hist_None, due to the rule mentioned above. - /// - /// Due to the rules listed above, a new history type only actually needs to - /// be stored when the history type of the session (get_history_type()) is - /// neither \ref hist_None nor \ref hist_OutOfRealm, and only when that - /// differs from the stored history type, or if there is no top array at the - /// beginning of the session. - /// - /// Summary of session-to-session history type change constraints: - /// - /// If there is no top array at the beginning of a new session, then all - /// history types (as returned by get_history_type()) are possible during - /// that session. Otherwise there must have been a preceding session (at - /// least one that adds the top array), and the following rules then apply: - /// - ///
-    ///
-    ///                      Type stored in
-    ///   Type used during   Realm file at
-    ///   preceding          beginning of     Possible history types (as returned by
-    ///   session            new session      get_history_type()) during new session
-    ///   ----------------------------------------------------------------------------
-    ///   hist_None          hist_None        hist_None, hist_OutOfRealm, hist_InRealm
-    ///   hist_OutOfRealm    hist_None        hist_None, hist_OutOfRealm, hist_InRealm
-    ///   hist_InRealm       hist_InRealm     hist_InRealm
-    ///   hist_Sync          hist_Sync        hist_Sync
-    ///
-    /// 
- /// - /// This function must return \ref hist_None when, and only when - /// get_history() returns null. - virtual HistoryType get_history_type() const noexcept = 0; - - /// Returns an object that gives access to the history of changesets in a - /// way that allows for continuous transactions to work - /// (Group::advance_transact() in particular). - /// - /// This function must return null when, and only when get_history_type() - /// returns \ref hist_None. - virtual _impl::History* get_history() = 0; - - virtual ~Replication() noexcept {} - -protected: - Replication(); - - - //@{ - - /// do_initiate_transact() is called by initiate_transact(), and likewise - /// for do_prepare_commit), do_finalize_commit(), and do_abort_transact(). - /// - /// With respect to exception safety, the Replication implementation has two - /// options: It can prepare to accept the accumulated changeset in - /// do_prepapre_commit() by allocating all required resources, and delay the - /// actual acceptance to do_finalize_commit(), which requires that the final - /// acceptance can be done without any risk of failure. Alternatively, the - /// Replication implementation can fully accept the changeset in - /// do_prepapre_commit() (allowing for failure), and then discard that - /// changeset during the next invocation of do_initiate_transact() if - /// `current_version` indicates that the previous transaction failed. - - virtual void do_initiate_transact(version_type current_version, bool history_updated) = 0; - virtual version_type do_prepare_commit(version_type orig_version) = 0; - virtual void do_finalize_commit() noexcept = 0; - virtual void do_abort_transact() noexcept = 0; - - //@} - - - virtual void do_interrupt() noexcept = 0; - - virtual void do_clear_interrupt() noexcept = 0; - - // Part of a temporary ugly hack to avoid generating new transaction logs - // during application of ones that have olready been created elsewhere. See - // ReplicationImpl::do_initiate_transact() in - // realm/replication/simplified/provider.cpp for more on this. - static void set_replication(Group&, Replication*) noexcept; - - friend class _impl::TransactReverser; -}; - - -class Replication::Interrupted: public std::exception { -public: - const char* what() const noexcept override - { - return "Interrupted"; - } -}; - - -class TrivialReplication: public Replication { -public: - ~TrivialReplication() noexcept {} - -protected: - typedef Replication::version_type version_type; - - TrivialReplication(const std::string& database_file); - - virtual version_type prepare_changeset(const char* data, size_t size, - version_type orig_version) = 0; - virtual void finalize_changeset() noexcept = 0; - - static void apply_changeset(const char* data, size_t size, SharedGroup& target, - util::Logger* logger = nullptr); - - bool is_history_updated() const noexcept; - - BinaryData get_uncommitted_changes() const noexcept; - - std::string get_database_path() override; - void initialize(SharedGroup&) override; - void do_initiate_transact(version_type, bool) override; - version_type do_prepare_commit(version_type orig_version) override; - void do_finalize_commit() noexcept override; - void do_abort_transact() noexcept override; - void do_interrupt() noexcept override; - void do_clear_interrupt() noexcept override; - void transact_log_reserve(size_t n, char** new_begin, char** new_end) override; - void transact_log_append(const char* data, size_t size, char** new_begin, - char** new_end) override; - -private: - const std::string m_database_file; - util::Buffer m_transact_log_buffer; - bool m_history_updated; - void internal_transact_log_reserve(size_t, char** new_begin, char** new_end); - - size_t transact_log_size(); -}; - - - - -// Implementation: - -inline Replication::Replication(): - _impl::TransactLogConvenientEncoder(static_cast<_impl::TransactLogStream&>(*this)) -{ -} - -inline void Replication::initiate_transact(version_type current_version, bool history_updated) -{ - do_initiate_transact(current_version, history_updated); - reset_selection_caches(); -} - -inline Replication::version_type Replication::prepare_commit(version_type orig_version) -{ - return do_prepare_commit(orig_version); -} - -inline void Replication::finalize_commit() noexcept -{ - do_finalize_commit(); -} - -inline void Replication::abort_transact() noexcept -{ - do_abort_transact(); -} - -inline void Replication::interrupt() noexcept -{ - do_interrupt(); -} - -inline void Replication::clear_interrupt() noexcept -{ - do_clear_interrupt(); -} - -inline TrivialReplication::TrivialReplication(const std::string& database_file): - m_database_file(database_file) -{ -} - -inline bool TrivialReplication::is_history_updated() const noexcept -{ - return m_history_updated; -} - -inline BinaryData TrivialReplication::get_uncommitted_changes() const noexcept -{ - const char* data = m_transact_log_buffer.data(); - size_t size = write_position() - data; - return BinaryData(data, size); -} - -inline size_t TrivialReplication::transact_log_size() -{ - return write_position() - m_transact_log_buffer.data(); -} - -inline void TrivialReplication::transact_log_reserve(size_t n, char** new_begin, char** new_end) -{ - internal_transact_log_reserve(n, new_begin, new_end); -} - -inline void TrivialReplication::internal_transact_log_reserve(size_t n, char** new_begin, char** new_end) -{ - char* data = m_transact_log_buffer.data(); - size_t size = write_position() - data; - m_transact_log_buffer.reserve_extra(size, n); - data = m_transact_log_buffer.data(); // May have changed - *new_begin = data + size; - *new_end = data + m_transact_log_buffer.size(); -} - -} // namespace realm - -#endif // REALM_REPLICATION_HPP diff --git a/Pods/Realm/include/core/realm/row.hpp b/Pods/Realm/include/core/realm/row.hpp deleted file mode 100644 index 3e4efb2a..00000000 --- a/Pods/Realm/include/core/realm/row.hpp +++ /dev/null @@ -1,792 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_ROW_HPP -#define REALM_ROW_HPP - -#include - -#include -#include -#include -#include -#include - -namespace realm { - -template -class BasicRow; - - -/// This class is a "mixin" and contains the common set of functions for several -/// distinct row-like classes. -/// -/// There is a direct and natural correspondance between the functions in this -/// class and functions in Table of the same name. For example: -/// -/// table[i].get_int(j) == table.get_int(i,j) -/// -/// The effect of calling most of the row accessor functions on a detached -/// accessor is unspecified and may lead to general corruption, and/or a -/// crash. The exceptions are is_attached(), detach(), get_table(), get_index(), -/// and the destructor. Note however, that get_index() will still return an -/// unspecified value for a deatched accessor. -/// -/// When a row accessor is evaluated in a boolean context, it evaluates to true -/// if, and only if it is attached. -/// -/// \tparam T A const or non-const table type (currently either `Table` or -/// `const Table`). -/// -/// \tparam R A specific row accessor class (BasicRow or BasicRowExpr) providing -/// members `T* impl_get_table() const`, `size_t impl_get_row_ndx() -/// const`, and `void impl_detach()`. Neither are allowed to throw. -/// -/// \sa Table -/// \sa BasicRow -template -class RowFuncs { -public: - typedef T table_type; - - typedef BasicTableRef ConstTableRef; - typedef BasicTableRef TableRef; // Same as ConstTableRef if `T` is 'const' - - typedef typename util::CopyConst::type L; - using ConstLinkViewRef = std::shared_ptr; - using LinkViewRef = std::shared_ptr; // Same as ConstLinkViewRef if `T` is 'const' - - int_fast64_t get_int(size_t col_ndx) const noexcept; - bool get_bool(size_t col_ndx) const noexcept; - float get_float(size_t col_ndx) const noexcept; - double get_double(size_t col_ndx) const noexcept; - StringData get_string(size_t col_ndx) const noexcept; - BinaryData get_binary(size_t col_ndx) const noexcept; - OldDateTime get_olddatetime(size_t col_ndx) const noexcept; - Timestamp get_timestamp(size_t col_ndx) const noexcept; - ConstTableRef get_subtable(size_t col_ndx) const; - TableRef get_subtable(size_t col_ndx); - size_t get_subtable_size(size_t col_ndx) const noexcept; - size_t get_link(size_t col_ndx) const noexcept; - bool is_null_link(size_t col_ndx) const noexcept; - bool is_null(size_t col_ndx) const noexcept; - ConstLinkViewRef get_linklist(size_t col_ndx) const; - LinkViewRef get_linklist(size_t col_ndx); - bool linklist_is_empty(size_t col_ndx) const noexcept; - size_t get_link_count(size_t col_ndx) const noexcept; - Mixed get_mixed(size_t col_ndx) const noexcept; - DataType get_mixed_type(size_t col_ndx) const noexcept; - - void set_int(size_t col_ndx, int_fast64_t value); - void set_bool(size_t col_ndx, bool value); - void set_float(size_t col_ndx, float value); - void set_double(size_t col_ndx, double value); - void set_string(size_t col_ndx, StringData value); - void set_binary(size_t col_ndx, BinaryData value); - void set_olddatetime(size_t col_ndx, OldDateTime value); - void set_timestamp(size_t col_ndx, Timestamp value); - void set_subtable(size_t col_ndx, const Table* value); - void set_link(size_t col_ndx, size_t value); - void nullify_link(size_t col_ndx); - void set_mixed(size_t col_ndx, Mixed value); - void set_mixed_subtable(size_t col_ndx, const Table* value); - void set_null(size_t col_ndx); - - void insert_substring(size_t col_ndx, size_t pos, StringData); - void remove_substring(size_t col_ndx, size_t pos, size_t size); - - //@{ - /// Note that these operations will cause the row accessor to be detached. - void remove(); - void move_last_over(); - //@} - - size_t get_backlink_count(const Table& src_table, - size_t src_col_ndx) const noexcept; - size_t get_backlink(const Table& src_table, size_t src_col_ndx, - size_t backlink_ndx) const noexcept; - - size_t get_column_count() const noexcept; - DataType get_column_type(size_t col_ndx) const noexcept; - StringData get_column_name(size_t col_ndx) const noexcept; - size_t get_column_index(StringData name) const noexcept; - - /// Returns true if, and only if this accessor is currently attached to a - /// row. - /// - /// A row accesor may get detached from the underlying row for various - /// reasons (see below). When it does, it no longer refers to anything, and - /// can no longer be used, except for calling is_attached(), detach(), - /// get_table(), get_index(), and the destructor. The consequences of - /// calling other methods on a detached row accessor are unspecified. There - /// are a few Realm functions (Table::find_pkey_int()) that return a - /// detached row accessor to indicate a 'null' result. In all other cases, - /// however, row accessors obtained by calling functions in the Realm API - /// are always in the 'attached' state immediately upon return from those - /// functions. - /// - /// A row accessor becomes detached if the underlying row is removed, if the - /// associated table accessor becomes detached, or if the detach() method is - /// called. A row accessor does not become detached for any other reason. - bool is_attached() const noexcept; - - /// Detach this accessor from the row it was attached to. This function has - /// no effect if the accessor was already detached (idempotency). - void detach() noexcept; - - /// The table containing the row to which this accessor is currently - /// bound. For a detached accessor, the returned value is null. - const table_type* get_table() const noexcept; - table_type* get_table() noexcept; - - /// The index of the row to which this accessor is currently bound. For a - /// detached accessor, the returned value is unspecified. - size_t get_index() const noexcept; - - explicit operator bool() const noexcept; - -private: - const T* table() const noexcept; - T* table() noexcept; - size_t row_ndx() const noexcept; -}; - - -/// This class is a special kind of row accessor. It differes from a real row -/// accessor (BasicRow) by having a trivial and fast copy constructor and -/// descructor. It is supposed to be used as the return type of functions such -/// as Table::operator[](), and then to be used as a basis for constructing a -/// real row accessor. Objects of this class are intended to only ever exist as -/// temporaries. -/// -/// In contrast to a real row accessor (`BasicRow`), objects of this class do -/// not keep the parent table "alive", nor are they maintained (adjusted) across -/// row insertions and row removals like real row accessors are. -/// -/// \sa BasicRow -template -class BasicRowExpr: - public RowFuncs> { -public: - BasicRowExpr() noexcept; - - template - BasicRowExpr(const BasicRowExpr&) noexcept; - -private: - T* m_table; // nullptr if detached. - size_t m_row_ndx; // Undefined if detached. - - BasicRowExpr(T*, size_t row_ndx) noexcept; - - T* impl_get_table() const noexcept; - size_t impl_get_row_ndx() const noexcept; - void impl_detach() noexcept; - - // Make impl_get_table(), impl_get_row_ndx(), and impl_detach() accessible - // from RowFuncs. - friend class RowFuncs>; - - // Make m_table and m_col_ndx accessible from BasicRowExpr(const - // BasicRowExpr&) for any U. - template - friend class BasicRowExpr; - - // Make m_table and m_col_ndx accessible from - // BasicRow::BaicRow(BasicRowExpr) for any U. - template - friend class BasicRow; - - // Make BasicRowExpr(T*, size_t) accessible from Table. - friend class Table; -}; - -// fwd decl -class Group; - -class RowBase { -protected: - TableRef m_table; // nullptr if detached. - size_t m_row_ndx; // Undefined if detached. - - void attach(Table*, size_t row_ndx) noexcept; - void reattach(Table*, size_t row_ndx) noexcept; - void impl_detach() noexcept; - RowBase() { }; - - using HandoverPatch = RowBaseHandoverPatch; - - RowBase(const RowBase& source, HandoverPatch& patch); -public: - static void generate_patch(const RowBase& source, HandoverPatch& patch); - void apply_patch(HandoverPatch& patch, Group& group); -private: - RowBase* m_prev = nullptr; // nullptr if first, undefined if detached. - RowBase* m_next = nullptr; // nullptr if last, undefined if detached. - - // Table needs to be able to modify m_table and m_row_ndx. - friend class Table; - -}; - - -/// An accessor class for table rows (a.k.a. a "row accessor"). -/// -/// For as long as it remains attached, a row accessor will keep the parent -/// table accessor alive. In case the lifetime of the parent table is not -/// managed by reference counting (such as when the table is an automatic -/// variable on the stack), the destruction of the table will cause all -/// remaining row accessors to be detached. -/// -/// While attached, a row accessor is bound to a particular row of the parent -/// table. If that row is removed, the accesssor becomes detached. If rows are -/// inserted or removed before it (at lower row index), then the accessor is -/// automatically adjusted to account for the change in index of the row to -/// which the accessor is bound. In other words, a row accessor is bound to the -/// contents of a row, not to a row index. See also is_attached(). -/// -/// Row accessors are created and used as follows: -/// -/// Row row = table[7]; // 8th row of `table` -/// ConstRow crow = ctable[2]; // 3rd row of const `ctable` -/// Row first_row = table.front(); -/// Row last_row = table.back(); -/// -/// float v = row.get_float(1); // Get the float in the 2nd column -/// row.set_string(0, "foo"); // Update the string in the 1st column -/// -/// Table* t = row.get_table(); // The parent table -/// size_t i = row.get_index(); // The current row index -/// -/// \sa RowFuncs -template -class BasicRow: - private RowBase, - public RowFuncs> { -public: - BasicRow() noexcept; - - template - BasicRow(BasicRowExpr) noexcept; - - BasicRow(const BasicRow&) noexcept; - - template - BasicRow(const BasicRow&) noexcept; - - template - BasicRow& operator=(BasicRowExpr) noexcept; - - template - BasicRow& operator=(BasicRow) noexcept; - - BasicRow& operator=(const BasicRow&) noexcept; - - ~BasicRow() noexcept; - -private: - T* impl_get_table() const noexcept; - size_t impl_get_row_ndx() const noexcept; - - // Make impl_get_table(), impl_get_row_ndx(), and impl_detach() accessible - // from RowFuncs. - friend class RowFuncs>; - - // Make m_table and m_col_ndx accessible from BasicRow(const BasicRow&) - // for any U. - template - friend class BasicRow; - -public: - std::unique_ptr> clone_for_handover(std::unique_ptr& patch) const - { - patch.reset(new HandoverPatch); - std::unique_ptr> retval(new BasicRow(*this, *patch)); - return retval; - } - - static void generate_patch(const BasicRow& row, std::unique_ptr& patch) - { - patch.reset(new HandoverPatch); - RowBase::generate_patch(row, *patch); - } - - void apply_and_consume_patch(std::unique_ptr& patch, Group& group) - { - apply_patch(*patch, group); - patch.reset(); - } - - void apply_patch(HandoverPatch& patch, Group& group) - { - RowBase::apply_patch(patch, group); - } - -private: - BasicRow(const BasicRow& source, HandoverPatch& patch) - : RowBase(source, patch) - { - } - friend class SharedGroup; -}; - -typedef BasicRow Row; -typedef BasicRow ConstRow; - - - - -// Implementation - -template -inline int_fast64_t RowFuncs::get_int(size_t col_ndx) const noexcept -{ - return table()->get_int(col_ndx, row_ndx()); -} - -template -inline bool RowFuncs::get_bool(size_t col_ndx) const noexcept -{ - return table()->get_bool(col_ndx, row_ndx()); -} - -template -inline float RowFuncs::get_float(size_t col_ndx) const noexcept -{ - return table()->get_float(col_ndx, row_ndx()); -} - -template -inline double RowFuncs::get_double(size_t col_ndx) const noexcept -{ - return table()->get_double(col_ndx, row_ndx()); -} - -template -inline StringData RowFuncs::get_string(size_t col_ndx) const noexcept -{ - return table()->get_string(col_ndx, row_ndx()); -} - -template -inline BinaryData RowFuncs::get_binary(size_t col_ndx) const noexcept -{ - return table()->get_binary(col_ndx, row_ndx()); -} - -template -inline OldDateTime RowFuncs::get_olddatetime(size_t col_ndx) const noexcept -{ - return table()->get_olddatetime(col_ndx, row_ndx()); -} - -template -inline Timestamp RowFuncs::get_timestamp(size_t col_ndx) const noexcept -{ - return table()->get_timestamp(col_ndx, row_ndx()); -} - -template -inline typename RowFuncs::ConstTableRef RowFuncs::get_subtable(size_t col_ndx) const -{ - return table()->get_subtable(col_ndx, row_ndx()); // Throws -} - -template -inline typename RowFuncs::TableRef RowFuncs::get_subtable(size_t col_ndx) -{ - return table()->get_subtable(col_ndx, row_ndx()); // Throws -} - -template -inline size_t RowFuncs::get_subtable_size(size_t col_ndx) const noexcept -{ - return table()->get_subtable_size(col_ndx, row_ndx()); -} - -template -inline size_t RowFuncs::get_link(size_t col_ndx) const noexcept -{ - return table()->get_link(col_ndx, row_ndx()); -} - -template -inline bool RowFuncs::is_null_link(size_t col_ndx) const noexcept -{ - return table()->is_null_link(col_ndx, row_ndx()); -} - -template -inline bool RowFuncs::is_null(size_t col_ndx) const noexcept -{ - return table()->is_null(col_ndx, row_ndx()); -} - -template -inline typename RowFuncs::ConstLinkViewRef -RowFuncs::get_linklist(size_t col_ndx) const -{ - return table()->get_linklist(col_ndx, row_ndx()); // Throws -} - -template -inline typename RowFuncs::LinkViewRef RowFuncs::get_linklist(size_t col_ndx) -{ - return table()->get_linklist(col_ndx, row_ndx()); // Throws -} - -template -inline bool RowFuncs::linklist_is_empty(size_t col_ndx) const noexcept -{ - return table()->linklist_is_empty(col_ndx, row_ndx()); -} - -template -inline size_t RowFuncs::get_link_count(size_t col_ndx) const noexcept -{ - return table()->get_link_count(col_ndx, row_ndx()); -} - -template -inline Mixed RowFuncs::get_mixed(size_t col_ndx) const noexcept -{ - return table()->get_mixed(col_ndx, row_ndx()); -} - -template -inline DataType RowFuncs::get_mixed_type(size_t col_ndx) const noexcept -{ - return table()->get_mixed_type(col_ndx, row_ndx()); -} - -template -inline void RowFuncs::set_int(size_t col_ndx, int_fast64_t value) -{ - table()->set_int(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_bool(size_t col_ndx, bool value) -{ - table()->set_bool(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_float(size_t col_ndx, float value) -{ - table()->set_float(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_double(size_t col_ndx, double value) -{ - table()->set_double(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_string(size_t col_ndx, StringData value) -{ - table()->set_string(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_binary(size_t col_ndx, BinaryData value) -{ - table()->set_binary(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_olddatetime(size_t col_ndx, OldDateTime value) -{ - table()->set_olddatetime(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_timestamp(size_t col_ndx, Timestamp value) -{ - table()->set_timestamp(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_subtable(size_t col_ndx, const Table* value) -{ - table()->set_subtable(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_link(size_t col_ndx, size_t value) -{ - table()->set_link(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::nullify_link(size_t col_ndx) -{ - table()->nullify_link(col_ndx, row_ndx()); // Throws -} - -template -inline void RowFuncs::set_mixed(size_t col_ndx, Mixed value) -{ - table()->set_mixed(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_mixed_subtable(size_t col_ndx, const Table* value) -{ - table()->set_mixed_subtable(col_ndx, row_ndx(), value); // Throws -} - -template -inline void RowFuncs::set_null(size_t col_ndx) -{ - table()->set_null(col_ndx, row_ndx()); // Throws -} - -template -inline void RowFuncs::insert_substring(size_t col_ndx, size_t pos, StringData value) -{ - table()->insert_substring(col_ndx, row_ndx(), pos, value); // Throws -} - -template -inline void RowFuncs::remove_substring(size_t col_ndx, size_t pos, size_t size) -{ - table()->remove_substring(col_ndx, row_ndx(), pos, size); // Throws -} - -template -inline void RowFuncs::remove() -{ - table()->remove(row_ndx()); // Throws -} - -template -inline void RowFuncs::move_last_over() -{ - table()->move_last_over(row_ndx()); // Throws -} - -template -inline size_t RowFuncs::get_backlink_count(const Table& src_table, size_t src_col_ndx) const noexcept -{ - return table()->get_backlink_count(row_ndx(), src_table, src_col_ndx); -} - -template -inline size_t RowFuncs::get_backlink(const Table& src_table, size_t src_col_ndx, - size_t backlink_ndx) const noexcept -{ - return table()->get_backlink(row_ndx(), src_table, src_col_ndx, backlink_ndx); -} - -template -inline size_t RowFuncs::get_column_count() const noexcept -{ - return table()->get_column_count(); -} - -template -inline DataType RowFuncs::get_column_type(size_t col_ndx) const noexcept -{ - return table()->get_column_type(col_ndx); -} - -template -inline StringData RowFuncs::get_column_name(size_t col_ndx) const noexcept -{ - return table()->get_column_name(col_ndx); -} - -template -inline size_t RowFuncs::get_column_index(StringData name) const noexcept -{ - return table()->get_column_index(name); -} - -template -inline bool RowFuncs::is_attached() const noexcept -{ - return static_cast(this)->impl_get_table(); -} - -template -inline void RowFuncs::detach() noexcept -{ - static_cast(this)->impl_detach(); -} - -template -inline const T* RowFuncs::get_table() const noexcept -{ - return table(); -} - -template -inline T* RowFuncs::get_table() noexcept -{ - return table(); -} - -template -inline size_t RowFuncs::get_index() const noexcept -{ - return row_ndx(); -} - -template -inline RowFuncs::operator bool() const noexcept -{ - return is_attached(); -} - -template -inline const T* RowFuncs::table() const noexcept -{ - return static_cast(this)->impl_get_table(); -} - -template -inline T* RowFuncs::table() noexcept -{ - return static_cast(this)->impl_get_table(); -} - -template -inline size_t RowFuncs::row_ndx() const noexcept -{ - return static_cast(this)->impl_get_row_ndx(); -} - - -template -inline BasicRowExpr::BasicRowExpr() noexcept: - m_table(0), - m_row_ndx(0) -{ -} - -template -template -inline BasicRowExpr::BasicRowExpr(const BasicRowExpr& expr) noexcept: - m_table(expr.m_table), - m_row_ndx(expr.m_row_ndx) -{ -} - -template -inline BasicRowExpr::BasicRowExpr(T* table, size_t row_ndx) noexcept: - m_table(table), - m_row_ndx(row_ndx) -{ -} - -template -inline T* BasicRowExpr::impl_get_table() const noexcept -{ - return m_table; -} - -template -inline size_t BasicRowExpr::impl_get_row_ndx() const noexcept -{ - return m_row_ndx; -} - -template -inline void BasicRowExpr::impl_detach() noexcept -{ - m_table = nullptr; -} - - -template -inline BasicRow::BasicRow() noexcept -{ -} - -template -inline BasicRow::BasicRow(const BasicRow& row) noexcept: - RowBase(row) -{ - attach(const_cast(row.m_table.get()), row.m_row_ndx); -} - -template -template -inline BasicRow::BasicRow(BasicRowExpr expr) noexcept -{ - T* table = expr.m_table; // Check that pointer types are compatible - attach(const_cast(table), expr.m_row_ndx); -} - -template -template -inline BasicRow::BasicRow(const BasicRow& row) noexcept -{ - T* table = row.m_table.get(); // Check that pointer types are compatible - attach(const_cast(table), row.m_row_ndx); -} - -template -template -inline BasicRow& BasicRow::operator=(BasicRowExpr expr) noexcept -{ - T* table = expr.m_table; // Check that pointer types are compatible - reattach(const_cast(table), expr.m_row_ndx); - return *this; -} - -template -template -inline BasicRow& BasicRow::operator=(BasicRow row) noexcept -{ - T* table = row.m_table.get(); // Check that pointer types are compatible - reattach(const_cast(table), row.m_row_ndx); - return *this; -} - -template -inline BasicRow& BasicRow::operator=(const BasicRow& row) noexcept -{ - reattach(const_cast(row.m_table.get()), row.m_row_ndx); - return *this; -} - -template -inline BasicRow::~BasicRow() noexcept -{ - RowBase::impl_detach(); -} - -template -inline T* BasicRow::impl_get_table() const noexcept -{ - return m_table.get(); -} - -template -inline size_t BasicRow::impl_get_row_ndx() const noexcept -{ - return m_row_ndx; -} - -} // namespace realm - -#endif // REALM_ROW_HPP diff --git a/Pods/Realm/include/core/realm/spec.hpp b/Pods/Realm/include/core/realm/spec.hpp deleted file mode 100644 index 595b29be..00000000 --- a/Pods/Realm/include/core/realm/spec.hpp +++ /dev/null @@ -1,475 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_SPEC_HPP -#define REALM_SPEC_HPP - -#include -#include -#include -#include -#include -#include - -namespace realm { - -class Table; -class SubspecRef; -class ConstSubspecRef; - -class Spec { -public: - Spec(SubspecRef) noexcept; - ~Spec() noexcept; - - Allocator& get_alloc() const noexcept; - - bool has_strong_link_columns() noexcept; - - void insert_column(size_t column_ndx, ColumnType type, StringData name, - ColumnAttr attr = col_attr_None); - void rename_column(size_t column_ndx, StringData new_name); - void move_column(size_t from, size_t to); - - /// Erase the column at the specified index, and move columns at - /// succeeding indexes to the next lower index. - /// - /// This function is guaranteed to *never* throw if the spec is - /// used in a non-transactional context, or if the spec has - /// already been successfully modified within the current write - /// transaction. - void erase_column(size_t column_ndx); - - //@{ - // If a new Spec is constructed from the returned subspec - // reference, it is the responsibility of the application that the - // parent Spec object (this) is kept alive for at least as long as - // the new Spec object. - SubspecRef get_subtable_spec(size_t column_ndx) noexcept; - ConstSubspecRef get_subtable_spec(size_t column_ndx) const noexcept; - //@} - - // Column info - size_t get_column_count() const noexcept; - size_t get_public_column_count() const noexcept; - DataType get_public_column_type(size_t column_ndx) const noexcept; - ColumnType get_column_type(size_t column_ndx) const noexcept; - StringData get_column_name(size_t column_ndx) const noexcept; - - /// Returns size_t(-1) if the specified column is not found. - size_t get_column_index(StringData name) const noexcept; - - // Column Attributes - ColumnAttr get_column_attr(size_t column_ndx) const noexcept; - - size_t get_subspec_ndx(size_t column_ndx) const noexcept; - ref_type get_subspec_ref(size_t subspec_ndx) const noexcept; - SubspecRef get_subspec_by_ndx(size_t subspec_ndx) noexcept; - ConstSubspecRef get_subspec_by_ndx(size_t subspec_ndx) const noexcept; - - // Auto Enumerated string columns - void upgrade_string_to_enum(size_t column_ndx, ref_type keys_ref, - ArrayParent*& keys_parent, size_t& keys_ndx); - size_t get_enumkeys_ndx(size_t column_ndx) const noexcept; - ref_type get_enumkeys_ref(size_t column_ndx, ArrayParent** keys_parent = nullptr, - size_t* keys_ndx = nullptr) noexcept; - - // Links - size_t get_opposite_link_table_ndx(size_t column_ndx) const noexcept; - void set_opposite_link_table_ndx(size_t column_ndx, size_t table_ndx); - bool has_backlinks() const noexcept; - void set_backlink_origin_column(size_t backlink_col_ndx, size_t origin_col_ndx); - size_t get_origin_column_ndx(size_t backlink_col_ndx) const noexcept; - size_t find_backlink_column(size_t origin_table_ndx, - size_t origin_col_ndx) const noexcept; - - /// Get position in `Table::m_columns` of the specified column. It may be - /// different from the specified logical column index due to the presence of - /// search indexes, since their top refs are stored in Table::m_columns as - /// well. - size_t get_column_ndx_in_parent(size_t column_ndx) const; - - //@{ - /// Compare two table specs for equality. - bool operator==(const Spec&) const noexcept; - bool operator!=(const Spec&) const noexcept; - //@} - - void destroy() noexcept; - - size_t get_ndx_in_parent() const noexcept; - void set_ndx_in_parent(size_t) noexcept; - -#ifdef REALM_DEBUG - void verify() const; // Must be upper case to avoid conflict with macro in ObjC - void to_dot(std::ostream&, StringData title = StringData()) const; -#endif - -private: - // Underlying array structure. - // - // `m_subspecs` contains one entry for each subtable column, one entry for - // each link or link list columns, two entries for each backlink column, and - // zero entries for all other column types. For subtable columns the entry - // is a ref pointing to the subtable spec, for link and link list columns it - // is the group-level table index of the target table, and for backlink - // columns the first entry is the group-level table index of the origin - // table, and the second entry is the index of the origin column in the - // origin table. - Array m_top; - ArrayInteger m_types;// 1st slot in m_top - ArrayString m_names; // 2nd slot in m_top - ArrayInteger m_attr; // 3rd slot in m_top - Array m_subspecs; // 4th slot in m_top (optional) - Array m_enumkeys; // 5th slot in m_top (optional) - bool m_has_strong_link_columns; - - Spec(Allocator&) noexcept; // Unattached - - void init(ref_type) noexcept; - void init(MemRef) noexcept; - void init(SubspecRef) noexcept; - void update_has_strong_link_columns() noexcept; - - // Similar in function to Array::init_from_parent(). - void init_from_parent() noexcept; - - ref_type get_ref() const noexcept; - - /// Called in the context of Group::commit() to ensure that - /// attached table accessors stay valid across a commit. Please - /// note that this works only for non-transactional commits. Table - /// accessors obtained during a transaction are always detached - /// when the transaction ends. - void update_from_parent(size_t old_baseline) noexcept; - - void set_parent(ArrayParent*, size_t ndx_in_parent) noexcept; - - void set_column_type(size_t column_ndx, ColumnType type); - void set_column_attr(size_t column_ndx, ColumnAttr attr); - - /// Construct an empty spec and return just the reference to the - /// underlying memory. - static MemRef create_empty_spec(Allocator&); - - struct ColumnInfo { - size_t m_column_ref_ndx = 0; ///< Index within Table::m_columns - bool m_has_search_index = false; - }; - - ColumnInfo get_column_info(size_t column_ndx) const noexcept; - - size_t get_subspec_ndx_after(size_t column_ndx) const noexcept; - bool has_subspec() const noexcept; - - // Returns false if the spec has no columns, otherwise it returns - // true and sets `type` to the type of the first column. - static bool get_first_column_type_from_ref(ref_type, Allocator&, - ColumnType& type) noexcept; - - friend class Replication; - friend class Group; - friend class Table; -}; - - - -class SubspecRef { -public: - struct const_cast_tag {}; - SubspecRef(const_cast_tag, ConstSubspecRef r) noexcept; - ~SubspecRef() noexcept {} - Allocator& get_alloc() const noexcept { return m_parent->get_alloc(); } - -private: - Array* const m_parent; - size_t const m_ndx_in_parent; - - SubspecRef(Array* parent, size_t ndx_in_parent) noexcept; - - friend class Spec; - friend class ConstSubspecRef; -}; - -class ConstSubspecRef { -public: - ConstSubspecRef(SubspecRef r) noexcept; - ~ConstSubspecRef() noexcept {} - Allocator& get_alloc() const noexcept { return m_parent->get_alloc(); } - -private: - const Array* const m_parent; - size_t const m_ndx_in_parent; - - ConstSubspecRef(const Array* parent, size_t ndx_in_parent) noexcept; - - friend class Spec; - friend class SubspecRef; -}; - - - - - -// Implementation: - -inline Allocator& Spec::get_alloc() const noexcept -{ - return m_top.get_alloc(); -} - -inline bool Spec::has_strong_link_columns() noexcept -{ - return m_has_strong_link_columns; -} - -inline ref_type Spec::get_subspec_ref(size_t subspec_ndx) const noexcept -{ - REALM_ASSERT(subspec_ndx < m_subspecs.size()); - - // Note that this addresses subspecs directly, indexing - // by number of sub-table columns - return m_subspecs.get_as_ref(subspec_ndx); -} - -inline Spec::Spec(SubspecRef r) noexcept: - m_top(r.m_parent->get_alloc()), - m_types(r.m_parent->get_alloc()), - m_names(r.m_parent->get_alloc()), - m_attr(r.m_parent->get_alloc()), - m_subspecs(r.m_parent->get_alloc()), - m_enumkeys(r.m_parent->get_alloc()) -{ - init(r); -} - -// Uninitialized Spec (call init() to init) -inline Spec::Spec(Allocator& alloc) noexcept: - m_top(alloc), - m_types(alloc), - m_names(alloc), - m_attr(alloc), - m_subspecs(alloc), - m_enumkeys(alloc) -{ -} - -inline SubspecRef Spec::get_subtable_spec(size_t column_ndx) noexcept -{ - REALM_ASSERT(column_ndx < get_column_count()); - REALM_ASSERT(get_column_type(column_ndx) == col_type_Table); - size_t subspec_ndx = get_subspec_ndx(column_ndx); - return SubspecRef(&m_subspecs, subspec_ndx); -} - -inline ConstSubspecRef Spec::get_subtable_spec(size_t column_ndx) const noexcept -{ - REALM_ASSERT(column_ndx < get_column_count()); - REALM_ASSERT(get_column_type(column_ndx) == col_type_Table); - size_t subspec_ndx = get_subspec_ndx(column_ndx); - return ConstSubspecRef(&m_subspecs, subspec_ndx); -} - -inline SubspecRef Spec::get_subspec_by_ndx(size_t subspec_ndx) noexcept -{ - return SubspecRef(&m_subspecs, subspec_ndx); -} - -inline ConstSubspecRef Spec::get_subspec_by_ndx(size_t subspec_ndx) const noexcept -{ - return const_cast(this)->get_subspec_by_ndx(subspec_ndx); -} - -inline void Spec::init(ref_type ref) noexcept -{ - MemRef mem(ref, get_alloc()); - init(mem); -} - -inline void Spec::init(SubspecRef r) noexcept -{ - m_top.set_parent(r.m_parent, r.m_ndx_in_parent); - ref_type ref = r.m_parent->get_as_ref(r.m_ndx_in_parent); - init(ref); -} - -inline void Spec::init_from_parent() noexcept -{ - ref_type ref = m_top.get_ref_from_parent(); - init(ref); -} - -inline void Spec::destroy() noexcept -{ - m_top.destroy_deep(); -} - -inline size_t Spec::get_ndx_in_parent() const noexcept -{ - return m_top.get_ndx_in_parent(); -} - -inline void Spec::set_ndx_in_parent(size_t ndx) noexcept -{ - m_top.set_ndx_in_parent(ndx); -} - -inline ref_type Spec::get_ref() const noexcept -{ - return m_top.get_ref(); -} - -inline void Spec::set_parent(ArrayParent* parent, size_t ndx_in_parent) noexcept -{ - m_top.set_parent(parent, ndx_in_parent); -} - -inline void Spec::rename_column(size_t column_ndx, StringData new_name) -{ - REALM_ASSERT(column_ndx < m_types.size()); - m_names.set(column_ndx, new_name); -} - -inline size_t Spec::get_column_count() const noexcept -{ - // This is the total count of columns, including backlinks (not public) - return m_types.size(); -} - -inline size_t Spec::get_public_column_count() const noexcept -{ - // Backlinks are the last columns, and do not have names, so getting - // the number of names gives us the count of user facing columns - return m_names.size(); -} - -inline ColumnType Spec::get_column_type(size_t ndx) const noexcept -{ - REALM_ASSERT(ndx < get_column_count()); - return ColumnType(m_types.get(ndx)); -} - -inline void Spec::set_column_type(size_t column_ndx, ColumnType type) -{ - REALM_ASSERT(column_ndx < get_column_count()); - - // At this point we only support upgrading to string enum - REALM_ASSERT(ColumnType(m_types.get(column_ndx)) == col_type_String); - REALM_ASSERT(type == col_type_StringEnum); - - m_types.set(column_ndx, type); // Throws - - update_has_strong_link_columns(); -} - -inline ColumnAttr Spec::get_column_attr(size_t ndx) const noexcept -{ - REALM_ASSERT(ndx < get_column_count()); - return ColumnAttr(m_attr.get(ndx)); -} - -inline void Spec::set_column_attr(size_t column_ndx, ColumnAttr attr) -{ - REALM_ASSERT(column_ndx < get_column_count()); - - // At this point we only allow one attr at a time - // so setting it will overwrite existing. In the future - // we will allow combinations. - m_attr.set(column_ndx, attr); - - update_has_strong_link_columns(); -} - -inline StringData Spec::get_column_name(size_t ndx) const noexcept -{ - REALM_ASSERT(ndx < get_column_count()); - return m_names.get(ndx); -} - -inline size_t Spec::get_column_index(StringData name) const noexcept -{ - return m_names.find_first(name); -} - -inline bool Spec::get_first_column_type_from_ref(ref_type top_ref, Allocator& alloc, - ColumnType& type) noexcept -{ - const char* top_header = alloc.translate(top_ref); - ref_type types_ref = to_ref(Array::get(top_header, 0)); - const char* types_header = alloc.translate(types_ref); - if (Array::get_size_from_header(types_header) == 0) - return false; - type = ColumnType(Array::get(types_header, 0)); - return true; -} - -inline bool Spec::has_backlinks() const noexcept -{ - // backlinks are always last and do not have names. - return m_names.size() < m_types.size(); - - // Fixme: It's bad design that backlinks are stored and recognized like this. Backlink columns - // should be a column type like any other, and we should find another way to hide them away from - // the user. -} - -// Spec will have a subspec when it contains a column which is one of: -// link, linklist, backlink, or subtable. It is possible for m_top.size() -// to contain an entry for m_subspecs (at index 3) but this reference -// may be empty if the spec contains enumkeys (at index 4) but no subspec types. -inline bool Spec::has_subspec() const noexcept -{ - return (m_top.size() >= 4) && (m_top.get_as_ref(3) != 0); -} - -inline bool Spec::operator!=(const Spec &s) const noexcept -{ - return !(*this == s); -} - - -inline SubspecRef::SubspecRef(Array* parent, size_t ndx_in_parent) noexcept: - m_parent(parent), - m_ndx_in_parent(ndx_in_parent) -{ -} - -inline SubspecRef::SubspecRef(const_cast_tag, ConstSubspecRef r) noexcept: - m_parent(const_cast(r.m_parent)), - m_ndx_in_parent(r.m_ndx_in_parent) -{ -} - -inline ConstSubspecRef::ConstSubspecRef(const Array* parent, - size_t ndx_in_parent) noexcept: - m_parent(parent), - m_ndx_in_parent(ndx_in_parent) -{ -} - -inline ConstSubspecRef::ConstSubspecRef(SubspecRef r) noexcept: - m_parent(r.m_parent), - m_ndx_in_parent(r.m_ndx_in_parent) -{ -} - - -} // namespace realm - -#endif // REALM_SPEC_HPP diff --git a/Pods/Realm/include/core/realm/string_data.hpp b/Pods/Realm/include/core/realm/string_data.hpp deleted file mode 100644 index 38ff9f3a..00000000 --- a/Pods/Realm/include/core/realm/string_data.hpp +++ /dev/null @@ -1,327 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_STRING_HPP -#define REALM_STRING_HPP - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -namespace realm { - -/// A reference to a chunk of character data. -/// -/// An instance of this class can be thought of as a type tag on a region of -/// memory. It does not own the referenced memory, nor does it in any other way -/// attempt to manage the lifetime of it. -/// -/// A null character inside the referenced region is considered a part of the -/// string by Realm. -/// -/// For compatibility with C-style strings, when a string is stored in a Realm -/// database, it is always followed by a terminating null character, regardless -/// of whether the string itself has internal null characters. This means that -/// when a StringData object is extracted from Realm, the referenced region is -/// guaranteed to be followed immediately by an extra null character, but that -/// null character is not inside the referenced region. Therefore, all of the -/// following forms are guaranteed to return a pointer to a null-terminated -/// string: -/// -/// \code{.cpp} -/// -/// group.get_table_name(...).data() -/// table.get_column_name().data() -/// table.get_string(...).data() -/// table.get_mixed(...).get_string().data() -/// -/// \endcode -/// -/// Note that in general, no assumptions can be made about what follows a string -/// that is referenced by a StringData object, or whether anything follows it at -/// all. In particular, the receiver of a StringData object cannot assume that -/// the referenced string is followed by a null character unless there is an -/// externally provided guarantee. -/// -/// This class makes it possible to distinguish between a 'null' reference and a -/// reference to the empty string (see is_null()). -/// -/// \sa BinaryData -/// \sa Mixed -class StringData { -public: - /// Construct a null reference. - StringData() noexcept; - - /// If \a data is 'null', \a size must be zero. - StringData(const char* data, size_t size) noexcept; - - template - StringData(const std::basic_string&); - - template - operator std::basic_string() const; - - // StringData does not store data, callers must manage their own strings. - template - StringData(std::basic_string&&) = delete; - - template - StringData(const util::Optional>&); - - StringData(const null&) noexcept; - - /// Initialize from a zero terminated C style string. Pass null to construct - /// a null reference. - StringData(const char* c_str) noexcept; - - char operator[](size_t i) const noexcept; - - const char* data() const noexcept; - size_t size() const noexcept; - - /// Is this a null reference? - /// - /// An instance of StringData is a null reference when, and only when the - /// stored size is zero (size()) and the stored pointer is the null pointer - /// (data()). - /// - /// In the case of the empty string, the stored size is still zero, but the - /// stored pointer is **not** the null pointer. It could for example point - /// to the empty string literal. Note that the actual value of the pointer - /// is immaterial in this case (as long as it is not zero), because when the - /// size is zero, it is an error to dereference the pointer. - /// - /// Conversion of a StringData object to `bool` yields the logical negation - /// of the result of calling this function. In other words, a StringData - /// object is converted to true if it is not the null reference, otherwise - /// it is converted to false. - bool is_null() const noexcept; - - friend bool operator==(const StringData&, const StringData&) noexcept; - friend bool operator!=(const StringData&, const StringData&) noexcept; - - //@{ - /// Trivial bytewise lexicographical comparison. - friend bool operator<(const StringData&, const StringData&) noexcept; - friend bool operator>(const StringData&, const StringData&) noexcept; - friend bool operator<=(const StringData&, const StringData&) noexcept; - friend bool operator>=(const StringData&, const StringData&) noexcept; - //@} - - bool begins_with(StringData) const noexcept; - bool ends_with(StringData) const noexcept; - bool contains(StringData) const noexcept; - - //@{ - /// Undefined behavior if \a n, \a i, or i+n is greater than - /// size(). - StringData prefix(size_t n) const noexcept; - StringData suffix(size_t n) const noexcept; - StringData substr(size_t i, size_t n) const noexcept; - StringData substr(size_t i) const noexcept; - //@} - - template - friend std::basic_ostream& operator<<(std::basic_ostream&, const StringData&); - - explicit operator bool() const noexcept; - -private: - const char* m_data; - size_t m_size; -}; - - -// Implementation: - -inline StringData::StringData() noexcept: - m_data(nullptr), - m_size(0) -{ -} - -inline StringData::StringData(const char* data, size_t size) noexcept: - m_data(data), - m_size(size) -{ - REALM_ASSERT_DEBUG(data || size == 0); -} - -template -inline StringData::StringData(const std::basic_string& s): - m_data(s.data()), - m_size(s.size()) -{ -} - -template -inline StringData::operator std::basic_string() const -{ - return std::basic_string(m_data, m_size); -} - -template -inline StringData::StringData(const util::Optional>& s): - m_data(s ? s->data() : nullptr), - m_size(s ? s->size() : 0) -{ -} - -inline StringData::StringData(const null&) noexcept: - m_data(nullptr), - m_size(0) -{ - -} - -inline StringData::StringData(const char* c_str) noexcept: - m_data(c_str), - m_size(0) -{ - if (c_str) - m_size = std::char_traits::length(c_str); -} - -inline char StringData::operator[](size_t i) const noexcept -{ - return m_data[i]; -} - -inline const char* StringData::data() const noexcept -{ - return m_data; -} - -inline size_t StringData::size() const noexcept -{ - return m_size; -} - -inline bool StringData::is_null() const noexcept -{ - return !m_data; -} - -inline bool operator==(const StringData& a, const StringData& b) noexcept -{ - return a.m_size == b.m_size && a.is_null() == b.is_null() && safe_equal(a.m_data, a.m_data + a.m_size, b.m_data); -} - -inline bool operator!=(const StringData& a, const StringData& b) noexcept -{ - return !(a == b); -} - -inline bool operator<(const StringData& a, const StringData& b) noexcept -{ - if (a.is_null() && !b.is_null()) { - // Null strings are smaller than all other strings, and not - // equal to empty strings. - return true; - } - return std::lexicographical_compare(a.m_data, a.m_data + a.m_size, - b.m_data, b.m_data + b.m_size); -} - -inline bool operator>(const StringData& a, const StringData& b) noexcept -{ - return b < a; -} - -inline bool operator<=(const StringData& a, const StringData& b) noexcept -{ - return !(b < a); -} - -inline bool operator>=(const StringData& a, const StringData& b) noexcept -{ - return !(a < b); -} - -inline bool StringData::begins_with(StringData d) const noexcept -{ - if (is_null() && !d.is_null()) - return false; - return d.m_size <= m_size && safe_equal(m_data, m_data + d.m_size, d.m_data); -} - -inline bool StringData::ends_with(StringData d) const noexcept -{ - if (is_null() && !d.is_null()) - return false; - return d.m_size <= m_size && safe_equal(m_data + m_size - d.m_size, m_data + m_size, d.m_data); -} - -inline bool StringData::contains(StringData d) const noexcept -{ - if (is_null() && !d.is_null()) - return false; - - return d.m_size == 0 || - std::search(m_data, m_data + m_size, d.m_data, d.m_data + d.m_size) != m_data + m_size; -} - -inline StringData StringData::prefix(size_t n) const noexcept -{ - return substr(0,n); -} - -inline StringData StringData::suffix(size_t n) const noexcept -{ - return substr(m_size - n); -} - -inline StringData StringData::substr(size_t i, size_t n) const noexcept -{ - return StringData(m_data + i, n); -} - -inline StringData StringData::substr(size_t i) const noexcept -{ - return substr(i, m_size - i); -} - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const StringData& d) -{ - for (const char* i = d.m_data; i != d.m_data + d.m_size; ++i) - out << *i; - return out; -} - -inline StringData::operator bool() const noexcept -{ - return !is_null(); -} - -} // namespace realm - -#endif // REALM_STRING_HPP diff --git a/Pods/Realm/include/core/realm/table.hpp b/Pods/Realm/include/core/realm/table.hpp deleted file mode 100644 index 494a6d07..00000000 --- a/Pods/Realm/include/core/realm/table.hpp +++ /dev/null @@ -1,2391 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TABLE_HPP -#define REALM_TABLE_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - -class TableView; -class LinkView; -class TableViewBase; -class ConstTableView; -class StringIndex; -class Group; -class LinkColumnBase; -class LinkColumn; -class LinkListColumn; -class BacklinkColumn; -template -class Columns; -template -class SubQuery; -struct LinkTargetInfo; - -struct Link {}; -typedef Link LinkList; -typedef Link BackLink; - -namespace _impl { class TableFriend; } - -class Replication; - - -/// The Table class is non-polymorphic, that is, it has no virtual -/// functions. This is important because it ensures that there is no run-time -/// distinction between a Table instance and an instance of any variation of -/// BasicTable, and this, in turn, makes it valid to cast a pointer from -/// Table to BasicTable even when the instance is constructed as a Table. Of -/// course, this also assumes that BasicTable<> is non-polymorphic, has no -/// destructor, and adds no extra data members. -/// -/// FIXME: Table assignment (from any group to any group) could be made aliasing -/// safe as follows: Start by cloning source table into target allocator. On -/// success, assign, and then deallocate any previous structure at the target. -/// -/// FIXME: It might be desirable to have a 'table move' feature between two -/// places inside the same group (say from a subtable or a mixed column to group -/// level). This could be done in a very efficient manner. -/// -/// FIXME: When compiling in debug mode, all public non-static table functions -/// should REALM_ASSERT(is_attached()). -class Table { -public: - /// Construct a new freestanding top-level table with static - /// lifetime. - /// - /// This constructor should be used only when placing a table - /// instance on the stack, and it is then the responsibility of - /// the application that there are no objects of type TableRef or - /// ConstTableRef that refer to it, or to any of its subtables, - /// when it goes out of scope. To create a top-level table with - /// dynamic lifetime, use Table::create() instead. - Table(Allocator& = Allocator::get_default()); - - /// Construct a copy of the specified table as a new freestanding - /// top-level table with static lifetime. - /// - /// This constructor should be used only when placing a table - /// instance on the stack, and it is then the responsibility of - /// the application that there are no objects of type TableRef or - /// ConstTableRef that refer to it, or to any of its subtables, - /// when it goes out of scope. To create a top-level table with - /// dynamic lifetime, use Table::copy() instead. - Table(const Table&, Allocator& = Allocator::get_default()); - - ~Table() noexcept; - - Allocator& get_alloc() const; - - /// Construct a new freestanding top-level table with dynamic lifetime. - static TableRef create(Allocator& = Allocator::get_default()); - - /// Construct a copy of the specified table as a new freestanding top-level - /// table with dynamic lifetime. - TableRef copy(Allocator& = Allocator::get_default()) const; - - /// Returns true if, and only if this accessor is currently attached to an - /// underlying table. - /// - /// A table accessor may get detached from the underlying row for various - /// reasons (see below). When it does, it no longer refers to anything, and - /// can no longer be used, except for calling is_attached(). The - /// consequences of calling other non-static functions on a detached table - /// accessor are unspecified. Table accessors obtained by calling functions in - /// the Realm API are always in the 'attached' state immediately upon - /// return from those functions. - /// - /// A table accessor of a free-standing table never becomes detached (except - /// during its eventual destruction). A group-level table accessor becomes - /// detached if the underlying table is removed from the group, or when the - /// group accessor is destroyed. A subtable accessor becomes detached if the - /// underlying subtable is removed, or if the parent table accessor is - /// detached. A table accessor does not become detached for any other reason - /// than those mentioned here. - /// - /// FIXME: High level language bindings will probably want to be able to - /// explicitely detach a group and all tables of that group if any modifying - /// operation fails (e.g. memory allocation failure) (and something similar - /// for freestanding tables) since that leaves the group in state where any - /// further access is disallowed. This way they will be able to reliably - /// intercept any attempt at accessing such a failed group. - /// - /// FIXME: The C++ documentation must state that if any modifying operation - /// on a group (incl. tables, subtables, and specs) or on a free standing - /// table (incl. subtables and specs) fails, then any further access to that - /// group (except ~Group()) or freestanding table (except ~Table()) has - /// undefined behaviour and is considered an error on behalf of the - /// application. Note that even Table::is_attached() is disallowed in this - /// case. - bool is_attached() const noexcept; - - /// Get the name of this table, if it has one. Only group-level tables have - /// names. For a table of any other kind, this function returns the empty - /// string. - StringData get_name() const noexcept; - - // Whether or not elements can be null. - bool is_nullable(size_t col_ndx) const; - - //@{ - /// Conventience functions for inspecting the dynamic table type. - /// - /// These functions behave as if they were called on the descriptor returned - /// by get_descriptor(). - size_t get_column_count() const noexcept; - DataType get_column_type(size_t column_ndx) const noexcept; - StringData get_column_name(size_t column_ndx) const noexcept; - size_t get_column_index(StringData name) const noexcept; - //@} - - //@{ - /// Convenience functions for manipulating the dynamic table type. - /// - /// These function must be called only for tables with independent dynamic - /// type. A table has independent dynamic type if the function - /// has_shared_type() returns false. A table that is a direct member of a - /// group has independent dynamic type. So does a free-standing table, and a - /// subtable in a column of type 'mixed'. All other tables have shared - /// dynamic type. The consequences of calling any of these functions for a - /// table with shared dynamic type are undefined. - /// - /// Apart from that, these functions behave as if they were called on the - /// descriptor returned by get_descriptor(). Note especially that the - /// `_link` suffixed functions must be used when inserting link-type - /// columns. - /// - /// If you need to change the shared dynamic type of the subtables in a - /// subtable column, consider using the API offered by the Descriptor class. - /// - /// \sa has_shared_type() - /// \sa get_descriptor() - - size_t add_column(DataType type, StringData name, bool nullable = false, DescriptorRef* subdesc = nullptr); - void insert_column(size_t column_ndx, DataType type, StringData name, bool nullable = false, - DescriptorRef* subdesc = nullptr); - - // Todo, these prototypes only exist for backwards compatibility. We should remove them because they are error - // prone (optional arguments and implicit bool to null-ptr conversion) - size_t add_column(DataType type, StringData name, DescriptorRef* subdesc) - { - return add_column(type, name, false, subdesc); - } - void insert_column(size_t column_ndx, DataType type, StringData name, DescriptorRef* subdesc) - { - insert_column(column_ndx, type, name, false, subdesc); - } - - size_t add_column_link(DataType type, StringData name, Table& target, LinkType link_type = link_Weak); - void insert_column_link(size_t column_ndx, DataType type, StringData name, Table& target, - LinkType link_type = link_Weak); - void remove_column(size_t column_ndx); - void rename_column(size_t column_ndx, StringData new_name); - //@} - - //@{ - - /// has_search_index() returns true if, and only if a search index has been - /// added to the specified column. Rather than throwing, it returns false if - /// the table accessor is detached or the specified index is out of range. - /// - /// add_search_index() adds a search index to the specified column of this - /// table. It has no effect if a search index has already been added to the - /// specified column (idempotency). - /// - /// remove_search_index() removes the search index from the specified column - /// of this table. It has no effect if the specified column has no search - /// index. The search index cannot be removed from the primary key of a - /// table. - /// - /// This table must be a root table; that is, it must have an independent - /// descriptor. Freestanding tables, group-level tables, and subtables in a - /// column of type 'mixed' are all examples of root tables. See add_column() - /// for more on this. - /// - /// \param column_ndx The index of a column of this table. - - bool has_search_index(size_t column_ndx) const noexcept; -// void remove_search_index(size_t col_ndx); - void add_search_index(size_t column_ndx); - void remove_search_index(size_t column_ndx); - - //@} - - //@{ - /// Get the dynamic type descriptor for this table. - /// - /// Every table has an associated descriptor that specifies its dynamic - /// type. For simple tables, that is, tables without subtable columns, the - /// dynamic type can be inspected and modified directly using member - /// functions such as get_column_count() and add_column(). For more complex - /// tables, the type is best managed through the associated descriptor - /// object which is returned by this function. - /// - /// \sa has_shared_type() - DescriptorRef get_descriptor(); - ConstDescriptorRef get_descriptor() const; - //@} - - //@{ - /// Get the dynamic type descriptor for the column with the - /// specified index. That column must have type 'table'. - /// - /// This is merely a shorthand for calling `get_subdescriptor(column_ndx)` - /// on the descriptor returned by `get_descriptor()`. - DescriptorRef get_subdescriptor(size_t column_ndx); - ConstDescriptorRef get_subdescriptor(size_t column_ndx) const; - //@} - - //@{ - /// Get access to an arbitrarily nested dynamic type descriptor. - /// - /// The returned descriptor is the one you would get by calling - /// Descriptor::get_subdescriptor() once for each entry in the specified - /// path, starting with the descriptor returned by get_descriptor(). The - /// path is allowed to be empty. - typedef std::vector path_vec; - DescriptorRef get_subdescriptor(const path_vec& path); - ConstDescriptorRef get_subdescriptor(const path_vec& path) const; - //@} - - //@{ - /// Convenience functions for manipulating nested table types. - /// - /// These functions behave as if they were called on the descriptor returned - /// by `get_subdescriptor(path)`. These function must be called only on - /// tables with independent dynamic type. - /// - /// \return The value returned by add_subcolumn(), is the index of - /// the added column within the descriptor referenced by the - /// specified path. - /// - /// \sa Descriptor::add_column() - /// \sa has_shared_type() - size_t add_subcolumn(const path_vec& path, DataType type, StringData name); - void insert_subcolumn(const path_vec& path, size_t column_ndx, - DataType type, StringData name); - void remove_subcolumn(const path_vec& path, size_t column_ndx); - void rename_subcolumn(const path_vec& path, size_t column_ndx, StringData new_name); - //@} - - /// Does this table share its type with other tables? - /// - /// Tables that are direct members of groups have independent - /// dynamic types. The same is true for free-standing tables and - /// subtables in coulmns of type 'mixed'. For such tables, this - /// function returns false. - /// - /// When a table has a column of type 'table', the cells in that - /// column contain subtables. All those subtables have the same - /// dynamic type, and they share a single type descriptor. For all - /// such subtables, this function returns true. See - /// Descriptor::is_root() for more on this. - /// - /// Please note that Table functions that modify the dynamic type - /// directly, such as add_column(), are only allowed to be used on - /// tables with non-shared type. If you need to modify a shared - /// type, you will have to do that through the descriptor returned - /// by get_descriptor(), but note that it will then affect all the - /// tables sharing that descriptor. - /// - /// \sa get_descriptor() - /// \sa Descriptor::is_root() - bool has_shared_type() const noexcept; - - - template - Columns column(size_t column); // FIXME: Should this one have been declared noexcept? - template - Columns column(const Table& origin, size_t origin_column_ndx); - - template - SubQuery column(size_t column, Query subquery); - template - SubQuery column(const Table& origin, size_t origin_column_ndx, Query subquery); - - // Table size and deletion - bool is_empty() const noexcept; - size_t size() const noexcept; - - typedef BasicRowExpr
RowExpr; - typedef BasicRowExpr ConstRowExpr; - - RowExpr get(size_t row_ndx) noexcept; - ConstRowExpr get(size_t row_ndx) const noexcept; - - RowExpr front() noexcept; - ConstRowExpr front() const noexcept; - - RowExpr back() noexcept; - ConstRowExpr back() const noexcept; - - RowExpr operator[](size_t row_ndx) noexcept; - ConstRowExpr operator[](size_t row_ndx) const noexcept; - - - //@{ - - /// Row handling. - /// - /// remove() removes the specified row from the table and shifts all rows at - /// higher index to fill the vacated slot. This operation assumes that the - /// table is ordered, and it is therefore allowed only on tables **without** - /// link columns, as link columns are only allowed in unordered tables. - /// - /// move_last_over() removes the specified row from the table, and if it is - /// not the last row in the table, it then moves the last row into the - /// vacated slot. This operation assumes that the table is unordered, and it - /// may therfore be used on tables with link columns. - /// - /// The removal of a row from an unordered table (move_last_over()) may - /// cause other linked rows to be cascade-removed. The clearing of a table - /// may also cause linked rows to be cascade-removed, but in this respect, - /// the effect is exactly as if each row had been removed individually. See - /// Descriptor::set_link_type() for details. - - size_t add_empty_row(size_t num_rows = 1); - void insert_empty_row(size_t row_ndx, size_t num_rows = 1); - void remove(size_t row_ndx); - void remove_last(); - void move_last_over(size_t row_ndx); - void clear(); - void swap_rows(size_t row_ndx_1, size_t row_ndx_2); - //@} - - /// Replaces all links to \a row_ndx with links to \a new_row_ndx. - /// - /// This operation is usually followed by Table::move_last_over() - /// as part of Table::set_int_unique() or Table::set_string_unique() - /// detecting a collision. - /// - /// \sa Table::move_last_over() - /// \sa Table::set_int_unique() - /// \sa Table::set_string_unique() - void change_link_targets(size_t row_ndx, size_t new_row_ndx); - - // Get cell values. Will assert if the requested type does not match the column type - int64_t get_int(size_t column_ndx, size_t row_ndx) const noexcept; - bool get_bool(size_t column_ndx, size_t row_ndx) const noexcept; - OldDateTime get_olddatetime(size_t column_ndx, size_t row_ndx) const noexcept; - float get_float(size_t column_ndx, size_t row_ndx) const noexcept; - double get_double(size_t column_ndx, size_t row_ndx) const noexcept; - StringData get_string(size_t column_ndx, size_t row_ndx) const noexcept; - BinaryData get_binary(size_t column_ndx, size_t row_ndx) const noexcept; - Mixed get_mixed(size_t column_ndx, size_t row_ndx) const noexcept; - DataType get_mixed_type(size_t column_ndx, size_t row_ndx) const noexcept; - Timestamp get_timestamp(size_t column_ndx, size_t row_ndx) const noexcept; - - template T get(size_t c, size_t r) const noexcept; - - size_t get_link(size_t column_ndx, size_t row_ndx) const noexcept; - bool is_null_link(size_t column_ndx, size_t row_ndx) const noexcept; - LinkViewRef get_linklist(size_t column_ndx, size_t row_ndx); - ConstLinkViewRef get_linklist(size_t column_ndx, size_t row_ndx) const; - size_t get_link_count(size_t column_ndx, size_t row_ndx) const noexcept; - bool linklist_is_empty(size_t column_ndx, size_t row_ndx) const noexcept; - bool is_null(size_t column_ndx, size_t row_ndx) const noexcept; - - TableRef get_link_target(size_t column_ndx) noexcept; - ConstTableRef get_link_target(size_t column_ndx) const noexcept; - - template - typename T::RowAccessor get_link_accessor(size_t column_ndx, size_t row_ndx); - - //@{ - - /// Set cell values. - /// - /// It is an error to specify a column index, row index, or string position - /// that is out of range. - /// - /// The number of bytes in a string value must not exceed `max_string_size`, - /// and the number of bytes in a binary data value must not exceed - /// `max_binary_size`. String must also contain valid UTF-8 encodings. These - /// requirements also apply when modifying a string with insert_substring() - /// and remove_substring(), and for strings in a mixed columnt. Passing, or - /// producing an oversized string or binary data value will cause an - /// exception to be thrown. - /// - /// The "unique" variants (set_int_unique(), set_string_unique()) are - /// intended to be used in the implementation of primary key support. They - /// check if the given column already contains one or more values that are - /// equal to \a value, and if there are conflicts, it calls - /// Table::change_link_targets() for the conflicting row to be replaced by - /// \a row_ndx, followed by a Table::move_last_over() of the offending row. - /// Users intending to implement primary keys must therefore manually check - /// for duplicates if they want to raise an error instead. - /// - /// insert_substring() inserts the specified string into the currently - /// stored string at the specified position. The position must be less than - /// or equal to the size of the currently stored string. - /// - /// remove_substring() removes the specified byte range from the currently - /// stored string. The beginning of the range (\a pos) must be less than or - /// equal to the size of the currently stored string. If the specified range - /// extends beyond the end of the currently stored string, it will be - /// silently clamped. - /// - /// String level modifications performed via insert_substring() and - /// remove_substring() are mergable and subject to operational - /// trsnaformation. That is, the effect of two causally unrelated - /// modifications will in general both be retained during synchronization. - - static const size_t max_string_size = 0xFFFFF8 - Array::header_size - 1; - static const size_t max_binary_size = 0xFFFFF8 - Array::header_size; - - void set_int(size_t column_ndx, size_t row_ndx, int_fast64_t value); - void set_int_unique(size_t column_ndx, size_t row_ndx, int_fast64_t value); - void set_bool(size_t column_ndx, size_t row_ndx, bool value); - void set_olddatetime(size_t column_ndx, size_t row_ndx, OldDateTime value); - void set_timestamp(size_t column_ndx, size_t row_ndx, Timestamp value); - template - void set_enum(size_t column_ndx, size_t row_ndx, E value); - void set_float(size_t column_ndx, size_t row_ndx, float value); - void set_double(size_t column_ndx, size_t row_ndx, double value); - void set_string(size_t column_ndx, size_t row_ndx, StringData value); - void set_string_unique(size_t column_ndx, size_t row_ndx, StringData value); - void set_binary(size_t column_ndx, size_t row_ndx, BinaryData value); - void set_mixed(size_t column_ndx, size_t row_ndx, Mixed value); - void set_link(size_t column_ndx, size_t row_ndx, size_t target_row_ndx); - void nullify_link(size_t column_ndx, size_t row_ndx); - void set_null(size_t column_ndx, size_t row_ndx); - - void insert_substring(size_t col_ndx, size_t row_ndx, size_t pos, StringData); - void remove_substring(size_t col_ndx, size_t row_ndx, size_t pos, size_t size = realm::npos); - - //@} - - /// Assumes that the specified column is a subtable column (in - /// particular, not a mixed column) and that the specified table - /// has a spec that is compatible with that column, that is, the - /// number of columns must be the same, and corresponding columns - /// must have identical data types (as returned by - /// get_column_type()). - void set_subtable(size_t col_ndx, size_t row_ndx, const Table*); - void set_mixed_subtable(size_t col_ndx, size_t row_ndx, const Table*); - - - // Sub-tables (works on columns whose type is either 'subtable' or - // 'mixed', for a value in a mixed column that is not a subtable, - // get_subtable() returns null, get_subtable_size() returns zero, - // and clear_subtable() replaces the value with an empty table.) - TableRef get_subtable(size_t column_ndx, size_t row_ndx); - ConstTableRef get_subtable(size_t column_ndx, size_t row_ndx) const; - size_t get_subtable_size(size_t column_ndx, size_t row_ndx) const noexcept; - void clear_subtable(size_t column_ndx, size_t row_ndx); - - // Backlinks - size_t get_backlink_count(size_t row_ndx, const Table& origin, - size_t origin_col_ndx) const noexcept; - size_t get_backlink(size_t row_ndx, const Table& origin, - size_t origin_col_ndx, size_t backlink_ndx) const noexcept; - - - //@{ - - /// If this accessor is attached to a subtable, then that subtable has a - /// parent table, and the subtable either resides in a column of type - /// `table` or of type `mixed` in that parent. In that case - /// get_parent_table() returns a reference to the accessor associated with - /// the parent, and get_parent_row_index() returns the index of the row in - /// which the subtable resides. In all other cases (free-standing and - /// group-level tables), get_parent_table() returns null and - /// get_parent_row_index() returns realm::npos. - /// - /// If this accessor is attached to a subtable, and \a column_ndx_out is - /// specified, then `*column_ndx_out` is set to the index of the column of - /// the parent table in which the subtable resides. If this accessor is not - /// attached to a subtable, then `*column_ndx_out` will retain its original - /// value upon return. - - TableRef get_parent_table(size_t* column_ndx_out = nullptr) noexcept; - ConstTableRef get_parent_table(size_t* column_ndx_out = nullptr) const noexcept; - size_t get_parent_row_index() const noexcept; - - //@} - - - /// Only group-level unordered tables can be used as origins or targets of - /// links. - bool is_group_level() const noexcept; - - /// If this table is a group-level table, then this function returns the - /// index of this table within the group. Otherwise it returns realm::npos. - size_t get_index_in_group() const noexcept; - - // Aggregate functions - size_t count_int(size_t column_ndx, int64_t value) const; - size_t count_string(size_t column_ndx, StringData value) const; - size_t count_float(size_t column_ndx, float value) const; - size_t count_double(size_t column_ndx, double value) const; - - int64_t sum_int(size_t column_ndx) const; - double sum_float(size_t column_ndx) const; - double sum_double(size_t column_ndx) const; - int64_t maximum_int(size_t column_ndx, size_t* return_ndx = nullptr) const; - float maximum_float(size_t column_ndx, size_t* return_ndx = nullptr) const; - double maximum_double(size_t column_ndx, size_t* return_ndx = nullptr) const; - OldDateTime maximum_olddatetime(size_t column_ndx, size_t* return_ndx = nullptr) const; - Timestamp maximum_timestamp(size_t column_ndx, size_t* return_ndx = nullptr) const; - int64_t minimum_int(size_t column_ndx, size_t* return_ndx = nullptr) const; - float minimum_float(size_t column_ndx, size_t* return_ndx = nullptr) const; - double minimum_double(size_t column_ndx, size_t* return_ndx = nullptr) const; - OldDateTime minimum_olddatetime(size_t column_ndx, size_t* return_ndx = nullptr) const; - Timestamp minimum_timestamp(size_t column_ndx, size_t* return_ndx = nullptr) const; - double average_int(size_t column_ndx, size_t* value_count = nullptr) const; - double average_float(size_t column_ndx, size_t* value_count = nullptr) const; - double average_double(size_t column_ndx, size_t* value_count = nullptr) const; - - // Searching - size_t find_first_link(size_t target_row_index) const; - size_t find_first_int(size_t column_ndx, int64_t value) const; - size_t find_first_bool(size_t column_ndx, bool value) const; - size_t find_first_olddatetime(size_t column_ndx, OldDateTime value) const; - size_t find_first_timestamp(size_t column_ndx, Timestamp value) const; - size_t find_first_float(size_t column_ndx, float value) const; - size_t find_first_double(size_t column_ndx, double value) const; - size_t find_first_string(size_t column_ndx, StringData value) const; - size_t find_first_binary(size_t column_ndx, BinaryData value) const; - size_t find_first_null(size_t column_ndx) const; - - TableView find_all_link(size_t target_row_index); - ConstTableView find_all_link(size_t target_row_index) const; - TableView find_all_int(size_t column_ndx, int64_t value); - ConstTableView find_all_int(size_t column_ndx, int64_t value) const; - TableView find_all_bool(size_t column_ndx, bool value); - ConstTableView find_all_bool(size_t column_ndx, bool value) const; - TableView find_all_olddatetime(size_t column_ndx, OldDateTime value); - ConstTableView find_all_olddatetime(size_t column_ndx, OldDateTime value) const; - TableView find_all_float(size_t column_ndx, float value); - ConstTableView find_all_float(size_t column_ndx, float value) const; - TableView find_all_double(size_t column_ndx, double value); - ConstTableView find_all_double(size_t column_ndx, double value) const; - TableView find_all_string(size_t column_ndx, StringData value); - ConstTableView find_all_string(size_t column_ndx, StringData value) const; - TableView find_all_binary(size_t column_ndx, BinaryData value); - ConstTableView find_all_binary(size_t column_ndx, BinaryData value) const; - TableView find_all_null(size_t column_ndx); - ConstTableView find_all_null(size_t column_ndx) const; - - /// The following column types are supported: String, Integer, OldDateTime, Bool - TableView get_distinct_view(size_t column_ndx); - ConstTableView get_distinct_view(size_t column_ndx) const; - - TableView get_sorted_view(size_t column_ndx, bool ascending = true); - ConstTableView get_sorted_view(size_t column_ndx, bool ascending = true) const; - - TableView get_sorted_view(std::vector column_ndx, std::vector ascending); - ConstTableView get_sorted_view(std::vector column_ndx, std::vector ascending) const; - - TableView get_range_view(size_t begin, size_t end); - ConstTableView get_range_view(size_t begin, size_t end) const; - - TableView get_backlink_view(size_t row_ndx, Table *src_table, - size_t src_col_ndx); - - - // Pivot / aggregate operation types. Experimental! Please do not document method publicly. - enum AggrType { - aggr_count, - aggr_sum, - aggr_avg, - aggr_min, - aggr_max - }; - - // Simple pivot aggregate method. Experimental! Please do not document method publicly. - void aggregate(size_t group_by_column, size_t aggr_column, AggrType op, Table& result, const IntegerColumn* viewrefs = nullptr) const; - - /// Report the current versioning counter for the table. The versioning counter is guaranteed to - /// change when the contents of the table changes after advance_read() or promote_to_write(), or - /// immediately after calls to methods which change the table. The term "change" means "change of - /// value": The storage layout of the table may change, for example due to optimization, but this - /// is not considered a change of a value. This means that you *cannot* use a non-changing version - /// count to indicate that object addresses (e.g. strings, binary data) remain the same. - /// The versioning counter *may* change (but is not required to do so) when another table linked - /// from this table, or linking to this table, is changed. The version counter *may* also change - /// without any apparent reason. - uint_fast64_t get_version_counter() const noexcept; -private: - template - size_t find_first(size_t column_ndx, T value) const; // called by above methods - template - TableView find_all(size_t column_ndx, T value); -public: - - - //@{ - /// Find the lower/upper bound according to a column that is - /// already sorted in ascending order. - /// - /// For an integer column at index 0, and an integer value '`v`', - /// lower_bound_int(0,v) returns the index '`l`' of the first row - /// such that `get_int(0,l) ≥ v`, and upper_bound_int(0,v) - /// returns the index '`u`' of the first row such that - /// `get_int(0,u) > v`. In both cases, if no such row is found, - /// the returned value is the number of rows in the table. - /// - /// 3 3 3 4 4 4 5 6 7 9 9 9 - /// ^ ^ ^ ^ ^ - /// | | | | | - /// | | | | -- Lower and upper bound of 15 - /// | | | | - /// | | | -- Lower and upper bound of 8 - /// | | | - /// | | -- Upper bound of 4 - /// | | - /// | -- Lower bound of 4 - /// | - /// -- Lower and upper bound of 1 - /// - /// These functions are similar to std::lower_bound() and - /// std::upper_bound(). - /// - /// The string versions assume that the column is sorted according - /// to StringData::operator<(). - size_t lower_bound_int(size_t column_ndx, int64_t value) const noexcept; - size_t upper_bound_int(size_t column_ndx, int64_t value) const noexcept; - size_t lower_bound_bool(size_t column_ndx, bool value) const noexcept; - size_t upper_bound_bool(size_t column_ndx, bool value) const noexcept; - size_t lower_bound_float(size_t column_ndx, float value) const noexcept; - size_t upper_bound_float(size_t column_ndx, float value) const noexcept; - size_t lower_bound_double(size_t column_ndx, double value) const noexcept; - size_t upper_bound_double(size_t column_ndx, double value) const noexcept; - size_t lower_bound_string(size_t column_ndx, StringData value) const noexcept; - size_t upper_bound_string(size_t column_ndx, StringData value) const noexcept; - //@} - - // Queries - // Using where(tv) is the new method to perform queries on TableView. The 'tv' can have any order; it does not - // need to be sorted, and, resulting view retains its order. - Query where(TableViewBase* tv = nullptr) { return Query(*this, tv); } - - // FIXME: We need a ConstQuery class or runtime check against modifications in read transaction. - Query where(TableViewBase* tv = nullptr) const { return Query(*this, tv); } - - // Perform queries on a LinkView. The returned Query holds a reference to lv. - Query where(const LinkViewRef& lv) { return Query(*this, lv); } - - Table& link(size_t link_column); - Table& backlink(const Table& origin, size_t origin_col_ndx); - - // Optimizing. enforce == true will enforce enumeration of all string columns; - // enforce == false will auto-evaluate if they should be enumerated or not - void optimize(bool enforce = false); - - /// Write this table (or a slice of this table) to the specified - /// output stream. - /// - /// The output will have the same format as any other Realm - /// database file, such as those produced by Group::write(). In - /// this case, however, the resulting database file will contain - /// exactly one table, and that table will contain only the - /// specified slice of the source table (this table). - /// - /// The new table will always have the same dynamic type (see - /// Descriptor) as the source table (this table), and unless it is - /// overridden (\a override_table_name), the new table will have - /// the same name as the source table (see get_name()). Indexes - /// (see add_search_index()) will not be carried over to the new - /// table. - /// - /// \param offset Index of first row to include (if `size > - /// 0`). Must be less than, or equal to size(). - /// - /// \param size Number of rows to include. May be zero. If `size > - /// size() - offset`, then the effective size of the written slice - /// will be `size() - offset`. - /// - /// \throw std::out_of_range If `offset > size()`. - /// - /// FIXME: While this function does provided a maximally efficient - /// way of serializing part of a table, it offers little in terms - /// of general utility. This is unfortunate, because it pulls - /// quite a large amount of code into the core library to support - /// it. - void write(std::ostream&, size_t offset = 0, size_t size = npos, - StringData override_table_name = StringData()) const; - - // Conversion - void to_json(std::ostream& out, size_t link_depth = 0, std::map* renames = nullptr) const; - void to_string(std::ostream& out, size_t limit = 500) const; - void row_to_string(size_t row_ndx, std::ostream& out) const; - - // Get a reference to this table - TableRef get_table_ref() { return TableRef(this); } - ConstTableRef get_table_ref() const { return ConstTableRef(this); } - - /// \brief Compare two tables for equality. - /// - /// Two tables are equal if they have equal descriptors - /// (`Descriptor::operator==()`) and equal contents. Equal descriptors imply - /// that the two tables have the same columns in the same order. Equal - /// contents means that the two tables must have the same number of rows, - /// and that for each row index, the two rows must have the same values in - /// each column. - /// - /// In mixed columns, both the value types and the values are required to be - /// equal. - /// - /// For a particular row and column, if the two values are themselves tables - /// (subtable and mixed columns) value equality implies a recursive - /// invocation of `Table::operator==()`. - bool operator==(const Table&) const; - - /// \brief Compare two tables for inequality. - /// - /// See operator==(). - bool operator!=(const Table& t) const; - - /// A subtable in a column of type 'table' (which shares descriptor with - /// other subtables in the same column) is initially in a degenerate state - /// where it takes up a minimal amout of space. This function returns true - /// if, and only if the table accessor is attached to such a subtable. This - /// function is mainly intended for debugging purposes. - bool is_degenerate() const noexcept; - - // Debug -#ifdef REALM_DEBUG - void verify() const; // Must be upper case to avoid conflict with macro in ObjC - void to_dot(std::ostream&, StringData title = StringData()) const; - void print() const; - MemStats stats() const; - void dump_node_structure() const; // To std::cerr (for GDB) - void dump_node_structure(std::ostream&, int level) const; -#else - void verify() const {} -#endif - - class Parent; - using HandoverPatch = TableHandoverPatch; - static void generate_patch(const TableRef& ref, std::unique_ptr& patch); - static TableRef create_from_and_consume_patch(std::unique_ptr& patch, Group& group); - -protected: - /// Get a pointer to the accessor of the specified subtable. The - /// accessor will be created if it does not already exist. - /// - /// The returned table pointer must **always** end up being - /// wrapped in some instantiation of BasicTableRef<>. - Table* get_subtable_ptr(size_t col_ndx, size_t row_ndx); - - /// See non-const get_subtable_ptr(). - const Table* get_subtable_ptr(size_t col_ndx, size_t row_ndx) const; - - /// Compare the rows of two tables under the assumption that the two tables - /// have the same number of columns, and the same data type at each column - /// index (as expressed through the DataType enum). - bool compare_rows(const Table&) const; - - void set_into_mixed(Table* parent, size_t col_ndx, size_t row_ndx) const; - -private: - class SliceWriter; - - // Number of rows in this table - size_t m_size; - - // Underlying array structure. `m_top` is in use only for root tables; that - // is, for tables with independent descriptor. `m_columns` contains a ref - // for each column and search index in order of the columns. A search index - // ref always occurs immediately after the ref of the column to which the - // search index belongs. - // - // A subtable column (a column of type `type_table`) is essentially just a - // column of 'refs' pointing to the root node of each subtable. - // - // To save space in the database file, a subtable in such a column always - // starts out in a degenerate form where nothing is allocated on its behalf, - // and a null 'ref' is stored in the corresponding slot of the column. A - // subtable remains in this degenerate state until the first row is added to - // the subtable. - // - // For this scheme to work, it must be (and is) possible to create a table - // accessor that refers to a degenerate subtable. A table accessor (instance - // of `Table`) refers to a degenerate subtable if, and only if `m_columns` - // is unattached. - // - // FIXME: The fact that `m_columns` may be detached means that many - // functions (even non-modifying functions) need to check for that before - // accessing the contents of the table. This incurs a runtime - // overhead. Consider whether this overhead can be eliminated by having - // `Table::m_columns` always attached to something, and then detect the - // degenerate state in a different way. - Array m_top; - Array m_columns; // 2nd slot in m_top (for root tables) - Spec m_spec; // 1st slot in m_top (for root tables) - - // Is guaranteed to be empty for a detached accessor. Otherwise it is empty - // when the table accessor is attached to a degenerate subtable (unattached - // `m_columns`), otherwise it contains precisely one column accessor for - // each column in the table, in order. - // - // In some cases an entry may be null. This is currently possible only in - // connection with Group::advance_transact(), but it means that several - // member functions must be prepared to handle these null entries; in - // particular, detach(), ~Table(), functions called on behalf of detach() - // and ~Table(), and functiones called on behalf of - // Group::advance_transact(). - typedef std::vector column_accessors; - column_accessors m_cols; - - mutable std::atomic m_ref_count; - - // If this table is a root table (has independent descriptor), - // then Table::m_descriptor refers to the accessor of its - // descriptor when, and only when the descriptor accessor - // exists. This is used to ensure that at most one descriptor - // accessor exists for each underlying descriptor at any given - // point in time. Subdescriptors are kept unique by means of a - // registry in the parent descriptor. Table::m_descriptor is - // always null for tables with shared descriptor. - mutable Descriptor* m_descriptor; - - // Table view instances - typedef std::vector views; - mutable views m_views; - - // Points to first bound row accessor, or is null if there are none. - mutable RowBase* m_row_accessors = nullptr; - - // Mutex which must be locked any time the row accessor chain or m_views is used - mutable util::Mutex m_accessor_mutex; - - // Used for queries: Items are added with link() method during buildup of query - mutable std::vector m_link_chain; - - /// Used only in connection with Group::advance_transact() and - /// Table::refresh_accessor_tree(). - mutable bool m_mark; - - mutable uint_fast64_t m_version; - - void erase_row(size_t row_ndx, bool is_move_last_over); - void batch_erase_rows(const IntegerColumn& row_indexes, bool is_move_last_over); - void do_remove(size_t row_ndx, bool broken_reciprocal_backlinks); - void do_move_last_over(size_t row_ndx, bool broken_reciprocal_backlinks); - void do_swap_rows(size_t row_ndx_1, size_t row_ndx_2); - void do_change_link_targets(size_t row_ndx, size_t new_row_ndx); - void do_clear(bool broken_reciprocal_backlinks); - size_t do_set_link(size_t col_ndx, size_t row_ndx, size_t target_row_ndx); - template - size_t do_set_unique(ColType& column, size_t row_ndx, T&& value); - - void upgrade_file_format(); - - // Upgrades OldDateTime columns to Timestamp columns - void upgrade_olddatetime(); - - /// Update the version of this table and all tables which have links to it. - /// This causes all views referring to those tables to go out of sync, so that - /// calls to sync_if_needed() will bring the view up to date by reexecuting the - /// query. - /// - /// \param bump_global chooses whether the global versioning counter must be - /// bumped first as part of the update. This is the normal mode of operation, - /// when a change is made to the table. When calling recursively (following links - /// or going to the parent table), the parameter should be set to false to correctly - /// prune traversal. - void bump_version(bool bump_global = true) const noexcept; - - /// Disable copying assignment. - /// - /// It could easily be implemented by calling assign(), but the - /// non-checking nature of the low-level dynamically typed API - /// makes it too risky to offer this feature as an - /// operator. - /// - /// FIXME: assign() has not yet been implemented, but the - /// intention is that it will copy the rows of the argument table - /// into this table after clearing the original contents, and for - /// target tables without a shared spec, it would also copy the - /// spec. For target tables with shared spec, it would be an error - /// to pass an argument table with an incompatible spec, but - /// assign() would not check for spec compatibility. This would - /// make it ideal as a basis for implementing operator=() for - /// typed tables. - Table& operator=(const Table&); - - /// Used when constructing an accessor whose lifetime is going to be managed - /// by reference counting. The lifetime of accessors of free-standing tables - /// allocated on the stack by the application is not managed by reference - /// counting, so that is a case where this tag must **not** be specified. - class ref_count_tag {}; - - /// Create an uninitialized accessor whose lifetime is managed by reference - /// counting. - Table(ref_count_tag, Allocator&); - - void init(ref_type top_ref, ArrayParent*, size_t ndx_in_parent, - bool skip_create_column_accessors = false); - void init(ConstSubspecRef shared_spec, ArrayParent* parent_column, - size_t parent_row_ndx); - - static void do_insert_column(Descriptor&, size_t col_ndx, DataType type, - StringData name, LinkTargetInfo& link_target_info, bool nullable = false); - static void do_insert_column_unless_exists(Descriptor&, size_t col_ndx, DataType type, - StringData name, LinkTargetInfo& link, bool nullable = false, - bool* was_inserted = nullptr); - static void do_erase_column(Descriptor&, size_t col_ndx); - static void do_rename_column(Descriptor&, size_t col_ndx, StringData name); - static void do_move_column(Descriptor&, size_t col_ndx_1, size_t col_ndx_2); - - struct InsertSubtableColumns; - struct EraseSubtableColumns; - struct RenameSubtableColumns; - struct MoveSubtableColumns; - - void insert_root_column(size_t col_ndx, DataType type, StringData name, - LinkTargetInfo& link, bool nullable = false); - void erase_root_column(size_t col_ndx); - void move_root_column(size_t from, size_t to); - void do_insert_root_column(size_t col_ndx, ColumnType, StringData name, bool nullable = false); - void do_erase_root_column(size_t col_ndx); - void do_move_root_column(size_t from, size_t to); - void do_set_link_type(size_t col_ndx, LinkType); - void insert_backlink_column(size_t origin_table_ndx, size_t origin_col_ndx, size_t backlink_col_ndx); - void erase_backlink_column(size_t origin_table_ndx, size_t origin_col_ndx); - void update_link_target_tables(size_t old_col_ndx_begin, size_t new_col_ndx_begin); - void update_link_target_tables_after_column_move(size_t moved_from, size_t moved_to); - - struct SubtableUpdater { - virtual void update(const SubtableColumn&, Array& subcolumns) = 0; - virtual void update_accessor(Table&) = 0; - virtual ~SubtableUpdater() {} - }; - static void update_subtables(Descriptor&, SubtableUpdater*); - void update_subtables(const size_t* col_path_begin, const size_t* col_path_end, - SubtableUpdater*); - - struct AccessorUpdater { - virtual void update(Table&) = 0; - virtual void update_parent(Table&) = 0; - virtual ~AccessorUpdater() {} - }; - void update_accessors(const size_t* col_path_begin, const size_t* col_path_end, - AccessorUpdater&); - - void create_degen_subtab_columns(); - ColumnBase* create_column_accessor(ColumnType, size_t col_ndx, size_t ndx_in_parent); - void destroy_column_accessors() noexcept; - - /// Called in the context of Group::commit() to ensure that - /// attached table accessors stay valid across a commit. Please - /// note that this works only for non-transactional commits. Table - /// accessors obtained during a transaction are always detached - /// when the transaction ends. - void update_from_parent(size_t old_baseline) noexcept; - - // Support function for conversions - void to_string_header(std::ostream& out, std::vector& widths) const; - void to_string_row(size_t row_ndx, std::ostream& out, - const std::vector& widths) const; - - // recursive methods called by to_json, to follow links - void to_json(std::ostream& out, size_t link_depth, std::map& renames, - std::vector& followed) const; - void to_json_row(size_t row_ndx, std::ostream& out, size_t link_depth, - std::map& renames, std::vector& followed) const; - void to_json_row(size_t row_ndx, std::ostream& out, size_t link_depth = 0, - std::map* renames = nullptr) const; - - // Detach accessor from underlying table. Caller must ensure that - // a reference count exists upon return, for example by obtaining - // an extra reference count before the call. - // - // This function puts this table accessor into the detached - // state. This detaches it from the underlying structure of array - // nodes. It also recursively detaches accessors for subtables, - // and the type descriptor accessor. When this function returns, - // is_attached() will return false. - // - // This function may be called for a table accessor that is - // already in the detached state (idempotency). - // - // It is also valid to call this function for a table accessor - // that has not yet been detached, but whose underlying structure - // of arrays have changed in an unpredictable/unknown way. This - // kind of change generally happens when a modifying table - // operation fails, and also when one transaction is ended and a - // new one is started. - void detach() noexcept; - - /// Detach and remove all attached row, link list, and subtable - /// accessors. This function does not discard the descriptor accessor, if - /// any, and it does not discard column accessors either. - void discard_child_accessors() noexcept; - - void discard_row_accessors() noexcept; - - // Detach the type descriptor accessor if it exists. - void discard_desc_accessor() noexcept; - - void bind_ptr() const noexcept; - void unbind_ptr() const noexcept; - - void register_view(const TableViewBase* view); - void unregister_view(const TableViewBase* view) noexcept; - void move_registered_view(const TableViewBase* old_addr, - const TableViewBase* new_addr) noexcept; - void discard_views() noexcept; - - void register_row_accessor(RowBase*) const noexcept; - void unregister_row_accessor(RowBase*) const noexcept; - void do_unregister_row_accessor(RowBase*) const noexcept; - - class UnbindGuard; - - ColumnType get_real_column_type(size_t column_ndx) const noexcept; - - /// If this table is a group-level table, the parent group is returned, - /// otherwise null is returned. - Group* get_parent_group() const noexcept; - - const ColumnBase& get_column_base(size_t column_ndx) const noexcept; - ColumnBase& get_column_base(size_t column_ndx); - - template - T& get_column(size_t ndx); - - template - const T& get_column(size_t ndx) const noexcept; - - IntegerColumn& get_column(size_t column_ndx); - const IntegerColumn& get_column(size_t column_ndx) const noexcept; - IntNullColumn& get_column_int_null(size_t column_ndx); - const IntNullColumn& get_column_int_null(size_t column_ndx) const noexcept; - FloatColumn& get_column_float(size_t column_ndx); - const FloatColumn& get_column_float(size_t column_ndx) const noexcept; - DoubleColumn& get_column_double(size_t column_ndx); - const DoubleColumn& get_column_double(size_t column_ndx) const noexcept; - StringColumn& get_column_string(size_t column_ndx); - const StringColumn& get_column_string(size_t column_ndx) const noexcept; - BinaryColumn& get_column_binary(size_t column_ndx); - const BinaryColumn& get_column_binary(size_t column_ndx) const noexcept; - StringEnumColumn& get_column_string_enum(size_t column_ndx); - const StringEnumColumn& get_column_string_enum(size_t column_ndx) const noexcept; - SubtableColumn& get_column_table(size_t column_ndx); - const SubtableColumn& get_column_table(size_t column_ndx) const noexcept; - MixedColumn& get_column_mixed(size_t column_ndx); - const MixedColumn& get_column_mixed(size_t column_ndx) const noexcept; - TimestampColumn& get_column_timestamp(size_t column_ndx); - const TimestampColumn& get_column_timestamp(size_t column_ndx) const noexcept; - const LinkColumnBase& get_column_link_base(size_t ndx) const noexcept; - LinkColumnBase& get_column_link_base(size_t ndx); - const LinkColumn& get_column_link(size_t ndx) const noexcept; - LinkColumn& get_column_link(size_t ndx); - const LinkListColumn& get_column_link_list(size_t ndx) const noexcept; - LinkListColumn& get_column_link_list(size_t ndx); - const BacklinkColumn& get_column_backlink(size_t ndx) const noexcept; - BacklinkColumn& get_column_backlink(size_t ndx); - - void instantiate_before_change(); - void validate_column_type(const ColumnBase& column, ColumnType expected_type, - size_t ndx) const; - - static size_t get_size_from_ref(ref_type top_ref, Allocator&) noexcept; - static size_t get_size_from_ref(ref_type spec_ref, ref_type columns_ref, - Allocator&) noexcept; - - const Table* get_parent_table_ptr(size_t* column_ndx_out = nullptr) const noexcept; - Table* get_parent_table_ptr(size_t* column_ndx_out = nullptr) noexcept; - - /// Create an empty table with independent spec and return just - /// the reference to the underlying memory. - static ref_type create_empty_table(Allocator&); - - /// Create a column of the specified type, fill it with the - /// specified number of default values, and return just the - /// reference to the underlying memory. - static ref_type create_column(ColumnType column_type, size_t num_default_values, bool nullable, Allocator&); - - /// Construct a copy of the columns array of this table using the - /// specified allocator and return just the ref to that array. - /// - /// In the clone, no string column will be of the enumeration - /// type. - ref_type clone_columns(Allocator&) const; - - /// Construct a complete copy of this table (including its spec) - /// using the specified allocator and return just the ref to the - /// new top array. - ref_type clone(Allocator&) const; - - /// True for `col_type_Link` and `col_type_LinkList`. - static bool is_link_type(ColumnType) noexcept; - - void connect_opposite_link_columns(size_t link_col_ndx, Table& target_table, - size_t backlink_col_ndx) noexcept; - - size_t get_num_strong_backlinks(size_t row_ndx) const noexcept; - - //@{ - - /// Cascading removal of strong links. - /// - /// cascade_break_backlinks_to() removes all backlinks pointing to the row - /// at \a row_ndx. Additionally, if this causes the number of **strong** - /// backlinks originating from a particular opposite row (target row of - /// corresponding forward link) to drop to zero, and that row is not already - /// in \a state.rows, then that row is added to \a state.rows, and - /// cascade_break_backlinks_to() is called recursively for it. This - /// operation is the first half of the cascading row removal operation. The - /// second half is performed by passing the resulting contents of \a - /// state.rows to remove_backlink_broken_rows(). - /// - /// Operations that trigger cascading row removal due to explicit removal of - /// one or more rows (the *initiating rows*), should add those rows to \a - /// rows initially, and then call cascade_break_backlinks_to() once for each - /// of them in turn. This is opposed to carrying out the explicit row - /// removals independently, which is also possible, but does require that - /// any initiating rows, that end up in \a state.rows due to link cycles, - /// are removed before passing \a state.rows to - /// remove_backlink_broken_rows(). In the case of clear(), where all rows of - /// a table are explicitly removed, it is better to use - /// cascade_break_backlinks_to_all_rows(), and then carry out the table - /// clearing as an independent step. For operations that trigger cascading - /// row removal for other reasons than explicit row removal, \a state.rows - /// must be empty initially, but cascade_break_backlinks_to() must still be - /// called for each of the initiating rows. - /// - /// When the last non-recursive invocation of cascade_break_backlinks_to() - /// returns, all forward links originating from a row in \a state.rows have - /// had their reciprocal backlinks removed, so remove_backlink_broken_rows() - /// does not perform reciprocal backlink removal at all. Additionally, all - /// remaining backlinks originating from rows in \a state.rows are - /// guaranteed to point to rows that are **not** in \a state.rows. This is - /// true because any backlink that was pointing to a row in \a state.rows - /// has been removed by one of the invocations of - /// cascade_break_backlinks_to(). The set of forward links, that correspond - /// to these remaining backlinks, is precisely the set of forward links that - /// need to be removed/nullified by remove_backlink_broken_rows(), which it - /// does by way of reciprocal forward link removal. Note also, that while - /// all the rows in \a state.rows can have remaining **weak** backlinks - /// originating from them, only the initiating rows in \a state.rows can - /// have remaining **strong** backlinks originating from them. This is true - /// because a non-initiating row is added to \a state.rows only when the - /// last backlink originating from it is lost. - /// - /// Each row removal is replicated individually (as opposed to one - /// replication instruction for the entire cascading operation). This is - /// done because it provides an easy way for Group::advance_transact() to - /// know which tables are affected by the cascade. Note that this has - /// several important consequences: First of all, the replication log - /// receiver must execute the row removal instructions in a non-cascading - /// fashion, meaning that there will be an asymmetry between the two sides - /// in how the effect of the cascade is brought about. While this is fine - /// for simple 1-to-1 replication, it may end up interfering badly with - /// *transaction merging*, when that feature is introduced. Imagine for - /// example that the cascade initiating operation gets canceled during - /// conflict resolution, but some, or all of the induced row removals get to - /// stay. That would break causal consistency. It is important, however, for - /// transaction merging that the cascaded row removals are explicitly - /// mentioned in the replication log, such that they can be used to adjust - /// row indexes during the *operational transform*. - /// - /// cascade_break_backlinks_to_all_rows() has the same affect as calling - /// cascade_break_backlinks_to() once for each row in the table. When - /// calling this function, \a state.stop_on_table must be set to the origin - /// table (origin table of corresponding forward links), and \a - /// state.stop_on_link_list_column must be null. - /// - /// It is immaterial which table remove_backlink_broken_rows() is called on, - /// as long it that table is in the same group as the removed rows. - - void cascade_break_backlinks_to(size_t row_ndx, CascadeState& state); - void cascade_break_backlinks_to_all_rows(CascadeState& state); - void remove_backlink_broken_rows(const CascadeState&); - - //@} - - /// Used by query. Follows chain of link columns and returns final target table - const Table* get_link_chain_target(const std::vector& link_chain) const; - - /// Remove the specified row by the 'move last over' method. - void do_move_last_over(size_t row_ndx); - - // Precondition: 1 <= end - begin - size_t* record_subtable_path(size_t* begin, size_t* end) const noexcept; - - /// Check if an accessor exists for the specified subtable. If it does, - /// return a pointer to it, otherwise return null. This function assumes - /// that the specified column index in a valid index into `m_cols` but does - /// not otherwise assume more than minimal accessor consistency (see - /// AccessorConsistencyLevels.) - Table* get_subtable_accessor(size_t col_ndx, size_t row_ndx) noexcept; - - /// Unless the column accessor is missing, this function returns the - /// accessor for the target table of the specified link-type column. The - /// column accessor is said to be missing if `m_cols[col_ndx]` is null, and - /// this can happen only during certain operations such as the updating of - /// the accessor tree when a read transaction is advanced. Note that for - /// link type columns, the target table accessor exists when, and only when - /// the origin table accessor exists. This function assumes that the - /// specified column index in a valid index into `m_cols` and that the - /// column is a link-type column. Beyond that, it assume nothing more than - /// minimal accessor consistency (see AccessorConsistencyLevels.) - Table* get_link_target_table_accessor(size_t col_ndx) noexcept; - - void discard_subtable_accessor(size_t col_ndx, size_t row_ndx) noexcept; - - void adj_acc_insert_rows(size_t row_ndx, size_t num_rows) noexcept; - void adj_acc_erase_row(size_t row_ndx) noexcept; - void adj_acc_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept; - - /// Adjust this table accessor and its subordinates after move_last_over() - /// (or its inverse). - /// - /// First, any row, subtable, or link list accessors registered as being at - /// \a to_row_ndx will be detached, as that row is assumed to have been - /// replaced. Next, any row, subtable, or link list accessors registered as - /// being at \a from_row_ndx, will be reregistered as being at \a - /// to_row_ndx, as the row at \a from_row_ndx is assumed to have been moved - /// to \a to_row_ndx. - /// - /// Crucially, if \a to_row_ndx is equal to \a from_row_ndx, then row, - /// subtable, or link list accessors at that row are **still detached**. - /// - /// Additionally, this function causes all link-adjacent tables to be marked - /// (dirty). Two tables are link-adjacent if one is the target table of a - /// link column of the other table. Note that this marking follows these - /// relations in both directions, but only to a depth of one. - /// - /// When this function is used in connection with move_last_over(), set \a - /// to_row_ndx to the index of the row to be removed, and set \a - /// from_row_ndx to the index of the last row in the table. As mentioned - /// earlier, this function can also be used in connection with the **inverse - /// of** move_last_over(), which is an operation that vacates a row by - /// moving its contents into a new last row of the table. In that case, set - /// \a to_row_ndx to one plus the index of the last row in the table, and - /// set \a from_row_ndx to the index of the row to be vacated. - /// - /// This function is used as part of Table::refresh_accessor_tree() to - /// promote the state of the accessors from Minimal Consistency into - /// Structural Correspondence, so it must be able to execute without - /// accessing the underlying array nodes. - void adj_acc_move_over(size_t from_row_ndx, size_t to_row_ndx) noexcept; - - void adj_acc_clear_root_table() noexcept; - void adj_acc_clear_nonroot_table() noexcept; - void adj_row_acc_insert_rows(size_t row_ndx, size_t num_rows) noexcept; - void adj_row_acc_erase_row(size_t row_ndx) noexcept; - void adj_row_acc_swap_rows(size_t row_ndx_1, size_t row_ndx_2) noexcept; - - /// Called by adj_acc_move_over() to adjust row accessors. - void adj_row_acc_move_over(size_t from_row_ndx, size_t to_row_ndx) noexcept; - - void adj_insert_column(size_t col_ndx); - void adj_erase_column(size_t col_ndx) noexcept; - void adj_move_column(size_t col_ndx_1, size_t col_ndx_2) noexcept; - - bool is_marked() const noexcept; - void mark() noexcept; - void unmark() noexcept; - void recursive_mark() noexcept; - void mark_link_target_tables(size_t col_ndx_begin) noexcept; - void mark_opposite_link_tables() noexcept; - - Replication* get_repl() noexcept; - - void set_ndx_in_parent(size_t ndx_in_parent) noexcept; - - /// Refresh the part of the accessor tree that is rooted at this - /// table. Subtable accessors will be refreshed only if they are marked - /// (Table::m_mark), and this applies recursively to subtables of - /// subtables. All refreshed table accessors (including this one) will be - /// unmarked upon return. - /// - /// The following conditions are necessary and sufficient for the proper - /// operation of this function: - /// - /// - This table must be a group-level table, or a subtable. It must not be - /// a free-standing table (because a free-standing table has no parent). - /// - /// - The `index in parent` property is correct. The `index in parent` - /// property of the table is the `index in parent` property of - /// `m_columns` for subtables with shared descriptor, and the `index in - /// parent` property of `m_top` for all other tables. - /// - /// - If this table has shared descriptor, then the `index in parent` - /// property of the contained spec accessor is correct. - /// - /// - The parent accessor is in a valid state (already refreshed). If the - /// parent is a group, then the group accessor (excluding its table - /// accessors) must be in a valid state. If the parent is a table, then - /// the table accessor (excluding its subtable accessors) must be in a - /// valid state. - /// - /// - Every descendant subtable accessor is marked if it needs to be - /// refreshed, or if it has a descendant accessor that needs to be - /// refreshed. - /// - /// - This table accessor, as well as all its descendant accessors, are in - /// structural correspondence with the underlying node hierarchy whose - /// root ref is stored in the parent (see AccessorConsistencyLevels). - void refresh_accessor_tree(); - - void refresh_column_accessors(size_t col_ndx_begin = 0); - - // Look for link columns starting from col_ndx_begin. - // If a link column is found, follow the link and update it's - // backlink column accessor if it is in different table. - void refresh_link_target_accessors(size_t col_ndx_begin = 0); - - bool is_cross_table_link_target() const noexcept; - -#ifdef REALM_DEBUG - void to_dot_internal(std::ostream&) const; -#endif - - friend class SubtableNode; - friend class _impl::TableFriend; - friend class Query; - template - friend class util::bind_ptr; - template - friend class SimpleQuerySupport; - friend class LangBindHelper; - friend class TableViewBase; - template - friend class Columns; - friend class Columns; - friend class ParentNode; - template - friend class SequentialGetter; - friend class RowBase; - friend class LinksToNode; - friend class LinkMap; - friend class LinkView; - friend class Group; -}; - - - -class Table::Parent: public ArrayParent { -public: - ~Parent() noexcept override {} - -protected: - virtual StringData get_child_name(size_t child_ndx) const noexcept; - - /// If children are group-level tables, then this function returns the - /// group. Otherwise it returns null. - virtual Group* get_parent_group() noexcept; - - /// If children are subtables, then this function returns the - /// parent table. Otherwise it returns null. - /// - /// If \a column_ndx_out is not null, this function must assign the index of - /// the column within the parent table to `*column_ndx_out` when , and only - /// when this table parent is a column in a parent table. - virtual Table* get_parent_table(size_t* column_ndx_out = nullptr) noexcept; - - /// Must be called whenever a child table accessor is about to be destroyed. - /// - /// Note that the argument is a pointer to the child Table rather than its - /// `ndx_in_parent` property. This is because only minimal accessor - /// consistency can be assumed by this function. - virtual void child_accessor_destroyed(Table* child) noexcept = 0; - - virtual size_t* record_subtable_path(size_t* begin, size_t* end) noexcept; - - friend class Table; -}; - - -// Implementation: - - -inline uint_fast64_t Table::get_version_counter() const noexcept { return m_version; } - -inline void Table::bump_version(bool bump_global) const noexcept -{ - if (bump_global) { - // This is only set on initial entry through an operation on the same - // table. recursive calls (via parent or via backlinks) must be done - // with bump_global=false. - m_top.get_alloc().bump_global_version(); - } - if (m_top.get_alloc().should_propagate_version(m_version)) { - if (const Table* parent = get_parent_table_ptr()) - parent->bump_version(false); - // Recurse through linked tables, use m_mark to avoid infinite recursion - for (auto& column : m_cols) { - // We may meet a null pointer in place of a backlink column, pending - // replacement with a new one. This can happen ONLY when creation of - // the corresponding forward link column in the origin table is - // pending as well. In this case it is ok to just ignore the zeroed - // backlink column, because the origin table is guaranteed to also - // be refreshed/marked dirty and hence have it's version bumped. - if (column != nullptr) - column->bump_link_origin_table_version(); - } - } -} - -inline void Table::remove(size_t row_ndx) -{ - bool is_move_last_over = false; - erase_row(row_ndx, is_move_last_over); // Throws -} - -inline void Table::move_last_over(size_t row_ndx) -{ - bool is_move_last_over = true; - erase_row(row_ndx, is_move_last_over); // Throws -} - -inline void Table::remove_last() -{ - if (!is_empty()) - remove(size()-1); -} - -// A good place to start if you want to understand the memory ordering -// chosen for the operations below is http://preshing.com/20130922/acquire-and-release-fences/ -inline void Table::bind_ptr() const noexcept -{ - m_ref_count.fetch_add(1, std::memory_order_relaxed); -} - -inline void Table::unbind_ptr() const noexcept -{ - // The delete operation runs the destructor, and the destructor - // must always see all changes to the object being deleted. - // Within each thread, we know that unbind_ptr will always happen after - // any changes, so it is a convenient place to do a release. - // The release will then be observed by the acquire fence in - // the case where delete is actually called (the count reaches 0) - if (m_ref_count.fetch_sub(1, std::memory_order_release) != 1) - return; - - std::atomic_thread_fence(std::memory_order_acquire); - delete this; -} - -inline void Table::register_view(const TableViewBase* view) -{ - // Casting away constness here - operations done on tableviews - // through m_views are all internal and preserving "some" kind - // of logical constness. - m_views.push_back(const_cast(view)); -} - -inline bool Table::is_attached() const noexcept -{ - // Note that it is not possible to tie the state of attachment of a table to - // the state of attachment of m_top, because tables with shared spec do not - // have a 'top' array. Neither is it possible to tie it to the state of - // attachment of m_columns, because subtables with shared spec start out in - // a degenerate form where they do not have a 'columns' array. For these - // reasons, it is neccessary to define the notion of attachment for a table - // as follows: A table is attached if, and ony if m_column stores a non-null - // parent pointer. This works because even for degenerate subtables, - // m_columns is initialized with the correct parent pointer. - return m_columns.has_parent(); -} - -inline StringData Table::get_name() const noexcept -{ - REALM_ASSERT(is_attached()); - const Array& real_top = m_top.is_attached() ? m_top : m_columns; - ArrayParent* parent = real_top.get_parent(); - if (!parent) - return StringData(""); - size_t index_in_parent = real_top.get_ndx_in_parent(); - REALM_ASSERT(dynamic_cast(parent)); - return static_cast(parent)->get_child_name(index_in_parent); -} - -inline size_t Table::get_column_count() const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec.get_public_column_count(); -} - -inline StringData Table::get_column_name(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, get_column_count()); - return m_spec.get_column_name(ndx); -} - -inline size_t Table::get_column_index(StringData name) const noexcept -{ - REALM_ASSERT(is_attached()); - return m_spec.get_column_index(name); -} - -inline ColumnType Table::get_real_column_type(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_spec.get_column_count()); - return m_spec.get_column_type(ndx); -} - -inline DataType Table::get_column_type(size_t ndx) const noexcept -{ - REALM_ASSERT_3(ndx, <, m_spec.get_column_count()); - return m_spec.get_public_column_type(ndx); -} - -template -inline Col& Table::get_column(size_t ndx) -{ - ColumnBase& col = get_column_base(ndx); -#ifdef REALM_DEBUG - validate_column_type(col, col_type, ndx); -#endif - REALM_ASSERT(typeid(Col) == typeid(col)); - return static_cast(col); -} - -template -inline const Col& Table::get_column(size_t ndx) const noexcept -{ - const ColumnBase& col = get_column_base(ndx); -#ifdef REALM_DEBUG - validate_column_type(col, col_type, ndx); -#endif - REALM_ASSERT(typeid(Col) == typeid(col)); - return static_cast(col); -} - -inline bool Table::has_shared_type() const noexcept -{ - REALM_ASSERT(is_attached()); - return !m_top.is_attached(); -} - - -class Table::UnbindGuard { -public: - UnbindGuard(Table* table) noexcept: m_table(table) - { - } - - ~UnbindGuard() noexcept - { - if (m_table) - m_table->unbind_ptr(); - } - - Table& operator*() const noexcept - { - return *m_table; - } - - Table* operator->() const noexcept - { - return m_table; - } - - Table* get() const noexcept - { - return m_table; - } - - Table* release() noexcept - { - Table* table = m_table; - m_table = nullptr; - return table; - } - -private: - Table* m_table; -}; - - -inline Table::Table(Allocator& alloc): - m_top(alloc), - m_columns(alloc), - m_spec(alloc) -{ - m_ref_count = 1; // Explicitely managed lifetime - m_descriptor = nullptr; - - ref_type ref = create_empty_table(alloc); // Throws - Parent* parent = nullptr; - size_t ndx_in_parent = 0; - init(ref, parent, ndx_in_parent); -} - -inline Table::Table(const Table& t, Allocator& alloc): - m_top(alloc), - m_columns(alloc), - m_spec(alloc) -{ - m_ref_count = 1; // Explicitely managed lifetime - m_descriptor = nullptr; - - ref_type ref = t.clone(alloc); // Throws - Parent* parent = nullptr; - size_t ndx_in_parent = 0; - init(ref, parent, ndx_in_parent); -} - -inline Table::Table(ref_count_tag, Allocator& alloc): - m_top(alloc), - m_columns(alloc), - m_spec(alloc) -{ - m_ref_count = 0; // Lifetime managed by reference counting - m_descriptor = nullptr; -} - -inline Allocator& Table::get_alloc() const -{ - return m_top.get_alloc(); -} - -inline TableRef Table::create(Allocator& alloc) -{ - std::unique_ptr
table(new Table(ref_count_tag(), alloc)); // Throws - ref_type ref = create_empty_table(alloc); // Throws - Parent* parent = nullptr; - size_t ndx_in_parent = 0; - table->init(ref, parent, ndx_in_parent); // Throws - return table.release()->get_table_ref(); -} - -inline TableRef Table::copy(Allocator& alloc) const -{ - std::unique_ptr
table(new Table(ref_count_tag(), alloc)); // Throws - ref_type ref = clone(alloc); // Throws - Parent* parent = nullptr; - size_t ndx_in_parent = 0; - table->init(ref, parent, ndx_in_parent); // Throws - return table.release()->get_table_ref(); -} - -// For use by queries -template -inline Columns Table::column(size_t column) -{ - std::vector link_chain = std::move(m_link_chain); - m_link_chain.clear(); - - // Check if user-given template type equals Realm type. Todo, we should clean up and reuse all our - // type traits (all the is_same() cases below). - const Table* table = get_link_chain_target(link_chain); - - realm::DataType ct = table->get_column_type(column); - if (std::is_same::value && ct != type_Int) - throw(LogicError::type_mismatch); - else if (std::is_same::value && ct != type_Bool) - throw(LogicError::type_mismatch); - else if (std::is_same::value && ct != type_OldDateTime) - throw(LogicError::type_mismatch); - else if (std::is_same::value && ct != type_Float) - throw(LogicError::type_mismatch); - else if (std::is_same::value && ct != type_Double) - throw(LogicError::type_mismatch); - - if (std::is_same::value || std::is_same::value || std::is_same::value) { - link_chain.push_back(column); - } - - return Columns(column, this, std::move(link_chain)); -} - -template -inline Columns Table::column(const Table& origin, size_t origin_col_ndx) -{ - static_assert(std::is_same::value, ""); - - size_t origin_table_ndx = origin.get_index_in_group(); - const Table& current_target_table = *get_link_chain_target(m_link_chain); - size_t backlink_col_ndx = current_target_table.m_spec.find_backlink_column(origin_table_ndx, origin_col_ndx); - - std::vector link_chain = std::move(m_link_chain); - m_link_chain.clear(); - link_chain.push_back(backlink_col_ndx); - - return Columns(backlink_col_ndx, this, std::move(link_chain)); -} - -template -SubQuery Table::column(size_t column_ndx, Query subquery) -{ - static_assert(std::is_same::value, "A subquery must involve a link list or backlink column"); - return SubQuery(column(column_ndx), std::move(subquery)); -} - -template -SubQuery Table::column(const Table& origin, size_t origin_col_ndx, Query subquery) -{ - static_assert(std::is_same::value, "A subquery must involve a link list or backlink column"); - return SubQuery(column(origin, origin_col_ndx), std::move(subquery)); -} - -// For use by queries -inline Table& Table::link(size_t link_column) -{ - m_link_chain.push_back(link_column); - return *this; -} - -inline Table& Table::backlink(const Table& origin, size_t origin_col_ndx) -{ - size_t origin_table_ndx = origin.get_index_in_group(); - const Table& current_target_table = *get_link_chain_target(m_link_chain); - size_t backlink_col_ndx = current_target_table.m_spec.find_backlink_column(origin_table_ndx, origin_col_ndx); - return link(backlink_col_ndx); -} - -inline bool Table::is_empty() const noexcept -{ - return m_size == 0; -} - -inline size_t Table::size() const noexcept -{ - return m_size; -} - -inline Table::RowExpr Table::get(size_t row_ndx) noexcept -{ - REALM_ASSERT_3(row_ndx, <, size()); - return RowExpr(this, row_ndx); -} - -inline Table::ConstRowExpr Table::get(size_t row_ndx) const noexcept -{ - REALM_ASSERT_3(row_ndx, <, size()); - return ConstRowExpr(this, row_ndx); -} - -inline Table::RowExpr Table::front() noexcept -{ - return get(0); -} - -inline Table::ConstRowExpr Table::front() const noexcept -{ - return get(0); -} - -inline Table::RowExpr Table::back() noexcept -{ - return get(m_size-1); -} - -inline Table::ConstRowExpr Table::back() const noexcept -{ - return get(m_size-1); -} - -inline Table::RowExpr Table::operator[](size_t row_ndx) noexcept -{ - return get(row_ndx); -} - -inline Table::ConstRowExpr Table::operator[](size_t row_ndx) const noexcept -{ - return get(row_ndx); -} - -inline size_t Table::add_empty_row(size_t num_rows) -{ - size_t row_ndx = m_size; - insert_empty_row(row_ndx, num_rows); // Throws - return row_ndx; // Return index of first new row -} - -inline const Table* Table::get_subtable_ptr(size_t col_ndx, size_t row_ndx) const -{ - return const_cast(this)->get_subtable_ptr(col_ndx, row_ndx); // Throws -} - -inline bool Table::is_null_link(size_t col_ndx, size_t row_ndx) const noexcept -{ - return get_link(col_ndx, row_ndx) == realm::npos; -} - -inline ConstTableRef Table::get_link_target(size_t col_ndx) const noexcept -{ - return const_cast(this)->get_link_target(col_ndx); -} - -template -inline void Table::set_enum(size_t column_ndx, size_t row_ndx, E value) -{ - set_int(column_ndx, row_ndx, value); -} - -inline void Table::nullify_link(size_t col_ndx, size_t row_ndx) -{ - set_link(col_ndx, row_ndx, realm::npos); -} - -inline TableRef Table::get_subtable(size_t column_ndx, size_t row_ndx) -{ - return TableRef(get_subtable_ptr(column_ndx, row_ndx)); -} - -inline ConstTableRef Table::get_subtable(size_t column_ndx, size_t row_ndx) const -{ - return ConstTableRef(get_subtable_ptr(column_ndx, row_ndx)); -} - -inline ConstTableRef Table::get_parent_table(size_t* column_ndx_out) const noexcept -{ - return ConstTableRef(get_parent_table_ptr(column_ndx_out)); -} - -inline TableRef Table::get_parent_table(size_t* column_ndx_out) noexcept -{ - return TableRef(get_parent_table_ptr(column_ndx_out)); -} - -inline bool Table::is_group_level() const noexcept -{ - return bool(get_parent_group()); -} - -inline bool Table::operator==(const Table& t) const -{ - return m_spec == t.m_spec && compare_rows(t); // Throws -} - -inline bool Table::operator!=(const Table& t) const -{ - return !(*this == t); // Throws -} - -inline bool Table::is_degenerate() const noexcept -{ - return !m_columns.is_attached(); -} - -inline void Table::set_into_mixed(Table* parent, size_t col_ndx, size_t row_ndx) const -{ - parent->set_mixed_subtable(col_ndx, row_ndx, this); -} - -inline size_t Table::get_size_from_ref(ref_type top_ref, Allocator& alloc) noexcept -{ - const char* top_header = alloc.translate(top_ref); - std::pair p = Array::get_two(top_header, 0); - ref_type spec_ref = to_ref(p.first), columns_ref = to_ref(p.second); - return get_size_from_ref(spec_ref, columns_ref, alloc); -} - -inline Table* Table::get_parent_table_ptr(size_t* column_ndx_out) noexcept -{ - const Table* parent = const_cast(this)->get_parent_table_ptr(column_ndx_out); - return const_cast(parent); -} - -inline bool Table::is_link_type(ColumnType col_type) noexcept -{ - return col_type == col_type_Link || col_type == col_type_LinkList; -} - -inline size_t* Table::record_subtable_path(size_t* begin, size_t* end) const noexcept -{ - const Array& real_top = m_top.is_attached() ? m_top : m_columns; - size_t index_in_parent = real_top.get_ndx_in_parent(); - REALM_ASSERT_3(begin, <, end); - *begin++ = index_in_parent; - ArrayParent* parent = real_top.get_parent(); - REALM_ASSERT(parent); - REALM_ASSERT(dynamic_cast(parent)); - return static_cast(parent)->record_subtable_path(begin, end); -} - -inline size_t* Table::Parent::record_subtable_path(size_t* begin, size_t*) noexcept -{ - return begin; -} - -template -typename T::RowAccessor Table::get_link_accessor(size_t column_ndx, size_t row_ndx) -{ - size_t row_pos_in_target = get_link(column_ndx, row_ndx); - TableRef target_table = get_link_target(column_ndx); - - Table* table = &*target_table; - T* typed_table = reinterpret_cast(table); - return (*typed_table)[row_pos_in_target]; -} - -inline bool Table::is_marked() const noexcept -{ - return m_mark; -} - -inline void Table::mark() noexcept -{ - m_mark = true; -} - -inline void Table::unmark() noexcept -{ - m_mark = false; -} - -inline Replication* Table::get_repl() noexcept -{ - return m_top.get_alloc().get_replication(); -} - -inline void Table::set_ndx_in_parent(size_t ndx_in_parent) noexcept -{ - if (m_top.is_attached()) { - // Root table (independent descriptor) - m_top.set_ndx_in_parent(ndx_in_parent); - } - else { - // Subtable with shared descriptor - m_columns.set_ndx_in_parent(ndx_in_parent); - } -} - -// This class groups together information about the target of a link column -// This is not a valid link if the target table == nullptr -struct LinkTargetInfo { - LinkTargetInfo(Table* target = nullptr, size_t backlink_ndx = realm::npos) - : m_target_table(target), m_backlink_col_ndx(backlink_ndx) {} - bool is_valid() const { return (m_target_table != nullptr); } - Table* m_target_table; - size_t m_backlink_col_ndx; // a value of npos indicates the backlink should be appended -}; - -// The purpose of this class is to give internal access to some, but -// not all of the non-public parts of the Table class. -class _impl::TableFriend { -public: - typedef Table::UnbindGuard UnbindGuard; - - static ref_type create_empty_table(Allocator& alloc) - { - return Table::create_empty_table(alloc); // Throws - } - - static ref_type clone(const Table& table, Allocator& alloc) - { - return table.clone(alloc); // Throws - } - - static ref_type clone_columns(const Table& table, Allocator& alloc) - { - return table.clone_columns(alloc); // Throws - } - - static Table* create_accessor(Allocator& alloc, ref_type top_ref, - Table::Parent* parent, size_t ndx_in_parent) - { - std::unique_ptr
table(new Table(Table::ref_count_tag(), alloc)); // Throws - table->init(top_ref, parent, ndx_in_parent); // Throws - return table.release(); - } - - static Table* create_accessor(ConstSubspecRef shared_spec, Table::Parent* parent_column, - size_t parent_row_ndx) - { - Allocator& alloc = shared_spec.get_alloc(); - std::unique_ptr
table(new Table(Table::ref_count_tag(), alloc)); // Throws - table->init(shared_spec, parent_column, parent_row_ndx); // Throws - return table.release(); - } - - // Intended to be used only by Group::create_table_accessor() - static Table* create_incomplete_accessor(Allocator& alloc, ref_type top_ref, - Table::Parent* parent, size_t ndx_in_parent) - { - std::unique_ptr
table(new Table(Table::ref_count_tag(), alloc)); // Throws - bool skip_create_column_accessors = true; - table->init(top_ref, parent, ndx_in_parent, skip_create_column_accessors); // Throws - return table.release(); - } - - // Intended to be used only by Group::create_table_accessor() - static void complete_accessor(Table& table) - { - table.refresh_column_accessors(); // Throws - } - - static void set_top_parent(Table& table, ArrayParent* parent, - size_t ndx_in_parent) noexcept - { - table.m_top.set_parent(parent, ndx_in_parent); - } - - static void update_from_parent(Table& table, size_t old_baseline) noexcept - { - table.update_from_parent(old_baseline); - } - - static void detach(Table& table) noexcept - { - table.detach(); - } - - static void discard_row_accessors(Table& table) noexcept - { - table.discard_row_accessors(); - } - - static void discard_child_accessors(Table& table) noexcept - { - table.discard_child_accessors(); - } - - static void discard_subtable_accessor(Table& table, size_t col_ndx, size_t row_ndx) noexcept - { - table.discard_subtable_accessor(col_ndx, row_ndx); - } - - static void bind_ptr(Table& table) noexcept - { - table.bind_ptr(); - } - - static void unbind_ptr(Table& table) noexcept - { - table.unbind_ptr(); - } - - static bool compare_rows(const Table& a, const Table& b) - { - return a.compare_rows(b); // Throws - } - - static size_t get_size_from_ref(ref_type ref, Allocator& alloc) noexcept - { - return Table::get_size_from_ref(ref, alloc); - } - - static size_t get_size_from_ref(ref_type spec_ref, ref_type columns_ref, - Allocator& alloc) noexcept - { - return Table::get_size_from_ref(spec_ref, columns_ref, alloc); - } - - static Spec& get_spec(Table& table) noexcept - { - return table.m_spec; - } - - static const Spec& get_spec(const Table& table) noexcept - { - return table.m_spec; - } - - static ColumnBase& get_column(const Table& table, size_t col_ndx) - { - return *table.m_cols[col_ndx]; - } - - static void do_remove(Table& table, size_t row_ndx) - { - bool broken_reciprocal_backlinks = false; - table.do_remove(row_ndx, broken_reciprocal_backlinks); // Throws - } - - static void do_move_last_over(Table& table, size_t row_ndx) - { - bool broken_reciprocal_backlinks = false; - table.do_move_last_over(row_ndx, broken_reciprocal_backlinks); // Throws - } - - static void do_swap_rows(Table& table, size_t row_ndx_1, size_t row_ndx_2) - { - table.do_swap_rows(row_ndx_1, row_ndx_2); // Throws - } - - static void do_change_link_targets(Table& table, size_t row_ndx, size_t new_row_ndx) - { - table.do_change_link_targets(row_ndx, new_row_ndx); // Throws - } - - static void do_clear(Table& table) - { - bool broken_reciprocal_backlinks = false; - table.do_clear(broken_reciprocal_backlinks); // Throws - } - - static void do_set_link(Table& table, size_t col_ndx, size_t row_ndx, - size_t target_row_ndx) - { - table.do_set_link(col_ndx, row_ndx, target_row_ndx); // Throws - } - - static size_t get_num_strong_backlinks(const Table& table, - size_t row_ndx) noexcept - { - return table.get_num_strong_backlinks(row_ndx); - } - - static void cascade_break_backlinks_to(Table& table, size_t row_ndx, - CascadeState& state) - { - table.cascade_break_backlinks_to(row_ndx, state); // Throws - } - - static void remove_backlink_broken_rows(Table& table, const CascadeState& rows) - { - table.remove_backlink_broken_rows(rows); // Throws - } - - static size_t* record_subtable_path(const Table& table, size_t* begin, - size_t* end) noexcept - { - return table.record_subtable_path(begin, end); - } - - static void insert_column(Descriptor& desc, size_t column_ndx, DataType type, - StringData name, LinkTargetInfo& link, bool nullable = false) - { - Table::do_insert_column(desc, column_ndx, type, name, link, nullable); // Throws - } - - static void insert_column_unless_exists(Descriptor& desc, size_t column_ndx, DataType type, - StringData name, LinkTargetInfo link, bool nullable = false, - bool* was_inserted = nullptr) - { - Table::do_insert_column_unless_exists(desc, column_ndx, type, name, link, nullable, was_inserted); // Throws - } - - static void erase_column(Descriptor& desc, size_t column_ndx) - { - Table::do_erase_column(desc, column_ndx); // Throws - } - - static void rename_column(Descriptor& desc, size_t column_ndx, StringData name) - { - Table::do_rename_column(desc, column_ndx, name); // Throws - } - - static void move_column(Descriptor& desc, size_t col_ndx_1, size_t col_ndx_2) - { - Table::do_move_column(desc, col_ndx_1, col_ndx_2); // Throws - } - - static void set_link_type(Table& table, size_t column_ndx, LinkType link_type) - { - table.do_set_link_type(column_ndx, link_type); // Throws - } - - static void erase_row(Table& table, size_t row_ndx, bool is_move_last_over) - { - table.erase_row(row_ndx, is_move_last_over); // Throws - } - - static void batch_erase_rows(Table& table, const IntegerColumn& row_indexes, - bool is_move_last_over) - { - table.batch_erase_rows(row_indexes, is_move_last_over); // Throws - } - - static void clear_root_table_desc(const Table& root_table) noexcept - { - REALM_ASSERT(!root_table.has_shared_type()); - root_table.m_descriptor = nullptr; - } - - static Table* get_subtable_accessor(Table& table, size_t col_ndx, - size_t row_ndx) noexcept - { - return table.get_subtable_accessor(col_ndx, row_ndx); - } - - static const Table* get_link_target_table_accessor(const Table& table, - size_t col_ndx) noexcept - { - return const_cast(table).get_link_target_table_accessor(col_ndx); - } - - static Table* get_link_target_table_accessor(Table& table, size_t col_ndx) noexcept - { - return table.get_link_target_table_accessor(col_ndx); - } - - static void adj_acc_insert_rows(Table& table, size_t row_ndx, - size_t num_rows) noexcept - { - table.adj_acc_insert_rows(row_ndx, num_rows); - } - - static void adj_acc_erase_row(Table& table, size_t row_ndx) noexcept - { - table.adj_acc_erase_row(row_ndx); - } - - static void adj_acc_swap_rows(Table& table, size_t row_ndx_1, size_t row_ndx_2) noexcept - { - table.adj_acc_swap_rows(row_ndx_1, row_ndx_2); - } - - static void adj_acc_move_over(Table& table, size_t from_row_ndx, - size_t to_row_ndx) noexcept - { - table.adj_acc_move_over(from_row_ndx, to_row_ndx); - } - - static void adj_acc_clear_root_table(Table& table) noexcept - { - table.adj_acc_clear_root_table(); - } - - static void adj_acc_clear_nonroot_table(Table& table) noexcept - { - table.adj_acc_clear_nonroot_table(); - } - - static void adj_insert_column(Table& table, size_t col_ndx) - { - table.adj_insert_column(col_ndx); // Throws - } - - static void adj_add_column(Table& table) - { - size_t num_cols = table.m_cols.size(); - table.adj_insert_column(num_cols); // Throws - } - - static void adj_erase_column(Table& table, size_t col_ndx) noexcept - { - table.adj_erase_column(col_ndx); - } - - static void adj_move_column(Table& table, size_t col_ndx_1, size_t col_ndx_2) noexcept - { - table.adj_move_column(col_ndx_1, col_ndx_2); - } - - static bool is_marked(const Table& table) noexcept - { - return table.is_marked(); - } - - static void mark(Table& table) noexcept - { - table.mark(); - } - - static void unmark(Table& table) noexcept - { - table.unmark(); - } - - static void recursive_mark(Table& table) noexcept - { - table.recursive_mark(); - } - - static void mark_link_target_tables(Table& table, size_t col_ndx_begin) noexcept - { - table.mark_link_target_tables(col_ndx_begin); - } - - static void mark_opposite_link_tables(Table& table) noexcept - { - table.mark_opposite_link_tables(); - } - - static Descriptor* get_root_table_desc_accessor(Table& root_table) noexcept - { - return root_table.m_descriptor; - } - - typedef Table::AccessorUpdater AccessorUpdater; - static void update_accessors(Table& table, const size_t* col_path_begin, - const size_t* col_path_end, AccessorUpdater& updater) - { - table.update_accessors(col_path_begin, col_path_end, updater); // Throws - } - - static void refresh_accessor_tree(Table& table) - { - table.refresh_accessor_tree(); // Throws - } - - static void set_ndx_in_parent(Table& table, size_t ndx_in_parent) noexcept - { - table.set_ndx_in_parent(ndx_in_parent); - } - - static void set_shared_subspec_ndx_in_parent(Table& table, size_t spec_ndx_in_parent) noexcept - { - table.m_spec.set_ndx_in_parent(spec_ndx_in_parent); - } - - static bool is_link_type(ColumnType type) noexcept - { - return Table::is_link_type(type); - } - - static void bump_version(Table& table, bool bump_global = true) noexcept - { - table.bump_version(bump_global); - } - - static bool is_cross_table_link_target(const Table& table) - { - return table.is_cross_table_link_target(); - } - - static Group* get_parent_group(const Table& table) noexcept - { - return table.get_parent_group(); - } - - static Replication* get_repl(Table& table) noexcept - { - return table.get_repl(); - } - - static void register_view(Table& table, const TableViewBase* view) - { - table.register_view(view); // Throws - } - - static void unregister_view(Table& table, const TableViewBase* view) noexcept - { - table.unregister_view(view); - } -}; - - -} // namespace realm - -#endif // REALM_TABLE_HPP diff --git a/Pods/Realm/include/core/realm/table_accessors.hpp b/Pods/Realm/include/core/realm/table_accessors.hpp deleted file mode 100644 index 56f99da2..00000000 --- a/Pods/Realm/include/core/realm/table_accessors.hpp +++ /dev/null @@ -1,1738 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TABLE_ACCESSORS_HPP -#define REALM_TABLE_ACCESSORS_HPP - -#include -#include - -#include -#include - -#include - -namespace realm { - - -/// A convenience base class for Spec classes that are to be used with -/// BasicTable. -/// -/// There are two reasons why you might want to derive your spec class -/// from this one. First, it offers short hand names for each of the -/// available column types. Second, it makes it easier when you do not -/// want to specify colum names or convenience methods, since suitable -/// fallbacks are defined here. -struct SpecBase { - typedef int64_t Int; - typedef bool Bool; - typedef realm::OldDateTime OldDateTime; - typedef float Float; - typedef double Double; - typedef realm::StringData String; - typedef realm::BinaryData Binary; - typedef realm::Mixed Mixed; - - template - class Enum { - public: - typedef E enum_type; - Enum(E v): m_value(v) {} - operator E() const { return m_value; } - private: - E m_value; - }; - - template - class Subtable { - public: - typedef T table_type; - Subtable(T* t): m_table(t) {} - operator T*() const { return m_table; } - private: - T* m_table; - }; - - /// By default, there are no static column names defined for a - /// BasicTable. One may define a set of column mames as follows: - /// - /// \code{.cpp} - /// - /// struct MyTableSpec: SpecBase { - /// typedef TypeAppend::type Columns1; - /// typedef TypeAppend::type Columns; - /// - /// template class Col, class Init> - /// struct ColNames { - /// typename Col<0>::type foo; - /// typename Col<1>::type bar; - /// ColNames(Init i) noexcept: foo(i), bar(i) {} - /// }; - /// }; - /// - /// \endcode - /// - /// Note that 'i' in Col links the name that you specify to a - /// particular column index. You may specify the column names in - /// any order. Multiple names may refer to the same column, and - /// you do not have to specify a name for every column. - template class Col, class Init> - struct ColNames { - ColNames(Init) noexcept {} - }; - - /// FIXME: Currently we do not support absence of dynamic column - /// names. - static void dyn_col_names(StringData*) noexcept {} - - /// This is the fallback class that is used when no convenience - /// methods are specified in the users Spec class. - /// - /// If you would like to add a more convenient add() method, here - /// is how you could do it: - /// - /// \code{.cpp} - /// - /// struct MyTableSpec: SpecBase { - /// typedef realm::TypeAppend::type Columns1; - /// typedef realm::TypeAppend::type Columns; - /// - /// struct ConvenienceMethods { - /// void add(int foo, bool bar) - /// { - /// BasicTable* const t = static_cast*>(this); - /// t->add((tuple(), name1, name2)); - /// } - /// }; - /// }; - /// - /// \endcode - /// - /// FIXME: ConvenienceMethods may not contain any virtual methods, - /// nor may it contain any data memebers. We might want to check - /// this by static_assert(sizeof(Derivative of - /// ConvenienceMethods) == 1)), however, this would not be - /// guaranteed by the standard, since even an empty class may add - /// to the size of the derived class. Fortunately, as long as - /// ConvenienceMethods is derived from, by BasicTable, after - /// deriving from Table, this cannot become a problem, nor would - /// it lead to a violation of the strict aliasing rule of C++03 or - /// C++11. - struct ConvenienceMethods {}; -}; - - -template -class BasicTable; -template -class BasicTableView; - - -namespace _impl { - - -/// Get the const qualified type of the table being accessed. -/// -/// If T matches 'BasicTableView' or 'const BasicTableView', -/// then return T2, else simply return T. -template -struct GetTableFromView { typedef Tab type; }; -template -struct GetTableFromView> { typedef Tab type; }; -template -struct GetTableFromView> { typedef Tab type; }; - - -/// Determine whether an accessor has const-only access to a table, so -/// that it is not allowed to modify fields, nor return non-const -/// subtable references. -/// -/// Note that for Taboid = 'BasicTableView', a column -/// accessor is still allowed to reorder the rows of the view, as long -/// as it does not modify the contents of the table. -template -struct TableIsConst { static const bool value = false; }; -template -struct TableIsConst { static const bool value = true; }; -template -struct TableIsConst> { - static const bool value = true; -}; - - - -/// This class gives access to a field of a row of a table, or a table -/// view. -/// -/// \tparam Taboid Either a table or a table view, that is, any of -/// 'BasicTable', 'const BasicTable', -/// 'BasicTableView>', 'const -/// BasicTableView>', 'BasicTableView>', or 'const BasicTableView -/// >'. Note that the term 'taboid' is used here for something that is -/// table-like, i.e., either a table of a table view. -/// -/// \tparam const_tab Indicates whether the accessor has const-only -/// access to the field, that is, if, and only if Taboid matches -/// 'const T' or 'BasicTableView' for any T. -template -class FieldAccessor; - - -/// Commmon base class for all field accessor specializations. -template -class FieldAccessorBase { -protected: - typedef std::pair Init; - Taboid* const m_table; - const size_t m_row_idx; - FieldAccessorBase(Init i) noexcept: m_table(i.first), m_row_idx(i.second) {} -}; - - -/// Field accessor specialization for integers. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - int64_t get() const noexcept - { - return Base::m_table->get_impl()->get_int(col_idx, Base::m_row_idx); - } - - void set(int64_t value) const - { - Base::m_table->get_impl()->set_int(col_idx, Base::m_row_idx, value); - } - operator int64_t() const noexcept { return get(); } - const FieldAccessor& operator=(int64_t value) const { set(value); return *this; } - - const FieldAccessor& operator+=(int64_t value) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - set(get() + value); - return *this; - } - - const FieldAccessor& operator-=(int64_t value) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - set(get() - value); - return *this; - } - - const FieldAccessor& operator++() const { return *this += 1; } - const FieldAccessor& operator--() const { return *this -= 1; } - - int64_t operator++(int) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - const int64_t value = get(); - set(value + 1); - return value; - } - - int64_t operator--(int) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - const int64_t value = get(); - set(value - 1); - return value; - } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for floats. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - float get() const noexcept - { - return Base::m_table->get_impl()->get_float(col_idx, Base::m_row_idx); - } - - void set(float value) const - { - Base::m_table->get_impl()->set_float(col_idx, Base::m_row_idx, value); - } - - operator float() const noexcept { return get(); } - const FieldAccessor& operator=(float value) const { set(value); return *this; } - - const FieldAccessor& operator+=(float value) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - set(get() + value); - return *this; - } - - const FieldAccessor& operator-=(float value) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - set(get() - value); - return *this; - } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for doubles. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - double get() const noexcept - { - return Base::m_table->get_impl()->get_double(col_idx, Base::m_row_idx); - } - - void set(double value) const - { - Base::m_table->get_impl()->set_double(col_idx, Base::m_row_idx, value); - } - - operator double() const noexcept { return get(); } - const FieldAccessor& operator=(double value) const { set(value); return *this; } - - const FieldAccessor& operator+=(double value) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - set(get() + value); - return *this; - } - - const FieldAccessor& operator-=(double value) const - { - // FIXME: Should be optimized (can be both optimized and - // generalized by using a form of expression templates). - set(get() - value); - return *this; - } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for booleans. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - bool get() const noexcept - { - return Base::m_table->get_impl()->get_bool(col_idx, Base::m_row_idx); - } - - void set(bool value) const - { - Base::m_table->get_impl()->set_bool(col_idx, Base::m_row_idx, value); - } - - operator bool() const noexcept { return get(); } - const FieldAccessor& operator=(bool value) const { set(value); return *this; } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for enumerations. -template -class FieldAccessor, const_tab>: - public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - E get() const noexcept - { - return static_cast(Base::m_table->get_impl()->get_int(col_idx, Base::m_row_idx)); - } - - void set(E value) const - { - Base::m_table->get_impl()->set_int(col_idx, Base::m_row_idx, value); - } - - operator E() const noexcept { return get(); } - const FieldAccessor& operator=(E value) const { set(value); return *this; } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for dates. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - OldDateTime get() const noexcept - { - return Base::m_table->get_impl()->get_olddatetime(col_idx, Base::m_row_idx); - } - - void set(OldDateTime value) const - { - Base::m_table->get_impl()->set_olddatetime(col_idx, Base::m_row_idx, value); - } - - operator OldDateTime() const noexcept { return get(); } - const FieldAccessor& operator=(OldDateTime value) const { set(value); return *this; } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - -/// Field accessor specialization for timestamps. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - Timestamp get() const noexcept - { - return Base::m_table->get_impl()->get_timestamp(col_idx, Base::m_row_idx); - } - - void set(Timestamp value) const - { - Base::m_table->get_impl()->set_timestamp(col_idx, Base::m_row_idx, value); - } - - operator Timestamp() const noexcept { return get(); } - const FieldAccessor& operator=(Timestamp value) const { set(value); return *this; } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - -/// Field accessor specialization for strings. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - StringData get() const noexcept - { - return Base::m_table->get_impl()->get_string(col_idx, Base::m_row_idx); - } - - void set(StringData value) const - { - Base::m_table->get_impl()->set_string(col_idx, Base::m_row_idx, value); - } - - operator StringData() const noexcept { return get(); } - const FieldAccessor& operator=(StringData value) const { set(value); return *this; } - - const char* data() const noexcept { return get().data(); } - size_t size() const noexcept { return get().size(); } - - const char* c_str() const noexcept { return data(); } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for binary data. -template -class FieldAccessor: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - BinaryData get() const noexcept - { - return Base::m_table->get_impl()->get_binary(col_idx, Base::m_row_idx); - } - - void set(const BinaryData& value) const - { - Base::m_table->get_impl()->set_binary(col_idx, Base::m_row_idx, value); - } - - operator BinaryData() const noexcept { return get(); } - const FieldAccessor& operator=(const BinaryData& value) const { set(value); return *this; } - - const char* data() const noexcept { return get().data(); } - size_t size() const noexcept { return get().size(); } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for subtables of non-const parent. -template -class FieldAccessor, false>: - public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - // FIXME: Dangerous slicing posibility as long as Cursor is same as RowAccessor. - // FIXME: Accessors must not be publicly copyable. This requires that Spec::ColNames is made a friend of BasicTable. - // FIXME: Need BasicTableView::Cursor and BasicTableView::ConstCursor if Cursors should exist at all. - struct SubtabRowAccessor: Subtab::RowAccessor { - public: - SubtabRowAccessor(Subtab* subtab, size_t row_idx): - Subtab::RowAccessor(std::make_pair(subtab, row_idx)), - m_owner(subtab->get_table_ref()) {} - - private: - typename Subtab::Ref const m_owner; - }; - -public: - operator typename Subtab::Ref() const - { - Subtab* subtab = - Base::m_table->template get_subtable_ptr(col_idx, Base::m_row_idx); - return subtab->get_table_ref(); - } - - operator typename Subtab::ConstRef() const - { - const Subtab* subtab = - Base::m_table->template get_subtable_ptr(col_idx, Base::m_row_idx); - return subtab->get_table_ref(); - } - - typename Subtab::Ref operator->() const - { - Subtab* subtab = - Base::m_table->template get_subtable_ptr(col_idx, Base::m_row_idx); - return subtab->get_table_ref(); - } - - SubtabRowAccessor operator[](size_t row_idx) const - { - Subtab* subtab = - Base::m_table->template get_subtable_ptr(col_idx, Base::m_row_idx); - return SubtabRowAccessor(subtab, row_idx); - } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for subtables of const parent. -template -class FieldAccessor, true>: - public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - // FIXME: Dangerous slicing posibility as long as Cursor is same as RowAccessor. - struct SubtabRowAccessor: Subtab::ConstRowAccessor { - public: - SubtabRowAccessor(const Subtab* subtab, size_t row_idx): - Subtab::ConstRowAccessor(std::make_pair(subtab, row_idx)), - m_owner(subtab->get_table_ref()) {} - - private: - typename Subtab::ConstRef const m_owner; - }; - -public: - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} - - operator typename Subtab::ConstRef() const - { - const Subtab* subtab = - Base::m_table->template get_subtable_ptr(col_idx, Base::m_row_idx); - return subtab->get_table_ref(); - } - - typename Subtab::ConstRef operator->() const - { - const Subtab* subtab = - Base::m_table->template get_subtable_ptr(col_idx, Base::m_row_idx); - return subtab->get_table_ref(); - } - - SubtabRowAccessor operator[](size_t row_idx) const - { - const Subtab* subtab = - Base::m_table->template get_subtable_ptr(col_idx, Base::m_row_idx); - return SubtabRowAccessor(subtab, row_idx); - } -}; - - -/// Base for field accessor specializations for mixed type. -template -class MixedFieldAccessorBase: public FieldAccessorBase { -private: - typedef FieldAccessorBase Base; - -public: - Mixed get() const noexcept - { - return Base::m_table->get_impl()->get_mixed(col_idx, Base::m_row_idx); - } - - void set(const Mixed& value) const - { - Base::m_table->get_impl()->set_mixed(col_idx, Base::m_row_idx, value); - } - - operator Mixed() const noexcept { return get(); } - - const FieldAccessor& operator=(const Mixed& value) const - { - set(value); - return static_cast(*this); - } - - DataType get_type() const noexcept - { - return Base::m_table->get_impl()->get_mixed_type(col_idx, Base::m_row_idx); - } - - int64_t get_int() const noexcept { return get().get_int(); } - - bool get_bool() const noexcept { return get().get_bool(); } - - OldDateTime get_olddatetime() const noexcept { return get().get_olddatetime(); } - - float get_float() const noexcept { return get().get_float(); } - - double get_double() const noexcept { return get().get_double(); } - - StringData get_string() const noexcept { return get().get_string(); } - - BinaryData get_binary() const noexcept { return get().get_binary(); } - - bool is_subtable() const noexcept { return get_type() == type_Table; } - - /// Checks whether this value is a subtable of the specified type. - /// - /// FIXME: Consider deleting this function. It is mostly - /// redundant, and it is inefficient if you want to also get a - /// reference to the table, or if you want to check for multiple - /// table types. - template - bool is_subtable() const - { - // FIXME: Conversion from TableRef to ConstTableRef is relatively expensive, or is it? Check whether it involves access to the reference count! - ConstTableRef t = static_cast(this)->get_subtable(); - return t && T::matches_dynamic_type(TableFriend::get_spec(*t)); - } - - /// Generally more efficient that get_subtable()->size(). - size_t get_subtable_size() const noexcept - { - return Base::m_table->get_impl()->get_subtable_size(col_idx, Base::m_row_idx); - } - - template - friend bool operator==(const FieldAccessor& a, const T& b) noexcept - { - return a.get() == b; - } - - template - friend bool operator!=(const FieldAccessor& a, const T& b) noexcept - { - return a.get() != b; - } - - template - friend bool operator==(const T& a, const FieldAccessor& b) noexcept - { - return a == b.get(); - } - - template - friend bool operator!=(const T& a, const FieldAccessor& b) noexcept - { - return a != b.get(); - } - -protected: - MixedFieldAccessorBase(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for mixed type of non-const parent. -template -class FieldAccessor: - public MixedFieldAccessorBase> { -private: - typedef FieldAccessor This; - typedef MixedFieldAccessorBase Base; - -public: - /// Returns null if the current value is not a subtable. - TableRef get_subtable() const - { - return Base::m_table->get_impl()->get_subtable(col_idx, Base::m_row_idx); - } - - /// Overwrites the current value with an empty subtable and - /// returns a reference to it. - TableRef set_subtable() const - { - Base::m_table->get_impl()->clear_subtable(col_idx, Base::m_row_idx); - return get_subtable(); - } - - /// Overwrites the current value with a copy of the specified - /// table and returns a reference to the copy. - TableRef set_subtable(const Table& t) const - { - t.set_into_mixed(Base::m_table->get_impl(), col_idx, Base::m_row_idx); - return get_subtable(); - } - - /// This function makes the following assumption: If the current - /// value is a subtable, then it is a subtable of the specified - /// type. If this is not the case, your computer may catch fire. - /// - /// To safely and efficiently check whether the current value is a - /// subtable of any of a set of specific table types, you may do - /// as follows: - /// - /// \code{.cpp} - /// - /// if (TableRef subtable = my_table[i].mixed.get_subtable()) { - /// if (subtable->is_a()) { - /// MyFirstSubtable::Ref s = unchecked_cast(move(subtable))) { - /// // ... - /// } - /// else if (subtable->is_a()) { - /// MySecondSubtable::Ref s = unchecked_cast(move(subtable))) { - /// // ... - /// } - /// } - /// - /// \endcode - /// - /// \return Null if the current value is not a subtable. - /// - /// \note This function is generally unsafe because it does not - /// check that the specified table type matches the actual table - /// type. - /// - /// FIXME: Consider deleting this function, since it is both - /// unsafe and superfluous. - template - BasicTableRef get_subtable() const - { - REALM_ASSERT(!Base::is_subtable() || Base::template is_subtable()); - return unchecked_cast(get_subtable()); - } - - /// Overwrites the current value with an empty subtable and - /// returns a reference to it. - /// - /// \tparam T The subtable type. It must not be const-qualified. - template - BasicTableRef set_subtable() const - { - BasicTableRef t = unchecked_cast(set_subtable()); - T::set_dynamic_type(*t); - return t; - } - - /// Overwrites the current value with a copy of the specified - /// table and returns a reference to the copy. - template - typename T::Ref set_subtable(const T& t) const - { - t.set_into_mixed(Base::m_table->get_impl(), col_idx, Base::m_row_idx); - return unchecked_cast(get_subtable()); - } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - -/// Field accessor specialization for mixed type of const parent. -template -class FieldAccessor: - public MixedFieldAccessorBase> { -private: - typedef FieldAccessor This; - typedef MixedFieldAccessorBase Base; - -public: - ConstTableRef get_subtable() const - { - return Base::m_table->get_impl()->get_subtable(col_idx, Base::m_row_idx); - } - - /// FIXME: Consider deleting this function, since it is both - /// unsafe and superfluous. - template - BasicTableRef get_subtable() const - { - REALM_ASSERT(!Base::is_subtable() || Base::template is_subtable()); - return unchecked_cast(get_subtable()); - } - - - explicit FieldAccessor(typename Base::Init i) noexcept: Base(i) {} -}; - - - - -/// This class gives access to a column of a table. -/// -/// \tparam Taboid Either a table or a table view. Constness of access -/// is controlled by what is allowed to be done with/on a 'Taboid*'. -template -class ColumnAccessor; - - -/// Commmon base class for all column accessor specializations. -template -class ColumnAccessorBase { -protected: - typedef typename GetTableFromView::type RealTable; - typedef FieldAccessor::value> Field; - -public: - Field operator[](size_t row_idx) const - { - return Field(std::make_pair(m_table, row_idx)); - } - - bool has_search_index() const { return m_table->get_impl()->has_search_index(col_idx); } - void add_search_index() const { m_table->get_impl()->add_search_index(col_idx); } - void remove_search_index() const { m_table->get_impl()->remove_search_index(col_idx); } - - BasicTableView get_sorted_view(bool ascending=true) const - { - return m_table->get_impl()->get_sorted_view(col_idx, ascending); - } - - void sort(bool ascending = true) const { m_table->get_impl()->sort(col_idx, ascending); } - -protected: - Taboid* const m_table; - - explicit ColumnAccessorBase(Taboid* t) noexcept: m_table(t) {} -}; - -namespace { - -// Used as base class of ColumnAccessor when Columns is not appropriate -// (e.g., accessor of a TableView, which is not yet supported). -struct NotARealColumns { - NotARealColumns(size_t, void*) { } -}; - -// Select whether to use Columns or NotARealColumns for the given Taboid. -template -struct ColumnsForTaboid { - using type = typename std::conditional::value, Columns, NotARealColumns>::type; -}; - -} // anonymous namespace - -/// Column accessor specialization for integers. -template -class ColumnAccessor: - public ColumnAccessorBase, public ColumnsForTaboid::type { -private: - using Base = ColumnAccessorBase; - using ColumnsBase = typename ColumnsForTaboid::type; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t), ColumnsBase(col_idx, t->get_impl()) - { - } - - size_t find_first(int64_t value) const - { - return Base::m_table->get_impl()->find_first_int(col_idx, value); - } - - BasicTableView find_all(int64_t value) const - { - return Base::m_table->get_impl()->find_all_int(col_idx, value); - } - - BasicTableView get_distinct_view() const - { - return Base::m_table->get_impl()->get_distinct_view(col_idx); - } - - size_t count(int64_t target) const - { - return Base::m_table->get_impl()->count_int(col_idx, target); - } - - int64_t sum() const - { - return Base::m_table->get_impl()->sum_int(col_idx); - } - - int64_t maximum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->maximum_int(col_idx, return_ndx); - } - - int64_t minimum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->minimum_int(col_idx, return_ndx); - } - - double average() const - { - return Base::m_table->get_impl()->average_int(col_idx); - } - - size_t lower_bound(int64_t value) const noexcept - { - return Base::m_table->lower_bound_int(col_idx, value); - } - - size_t upper_bound(int64_t value) const noexcept - { - return Base::m_table->upper_bound_int(col_idx, value); - } -}; - - -/// Column accessor specialization for float -template -class ColumnAccessor: - public ColumnAccessorBase, public ColumnsForTaboid::type { -private: - using Base = ColumnAccessorBase; - using ColumnsBase = typename ColumnsForTaboid::type; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t), ColumnsBase(col_idx, t->get_impl()) - { - } - - size_t find_first(float value) const - { - return Base::m_table->get_impl()->find_first_float(col_idx, value); - } - - BasicTableView find_all(float value) const - { - return Base::m_table->get_impl()->find_all_float(col_idx, value); - } - - BasicTableView get_distinct_view() const - { - return Base::m_table->get_impl()->get_distinct_view(col_idx); - } - - size_t count(float target) const - { - return Base::m_table->get_impl()->count_float(col_idx, target); - } - - double sum() const - { - return Base::m_table->get_impl()->sum_float(col_idx); - } - - float maximum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->maximum_float(col_idx, return_ndx); - } - - float minimum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->minimum_float(col_idx, return_ndx); - } - - double average() const - { - return Base::m_table->get_impl()->average_float(col_idx); - } - - const ColumnAccessor& operator+=(float value) const - { - Base::m_table->get_impl()->add_float(col_idx, value); - return *this; - } - - size_t lower_bound(float value) const noexcept - { - return Base::m_table->lower_bound_float(col_idx, value); - } - - size_t upper_bound(float value) const noexcept - { - return Base::m_table->upper_bound_float(col_idx, value); - } -}; - - -/// Column accessor specialization for double -template -class ColumnAccessor: - public ColumnAccessorBase, public ColumnsForTaboid::type { -private: - using Base = ColumnAccessorBase; - using ColumnsBase = typename ColumnsForTaboid::type; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t), ColumnsBase(col_idx, t->get_impl()) - { - } - - size_t find_first(double value) const - { - return Base::m_table->get_impl()->find_first_double(col_idx, value); - } - - BasicTableView find_all(double value) const - { - return Base::m_table->get_impl()->find_all_double(col_idx, value); - } - - BasicTableView get_distinct_view() const - { - return Base::m_table->get_impl()->get_distinct_view(col_idx); - } - - size_t count(double target) const - { - return Base::m_table->get_impl()->count_double(col_idx, target); - } - - double sum() const - { - return Base::m_table->get_impl()->sum_double(col_idx); - } - - double maximum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->maximum_double(col_idx, return_ndx); - } - - double minimum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->minimum_double(col_idx, return_ndx); - } - - double average() const - { - return Base::m_table->get_impl()->average_double(col_idx); - } - - const ColumnAccessor& operator+=(double value) const - { - Base::m_table->get_impl()->add_double(col_idx, value); - return *this; - } - - size_t lower_bound(float value) const noexcept - { - return Base::m_table->lower_bound_double(col_idx, value); - } - - size_t upper_bound(float value) const noexcept - { - return Base::m_table->upper_bound_double(col_idx, value); - } -}; - - -/// Column accessor specialization for booleans. -template -class ColumnAccessor: public ColumnAccessorBase { -private: - typedef ColumnAccessorBase Base; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t) {} - - size_t find_first(bool value) const - { - return Base::m_table->get_impl()->find_first_bool(col_idx, value); - } - - BasicTableView find_all(bool value) const - { - return Base::m_table->get_impl()->find_all_bool(col_idx, value); - } - - size_t lower_bound(bool value) const noexcept - { - return Base::m_table->lower_bound_bool(col_idx, value); - } - - size_t upper_bound(bool value) const noexcept - { - return Base::m_table->upper_bound_bool(col_idx, value); - } - - BasicTableView get_distinct_view() const - { - return Base::m_table->get_impl()->get_distinct_view(col_idx); - } -}; - - -/// Column accessor specialization for enumerations. -template -class ColumnAccessor>: - public ColumnAccessorBase> { -private: - typedef ColumnAccessorBase> Base; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t) {} - - size_t find_first(E value) const - { - return Base::m_table->get_impl()->find_first_int(col_idx, int64_t(value)); - } - - BasicTableView find_all(E value) const - { - return Base::m_table->get_impl()->find_all_int(col_idx, int64_t(value)); - } - - BasicTableView get_distinct_view() const - { - return Base::m_table->get_impl()->get_distinct_view(col_idx); - } -}; - - -/// Column accessor specialization for dates. -template -class ColumnAccessor: public ColumnAccessorBase { -private: - typedef ColumnAccessorBase Base; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t) {} - - OldDateTime maximum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->maximum_olddatetime(col_idx, return_ndx); - } - - OldDateTime minimum(size_t* return_ndx = nullptr) const - { - return Base::m_table->get_impl()->minimum_olddatetime(col_idx, return_ndx); - } - - size_t find_first(OldDateTime value) const - { - return Base::m_table->get_impl()->find_first_olddatetime(col_idx, value); - } - - BasicTableView find_all(OldDateTime value) const - { - return Base::m_table->get_impl()->find_all_olddatetime(col_idx, value); - } - - BasicTableView get_distinct_view() const - { - return Base::m_table->get_impl()->get_distinct_view(col_idx); - } -}; - - -/// Column accessor specialization for strings. -template -class ColumnAccessor: - public ColumnAccessorBase, public ColumnsForTaboid::type { -private: - using Base = ColumnAccessorBase; - using ColumnsBase = typename ColumnsForTaboid::type; -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t), ColumnsBase(col_idx, t->get_impl()) - { - } - - size_t count(StringData value) const - { - return Base::m_table->get_impl()->count_string(col_idx, value); - } - - size_t find_first(StringData value) const - { - return Base::m_table->get_impl()->find_first_string(col_idx, value); - } - - BasicTableView find_all(StringData value) const - { - return Base::m_table->get_impl()->find_all_string(col_idx, value); - } - - BasicTableView get_distinct_view() const - { - return Base::m_table->get_impl()->get_distinct_view(col_idx); - } - - size_t lower_bound(StringData value) const noexcept - { - return Base::m_table->lower_bound_string(col_idx, value); - } - - size_t upper_bound(StringData value) const noexcept - { - return Base::m_table->upper_bound_string(col_idx, value); - } -}; - - -/// Column accessor specialization for binary data. -template -class ColumnAccessor: - public ColumnAccessorBase { -private: - typedef ColumnAccessorBase Base; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t) {} - - size_t find_first(const BinaryData &value) const - { - return Base::m_table->get_impl()->find_first_binary(col_idx, value.data(), value.size()); - } - - BasicTableView find_all(const BinaryData &value) const - { - return Base::m_table->get_impl()->find_all_binary(col_idx, value.data(), value.size()); - } -}; - - -/// Column accessor specialization for subtables. -template -class ColumnAccessor>: - public ColumnAccessorBase> { -private: - typedef ColumnAccessorBase> Base; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t) {} -}; - - -/// Column accessor specialization for mixed type. -template -class ColumnAccessor: public ColumnAccessorBase { -private: - typedef ColumnAccessorBase Base; - -public: - explicit ColumnAccessor(Taboid* t) noexcept: Base(t) {} -}; - - - -/// *********************************************************************************************** -/// This class implements a column of a table as used in a table query. -/// -/// \tparam Taboid Matches either 'BasicTable' or -/// 'BasicTableView'. Neither may be const-qualified. -/// -/// FIXME: These do not belong in this file! -template -class QueryColumn; - - -/// Commmon base class for all query column specializations. -template -class QueryColumnBase { -protected: - typedef typename Taboid::Query Query; - Query* const m_query; - explicit QueryColumnBase(Query* q) noexcept: m_query(q) {} - - Query& equal(const Type& value) const - { - m_query->m_impl.equal(col_idx, value); - return *m_query; - } - - Query& not_equal(const Type& value) const - { - m_query->m_impl.not_equal(col_idx, value); - return *m_query; - } -}; - - -/// QueryColumn specialization for integers. -template -class QueryColumn: public QueryColumnBase { -private: - typedef QueryColumnBase Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - - // Todo, these do not turn up in Visual Studio 2013 intellisense - using Base::equal; - using Base::not_equal; - - Query& greater(int64_t value) const - { - Base::m_query->m_impl.greater(col_idx, value); - return *Base::m_query; - } - - Query& greater_equal(int64_t value) const - { - Base::m_query->m_impl.greater_equal(col_idx, value); - return *Base::m_query; - } - - Query& less(int64_t value) const - { - Base::m_query->m_impl.less(col_idx, value); - return *Base::m_query; - } - - Query& less_equal(int64_t value) const - { - Base::m_query->m_impl.less_equal(col_idx, value); - return *Base::m_query; - } - - Query& between(int64_t from, int64_t to) const - { - Base::m_query->m_impl.between(col_idx, from, to); - return *Base::m_query; - }; - - int64_t sum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1)) const - { - return Base::m_query->m_impl.sum_int(col_idx, resultcount, start, end, limit); - } - - int64_t maximum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.maximum_int(col_idx, resultcount, start, end, limit, return_ndx); - } - - int64_t minimum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.minimum_int(col_idx, resultcount, start, end, limit, return_ndx); - } - - double average(size_t* resultcount = nullptr, size_t start = 0, - size_t end=size_t(-1), size_t limit=size_t(-1)) const - { - return Base::m_query->m_impl.average_int(col_idx, resultcount, start, end, limit); - } -}; - - - -/// QueryColumn specialization for floats. -template -class QueryColumn: public QueryColumnBase { -private: - typedef QueryColumnBase Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - using Base::equal; - using Base::not_equal; - - Query& greater(float value) const - { - Base::m_query->m_impl.greater(col_idx, value); - return *Base::m_query; - } - - Query& greater_equal(float value) const - { - Base::m_query->m_impl.greater_equal(col_idx, value); - return *Base::m_query; - } - - Query& less(float value) const - { - Base::m_query->m_impl.less(col_idx, value); - return *Base::m_query; - } - - Query& less_equal(float value) const - { - Base::m_query->m_impl.less_equal(col_idx, value); - return *Base::m_query; - } - - Query& between(float from, float to) const - { - Base::m_query->m_impl.between(col_idx, from, to); - return *Base::m_query; - }; - - double sum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1)) const - { - return Base::m_query->m_impl.sum_float(col_idx, resultcount, start, end, limit); - } - - float maximum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.maximum_float(col_idx, resultcount, start, end, limit, return_ndx); - } - - float minimum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.minimum_float(col_idx, resultcount, start, end, limit, return_ndx); - } - - double average(size_t* resultcount = nullptr, size_t start = 0, - size_t end=size_t(-1), size_t limit=size_t(-1)) const - { - return Base::m_query->m_impl.average_float(col_idx, resultcount, start, end, limit); - } -}; - - - -/// QueryColumn specialization for doubles. -template -class QueryColumn: public QueryColumnBase { -private: - typedef QueryColumnBase Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - using Base::equal; - using Base::not_equal; - - Query& greater(double value) const - { - Base::m_query->m_impl.greater(col_idx, value); - return *Base::m_query; - } - - Query& greater_equal(double value) const - { - Base::m_query->m_impl.greater_equal(col_idx, value); - return *Base::m_query; - } - - Query& less(double value) const - { - Base::m_query->m_impl.less(col_idx, value); - return *Base::m_query; - } - - Query& less_equal(double value) const - { - Base::m_query->m_impl.less_equal(col_idx, value); - return *Base::m_query; - } - - Query& between(double from, double to) const - { - Base::m_query->m_impl.between(col_idx, from, to); - return *Base::m_query; - }; - - double sum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1)) const - { - return Base::m_query->m_impl.sum_double(col_idx, resultcount, start, end, limit); - } - - double maximum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.maximum_double(col_idx, resultcount, start, end, limit, return_ndx); - } - - double minimum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.minimum_double(col_idx, resultcount, start, end, limit, return_ndx); - } - - double average(size_t* resultcount = nullptr, size_t start = 0, - size_t end=size_t(-1), size_t limit=size_t(-1)) const - { - return Base::m_query->m_impl.average_double(col_idx, resultcount, start, end, limit); - } -}; - - - -/// QueryColumn specialization for booleans. -template -class QueryColumn: public QueryColumnBase { -private: - typedef QueryColumnBase Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - using Base::equal; - using Base::not_equal; -}; - - -/// QueryColumn specialization for enumerations. -template -class QueryColumn>: - public QueryColumnBase> { -private: - typedef QueryColumnBase> Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - using Base::equal; - using Base::not_equal; -}; - - -/// QueryColumn specialization for dates. -template -class QueryColumn: public QueryColumnBase { -private: - typedef QueryColumnBase Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - - Query& equal(OldDateTime value) const - { - Base::m_query->m_impl.equal_olddatetime(col_idx, value); - return *Base::m_query; - } - - Query& not_equal(OldDateTime value) const - { - Base::m_query->m_impl.not_equal_olddatetime(col_idx, value); - return *Base::m_query; - } - - Query& greater(OldDateTime value) const - { - Base::m_query->m_impl.greater_olddatetime(col_idx, value); - return *Base::m_query; - } - - Query& greater_equal(OldDateTime value) const - { - Base::m_query->m_impl.greater_equal_olddatetime(col_idx, value); - return *Base::m_query; - } - - Query& less(OldDateTime value) const - { - Base::m_query->m_impl.less_olddatetime(col_idx, value); - return *Base::m_query; - } - - Query& less_equal(OldDateTime value) const - { - Base::m_query->m_impl.less_equal_olddatetime(col_idx, value); - return *Base::m_query; - } - - Query& between(OldDateTime from, OldDateTime to) const - { - Base::m_query->m_impl.between_olddatetime(col_idx, from, to); - return *Base::m_query; - }; - - OldDateTime maximum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.maximum_olddatetime(col_idx, resultcount, start, end, limit, return_ndx); - } - - OldDateTime minimum(size_t* resultcount = nullptr, size_t start = 0, - size_t end = size_t(-1), size_t limit=size_t(-1), - size_t* return_ndx = nullptr) const - { - return Base::m_query->m_impl.minimum_olddatetime(col_idx, resultcount, start, end, limit, return_ndx); - } -}; - - -/// QueryColumn specialization for strings. -template -class QueryColumn: - public QueryColumnBase { -private: - typedef QueryColumnBase Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - - Query& equal(StringData value, bool case_sensitive=true) const - { - Base::m_query->m_impl.equal(col_idx, value, case_sensitive); - return *Base::m_query; - } - - Query& not_equal(StringData value, bool case_sensitive=true) const - { - Base::m_query->m_impl.not_equal(col_idx, value, case_sensitive); - return *Base::m_query; - } - - Query& begins_with(StringData value, bool case_sensitive=true) const - { - Base::m_query->m_impl.begins_with(col_idx, value, case_sensitive); - return *Base::m_query; - } - - Query& ends_with(StringData value, bool case_sensitive=true) const - { - Base::m_query->m_impl.ends_with(col_idx, value, case_sensitive); - return *Base::m_query; - } - - Query& contains(StringData value, bool case_sensitive=true) const - { - Base::m_query->m_impl.contains(col_idx, value, case_sensitive); - return *Base::m_query; - } -}; - - -/// QueryColumn specialization for binary data. -template -class QueryColumn: - public QueryColumnBase { -private: - typedef QueryColumnBase Base; - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query* q) noexcept: Base(q) {} - - Query& equal(BinaryData value) const - { - Base::m_query->m_impl.equal(col_idx, value); - return *Base::m_query; - } - - Query& not_equal(BinaryData value) const - { - Base::m_query->m_impl.not_equal(col_idx, value); - return *Base::m_query; - } - - Query& begins_with(BinaryData value) const - { - Base::m_query->m_impl.begins_with(col_idx, value); - return *Base::m_query; - } - - Query& ends_with(BinaryData value) const - { - Base::m_query->m_impl.ends_with(col_idx, value); - return *Base::m_query; - } - - Query& contains(BinaryData value) const - { - Base::m_query->m_impl.contains(col_idx, value); - return *Base::m_query; - } -}; - - -/// QueryColumn specialization for subtables. -template -class QueryColumn> { -private: - typedef typename Taboid::Query Query; - Query* const m_query; - -public: - explicit QueryColumn(Query* q) noexcept: m_query(q) {} - - Query& subtable() - { - m_query->m_impl.subtable(col_idx); - return *m_query; - } -}; - - -/// QueryColumn specialization for mixed type. -template -class QueryColumn { -private: - typedef typename Taboid::Query Query; - -public: - explicit QueryColumn(Query*) noexcept {} -}; - - -} // namespace _impl -} // namespaced realm - -#endif // REALM_TABLE_ACCESSORS_HPP diff --git a/Pods/Realm/include/core/realm/table_basic.hpp b/Pods/Realm/include/core/realm/table_basic.hpp deleted file mode 100644 index a68fe8ae..00000000 --- a/Pods/Realm/include/core/realm/table_basic.hpp +++ /dev/null @@ -1,749 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TABLE_BASIC_HPP -#define REALM_TABLE_BASIC_HPP - -#include // unint8_t etc -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - - -namespace _impl { - -template -struct AddCol; -template -struct CmpColType; -template -struct AssignIntoCol; - -} // namespace _impl - - - -/// This class is non-polymorphic, that is, it has no virtual -/// functions. Further more, it has no destructor, and it adds no new -/// data-members. These properties are important, because it ensures -/// that there is no run-time distinction between a Table instance and -/// an instance of any variation of this class, and therefore it is -/// valid to cast a pointer from Table to BasicTable even when -/// the instance is constructed as a Table. Of couse, this also -/// assumes that Table is non-polymorphic. Further more, accessing the -/// Table via a pointer or reference to a BasicTable is not in -/// violation of the strict aliasing rule. -template -class BasicTable: private Table, public Spec::ConvenienceMethods { -public: - typedef Spec spec_type; - typedef typename Spec::Columns Columns; - - typedef BasicTableRef Ref; - typedef BasicTableRef ConstRef; - - typedef BasicTableView View; - typedef BasicTableView ConstView; - - using Table::is_attached; - using Table::has_shared_type; - using Table::is_empty; - using Table::size; - using Table::clear; - using Table::remove; - using Table::remove_last; - using Table::move_last_over; - using Table::optimize; - using Table::add_empty_row; - using Table::insert_empty_row; - using Table::aggregate; - - using Table::get_backlink_count; - using Table::get_backlink; - - using Table::is_group_level; - using Table::get_index_in_group; - - BasicTable(Allocator& alloc = Allocator::get_default()): Table(alloc) - { - set_dynamic_type(*this); - } - - BasicTable(const BasicTable& t, Allocator& alloc = Allocator::get_default()): Table(t, alloc) {} - - ~BasicTable() noexcept {} - - static Ref create(Allocator& = Allocator::get_default()); - - Ref copy(Allocator& = Allocator::get_default()) const; - - static int get_column_count() noexcept - { - return util::TypeCount::value; - } - - Ref get_table_ref() { return Ref(this); } - - ConstRef get_table_ref() const { return ConstRef(this); } - -private: - template - struct Col { - typedef typename util::TypeAt::type value_type; - typedef _impl::ColumnAccessor type; - }; - typedef typename Spec::template ColNames ColsAccessor; - - template - struct ConstCol { - typedef typename util::TypeAt::type value_type; - typedef _impl::ColumnAccessor type; - }; - typedef typename Spec::template ColNames ConstColsAccessor; - -public: - ColsAccessor column() noexcept { return ColsAccessor(this); } - ConstColsAccessor column() const noexcept { return ConstColsAccessor(this); } - -private: - template - struct Field { - typedef typename util::TypeAt::type value_type; - typedef _impl::FieldAccessor type; - }; - typedef std::pair FieldInit; - - template - struct ConstField { - typedef typename util::TypeAt::type value_type; - typedef _impl::FieldAccessor type; - }; - typedef std::pair ConstFieldInit; - -public: - typedef typename Spec::template ColNames RowAccessor; - typedef typename Spec::template ColNames ConstRowAccessor; - - RowAccessor operator[](size_t row_idx) noexcept - { - return RowAccessor(std::make_pair(this, row_idx)); - } - - ConstRowAccessor operator[](size_t row_idx) const noexcept - { - return ConstRowAccessor(std::make_pair(this, row_idx)); - } - - RowAccessor front() noexcept - { - return RowAccessor(std::make_pair(this, 0)); - } - - ConstRowAccessor front() const noexcept - { - return ConstRowAccessor(std::make_pair(this, 0)); - } - - /// Access the last row, or one of its predecessors. - /// - /// \param rel_idx An optional index of the row specified relative - /// to the end. Thus, table.back(rel_idx) is the same as - /// table[table.size() + rel_idx]. - /// - RowAccessor back(int rel_idx = -1) noexcept - { - return RowAccessor(std::make_pair(this, size()+rel_idx)); - } - - ConstRowAccessor back(int rel_idx = -1) const noexcept - { - return ConstRowAccessor(std::make_pair(this, size()+rel_idx)); - } - - RowAccessor add() { return RowAccessor(std::make_pair(this, add_empty_row())); } - - template - void add(const util::Tuple& tuple) - { - size_t i = size(); - insert(i, tuple); - } - - void insert(size_t i) { insert_empty_row(i); } - - template - void insert(size_t i, const util::Tuple& tuple) - { - insert(i); - set(i, tuple); - } - - template - void set(size_t i, const util::Tuple& tuple) - { - using namespace realm::util; - static_assert(TypeCount::value == TypeCount::value, - "Wrong number of tuple elements"); - ForEachType::exec(static_cast(this), i, tuple); - } - - // FIXME: This probably fails if Spec::ConvenienceMethods has no add(). - using Spec::ConvenienceMethods::add; - // FIXME: This probably fails if Spec::ConvenienceMethods has no insert(). - using Spec::ConvenienceMethods::insert; - // FIXME: This probably fails if Spec::ConvenienceMethods has no set(). - using Spec::ConvenienceMethods::set; - - // FIXME: A cursor must be a distinct class that can be constructed from a RowAccessor - typedef RowAccessor Cursor; - typedef ConstRowAccessor ConstCursor; - - - class Query; - Query where(typename BasicTable::View* tv = nullptr) { return Query(*this, tv ? tv->get_impl() : nullptr); } - Query where(typename BasicTable::View* tv = nullptr) const { return Query(*this, tv ? tv->get_impl() : nullptr); } - - /// Compare two tables for equality. Two tables are equal if, and - /// only if, they contain the same rows in the same order, that - /// is, for each value V at column index C and row index R in one - /// of the tables, there is a value at column index C and row - /// index R in the other table that is equal to V. - bool operator==(const BasicTable& t) const { return compare_rows(t); } - - /// Compare two tables for inequality. See operator==(). - bool operator!=(const BasicTable& t) const { return !compare_rows(t); } - - /// Checks whether the dynamic type of the specified table matches - /// the statically specified table type. The two types (or specs) - /// must have the same columns, and in the same order. Two columns - /// are considered equal if, and only if they have the same name - /// and the same type. The type is understood as the value encoded - /// by the DataType enumeration. This check proceeds recursively - /// for subtable columns. - /// - /// \tparam T The static table type. It makes no difference - /// whether it is const-qualified or not. - /// - /// FIXME: Consider dropping the requirement that column names - /// must be equal. There does not seem to be any value for the - /// user in that requirement. Further more, there may be cases - /// where it is desirable to be able to cast to a table type with - /// different column names. Similar changes are needed in the Java - /// and Objective-C language bindings. - template - friend bool is_a(const Table&) noexcept; - - //@{ - /// These functions return null if the specified table is not - /// compatible with the specified table type. - template - friend BasicTableRef checked_cast(TableRef) noexcept; - - template - friend BasicTableRef checked_cast(ConstTableRef) noexcept; - //@} - - using Table::verify; - -#ifdef REALM_DEBUG - using Table::print; - using Table::dump_node_structure; -#endif - -private: - template - struct QueryCol { - typedef typename util::TypeAt::type value_type; - typedef _impl::QueryColumn type; - }; - - // These are intende to be used only by accessor classes - Table* get_impl() noexcept { return this; } - const Table* get_impl() const noexcept { return this; } - - template - Subtab* get_subtable_ptr(size_t col_idx, size_t row_idx) - { - return static_cast(Table::get_subtable_ptr(col_idx, row_idx)); - } - - template - const Subtab* get_subtable_ptr(size_t col_idx, size_t row_idx) const - { - return static_cast(Table::get_subtable_ptr(col_idx, row_idx)); - } - - static void set_dynamic_type(Table& table) - { - using namespace realm::util; - DescriptorRef desc = table.get_descriptor(); // Throws - const int num_cols = TypeCount::value; - StringData dyn_col_names[num_cols]; - Spec::dyn_col_names(dyn_col_names); - ForEachType::exec(&*desc, dyn_col_names); // Throws - } - - static bool matches_dynamic_type(const realm::Spec& spec) noexcept - { - using namespace realm::util; - const int num_cols = util::TypeCount::value; - StringData dyn_col_names[num_cols]; - Spec::dyn_col_names(dyn_col_names); - return !HasType::exec(&spec, dyn_col_names); - } - - // This one allows a BasicTable to know that BasicTables with - // other Specs are also derived from Table. - template - friend class BasicTable; - - // This one allows util::bind_ptr to know that all BasicTable template - // instantiations are derived from Table. - template - friend class util::bind_ptr; - - // These allow BasicTableRef to refer to RowAccessor and - // ConstRowAccessor. - friend class BasicTableRef; - friend class BasicTableRef; - - // These allow BasicTableView to call get_subtable_ptr(). - friend class BasicTableView; - friend class BasicTableView; - - template - friend struct _impl::CmpColType; - - template - friend class _impl::FieldAccessor; - - template - friend class _impl::MixedFieldAccessorBase; - - template - friend class _impl::ColumnAccessorBase; - - template - friend class _impl::ColumnAccessor; - - template - friend class _impl::QueryColumn; - - friend class Group; -}; - - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable: 4355) -#endif - -template -class BasicTable::Query: - public Spec::template ColNames { -public: - Query(const Query& q): Spec::template ColNames(this), m_impl(q.m_impl) {} - virtual ~Query() noexcept {} - - Query& group() { m_impl.group(); return *this; } - - Query& end_group() { m_impl.end_group(); return *this; } - - Query& end_subtable() { m_impl.end_subtable(); return *this; } - - Query& Or() { m_impl.Or(); return *this; } - - Query& Not() { m_impl.Not(); return *this; } - - size_t find(size_t begin_at_table_row = 0) - { - return m_impl.find(begin_at_table_row); - } - - typename BasicTable::View find_all(size_t start = 0, - size_t end = size_t(-1), - size_t limit = size_t(-1)) - { - return m_impl.find_all(start, end, limit); - } - - typename BasicTable::ConstView find_all(size_t start = 0, - size_t end = size_t(-1), - size_t limit = size_t(-1)) const - { - return m_impl.find_all(start, end, limit); - } - - size_t count(size_t start = 0, - size_t end = size_t(-1), - size_t limit = size_t(-1)) const - { - return m_impl.count(start, end, limit); - } - - size_t remove(size_t start = 0, - size_t end = size_t(-1), - size_t limit = size_t(-1)) - { - return m_impl.remove(start, end, limit); - } - - std::string validate() { return m_impl.validate(); } - -protected: - Query(const BasicTable& table, TableViewBase* tv): - Spec::template ColNames(this), m_impl(table, tv) {} - - using HandoverPatch = QueryHandoverPatch; - Query(const Query& source, HandoverPatch& patch, ConstSourcePayload mode) : - Spec::template ColNames(this), - m_impl(source.m_impl, patch, mode) - { - } - - Query(Query& source, HandoverPatch& patch, MutableSourcePayload mode) : - Spec::template ColNames(this), - m_impl(source.m_impl, patch, mode) - { - } - - void apply_patch(HandoverPatch& patch, Group& group) - { - m_impl.apply_patch(patch, group); - } - - virtual std::unique_ptr - clone_for_handover(std::unique_ptr& patch, ConstSourcePayload mode) const - { - patch.reset(new HandoverPatch); - std::unique_ptr retval( new Query(*this, *patch, mode)); - return retval; - } - - virtual std::unique_ptr - clone_for_handover(std::unique_ptr& patch, MutableSourcePayload mode) - { - patch.reset(new HandoverPatch); - std::unique_ptr retval( new Query(*this, *patch, mode)); - return retval; - } - - virtual void apply_and_consume_patch(std::unique_ptr& patch, Group& group) - { - apply_patch(*patch, group); - patch.reset(); - } - -private: - realm::Query m_impl; - - friend class BasicTable; - friend class SharedGroup; - - template - friend class _impl::QueryColumnBase; - - template - friend class _impl::QueryColumn; -}; - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - - - - -// Implementation: - -namespace _impl { - -template -struct GetColumnTypeId; - -template<> -struct GetColumnTypeId -{ - static const DataType id = type_Int; -}; -template -struct GetColumnTypeId> { - static const DataType id = type_Int; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_Bool; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_Float; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_Double; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_String; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_Binary; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_OldDateTime; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_Mixed; -}; -template<> -struct GetColumnTypeId -{ - static const DataType id = type_Timestamp; -}; - -template -struct AddCol { - static void exec(Descriptor* desc, const StringData* col_names) - { - REALM_ASSERT(col_idx == desc->get_column_count()); - desc->add_column(GetColumnTypeId::id, col_names[col_idx]); // Throws - } -}; - -// AddCol specialization for subtables -template -struct AddCol, col_idx> { - static void exec(Descriptor* desc, const StringData* col_names) - { - REALM_ASSERT(col_idx == desc->get_column_count()); - DescriptorRef subdesc; - desc->add_column(type_Table, col_names[col_idx], &subdesc); // Throws - using namespace realm::util; - const int num_subcols = TypeCount::value; - StringData subcol_names[num_subcols]; - Subtab::spec_type::dyn_col_names(subcol_names); - typedef typename Subtab::Columns Subcolumns; - ForEachType::exec(&*subdesc, subcol_names); // Throws - } -}; - - - -template -struct CmpColType { - static bool exec(const Spec* spec, const StringData* col_names) - { - return GetColumnTypeId::id != spec->get_public_column_type(col_idx) || - col_names[col_idx] != spec->get_column_name(col_idx); - } -}; - -// CmpColType specialization for subtables -template -struct CmpColType, col_idx> { - static bool exec(const Spec* spec, const StringData* col_names) - { - if (spec->get_column_type(col_idx) != col_type_Table || - col_names[col_idx] != spec->get_column_name(col_idx)) return true; - const Spec subspec = const_cast(spec)->get_subtable_spec(col_idx); - return !Subtab::matches_dynamic_type(subspec); - } -}; - - -// AssignIntoCol specialization for integers -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_int(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for floats -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_float(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for doubles -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_double(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for booleans -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_bool(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for strings -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_string(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for enumerations -template -struct AssignIntoCol, col_idx> { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_enum(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for dates -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_olddatetime(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for timestamps -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_timestamp(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for binary data -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_binary(col_idx, row_idx, util::at(tuple)); - } -}; - -// AssignIntoCol specialization for subtables -template -struct AssignIntoCol, col_idx> { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - // FIXME: unsafe reinterpret_cast to private base class - auto subtable = reinterpret_cast(static_cast(util::at(tuple))); - t->set_subtable(col_idx, row_idx, subtable); - } -}; - -// AssignIntoCol specialization for mixed type -template -struct AssignIntoCol { - template - static void exec(Table* t, size_t row_idx, util::Tuple tuple) - { - t->set_mixed(col_idx, row_idx, util::at(tuple)); - } -}; - -} // namespace _impl - - -template -inline typename BasicTable::Ref BasicTable::create(Allocator& alloc) -{ - TableRef table = Table::create(alloc); - set_dynamic_type(*table); - return unchecked_cast>(std::move(table)); -} - - -template -inline typename BasicTable::Ref BasicTable::copy(Allocator& alloc) const -{ - return unchecked_cast>(Table::copy(alloc)); -} - - -template -inline bool is_a(const Table& t) noexcept -{ - typedef _impl::TableFriend tf; - return T::matches_dynamic_type(tf::get_spec(t)); -} - - -template -inline BasicTableRef checked_cast(TableRef t) noexcept -{ - if (!is_a(*t)) - return BasicTableRef(); // Null - return unchecked_cast(t); -} - - -template -inline BasicTableRef checked_cast(ConstTableRef t) noexcept -{ - if (!is_a(*t)) - return BasicTableRef(); // Null - return unchecked_cast(t); -} - - -} // namespace realm - -#endif // REALM_TABLE_BASIC_HPP diff --git a/Pods/Realm/include/core/realm/table_basic_fwd.hpp b/Pods/Realm/include/core/realm/table_basic_fwd.hpp deleted file mode 100644 index 1f6906f4..00000000 --- a/Pods/Realm/include/core/realm/table_basic_fwd.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TABLE_BASIC_FWD_HPP -#define REALM_TABLE_BASIC_FWD_HPP - -namespace realm { - - -template -class BasicTable; - -template -struct IsBasicTable { static const bool value = false; }; -template -struct IsBasicTable> { static const bool value = true; }; -template -struct IsBasicTable> { static const bool value = true; }; - - -} // namespace realm - -#endif // REALM_TABLE_BASIC_FWD_HPP diff --git a/Pods/Realm/include/core/realm/table_macros.hpp b/Pods/Realm/include/core/realm/table_macros.hpp deleted file mode 100644 index 477982ac..00000000 --- a/Pods/Realm/include/core/realm/table_macros.hpp +++ /dev/null @@ -1,937 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - *************************************************************************/ - -/************************************************************************* - * - * CAUTION: DO NOT EDIT THIS FILE -- YOUR CHANGES WILL BE LOST! - * - * This file is generated by Cheetah from the following template: - * - * table_macros.hpp.cheetah - * - *************************************************************************/ - -#ifndef REALM_TABLE_MACROS_HPP -#define REALM_TABLE_MACROS_HPP - -#include - - -#define REALM_TABLE_1(Table, name1, type1) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - ColNames(Init i) noexcept: name1(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1)); \ - } \ - void insert(size_t _realm_i, type1 name1) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1)); \ - } \ - void set(size_t _realm_i, type1 name1) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_2(Table, name1, type1, name2, type2) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - ColNames(Init i) noexcept: name1(i), name2(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_3(Table, name1, type1, name2, type2, name3, type3) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_4(Table, name1, type1, name2, type2, name3, type3, name4, type4) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_5(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_6(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_7(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_8(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_9(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8, name9, type9) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns8; \ - typedef ::realm::util::TypeAppend< Columns8, type9 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - typename Col<8>::type name9; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i), name9(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - names[8] = realm::StringData(#name9, sizeof #name9 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_10(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8, name9, type9, name10, type10) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns8; \ - typedef ::realm::util::TypeAppend< Columns8, type9 >::type Columns9; \ - typedef ::realm::util::TypeAppend< Columns9, type10 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - typename Col<8>::type name9; \ - typename Col<9>::type name10; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i), name9(i), name10(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - names[8] = realm::StringData(#name9, sizeof #name9 - 1); \ - names[9] = realm::StringData(#name10, sizeof #name10 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_11(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8, name9, type9, name10, type10, name11, type11) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns8; \ - typedef ::realm::util::TypeAppend< Columns8, type9 >::type Columns9; \ - typedef ::realm::util::TypeAppend< Columns9, type10 >::type Columns10; \ - typedef ::realm::util::TypeAppend< Columns10, type11 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - typename Col<8>::type name9; \ - typename Col<9>::type name10; \ - typename Col<10>::type name11; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i), name9(i), name10(i), name11(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - names[8] = realm::StringData(#name9, sizeof #name9 - 1); \ - names[9] = realm::StringData(#name10, sizeof #name10 - 1); \ - names[10] = realm::StringData(#name11, sizeof #name11 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_12(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8, name9, type9, name10, type10, name11, type11, name12, type12) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns8; \ - typedef ::realm::util::TypeAppend< Columns8, type9 >::type Columns9; \ - typedef ::realm::util::TypeAppend< Columns9, type10 >::type Columns10; \ - typedef ::realm::util::TypeAppend< Columns10, type11 >::type Columns11; \ - typedef ::realm::util::TypeAppend< Columns11, type12 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - typename Col<8>::type name9; \ - typename Col<9>::type name10; \ - typename Col<10>::type name11; \ - typename Col<11>::type name12; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i), name9(i), name10(i), name11(i), name12(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - names[8] = realm::StringData(#name9, sizeof #name9 - 1); \ - names[9] = realm::StringData(#name10, sizeof #name10 - 1); \ - names[10] = realm::StringData(#name11, sizeof #name11 - 1); \ - names[11] = realm::StringData(#name12, sizeof #name12 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_13(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8, name9, type9, name10, type10, name11, type11, name12, type12, name13, type13) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns8; \ - typedef ::realm::util::TypeAppend< Columns8, type9 >::type Columns9; \ - typedef ::realm::util::TypeAppend< Columns9, type10 >::type Columns10; \ - typedef ::realm::util::TypeAppend< Columns10, type11 >::type Columns11; \ - typedef ::realm::util::TypeAppend< Columns11, type12 >::type Columns12; \ - typedef ::realm::util::TypeAppend< Columns12, type13 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - typename Col<8>::type name9; \ - typename Col<9>::type name10; \ - typename Col<10>::type name11; \ - typename Col<11>::type name12; \ - typename Col<12>::type name13; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i), name9(i), name10(i), name11(i), name12(i), name13(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - names[8] = realm::StringData(#name9, sizeof #name9 - 1); \ - names[9] = realm::StringData(#name10, sizeof #name10 - 1); \ - names[10] = realm::StringData(#name11, sizeof #name11 - 1); \ - names[11] = realm::StringData(#name12, sizeof #name12 - 1); \ - names[12] = realm::StringData(#name13, sizeof #name13 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_14(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8, name9, type9, name10, type10, name11, type11, name12, type12, name13, type13, name14, type14) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns8; \ - typedef ::realm::util::TypeAppend< Columns8, type9 >::type Columns9; \ - typedef ::realm::util::TypeAppend< Columns9, type10 >::type Columns10; \ - typedef ::realm::util::TypeAppend< Columns10, type11 >::type Columns11; \ - typedef ::realm::util::TypeAppend< Columns11, type12 >::type Columns12; \ - typedef ::realm::util::TypeAppend< Columns12, type13 >::type Columns13; \ - typedef ::realm::util::TypeAppend< Columns13, type14 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - typename Col<8>::type name9; \ - typename Col<9>::type name10; \ - typename Col<10>::type name11; \ - typename Col<11>::type name12; \ - typename Col<12>::type name13; \ - typename Col<13>::type name14; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i), name9(i), name10(i), name11(i), name12(i), name13(i), name14(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - names[8] = realm::StringData(#name9, sizeof #name9 - 1); \ - names[9] = realm::StringData(#name10, sizeof #name10 - 1); \ - names[10] = realm::StringData(#name11, sizeof #name11 - 1); \ - names[11] = realm::StringData(#name12, sizeof #name12 - 1); \ - names[12] = realm::StringData(#name13, sizeof #name13 - 1); \ - names[13] = realm::StringData(#name14, sizeof #name14 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13, type14 name14) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13, name14)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13, type14 name14) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13, name14)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13, type14 name14) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13, name14)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#define REALM_TABLE_15(Table, name1, type1, name2, type2, name3, type3, name4, type4, name5, type5, name6, type6, name7, type7, name8, type8, name9, type9, name10, type10, name11, type11, name12, type12, name13, type13, name14, type14, name15, type15) \ -struct Table##Spec: ::realm::SpecBase { \ - typedef ::realm::util::TypeAppend< void, type1 >::type Columns1; \ - typedef ::realm::util::TypeAppend< Columns1, type2 >::type Columns2; \ - typedef ::realm::util::TypeAppend< Columns2, type3 >::type Columns3; \ - typedef ::realm::util::TypeAppend< Columns3, type4 >::type Columns4; \ - typedef ::realm::util::TypeAppend< Columns4, type5 >::type Columns5; \ - typedef ::realm::util::TypeAppend< Columns5, type6 >::type Columns6; \ - typedef ::realm::util::TypeAppend< Columns6, type7 >::type Columns7; \ - typedef ::realm::util::TypeAppend< Columns7, type8 >::type Columns8; \ - typedef ::realm::util::TypeAppend< Columns8, type9 >::type Columns9; \ - typedef ::realm::util::TypeAppend< Columns9, type10 >::type Columns10; \ - typedef ::realm::util::TypeAppend< Columns10, type11 >::type Columns11; \ - typedef ::realm::util::TypeAppend< Columns11, type12 >::type Columns12; \ - typedef ::realm::util::TypeAppend< Columns12, type13 >::type Columns13; \ - typedef ::realm::util::TypeAppend< Columns13, type14 >::type Columns14; \ - typedef ::realm::util::TypeAppend< Columns14, type15 >::type Columns; \ - \ - template class Col, class Init> \ - struct ColNames { \ - typename Col<0>::type name1; \ - typename Col<1>::type name2; \ - typename Col<2>::type name3; \ - typename Col<3>::type name4; \ - typename Col<4>::type name5; \ - typename Col<5>::type name6; \ - typename Col<6>::type name7; \ - typename Col<7>::type name8; \ - typename Col<8>::type name9; \ - typename Col<9>::type name10; \ - typename Col<10>::type name11; \ - typename Col<11>::type name12; \ - typename Col<12>::type name13; \ - typename Col<13>::type name14; \ - typename Col<14>::type name15; \ - ColNames(Init i) noexcept: name1(i), name2(i), name3(i), name4(i), name5(i), name6(i), name7(i), name8(i), name9(i), name10(i), name11(i), name12(i), name13(i), name14(i), name15(i) {} \ - }; \ - \ - static void dyn_col_names(realm::StringData* names) noexcept \ - { \ - names[0] = realm::StringData(#name1, sizeof #name1 - 1); \ - names[1] = realm::StringData(#name2, sizeof #name2 - 1); \ - names[2] = realm::StringData(#name3, sizeof #name3 - 1); \ - names[3] = realm::StringData(#name4, sizeof #name4 - 1); \ - names[4] = realm::StringData(#name5, sizeof #name5 - 1); \ - names[5] = realm::StringData(#name6, sizeof #name6 - 1); \ - names[6] = realm::StringData(#name7, sizeof #name7 - 1); \ - names[7] = realm::StringData(#name8, sizeof #name8 - 1); \ - names[8] = realm::StringData(#name9, sizeof #name9 - 1); \ - names[9] = realm::StringData(#name10, sizeof #name10 - 1); \ - names[10] = realm::StringData(#name11, sizeof #name11 - 1); \ - names[11] = realm::StringData(#name12, sizeof #name12 - 1); \ - names[12] = realm::StringData(#name13, sizeof #name13 - 1); \ - names[13] = realm::StringData(#name14, sizeof #name14 - 1); \ - names[14] = realm::StringData(#name15, sizeof #name15 - 1); \ - } \ - \ - struct ConvenienceMethods { \ - void add(type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13, type14 name14, type15 name15) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->add((::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13, name14, name15)); \ - } \ - void insert(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13, type14 name14, type15 name15) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->insert(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13, name14, name15)); \ - } \ - void set(size_t _realm_i, type1 name1, type2 name2, type3 name3, type4 name4, type5 name5, type6 name6, type7 name7, type8 name8, type9 name9, type10 name10, type11 name11, type12 name12, type13 name13, type14 name14, type15 name15) \ - { \ - ::realm::BasicTable* const _realm_t = \ - static_cast< ::realm::BasicTable* >(this); \ - _realm_t->set(_realm_i, (::realm::util::tuple(), name1, name2, name3, name4, name5, name6, name7, name8, name9, name10, name11, name12, name13, name14, name15)); \ - } \ - }; \ -}; \ -typedef ::realm::BasicTable Table; - - -#endif // REALM_TABLE_MACROS_HPP diff --git a/Pods/Realm/include/core/realm/table_ref.hpp b/Pods/Realm/include/core/realm/table_ref.hpp deleted file mode 100644 index 5d6990e3..00000000 --- a/Pods/Realm/include/core/realm/table_ref.hpp +++ /dev/null @@ -1,455 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TABLE_REF_HPP -#define REALM_TABLE_REF_HPP - -#include -#include - -#include - -namespace realm { - - -class Table; -template -class BasicTable; - - -/// A reference-counting "smart pointer" for referring to table -/// accessors. -/// -/// The purpose of this smart pointer is to keep the referenced table -/// accessor alive for as long as anybody is referring to it, however, -/// for stack allocated table accessors, the lifetime is necessarily -/// determined by scope (see below). -/// -/// Please take note of the distinction between a "table" and a "table -/// accessor" here. A table accessor is an instance of `Table` or -/// `BasicTable`, and it may, or may not be attached to an -/// actual table at any specific point in time, but this state of -/// attachment of the accessor has nothing to do with the function of -/// the smart pointer. Also, in the rest of the documentation of this -/// class, whenever you see `Table::foo`, you are supposed to read it -/// as, `Table::foo` or `BasicTable::foo`. -/// -/// -/// Table accessors are either created directly by an application via -/// a call to one of the public table constructors, or they are -/// created internally by the Realm library, such as when the -/// application calls Group::get_table(), Table::get_subtable(), or -/// Table::create(). -/// -/// Applications can safely assume that all table accessors, created -/// internally by the Realm library, have a lifetime that is managed -/// by reference counting. This means that the application can prolong -/// the lifetime of *such* table accessors indefinitely by holding on -/// to at least one smart pointer, but note that the guarantee of the -/// continued existence of the accessor, does not imply that the -/// accessor remains attached to the underlying table (see -/// Table::is_attached() for details). Accessors whose lifetime are -/// controlled by reference counting are destroyed exactly when the -/// reference count drops to zero. -/// -/// When an application creates a new table accessor by a direct call -/// to one of the public constructors, the lifetime of that table -/// accessor is *not*, and cannot be managed by reference -/// counting. This is true regardless of the way the accessor is -/// created (i.e., regardless of whether it is an automatic variable -/// on the stack, or created on the heap using `new`). However, for -/// convenience, but with one important caveat, it is still possible -/// to use smart pointers to refer to such accessors. The caveat is -/// that no smart pointers are allowed to refer to the accessor at the -/// point in time when its destructor is called. It is entirely the -/// responsibility of the application to ensure that this requirement -/// is met. Failing to do so, will result in undefined -/// behavior. Finally, please note that an application is always free -/// to use Table::create() as an alternative to creating free-standing -/// top-level tables on the stack, and that this is indeed neccessary -/// when fully reference counted lifetimes are required. -/// -/// So, at any time, and for any table accessor, an application can -/// call Table::get_table_ref() to obtain a smart pointer that refers -/// to that table, however, while that is always possible and safe, it -/// is not always possible to extend the lifetime of an accessor by -/// holding on to a smart pointer. The question of whether that is -/// possible, depends directly on the way the accessor was created. -/// -/// -/// Apart from keeping track of the number of references, these smart -/// pointers behaves almost exactly like regular pointers. In -/// particular, it is possible to dereference a TableRef and get a -/// `Table&` out of it, however, if you are not careful, this can -/// easily lead to dangling references: -/// -/// \code{.cpp} -/// -/// Table& sub_1 = *(table.get_subtable(0,0)); -/// sub_1.add_empty_row(); // Oops, sub_1 may be dangling! -/// -/// \endcode -/// -/// Whether `sub_1` is actually dangling in the example above will -/// depend on whether other references to the same subtable accessor -/// already exist, but it is never wise to rely in this. Here is a -/// safe and proper alternative: -/// -/// \code{.cpp} -/// -/// TableRef sub_2 = table.get_subtable(0,0); -/// sub_2.add_empty_row(); // Safe! -/// -/// void do_something(Table&); -/// do_something(*(table.get_subtable(0,0))); // Also safe! -/// -/// \endcode -/// -/// -/// \sa Table -/// \sa TableRef -template -class BasicTableRef: util::bind_ptr { -public: - constexpr BasicTableRef() noexcept {} - ~BasicTableRef() noexcept {} - - // Copy construct - BasicTableRef(const BasicTableRef& r) noexcept: util::bind_ptr(r) {} - template - BasicTableRef(const BasicTableRef& r) noexcept: - util::bind_ptr(r) {} - - // Copy assign - BasicTableRef& operator=(const BasicTableRef&) noexcept; - template - BasicTableRef& operator=(const BasicTableRef&) noexcept; - - // Move construct - BasicTableRef(BasicTableRef&& r) noexcept: util::bind_ptr(std::move(r)) {} - template - BasicTableRef(BasicTableRef&& r) noexcept: - util::bind_ptr(std::move(r)) {} - - // Move assign - BasicTableRef& operator=(BasicTableRef&&) noexcept; - template - BasicTableRef& operator=(BasicTableRef&&) noexcept; - - //@{ - /// Comparison - template - bool operator==(const BasicTableRef&) const noexcept; - - template - bool operator==(U*) const noexcept; - - template - bool operator!=(const BasicTableRef&) const noexcept; - - template - bool operator!=(U*) const noexcept; - - template - bool operator<(const BasicTableRef&) const noexcept; - - template - bool operator<(U*) const noexcept; - - template - bool operator>(const BasicTableRef&) const noexcept; - - template - bool operator>(U*) const noexcept; - - template - bool operator<=(const BasicTableRef&) const noexcept; - - template - bool operator<=(U*) const noexcept; - - template - bool operator>=(const BasicTableRef&) const noexcept; - - template - bool operator>=(U*) const noexcept; - //@} - - // Dereference -#ifdef __clang__ - // Clang has a bug that causes it to effectively ignore the 'using' declaration. - T& operator*() const noexcept { return util::bind_ptr::operator*(); } -#else - using util::bind_ptr::operator*; -#endif - using util::bind_ptr::operator->; - - using util::bind_ptr::operator bool; - - T* get() const noexcept { return util::bind_ptr::get(); } - void reset() noexcept { util::bind_ptr::reset(); } - void reset(T* t) noexcept { util::bind_ptr::reset(t); } - - void swap(BasicTableRef& r) noexcept { this->util::bind_ptr::swap(r); } - friend void swap(BasicTableRef& a, BasicTableRef& b) noexcept { a.swap(b); } - - template - friend BasicTableRef unchecked_cast(BasicTableRef
) noexcept; - - template - friend BasicTableRef unchecked_cast(BasicTableRef) noexcept; - -private: - template - struct GetRowAccType { typedef void type; }; - - template - struct GetRowAccType> { - typedef typename BasicTable::RowAccessor type; - }; - template - struct GetRowAccType> { - typedef typename BasicTable::ConstRowAccessor type; - }; - typedef typename GetRowAccType::type RowAccessor; - -public: - /// Same as 'table[i]' where 'table' is the referenced table. - RowAccessor operator[](size_t i) const noexcept { return (*this->get())[i]; } - -private: - friend class SubtableColumnBase; - friend class Table; - friend class Group; - - template - friend class BasicTable; - - template - friend class BasicTableRef; - - explicit BasicTableRef(T* t) noexcept: util::bind_ptr(t) {} - - typedef typename util::bind_ptr::casting_move_tag casting_move_tag; - template - BasicTableRef(BasicTableRef* r, casting_move_tag) noexcept: - util::bind_ptr(r, casting_move_tag()) {} -}; - - -typedef BasicTableRef
TableRef; -typedef BasicTableRef ConstTableRef; - - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const BasicTableRef& p) -{ - out << static_cast(&*p); - return out; -} - -template -inline BasicTableRef unchecked_cast(TableRef t) noexcept -{ - return BasicTableRef(&t, typename BasicTableRef::casting_move_tag()); -} - -template -inline BasicTableRef unchecked_cast(ConstTableRef t) noexcept -{ - return BasicTableRef(&t, typename BasicTableRef::casting_move_tag()); -} - - -//@{ -/// Comparison -template -bool operator==(T*, const BasicTableRef&) noexcept; -template -bool operator!=(T*, const BasicTableRef&) noexcept; -template -bool operator<(T*, const BasicTableRef&) noexcept; -template -bool operator>(T*, const BasicTableRef&) noexcept; -template -bool operator<=(T*, const BasicTableRef&) noexcept; -template -bool operator>=(T*, const BasicTableRef&) noexcept; -//@} - - - - - -// Implementation: - -template -inline BasicTableRef& BasicTableRef::operator=(const BasicTableRef& r) noexcept -{ - this->util::bind_ptr::operator=(r); - return *this; -} - -template -template -inline BasicTableRef& BasicTableRef::operator=(const BasicTableRef& r) noexcept -{ - this->util::bind_ptr::operator=(r); - return *this; -} - -template -inline BasicTableRef& BasicTableRef::operator=(BasicTableRef&& r) noexcept -{ - this->util::bind_ptr::operator=(std::move(r)); - return *this; -} - -template -template -inline BasicTableRef& BasicTableRef::operator=(BasicTableRef&& r) noexcept -{ - this->util::bind_ptr::operator=(std::move(r)); - return *this; -} - -template -template -bool BasicTableRef::operator==(const BasicTableRef& p) const noexcept -{ - return get() == p.get(); -} - -template -template -bool BasicTableRef::operator==(U* p) const noexcept -{ - return get() == p; -} - -template -template -bool BasicTableRef::operator!=(const BasicTableRef& p) const noexcept -{ - return get() != p.get(); -} - -template -template -bool BasicTableRef::operator!=(U* p) const noexcept -{ - return get() != p; -} - -template -template -bool BasicTableRef::operator<(const BasicTableRef& p) const noexcept -{ - return get() < p.get(); -} - -template -template -bool BasicTableRef::operator<(U* p) const noexcept -{ - return get() < p; -} - -template -template -bool BasicTableRef::operator>(const BasicTableRef& p) const noexcept -{ - return get() > p.get(); -} - -template -template -bool BasicTableRef::operator>(U* p) const noexcept -{ - return get() > p; -} - -template -template -bool BasicTableRef::operator<=(const BasicTableRef& p) const noexcept -{ - return get() <= p.get(); -} - -template -template -bool BasicTableRef::operator<=(U* p) const noexcept -{ - return get() <= p; -} - -template -template -bool BasicTableRef::operator>=(const BasicTableRef& p) const noexcept -{ - return get() >= p.get(); -} - -template -template -bool BasicTableRef::operator>=(U* p) const noexcept -{ - return get() >= p; -} - -template -bool operator==(T* a, const BasicTableRef& b) noexcept -{ - return b == a; -} - -template -bool operator!=(T* a, const BasicTableRef& b) noexcept -{ - return b != a; -} - -template -bool operator<(T* a, const BasicTableRef& b) noexcept -{ - return b > a; -} - -template -bool operator>(T* a, const BasicTableRef& b) noexcept -{ - return b < a; -} - -template -bool operator<=(T* a, const BasicTableRef& b) noexcept -{ - return b >= a; -} - -template -bool operator>=(T* a, const BasicTableRef& b) noexcept -{ - return b <= a; -} - - -} // namespace realm - -#endif // REALM_TABLE_REF_HPP diff --git a/Pods/Realm/include/core/realm/table_view.hpp b/Pods/Realm/include/core/realm/table_view.hpp deleted file mode 100644 index 9f495986..00000000 --- a/Pods/Realm/include/core/realm/table_view.hpp +++ /dev/null @@ -1,1653 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TABLE_VIEW_HPP -#define REALM_TABLE_VIEW_HPP - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace realm { - -// Views, tables and synchronization between them: -// -// Views are built through queries against either tables or another view. -// Views may be restricted to only hold entries provided by another view. -// this other view is called the "restricting view". -// Views may be sorted in ascending or descending order of values in one ore more columns. -// -// Views remember the query from which it was originally built. -// Views remember the table from which it was originally built. -// Views remember a restricting view if one was used when it was originally built. -// Views remember the sorting criteria (columns and direction) -// -// A view may be operated in one of two distinct modes: *reflective* and *imperative*. -// Sometimes the term "reactive" is used instead of "reflective" with the same meaning. -// -// Reflective views: -// - A reflective view *always* *reflect* the result of running the query. -// If the underlying tables or tableviews change, the reflective view changes as well. -// A reflective view may need to rerun the query it was generated from, a potentially -// costly operation which happens on demand. -// - It does not matter whether changes are explicitly done within the transaction, or -// occur implicitly as part of advance_read() or promote_to_write(). -// -// Imperative views: -// - An imperative view only *initially* holds the result of the query. An imperative -// view *never* reruns the query. To force the view to match it's query (by rerunning it), -// the view must be operated in reflective mode. -// An imperative view can be modified explicitly. References can be added, removed or -// changed. -// -// - In imperative mode, the references in the view tracks movement of the referenced data: -// If you delete an entry which is referenced from a view, said reference is detached, -// not removed. -// - It does not matter whether the delete is done in-line (as part of the current transaction), -// or if it is done implicitly as part of advance_read() or promote_to_write(). -// -// The choice between reflective and imperative views might eventually be represented by a -// switch on the tableview, but isn't yet. For now, clients (bindings) must call sync_if_needed() -// to get reflective behavior. -// -// Use cases: -// -// 1. Presenting data -// The first use case (and primary motivator behind the reflective view) is to just track -// and present the state of the database. In this case, the view is operated in reflective -// mode, it is not modified within the transaction, and it is not used to modify data in -// other parts of the database. -// -// 2. Handover -// The second use case is "handover." The implicit rerun of the query in our first use case -// may be too costly to be acceptable on the main thread. Instead you want to run the query -// on a worker thread, but display it on the main thread. To achieve this, you need two -// SharedGroups locked on to the same version of the database. If you have that, you can -// *handover* a view from one thread/SharedGroup to the other. -// -// Handover is a two-step procedure. First, the accessors are *exported* from one SharedGroup, -// called the sourcing group, then it is *imported* into another SharedGroup, called the -// receiving group. Normally, the thread associated with the sourcing SharedGroup will be -// responsible for the export operation, while the thread associated with the receiving -// SharedGroup will do the import operation. This is different for "stealing" - see below. -// See group_shared.hpp for more details on handover. -// -// 2b. Stealing -// This is a special variant of handover, where the sourcing thread/shared group has its -// TableView "stolen" from it, in the sense that the sourcing thread is *not* responsible -// for exporting the view. This form of handover is limited, because the export operation -// may happen in parallel with operations in the sourcing thread. The export operation is -// mutually exclusive with advance_read or promote_to_write, so the sourcing thread is -// free to move forward with these even though another thread is stealing its TableViews. -// HOWEVER: All other accesses to the TableView is *not* interlocked, including indirect -// accesses triggered by changes to other TableViews or Tables on which the TableView depend. -// FIXME: If we truly need to interlock all accesses to the TableView, it is possible -// to add this feature, BUT the runtime cost must be carefully considered. -// -// 3. Iterating a view and changing data -// The third use case (and a motivator behind the imperative view) is when you want -// to make changes to the database in accordance with a query result. Imagine you want to -// find all employees with a salary below a limit and raise their salaries to the limit (pseudocode): -// -// promote_to_write(); -// view = table.where().less_than(salary_column,limit).find_all(); -// for (size_t i = 0; i < view.size(); ++i) { -// view.set_int(salary_column, i, limit); -// // add this to get reflective mode: view.sync_if_needed(); -// } -// commit_and_continue_as_read(); -// -// This is idiomatic imperative code and it works if the view is operated in imperative mode. -// -// If the view is operated in reflective mode, the behaviour surprises most people: When the -// first salary is changed, the entry no longer fullfills the query, so it is dropped from the -// view implicitly. view[0] is removed, view[1] moves to view[0] and so forth. But the next -// loop iteration has i=1 and refers to view[1], thus skipping view[0]. The end result is that -// every other employee get a raise, while the others don't. -// -// 4. Iterating intermixed with implicit updates -// This leads us to use case 4, which is similar to use case 3, but uses promote_to_write() -// intermixed with iterating a view. This is actually quite important to some, who do not want -// to end up with a large write transaction. -// -// view = table.where().less_than(salary_column,limit).find_all(); -// for (size_t i = 0; i < view.size(); ++i) { -// promote_to_write(); -// view.set_int(salary_column, i, limit); -// commit_and_continue_as_write(); -// } -// -// Anything can happen at the call to promote_to_write(). The key question then becomes: how -// do we support a safe way of realising the original goal (raising salaries) ? -// -// using the imperative operating mode: -// -// view = table.where().less_than(salary_column,limit).find_all(); -// for (size_t i = 0; i < view.size(); ++i) { -// promote_to_write(); -// // add r.sync_if_needed(); to get reflective mode -// if (r.is_row_attached(i)) { -// Row r = view[i]; -// r.set_int(salary_column, limit); -// } -// commit_and_continue_as_write(); -// } -// -// This is safe, and we just aim for providing low level safety: is_row_attached() can tell -// if the reference is valid, and the references in the view continue to point to the -// same object at all times, also following implicit updates. The rest is up to the -// application logic. -// -// It is important to see, that there is no guarantee that all relevant employees get -// their raise in cases whith concurrent updates. At every call to promote_to_write() new -// employees may be added to the underlying table, but as the view is in imperative mode, -// these new employees are not added to the view. Also at promote_to_write() an existing -// employee could recieve a (different, larger) raise which would then be overwritten and lost. -// However, these are problems that you should expect, since the activity is spread over multiple -// transactions. - - -/// Common base class for TableView and ConstTableView. -class TableViewBase : public RowIndexes { -public: -// - not in use / implemented yet: ... explicit calls to sync_if_needed() must be used -// to get 'reflective' mode. -// enum mode { mode_Reflective, mode_Imperative }; -// void set_operating_mode(mode); -// mode get_operating_mode(); - bool is_empty() const noexcept; - - // Tells if the table that this TableView points at still exists or has been deleted. - bool is_attached() const noexcept; - - bool is_row_attached(size_t row_ndx) const noexcept; - size_t size() const noexcept; - size_t num_attached_rows() const noexcept; - - // Get the query used to create this TableView - // The query will have a null source table if this tv was not created from - // a query - const Query& get_query() const noexcept; - - // Column information - const ColumnBase& get_column_base(size_t index) const; - - size_t get_column_count() const noexcept; - StringData get_column_name(size_t column_ndx) const noexcept; - size_t get_column_index(StringData name) const; - DataType get_column_type(size_t column_ndx) const noexcept; - - // Getting values - int64_t get_int(size_t column_ndx, size_t row_ndx) const noexcept; - bool get_bool(size_t column_ndx, size_t row_ndx) const noexcept; - OldDateTime get_olddatetime(size_t column_ndx, size_t row_ndx) const noexcept; - Timestamp get_timestamp(size_t column_ndx, size_t row_ndx) const noexcept; - float get_float(size_t column_ndx, size_t row_ndx) const noexcept; - double get_double(size_t column_ndx, size_t row_ndx) const noexcept; - StringData get_string(size_t column_ndx, size_t row_ndx) const noexcept; - BinaryData get_binary(size_t column_ndx, size_t row_ndx) const noexcept; - Mixed get_mixed(size_t column_ndx, size_t row_ndx) const noexcept; - DataType get_mixed_type(size_t column_ndx, size_t row_ndx) const noexcept; - size_t get_link(size_t column_ndx, size_t row_ndx) const noexcept; - - // Links - bool is_null_link(size_t column_ndx, size_t row_ndx) const noexcept; - - // Subtables - size_t get_subtable_size(size_t column_ndx, size_t row_ndx) const noexcept; - - // Searching (Int and String) - size_t find_first_int(size_t column_ndx, int64_t value) const; - size_t find_first_bool(size_t column_ndx, bool value) const; - size_t find_first_olddatetime(size_t column_ndx, OldDateTime value) const; - size_t find_first_float(size_t column_ndx, float value) const; - size_t find_first_double(size_t column_ndx, double value) const; - size_t find_first_string(size_t column_ndx, StringData value) const; - size_t find_first_binary(size_t column_ndx, BinaryData value) const; - - // Aggregate functions. count_target is ignored by all except Count. Hack because of bug in optional - // arguments in clang and vs2010 (fixed in 2012) - template - R aggregate(R (ColType::*aggregateMethod)(size_t, size_t, size_t, size_t*) const, - size_t column_ndx, T count_target, size_t* return_ndx = nullptr) const; - - int64_t sum_int(size_t column_ndx) const; - int64_t maximum_int(size_t column_ndx, size_t* return_ndx = nullptr) const; - int64_t minimum_int(size_t column_ndx, size_t* return_ndx = nullptr) const; - double average_int(size_t column_ndx, size_t* value_count = nullptr) const; - size_t count_int(size_t column_ndx, int64_t target) const; - - double sum_float(size_t column_ndx) const; - float maximum_float(size_t column_ndx, size_t* return_ndx = nullptr) const; - float minimum_float(size_t column_ndx, size_t* return_ndx = nullptr) const; - double average_float(size_t column_ndx, size_t* value_count = nullptr) const; - size_t count_float(size_t column_ndx, float target) const; - - double sum_double(size_t column_ndx) const; - double maximum_double(size_t column_ndx, size_t* return_ndx = nullptr) const; - double minimum_double(size_t column_ndx, size_t* return_ndx = nullptr) const; - double average_double(size_t column_ndx, size_t* value_count = nullptr) const; - size_t count_double(size_t column_ndx, double target) const; - - OldDateTime maximum_olddatetime(size_t column_ndx, size_t* return_ndx = nullptr) const; - OldDateTime minimum_olddatetime(size_t column_ndx, size_t* return_ndx = nullptr) const; - - Timestamp minimum_timestamp(size_t column_ndx, size_t* return_ndx = nullptr) const; - Timestamp maximum_timestamp(size_t column_ndx, size_t* return_ndx = nullptr) const; - size_t count_timestamp(size_t column_ndx, Timestamp target) const; - - void apply_same_order(TableViewBase& order); - - // Simple pivot aggregate method. Experimental! Please do not - // document method publicly. - void aggregate(size_t group_by_column, size_t aggr_column, - Table::AggrType op, Table& result) const; - - // Get row index in the source table this view is "looking" at. - size_t get_source_ndx(size_t row_ndx) const noexcept; - - /// Search this view for the specified source table row (specified by its - /// index in the source table). If found, the index of that row within this - /// view is returned, otherwise `realm::not_found` is returned. - size_t find_by_source_ndx(size_t source_ndx) const noexcept; - - // Conversion - void to_json(std::ostream&) const; - void to_string(std::ostream&, size_t limit = 500) const; - void row_to_string(size_t row_ndx, std::ostream&) const; - - // Determine if the view is 'in sync' with the underlying table - // as well as other views used to generate the view. Note that updates - // through views maintains synchronization between view and table. - // It doesnt by itself maintain other views as well. So if a view - // is generated from another view (not a table), updates may cause - // that view to be outdated, AND as the generated view depends upon - // it, it too will become outdated. - bool is_in_sync() const; - - // Tells if this TableView depends on a LinkList or row that has been deleted. - bool depends_on_deleted_object() const; - - // Synchronize a view to match a table or tableview from which it - // has been derived. Synchronization is achieved by rerunning the - // query used to generate the view. If derived from another view, that - // view will be synchronized as well. - // - // "live" or "reactive" views are implemented by calling sync_if_needed - // before any of the other access-methods whenever the view may have become - // outdated. - // - // This will make the TableView empty and in sync with the highest possible table version - // if the TableView depends on an object (LinkView or row) that has been deleted. - uint_fast64_t sync_if_needed() const; - - // Set this undetached TableView to be a distinct view, and sync immediately. - void sync_distinct_view(size_t column_ndx); - - // Re-sort view according to last used criterias - void re_sort(); - - // Sort m_row_indexes according to one column - void sort(size_t column, bool ascending = true); - - // Sort m_row_indexes according to multiple columns - void sort(std::vector columns, std::vector ascending); - - // Remove rows that are duplicated with respect to the column set passed as argument. - // distinct() will preserve the original order of the row pointers, also if the order is a result of sort() - // If two rows are indentical (for the given set of distinct-columns), then the last row is removed. - // You can call sync_if_needed() to update the distinct view, just like you can for a sorted view. - // Each time you call distinct() it will first fetch the full original TableView contents and then apply - // distinct() on that. So it distinct() does not filter the result of the previous distinct(). - void distinct(size_t column); - void distinct(std::vector columns); - - // Returns whether the rows are guaranteed to be in table order. - // This is true only of unsorted TableViews created from either: - // - Table::find_all() - // - Query::find_all() when the query is not restricted to a view. - bool is_in_table_order() const; - - virtual ~TableViewBase() noexcept; - - virtual std::unique_ptr clone() const - { - return std::unique_ptr(new TableViewBase(*this)); - } - -protected: - // This TableView can be "born" from 5 different sources: - // - LinkView - // - Table::find_all() - // - Query::find_all() - // - Table::get_distinct_view() - // - Table::get_backlink_view() - // Return the version of the source it was created from. - uint64_t outside_version() const; - - void do_sync(); - - // Actual sorting facility is provided by the base class: - using RowIndexes::sort; - - // Null if, and only if, the view is detached. - mutable TableRef m_table; - - // Contains a reference to the table that is the target of the link. - // Null unless this TableView was created using Table::get_backlink_view. - mutable TableRef m_linked_table; - // The index of the link column that this view contain backlinks for. - size_t m_linked_column; - // The target row that rows in this view link to. - ConstRow m_linked_row; - - // If this TableView was created from a LinkView, then this reference points to it. Otherwise it's 0 - mutable ConstLinkViewRef m_linkview_source; - - // m_distinct_column_source != npos if this view was created from distinct values in a column of m_table. - size_t m_distinct_column_source = npos; - - // If m_distinct_columns.size() > 0, it means that this TableView has had called TableView::distinct() and - // must only contain unique rows with respect to that column set of the parent table - std::vector m_distinct_columns; - - Sorter m_sorting_predicate; // Stores sorting criterias (columns + ascending) - bool m_auto_sort = false; - - - // A valid query holds a reference to its table which must match our m_table. - // hence we can use a query with a null table reference to indicate that the view - // was NOT generated by a query, but follows a table directly. - Query m_query; - // parameters for findall, needed to rerun the query - size_t m_start; - size_t m_end; - size_t m_limit; - - mutable util::Optional m_last_seen_version; - - size_t m_num_detached_refs = 0; - /// Construct null view (no memory allocated). - TableViewBase(); - - /// Construct empty view, ready for addition of row indices. - TableViewBase(Table* parent); - TableViewBase(Table* parent, Query& query, size_t start, size_t end, size_t limit); - TableViewBase(Table *parent, Table *linked_table, size_t column, BasicRowExpr row); - - /// Copy constructor. - TableViewBase(const TableViewBase&); - - /// Move constructor. - TableViewBase(TableViewBase&&) noexcept; - - TableViewBase& operator=(const TableViewBase&) noexcept; - TableViewBase& operator=(TableViewBase&&) noexcept; - - template - static R find_all_integer(V*, size_t, int64_t); - - template - static R find_all_float(V*, size_t, float); - - template - static R find_all_double(V*, size_t, double); - - template - static R find_all_string(V*, size_t, StringData); - - using HandoverPatch = TableViewHandoverPatch; - - // handover machinery entry points based on dynamic type. These methods: - // a) forward their calls to the static type entry points. - // b) new/delete patch data structures. - virtual std::unique_ptr clone_for_handover(std::unique_ptr& patch, - ConstSourcePayload mode) const - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new TableViewBase(*this, *patch, mode)); - return retval; - } - - virtual std::unique_ptr clone_for_handover(std::unique_ptr& patch, - MutableSourcePayload mode) - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new TableViewBase(*this, *patch, mode)); - return retval; - } - - virtual void apply_and_consume_patch(std::unique_ptr& patch, Group& group) - { - apply_patch(*patch, group); - patch.reset(); - } - // handover machinery entry points based on static type - void apply_patch(HandoverPatch& patch, Group& group); - TableViewBase(const TableViewBase& source, HandoverPatch& patch, - ConstSourcePayload mode); - TableViewBase(TableViewBase& source, HandoverPatch& patch, - MutableSourcePayload mode); - -private: - void detach() const noexcept; // may have to remove const - size_t find_first_integer(size_t column_ndx, int64_t value) const; - template - Timestamp minmax_timestamp(size_t column_ndx, size_t* return_ndx) const; - - friend class Table; - friend class Query; - friend class SharedGroup; - template - friend class BasicTableViewBase; - - // Called by table to adjust any row references: - void adj_row_acc_insert_rows(size_t row_ndx, size_t num_rows) noexcept; - void adj_row_acc_erase_row(size_t row_ndx) noexcept; - void adj_row_acc_move_over(size_t from_row_ndx, size_t to_row_ndx) noexcept; - void adj_row_acc_clear() noexcept; - - template - friend class BasicTableView; -}; - - -inline void TableViewBase::detach() const noexcept // may have to remove const -{ - m_table = TableRef(); -} - - -class ConstTableView; - - -enum class RemoveMode { - ordered, - unordered -}; - - -/// A TableView gives read and write access to the parent table. -/// -/// A 'const TableView' cannot be changed (e.g. sorted), nor can the -/// parent table be modified through it. -/// -/// A TableView is both copyable and movable. -class TableView: public TableViewBase { -public: - TableView(); - TableView(const TableView&) = default; - TableView(TableView&&) = default; - ~TableView() noexcept; - TableView& operator=(const TableView&) = default; - TableView& operator=(TableView&&) = default; - - // Rows - typedef BasicRowExpr
RowExpr; - typedef BasicRowExpr ConstRowExpr; - RowExpr get(size_t row_ndx) noexcept; - ConstRowExpr get(size_t row_ndx) const noexcept; - RowExpr front() noexcept; - ConstRowExpr front() const noexcept; - RowExpr back() noexcept; - ConstRowExpr back() const noexcept; - RowExpr operator[](size_t row_ndx) noexcept; - ConstRowExpr operator[](size_t row_ndx) const noexcept; - - // Setting values - void set_int(size_t column_ndx, size_t row_ndx, int64_t value); - void set_bool(size_t column_ndx, size_t row_ndx, bool value); - void set_olddatetime(size_t column_ndx, size_t row_ndx, OldDateTime value); - void set_timestamp(size_t column_ndx, size_t row_ndx, Timestamp value); - template - void set_enum(size_t column_ndx, size_t row_ndx, E value); - void set_float(size_t column_ndx, size_t row_ndx, float value); - void set_double(size_t column_ndx, size_t row_ndx, double value); - void set_string(size_t column_ndx, size_t row_ndx, StringData value); - void set_binary(size_t column_ndx, size_t row_ndx, BinaryData value); - void set_mixed(size_t column_ndx, size_t row_ndx, Mixed value); - void set_subtable(size_t column_ndx,size_t row_ndx, const Table* table); - void set_link(size_t column_ndx, size_t row_ndx, size_t target_row_ndx); - - // Subtables - TableRef get_subtable(size_t column_ndx, size_t row_ndx); - ConstTableRef get_subtable(size_t column_ndx, size_t row_ndx) const; - void clear_subtable(size_t column_ndx, size_t row_ndx); - - // Links - TableRef get_link_target(size_t column_ndx) noexcept; - ConstTableRef get_link_target(size_t column_ndx) const noexcept; - void nullify_link(size_t column_ndx, size_t row_ndx); - - //@{ - /// \brief Remove the specified row (or rows) from the underlying table. - /// - /// remove() removes the specified row from the underlying table, - /// remove_last() removes the last row in the table view from the underlying - /// table, and clear removes all the rows in the table view from the - /// underlying table. - /// - /// When rows are removed from the underlying table, they will by necessity - /// also be removed from the table view. - /// - /// The order of the remaining rows in the the table view will be maintained - /// regardless of the value passed for \a underlying_mode. - /// - /// \param row_ndx The index within this table view of the row to be - /// removed. - /// - /// \param underlying_mode If set to RemoveMode::ordered (the default), the - /// rows will be removed from the underlying table in a way that maintains - /// the order of the remaining rows in the underlying table. If set to - /// RemoveMode::unordered, the order of the remaining rows in the underlying - /// table will not in general be maintaind, but the operation will generally - /// be much faster. In any case, the order of remaining rows in the table - /// view will not be affected. - void remove(size_t row_ndx, RemoveMode underlying_mode = RemoveMode::ordered); - void remove_last(RemoveMode underlying_mode = RemoveMode::ordered); - void clear(RemoveMode underlying_mode = RemoveMode::ordered); - //@} - - // Searching (Int and String) - TableView find_all_int(size_t column_ndx, int64_t value); - ConstTableView find_all_int(size_t column_ndx, int64_t value) const; - TableView find_all_bool(size_t column_ndx, bool value); - ConstTableView find_all_bool(size_t column_ndx, bool value) const; - TableView find_all_olddatetime(size_t column_ndx, OldDateTime value); - ConstTableView find_all_olddatetime(size_t column_ndx, OldDateTime value) const; - TableView find_all_float(size_t column_ndx, float value); - ConstTableView find_all_float(size_t column_ndx, float value) const; - TableView find_all_double(size_t column_ndx, double value); - ConstTableView find_all_double(size_t column_ndx, double value) const; - TableView find_all_string(size_t column_ndx, StringData value); - ConstTableView find_all_string(size_t column_ndx, StringData value) const; - // FIXME: Need: TableView find_all_binary(size_t column_ndx, BinaryData value); - // FIXME: Need: ConstTableView find_all_binary(size_t column_ndx, BinaryData value) const; - - Table& get_parent() noexcept; - const Table& get_parent() const noexcept; - - std::unique_ptr clone() const override - { - return std::unique_ptr(new TableView(*this)); - } - - std::unique_ptr - clone_for_handover(std::unique_ptr& patch, ConstSourcePayload mode) const override - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new TableView(*this, *patch, mode)); - return retval; - } - - std::unique_ptr - clone_for_handover(std::unique_ptr& patch, MutableSourcePayload mode) override - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new TableView(*this, *patch, mode)); - return retval; - } - - // this one is here to follow the general scheme, it is not really needed, the - // one in the base class would be sufficient - void apply_and_consume_patch(std::unique_ptr& patch, Group& group) override - { - apply_patch(*patch, group); - patch.reset(); - } - - TableView(const TableView& src, HandoverPatch& patch, ConstSourcePayload mode) - : TableViewBase(src, patch, mode) - { - // empty - } - - TableView(TableView& src, HandoverPatch& patch, MutableSourcePayload mode) - : TableViewBase(src, patch, mode) - { - // empty - } - - // only here to follow the general scheme, base class method could be used instead - void apply_patch(HandoverPatch& patch, Group& group) - { - TableViewBase::apply_patch(patch, group); - } - -private: - TableView(Table& parent); - TableView(Table& parent, Query& query, size_t start, size_t end, size_t limit); - TableView(Table *parent, Table *linked_table, size_t column, ConstRowExpr row); - - TableView find_all_integer(size_t column_ndx, int64_t value); - ConstTableView find_all_integer(size_t column_ndx, int64_t value) const; - - friend class ConstTableView; - friend class Table; - friend class Query; - friend class TableViewBase; - friend class ListviewNode; - friend class LinkView; - template - friend class BasicTableViewBase; -}; - - - - -/// A ConstTableView gives read access to the parent table, but no -/// write access. The view itself, though, can be changed, for -/// example, it can be sorted. -/// -/// Note that methods are declared 'const' if, and only if they leave -/// the view unmodified, and this is irrespective of whether they -/// modify the parent table. -/// -/// A ConstTableView has both copy and move semantics. See TableView -/// for more on this. -class ConstTableView: public TableViewBase { -public: - ConstTableView(); - ~ConstTableView() noexcept; - ConstTableView(const ConstTableView&) = default; - ConstTableView(ConstTableView&&) = default; - ConstTableView& operator=(const ConstTableView&) = default; - ConstTableView& operator=(ConstTableView&&) = default; - - ConstTableView(const TableView&); - ConstTableView(TableView&&); - ConstTableView& operator=(const TableView&); - ConstTableView& operator=(TableView&&); - - // Rows - typedef BasicRowExpr ConstRowExpr; - ConstRowExpr get(size_t row_ndx) const noexcept; - ConstRowExpr front() const noexcept; - ConstRowExpr back() const noexcept; - ConstRowExpr operator[](size_t row_ndx) const noexcept; - - // Subtables - ConstTableRef get_subtable(size_t column_ndx, size_t row_ndx) const; - - // Links - ConstTableRef get_link_target(size_t column_ndx) const noexcept; - - // Searching (Int and String) - ConstTableView find_all_int(size_t column_ndx, int64_t value) const; - ConstTableView find_all_bool(size_t column_ndx, bool value) const; - ConstTableView find_all_olddatetime(size_t column_ndx, OldDateTime value) const; - ConstTableView find_all_float(size_t column_ndx, float value) const; - ConstTableView find_all_double(size_t column_ndx, double value) const; - ConstTableView find_all_string(size_t column_ndx, StringData value) const; - - const Table& get_parent() const noexcept; - - std::unique_ptr clone() const override - { - return std::unique_ptr(new ConstTableView(*this)); - } - - std::unique_ptr - clone_for_handover(std::unique_ptr& patch, ConstSourcePayload mode) const override - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new ConstTableView(*this, *patch, mode)); - return retval; - } - - std::unique_ptr - clone_for_handover(std::unique_ptr& patch, MutableSourcePayload mode) override - { - patch.reset(new HandoverPatch); - std::unique_ptr retval(new ConstTableView(*this, *patch, mode)); - return retval; - } - - // this one is here to follow the general scheme, it is not really needed, the - // one in the base class would be sufficient - void apply_and_consume_patch(std::unique_ptr& patch, Group& group) override - { - apply_patch(*patch, group); - patch.reset(); - } - - ConstTableView(const ConstTableView& src, HandoverPatch& patch, ConstSourcePayload mode) - : TableViewBase(src, patch, mode) - { - // empty - } - - ConstTableView(ConstTableView& src, HandoverPatch& patch, MutableSourcePayload mode) - : TableViewBase(src, patch, mode) - { - // empty - } - - // only here to follow the general scheme, base class method could be used instead - void apply_patch(HandoverPatch& patch, Group& group) - { - TableViewBase::apply_patch(patch, group); - } - -private: - ConstTableView(const Table& parent); - - ConstTableView find_all_integer(size_t column_ndx, int64_t value) const; - - friend class TableView; - friend class Table; - friend class Query; - friend class TableViewBase; -}; - - -// ================================================================================================ -// TableViewBase Implementation: - -inline const Query& TableViewBase::get_query() const noexcept -{ - return m_query; -} - -inline bool TableViewBase::is_empty() const noexcept -{ - return m_row_indexes.is_empty(); -} - -inline bool TableViewBase::is_attached() const noexcept -{ - return bool(m_table); -} - -inline bool TableViewBase::is_row_attached(size_t row_ndx) const noexcept -{ - return m_row_indexes.get(row_ndx) != detached_ref; -} - -inline size_t TableViewBase::size() const noexcept -{ - return m_row_indexes.size(); -} - -inline size_t TableViewBase::num_attached_rows() const noexcept -{ - return m_row_indexes.size() - m_num_detached_refs; -} - -inline size_t TableViewBase::get_source_ndx(size_t row_ndx) const noexcept -{ - return to_size_t(m_row_indexes.get(row_ndx)); -} - -inline size_t TableViewBase::find_by_source_ndx(size_t source_ndx) const noexcept -{ - REALM_ASSERT(source_ndx < m_table->size()); - return m_row_indexes.find_first(source_ndx); -} - -inline TableViewBase::TableViewBase(): - RowIndexes(IntegerColumn::unattached_root_tag(), Allocator::get_default()) // Throws -{ - ref_type ref = IntegerColumn::create(m_row_indexes.get_alloc()); // Throws - m_row_indexes.get_root_array()->init_from_ref(ref); -} - -inline TableViewBase::TableViewBase(Table* parent): - RowIndexes(IntegerColumn::unattached_root_tag(), Allocator::get_default()), - m_table(parent->get_table_ref()), // Throws - m_last_seen_version(m_table ? util::make_optional(m_table->m_version) : util::none) -{ - // FIXME: This code is unreasonably complicated because it uses `IntegerColumn` as - // a free-standing container, and beause `IntegerColumn` does not conform to the - // RAII idiom (nor should it). - Allocator& alloc = m_row_indexes.get_alloc(); - _impl::DeepArrayRefDestroyGuard ref_guard(alloc); - ref_guard.reset(IntegerColumn::create(alloc)); // Throws - parent->register_view(this); // Throws - m_row_indexes.get_root_array()->init_from_ref(ref_guard.release()); -} - -inline TableViewBase::TableViewBase(Table* parent, Query& query, size_t start, size_t end, size_t limit): - RowIndexes(IntegerColumn::unattached_root_tag(), Allocator::get_default()), // Throws - m_table(parent->get_table_ref()), - m_query(query), - m_start(start), - m_end(end), - m_limit(limit), - m_last_seen_version(outside_version()) -{ - // FIXME: This code is unreasonably complicated because it uses `IntegerColumn` as - // a free-standing container, and beause `IntegerColumn` does not conform to the - // RAII idiom (nor should it). - Allocator& alloc = m_row_indexes.get_alloc(); - _impl::DeepArrayRefDestroyGuard ref_guard(alloc); - ref_guard.reset(IntegerColumn::create(alloc)); // Throws - parent->register_view(this); // Throws - m_row_indexes.get_root_array()->init_from_ref(ref_guard.release()); -} - -inline TableViewBase::TableViewBase(Table *parent, Table *linked_table, size_t column, BasicRowExpr row): - RowIndexes(IntegerColumn::unattached_root_tag(), Allocator::get_default()), - m_table(parent->get_table_ref()), // Throws - m_linked_table(linked_table->get_table_ref()), // Throws - m_linked_column(column), - m_linked_row(row), - m_last_seen_version(m_table ? util::make_optional(m_table->m_version) : util::none) -{ - // FIXME: This code is unreasonably complicated because it uses `IntegerColumn` as - // a free-standing container, and beause `IntegerColumn` does not conform to the - // RAII idiom (nor should it). - Allocator& alloc = m_row_indexes.get_alloc(); - _impl::DeepArrayRefDestroyGuard ref_guard(alloc); - ref_guard.reset(IntegerColumn::create(alloc)); // Throws - parent->register_view(this); // Throws - m_row_indexes.get_root_array()->init_from_ref(ref_guard.release()); -} - -inline TableViewBase::TableViewBase(const TableViewBase& tv): - RowIndexes(IntegerColumn::unattached_root_tag(), Allocator::get_default()), - m_table(tv.m_table), - m_linked_table(tv.m_linked_table), - m_linked_column(tv.m_linked_column), - m_linked_row(tv.m_linked_row), - m_linkview_source(tv.m_linkview_source), - m_distinct_column_source(tv.m_distinct_column_source), - m_distinct_columns(std::move(tv.m_distinct_columns)), - m_sorting_predicate(std::move(tv.m_sorting_predicate)), - m_auto_sort(tv.m_auto_sort), - m_query(tv.m_query), - m_start(tv.m_start), - m_end(tv.m_end), - m_limit(tv.m_limit), - m_last_seen_version(tv.m_last_seen_version), - m_num_detached_refs(tv.m_num_detached_refs) - { - // FIXME: This code is unreasonably complicated because it uses `IntegerColumn` as - // a free-standing container, and beause `IntegerColumn` does not conform to the - // RAII idiom (nor should it). - Allocator& alloc = m_row_indexes.get_alloc(); - MemRef mem = tv.m_row_indexes.get_root_array()->clone_deep(alloc); // Throws - _impl::DeepArrayRefDestroyGuard ref_guard(mem.m_ref, alloc); - if (m_table) - m_table->register_view(this); // Throws - m_row_indexes.get_root_array()->init_from_mem(mem); - ref_guard.release(); -} - -inline TableViewBase::TableViewBase(TableViewBase&& tv) noexcept: - RowIndexes(std::move(tv.m_row_indexes)), - m_table(std::move(tv.m_table)), - m_linked_table(std::move(tv.m_linked_table)), - m_linked_column(tv.m_linked_column), - m_linked_row(tv.m_linked_row), - m_linkview_source(std::move(tv.m_linkview_source)), - m_distinct_column_source(tv.m_distinct_column_source), - m_distinct_columns(std::move(tv.m_distinct_columns)), - m_sorting_predicate(std::move(tv.m_sorting_predicate)), - m_auto_sort(tv.m_auto_sort), - m_query(std::move(tv.m_query)), - m_start(tv.m_start), - m_end(tv.m_end), - m_limit(tv.m_limit), - // if we are created from a table view which is outdated, take care to use the outdated - // version number so that we can later trigger a sync if needed. - m_last_seen_version(tv.m_last_seen_version), - m_num_detached_refs(tv.m_num_detached_refs) -{ - if (m_table) - m_table->move_registered_view(&tv, this); -} - -inline TableViewBase::~TableViewBase() noexcept -{ - if (m_table) { - m_table->unregister_view(this); - m_table = TableRef(); - } - m_row_indexes.destroy(); // Shallow -} - -inline TableViewBase& TableViewBase::operator=(TableViewBase&& tv) noexcept -{ - if (m_table) - m_table->unregister_view(this); - m_table = std::move(tv.m_table); - if (m_table) - m_table->move_registered_view(&tv, this); - - m_row_indexes.move_assign(tv.m_row_indexes); - m_query = std::move(tv.m_query); - m_num_detached_refs = tv.m_num_detached_refs; - m_last_seen_version = tv.m_last_seen_version; - m_auto_sort = tv.m_auto_sort; - m_start = tv.m_start; - m_end = tv.m_end; - m_limit = tv.m_limit; - m_linked_table = std::move(tv.m_linked_table); - m_linked_column = tv.m_linked_column; - m_linked_row = tv.m_linked_row; - m_linkview_source = std::move(tv.m_linkview_source); - m_distinct_columns = std::move(tv.m_distinct_columns); - m_distinct_column_source = tv.m_distinct_column_source; - m_sorting_predicate = std::move(tv.m_sorting_predicate); - - return *this; -} - -#define REALM_ASSERT_COLUMN(column_ndx) \ - REALM_ASSERT(m_table); \ - REALM_ASSERT(column_ndx < m_table->get_column_count()) - -#define REALM_ASSERT_ROW(row_ndx) \ - REALM_ASSERT(m_table); \ - REALM_ASSERT(row_ndx < m_row_indexes.size()) - -#define REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, column_type) \ - REALM_ASSERT_COLUMN(column_ndx); \ - REALM_DIAG_PUSH(); \ - REALM_DIAG_IGNORE_TAUTOLOGICAL_COMPARE(); \ - REALM_ASSERT(m_table->get_column_type(column_ndx) == column_type || \ - (m_table->get_column_type(column_ndx) == type_OldDateTime && column_type == type_Int)); \ - REALM_DIAG_POP() - -#define REALM_ASSERT_INDEX(column_ndx, row_ndx) \ - REALM_ASSERT_COLUMN(column_ndx); \ - REALM_ASSERT(row_ndx < m_row_indexes.size()) - -#define REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, column_type) \ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, column_type); \ - REALM_ASSERT(row_ndx < m_row_indexes.size()) - -#define REALM_ASSERT_INDEX_AND_TYPE_TABLE_OR_MIXED(column_ndx, row_ndx) \ - REALM_ASSERT_COLUMN(column_ndx); \ - REALM_DIAG_PUSH(); \ - REALM_DIAG_IGNORE_TAUTOLOGICAL_COMPARE(); \ - REALM_ASSERT(m_table->get_column_type(column_ndx) == type_Table || \ - (m_table->get_column_type(column_ndx) == type_Mixed)); \ - REALM_DIAG_POP(); \ - REALM_ASSERT(row_ndx < m_row_indexes.size()) - -// Column information - -inline const ColumnBase& TableViewBase::get_column_base(size_t index) const -{ - return m_table->get_column_base(index); -} - -inline size_t TableViewBase::get_column_count() const noexcept -{ - REALM_ASSERT(m_table); - return m_table->get_column_count(); -} - -inline StringData TableViewBase::get_column_name(size_t column_ndx) const noexcept -{ - REALM_ASSERT(m_table); - return m_table->get_column_name(column_ndx); -} - -inline size_t TableViewBase::get_column_index(StringData name) const -{ - REALM_ASSERT(m_table); - return m_table->get_column_index(name); -} - -inline DataType TableViewBase::get_column_type(size_t column_ndx) const noexcept -{ - REALM_ASSERT(m_table); - return m_table->get_column_type(column_ndx); -} - - -// Getters - - -inline int64_t TableViewBase::get_int(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX(column_ndx, row_ndx); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_int(column_ndx, to_size_t(real_ndx)); -} - -inline bool TableViewBase::get_bool(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Bool); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_bool(column_ndx, to_size_t(real_ndx)); -} - -inline OldDateTime TableViewBase::get_olddatetime(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_OldDateTime); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_olddatetime(column_ndx, to_size_t(real_ndx)); -} - -inline Timestamp TableViewBase::get_timestamp(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Timestamp); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_timestamp(column_ndx, to_size_t(real_ndx)); -} - -inline float TableViewBase::get_float(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Float); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_float(column_ndx, to_size_t(real_ndx)); -} - -inline double TableViewBase::get_double(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Double); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_double(column_ndx, to_size_t(real_ndx)); -} - -inline StringData TableViewBase::get_string(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_String); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_string(column_ndx, to_size_t(real_ndx)); -} - -inline BinaryData TableViewBase::get_binary(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Binary); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_binary(column_ndx, to_size_t(real_ndx)); -} - -inline Mixed TableViewBase::get_mixed(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Mixed); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_mixed(column_ndx, to_size_t(real_ndx)); -} - -inline DataType TableViewBase::get_mixed_type(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Mixed); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_mixed_type(column_ndx, to_size_t(real_ndx)); -} - -inline size_t TableViewBase::get_subtable_size(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE_TABLE_OR_MIXED(column_ndx, row_ndx); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_subtable_size(column_ndx, to_size_t(real_ndx)); -} - -inline size_t TableViewBase::get_link(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Link); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_link(column_ndx, to_size_t(real_ndx)); -} - -inline TableRef TableView::get_link_target(size_t column_ndx) noexcept -{ - return m_table->get_link_target(column_ndx); -} - -inline ConstTableRef TableView::get_link_target(size_t column_ndx) const noexcept -{ - return m_table->get_link_target(column_ndx); -} - -inline ConstTableRef ConstTableView::get_link_target(size_t column_ndx) const noexcept -{ - return m_table->get_link_target(column_ndx); -} - -inline bool TableViewBase::is_null_link(size_t column_ndx, size_t row_ndx) const noexcept -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Link); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->is_null_link(column_ndx, to_size_t(real_ndx)); -} - - -// Searching - - -inline size_t TableViewBase::find_first_int(size_t column_ndx, int64_t value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Int); - return find_first_integer(column_ndx, value); -} - -inline size_t TableViewBase::find_first_bool(size_t column_ndx, bool value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Bool); - return find_first_integer(column_ndx, value ? 1 : 0); -} - -inline size_t TableViewBase::find_first_olddatetime(size_t column_ndx, OldDateTime value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_OldDateTime); - return find_first_integer(column_ndx, int64_t(value.get_olddatetime())); -} - - -template -R TableViewBase::find_all_integer(V* view, size_t column_ndx, int64_t value) -{ - typedef typename std::remove_const::type TNonConst; - return view->m_table->where(const_cast(view)).equal(column_ndx, value).find_all(); -} - -template -R TableViewBase::find_all_float(V* view, size_t column_ndx, float value) -{ - typedef typename std::remove_const::type TNonConst; - return view->m_table->where(const_cast(view)).equal(column_ndx, value).find_all(); -} - -template -R TableViewBase::find_all_double(V* view, size_t column_ndx, double value) -{ - typedef typename std::remove_const::type TNonConst; - return view->m_table->where(const_cast(view)).equal(column_ndx, value).find_all(); -} - -template -R TableViewBase::find_all_string(V* view, size_t column_ndx, StringData value) -{ - typedef typename std::remove_const::type TNonConst; - return view->m_table->where(const_cast(view)).equal(column_ndx, value).find_all(); -} - - -//-------------------------- TableView, ConstTableView implementation: - -inline TableView::TableView() -{ -} - -inline ConstTableView::ConstTableView() -{ -} - -inline ConstTableView::ConstTableView(const TableView& tv): - TableViewBase(tv) -{ -} - -inline ConstTableView::ConstTableView(TableView&& tv): - TableViewBase(std::move(tv)) -{ -} - -inline TableView::~TableView() noexcept -{ -} - -inline ConstTableView::~ConstTableView() noexcept -{ -} - -inline void TableView::remove_last(RemoveMode underlying_mode) -{ - if (!is_empty()) - remove(size()-1, underlying_mode); -} - -inline Table& TableView::get_parent() noexcept -{ - return *m_table; -} - -inline const Table& TableView::get_parent() const noexcept -{ - return *m_table; -} - -inline const Table& ConstTableView::get_parent() const noexcept -{ - return *m_table; -} - -inline TableView::TableView(Table& parent): - TableViewBase(&parent) -{ -} - -inline TableView::TableView(Table& parent, Query& query, size_t start, size_t end, size_t limit): - TableViewBase(&parent, query, start, end, limit) -{ -} - -inline TableView::TableView(Table *parent, Table *linked_table, size_t column, ConstRowExpr row): - TableViewBase(parent, linked_table, column, row) -{ -} - -inline ConstTableView::ConstTableView(const Table& parent): - TableViewBase(const_cast(&parent)) -{ -} - -inline ConstTableView& ConstTableView::operator=(const TableView& tv) { - TableViewBase::operator=(tv); - return *this; -} - -inline ConstTableView& ConstTableView::operator=(TableView&& tv) { - TableViewBase::operator=(std::move(tv)); - return *this; -} - - -// - string -inline TableView TableView::find_all_string(size_t column_ndx, StringData value) -{ - return TableViewBase::find_all_string(this, column_ndx, value); -} - -inline ConstTableView TableView::find_all_string(size_t column_ndx, StringData value) const -{ - return TableViewBase::find_all_string(this, column_ndx, value); -} - -inline ConstTableView ConstTableView::find_all_string(size_t column_ndx, StringData value) const -{ - return TableViewBase::find_all_string(this, column_ndx, value); -} - -// - float -inline TableView TableView::find_all_float(size_t column_ndx, float value) -{ - return TableViewBase::find_all_float(this, column_ndx, value); -} - -inline ConstTableView TableView::find_all_float(size_t column_ndx, float value) const -{ - return TableViewBase::find_all_float(this, column_ndx, value); -} - -inline ConstTableView ConstTableView::find_all_float(size_t column_ndx, float value) const -{ - return TableViewBase::find_all_float(this, column_ndx, value); -} - - -// - double -inline TableView TableView::find_all_double(size_t column_ndx, double value) -{ - return TableViewBase::find_all_double(this, column_ndx, value); -} - -inline ConstTableView TableView::find_all_double(size_t column_ndx, double value) const -{ - return TableViewBase::find_all_double(this, column_ndx, value); -} - -inline ConstTableView ConstTableView::find_all_double(size_t column_ndx, double value) const -{ - return TableViewBase::find_all_double(this, column_ndx, value); -} - - - -// -- 3 variants of the 3 find_all_{int, bool, date} all based on integer - -inline TableView TableView::find_all_integer(size_t column_ndx, int64_t value) -{ - return TableViewBase::find_all_integer(this, column_ndx, value); -} - -inline ConstTableView TableView::find_all_integer(size_t column_ndx, int64_t value) const -{ - return TableViewBase::find_all_integer(this, column_ndx, value); -} - -inline ConstTableView ConstTableView::find_all_integer(size_t column_ndx, int64_t value) const -{ - return TableViewBase::find_all_integer(this, column_ndx, value); -} - - -inline TableView TableView::find_all_int(size_t column_ndx, int64_t value) -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Int); - return find_all_integer(column_ndx, value); -} - -inline TableView TableView::find_all_bool(size_t column_ndx, bool value) -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Bool); - return find_all_integer(column_ndx, value ? 1 : 0); -} - -inline TableView TableView::find_all_olddatetime(size_t column_ndx, OldDateTime value) -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_OldDateTime); - return find_all_integer(column_ndx, int64_t(value.get_olddatetime())); -} - - -inline ConstTableView TableView::find_all_int(size_t column_ndx, int64_t value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Int); - return find_all_integer(column_ndx, value); -} - -inline ConstTableView TableView::find_all_bool(size_t column_ndx, bool value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Bool); - return find_all_integer(column_ndx, value ? 1 : 0); -} - -inline ConstTableView TableView::find_all_olddatetime(size_t column_ndx, OldDateTime value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_OldDateTime); - return find_all_integer(column_ndx, int64_t(value.get_olddatetime())); -} - - -inline ConstTableView ConstTableView::find_all_int(size_t column_ndx, int64_t value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Int); - return find_all_integer(column_ndx, value); -} - -inline ConstTableView ConstTableView::find_all_bool(size_t column_ndx, bool value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_Bool); - return find_all_integer(column_ndx, value ? 1 : 0); -} - -inline ConstTableView ConstTableView::find_all_olddatetime(size_t column_ndx, OldDateTime value) const -{ - REALM_ASSERT_COLUMN_AND_TYPE(column_ndx, type_OldDateTime); - return find_all_integer(column_ndx, int64_t(value.get_olddatetime())); -} - - -// Rows - - -inline TableView::RowExpr TableView::get(size_t row_ndx) noexcept -{ - REALM_ASSERT_ROW(row_ndx); - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get(to_size_t(real_ndx)); -} - -inline TableView::ConstRowExpr TableView::get(size_t row_ndx) const noexcept -{ - REALM_ASSERT_ROW(row_ndx); - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get(to_size_t(real_ndx)); -} - -inline ConstTableView::ConstRowExpr ConstTableView::get(size_t row_ndx) const noexcept -{ - REALM_ASSERT_ROW(row_ndx); - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get(to_size_t(real_ndx)); -} - -inline TableView::RowExpr TableView::front() noexcept -{ - return get(0); -} - -inline TableView::ConstRowExpr TableView::front() const noexcept -{ - return get(0); -} - -inline ConstTableView::ConstRowExpr ConstTableView::front() const noexcept -{ - return get(0); -} - -inline TableView::RowExpr TableView::back() noexcept -{ - size_t last_row_ndx = size() - 1; - return get(last_row_ndx); -} - -inline TableView::ConstRowExpr TableView::back() const noexcept -{ - size_t last_row_ndx = size() - 1; - return get(last_row_ndx); -} - -inline ConstTableView::ConstRowExpr ConstTableView::back() const noexcept -{ - size_t last_row_ndx = size() - 1; - return get(last_row_ndx); -} - -inline TableView::RowExpr TableView::operator[](size_t row_ndx) noexcept -{ - return get(row_ndx); -} - -inline TableView::ConstRowExpr TableView::operator[](size_t row_ndx) const noexcept -{ - return get(row_ndx); -} - -inline ConstTableView::ConstRowExpr -ConstTableView::operator[](size_t row_ndx) const noexcept -{ - return get(row_ndx); -} - - -// Subtables - - -inline TableRef TableView::get_subtable(size_t column_ndx, size_t row_ndx) -{ - REALM_ASSERT_INDEX_AND_TYPE_TABLE_OR_MIXED(column_ndx, row_ndx); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_subtable(column_ndx, to_size_t(real_ndx)); -} - -inline ConstTableRef TableView::get_subtable(size_t column_ndx, size_t row_ndx) const -{ - REALM_ASSERT_INDEX_AND_TYPE_TABLE_OR_MIXED(column_ndx, row_ndx); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_subtable(column_ndx, to_size_t(real_ndx)); -} - -inline ConstTableRef ConstTableView::get_subtable(size_t column_ndx, size_t row_ndx) const -{ - REALM_ASSERT_INDEX_AND_TYPE_TABLE_OR_MIXED(column_ndx, row_ndx); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->get_subtable(column_ndx, to_size_t(real_ndx)); -} - -inline void TableView::clear_subtable(size_t column_ndx, size_t row_ndx) -{ - REALM_ASSERT_INDEX_AND_TYPE_TABLE_OR_MIXED(column_ndx, row_ndx); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - return m_table->clear_subtable(column_ndx, to_size_t(real_ndx)); -} - - -// Setters - - -inline void TableView::set_int(size_t column_ndx, size_t row_ndx, int64_t value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Int); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_int(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_bool(size_t column_ndx, size_t row_ndx, bool value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Bool); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_bool(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_olddatetime(size_t column_ndx, size_t row_ndx, OldDateTime value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_OldDateTime); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_olddatetime(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_timestamp(size_t column_ndx, size_t row_ndx, Timestamp value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Timestamp); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_timestamp(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_float(size_t column_ndx, size_t row_ndx, float value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Float); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_float(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_double(size_t column_ndx, size_t row_ndx, double value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Double); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_double(column_ndx, to_size_t(real_ndx), value); -} - -template -inline void TableView::set_enum(size_t column_ndx, size_t row_ndx, E value) -{ - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_int(column_ndx, real_ndx, value); -} - -inline void TableView::set_string(size_t column_ndx, size_t row_ndx, StringData value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_String); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_string(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_binary(size_t column_ndx, size_t row_ndx, BinaryData value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Binary); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_binary(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_mixed(size_t column_ndx, size_t row_ndx, Mixed value) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Mixed); - - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_mixed(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_subtable(size_t column_ndx, size_t row_ndx, const Table* value) -{ - REALM_ASSERT_INDEX_AND_TYPE_TABLE_OR_MIXED(column_ndx, row_ndx); - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_subtable(column_ndx, to_size_t(real_ndx), value); -} - -inline void TableView::set_link(size_t column_ndx, size_t row_ndx, size_t target_row_ndx) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Link); - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->set_link(column_ndx, to_size_t(real_ndx), target_row_ndx); -} - -inline void TableView::nullify_link(size_t column_ndx, size_t row_ndx) -{ - REALM_ASSERT_INDEX_AND_TYPE(column_ndx, row_ndx, type_Link); - const int64_t real_ndx = m_row_indexes.get(row_ndx); - REALM_ASSERT(real_ndx != detached_ref); - m_table->nullify_link(column_ndx, to_size_t(real_ndx)); -} - -} // namespace realm - -#endif // REALM_TABLE_VIEW_HPP diff --git a/Pods/Realm/include/core/realm/table_view_basic.hpp b/Pods/Realm/include/core/realm/table_view_basic.hpp deleted file mode 100644 index 6acb4a89..00000000 --- a/Pods/Realm/include/core/realm/table_view_basic.hpp +++ /dev/null @@ -1,373 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TABLE_VIEW_BASIC_HPP -#define REALM_TABLE_VIEW_BASIC_HPP - -#include -#include -#include - -namespace realm { - - -/// Common base class for BasicTableView and BasicTableView. -/// -/// \tparam Impl Is either TableView or ConstTableView. -template -class BasicTableViewBase { -public: - typedef typename Tab::spec_type spec_type; - typedef Tab table_type; - - bool is_empty() const noexcept { return m_impl.is_empty(); } - bool is_attached() const noexcept { return m_impl.is_attached(); } - size_t size() const noexcept { return m_impl.size(); } - - // Get row index in the source table this view is "looking" at. - size_t get_source_ndx(size_t row_ndx) const noexcept - { - return m_impl.get_source_ndx(row_ndx); - } - - void to_json(std::ostream& out) const { m_impl.to_json(out); }; - void to_string(std::ostream& out, size_t limit=500) const - { - m_impl.to_string(out, limit); - } - void row_to_string(size_t row_ndx, std::ostream& out) const - { - m_impl.row_to_string(row_ndx, out); - } - -private: - typedef typename Tab::spec_type Spec; - - template - struct Col { - typedef typename util::TypeAt::type value_type; - typedef _impl::ColumnAccessor type; - }; - typedef typename Spec::template ColNames ColsAccessor; - - template - struct ConstCol { - typedef typename util::TypeAt::type value_type; - typedef _impl::ColumnAccessor type; - }; - typedef typename Spec::template ColNames ConstColsAccessor; - -public: - ColsAccessor column() noexcept - { - return ColsAccessor(static_cast(this)); - } - - ConstColsAccessor column() const noexcept - { - return ConstColsAccessor(static_cast(this)); - } - -private: - template - struct Field { - typedef typename util::TypeAt::type value_type; - typedef _impl::FieldAccessor::value> type; - }; - typedef std::pair FieldInit; - typedef typename Spec::template ColNames RowAccessor; - - template - struct ConstField { - typedef typename util::TypeAt::type value_type; - typedef _impl::FieldAccessor type; - }; - typedef std::pair ConstFieldInit; - typedef typename Spec::template ColNames ConstRowAccessor; - -public: - RowAccessor operator[](size_t row_idx) noexcept - { - return RowAccessor(std::make_pair(static_cast(this), row_idx)); - } - - ConstRowAccessor operator[](size_t row_idx) const noexcept - { - return ConstRowAccessor(std::make_pair(static_cast(this), row_idx)); - } - -protected: - template - friend class _impl::FieldAccessor; - - template - friend class _impl::MixedFieldAccessorBase; - - template - friend class BasicTable; - - Impl m_impl; - - BasicTableViewBase() {} - BasicTableViewBase(const BasicTableViewBase& tv, typename Impl::HandoverPatch& patch, - ConstSourcePayload mode) - : m_impl(tv.m_impl, patch, mode) { } - BasicTableViewBase(BasicTableViewBase& tv, typename Impl::HandoverPatch& patch, - MutableSourcePayload mode) - : m_impl(tv.m_impl, patch, mode) { } - BasicTableViewBase(Impl i): m_impl(std::move(i)) {} - - Impl* get_impl() noexcept { return &m_impl; } - const Impl* get_impl() const noexcept { return &m_impl; } -}; - - - - -/// A BasicTableView wraps a TableView and provides a type and -/// structure safe set of access methods. The TableView methods are -/// not visible through a BasicTableView. A BasicTableView is used -/// essentially the same way as a BasicTable. -/// -/// Note that this class is specialized for const-qualified parent -/// tables. -/// -/// There are three levels of consteness to consider. A 'const -/// BasicTableView' prohibits any modification of the table as -/// well as any modification of the table view, regardless of whether -/// Tab is const-qualified or not. -/// -/// A non-const 'BasicTableView' where Tab is const-qualified, -/// still does not allow any modification of the parent -/// table. However, the view itself may be modified, for example, by -/// reordering its rows. -/// -/// A non-const 'BasicTableView' where Tab is not -/// const-qualified, gives full modification access to both the parent -/// table and the view. -/// -/// Just like TableView, a BasicTableView has both copy and move -/// semantics. See TableView for more on this. -/// -/// \tparam Tab The possibly const-qualified parent table type. This -/// must always be an instance of the BasicTable template. -/// -template -class BasicTableView: public BasicTableViewBase, TableView> { -private: - typedef BasicTableViewBase, TableView> Base; - -public: - BasicTableView() {} - BasicTableView& operator=(BasicTableView); - friend BasicTableView move(BasicTableView& tv) { return BasicTableView(&tv); } - - // Deleting - void remove(size_t ndx, RemoveMode underlying_mode = RemoveMode::ordered); - void remove_last(RemoveMode underlying_mode = RemoveMode::ordered); - void clear(RemoveMode underlying_mode = RemoveMode::ordered); - - // Resort after requery - void apply_same_order(BasicTableView& order) { Base::m_impl.apply_same_order(order.m_impl); } - - Tab& get_parent() noexcept - { - return static_cast(Base::m_impl.get_parent()); - } - - const Tab& get_parent() const noexcept - { - return static_cast(Base::m_impl.get_parent()); - } - - -public: - void move_assign(BasicTableView& tv) - { - Base::m_impl.move_assign(tv.m_impl); - } - using HandoverPatch = TableViewHandoverPatch; - - std::unique_ptr> - clone_for_handover(std::unique_ptr& patch, ConstSourcePayload mode) const - { - patch.reset(new HandoverPatch); - std::unique_ptr> retval(new BasicTableView(*this, *patch, mode)); - return retval; - } - - std::unique_ptr> - clone_for_handover(std::unique_ptr& patch, MutableSourcePayload mode) - { - patch.reset(new HandoverPatch); - std::unique_ptr> retval(new BasicTableView(*this, *patch, mode)); - return retval; - } - - void apply_and_consume_patch(std::unique_ptr& patch, Group& group) - { - apply_patch(*patch, group); - patch.reset(); - } - - BasicTableView(const BasicTableView& source, HandoverPatch& patch, - ConstSourcePayload mode): - Base(source, patch, mode) - { - } - - BasicTableView(BasicTableView& source, HandoverPatch& patch, - MutableSourcePayload mode): - Base(source, patch, mode) - { - } - - void apply_patch(TableView::HandoverPatch& patch, Group& group) - { - Base::m_impl.apply_patch(patch, group); - } - -private: - BasicTableView(BasicTableView* tv): Base(move(tv->m_impl)) {} - BasicTableView(TableView tv): Base(std::move(tv)) {} - - template - Subtab* get_subtable_ptr(size_t column_ndx, size_t ndx) - { - return get_parent().template - get_subtable_ptr(column_ndx, Base::m_impl.get_source_ndx(ndx)); - } - - template - const Subtab* get_subtable_ptr(size_t column_ndx, size_t ndx) const - { - return get_parent().template - get_subtable_ptr(column_ndx, Base::m_impl.get_source_ndx(ndx)); - } - - friend class BasicTableView; - - template - friend class _impl::FieldAccessor; - - template - friend class _impl::MixedFieldAccessorBase; - - template - friend class _impl::ColumnAccessorBase; - - template - friend class _impl::ColumnAccessor; - - friend class Tab::Query; -}; - - - - -/// Specialization for 'const' access to parent table. -/// -template -class BasicTableView: - public BasicTableViewBase, ConstTableView> { -private: - typedef BasicTableViewBase, ConstTableView> Base; - -public: - BasicTableView() {} - BasicTableView& operator=(BasicTableView tv) { Base::m_impl = move(tv.m_impl); return *this; } - friend BasicTableView move(BasicTableView& tv) { return BasicTableView(&tv); } - - /// Construct BasicTableView from BasicTableView. - /// - BasicTableView(BasicTableView tv): Base(std::move(tv.m_impl)) {} - - /// Assign BasicTableView to BasicTableView. - /// - BasicTableView& operator=(BasicTableView tv) - { - Base::m_impl = std::move(tv.m_impl); - return *this; - } - - const Tab& get_parent() const noexcept - { - return static_cast(Base::m_impl.get_parent()); - } - -private: - BasicTableView(BasicTableView* tv): Base(move(tv->m_impl)) {} - BasicTableView(ConstTableView tv): Base(std::move(tv)) {} - - template - const Subtab* get_subtable_ptr(size_t column_ndx, size_t ndx) const - { - return get_parent().template - get_subtable_ptr(column_ndx, Base::m_impl.get_source_ndx(ndx)); - } - - template - friend class _impl::FieldAccessor; - - template - friend class _impl::MixedFieldAccessorBase; - - template - friend class _impl::ColumnAccessorBase; - - template - friend class _impl::ColumnAccessor; - - friend class Tab::Query; -}; - - - - -// Implementation - -template -inline BasicTableView& BasicTableView::operator=(BasicTableView tv) -{ - Base::m_impl = std::move(tv.m_impl); - return *this; -} - -template -inline void BasicTableView::remove(size_t ndx, RemoveMode underlying_mode) -{ - Base::m_impl.remove(ndx, underlying_mode); -} - -template -inline void BasicTableView::remove_last(RemoveMode underlying_mode) -{ - Base::m_impl.remove_last(underlying_mode); -} - -template -inline void BasicTableView::clear(RemoveMode underlying_mode) -{ - Base::m_impl.clear(underlying_mode); -} - -} // namespace realm - -#endif // REALM_TABLE_VIEW_BASIC_HPP diff --git a/Pods/Realm/include/core/realm/timestamp.hpp b/Pods/Realm/include/core/realm/timestamp.hpp deleted file mode 100644 index b7473c9f..00000000 --- a/Pods/Realm/include/core/realm/timestamp.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_TIMESTAMP_HPP -#define REALM_TIMESTAMP_HPP - -#include -#include -#include - -namespace realm { - -class Timestamp { -public: - // Construct from the number of seconds and nanoseconds since the UNIX epoch: 00:00:00 UTC on 1 January 1970 - // - // To split a native nanosecond representation, only division and modulo are necessary: - // - // s = native_nano / nanoseconds_per_second - // n = native_nano % nanoseconds_per_second - // Timestamp ts(s, n); - // - // To convert back into native nanosecond representation, simple multiply and add: - // - // native_nano = ts.s * nanoseconds_per_second + ts.n - // - // Specifically this allows the nanosecond part to become negative (only) for Timestamps before the UNIX epoch. - // Usually this will not need special attention, but for reference, valid Timestamps will have one of the - // following sign combinations: - // - // s | n - // ----- - // + | + - // + | 0 - // 0 | + - // 0 | 0 - // 0 | - - // - | 0 - // - | - - // - // Examples: - // The UNIX epoch is constructed by Timestamp(0, 0) - // Relative times are constructed as follows: - // +1 second is constructed by Timestamp(1, 0) - // +1 nanosecond is constructed by Timestamp(0, 1) - // +1.1 seconds (1100 milliseconds after the epoch) is constructed by Timestamp(1, 100000000) - // -1.1 seconds (1100 milliseconds before the epoch) is constructed by Timestamp(-1, -100000000) - // - Timestamp(int64_t seconds, int32_t nanoseconds) : m_seconds(seconds), m_nanoseconds(nanoseconds), m_is_null(false) - { - REALM_ASSERT_EX(-nanoseconds_per_second < nanoseconds && nanoseconds < nanoseconds_per_second, nanoseconds); - const bool both_non_negative = seconds >= 0 && nanoseconds >= 0; - const bool both_non_positive = seconds <= 0 && nanoseconds <= 0; - REALM_ASSERT_EX(both_non_negative || both_non_positive, both_non_negative, both_non_positive); - } - Timestamp(realm::null) : m_is_null(true) { } - Timestamp() : Timestamp(null{}) { } - - bool is_null() const { return m_is_null; } - - int64_t get_seconds() const noexcept - { - REALM_ASSERT(!m_is_null); - return m_seconds; - } - - int32_t get_nanoseconds() const noexcept - { - REALM_ASSERT(!m_is_null); - return m_nanoseconds; - } - - // Note that these operators do not work if one of the Timestamps are null! Please use realm::Greater, realm::Equal - // etc instead. This is in order to collect all treatment of null behaviour in a single place for all - // types (query_conditions.hpp) to ensure that all types sort and compare null vs. non-null in the same manner, - // especially for int/float where we cannot override operators. This design is open for discussion, though, because - // it has usability drawbacks - bool operator==(const Timestamp& rhs) const { REALM_ASSERT(!is_null()); REALM_ASSERT(!rhs.is_null()); return m_seconds == rhs.m_seconds && m_nanoseconds == rhs.m_nanoseconds; } - bool operator!=(const Timestamp& rhs) const { REALM_ASSERT(!is_null()); REALM_ASSERT(!rhs.is_null()); return m_seconds != rhs.m_seconds || m_nanoseconds != rhs.m_nanoseconds; } - bool operator>(const Timestamp& rhs) const { REALM_ASSERT(!is_null()); REALM_ASSERT(!rhs.is_null()); return (m_seconds > rhs.m_seconds) || (m_seconds == rhs.m_seconds && m_nanoseconds > rhs.m_nanoseconds); } - bool operator<(const Timestamp& rhs) const { REALM_ASSERT(!is_null()); REALM_ASSERT(!rhs.is_null()); return (m_seconds < rhs.m_seconds) || (m_seconds == rhs.m_seconds && m_nanoseconds < rhs.m_nanoseconds); } - bool operator<=(const Timestamp& rhs) const { REALM_ASSERT(!is_null()); REALM_ASSERT(!rhs.is_null()); return *this < rhs || *this == rhs; } - bool operator>=(const Timestamp& rhs) const { REALM_ASSERT(!is_null()); REALM_ASSERT(!rhs.is_null()); return *this > rhs || *this == rhs; } - Timestamp& operator=(const Timestamp& rhs) = default; - - template - friend std::basic_ostream& operator<<(std::basic_ostream& out, const Timestamp&); - static constexpr int32_t nanoseconds_per_second = 1000000000; - -private: - int64_t m_seconds; - int32_t m_nanoseconds; - bool m_is_null; -}; - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const Timestamp& d) -{ - out << "Timestamp(" << d.m_seconds << ", " << d.m_nanoseconds << ")"; - return out; -} - -} // namespace realm - -#endif // REALM_TIMESTAMP_HPP diff --git a/Pods/Realm/include/core/realm/unicode.hpp b/Pods/Realm/include/core/realm/unicode.hpp deleted file mode 100644 index 4d2dcd5e..00000000 --- a/Pods/Realm/include/core/realm/unicode.hpp +++ /dev/null @@ -1,153 +0,0 @@ -/************************************************************************* -* -* REALM CONFIDENTIAL -* __________________ -* -* [2011] - [2015] Realm Inc -* All Rights Reserved. -* -* NOTICE: All information contained herein is, and remains -* the property of Realm Incorporated and its suppliers, -* if any. The intellectual and technical concepts contained -* herein are proprietary to Realm Incorporated -* and its suppliers and may be covered by U.S. and Foreign Patents, -* patents in process, and are protected by trade secret or copyright law. -* Dissemination of this information or reproduction of this material -* is strictly forbidden unless prior written permission is obtained -* from Realm Incorporated. -* -**************************************************************************/ -#ifndef REALM_UNICODE_HPP -#define REALM_UNICODE_HPP - -#include -#include -#include - -#include -#include -#include -#include - - -namespace realm { - - enum string_compare_method_t { STRING_COMPARE_CORE, STRING_COMPARE_CPP11, STRING_COMPARE_CALLBACK } ; - - extern StringCompareCallback string_compare_callback; - extern string_compare_method_t string_compare_method; - - // Description for set_string_compare_method(): - // - // Short summary: iOS language binding: call - // set_string_compare_method() for fast but slightly inaccurate sort in some countries, or - // set_string_compare_method(2, callbackptr) for slow but precise sort (see callbackptr below) - // - // Different countries ('locales') have different sorting order for strings and letters. Because there unfortunatly - // doesn't exist any unified standardized way to compare strings in C++ on multiple platforms, we need this method. - // - // It determins how sorting a TableView by a String column must take place. The 'method' argument can be: - // - // 0: Fast core-only compare (no OS/framework calls). LIMITATIONS: Works only upto 'Latin Extended 2' (unicodes - // 0...591). Also, sorting order is according to 'en_US' so it may be slightly inaccurate for some countries. - // 'callback' argument is ignored. - // - // Return value: Always 'true' - // - // 1: Native C++11 method if core is compiled as C++11. Gives precise sorting according - // to user's current locale. LIMITATIONS: Currently works only on Windows and on Linux with clang. Does NOT work on - // iOS (due to only 'C' locale being available in CoreFoundation, which puts 'Z' before 'a'). Unknown if works on - // Windows Phone / Android. Furthermore it does NOT work on Linux with gcc 4.7 or 4.8 (lack of c++11 feature that - // can convert utf8->wstring without calls to setlocale()). - // - // Return value: 'true' if supported, otherwise 'false' (if so, then previous setting, if any, is preserved). - // - // 2: Callback method. Language binding / C++ user must provide a utf-8 callback method of prototype: - // bool callback(const char* string1, const char* string2) where 'callback' must return bool(string1 < string2). - // - // Return value: Always 'true' - // - // Default is method = 0 if the function is never called - // - // NOT THREAD SAFE! Call once during initialization or make sure it's not called simultaneously with different arguments - // The setting is remembered per-process; it does NOT need to be called prior to each sort - bool set_string_compare_method(string_compare_method_t method, StringCompareCallback callback); - - - // Return size in bytes of utf8 character. No error checking - size_t sequence_length(char lead); - - // Limitations for case insensitive string search - // Case insensitive search (equal, begins_with, ends_with and contains) - // only works for unicodes 0...0x7f which is the same as the 0...127 - // ASCII character set (letters a-z and A-Z). - - // In does *not* work for the 0...255 ANSI character set that contains - // characters from many European countries like Germany, France, Denmark, - // etc. - - // It also does not work for characters from non-western countries like - // Japan, Russia, Arabia, etc. - - // If there exists characters outside the ASCII range either in the text - // to be searched for, or in the Realm string column which is searched - // in, then the compare yields a random result such that the row may or - // may not be included in the result set. - - // Return bool(string1 < string2) - bool utf8_compare(StringData string1, StringData string2); - - // Return unicode value of character. - uint32_t utf8value(const char* character); - - inline bool equal_sequence(const char*& begin, const char* end, const char* begin2); - - // FIXME: The current approach to case insensitive comparison requires - // that case mappings can be done in a way that does not change he - // number of bytes used to encode the individual Unicode - // character. This is not generally the case, so, as far as I can see, - // this approach has no future. - // - // FIXME: The current approach to case insensitive comparison relies - // on checking each "haystack" character against the corresponding - // character in both a lower cased and an upper cased version of the - // "needle". While this leads to efficient comparison, it ignores the - // fact that "case folding" is the only correct approach to case - // insensitive comparison in a locale agnostic Unicode - // environment. - // - // See - // http://www.w3.org/International/wiki/Case_folding - // http://userguide.icu-project.org/transforms/casemappings#TOC-Case-Folding. - // - // The ideal API would probably be something like this: - // - // case_fold: utf_8 -> case_folded - // equal_case_fold: (needle_case_folded, single_haystack_entry_utf_8) -> found - // search_case_fold: (needle_case_folded, huge_haystack_string_utf_8) -> found_at_position - // - // The case folded form would probably be using UTF-32 or UTF-16. - - - /// If successful, returns a string of the same size as \a source. - /// Returns none if invalid UTF-8 encoding was encountered. - util::Optional case_map(StringData source, bool upper); - - enum IgnoreErrorsTag { IgnoreErrors }; - std::string case_map(StringData source, bool upper, IgnoreErrorsTag); - - /// Assumes that the sizes of \a needle_upper and \a needle_lower are - /// identical to the size of \a haystack. Returns false if the needle - /// is different from the haystack. - bool equal_case_fold(StringData haystack, const char* needle_upper, const char* needle_lower); - - /// Assumes that the sizes of \a needle_upper and \a needle_lower are - /// both equal to \a needle_size. Returns haystack.size() if the - /// needle was not found. - size_t search_case_fold(StringData haystack, const char* needle_upper, - const char* needle_lower, size_t needle_size); - - -} // namespace realm - -#endif // REALM_UNICODE_HPP diff --git a/Pods/Realm/include/core/realm/util/assert.hpp b/Pods/Realm/include/core/realm/util/assert.hpp deleted file mode 100644 index 92f586c6..00000000 --- a/Pods/Realm/include/core/realm/util/assert.hpp +++ /dev/null @@ -1,100 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_ASSERT_HPP -#define REALM_UTIL_ASSERT_HPP - -#include -#include - -#if REALM_ENABLE_ASSERTIONS || defined(REALM_DEBUG) -# define REALM_ASSERTIONS_ENABLED 1 -#endif - -#define REALM_ASSERT_RELEASE(condition) \ - ((condition) ? static_cast(0) : \ - realm::util::terminate("Assertion failed: " #condition, __FILE__, __LINE__)) - -#if REALM_ASSERTIONS_ENABLED -# define REALM_ASSERT(condition) REALM_ASSERT_RELEASE(condition) -#else -# define REALM_ASSERT(condition) static_cast(sizeof bool(condition)) -#endif - -#ifdef REALM_DEBUG -# define REALM_ASSERT_DEBUG(condition) REALM_ASSERT_RELEASE(condition) -#else -# define REALM_ASSERT_DEBUG(condition) static_cast(sizeof bool(condition)) -#endif - -#define REALM_STRINGIFY(X) #X - -#define REALM_ASSERT_RELEASE_EX(condition, ...) \ - ((condition) ? static_cast(0) : \ - realm::util::terminate_with_info("Assertion failed: " # condition, __LINE__, __FILE__, \ - REALM_STRINGIFY((__VA_ARGS__)), __VA_ARGS__)) - -#ifdef REALM_DEBUG -# define REALM_ASSERT_DEBUG_EX REALM_ASSERT_RELEASE_EX -#else -# define REALM_ASSERT_DEBUG_EX(condition, ...) static_cast(sizeof bool(condition)) -#endif - -// Becase the assert is used in noexcept methods, it's a bad idea to allocate -// buffer space for the message so therefore we must pass it to terminate which -// will 'cerr' it for us without needing any buffer -#if REALM_ENABLE_ASSERTIONS || defined(REALM_DEBUG) - -# define REALM_ASSERT_EX REALM_ASSERT_RELEASE_EX - -# define REALM_ASSERT_3(left, cmp, right) \ - (((left) cmp (right)) ? static_cast(0) : \ - realm::util::terminate("Assertion failed: " \ - "" #left " " #cmp " " #right, \ - __FILE__, __LINE__, left, right)) - -# define REALM_ASSERT_7(left1, cmp1, right1, logical, left2, cmp2, right2) \ - ((((left1) cmp1 (right1)) logical ((left2) cmp2 (right2))) ? static_cast(0) : \ - realm::util::terminate("Assertion failed: " \ - "" #left1 " " #cmp1 " " #right1 " " #logical " " \ - "" #left2 " " #cmp2 " " #right2, \ - __FILE__, __LINE__, left1, right1, left2, right2)) - -# define REALM_ASSERT_11(left1, cmp1, right1, logical1, left2, cmp2, right2, logical2, left3, cmp3, right3) \ - ((((left1) cmp1 (right1)) logical1 ((left2) cmp2 (right2)) logical2 ((left3) cmp3 (right3))) ? static_cast(0) : \ - realm::util::terminate("Assertion failed: " \ - "" #left1 " " #cmp1 " " #right1 " " #logical1 " " \ - "" #left2 " " #cmp2 " " #right2 " " #logical2 " " \ - "" #left3 " " #cmp3 " " #right3, \ - __FILE__, __LINE__, left1, right1, left2, right2, left3, right3)) -#else -# define REALM_ASSERT_EX(condition, ...) \ - static_cast(sizeof bool(condition)) -# define REALM_ASSERT_3(left, cmp, right) \ - static_cast(sizeof bool((left) cmp (right))) -# define REALM_ASSERT_7(left1, cmp1, right1, logical, left2, cmp2, right2) \ - static_cast(sizeof bool(((left1) cmp1 (right1)) logical ((left2) cmp2 (right2)))) -# define REALM_ASSERT_11(left1, cmp1, right1, logical1, left2, cmp2, right2, logical2, left3, cmp3, right3) \ - static_cast(sizeof bool(((left1) cmp1 (right1)) logical1 ((left2) cmp2 (right2)) logical2 ((left3) cmp3 (right3)))) -#endif - -#define REALM_UNREACHABLE() \ - realm::util::terminate("Unreachable code", __FILE__, __LINE__) - -#endif // REALM_UTIL_ASSERT_HPP diff --git a/Pods/Realm/include/core/realm/util/basic_system_errors.hpp b/Pods/Realm/include/core/realm/util/basic_system_errors.hpp deleted file mode 100644 index 2d78b865..00000000 --- a/Pods/Realm/include/core/realm/util/basic_system_errors.hpp +++ /dev/null @@ -1,90 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_BASIC_SYSTEM_ERRORS_HPP -#define REALM_UTIL_BASIC_SYSTEM_ERRORS_HPP - -#include -#include - - -namespace realm { -namespace util { -namespace error { - -enum basic_system_errors { - /// Address family not supported by protocol. - address_family_not_supported = EAFNOSUPPORT, - - /// Invalid argument. - invalid_argument = EINVAL, - - /// Cannot allocate memory. - no_memory = ENOMEM, - - /// Operation cancelled. - operation_aborted = ECANCELED, - - /// Connection aborted. - connection_aborted = ECONNABORTED, - - /// Connection reset by peer - connection_reset = ECONNRESET, - - /// Broken pipe - broken_pipe = EPIPE, -}; - -std::error_code make_error_code(basic_system_errors) noexcept; - -} // namespace error -} // namespace util -} // namespace realm - -namespace std { - -template<> -class is_error_code_enum -{ -public: - static const bool value = true; -}; - -} // namespace std - -namespace realm { -namespace util { - -std::error_code make_basic_system_error_code(int) noexcept; - - - - -// implementation - -inline std::error_code make_basic_system_error_code(int err) noexcept -{ - using namespace error; - return make_error_code(basic_system_errors(err)); -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_BASIC_SYSTEM_ERRORS_HPP diff --git a/Pods/Realm/include/core/realm/util/bind_ptr.hpp b/Pods/Realm/include/core/realm/util/bind_ptr.hpp deleted file mode 100644 index 0e2b1ad5..00000000 --- a/Pods/Realm/include/core/realm/util/bind_ptr.hpp +++ /dev/null @@ -1,367 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_BIND_PTR_HPP -#define REALM_UTIL_BIND_PTR_HPP - -#include -#include -#include -#include - -#include -#include - - -namespace realm { -namespace util { - -class bind_ptr_base { -public: - struct adopt_tag {}; -}; - - -/// A generic intrusive smart pointer that binds itself explicitely to -/// the target object. -/// -/// This class is agnostic towards what 'binding' means for the target -/// object, but a common use is 'reference counting'. See RefCountBase -/// for an example of that. -/// -/// This smart pointer implementation assumes that the target object -/// destructor never throws. -template class bind_ptr: public bind_ptr_base { -public: - constexpr bind_ptr() noexcept: m_ptr(nullptr) {} - ~bind_ptr() noexcept { unbind(); } - - explicit bind_ptr(T* p) noexcept { bind(p); } - template explicit bind_ptr(U* p) noexcept { bind(p); } - - bind_ptr(T* p, adopt_tag) noexcept { m_ptr = p; } - template bind_ptr(U* p, adopt_tag) noexcept { m_ptr = p; } - - // Copy construct - bind_ptr(const bind_ptr& p) noexcept { bind(p.m_ptr); } - template - bind_ptr(const bind_ptr& p) noexcept { bind(p.m_ptr); } - - // Copy assign - bind_ptr& operator=(const bind_ptr& p) noexcept { bind_ptr(p).swap(*this); return *this; } - template - bind_ptr& operator=(const bind_ptr& p) noexcept { bind_ptr(p).swap(*this); return *this; } - - // Move construct - bind_ptr(bind_ptr&& p) noexcept: m_ptr(p.release()) {} - template - bind_ptr(bind_ptr&& p) noexcept: m_ptr(p.release()) {} - - // Move assign - bind_ptr& operator=(bind_ptr&& p) noexcept { bind_ptr(std::move(p)).swap(*this); return *this; } - template - bind_ptr& operator=(bind_ptr&& p) noexcept { bind_ptr(std::move(p)).swap(*this); return *this; } - - //@{ - // Comparison - template - bool operator==(const bind_ptr&) const noexcept; - - template - bool operator==(U*) const noexcept; - - template - bool operator!=(const bind_ptr&) const noexcept; - - template - bool operator!=(U*) const noexcept; - - template - bool operator<(const bind_ptr&) const noexcept; - - template - bool operator<(U*) const noexcept; - - template - bool operator>(const bind_ptr&) const noexcept; - - template - bool operator>(U*) const noexcept; - - template - bool operator<=(const bind_ptr&) const noexcept; - - template - bool operator<=(U*) const noexcept; - - template - bool operator>=(const bind_ptr&) const noexcept; - - template - bool operator>=(U*) const noexcept; - //@} - - // Dereference - T& operator*() const noexcept { return *m_ptr; } - T* operator->() const noexcept { return m_ptr; } - - explicit operator bool() const noexcept { return m_ptr != 0; } - - T* get() const noexcept { return m_ptr; } - void reset() noexcept { bind_ptr().swap(*this); } - void reset(T* p) noexcept { bind_ptr(p).swap(*this); } - template - void reset(U* p) noexcept { bind_ptr(p).swap(*this); } - - T* release() noexcept { T* const p = m_ptr; m_ptr = nullptr; return p; } - - void swap(bind_ptr& p) noexcept { std::swap(m_ptr, p.m_ptr); } - friend void swap(bind_ptr& a, bind_ptr& b) noexcept { a.swap(b); } - -protected: - struct casting_move_tag {}; - template - bind_ptr(bind_ptr* p, casting_move_tag) noexcept: - m_ptr(static_cast(p->release())) {} - -private: - T* m_ptr; - - void bind(T* p) noexcept { if (p) p->bind_ptr(); m_ptr = p; } - void unbind() noexcept { if (m_ptr) m_ptr->unbind_ptr(); } - - template friend class bind_ptr; -}; - - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const bind_ptr& p) -{ - out << static_cast(p.get()); - return out; -} - - -//@{ -// Comparison -template -bool operator==(T*, const bind_ptr&) noexcept; -template -bool operator!=(T*, const bind_ptr&) noexcept; -template -bool operator<(T*, const bind_ptr&) noexcept; -template -bool operator>(T*, const bind_ptr&) noexcept; -template -bool operator<=(T*, const bind_ptr&) noexcept; -template -bool operator>=(T*, const bind_ptr&) noexcept; -//@} - - - -/// Polymorphic convenience base class for reference counting objects. -/// -/// Together with bind_ptr, this class delivers simple instrusive -/// reference counting. -/// -/// \sa bind_ptr -class RefCountBase { -public: - RefCountBase() noexcept: m_ref_count(0) {} - virtual ~RefCountBase() noexcept { REALM_ASSERT(m_ref_count == 0); } - - RefCountBase(const RefCountBase&) = delete; - RefCountBase(RefCountBase&&) = delete; - - void operator=(const RefCountBase&) = delete; - void operator=(RefCountBase&&) = delete; - -protected: - void bind_ptr() const noexcept { ++m_ref_count; } - void unbind_ptr() const noexcept { if (--m_ref_count == 0) delete this; } - -private: - mutable unsigned long m_ref_count; - - template friend class bind_ptr; -}; - - -/// Same as RefCountBase, but this one makes the copying of, and the -/// destruction of counted references thread-safe. -/// -/// \sa RefCountBase -/// \sa bind_ptr -class AtomicRefCountBase { -public: - AtomicRefCountBase() noexcept: m_ref_count(0) {} - virtual ~AtomicRefCountBase() noexcept { REALM_ASSERT(m_ref_count == 0); } - - AtomicRefCountBase(const AtomicRefCountBase&) = delete; - AtomicRefCountBase(AtomicRefCountBase&&) = delete; - - void operator=(const AtomicRefCountBase&) = delete; - void operator=(AtomicRefCountBase&&) = delete; - -protected: - // FIXME: Operators ++ and -- as used below use - // std::memory_order_seq_cst. I'm not sure whether this is the - // choice that leads to maximum efficiency, but at least it is - // safe. - void bind_ptr() const noexcept { ++m_ref_count; } - void unbind_ptr() const noexcept { if (--m_ref_count == 0) delete this; } - -private: - mutable std::atomic m_ref_count; - - template friend class bind_ptr; -}; - - - - - -// Implementation: - -template -template -bool bind_ptr::operator==(const bind_ptr& p) const noexcept -{ - return m_ptr == p.m_ptr; -} - -template -template -bool bind_ptr::operator==(U* p) const noexcept -{ - return m_ptr == p; -} - -template -template -bool bind_ptr::operator!=(const bind_ptr& p) const noexcept -{ - return m_ptr != p.m_ptr; -} - -template -template -bool bind_ptr::operator!=(U* p) const noexcept -{ - return m_ptr != p; -} - -template -template -bool bind_ptr::operator<(const bind_ptr& p) const noexcept -{ - return m_ptr < p.m_ptr; -} - -template -template -bool bind_ptr::operator<(U* p) const noexcept -{ - return m_ptr < p; -} - -template -template -bool bind_ptr::operator>(const bind_ptr& p) const noexcept -{ - return m_ptr > p.m_ptr; -} - -template -template -bool bind_ptr::operator>(U* p) const noexcept -{ - return m_ptr > p; -} - -template -template -bool bind_ptr::operator<=(const bind_ptr& p) const noexcept -{ - return m_ptr <= p.m_ptr; -} - -template -template -bool bind_ptr::operator<=(U* p) const noexcept -{ - return m_ptr <= p; -} - -template -template -bool bind_ptr::operator>=(const bind_ptr& p) const noexcept -{ - return m_ptr >= p.m_ptr; -} - -template -template -bool bind_ptr::operator>=(U* p) const noexcept -{ - return m_ptr >= p; -} - -template -bool operator==(T* a, const bind_ptr& b) noexcept -{ - return b == a; -} - -template -bool operator!=(T* a, const bind_ptr& b) noexcept -{ - return b != a; -} - -template -bool operator<(T* a, const bind_ptr& b) noexcept -{ - return b > a; -} - -template -bool operator>(T* a, const bind_ptr& b) noexcept -{ - return b < a; -} - -template -bool operator<=(T* a, const bind_ptr& b) noexcept -{ - return b >= a; -} - -template -bool operator>=(T* a, const bind_ptr& b) noexcept -{ - return b <= a; -} - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_BIND_PTR_HPP diff --git a/Pods/Realm/include/core/realm/util/buffer.hpp b/Pods/Realm/include/core/realm/util/buffer.hpp deleted file mode 100644 index cec3dcf4..00000000 --- a/Pods/Realm/include/core/realm/util/buffer.hpp +++ /dev/null @@ -1,260 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_BUFFER_HPP -#define REALM_UTIL_BUFFER_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace realm { -namespace util { - - -/// A simple buffer concept that owns a region of memory and knows its -/// size. -template -class Buffer { -public: - Buffer() noexcept: m_size(0) {} - explicit Buffer(size_t size); - Buffer(Buffer&&) noexcept = default; - ~Buffer() noexcept {} - - Buffer& operator=(Buffer&&) noexcept = default; - - T& operator[](size_t i) noexcept { return m_data[i]; } - const T& operator[](size_t i) const noexcept { return m_data[i]; } - - T* data() noexcept { return m_data.get(); } - const T* data() const noexcept { return m_data.get(); } - size_t size() const noexcept { return m_size; } - - /// False iff the data() returns null. - explicit operator bool() const noexcept { return bool(m_data); } - - /// Discards the original contents. - void set_size(size_t new_size); - - /// \param copy_begin, copy_end Specifies a range of element - /// values to be retained. \a copy_end must be less than, or equal - /// to size(). - /// - /// \param copy_to Specifies where the retained range should be - /// copied to. `\a copy_to + \a copy_end - \a copy_begin` must be - /// less than, or equal to \a new_size. - void resize(size_t new_size, size_t copy_begin, size_t copy_end, - size_t copy_to); - - void reserve(size_t used_size, size_t min_capacity); - - void reserve_extra(size_t used_size, size_t min_extra_capacity); - - T* release() noexcept; - - friend void swap(Buffer&a, Buffer&b) noexcept - { - using std::swap; - swap(a.m_data, b.m_data); - swap(a.m_size, b.m_size); - } - -private: - std::unique_ptr m_data; - size_t m_size; -}; - - -/// A buffer that can be efficiently resized. It acheives this by -/// using an underlying buffer that may be larger than the logical -/// size, and is automatically expanded in progressively larger steps. -template -class AppendBuffer { -public: - AppendBuffer() noexcept; - ~AppendBuffer() noexcept {} - - /// Returns the current size of the buffer. - size_t size() const noexcept; - - /// Gives read and write access to the elements. - T* data() noexcept; - - /// Gives read access the elements. - const T* data() const noexcept; - - /// Append the specified elements. This increases the size of this - /// buffer by \a size. If the caller has previously requested a - /// minimum capacity that is greater than, or equal to the - /// resulting size, this function is guaranteed to not throw. - void append(const T* data, size_t size); - - /// If the specified size is less than the current size, then the - /// buffer contents is truncated accordingly. If the specified - /// size is greater than the current size, then the extra elements - /// will have undefined values. If the caller has previously - /// requested a minimum capacity that is greater than, or equal to - /// the specified size, this function is guaranteed to not throw. - void resize(size_t size); - - /// This operation does not change the size of the buffer as - /// returned by size(). If the specified capacity is less than the - /// current capacity, this operation has no effect. - void reserve(size_t min_capacity); - - /// Set the size to zero. The capacity remains unchanged. - void clear() noexcept; - -private: - util::Buffer m_buffer; - size_t m_size; -}; - - - - -// Implementation: - -class BufferSizeOverflow: public std::exception { -public: - const char* what() const noexcept override - { - return "Buffer size overflow"; - } -}; - -template -inline Buffer::Buffer(size_t size): - m_data(new T[size]), // Throws - m_size(size) -{ -} - -template -inline void Buffer::set_size(size_t new_size) -{ - m_data.reset(new T[new_size]); // Throws - m_size = new_size; -} - -template -inline void Buffer::resize(size_t new_size, size_t copy_begin, - size_t copy_end, size_t copy_to) -{ - std::unique_ptr new_data(new T[new_size]); // Throws - std::copy(m_data.get() + copy_begin, m_data.get() + copy_end, new_data.get() + copy_to); - m_data.reset(new_data.release()); - m_size = new_size; -} - -template -inline void Buffer::reserve(size_t used_size, - size_t min_capacity) -{ - size_t current_capacity = m_size; - if (REALM_LIKELY(current_capacity >= min_capacity)) - return; - size_t new_capacity = current_capacity; - if (REALM_UNLIKELY(int_multiply_with_overflow_detect(new_capacity, 2))) - new_capacity = std::numeric_limits::max(); - if (REALM_UNLIKELY(new_capacity < min_capacity)) - new_capacity = min_capacity; - resize(new_capacity, 0, used_size, 0); // Throws -} - -template -inline void Buffer::reserve_extra(size_t used_size, - size_t min_extra_capacity) -{ - size_t min_capacity = used_size; - if (REALM_UNLIKELY(int_add_with_overflow_detect(min_capacity, min_extra_capacity))) - throw BufferSizeOverflow(); - reserve(used_size, min_capacity); // Throws -} - -template -inline T* Buffer::release() noexcept -{ - m_size = 0; - return m_data.release(); -} - - -template -inline AppendBuffer::AppendBuffer() noexcept: m_size(0) -{ -} - -template -inline size_t AppendBuffer::size() const noexcept -{ - return m_size; -} - -template -inline T* AppendBuffer::data() noexcept -{ - return m_buffer.data(); -} - -template -inline const T* AppendBuffer::data() const noexcept -{ - return m_buffer.data(); -} - -template -inline void AppendBuffer::append(const T* data, size_t size) -{ - m_buffer.reserve_extra(m_size, size); // Throws - std::copy(data, data+size, m_buffer.data()+m_size); - m_size += size; -} - -template -inline void AppendBuffer::reserve(size_t min_capacity) -{ - m_buffer.reserve(m_size, min_capacity); -} - -template -inline void AppendBuffer::resize(size_t size) -{ - reserve(size); - m_size = size; -} - -template -inline void AppendBuffer::clear() noexcept -{ - m_size = 0; -} - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_BUFFER_HPP diff --git a/Pods/Realm/include/core/realm/util/call_with_tuple.hpp b/Pods/Realm/include/core/realm/util/call_with_tuple.hpp deleted file mode 100644 index 5605da45..00000000 --- a/Pods/Realm/include/core/realm/util/call_with_tuple.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_CALL_WITH_TUPLE_HPP -#define REALM_UTIL_CALL_WITH_TUPLE_HPP - -#include -#include - -namespace realm { -namespace _impl { - -template struct Indexes {}; -template struct GenIndexes: GenIndexes {}; -template struct GenIndexes<0, I...> { typedef Indexes type; }; - -template -auto call_with_tuple(F func, std::tuple args, Indexes) - -> decltype(func(std::get(args)...)) -{ - static_cast(args); // Prevent GCC warning when tuple is empty - return func(std::get(args)...); -} - -} // namespace _impl - -namespace util { - -template -auto call_with_tuple(F func, std::tuple args) - -> decltype(_impl::call_with_tuple(std::move(func), std::move(args), - typename _impl::GenIndexes::type())) -{ - return _impl::call_with_tuple(std::move(func), std::move(args), - typename _impl::GenIndexes::type()); -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_CALL_WITH_TUPLE_HPP diff --git a/Pods/Realm/include/core/realm/util/config.h b/Pods/Realm/include/core/realm/util/config.h deleted file mode 100644 index 32fc9568..00000000 --- a/Pods/Realm/include/core/realm/util/config.h +++ /dev/null @@ -1,26 +0,0 @@ -/************************************************************************* - * - * CAUTION: DO NOT EDIT THIS FILE -- YOUR CHANGES WILL BE LOST! - * - * This file is generated by config.sh - * - *************************************************************************/ - -#define REALM_VERSION "unknown" - -#define REALM_INSTALL_PREFIX "/Users/realm/workspace/core_osx/install" -#define REALM_INSTALL_EXEC_PREFIX "/Users/realm/workspace/core_osx/install" -#define REALM_INSTALL_INCLUDEDIR "/Users/realm/workspace/core_osx/install/include" -#define REALM_INSTALL_BINDIR "/Users/realm/workspace/core_osx/install/bin" -#define REALM_INSTALL_LIBDIR "/Users/realm/workspace/core_osx/install/lib" -#define REALM_INSTALL_LIBEXECDIR "/Users/realm/workspace/core_osx/install/libexec" - -#ifdef REALM_DEBUG -# define REALM_MAX_BPNODE_SIZE 1000 -#else -# define REALM_MAX_BPNODE_SIZE 1000 -#endif - -#define REALM_ENABLE_ALLOC_SET_ZERO 0 -#define REALM_ENABLE_ENCRYPTION 1 -#define REALM_ENABLE_ASSERTIONS 1 diff --git a/Pods/Realm/include/core/realm/util/encrypted_file_mapping.hpp b/Pods/Realm/include/core/realm/util/encrypted_file_mapping.hpp deleted file mode 100644 index 1fccb27f..00000000 --- a/Pods/Realm/include/core/realm/util/encrypted_file_mapping.hpp +++ /dev/null @@ -1,157 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_UTIL_ENCRYPTED_FILE_MAPPING_HPP -#define REALM_UTIL_ENCRYPTED_FILE_MAPPING_HPP - -#include -#include -#include - -#if REALM_ENABLE_ENCRYPTION - -typedef size_t (*Header_to_size)(const char* addr); - -#include - -namespace realm { -namespace util { - -struct SharedFileInfo; -class EncryptedFileMapping; - -class EncryptedFileMapping { -public: - // Adds the newly-created object to file.mappings iff it's successfully constructed - EncryptedFileMapping(SharedFileInfo& file, size_t file_offset, - void* addr, size_t size, File::AccessMode access); - ~EncryptedFileMapping(); - - // Write all dirty pages to disk and mark them read-only - // Does not call fsync - void flush() noexcept; - - // Sync this file to disk - void sync() noexcept; - - // Make sure that memory in the specified range is synchronized with any - // changes made globally visible through call to write_barrier - void read_barrier(const void* addr, size_t size, - UniqueLock& lock, - Header_to_size header_to_size); - - // Ensures that any changes made to memory in the specified range - // becomes visible to any later calls to read_barrier() - void write_barrier(const void* addr, size_t size) noexcept; - - // Set this mapping to a new address and size - // Flushes any remaining dirty pages from the old mapping - void set(void* new_addr, size_t new_size, size_t new_file_offset); - -private: - SharedFileInfo& m_file; - - size_t m_page_shift; - size_t m_blocks_per_page; - - void* m_addr = nullptr; - size_t m_file_offset = 0; - - uintptr_t m_first_page; - size_t m_page_count = 0; - - std::vector m_up_to_date_pages; - std::vector m_dirty_pages; - - File::AccessMode m_access; - -#ifdef REALM_DEBUG - std::unique_ptr m_validate_buffer; -#endif - - char* page_addr(size_t i) const noexcept; - - void mark_outdated(size_t i) noexcept; - void mark_up_to_date(size_t i) noexcept; - void mark_unwritable(size_t i) noexcept; - - bool copy_up_to_date_page(size_t i) noexcept; - void refresh_page(size_t i); - void write_page(size_t i) noexcept; - - void validate_page(size_t i) noexcept; - void validate() noexcept; -}; - - - -inline void EncryptedFileMapping::read_barrier(const void* addr, size_t size, - UniqueLock& lock, - Header_to_size header_to_size) -{ - size_t first_accessed_page = reinterpret_cast(addr) >> m_page_shift; - size_t first_idx = first_accessed_page - m_first_page; - - // make sure the first page is available - if (!m_up_to_date_pages[first_idx]) { - if (!lock.holds_lock()) - lock.lock(); - refresh_page(first_idx); - } - - if (header_to_size) { - - // We know it's an array, and array headers are 8-byte aligned, so it is - // included in the first page which was handled above. - size = header_to_size(static_cast(addr)); - } - size_t last_accessed_page = (reinterpret_cast(addr)+size-1) >> m_page_shift; - size_t last_idx = last_accessed_page - m_first_page; - - for (size_t idx = first_idx+1; idx <= last_idx; ++idx) { - if (!m_up_to_date_pages[idx]) { - if (!lock.holds_lock()) - lock.lock(); - refresh_page(idx); - } - } -} - - - - -} -} - -#endif // REALM_ENABLE_ENCRYPTION - -namespace realm { -namespace util { - -/// Thrown by EncryptedFileMapping if a file opened is non-empty and does not -/// contain valid encrypted data -struct DecryptionFailed: util::File::AccessError { - DecryptionFailed(): util::File::AccessError("Decryption failed", std::string()) {} -}; - -} -} - -#endif // REALM_UTIL_ENCRYPTED_FILE_MAPPING_HPP diff --git a/Pods/Realm/include/core/realm/util/event_loop.hpp b/Pods/Realm/include/core/realm/util/event_loop.hpp deleted file mode 100644 index 79f4fafd..00000000 --- a/Pods/Realm/include/core/realm/util/event_loop.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_UTIL_EVENT_LOOP_HPP -#define REALM_UTIL_EVENT_LOOP_HPP - -#include - -namespace realm { -namespace util { - -class SocketBase; -class DeadlineTimerBase; -class ResolverBase; - -class EventLoopBase { -public: - virtual ~EventLoopBase() {} - - using Duration = std::chrono::milliseconds; - - using OnConnectComplete = std::function; - using OnTimeout = std::function; - - virtual std::unique_ptr async_connect(std::string host, int port, OnConnectComplete) = 0; - virtual std::unique_ptr async_timer(Duration delay, OnTimeout) = 0; -}; - -class ResolverBase { -public: - virtual ~ResolverBase() {} - - virtual void cancel() = 0; -}; - -class SocketBase { -public: - virtual ~SocketBase() {} - - using OnWriteComplete = std::function; - using OnReadComplete = std::function; - - virtual void close() = 0; - virtual void cancel() = 0; - - virtual void async_write(const char* data, size_t size, OnWriteComplete) = 0; - virtual void async_read(char* buffer, size_t size, OnReadComplete) = 0; - virtual void async_read_until(char* buffer, size_t size, char delim, OnReadComplete) = 0; -}; - -class DeadlineTimerBase { -public: - virtual ~DeadlineTimerBase() {} - - using OnComplete = std::function; - using Duration = EventLoopBase::Duration; - - virtual void cancel() = 0; - - virtual void async_wait(Duration delay, OnComplete) = 0; -}; - -template class EventLoop; - -using ASIO = network::io_service; - -template<> -class EventLoop: public EventLoopBase { -public: - EventLoop(); - ~EventLoop(); - - void run(); - void stop() noexcept; - void reset() noexcept; - - std::unique_ptr async_connect(std::string host, int port, OnConnectComplete) final; - std::unique_ptr async_timer(Duration delay, OnTimeout) final; -protected: - struct Resolver; - struct Socket; - struct DeadlineTimer; - - ASIO m_io_service; -}; - -} // namespace util -} // namespace realm - - -#endif // REALM_UTIL_EVENT_LOOP_HPP - diff --git a/Pods/Realm/include/core/realm/util/features.h b/Pods/Realm/include/core/realm/util/features.h deleted file mode 100644 index 66c7194f..00000000 --- a/Pods/Realm/include/core/realm/util/features.h +++ /dev/null @@ -1,242 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - *************************************************************************/ -#ifndef REALM_UTIL_FEATURES_H -#define REALM_UTIL_FEATURES_H - -#ifdef _MSC_VER -# pragma warning(disable:4800) // Visual Studio int->bool performance warnings -#endif - -#ifdef REALM_HAVE_CONFIG -# include -#else -# define REALM_VERSION "unknown" - -// Even if we don't have config.h (generated by `build.sh config`), it is still -// possible that the following three defines are set by another build system -// (such as Xcode or VS). - -# ifndef REALM_ENABLE_ALLOC_SET_ZERO -# define REALM_ENABLE_ALLOC_SET_ZERO 0 -# endif - -# ifndef REALM_ENABLE_ENCRYPTION -# define REALM_ENABLE_ENCRYPTION 0 -# endif - -# ifndef REALM_ENABLE_ASSERTIONS -# define REALM_ENABLE_ASSERTIONS 0 -# endif - -# ifndef _WIN32 -# define REALM_INSTALL_PREFIX "/usr/local" -# define REALM_INSTALL_EXEC_PREFIX REALM_INSTALL_PREFIX -# define REALM_INSTALL_INCLUDEDIR REALM_INSTALL_PREFIX "/include" -# define REALM_INSTALL_BINDIR REALM_INSTALL_EXEC_PREFIX "/bin" -# define REALM_INSTALL_LIBDIR REALM_INSTALL_EXEC_PREFIX "/lib" -# define REALM_INSTALL_LIBEXECDIR REALM_INSTALL_EXEC_PREFIX "/libexec" -# endif -#endif - -/* The maximum number of elements in a B+-tree node. Applies to inner nodes and - * to leaves. The minimum allowable value is 2. - */ -#ifndef REALM_MAX_BPNODE_SIZE -# define REALM_MAX_BPNODE_SIZE 1000 -#endif - - -/* See these links for information about feature check macroes in GCC, - * Clang, and MSVC: - * - * http://gcc.gnu.org/projects/cxx0x.html - * http://clang.llvm.org/cxx_status.html - * http://clang.llvm.org/docs/LanguageExtensions.html#checks-for-standard-language-features - * http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx - * http://sourceforge.net/p/predef/wiki/Compilers - */ - - -/* Compiler is GCC and version is greater than or equal to the specified version */ -#define REALM_HAVE_AT_LEAST_GCC(maj, min) \ - (__GNUC__ > (maj) || __GNUC__ == (maj) && __GNUC_MINOR__ >= (min)) - -#if defined(__clang__) -# define REALM_HAVE_CLANG_FEATURE(feature) __has_feature(feature) -# define REALM_HAVE_CLANG_WARNING(warning) __has_warning(warning) -#else -# define REALM_HAVE_CLANG_FEATURE(feature) 0 -# define REALM_HAVE_CLANG_WARNING(warning) 0 -#endif - -#if defined(__GNUC__) // clang or GCC -# define REALM_PRAGMA(v) _Pragma(REALM_QUOTE2(v)) -#elif defined(_MSC_VER) // VS -# define REALM_PRAGMA(v) __pragma(v) -#else -# define REALM_PRAGMA(v) -#endif - -#if defined(__clang__) -# define REALM_DIAG(v) REALM_PRAGMA(clang diagnostic v) -#elif defined(__GNUC__) -# define REALM_DIAG(v) REALM_PRAGMA(GCC diagnostic v) -#else -# define REALM_DIAG(v) -#endif - -#define REALM_DIAG_PUSH() REALM_DIAG(push) -#define REALM_DIAG_POP() REALM_DIAG(pop) - -#if REALM_HAVE_CLANG_WARNING("-Wtautological-compare") \ - || REALM_HAVE_AT_LEAST_GCC(6, 0) -# define REALM_DIAG_IGNORE_TAUTOLOGICAL_COMPARE() \ - REALM_DIAG(ignored "-Wtautological-compare") -#else -# define REALM_DIAG_IGNORE_TAUTOLOGICAL_COMPARE() -#endif - -/* Compiler is MSVC (Microsoft Visual C++) */ -#if _MSC_VER >= 1600 -# define REALM_HAVE_AT_LEAST_MSVC_10_2010 1 -#endif -#if _MSC_VER >= 1700 -# define REALM_HAVE_AT_LEAST_MSVC_11_2012 1 -#endif -#if _MSC_VER >= 1800 -# define REALM_HAVE_AT_LEAST_MSVC_12_2013 1 -#endif - - -/* The way to specify that a function never returns. */ -#if REALM_HAVE_AT_LEAST_GCC(4, 8) || REALM_HAVE_CLANG_FEATURE(cxx_attributes) -# define REALM_NORETURN [[noreturn]] -#elif __GNUC__ -# define REALM_NORETURN __attribute__((noreturn)) -#elif _MSC_VER -# define REALM_NORETURN __declspec(noreturn) -#else -# define REALM_NORETURN -#endif - - -/* The way to specify that a variable or type is intended to possibly - * not be used. Use it to suppress a warning from the compiler. */ -#if __GNUC__ -# define REALM_UNUSED __attribute__((unused)) -#else -# define REALM_UNUSED -#endif - - -#if __GNUC__ || defined __INTEL_COMPILER -# define REALM_UNLIKELY(expr) __builtin_expect(!!(expr), 0) -# define REALM_LIKELY(expr) __builtin_expect(!!(expr), 1) -#else -# define REALM_UNLIKELY(expr) (expr) -# define REALM_LIKELY(expr) (expr) -#endif - - -#if defined(__GNUC__) || defined(__HP_aCC) -# define REALM_FORCEINLINE inline __attribute__((always_inline)) -#elif defined(_MSC_VER) -# define REALM_FORCEINLINE __forceinline -#else -# define REALM_FORCEINLINE inline -#endif - - -#if defined(__GNUC__) || defined(__HP_aCC) -# define REALM_NOINLINE __attribute__((noinline)) -#elif defined(_MSC_VER) -# define REALM_NOINLINE __declspec(noinline) -#else -# define REALM_NOINLINE -#endif - - -/* Thread specific data (only for POD types) */ -#if defined __clang__ -# define REALM_THREAD_LOCAL __thread -#else -# define REALM_THREAD_LOCAL thread_local -#endif - - -#if defined __ANDROID__ -# define REALM_ANDROID 1 -#endif - -// Some documentation of the defines provided by Apple: -// http://developer.apple.com/library/mac/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html#//apple_ref/doc/uid/TP40002850-SW13 -#if defined __APPLE__ && defined __MACH__ -# define REALM_PLATFORM_APPLE 1 -/* Apple OSX and iOS (Darwin). */ -# include -# if TARGET_OS_IPHONE == 1 -/* Device (iPhone or iPad) or simulator. */ -# define REALM_IOS 1 -# endif -# if TARGET_OS_WATCH == 1 -/* Device (Apple Watch) or simulator. */ -# define REALM_WATCHOS 1 -/* The necessary signal handling / mach exception APIs are all unavailable */ -# undef REALM_ENABLE_ENCRYPTION -# define REALM_ENABLE_ENCRYPTION 0 -# endif -# if TARGET_OS_TV -/* Device (Apple TV) or simulator. */ -# define REALM_TVOS 1 -# endif -#else -# define REALM_PLATFORM_APPLE 0 -#endif - - -#if REALM_ANDROID || REALM_IOS || REALM_WATCHOS -# define REALM_MOBILE 1 -#endif - - -#if defined(REALM_DEBUG) && !defined(REALM_COOKIE_CHECK) -# define REALM_COOKIE_CHECK -#endif - -#if !REALM_IOS && !REALM_WATCHOS && !REALM_TVOS && !defined(_WIN32) -# define REALM_ASYNC_DAEMON -#endif - -// We're in i686 mode -#if defined(__i386) || defined(__i386__) || defined(__i686__) || defined(_M_I86) || defined(_M_IX86) -# define REALM_ARCHITECTURE_X86_32 1 -#else -# define REALM_ARCHITECTURE_X86_32 0 -#endif - -// We're in amd64 mode -#if defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) \ - || defined(_M_X64) || defined(_M_AMD64) -# define REALM_ARCHITECTURE_X86_64 1 -#else -# define REALM_ARCHITECTURE_X86_64 0 -#endif - -#endif /* REALM_UTIL_FEATURES_H */ diff --git a/Pods/Realm/include/core/realm/util/file.hpp b/Pods/Realm/include/core/realm/util/file.hpp deleted file mode 100644 index b58362c3..00000000 --- a/Pods/Realm/include/core/realm/util/file.hpp +++ /dev/null @@ -1,1076 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_FILE_HPP -#define REALM_UTIL_FILE_HPP - -#include -#include -#include -#include -#include -#include - -#ifndef _WIN32 -# include // POSIX.1-2001 -#endif - -#include -#include -#include - - -namespace realm { -namespace util { - -class EncryptedFileMapping; - -/// Create the specified directory in the file system. -/// -/// \throw File::AccessError If the directory could not be created. If -/// the reason corresponds to one of the exception types that are -/// derived from File::AccessError, the derived exception type is -/// thrown (as long as the underlying system provides the information -/// to unambiguously distinguish that particular reason). -void make_dir(const std::string& path); - -/// Same as make_dir() except that this one returns false, rather than throwing -/// an exception, if the specified directory already existed. If the directory -// did not already exist and was newly created, this returns true. -bool try_make_dir(const std::string& path); - -/// Remove the specified directory path from the file system. If the -/// specified path is a directory, this function is equivalent to -/// std::remove(const char*). -/// -/// \throw File::AccessError If the directory could not be removed. If -/// the reason corresponds to one of the exception types that are -/// derived from File::AccessError, the derived exception type is -/// thrown (as long as the underlying system provides the information -/// to unambiguously distinguish that particular reason). -void remove_dir(const std::string& path); - -/// Create a new unique directory for temporary files. The absolute -/// path to the new directory is returned without a trailing slash. -std::string make_temp_dir(); - -size_t page_size(); - - -/// This class provides a RAII abstraction over the concept of a file -/// descriptor (or file handle). -/// -/// Locks are automatically and immediately released when the File -/// instance is closed. -/// -/// You can use CloseGuard and UnlockGuard to acheive exception-safe -/// closing or unlocking prior to the File instance being detroyed. -/// -/// A single File instance must never be accessed concurrently by -/// multiple threads. -/// -/// You can write to a file via an std::ostream as follows: -/// -/// \code{.cpp} -/// -/// File::Streambuf my_streambuf(&my_file); -/// std::ostream out(&my_strerambuf); -/// out << 7945.9; -/// -/// \endcode -class File { -public: - enum Mode { - mode_Read, ///< access_ReadOnly, create_Never (fopen: rb) - mode_Update, ///< access_ReadWrite, create_Never (fopen: rb+) - mode_Write, ///< access_ReadWrite, create_Auto, flag_Trunc (fopen: wb+) - mode_Append ///< access_ReadWrite, create_Auto, flag_Append (fopen: ab+) - }; - - /// Equivalent to calling open(const std::string&, Mode) on a - /// default constructed instance. - explicit File(const std::string& path, Mode = mode_Read); - - /// Create an instance that is not initially attached to an open - /// file. - File() noexcept; - - ~File() noexcept; - - File(File&&) noexcept; - File& operator=(File&&) noexcept; - - /// Calling this function on an instance that is already attached - /// to an open file has undefined behavior. - /// - /// \throw AccessError If the file could not be opened. If the - /// reason corresponds to one of the exception types that are - /// derived from AccessError, the derived exception type is thrown - /// (as long as the underlying system provides the information to - /// unambiguously distinguish that particular reason). - void open(const std::string& path, Mode = mode_Read); - - /// This function is idempotent, that is, it is valid to call it - /// regardless of whether this instance currently is attached to - /// an open file. - void close() noexcept; - - /// Check whether this File instance is currently attached to an - /// open file. - bool is_attached() const noexcept; - - enum AccessMode { - access_ReadOnly, - access_ReadWrite - }; - - enum CreateMode { - create_Auto, ///< Create the file if it does not already exist. - create_Never, ///< Fail if the file does not already exist. - create_Must ///< Fail if the file already exists. - }; - - enum { - flag_Trunc = 1, ///< Truncate the file if it already exists. - flag_Append = 2 ///< Move to end of file before each write. - }; - - /// See open(const std::string&, Mode). - /// - /// Specifying access_ReadOnly together with a create mode that is - /// not create_Never, or together with a non-zero \a flags - /// argument, results in undefined behavior. Specifying flag_Trunc - /// together with create_Must results in undefined behavior. - void open(const std::string& path, AccessMode, CreateMode, int flags); - - /// Same as open(path, access_ReadWrite, create_Auto, 0), except - /// that this one returns an indication of whether a new file was - /// created, or an existing file was opened. - void open(const std::string& path, bool& was_created); - - /// Read data into the specified buffer and return the number of - /// bytes read. If the returned number of bytes is less than \a - /// size, then the end of the file has been reached. - /// - /// Calling this function on an instance, that is not currently - /// attached to an open file, has undefined behavior. - size_t read(char* data, size_t size); - - /// Write the specified data to this file. - /// - /// Calling this function on an instance, that is not currently - /// attached to an open file, has undefined behavior. - /// - /// Calling this function on an instance, that was opened in - /// read-only mode, has undefined behavior. - void write(const char* data, size_t size); - - /// Calls write(s.data(), s.size()). - void write(const std::string& s) { write(s.data(), s.size()); } - - /// Calls read(data, N). - template - size_t read(char (&data)[N]) { return read(data, N); } - - /// Calls write(data(), N). - template - void write(const char (&data)[N]) { write(data, N); } - - /// Plays the same role as off_t in POSIX - typedef int_fast64_t SizeType; - - /// Calling this function on an instance that is not attached to - /// an open file has undefined behavior. - SizeType get_size() const; - - /// If this causes the file to grow, then the new section will - /// have undefined contents. Setting the size with this function - /// does not necessarily allocate space on the target device. If - /// you want to ensure allocation, call alloc(). Calling this - /// function will generally affect the read/write offset - /// associated with this File instance. - /// - /// Calling this function on an instance that is not attached to - /// an open file has undefined behavior. Calling this function on - /// a file that is opened in read-only mode, is an error. - void resize(SizeType); - - /// The same as prealloc_if_supported() but when the operation is - /// not supported by the system, this function will still increase - /// the file size when the specified region extends beyond the - /// current end of the file. This allows you to both extend and - /// allocate in one operation. - /// - /// The downside is that this function is not guaranteed to have - /// atomic behaviour on all systems, that is, two processes, or - /// two threads should never call this function concurrently for - /// the same underlying file even though they access the file - /// through distinct File instances. - /// - /// \sa prealloc_if_supported() - void prealloc(SizeType offset, size_t size); - - /// When supported by the system, allocate space on the target - /// device for the specified region of the file. If the region - /// extends beyond the current end of the file, the file size is - /// increased as necessary. - /// - /// On systems that do not support this operation, this function - /// has no effect. You may call is_prealloc_supported() to - /// determine if it is supported on your system. - /// - /// Calling this function on an instance, that is not attached to - /// an open file, has undefined behavior. Calling this function on - /// a file, that is opened in read-only mode, is an error. - /// - /// This function is guaranteed to have atomic behaviour, that is, - /// there is never any risk of the file size being reduced even - /// with concurrently executing invocations. - /// - /// \sa prealloc() - /// \sa is_prealloc_supported() - void prealloc_if_supported(SizeType offset, size_t size); - - /// See prealloc_if_supported(). - static bool is_prealloc_supported(); - - /// Reposition the read/write offset of this File - /// instance. Distinct File instances have separate independent - /// offsets, as long as the cucrrent process is not forked. - void seek(SizeType); - - // Return file position (like ftell()) - SizeType get_file_position(); - - /// Flush in-kernel buffers to disk. This blocks the caller until the - /// synchronization operation is complete. On POSIX systems this function - /// calls `fsync()`. On Apple platforms if calls `fcntl()` with command - /// `F_FULLFSYNC`. - void sync(); - - /// Place an exclusive lock on this file. This blocks the caller - /// until all other locks have been released. - /// - /// Locks acquired on distinct File instances have fully recursive - /// behavior, even if they are acquired in the same process (or - /// thread) and are attached to the same underlying file. - /// - /// Calling this function on an instance that is not attached to - /// an open file, or on an instance that is already locked has - /// undefined behavior. - void lock_exclusive(); - - /// Place an shared lock on this file. This blocks the caller - /// until all other exclusive locks have been released. - /// - /// Locks acquired on distinct File instances have fully recursive - /// behavior, even if they are acquired in the same process (or - /// thread) and are attached to the same underlying file. - /// - /// Calling this function on an instance that is not attached to - /// an open file, or on an instance that is already locked has - /// undefined behavior. - void lock_shared(); - - /// Non-blocking version of lock_exclusive(). Returns true iff it - /// succeeds. - bool try_lock_exclusive(); - - /// Non-blocking version of lock_shared(). Returns true iff it - /// succeeds. - bool try_lock_shared(); - - /// Release a previously acquired lock on this file. This function - /// is idempotent. - void unlock() noexcept; - - /// Set the encryption key used for this file. Must be called before any - /// mappings are created or any data is read from or written to the file. - /// - /// \param key A 64-byte encryption key, or null to disable encryption. - void set_encryption_key(const char* key); - - enum { - /// If possible, disable opportunistic flushing of dirted - /// pages of a memory mapped file to physical medium. On some - /// systems this cannot be disabled. On other systems it is - /// the default behavior. An explicit call to sync_map() will - /// flush the buffers regardless of whether this flag is - /// specified or not. - map_NoSync = 1 - }; - - /// Map this file into memory. The file is mapped as shared - /// memory. This allows two processes to interact under exatly the - /// same rules as applies to the interaction via regular memory of - /// multiple threads inside a single process. - /// - /// This File instance does not need to remain in existence after - /// the mapping is established. - /// - /// Multiple concurrent mappings may be created from the same File - /// instance. - /// - /// Specifying access_ReadWrite for a file that is opened in - /// read-only mode, is an error. - /// - /// Calling this function on an instance that is not attached to - /// an open file, or one that is attached to an empty file has - /// undefined behavior. - /// - /// Calling this function with a size that is greater than the - /// size of the file has undefined behavior. - void* map(AccessMode, size_t size, int map_flags = 0, size_t offset = 0) const; - - /// The same as unmap(old_addr, old_size) followed by map(a, - /// new_size, map_flags), but more efficient on some systems. - /// - /// The old address range must have been acquired by a call to - /// map() or remap() on this File instance, the specified access - /// mode and flags must be the same as the ones specified - /// previously, and this File instance must not have been reopend - /// in the meantime. Failing to adhere to these rules will result - /// in undefined behavior. - /// - /// If this function throws, the old address range will remain - /// mapped. - void* remap(void* old_addr, size_t old_size, AccessMode a, size_t new_size, - int map_flags = 0, size_t file_offset = 0) const; - -#if REALM_ENABLE_ENCRYPTION - void* map(AccessMode, size_t size, EncryptedFileMapping*& mapping, - int map_flags = 0, size_t offset = 0) const; -#endif - /// Unmap the specified address range which must have been - /// previously returned by map(). - static void unmap(void* addr, size_t size) noexcept; - - /// Flush in-kernel buffers to disk. This blocks the caller until - /// the synchronization operation is complete. The specified - /// address range must be (a subset of) one that was previously returned by - /// map(). - static void sync_map(void* addr, size_t size); - - /// Check whether the specified file or directory exists. Note - /// that a file or directory that resides in a directory that the - /// calling process has no access to, will necessarily be reported - /// as not existing. - static bool exists(const std::string& path); - - /// Check whether the specified path exists and refers to a directory. If - /// the referenced file system object resides in an inaccessible directory, - /// this function returns false. - static bool is_dir(const std::string& path); - - /// Remove the specified file path from the file system. If the - /// specified path is not a directory, this function is equivalent - /// to std::remove(const char*). - /// - /// The specified file must not be open by the calling process. If - /// it is, this function has undefined behaviour. Note that an - /// open memory map of the file counts as "the file being open". - /// - /// \throw AccessError If the specified directory entry could not - /// be removed. If the reason corresponds to one of the exception - /// types that are derived from AccessError, the derived exception - /// type is thrown (as long as the underlying system provides the - /// information to unambiguously distinguish that particular - /// reason). - static void remove(const std::string& path); - - /// Same as remove() except that this one returns false, rather - /// than thriowing an exception, if the specified file does not - /// exist. If the file did exist, and was deleted, this function - /// returns true. - static bool try_remove(const std::string& path); - - /// Change the path of a directory entry. This can be used to - /// rename a file, and/or to move it from one directory to - /// another. This function is equivalent to std::rename(const - /// char*, const char*). - /// - /// \throw AccessError If the path of the directory entry could - /// not be changed. If the reason corresponds to one of the - /// exception types that are derived from AccessError, the derived - /// exception type is thrown (as long as the underlying system - /// provides the information to unambiguously distinguish that - /// particular reason). - static void move(const std::string& old_path, const std::string& new_path); - static bool copy(std::string source, std::string destination); - - /// Check whether two open file descriptors refer to the same - /// underlying file, that is, if writing via one of them, will - /// affect what is read from the other. In UNIX this boils down to - /// comparing inode numbers. - /// - /// Both instances have to be attached to open files. If they are - /// not, this function has undefined behavior. - bool is_same_file(const File&) const; - - // FIXME: Can we get rid of this one please!!! - bool is_removed() const; - - /// Resolve the specified path against the specified base directory. - /// - /// If \a path is absolute, or if \a base_dir is empty, \p path is returned - /// unmodified, otherwise \a path is resolved against \a base_dir. - /// - /// Examples (assuming POSIX): - /// - /// resolve("file", "dir") -> "dir/file" - /// resolve("../baz", "/foo/bar") -> "/foo/baz" - /// resolve("foo", ".") -> "./foo" - /// resolve(".", "/foo/") -> "/foo" - /// resolve("..", "foo") -> "." - /// resolve("../..", "foo") -> ".." - /// resolve("..", "..") -> "../.." - /// resolve("", "") -> "." - /// resolve("", "/") -> "/." - /// resolve("..", "/") -> "/." - /// resolve("..", "foo//bar") -> "foo" - /// - /// This function does not access the file system. - /// - /// \param path The path to be resolved. An empty string produces the same - /// result as as if "." was passed. The result has a trailing directory - /// separator (`/`) if, and only if this path has a trailing directory - /// separator. - /// - /// \param base_dir The base directory path, which may be relative or - /// absolute. A final directory separator (`/`) is optional. The empty - /// string is interpreted as a relative path. - static std::string resolve(const std::string& path, const std::string& base_dir); - - class ExclusiveLock; - class SharedLock; - - template - class Map; - - class CloseGuard; - class UnlockGuard; - class UnmapGuard; - - class Streambuf; - - // Exceptions - class AccessError; - class PermissionDenied; - class NotFound; - class Exists; - -private: -#ifdef _WIN32 - void* m_handle; - bool m_have_lock; // Only valid when m_handle is not null -#else - int m_fd; -#endif - - std::unique_ptr m_encryption_key; - - bool lock(bool exclusive, bool non_blocking); - void open_internal(const std::string& path, AccessMode, CreateMode, int flags, bool* success); - - struct MapBase { - void* m_addr = nullptr; - size_t m_size = 0; - - MapBase() noexcept; - ~MapBase() noexcept; - - void map(const File&, AccessMode, size_t size, int map_flags, size_t offset = 0); - void remap(const File&, AccessMode, size_t size, int map_flags); - void unmap() noexcept; - void sync(); -#if REALM_ENABLE_ENCRYPTION - util::EncryptedFileMapping* m_encrypted_mapping = nullptr; - inline util::EncryptedFileMapping* get_encrypted_mapping() const - { - return m_encrypted_mapping; - } -#else - inline util::EncryptedFileMapping* get_encrypted_mapping() const - { - return nullptr; - } -#endif - }; -}; - - - -class File::ExclusiveLock { -public: - ExclusiveLock(File& f): m_file(f) { f.lock_exclusive(); } - ~ExclusiveLock() noexcept { m_file.unlock(); } -private: - File& m_file; -}; - -class File::SharedLock { -public: - SharedLock(File& f): m_file(f) { f.lock_shared(); } - ~SharedLock() noexcept { m_file.unlock(); } -private: - File& m_file; -}; - - - -/// This class provides a RAII abstraction over the concept of a -/// memory mapped file. -/// -/// Once created, the Map instance makes no reference to the File -/// instance that it was based upon, and that File instance may be -/// destroyed before the Map instance is destroyed. -/// -/// Multiple concurrent mappings may be created from the same File -/// instance. -/// -/// You can use UnmapGuard to acheive exception-safe unmapping prior -/// to the Map instance being detroyed. -/// -/// A single Map instance must never be accessed concurrently by -/// multiple threads. -template -class File::Map: private MapBase { -public: - /// Equivalent to calling map() on a default constructed instance. - explicit Map(const File&, AccessMode = access_ReadOnly, size_t size = sizeof (T), - int map_flags = 0); - - explicit Map(const File&, size_t offset, AccessMode = access_ReadOnly, size_t size = sizeof (T), - int map_flags = 0); - - /// Create an instance that is not initially attached to a memory - /// mapped file. - Map() noexcept; - - ~Map() noexcept; - - /// Move the mapping from another Map object to this Map object - File::Map& operator=(File::Map&& other) - { - if (m_addr) unmap(); - m_addr = other.m_addr; - m_size = other.m_size; - other.m_addr = 0; - other.m_size = 0; -#if REALM_ENABLE_ENCRYPTION - m_encrypted_mapping = other.m_encrypted_mapping; - other.m_encrypted_mapping = nullptr; -#endif - return *this; - } - - /// See File::map(). - /// - /// Calling this function on a Map instance that is already - /// attached to a memory mapped file has undefined behavior. The - /// returned pointer is the same as what will subsequently be - /// returned by get_addr(). - T* map(const File&, AccessMode = access_ReadOnly, size_t size = sizeof (T), - int map_flags = 0, size_t offset = 0); - - /// See File::unmap(). This function is idempotent, that is, it is - /// valid to call it regardless of whether this instance is - /// currently attached to a memory mapped file. - void unmap() noexcept; - - /// See File::remap(). - /// - /// Calling this function on a Map instance that is not currently - /// attached to a memory mapped file has undefined behavior. The - /// returned pointer is the same as what will subsequently be - /// returned by get_addr(). - T* remap(const File&, AccessMode = access_ReadOnly, size_t size = sizeof (T), - int map_flags = 0); - - /// See File::sync_map(). - /// - /// Calling this function on an instance that is not currently - /// attached to a memory mapped file, has undefined behavior. - void sync(); - - /// Check whether this Map instance is currently attached to a - /// memory mapped file. - bool is_attached() const noexcept; - - /// Returns a pointer to the beginning of the memory mapped file, - /// or null if this instance is not currently attached. - T* get_addr() const noexcept; - - /// Returns the size of the mapped region, or zero if this - /// instance does not currently refer to a memory mapped - /// file. When this instance refers to a memory mapped file, the - /// returned value will always be identical to the size passed to - /// the constructor or to map(). - size_t get_size() const noexcept; - - /// Release the currently attached memory mapped file from this - /// Map instance. The address range may then be unmapped later by - /// a call to File::unmap(). - T* release() noexcept; - -#if REALM_ENABLE_ENCRYPTION - /// Get the encrypted file mapping corresponding to this mapping - inline EncryptedFileMapping* get_encrypted_mapping() const - { - return m_encrypted_mapping; - } -#else - inline EncryptedFileMapping* get_encrypted_mapping() const - { - return nullptr; - } -#endif - - friend class UnmapGuard; -}; - - -class File::CloseGuard { -public: - CloseGuard(File& f) noexcept: m_file(&f) {} - ~CloseGuard() noexcept { if (m_file) m_file->close(); } - void release() noexcept { m_file = nullptr; } -private: - File* m_file; -}; - - -class File::UnlockGuard { -public: - UnlockGuard(File& f) noexcept: m_file(&f) {} - ~UnlockGuard() noexcept { if (m_file) m_file->unlock(); } - void release() noexcept { m_file = nullptr; } -private: - File* m_file; -}; - - -class File::UnmapGuard { -public: - template - UnmapGuard(Map& m) noexcept: m_map(&m) {} - ~UnmapGuard() noexcept { if (m_map) m_map->unmap(); } - void release() noexcept { m_map = nullptr; } -private: - MapBase* m_map; -}; - - - -/// Only output is supported at this point. -class File::Streambuf: public std::streambuf { -public: - explicit Streambuf(File*); - ~Streambuf() noexcept; - -private: - static const size_t buffer_size = 4096; - - File& m_file; - std::unique_ptr const m_buffer; - - int_type overflow(int_type) override; - int sync() override; - pos_type seekpos(pos_type, std::ios_base::openmode) override; - void flush(); - - // Disable copying - Streambuf(const Streambuf&); - Streambuf& operator=(const Streambuf&); -}; - - - -/// Used for any I/O related exception. Note the derived exception -/// types that are used for various specific types of errors. -class File::AccessError: public std::runtime_error { -public: - AccessError(const std::string& msg, const std::string& path); - - /// Return the associated file system path, or the empty string if there is - /// no associated file system path, or if the file system path is unknown. - std::string get_path() const; - -private: - std::string m_path; -}; - - -/// Thrown if the user does not have permission to open or create -/// the specified file in the specified access mode. -class File::PermissionDenied: public AccessError { -public: - PermissionDenied(const std::string& msg, const std::string& path); -}; - - -/// Thrown if the directory part of the specified path was not -/// found, or create_Never was specified and the file did no -/// exist. -class File::NotFound: public AccessError { -public: - NotFound(const std::string& msg, const std::string& path); -}; - - -/// Thrown if create_Always was specified and the file did already -/// exist. -class File::Exists: public AccessError { -public: - Exists(const std::string& msg, const std::string& path); -}; - - -class DirScanner { -public: - DirScanner(const std::string& path); - ~DirScanner() noexcept; - bool next(std::string& name); -private: -#ifndef _WIN32 - DIR* m_dirp; -#endif -}; - - - - - -// Implementation: - -inline File::File(const std::string& path, Mode m) -{ -#ifdef _WIN32 - m_handle = nullptr; -#else - m_fd = -1; -#endif - - open(path, m); -} - -inline File::File() noexcept -{ -#ifdef _WIN32 - m_handle = nullptr; -#else - m_fd = -1; -#endif -} - -inline File::~File() noexcept -{ - close(); -} - -inline File::File(File&& f) noexcept -{ -#ifdef _WIN32 - m_handle = f.m_handle; - m_have_lock = f.m_have_lock; - f.m_handle = nullptr; -#else - m_fd = f.m_fd; - f.m_fd = -1; -#endif - m_encryption_key = std::move(f.m_encryption_key); -} - -inline File& File::operator=(File&& f) noexcept -{ - close(); -#ifdef _WIN32 - m_handle = f.m_handle; - m_have_lock = f.m_have_lock; - f.m_handle = nullptr; -#else - m_fd = f.m_fd; - f.m_fd = -1; -#endif - m_encryption_key = std::move(f.m_encryption_key); - return *this; -} - -inline void File::open(const std::string& path, Mode m) -{ - AccessMode a = access_ReadWrite; - CreateMode c = create_Auto; - int flags = 0; - switch (m) { - case mode_Read: a = access_ReadOnly; c = create_Never; break; - case mode_Update: c = create_Never; break; - case mode_Write: flags = flag_Trunc; break; - case mode_Append: flags = flag_Append; break; - } - open(path, a, c, flags); -} - -inline void File::open(const std::string& path, AccessMode am, CreateMode cm, int flags) -{ - open_internal(path, am, cm, flags, nullptr); -} - - -inline void File::open(const std::string& path, bool& was_created) -{ - while (1) { - bool success; - open_internal(path, access_ReadWrite, create_Must, 0, &success); - if (success) { - was_created = true; - return; - } - open_internal(path, access_ReadWrite, create_Never, 0, &success); - if (success) { - was_created = false; - return; - } - } -} - -inline bool File::is_attached() const noexcept -{ -#ifdef _WIN32 - return (m_handle != nullptr); -#else - return 0 <= m_fd; -#endif -} - -inline void File::lock_exclusive() -{ - lock(true, false); -} - -inline void File::lock_shared() -{ - lock(false, false); -} - -inline bool File::try_lock_exclusive() -{ - return lock(true, true); -} - -inline bool File::try_lock_shared() -{ - return lock(false, true); -} - -inline File::MapBase::MapBase() noexcept -{ - m_addr = nullptr; -} - -inline File::MapBase::~MapBase() noexcept -{ - unmap(); -} - -inline void File::MapBase::map(const File& f, AccessMode a, size_t size, int map_flags, size_t offset) -{ - REALM_ASSERT(!m_addr); -#if REALM_ENABLE_ENCRYPTION - m_addr = f.map(a, size, m_encrypted_mapping, map_flags, offset); -#else - m_addr = f.map(a, size, map_flags, offset); -#endif - m_size = size; -} - -inline void File::MapBase::unmap() noexcept -{ - if (!m_addr) return; - File::unmap(m_addr, m_size); - m_addr = nullptr; -#if REALM_ENABLE_ENCRYPTION - m_encrypted_mapping = nullptr; -#endif -} - -inline void File::MapBase::remap(const File& f, AccessMode a, size_t size, int map_flags) -{ - REALM_ASSERT(m_addr); - - m_addr = f.remap(m_addr, m_size, a, size, map_flags); - m_size = size; -} - -inline void File::MapBase::sync() -{ - REALM_ASSERT(m_addr); - - File::sync_map(m_addr, m_size); -} - -template -inline File::Map::Map(const File& f, AccessMode a, size_t size, int map_flags) -{ - map(f, a, size, map_flags); -} - -template -inline File::Map::Map(const File& f, size_t offset, AccessMode a, size_t size, int map_flags) -{ - map(f, a, size, map_flags, offset); -} - -template -inline File::Map::Map() noexcept {} - -template -inline File::Map::~Map() noexcept {} - -template -inline T* File::Map::map(const File& f, AccessMode a, size_t size, int map_flags, size_t offset) -{ - MapBase::map(f, a, size, map_flags, offset); - return static_cast(m_addr); -} - -template -inline void File::Map::unmap() noexcept -{ - MapBase::unmap(); -} - -template -inline T* File::Map::remap(const File& f, AccessMode a, size_t size, int map_flags) -{ - MapBase::remap(f, a, size, map_flags); - return static_cast(m_addr); -} - -template -inline void File::Map::sync() -{ - MapBase::sync(); -} - -template -inline bool File::Map::is_attached() const noexcept -{ - return (m_addr != nullptr); -} - -template -inline T* File::Map::get_addr() const noexcept -{ - return static_cast(m_addr); -} - -template -inline size_t File::Map::get_size() const noexcept -{ - return m_addr ? m_size : 0; -} - -template -inline T* File::Map::release() noexcept -{ - T* addr = static_cast(m_addr); - m_addr = nullptr; - return addr; -} - - -inline File::Streambuf::Streambuf(File* f): m_file(*f), m_buffer(new char[buffer_size]) -{ - char* b = m_buffer.get(); - setp(b, b + buffer_size); -} - -inline File::Streambuf::~Streambuf() noexcept -{ - try { - if (m_file.is_attached()) flush(); - } - catch (...) { - // Errors deliberately ignored - } -} - -inline File::Streambuf::int_type File::Streambuf::overflow(int_type c) -{ - flush(); - if (c == traits_type::eof()) - return traits_type::not_eof(c); - *pptr() = traits_type::to_char_type(c); - pbump(1); - return c; -} - -inline int File::Streambuf::sync() -{ - flush(); - return 0; -} - -inline File::Streambuf::pos_type File::Streambuf::seekpos(pos_type pos, std::ios_base::openmode) -{ - flush(); - SizeType pos2 = 0; - if (int_cast_with_overflow_detect(std::streamsize(pos), pos2)) - throw std::runtime_error("Seek position overflow"); - m_file.seek(pos2); - return pos; -} - -inline void File::Streambuf::flush() -{ - size_t n = pptr() - pbase(); - m_file.write(pbase(), n); - setp(m_buffer.get(), epptr()); -} - -inline File::AccessError::AccessError(const std::string& msg, const std::string& path): - std::runtime_error(msg), - m_path(path) -{ -} - -inline std::string File::AccessError::get_path() const -{ - return m_path; -} - -inline File::PermissionDenied::PermissionDenied(const std::string& msg, const std::string& path): - AccessError(msg, path) -{ -} - -inline File::NotFound::NotFound(const std::string& msg, const std::string& path): - AccessError(msg, path) -{ -} - -inline File::Exists::Exists(const std::string& msg, const std::string& path): - AccessError(msg, path) -{ -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_FILE_HPP diff --git a/Pods/Realm/include/core/realm/util/file_mapper.hpp b/Pods/Realm/include/core/realm/util/file_mapper.hpp deleted file mode 100644 index 2fa287e1..00000000 --- a/Pods/Realm/include/core/realm/util/file_mapper.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_FILE_MAPPER_HPP -#define REALM_UTIL_FILE_MAPPER_HPP - -#include -#include -#include - -namespace realm { -namespace util { - -void *mmap(int fd, size_t size, File::AccessMode access, size_t offset, const char *encryption_key); -void munmap(void *addr, size_t size) noexcept; -void* mremap(int fd, size_t file_offset, void* old_addr, size_t old_size, File::AccessMode a, size_t new_size); -void msync(void *addr, size_t size); - -// A function which may be given to encryption_read_barrier. If present, the read barrier is a -// a barrier for a full array. If absent, the read barrier is a barrier only for the address -// range give as argument. If the barrier is for a full array, it will read the array header -// and determine the address range from the header. -using HeaderToSize = size_t (*)(const char* addr); -class EncryptedFileMapping; - -#if REALM_ENABLE_ENCRYPTION - - -// This variant allows the caller to obtain direct access to the encrypted file mapping -// for optimization purposes. -void *mmap(int fd, size_t size, File::AccessMode access, size_t offset, const char *encryption_key, - EncryptedFileMapping*& mapping); - -void do_encryption_read_barrier(const void* addr, size_t size, - HeaderToSize header_to_size, - EncryptedFileMapping* mapping); - -void do_encryption_write_barrier(const void* addr, size_t size, EncryptedFileMapping* mapping); - -void inline encryption_read_barrier(const void* addr, size_t size, - EncryptedFileMapping* mapping, - HeaderToSize header_to_size = nullptr) -{ - if (mapping) - do_encryption_read_barrier(addr, size, header_to_size, mapping); -} - -void inline encryption_write_barrier(const void* addr, size_t size, EncryptedFileMapping* mapping) -{ - if (mapping) - do_encryption_write_barrier(addr, size, mapping); -} - - -extern util::Mutex mapping_mutex; - -inline void do_encryption_read_barrier(const void* addr, size_t size, - HeaderToSize header_to_size, - EncryptedFileMapping* mapping) -{ - UniqueLock lock(mapping_mutex, defer_lock_tag()); - mapping->read_barrier(addr, size, lock, header_to_size); -} - -inline void do_encryption_write_barrier(const void* addr, size_t size, - EncryptedFileMapping* mapping) -{ - LockGuard lock(mapping_mutex); - mapping->write_barrier(addr, size); -} - - - -#else -void inline encryption_read_barrier(const void*, size_t, - EncryptedFileMapping*, - HeaderToSize header_to_size = nullptr) -{ - static_cast(header_to_size); -} -void inline encryption_write_barrier(const void*, size_t) {} -void inline encryption_write_barrier(const void*, size_t, EncryptedFileMapping*) {} -#endif - -// helpers for encrypted Maps -template -void encryption_read_barrier(File::Map& map, size_t index, size_t num_elements = 1) -{ - T* addr = map.get_addr(); - encryption_read_barrier(addr+index, sizeof(T)*num_elements, map.get_encrypted_mapping()); -} - -template -void encryption_write_barrier(File::Map& map, size_t index, size_t num_elements = 1) -{ - T* addr = map.get_addr(); - encryption_write_barrier(addr+index, sizeof(T)*num_elements, map.get_encrypted_mapping()); -} - -File::SizeType encrypted_size_to_data_size(File::SizeType size) noexcept; -File::SizeType data_size_to_encrypted_size(File::SizeType size) noexcept; - -size_t round_up_to_page_size(size_t size) noexcept; - -} -} -#endif diff --git a/Pods/Realm/include/core/realm/util/hex_dump.hpp b/Pods/Realm/include/core/realm/util/hex_dump.hpp deleted file mode 100644 index 88419acb..00000000 --- a/Pods/Realm/include/core/realm/util/hex_dump.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_HEX_DUMP_HPP -#define REALM_UTIL_HEX_DUMP_HPP - -#include -#include -#include -#include -#include -#include - -#include - -namespace realm { -namespace util { - -template -std::string hex_dump(const T* data, size_t size, const char* separator = " ", int min_digits = -1) -{ - using U = typename std::make_unsigned::type; - - if (min_digits < 0) - min_digits = (std::numeric_limits::digits+3) / 4; - - std::ostringstream out; - for (const T* i = data; i != data+size; ++i) { - if (i != data) - out << separator; - out << std::setw(min_digits)< - -namespace realm { -namespace util { - -// LCOV_EXCL_START -// -// Because these are templated functions, every combination of output stream -// type and value(s) type(s) generates a new function. This makes LCOV/GCOVR -// report over 70 functions in this file, with only 6.6% function coverage, -// even though line coverage is at 100%. - -template -void inspect_value(OS& os, const T& value) -{ - os << value; -} - -template -void inspect_value(OS& os, const std::string& value) -{ - // FIXME: Escape the string. - os << "\"" << value << "\""; -} - -template -void inspect_value(OS& os, const char* value) -{ - // FIXME: Escape the string. - os << "\"" << value << "\""; -} - -template -void inspect_all(OS&) -{ - // No-op -} - -/// Convert all arguments to strings, and quote string arguments. -template -void inspect_all(OS& os, First&& first, Args&&... args) -{ - inspect_value(os, std::forward(first)); - if (sizeof...(Args) != 0) { - os << ", "; - } - inspect_all(os, std::forward(args)...); -} - -// LCOV_EXCL_STOP - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_INSPECT_HPP diff --git a/Pods/Realm/include/core/realm/util/interprocess_condvar.hpp b/Pods/Realm/include/core/realm/util/interprocess_condvar.hpp deleted file mode 100644 index a3d3f720..00000000 --- a/Pods/Realm/include/core/realm/util/interprocess_condvar.hpp +++ /dev/null @@ -1,132 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_UTIL_INTERPROCESS_CONDVAR -#define REALM_UTIL_INTERPROCESS_CONDVAR - - -#include -#include -#include -#include -#include -#include -#include -#include - -// Condvar Emulation is required if RobustMutex emulation is enabled -#ifdef REALM_ROBUST_MUTEX_EMULATION -#define REALM_CONDVAR_EMULATION -#endif - -namespace realm { -namespace util { - - - - -/// Condition variable for use in synchronization monitors. -/// This condition variable uses emulation based on named pipes -/// for the inter-process case, if enabled by REALM_CONDVAR_EMULATION. -/// -/// FIXME: This implementation will never release/delete pipes. This is unlikely -/// to be a problem as long as only a modest number of different database names -/// are in use -/// -/// A InterprocessCondVar is always process shared. -class InterprocessCondVar { -public: - InterprocessCondVar(); - ~InterprocessCondVar() noexcept; - - /// To use the InterprocessCondVar, you also must place a structure of type - /// InterprocessCondVar::SharedPart in memory shared by multiple processes - /// or in a memory mapped file, and use set_shared_part() to associate - /// the condition variable with it's shared part. You must initialize - /// the shared part using InterprocessCondVar::init_shared_part(), but only before - /// first use and only when you have exclusive access to the shared part. - -#ifdef REALM_CONDVAR_EMULATION - struct SharedPart { - uint64_t signal_counter; - uint64_t wait_counter; - }; -#else - typedef CondVar SharedPart; -#endif - - /// You need to bind the emulation to a SharedPart in shared/mmapped memory. - /// The SharedPart is assumed to have been initialized (possibly by another process) - /// earlier through a call to init_shared_part. - void set_shared_part(SharedPart& shared_part, std::string path, std::string condvar_name); - - /// Initialize the shared part of a process shared condition variable. - /// A process shared condition variables may be represented by any number of - /// InterprocessCondVar instances in any number of different processes, - /// all sharing a common SharedPart instance, which must be in shared memory. - static void init_shared_part(SharedPart& shared_part); - - /// Release any system resources allocated for the shared part. This should - /// be used *only* when you are certain, that nobody is using it. - void release_shared_part(); - - /// Wait for someone to call notify() or notify_all() on this condition - /// variable. The call to wait() may return spuriously, so the caller should - /// always re-evaluate the condition on which to wait and loop on wait() - /// if necessary. - void wait(InterprocessMutex& m, const struct timespec* tp); - - /// If any threads are waiting for this condition, wake up at least one. - /// (Current implementation may actually wake all :-O ). The caller must - /// hold the lock associated with the condvar at the time of calling notify() - void notify() noexcept; - - /// Wake up every thread that is currently waiting on this condition. - /// The caller must hold the lock associated with the condvar at the time - /// of calling notify_all(). - void notify_all() noexcept; - - /// Cleanup and release system resources if possible. - void close() noexcept; - -private: - // non-zero if a shared part has been registered (always 0 on process local instances) - SharedPart* m_shared_part = nullptr; -#ifdef REALM_CONDVAR_EMULATION - // keep the path to allocated system resource so we can remove them again - std::string m_resource_path; -#endif - bool uses_emulation = false; - // pipe used for emulation - int m_fd_read = -1; - int m_fd_write = -1; -}; - - - - -// Implementation: - - -} // namespace util -} // namespace realm - - -#endif diff --git a/Pods/Realm/include/core/realm/util/interprocess_mutex.hpp b/Pods/Realm/include/core/realm/util/interprocess_mutex.hpp deleted file mode 100644 index 53c2dd31..00000000 --- a/Pods/Realm/include/core/realm/util/interprocess_mutex.hpp +++ /dev/null @@ -1,197 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#ifndef REALM_UTIL_INTERPROCESS_MUTEX -#define REALM_UTIL_INTERPROCESS_MUTEX - -// Enable this only on platforms where it might be needed -#if REALM_PLATFORM_APPLE || REALM_PLATFORM_ANDROID -#define REALM_ROBUST_MUTEX_EMULATION -#endif - -#include -#include -#include -#include -#include - -namespace realm { -namespace util { - -// fwd decl to support friend decl below -class InterprocessCondVar; - - -/// Emulation of a Robust Mutex. -/// A Robust Mutex is an interprocess mutex which will automatically -/// release any locks held by a process when it crashes. Contrary to -/// Posix robust mutexes, this robust mutex is not capable of informing -/// participants that they have been granted a lock after a crash of -/// the process holding it (though it could be added if needed). - -class InterprocessMutex { -public: - InterprocessMutex(); - ~InterprocessMutex() noexcept; - -#ifdef REALM_ROBUST_MUTEX_EMULATION - struct SharedPart { }; -#else - using SharedPart = RobustMutex; -#endif - - /// You need to bind the emulation to a SharedPart in shared/mmapped memory. - /// The SharedPart is assumed to have been initialized (possibly by another process) - /// elsewhere. - void set_shared_part(SharedPart& shared_part, const std::string& path, const std::string& mutex_name); - void set_shared_part(SharedPart& shared_part, File&& lock_file); - - /// Destroy shared object. Potentially release system resources. Caller must - /// ensure that the shared_part is not in use at the point of call. - void release_shared_part(); - - /// Lock the mutex. If the mutex is already locked, wait for it to be unlocked. - void lock(); - - /// Unlock the mutex - void unlock(); - - /// Attempt to check if the mutex is valid (only relevant if not emulating) - bool is_valid() noexcept; - - static bool is_robust_on_this_platform() - { -#ifdef REALM_ROBUST_MUTEX_EMULATION - return true; // we're faking it! -#else - return RobustMutex::is_robust_on_this_platform(); -#endif - } -private: -#ifdef REALM_ROBUST_MUTEX_EMULATION - std::string m_filename; - File m_file; - Mutex m_local_mutex; -#else - SharedPart* m_shared_part = 0; -#endif - friend class InterprocessCondVar; -}; - - -inline InterprocessMutex::InterprocessMutex() -{ -} - -inline InterprocessMutex::~InterprocessMutex() noexcept -{ -#ifdef REALM_ROBUST_MUTEX_EMULATION - m_local_mutex.lock(); - m_file.close(); - m_local_mutex.unlock(); -#endif -} - -inline void InterprocessMutex::set_shared_part(SharedPart& shared_part, - const std::string& path, - const std::string& mutex_name) -{ -#ifdef REALM_ROBUST_MUTEX_EMULATION - static_cast(shared_part); - if (m_file.is_attached()) { - m_file.close(); - } - m_filename = path + "." + mutex_name + ".mx"; - std::lock_guard guard(m_local_mutex); - m_file.open(m_filename, File::mode_Write); -#else - m_shared_part = &shared_part; - static_cast(path); - static_cast(mutex_name); -#endif -} - -inline void InterprocessMutex::set_shared_part(SharedPart& shared_part, - File&& lock_file) -{ -#ifdef REALM_ROBUST_MUTEX_EMULATION - static_cast(shared_part); - if (m_file.is_attached()) { - m_file.close(); - } - m_filename.clear(); - std::lock_guard guard(m_local_mutex); - m_file = std::move(lock_file); -#else - m_shared_part = &shared_part; - static_cast(lock_file); -#endif -} - -inline void InterprocessMutex::release_shared_part() -{ -#ifdef REALM_ROBUST_MUTEX_EMULATION - if (!m_filename.empty()) - File::try_remove(m_filename); -#else - m_shared_part = nullptr; -#endif -} - -inline void InterprocessMutex::lock() -{ -#ifdef REALM_ROBUST_MUTEX_EMULATION - std::unique_lock lock(m_local_mutex); - m_file.lock_exclusive(); - lock.release(); -#else - REALM_ASSERT(m_shared_part); - m_shared_part->lock([](){}); -#endif -} - - -inline void InterprocessMutex::unlock() -{ -#ifdef REALM_ROBUST_MUTEX_EMULATION - m_file.unlock(); - m_local_mutex.unlock(); -#else - REALM_ASSERT(m_shared_part); - m_shared_part->unlock(); -#endif -} - - -inline bool InterprocessMutex::is_valid() noexcept -{ -#ifdef REALM_ROBUST_MUTEX_EMULATION - return true; -#else - REALM_ASSERT(m_shared_part); - return m_shared_part->is_valid(); -#endif -} - - -} // namespace util -} // namespace realm - -#endif // #ifndef REALM_UTIL_INTERPROCESS_MUTEX diff --git a/Pods/Realm/include/core/realm/util/logger.hpp b/Pods/Realm/include/core/realm/util/logger.hpp deleted file mode 100644 index dd113bdf..00000000 --- a/Pods/Realm/include/core/realm/util/logger.hpp +++ /dev/null @@ -1,250 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_LOGGER_HPP -#define REALM_UTIL_LOGGER_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace realm { -namespace util { - - -/// Examples: -/// -/// logger.log("Overlong message from master coordinator"); -/// logger.log("Listening for peers on %1:%2", listen_address, listen_port); -class Logger { -public: - template void log(const char* message, Params...); - - Logger() noexcept; - virtual ~Logger() noexcept; - -protected: - static void do_log(Logger&, std::string message); - - virtual void do_log(std::string message) = 0; - -private: - struct State; - template struct Subst; - - void log_impl(State&); - template void log_impl(State&, const Param&, Params...); -}; - - - -class StderrLogger: public Logger { -protected: - void do_log(std::string) override; -}; - - - -class StreamLogger: public Logger { -public: - explicit StreamLogger(std::ostream&) noexcept; - -protected: - void do_log(std::string) override; - -private: - std::ostream& m_out; -}; - - - -class FileLogger: public StreamLogger { -public: - explicit FileLogger(std::string path); - explicit FileLogger(util::File); - -private: - util::File m_file; - util::File::Streambuf m_streambuf; - std::ostream m_out; -}; - - - -/// This makes Logger::log() thread-safe. -class ThreadSafeLogger: public Logger { -public: - explicit ThreadSafeLogger(Logger& base_logger); - -protected: - void do_log(std::string) override; - -private: - Logger& m_base_logger; - Mutex m_mutex; -}; - - - -class PrefixLogger: public Logger { -public: - PrefixLogger(std::string prefix, Logger& base_logger); - -protected: - void do_log(std::string) override; - -private: - const std::string m_prefix; - Logger& m_base_logger; -}; - - - - -// Implementation - -struct Logger::State { - std::string m_message; - std::string m_search; - int m_param_num = 1; - std::ostringstream m_formatter; - State(const char* s): - m_message(s), - m_search(m_message) - { - m_formatter.imbue(std::locale::classic()); - } -}; - -template struct Logger::Subst { - void operator()(const T& param, State* state) - { - state->m_formatter << "%" << state->m_param_num; - std::string key = state->m_formatter.str(); - state->m_formatter.str(std::string()); - std::string::size_type j = state->m_search.find(key); - if (j != std::string::npos) { - state->m_formatter << param; - std::string str = state->m_formatter.str(); - state->m_formatter.str(std::string()); - state->m_message.replace(j, key.size(), str); - state->m_search.replace(j, key.size(), std::string(str.size(), '\0')); - } - ++state->m_param_num; - } -}; - -inline Logger::Logger() noexcept -{ -} - -inline Logger::~Logger() noexcept -{ -} - -template -inline void Logger::log(const char* message, Params... params) -{ - State state(message); - log_impl(state, params...); -} - -inline void Logger::do_log(Logger& logger, std::string message) -{ - logger.do_log(std::move(message)); -} - -inline void Logger::log_impl(State& state) -{ - do_log(std::move(state.m_message)); -} - -template -inline void Logger::log_impl(State& state, const Param& param, Params... params) -{ - Subst()(param, &state); - log_impl(state, params...); -} - -inline void StderrLogger::do_log(std::string message) -{ - std::cerr << message << '\n'; // Throws - std::cerr.flush(); // Throws -} - -inline StreamLogger::StreamLogger(std::ostream& out) noexcept: - m_out(out) -{ -} - -inline void StreamLogger::do_log(std::string message) -{ - m_out << message << '\n'; // Throws - m_out.flush(); // Throws -} - -inline FileLogger::FileLogger(std::string path): - StreamLogger(m_out), - m_file(path, util::File::mode_Write), // Throws - m_streambuf(&m_file), // Throws - m_out(&m_streambuf) // Throws -{ -} - -inline FileLogger::FileLogger(util::File file): - StreamLogger(m_out), - m_file(std::move(file)), - m_streambuf(&m_file), // Throws - m_out(&m_streambuf) // Throws -{ -} - -inline ThreadSafeLogger::ThreadSafeLogger(Logger& base_logger): - m_base_logger(base_logger) -{ -} - -inline void ThreadSafeLogger::do_log(std::string message) -{ - LockGuard l(m_mutex); - Logger::do_log(m_base_logger, message); // Throws -} - -inline PrefixLogger::PrefixLogger(std::string prefix, Logger& base_logger): - m_prefix(std::move(prefix)), // Throws - m_base_logger(base_logger) -{ -} - -inline void PrefixLogger::do_log(std::string message) -{ - Logger::do_log(m_base_logger, m_prefix + message); // Throws -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_LOGGER_HPP diff --git a/Pods/Realm/include/core/realm/util/memory_stream.hpp b/Pods/Realm/include/core/realm/util/memory_stream.hpp deleted file mode 100644 index 4f519849..00000000 --- a/Pods/Realm/include/core/realm/util/memory_stream.hpp +++ /dev/null @@ -1,200 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_MEMORY_STREAM_HPP -#define REALM_UTIL_MEMORY_STREAM_HPP - -#include -#include -#include -#include - -#include - -namespace realm { -namespace util { - -class MemoryInputStreambuf: public std::streambuf { -public: - MemoryInputStreambuf(); - ~MemoryInputStreambuf() noexcept; - - void set_buffer(const char *begin, const char *end) noexcept; - -private: - int_type underflow() override; - int_type uflow() override; - int_type pbackfail(int_type ch) override; - std::streamsize showmanyc() override; - - const char* m_begin; - const char* m_end; - const char* m_curr; -}; - - -class MemoryOutputStreambuf: public std::streambuf { -public: - MemoryOutputStreambuf(); - ~MemoryOutputStreambuf() noexcept; - - void set_buffer(char* begin, char* end) noexcept; - - /// Returns the amount of data written to the buffer. - size_t size() const noexcept; -}; - - -class MemoryInputStream: public std::istream { -public: - MemoryInputStream(); - ~MemoryInputStream() noexcept; - - void set_buffer(const char *begin, const char *end) noexcept; - - void set_string(const std::string&); - - void set_c_string(const char *c_str) noexcept; - -private: - MemoryInputStreambuf m_streambuf; -}; - - -class MemoryOutputStream: public std::ostream { -public: - MemoryOutputStream(); - ~MemoryOutputStream() noexcept; - - void set_buffer(char *begin, char *end) noexcept; - - template - void set_buffer(char (&buffer)[N]) noexcept; - - /// Returns the amount of data written to the underlying buffer. - size_t size() const noexcept; - -private: - MemoryOutputStreambuf m_streambuf; -}; - - - - - -// Implementation - -inline MemoryInputStreambuf::MemoryInputStreambuf(): - m_begin(nullptr), - m_end(nullptr), - m_curr(nullptr) -{ -} - -inline MemoryInputStreambuf::~MemoryInputStreambuf() noexcept -{ -} - -inline void MemoryInputStreambuf::set_buffer(const char *begin, const char *end) noexcept -{ - m_begin = begin; - m_end = end; - m_curr = begin; -} - - -inline MemoryOutputStreambuf::MemoryOutputStreambuf() -{ -} - -inline MemoryOutputStreambuf::~MemoryOutputStreambuf() noexcept -{ -} - -inline void MemoryOutputStreambuf::set_buffer(char* begin, char* end) noexcept -{ - setp(begin, end); -} - -inline size_t MemoryOutputStreambuf::size() const noexcept -{ - return pptr() - pbase(); -} - - -inline MemoryInputStream::MemoryInputStream(): - std::istream(&m_streambuf) -{ -} - -inline MemoryInputStream::~MemoryInputStream() noexcept -{ -} - -inline void MemoryInputStream::set_buffer(const char *begin, const char *end) noexcept -{ - m_streambuf.set_buffer(begin, end); - clear(); -} - -inline void MemoryInputStream::set_string(const std::string& str) -{ - const char* begin = str.data(); - const char* end = begin + str.size(); - set_buffer(begin, end); -} - -inline void MemoryInputStream::set_c_string(const char *c_str) noexcept -{ - const char* begin = c_str; - const char* end = begin + traits_type::length(c_str); - set_buffer(begin, end); -} - - -inline MemoryOutputStream::MemoryOutputStream(): - std::ostream(&m_streambuf) -{ -} - -inline MemoryOutputStream::~MemoryOutputStream() noexcept -{ -} - -inline void MemoryOutputStream::set_buffer(char *begin, char *end) noexcept -{ - m_streambuf.set_buffer(begin, end); - clear(); -} - -template -inline void MemoryOutputStream::set_buffer(char (&buffer)[N]) noexcept -{ - set_buffer(buffer, buffer+N); -} - -inline size_t MemoryOutputStream::size() const noexcept -{ - return m_streambuf.size(); -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_MEMORY_STREAM_HPP diff --git a/Pods/Realm/include/core/realm/util/meta.hpp b/Pods/Realm/include/core/realm/util/meta.hpp deleted file mode 100644 index a014fa00..00000000 --- a/Pods/Realm/include/core/realm/util/meta.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_META_HPP -#define REALM_UTIL_META_HPP - -namespace realm { -namespace util { - - -template -struct EitherTypeIs { static const bool value = false; }; -template -struct EitherTypeIs { static const bool value = true; }; -template -struct EitherTypeIs { static const bool value = true; }; -template -struct EitherTypeIs { static const bool value = true; }; - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_META_HPP diff --git a/Pods/Realm/include/core/realm/util/misc_errors.hpp b/Pods/Realm/include/core/realm/util/misc_errors.hpp deleted file mode 100644 index 25051e5f..00000000 --- a/Pods/Realm/include/core/realm/util/misc_errors.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_MISC_ERRORS_HPP -#define REALM_UTIL_MISC_ERRORS_HPP - -#include - - -namespace realm { -namespace util { -namespace error { - -enum misc_errors { - unknown = 1 -}; - -std::error_code make_error_code(misc_errors); - -} // namespace error -} // namespace util -} // namespace realm - -namespace std { - -template<> -class is_error_code_enum -{ -public: - static const bool value = true; -}; - -} // namespace std - -#endif // REALM_UTIL_MISC_ERRORS_HPP diff --git a/Pods/Realm/include/core/realm/util/miscellaneous.hpp b/Pods/Realm/include/core/realm/util/miscellaneous.hpp deleted file mode 100644 index 2039aabf..00000000 --- a/Pods/Realm/include/core/realm/util/miscellaneous.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_MISCELLANEOUS_HPP -#define REALM_UTIL_MISCELLANEOUS_HPP - -#include - -namespace realm { -namespace util { - -// FIXME: Replace this with std::add_const_t when we switch over to C++14 by -// default. -/// \brief Adds const qualifier, unless T already has the const qualifier -template -using add_const_t = typename std::add_const::type; - -// FIXME: Replace this with std::as_const when we switch over to C++17 by -// default. -/// \brief Forms an lvalue reference to const T -template -constexpr add_const_t& as_const(T& v) noexcept -{ - return v; -} - -/// \brief Disallows rvalue arguments -template -add_const_t& as_const(const T&&) = delete; - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_MISCELLANEOUS_HPP diff --git a/Pods/Realm/include/core/realm/util/network.hpp b/Pods/Realm/include/core/realm/util/network.hpp deleted file mode 100644 index ca631883..00000000 --- a/Pods/Realm/include/core/realm/util/network.hpp +++ /dev/null @@ -1,2173 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_NETWORK_HPP -#define REALM_UTIL_NETWORK_HPP - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace realm { -namespace util { - -/// \brief TCP/IP networking API. -/// -/// The design of this networking API is heavily inspired by the ASIO C++ -/// library (http://think-async.com). -/// -/// ### Thread safety -/// -/// A *service context* is a set of objects consisting of an instance of -/// io_service, and all the objects that are associated with that instance (\ref -/// resolver, \ref acceptor`, \ref socket`, \ref buffered_input_stream, and \ref -/// deadline_timer). -/// -/// In general, it is unsafe for two threads to call functions on the same -/// object, or on different objects in the same service context. This also -/// applies to destructors. Notable exceptions are the fully thread-safe -/// functions, such as io_service::post(), io_service::stop(), and -/// io_service::reset(). -/// -/// On the other hand, it is always safe for two threads to call functions on -/// objects belonging to different service contexts. -/// -/// One implication of these rules is that at most one thread must execute run() -/// at any given time. -/// -/// Unless otherwise specified, free-staing objects, such as \ref protocol, \ref -/// address, \ref endpoint, and \ref endpoint::list are fully thread-safe as -/// long as they are not mutated. If one thread is mutating such an object, no -/// other thread may access it. Note that these free-standing objects are not -/// associcated with an instance of io_service, and are therefore not part of a -/// service context. -namespace network { - -std::string host_name(); - - -class protocol; -class address; -class endpoint; -class io_service; -class resolver; -class socket_base; -class socket; -class acceptor; -class buffered_input_stream; -class deadline_timer; - - -/// \brief An IP protocol descriptor. -class protocol { -public: - static protocol ip_v4(); - static protocol ip_v6(); - - bool is_ip_v4() const; - bool is_ip_v6() const; - - protocol(); - ~protocol() noexcept {} - -private: - int m_family; - int m_socktype; - int m_protocol; - - friend class resolver; - friend class socket_base; -}; - - -/// \brief An IP address (IPv4 or IPv6). -class address { -public: - bool is_ip_v4() const; - bool is_ip_v6() const; - - template - friend std::basic_ostream& operator<<(std::basic_ostream&, const address&); - - address(); - ~address() noexcept {} - -private: - typedef in_addr ip_v4_type; - typedef in6_addr ip_v6_type; - union union_type { - ip_v4_type m_ip_v4; - ip_v6_type m_ip_v6; - }; - union_type m_union; - bool m_is_ip_v6; - - friend class endpoint; -}; - - -/// \brief An IP endpoint. -/// -/// An IP endpoint is a triplet (`protocol`, `address`, `port`). -class endpoint { -public: - using port_type = uint_fast16_t; - class list; - - class protocol protocol() const; - class address address() const; - port_type port() const; - - endpoint(); - ~endpoint() noexcept {} - -private: - class protocol m_protocol; - - typedef sockaddr sockaddr_base_type; - typedef sockaddr_in sockaddr_ip_v4_type; - typedef sockaddr_in6 sockaddr_ip_v6_type; - union sockaddr_union_type { - sockaddr_base_type m_base; - sockaddr_ip_v4_type m_ip_v4; - sockaddr_ip_v6_type m_ip_v6; - }; - sockaddr_union_type m_sockaddr_union; - - friend class resolver; - friend class socket_base; - friend class socket; - friend class acceptor; -}; - - -/// \brief A list of IP endpoints. -class endpoint::list { -public: - typedef const endpoint* iterator; - - iterator begin() const; - iterator end() const; - size_t size() const; - - ~list() noexcept {} - -private: - Buffer m_endpoints; - - friend class resolver; -}; - - -/// \brief TCP/IP networking service. -class io_service { -public: - io_service(); - ~io_service() noexcept; - - /// \brief Execute the event loop. - /// - /// Execute completion handlers of completed asynchronous operations, or - /// wait for more completion handlers to become ready for - /// execution. Handlers submitted via post() are considered immeditely - /// ready. If there are no completion handlers ready for execution, and - /// there are no asynchronous operations in progress, run() returns. - /// - /// All completion handlers, including handlers submitted via post() will be - /// executed from run(), that is by the thread that executes run(). If no - /// thread executes run(), then the completion handlers will not be - /// executed. - /// - /// Exceptions thrown by completion handlers will always propagate back - /// through run(). - /// - /// Syncronous operations (e.g., socket::connect()) executes independently - /// of the event loop, and does not require that any thread calls run(). - void run(); - - /// @{ \brief Stop event loop execution. - /// - /// stop() puts the event loop into the stopped mode. If a thread is currently - /// executing run(), it will be made to return in a timely fashion, that is, - /// without further blocking. If a thread is currently blocked in run(), it - /// will be unblocked. Handlers that can be executed immediately, may, or - /// may not be executed before run() returns, but new handlers submitted by - /// these, will not be executed. - /// - /// The event loop will remain in the stopped mode until reset() is - /// called. If reset() is called before run() returns, it may, or may not - /// cause run() to continue normal operation without returning. - /// - /// Both stop() and reset() are thread-safe, that is, they may be called by - /// any thread. Also, both of these function may be called from completion - /// handlers (including posted handlers). - void stop() noexcept; - void reset() noexcept; - /// @} - - /// \brief Submit a handler to the event loop. - /// - /// Register the sepcified completion handler for immediate asynchronous - /// execution. The specified handler object will be copied as necessary, and - /// will be executed by an expression on the form `handler()`. - /// - /// This function is thread-safe, that is, it may be called by any - /// thread. It may also be called from other completion handlers. - /// - /// The handler will never be called as part of the execution of post(). It - /// will always be called by a thread that is executing run(). If no thread - /// is executing run(), the handler will not be executed. If post() is - /// called while another thread is executing run(), the handler may be - /// called before post() returns. If post() is called from another - /// completion handler, the submitted handler is guaranteed to not be called - /// during the execution of post(). - /// - /// Completion handlers added through post() will be executed in the order - /// that they are added. More precisely, if post() is called twice to add - /// two handlers, A and B, and the execution of post(A) ands before the - /// beginning of the execution of post(B), then A is guaranteed to execute - /// before B. - template - void post(const H& handler); - -private: - class async_oper; - class wait_oper_base; - class post_oper_base; - template class post_oper; - class UnusedOper; // Allocated, but currently unused memory - class oper_queue; - - struct OwnersOperDeleter { - void operator()(async_oper*) const noexcept; - }; - struct LendersOperDeleter { - void operator()(async_oper*) const noexcept; - }; - using OwnersOperPtr = std::unique_ptr; - using LendersOperPtr = std::unique_ptr; - using LendersWaitOperPtr = std::unique_ptr; - - class impl; - const std::unique_ptr m_impl; - - template - static std::unique_ptr alloc(OwnersOperPtr&, Args&&...); - - template static void execute(std::unique_ptr&); - - enum io_op { io_op_Read, io_op_Write }; - void add_io_oper(int fd, LendersOperPtr, io_op type); - void add_wait_oper(LendersWaitOperPtr); - void add_completed_oper(LendersOperPtr) noexcept; - - using PostOperConstr = post_oper_base*(void* addr, size_t size, impl&, const void* cookie); - void do_post(PostOperConstr, size_t size, const void* cookie); - template - static post_oper_base* post_oper_constr(void* addr, size_t size, impl&, const void* cookie); - static void recycle_post_oper(impl&, post_oper_base*) noexcept; - - using clock = std::chrono::steady_clock; - - friend class socket_base; - friend class socket; - friend class acceptor; - friend class buffered_input_stream; - friend class deadline_timer; -}; - - -class resolver { -public: - class query; - - resolver(io_service&); - ~resolver() noexcept {} - - io_service& service() noexcept; - - void resolve(const query&, endpoint::list&); - std::error_code resolve(const query&, endpoint::list&, std::error_code&); - -private: - io_service& m_service; -}; - - -class resolver::query { -public: - enum { - /// Locally bound socket endpoint (server side) - passive = AI_PASSIVE, - - /// Ignore families without a configured non-loopback address - address_configured = AI_ADDRCONFIG - }; - - query(std::string service, int flags = passive|address_configured); - query(const protocol&, std::string service, int flags = passive|address_configured); - query(std::string host, std::string service, int flags = address_configured); - query(const protocol&, std::string host, std::string service, int flags = address_configured); - - ~query() noexcept; - - int flags() const; - class protocol protocol() const; - std::string host() const; - std::string service() const; - -private: - int m_flags; - class protocol m_protocol; - std::string m_host; // hostname - std::string m_service; // port - - friend class resolver; -}; - - -class socket_base { -public: - ~socket_base() noexcept; - - io_service& service() noexcept; - - bool is_open() const noexcept; - - void open(const protocol&); - std::error_code open(const protocol&, std::error_code&); - - /// \brief Close this socket. - /// - /// If the socket is open, it will be closed. If it is already closed (or - /// never opened), this function does nothing (idempotency). - /// - /// A socket is automatically closed when destroyed. - /// - /// When the socket is closed, any incomplete asynchronous operation will be - /// canceled (as if cancel() was called). - void close() noexcept; - - /// \brief Cancel all asynchronous operations. - /// - /// Cause all incomplete asynchronous operations, that are associated with - /// this socket, to fail with `error::operation_aborted`. An asynchronous - /// operation is complete precisely when its completion handler starts - /// executing. - /// - /// Completion handlers of canceled operations will become immediately ready - /// to execute, but will never be executed directly as part of the execution - /// of cancel(). - void cancel() noexcept; - - template - void get_option(O& option) const; - - template - std::error_code get_option(O& option, std::error_code&) const; - - template - void set_option(const O& option); - - template - std::error_code set_option(const O& option, std::error_code&); - - void bind(const endpoint&); - std::error_code bind(const endpoint&, std::error_code&); - - endpoint local_endpoint() const; - endpoint local_endpoint(std::error_code&) const; - -private: - enum opt_enum { - opt_ReuseAddr, ///< `SOL_SOCKET`, `SO_REUSEADDR` - opt_Linger, ///< `SOL_SOCKET`, `SO_LINGER` - }; - - template class option; - -public: - typedef option reuse_address; - - // linger struct defined by POSIX sys/socket.h. - struct linger_opt; - typedef option linger; - -private: - int m_sock_fd; - bool m_in_blocking_mode; // Not in nonblocking mode - -protected: - io_service& m_service; - protocol m_protocol; - io_service::OwnersOperPtr m_read_oper; // Read or accept - io_service::OwnersOperPtr m_write_oper; // Write or connect - - socket_base(io_service&); - - int get_sock_fd() noexcept; - void do_close() noexcept; - - void get_option(opt_enum, void* value_data, size_t& value_size, std::error_code&) const; - void set_option(opt_enum, const void* value_data, size_t value_size, std::error_code&); - void map_option(opt_enum, int& level, int& option_name) const; - - // `ec` untouched on success - std::error_code ensure_blocking_mode(std::error_code& ec) noexcept; - std::error_code ensure_nonblocking_mode(std::error_code& ec) noexcept; - -private: - // `ec` untouched on success - std::error_code set_nonblocking_mode(bool enable, std::error_code&) noexcept; - - friend class acceptor; -}; - - -template -class socket_base::option { -public: - option(T value = T()); - T value() const; - -private: - T m_value; - - void get(const socket_base&, std::error_code&); - void set(socket_base&, std::error_code&) const; - - friend class socket_base; -}; - -struct socket_base::linger_opt { - linger_opt(bool enabled, int timeout_seconds = 0) - { - m_linger.l_onoff = enabled ? 1 : 0; - m_linger.l_linger = timeout_seconds; - } - - ::linger m_linger; - - operator ::linger() const { return m_linger; } - - bool enabled() const { return m_linger.l_onoff != 0; } - int timeout() const { return m_linger.l_linger; } -}; - - -class socket: public socket_base { -public: - socket(io_service&); - ~socket() noexcept; - - void connect(const endpoint&); - std::error_code connect(const endpoint&, std::error_code&); - - /// \brief Perform an asynchronous connect operation. - /// - /// Initiate an asynchronous connect operation. The completion handler is - /// called when the operation completes. The operation completes when the - /// connection is established, or an error occurs. - /// - /// The specified handler object will be copied as necessary, and will be - /// executed by an expression on the form `handler(ec)` where `ec` is the - /// error code. - /// - /// It is an error to start a new connect operation (synchronous or - /// asynchronous) while an asynchronous connect operation is in progress. An - /// asynchronous connect operation is considered complete as soon as the - /// completion handler starts executing. - /// - /// The operation can be canceled by calling cancel(), and will be - /// automatically canceled if the socket is closed. If the operation is - /// canceled, it will fail with `error::operation_aborted`. The completion - /// handler will always be called, as long as the event loop is running. - /// - /// \param ep The remote endpoint of the connection to be established. - template - void async_connect(const endpoint& ep, const H& handler); - - void write(const char* data, size_t size); - std::error_code write(const char* data, size_t size, std::error_code&) noexcept; - - /// \brief Perform an asynchronous write operation. - /// - /// Initiate an asynchronous write operation. The completion handler is - /// called when the operation completes. The operation completes when all - /// the specified bytes have been written to the socket, or an error occurs. - /// - /// The specified handler object will be copied as necessary, and will be - /// executed by an expression on the form `handler(ec, n)` where `ec` is the - /// error code, and `n` is the number of bytes written (of type `size_t`). - /// - /// It is an error to start an asynchronous write operation before the - /// socket is connected. - /// - /// It is an error to start a new write operation (synchronous or - /// asynchronous) while an asynchronous write operation is in progress. An - /// asynchronous write operation is considered complete as soon as the - /// completion handler starts executing. This means that a new write - /// operation can be started from the completion handler of another - /// asynchronous write operation. - /// - /// The operation can be canceled by calling cancel(), and will be - /// automatically canceled if the socket is closed. If the operation is - /// canceled, it will fail with `error::operation_aborted`. The completion - /// handler will always be called, as long as the event loop is running. - template - void async_write(const char* data, size_t size, const H& handler); - - /// @{ \brief Read at least one byte from this socket. - /// - /// If \a size is zero, both versions of read_some() will return zero - /// without blocking. Read errors may or may not be detected in this case. - /// - /// Otherwise, if \a size is greater than zero, and at least one byte is - /// immediately available, that is, without blocking, then both versions - /// will read at least one byte (but generally as many immediately available - /// bytes as will fit into the specified buffer), and return without - /// blocking. - /// - /// Otherwise, both versions will block the calling thread until at least one - /// byte becomes available, or an error occurs. - /// - /// In this context, it counts as an error, if the end of input is reached - /// before at least one byte becomes available (see - /// `network::end_of_input`). - /// - /// If no error occurs, both versions will return the number of bytes placed - /// in the specified buffer, which is generally as many as are immediately - /// available at the time when the first byte becomes available, although - /// never more than \a size. - /// - /// If no error occurs, the three-argument version will set \a ec to - /// indicate success. - /// - /// If an error occurs, the two-argument version will throw - /// `std::system_error`, while the three-argument version will set \a ec to - /// indicate the error, and return zero. - /// - /// As long as \a size is greater than zero, the two argument version will - /// always return a value that is greater than zero, while the three - /// argument version will return a value greater than zero when, and only - /// when \a ec is set to indicate success (no error, and no end of input). - size_t read_some(char* buffer, size_t size); - size_t read_some(char* buffer, size_t size, std::error_code& ec) noexcept; - /// @} - - /// @{ \brief Write at least one byte to this socket. - /// - /// If \a size is zero, both versions of write_some() will return zero - /// without blocking. Write errors may or may not be detected in this case. - /// - /// Otherwise, if \a size is greater than zero, and at least one byte can be - /// written immediately, that is, without blocking, then both versions will - /// write at least one byte (but generally as many as can be written - /// immediately), and return without blocking. - /// - /// Otherwise, both versions will block the calling thread until at least one - /// byte can be written, or an error occurs. - /// - /// If no error occurs, both versions will return the number of bytes - /// written, which is generally as many as can be written immediately at the - /// time when the first byte can be written. - /// - /// If no error occurs, the three-argument version will set \a ec to - /// indicate success. - /// - /// If an error occurs, the two-argument version will throw - /// `std::system_error`, while the three-argument version will set \a ec to - /// indicate the error, and return zero. - /// - /// As long as \a size is greater than zero, the two argument version will - /// always return a value that is greater than zero, while the three - /// argument version will return a value greater than zero when, and only - /// when \a ec is set to indicate success. - size_t write_some(const char* data, size_t size); - size_t write_some(const char* data, size_t size, std::error_code&) noexcept; - /// @} - - enum shutdown_type { - /// Shutdown the receive side of the socket. - shutdown_receive = SHUT_RD, - - /// Shutdown the send side of the socket. - shutdown_send = SHUT_WR, - - /// Shutdown both send and receive on the socket. - shutdown_both = SHUT_RDWR - }; - - /// @{ \brief Shut down the connected sockets sending and/or receiving - /// side. - /// - /// It is an error to call this function when the socket is not both open - /// and connected. - void shutdown(shutdown_type); - std::error_code shutdown(shutdown_type, std::error_code&) noexcept; - /// @} - -private: - class connect_oper_base; - template class connect_oper; - class write_oper_base; - template class write_oper; - - using LendersConnectOperPtr = - std::unique_ptr; - using LendersWriteOperPtr = - std::unique_ptr; - - size_t do_read_some(char* buffer, size_t size, std::error_code& ec) noexcept; - size_t do_write_some(const char* data, size_t size, std::error_code&) noexcept; - - void do_async_connect(LendersConnectOperPtr); - // `ec` untouched on success, but no immediate completion - bool initiate_async_connect(const endpoint&, std::error_code& ec) noexcept; - // `ec` untouched on success - std::error_code finalize_async_connect(std::error_code& ec) noexcept; - void do_async_write(LendersWriteOperPtr); - - friend class buffered_input_stream; -}; - - -class acceptor: public socket_base { -public: - acceptor(io_service&); - ~acceptor() noexcept; - - static const int max_connections = SOMAXCONN; - - void listen(int backlog = max_connections); - std::error_code listen(int backlog, std::error_code&); - - void accept(socket&); - void accept(socket&, endpoint&); - std::error_code accept(socket&, std::error_code&); - std::error_code accept(socket&, endpoint&, std::error_code&); - - /// @{ \brief Perform an asynchronous accept operation. - /// - /// Initiate an asynchronous accept operation. The completion handler will - /// be called when the operation completes. The operation completes when the - /// connection is accepted, or an error occurs. If the operation succeeds, - /// the specified local socket will have become connected to a remote - /// socket. - /// - /// The specified handler object will be copied as necessary, and will be - /// executed by an expression on the form `handler(ec)` where `ec` is the - /// error code. - /// - /// It is an error to start a new accept operation (synchronous or - /// asynchronous) while an asynchronous accept operation is in progress. An - /// asynchronous accept operation is considered complete as soon as the - /// completion handler starts executing. This means that a new accept - /// operation can be started from the completion handler. - /// - /// The operation can be canceled by calling cancel(), and will be - /// automatically canceled if the acceptor is closed. If the operation is - /// canceled, it will fail with `error::operation_aborted`. The completion - /// handler will always be called, as long as the event loop is running. - /// - /// \param sock This is the local socket, that upon successful completion - /// will have become connected to the remote socket. It must be in the - /// closed state (socket::is_open()) when async_accept() is called. - /// - /// \param ep Upon completion, the remote peer endpoint will have been - /// assigned to this variable. - template - void async_accept(socket& sock, const H& handler); - - template - void async_accept(socket& sock, endpoint& ep, const H& handler); - /// @} - -private: - std::error_code accept(socket&, endpoint*, std::error_code&); - std::error_code do_accept(socket&, endpoint*, std::error_code&) noexcept; - - class accept_oper_base; - template class accept_oper; - - using LendersAcceptOperPtr = std::unique_ptr; - - template - void async_accept(socket&, endpoint*, const H&); - void do_async_accept(LendersAcceptOperPtr); -}; - - -class buffered_input_stream { -public: - buffered_input_stream(socket&); - ~buffered_input_stream() noexcept; - - size_t read(char* buffer, size_t size); - size_t read(char* buffer, size_t size, std::error_code&) noexcept; - - size_t read_until(char* buffer, size_t size, char delim); - size_t read_until(char* buffer, size_t size, char delim, - std::error_code&) noexcept; - - /// @{ \brief Perform an asynchronous read operation. - /// - /// Initiate an asynchronous buffered read operation on the associated - /// socket. The completion handler will be called when the operation - /// completes, or an error occurs. - /// - /// async_read() will continue reading until the specified buffer is full, - /// or an error occurs. If the end of input is reached before the buffer is - /// filled, the operation fails with `network::end_of_input`. - /// - /// async_read_until() will continue reading until the specified buffer - /// contains the specified delimiter, or an error occurs. If the buffer is - /// filled before a delimiter is found, the operation fails with - /// `network::delim_not_found`. Otherwise, if the end of input is reached - /// before a delimiter is found, the operation fails with - /// `network::end_of_input`. Otherwise, if the operation succeeds, the last - /// byte placed in the buffer is the delimiter. - /// - /// The specified handler object will be copied as necessary, and will be - /// executed by an expression on the form `handler(ec, n)` where `ec` is the - /// error code, and `n` is the number of bytes placed in the buffer. `n` is - /// guaranteed to be less than, or equal to \a size. - /// - /// It is an error to start a new read operation (synchronous or - /// asynchronous) while an asynchronous read operation is in progress. An - /// asynchronous read operation is considered complete as soon as the - /// completion handler starts executing. This means that a new read - /// operation can be started from the completion handler of another - /// asynchronous buffered read operation. - /// - /// The operation can be canceled by calling socket::cancel(), and will be - /// automatically canceled if the associated socket is closed. If the - /// operation is canceled, it will fail with `error::operation_aborted`. The - /// completion handler will always be called, as long as the event loop is - /// running. - /// - /// When an asynchronous operation is started, the caller must ensure that - /// one (or both) of the following events occur before the destruction of - /// the stream object: - /// - /// - The completion handler is called (entry into the completion handler). - /// - /// - The asynchronous operation is canceled (the socket is closed). - template - void async_read(char* buffer, size_t size, const H& handler); - - template - void async_read_until(char* buffer, size_t size, char delim, const H& handler); - /// @} - - /// Discard any buffered input. - void reset() noexcept; - -private: - class read_oper_base; - template class read_oper; - - using LendersReadOperPtr = std::unique_ptr; - - socket& m_socket; - static const size_t s_buffer_size = 1024; - std::unique_ptr m_buffer; - char* m_begin; - char* m_end; - - size_t do_read(char* buffer, size_t size, int delim, std::error_code&) noexcept; - - template - void async_read(char* buffer, size_t size, int delim, const H& handler); - void do_async_read(LendersReadOperPtr); -}; - - -/// \brief A timer object supporting asynchronous wait operations. -class deadline_timer { -public: - deadline_timer(io_service&); - ~deadline_timer() noexcept; - - io_service& service() noexcept; - - /// \brief Perform an asynchronous wait operation. - /// - /// Initiate an asynchronous wait operation. The completion handler becomes - /// ready to execute when the expiration time is reached, or an error occurs - /// (cancellation counts as an error here). The completion handler will - /// **always** be executed, as long as a thread is executing the event - /// loop. The error code passed to the complition handler will **never** - /// indicate success, unless the expiration time was reached. The completion - /// handler will never be called directly as part of the execution of - /// async_wait(). - /// - /// An asynchronous wait operation in progress can be canceled by calling - /// cancel(), and will be automatically canceled if the deadline timer is - /// destroyed. If the operation is canceled, its completion handler will be - /// called with `error::operation_aborted`. - /// - /// The specified handler object will be copied as necessary, and will be - /// executed by an expression on the form `handler(ec)` where `ec` is the - /// error code. - /// - /// It is an error to start a new asynchronous wait operation while an - /// another one is in progress. An asynchronous wait operation is in - /// progress until its completion handler starts executing. - /// - /// \param ep The remote endpoint of the connection to be established. - template - void async_wait(std::chrono::duration delay, const H& handler) noexcept; - - /// \brief Cancel an asynchronous wait operation. - /// - /// If an asynchronous wait operation, that is associated with this deadline - /// timer, is in progress, cause it to fail with - /// `error::operation_aborted`. An asynchronous wait operation is in - /// progress until its completion handler starts executing. - /// - /// Completion handlers of canceled operations will become immediately ready - /// to execute, but will never be executed directly as part of the execution - /// of cancel(). - void cancel() noexcept; - -private: - template class wait_oper; - - using clock = io_service::clock; - - io_service& m_service; - io_service::OwnersOperPtr m_wait_oper; -}; - - -enum errors { - /// End of input. - end_of_input = 1, - - /// Delimiter not found. - delim_not_found, - - /// Host not found (authoritative). - host_not_found, - - /// Host not found (non-authoritative). - host_not_found_try_again, - - /// The query is valid but does not have associated address data. - no_data, - - /// A non-recoverable error occurred. - no_recovery, - - /// The service is not supported for the given socket type. - service_not_found, - - /// The socket type is not supported. - socket_type_not_supported -}; - -std::error_code make_error_code(errors); - -} // namespace network -} // namespace util -} // namespace realm - -namespace std { - -template<> -struct is_error_code_enum -{ -public: - static const bool value = true; -}; - -} // namespace std - -namespace realm { -namespace util { -namespace network { - - - - - -// Implementation - -// ---------------- protocol ---------------- - -inline protocol protocol::ip_v4() -{ - protocol prot; - prot.m_family = AF_INET; - return prot; -} - -inline protocol protocol::ip_v6() -{ - protocol prot; - prot.m_family = AF_INET6; - return prot; -} - -inline bool protocol::is_ip_v4() const -{ - return m_family == AF_INET; -} - -inline bool protocol::is_ip_v6() const -{ - return m_family == AF_INET6; -} - -inline protocol::protocol(): - m_family(AF_UNSPEC), // Allow both IPv4 and IPv6 - m_socktype(SOCK_STREAM), // Or SOCK_DGRAM for UDP - m_protocol(0) // Any protocol -{ -} - -// ---------------- address ---------------- - -inline bool address::is_ip_v4() const -{ - return !m_is_ip_v6; -} - -inline bool address::is_ip_v6() const -{ - return m_is_ip_v6; -} - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const address& addr) -{ - union buffer_union { - char ip_v4[INET_ADDRSTRLEN]; - char ip_v6[INET6_ADDRSTRLEN]; - }; - char buffer[sizeof (buffer_union)]; - int af = addr.m_is_ip_v6 ? AF_INET6 : AF_INET; - const char* ret = inet_ntop(af, &addr.m_union, buffer, sizeof buffer); - if (ret == 0) { - std::error_code ec = make_basic_system_error_code(errno); - throw std::system_error(ec); - } - out << ret; - return out; -} - -inline address::address(): - m_is_ip_v6(false) -{ - m_union.m_ip_v4 = ip_v4_type(); -} - -// ---------------- endpoint ---------------- - -inline protocol endpoint::protocol() const -{ - return m_protocol; -} - -inline address endpoint::address() const -{ - class address addr; - if (m_protocol.is_ip_v4()) { - addr.m_union.m_ip_v4 = m_sockaddr_union.m_ip_v4.sin_addr; - } - else { - addr.m_union.m_ip_v6 = m_sockaddr_union.m_ip_v6.sin6_addr; - addr.m_is_ip_v6 = true; - } - return addr; -} - -inline endpoint::port_type endpoint::port() const -{ - return ntohs(m_protocol.is_ip_v4() ? m_sockaddr_union.m_ip_v4.sin_port : - m_sockaddr_union.m_ip_v6.sin6_port); -} - -inline endpoint::endpoint(): - m_protocol(protocol::ip_v4()) -{ - m_sockaddr_union.m_ip_v4 = sockaddr_ip_v4_type(); -} - -inline endpoint::list::iterator endpoint::list::begin() const -{ - return m_endpoints.data(); -} - -inline endpoint::list::iterator endpoint::list::end() const -{ - return m_endpoints.data() + m_endpoints.size(); -} - -inline size_t endpoint::list::size() const -{ - return m_endpoints.size(); -} - -// ---------------- io_service ---------------- - -class io_service::async_oper { -public: - bool in_use() const noexcept; - bool is_complete() const noexcept; - bool is_uncanceled() const noexcept; - void cancel() noexcept; - virtual void proceed() noexcept = 0; - /// Every object of type \ref async_oper must be desroyed either by a call - /// to this function or to recycle(). This function recycles the operation - /// object (commits suicide), even if it throws. - virtual void recycle_and_execute() = 0; - /// Every object of type \ref async_oper must be destroyed either by a call - /// to recycle_and_execute() or to this function. This function destroys the - /// object (commits suicide). - virtual void recycle() noexcept = 0; - /// Must be called when the owner dies, and the object is in use (not an - /// instance of UnusedOper). - virtual void orphan() noexcept = 0; -protected: - async_oper(size_t size, bool in_use) noexcept; - virtual ~async_oper() noexcept {} - bool is_canceled() const noexcept; - void set_is_complete(bool value) noexcept; - template - void do_recycle_and_execute(bool orphaned, H& handler, Args&&...); - void do_recycle(bool orphaned) noexcept; -private: - size_t m_size; // Allocated number of bytes - bool m_in_use = false; - bool m_complete = false; // Always false when not in use - bool m_canceled = false; // Always false when not in use - async_oper* m_next = nullptr; // Always null when not in use - friend class io_service; -}; - -class io_service::wait_oper_base: - public async_oper { -public: - wait_oper_base(size_t size, deadline_timer& timer, clock::time_point expiration_time): - async_oper(size, true), // Second argument is `in_use` - m_timer(&timer), - m_expiration_time(expiration_time) - { - } - void proceed() noexcept override - { - REALM_ASSERT(false); // Never called - } - void recycle() noexcept override - { - bool orphaned = !m_timer; - // Note: do_recycle() commits suicide. - do_recycle(orphaned); - } - void orphan() noexcept override - { - m_timer = 0; - } -protected: - deadline_timer* m_timer; - clock::time_point m_expiration_time; - friend class io_service; -}; - -class io_service::post_oper_base: - public async_oper { -public: - post_oper_base(size_t size, impl& serv): - async_oper(size, true), // Second argument is `in_use` - m_service(serv) - { - } - void proceed() noexcept override - { - REALM_ASSERT(false); // Never called - } - void recycle() noexcept override - { - // io_service::recycle_post_oper() destroys this operation object - io_service::recycle_post_oper(m_service, this); - } - void orphan() noexcept override - { - REALM_ASSERT(false); // Never called - } -protected: - impl& m_service; -}; - -template -class io_service::post_oper: - public post_oper_base { -public: - post_oper(size_t size, impl& serv, const H& handler): - post_oper_base(size, serv), - m_handler(handler) - { - } - void recycle_and_execute() override - { - // Recycle the operation object before the handler is exceuted, such - // that the memory is available for a new post operation that might be - // initiated during the execution of the handler. - bool was_recycled = false; - try { - H handler = std::move(m_handler); // Throws - // io_service::recycle_post_oper() destroys this operation object - io_service::recycle_post_oper(m_service, this); - was_recycled = true; - handler(); // Throws - } - catch (...) { - if (!was_recycled) { - // io_service::recycle_post_oper() destroys this operation object - io_service::recycle_post_oper(m_service, this); - } - throw; - } - } -private: - const H m_handler; -}; - -class io_service::UnusedOper: - public async_oper { -public: - UnusedOper(size_t size) noexcept: - async_oper(size, false) // Second argument is `in_use` - { - } - void proceed() noexcept override - { - REALM_ASSERT(false); // Never called - } - void recycle_and_execute() override - { - // Must never be called - REALM_ASSERT(false); - } - void recycle() noexcept override - { - // Must never be called - REALM_ASSERT(false); - } - void orphan() noexcept override - { - // Must never be called - REALM_ASSERT(false); - } -}; - -template inline void io_service::post(const H& handler) -{ - do_post(&io_service::post_oper_constr, sizeof (post_oper), &handler); -} - -inline void io_service::OwnersOperDeleter::operator()(async_oper* op) const noexcept -{ - if (op->in_use()) { - op->orphan(); - } - else { - void* addr = op; - op->~async_oper(); - delete[] static_cast(addr); - } -} - -inline void io_service::LendersOperDeleter::operator()(async_oper* op) const noexcept -{ - op->recycle(); // Suicide -} - -template std::unique_ptr -io_service::alloc(OwnersOperPtr& owners_ptr, Args&&... args) -{ - void* addr = owners_ptr.get(); - size_t size; - if (REALM_LIKELY(addr)) { - REALM_ASSERT(!owners_ptr->in_use()); - size = owners_ptr->m_size; - // We can use static dispatch in the destructor call here, since an - // object, that is not in use, is always an instance of UnusedOper. - REALM_ASSERT(dynamic_cast(owners_ptr.get())); - static_cast(owners_ptr.get())->UnusedOper::~UnusedOper(); - if (REALM_UNLIKELY(size < sizeof (Oper))) { - owners_ptr.release(); - delete[] static_cast(addr); - goto no_object; - } - } - else { - no_object: - addr = new char[sizeof (Oper)]; // Throws - size = sizeof (Oper); - owners_ptr.reset(static_cast(addr)); - } - std::unique_ptr lenders_ptr; - try { - lenders_ptr.reset(new (addr) Oper(size, std::forward(args)...)); // Throws - } - catch (...) { - new (addr) UnusedOper(size); // Does not throw - throw; - } - return lenders_ptr; -} - -template -inline void io_service::execute(std::unique_ptr& lenders_ptr) -{ - lenders_ptr.release()->recycle_and_execute(); // Throws -} - -template inline io_service::post_oper_base* -io_service::post_oper_constr(void* addr, size_t size, impl& serv, const void* cookie) -{ - const H& handler = *static_cast(cookie); - return new (addr) post_oper(size, serv, handler); // Throws -} - -inline bool io_service::async_oper::in_use() const noexcept -{ - return m_in_use; -} - -inline bool io_service::async_oper::is_complete() const noexcept -{ - return m_complete; -} - -inline bool io_service::async_oper::is_uncanceled() const noexcept -{ - return m_in_use && !m_canceled; -} - -inline void io_service::async_oper::cancel() noexcept -{ - REALM_ASSERT(m_in_use); - REALM_ASSERT(!m_canceled); - m_canceled = true; -} - -inline io_service::async_oper::async_oper(size_t size, bool in_use) noexcept: - m_size(size), - m_in_use(in_use) -{ -} - -inline bool io_service::async_oper::is_canceled() const noexcept -{ - return m_canceled; -} - -inline void io_service::async_oper::set_is_complete(bool value) noexcept -{ - REALM_ASSERT(!m_complete); - REALM_ASSERT(!value || m_in_use); - m_complete = value; -} - -template -inline void io_service::async_oper::do_recycle_and_execute(bool orphaned, H& handler, - Args&&... args) -{ - // Recycle the operation object before the handler is exceuted, such that - // the memory is available for a new post operation that might be initiated - // during the execution of the handler. - bool was_recycled = false; - try { - H handler_2 = std::move(handler); // Throws - // The caller (various subclasses of `async_oper`) must not pass any - // arguments to the completion handler by reference if they refer to - // this operation object, or parts of it. Due to the recycling of the - // operation object (`do_recycle()`), such references would become - // dangling before the invocation of the completion handler. Due to - // `std::decay`, the following tuple will introduce a copy of all - // nonconst lvalue reference arguments, preventing such references from - // being passed through. - std::tuple::type...> copy_of_args(args...); // Throws - do_recycle(orphaned); - was_recycled = true; - util::call_with_tuple(handler_2, std::move(copy_of_args)); // Throws - } - catch (...) { - if (!was_recycled) - do_recycle(orphaned); - throw; - } -} - -inline void io_service::async_oper::do_recycle(bool orphaned) noexcept -{ - REALM_ASSERT(in_use()); - void* addr = this; - size_t size = m_size; - this->~async_oper(); // Suicide - if (orphaned) { - delete[] static_cast(addr); - } - else { - new (addr) UnusedOper(size); - } -} - -// ---------------- resolver ---------------- - -inline resolver::resolver(io_service& serv): - m_service(serv) -{ -} - -inline io_service& resolver::service() noexcept -{ - return m_service; -} - -inline void resolver::resolve(const query& q, endpoint::list& l) -{ - std::error_code ec; - if (resolve(q, l, ec)) - throw std::system_error(ec); -} - -inline resolver::query::query(std::string service, int flags): - m_flags(flags), - m_service(service) -{ -} - -inline resolver::query::query(const class protocol& prot, std::string service, int flags): - m_flags(flags), - m_protocol(prot), - m_service(service) -{ -} - -inline resolver::query::query(std::string host, std::string service, int flags): - m_flags(flags), - m_host(host), - m_service(service) -{ -} - -inline resolver::query::query(const class protocol& prot, std::string host, std::string service, - int flags): - m_flags(flags), - m_protocol(prot), - m_host(host), - m_service(service) -{ -} - -inline resolver::query::~query() noexcept -{ -} - -inline int resolver::query::flags() const -{ - return m_flags; -} - -inline class protocol resolver::query::protocol() const -{ - return m_protocol; -} - -inline std::string resolver::query::host() const -{ - return m_host; -} - -inline std::string resolver::query::service() const -{ - return m_service; -} - -// ---------------- socket_base ---------------- - -inline socket_base::socket_base(io_service& service): - m_sock_fd(-1), - m_service(service) -{ -} - -inline socket_base::~socket_base() noexcept -{ - close(); -} - -inline io_service& socket_base::service() noexcept -{ - return m_service; -} - -inline bool socket_base::is_open() const noexcept -{ - return m_sock_fd != -1; -} - -inline void socket_base::open(const protocol& prot) -{ - std::error_code ec; - if (open(prot, ec)) - throw std::system_error(ec); -} - -inline void socket_base::close() noexcept -{ - if (!is_open()) - return; - cancel(); - do_close(); -} - -template -inline void socket_base::get_option(O& option) const -{ - std::error_code ec; - if (get_option(option, ec)) - throw std::system_error(ec); -} - -template -inline std::error_code socket_base::get_option(O& option, std::error_code& ec) const -{ - option.get(*this, ec); - return ec; -} - -template -inline void socket_base::set_option(const O& option) -{ - std::error_code ec; - if (set_option(option, ec)) - throw std::system_error(ec); -} - -template -inline std::error_code socket_base::set_option(const O& option, std::error_code& ec) -{ - option.set(*this, ec); - return ec; -} - -inline void socket_base::bind(const endpoint& ep) -{ - std::error_code ec; - if (bind(ep, ec)) - throw std::system_error(ec); -} - -inline endpoint socket_base::local_endpoint() const -{ - std::error_code ec; - endpoint ep = local_endpoint(ec); - if (ec) - throw std::system_error(ec); - return ep; -} - -inline int socket_base::get_sock_fd() noexcept -{ - return m_sock_fd; -} - -inline std::error_code socket_base::ensure_blocking_mode(std::error_code& ec) noexcept -{ - // Assuming that sockets are either used mostly in blocking mode, or mostly - // in nonblocking mode. - if (REALM_UNLIKELY(!m_in_blocking_mode)) { - bool enable = false; - if (set_nonblocking_mode(enable, ec)) - return ec; - m_in_blocking_mode = true; - } - return std::error_code(); // Success -} - -inline std::error_code socket_base::ensure_nonblocking_mode(std::error_code& ec) noexcept -{ - // Assuming that sockets are either used mostly in blocking mode, or mostly - // in nonblocking mode. - if (REALM_UNLIKELY(m_in_blocking_mode)) { - bool enable = true; - if (set_nonblocking_mode(enable, ec)) - return ec; - m_in_blocking_mode = false; - } - return std::error_code(); // Success -} - -template -inline socket_base::option::option(T value): - m_value(value) -{ -} - -template -inline T socket_base::option::value() const -{ - return m_value; -} - -template -inline void socket_base::option::get(const socket_base& sock, std::error_code& ec) -{ - union { - U value; - char strut[sizeof (U) + 1]; - }; - size_t value_size = sizeof strut; - sock.get_option(opt_enum(opt), &value, value_size, ec); - if (!ec) { - REALM_ASSERT(value_size == sizeof value); - m_value = T(value); - } -} - -template -inline void socket_base::option::set(socket_base& sock, std::error_code& ec) const -{ - U value = U(m_value); - sock.set_option(opt_enum(opt), &value, sizeof value, ec); -} - -// ---------------- socket ---------------- - -class socket::connect_oper_base: - public io_service::async_oper { -public: - connect_oper_base(size_t size, socket& sock, const endpoint& ep): - async_oper(size, true), // Second argument is `in_use` - m_socket(&sock) - { - if (m_socket->initiate_async_connect(ep, m_error_code)) - set_is_complete(true); // Failure, or immediate completion - } - void proceed() noexcept override - { - REALM_ASSERT(!is_complete()); - REALM_ASSERT(!is_canceled()); - REALM_ASSERT(!m_error_code); - m_socket->finalize_async_connect(m_error_code); - set_is_complete(true); - } - void recycle() noexcept override - { - bool orphaned = !m_socket; - // Note: do_recycle() commits suicide. - do_recycle(orphaned); - } - void orphan() noexcept override - { - m_socket = nullptr; - } -protected: - socket* m_socket; - std::error_code m_error_code; -}; - -template -class socket::connect_oper: - public connect_oper_base { -public: - connect_oper(size_t size, socket& sock, const endpoint& ep, const H& handler): - connect_oper_base(size, sock, ep), - m_handler(handler) - { - } - void recycle_and_execute() override - { - REALM_ASSERT(is_complete() || (is_canceled() && !m_error_code)); - bool orphaned = !m_socket; - std::error_code ec = m_error_code; - if (is_canceled()) - ec = error::operation_aborted; - // Note: do_recycle_and_execute() commits suicide. - do_recycle_and_execute(orphaned, m_handler, ec); // Throws - } -private: - const H m_handler; -}; - -class socket::write_oper_base: - public io_service::async_oper { -public: - write_oper_base(size_t size_1, socket& sock, const char* data, size_t size_2): - async_oper(size_1, true), // Second argument is `in_use` - m_socket(&sock), - m_begin(data), - m_end(data + size_2), - m_curr(data) - { - } - void initiate() noexcept - { - REALM_ASSERT(!is_complete()); - REALM_ASSERT(m_curr <= m_end); - if (m_curr == m_end) { - set_is_complete(true); // Success - } - else if (m_socket->ensure_nonblocking_mode(m_error_code)) { - set_is_complete(true); // Failure - } - } - void proceed() noexcept override - { - REALM_ASSERT(!is_complete()); - REALM_ASSERT(!is_canceled()); - REALM_ASSERT(!m_error_code); - REALM_ASSERT(m_curr <= m_end); - size_t n_1 = size_t(m_end - m_curr); - size_t n_2 = m_socket->do_write_some(m_curr, n_1, m_error_code); - REALM_ASSERT(n_2 <= n_1); - m_curr += n_2; - set_is_complete(m_error_code || m_curr == m_end); - } - void recycle() noexcept override - { - bool orphaned = !m_socket; - // Note: do_recycle() commits suicide. - do_recycle(orphaned); - } - void orphan() noexcept override - { - m_socket = 0; - } -protected: - socket* m_socket; - const char* const m_begin; // May be dangling after cancellation - const char* const m_end; // May be dangling after cancellation - const char* m_curr; // May be dangling after cancellation - std::error_code m_error_code; -}; - -template -class socket::write_oper: - public write_oper_base { -public: - write_oper(size_t size_1, socket& sock, const char* data, size_t size_2, const H& handler): - write_oper_base(size_1, sock, data, size_2), - m_handler(handler) - { - } - void recycle_and_execute() override - { - REALM_ASSERT(is_complete() || is_canceled()); - REALM_ASSERT(is_complete() == (m_error_code || m_curr == m_end)); - REALM_ASSERT(m_curr >= m_begin); - bool orphaned = !m_socket; - std::error_code ec = m_error_code; - if (is_canceled()) - ec = error::operation_aborted; - size_t num_bytes_transferred = size_t(m_curr - m_begin); - // Note: do_recycle_and_execute() commits suicide. - do_recycle_and_execute(orphaned, m_handler, ec, num_bytes_transferred); // Throws - } -private: - const H m_handler; -}; - -inline socket::socket(io_service& service): - socket_base(service) -{ -} - -inline socket::~socket() noexcept -{ -} - -inline void socket::connect(const endpoint& ep) -{ - std::error_code ec; - if (connect(ep, ec)) - throw std::system_error(ec); -} - -template -inline void socket::async_connect(const endpoint& ep, const H& handler) -{ - LendersConnectOperPtr op = - io_service::alloc>(m_write_oper, *this, ep, handler); // Throws - do_async_connect(std::move(op)); // Throws -} - -inline void socket::write(const char* data, size_t size) -{ - std::error_code ec; - if (write(data, size, ec)) - throw std::system_error(ec); -} - -template -inline void socket::async_write(const char* data, size_t size, const H& handler) -{ - LendersWriteOperPtr op = - io_service::alloc>(m_write_oper, *this, data, size, handler); // Throws - do_async_write(std::move(op)); // Throws -} - -inline size_t socket::read_some(char* buffer, size_t size) -{ - std::error_code ec; - size_t n = read_some(buffer, size, ec); - if (ec) - throw std::system_error(ec); - return n; -} - -inline size_t socket::read_some(char* buffer, size_t size, std::error_code& ec) noexcept -{ - if (ensure_blocking_mode(ec)) - return 0; - return do_read_some(buffer, size, ec); -} - -inline size_t socket::write_some(const char* data, size_t size) -{ - std::error_code ec; - size_t n = write_some(data, size, ec); - if (ec) - throw std::system_error(ec); - return n; -} - -inline size_t socket::write_some(const char* data, size_t size, std::error_code& ec) noexcept -{ - if (ensure_blocking_mode(ec)) - return 0; - return do_write_some(data, size, ec); -} - -inline void socket::shutdown(shutdown_type what) -{ - std::error_code ec; - if (shutdown(what, ec)) - throw std::system_error(ec); -} - -inline void socket::do_async_connect(LendersConnectOperPtr op) -{ - if (op->is_complete()) { - m_service.add_completed_oper(std::move(op)); - } - else { - m_service.add_io_oper(get_sock_fd(), std::move(op), io_service::io_op_Write); // Throws - } -} - -inline void socket::do_async_write(LendersWriteOperPtr op) -{ - op->initiate(); - if (op->is_complete()) { - m_service.add_completed_oper(std::move(op)); - } - else { - m_service.add_io_oper(get_sock_fd(), std::move(op), io_service::io_op_Write); // Throws - } -} - -// ---------------- acceptor ---------------- - -class acceptor::accept_oper_base: - public io_service::async_oper { -public: - accept_oper_base(size_t size, acceptor& a, socket& s, endpoint* e): - async_oper(size, true), // Second argument is `in_use` - m_acceptor(&a), - m_socket(s), - m_endpoint(e) - { - } - void initiate() noexcept - { - REALM_ASSERT(!is_complete()); - if (m_acceptor->ensure_nonblocking_mode(m_error_code)) - set_is_complete(true); // Failure - } - void proceed() noexcept override - { - REALM_ASSERT(!is_complete()); - REALM_ASSERT(!is_canceled()); - REALM_ASSERT(!m_error_code); - REALM_ASSERT(!m_socket.is_open()); - m_acceptor->do_accept(m_socket, m_endpoint, m_error_code); - set_is_complete(true); - } - void recycle() noexcept override - { - bool orphaned = !m_acceptor; - // Note: do_recycle() commits suicide. - do_recycle(orphaned); - } - void orphan() noexcept override - { - m_acceptor = 0; - } -protected: - acceptor* m_acceptor; - socket& m_socket; // May be dangling after cancellation - endpoint* const m_endpoint; // May be dangling after cancellation - std::error_code m_error_code; -}; - -template -class acceptor::accept_oper: - public accept_oper_base { -public: - accept_oper(size_t size, acceptor& a, socket& s, endpoint* e, const H& handler): - accept_oper_base(size, a, s, e), - m_handler(handler) - { - } - void recycle_and_execute() override - { - REALM_ASSERT(is_complete() || (is_canceled() && !m_error_code)); - REALM_ASSERT(is_canceled() || m_error_code || m_socket.is_open()); - bool orphaned = !m_acceptor; - std::error_code ec = m_error_code; - if (is_canceled()) - ec = error::operation_aborted; - // Note: do_recycle_and_execute() commits suicide. - do_recycle_and_execute(orphaned, m_handler, ec); // Throws - } -private: - const H m_handler; -}; - -inline acceptor::acceptor(io_service& service): - socket_base(service) -{ -} - -inline acceptor::~acceptor() noexcept -{ -} - -inline void acceptor::listen(int backlog) -{ - std::error_code ec; - if (listen(backlog, ec)) - throw std::system_error(ec); -} - -inline void acceptor::accept(socket& sock) -{ - std::error_code ec; - if (accept(sock, ec)) // Throws - throw std::system_error(ec); -} - -inline void acceptor::accept(socket& sock, endpoint& ep) -{ - std::error_code ec; - if (accept(sock, ep, ec)) // Throws - throw std::system_error(ec); -} - -inline std::error_code acceptor::accept(socket& sock, std::error_code& ec) -{ - endpoint* ep = nullptr; - return accept(sock, ep, ec); // Throws -} - -inline std::error_code acceptor::accept(socket& sock, endpoint& ep, std::error_code& ec) -{ - return accept(sock, &ep, ec); // Throws -} - -template -inline void acceptor::async_accept(socket& sock, const H& handler) -{ - endpoint* ep = nullptr; - async_accept(sock, ep, handler); // Throws -} - -template -inline void acceptor::async_accept(socket& sock, endpoint& ep, const H& handler) -{ - async_accept(sock, &ep, handler); // Throws -} - -inline std::error_code acceptor::accept(socket& sock, endpoint* ep, std::error_code& ec) -{ - REALM_ASSERT(!m_read_oper || !m_read_oper->in_use()); - if (REALM_UNLIKELY(sock.is_open())) - throw std::runtime_error("Socket is already open"); - if (ensure_blocking_mode(ec)) - return ec; - return do_accept(sock, ep, ec); -} - -template -inline void acceptor::async_accept(socket& sock, endpoint* ep, const H& handler) -{ - if (REALM_UNLIKELY(sock.is_open())) - throw std::runtime_error("Socket is already open"); - LendersAcceptOperPtr op = - io_service::alloc>(m_read_oper, *this, sock, ep, handler); // Throws - do_async_accept(std::move(op)); // Throws -} - -inline void acceptor::do_async_accept(LendersAcceptOperPtr op) -{ - op->initiate(); - if (op->is_complete()) { - m_service.add_completed_oper(std::move(op)); - } - else { - m_service.add_io_oper(get_sock_fd(), std::move(op), io_service::io_op_Read); // Throws - } -} - -// ---------------- buffered_input_stream ---------------- - -class buffered_input_stream::read_oper_base: - public io_service::async_oper { -public: - read_oper_base(size_t size_1, buffered_input_stream& s, char* buffer, size_t size_2, - int delim): - async_oper(size_1, true), // Second argument is `in_use` - m_stream(&s), - m_out_begin(buffer), - m_out_end(buffer + size_2), - m_out_curr(buffer), - m_delim(delim) - { - } - void initiate() noexcept - { - REALM_ASSERT(!is_complete()); - process_buffered_input(); - if (!is_complete()) { - if (m_stream->m_socket.ensure_nonblocking_mode(m_error_code)) - set_is_complete(true); // Failure - } - } - void process_buffered_input() noexcept; - void proceed() noexcept override; - void recycle() noexcept override - { - bool orphaned = !m_stream; - // Note: do_recycle() commits suicide. - do_recycle(orphaned); - } - void orphan() noexcept override - { - m_stream = 0; - } -protected: - buffered_input_stream* m_stream; - char* const m_out_begin; // May be dangling after cancellation - char* const m_out_end; // May be dangling after cancellation - char* m_out_curr; // May be dangling after cancellation - const int m_delim; - std::error_code m_error_code; -}; - -template -class buffered_input_stream::read_oper: - public read_oper_base { -public: - read_oper(size_t size_1, buffered_input_stream& stream, char* buffer, size_t size_2, int delim, - const H& h): - read_oper_base(size_1, stream, buffer, size_2, delim), - m_handler(h) - { - } - void recycle_and_execute() override - { - REALM_ASSERT(is_complete() || (is_canceled() && !m_error_code)); - REALM_ASSERT(is_canceled() || m_error_code || - (m_delim != std::char_traits::eof() ? - m_out_curr > m_out_begin && m_out_curr[-1] == - std::char_traits::to_char_type(m_delim) : - m_out_curr == m_out_end)); - REALM_ASSERT(m_out_curr >= m_out_begin); - bool orphaned = !m_stream; - std::error_code ec = m_error_code; - if (is_canceled()) - ec = error::operation_aborted; - size_t num_bytes_transferred = size_t(m_out_curr - m_out_begin); - // Note: do_recycle_and_execute() commits suicide. - do_recycle_and_execute(orphaned, m_handler, ec, num_bytes_transferred); // Throws - } -private: - const H m_handler; -}; - -inline buffered_input_stream::buffered_input_stream(socket& sock): - m_socket(sock), - m_buffer(new char[s_buffer_size]) // Throws -{ - reset(); -} - -inline buffered_input_stream::~buffered_input_stream() noexcept -{ -} - -inline size_t buffered_input_stream::read(char* buffer, size_t size) -{ - std::error_code ec; - size_t n = read(buffer, size, ec); - if (ec) - throw std::system_error(ec); - return n; -} - -inline size_t buffered_input_stream::read(char* buffer, size_t size, std::error_code& ec) noexcept -{ - return do_read(buffer, size, std::char_traits::eof(), ec); -} - -inline size_t buffered_input_stream::read_until(char* buffer, size_t size, char delim) -{ - std::error_code ec; - size_t n = read_until(buffer, size, delim, ec); - if (ec) - throw std::system_error(ec); - return n; -} - -inline size_t buffered_input_stream::read_until(char* buffer, size_t size, char delim, - std::error_code& ec) noexcept -{ - return do_read(buffer, size, std::char_traits::to_int_type(delim), ec); -} - -template -inline void buffered_input_stream::async_read(char* buffer, size_t size, const H& handler) -{ - async_read(buffer, size, std::char_traits::eof(), handler); -} - -template -inline void buffered_input_stream::async_read_until(char* buffer, size_t size, char delim, - const H& handler) -{ - async_read(buffer, size, std::char_traits::to_int_type(delim), handler); -} - -inline void buffered_input_stream::reset() noexcept -{ - m_begin = m_buffer.get(); - m_end = m_buffer.get(); -} - -template -inline void buffered_input_stream::async_read(char* buffer, size_t size, int delim, - const H& handler) -{ - LendersReadOperPtr op = - io_service::alloc>(m_socket.m_read_oper, *this, buffer, size, delim, - handler); // Throws - do_async_read(std::move(op)); // Throws -} - -inline void buffered_input_stream::do_async_read(LendersReadOperPtr op) -{ - op->initiate(); - if (op->is_complete()) { - m_socket.m_service.add_completed_oper(std::move(op)); - } - else { - m_socket.m_service.add_io_oper(m_socket.get_sock_fd(), std::move(op), - io_service::io_op_Read); // Throws - } -} - -// ---------------- deadline_timer ---------------- - -template -class deadline_timer::wait_oper: - public io_service::wait_oper_base { -public: - wait_oper(size_t size, deadline_timer& timer, clock::time_point expiration_time, const H& handler): - io_service::wait_oper_base(size, timer, expiration_time), - m_handler(handler) - { - } - void recycle_and_execute() override - { - bool orphaned = !m_timer; - std::error_code ec; - if (is_canceled()) - ec = error::operation_aborted; - // Note: do_recycle_and_execute() commits suicide. - do_recycle_and_execute(orphaned, m_handler, ec); // Throws - } -private: - const H m_handler; -}; - -inline deadline_timer::deadline_timer(io_service& serv): - m_service(serv) -{ -} - -inline deadline_timer::~deadline_timer() noexcept -{ - cancel(); -} - -inline io_service& deadline_timer::service() noexcept -{ - return m_service; -} - -template -inline void deadline_timer::async_wait(std::chrono::duration delay, const H& handler) noexcept -{ - clock::time_point now = clock::now(); - auto max_add = clock::time_point::max() - now; - if (delay > max_add) - throw std::runtime_error("Expiration time overflow"); - clock::time_point expiration_time = now + delay; - io_service::LendersWaitOperPtr op = - io_service::alloc>(m_wait_oper, *this, expiration_time, handler); // Throws - m_service.add_wait_oper(std::move(op)); // Throws -} - -} // namespace network -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_NETWORK_HPP diff --git a/Pods/Realm/include/core/realm/util/optional.hpp b/Pods/Realm/include/core/realm/util/optional.hpp deleted file mode 100644 index d5d88a73..00000000 --- a/Pods/Realm/include/core/realm/util/optional.hpp +++ /dev/null @@ -1,651 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - -#pragma once -#ifndef REALM_UTIL_OPTIONAL_HPP -#define REALM_UTIL_OPTIONAL_HPP - -#include - -#include // std::logic_error -#include // std::less - -namespace realm { -namespace util { - -template -class Optional; - -// some() should be the equivalent of the proposed C++17 `make_optional`. -template -Optional some(Args&&...); -template -struct Some; - -// Note: Should conform with the future std::nullopt_t and std::in_place_t. -struct None { constexpr explicit None(int) {} }; -static constexpr None none { 0 }; -struct InPlace { constexpr InPlace() {} }; -static constexpr InPlace in_place; - -// Note: Should conform with the future std::bad_optional_access. -struct BadOptionalAccess : std::logic_error { - explicit BadOptionalAccess(const std::string& what_arg) : std::logic_error(what_arg) {} - explicit BadOptionalAccess(const char* what_arg) : std::logic_error(what_arg) {} -}; - -} // namespace util - -namespace _impl { - -template::value> -struct OptionalStorage; - -// FIXME: Callers should switch to std::move when we adopt C++14 -template -inline constexpr typename std::remove_reference::type&& constexpr_move(T&& t) noexcept -{ - return static_cast::type&&>(t); -} - -// FIXME: Callers should switch to std::forward when we adopt C++14 -template -inline constexpr T&& constexpr_forward(typename std::remove_reference::type& t) noexcept -{ - return static_cast(t); -} - -// FIXME: Callers should switch to std::forward when we adopt C++14 -template -inline constexpr T&& constexpr_forward(typename std::remove_reference::type&& t) noexcept -{ - static_assert(!std::is_lvalue_reference::value, "Can't forward rvalue as lvalue."); - return static_cast(t); -} - -template -struct TypeIsAssignableToOptional { - // Constraints from [optional.object.assign.18] - static const bool value = (std::is_same::type, T>::value - && std::is_constructible::value - && std::is_assignable::value); -}; - -} // namespace _impl - -namespace util { - -// Note: Should conform with the future std::optional. -template -class Optional : private _impl::OptionalStorage { -public: - using value_type = T; - - constexpr Optional(); - constexpr Optional(None); - Optional(Optional&& other); - Optional(const Optional& other); - - constexpr Optional(T&& value); - constexpr Optional(const T& value); - - template - constexpr Optional(InPlace tag, Args&&...); - // FIXME: std::optional specifies an std::initializer_list constructor overload as well. - - Optional& operator=(None); - Optional& operator=(Optional&& other); - Optional& operator=(const Optional& other); - - template::value>::type> - Optional& operator=(U&& value); - - explicit constexpr operator bool() const; - constexpr const T& value() const; // Throws - T& value(); // Throws, FIXME: Can be constexpr with C++14 - constexpr const T& operator*() const; // Throws - T& operator*(); // Throws, FIXME: Can be constexpr with C++14 - constexpr const T* operator->() const; // Throws - T* operator->(); // Throws, FIXME: Can be constexpr with C++14 - - template - constexpr T value_or(U&& value) const&; - - template - T value_or(U&& value) &&; - - void swap(Optional& other); // FIXME: Add noexcept() clause - - template - void emplace(Args&&...); - // FIXME: std::optional specifies an std::initializer_list overload for `emplace` as well. -private: - using Storage = _impl::OptionalStorage; - using Storage::m_engaged; - using Storage::m_value; - - constexpr bool is_engaged() const { return m_engaged; } - void set_engaged(bool b) { m_engaged = b; } - void clear(); -}; - -/// An Optional is functionally equivalent to a bool. -/// Note: C++17 does not (yet) specify this specialization, but it is convenient -/// as a "safer bool", especially in the presence of `fmap`. -/// Disabled for compliance with std::optional. -// template<> -// class Optional { -// public: -// Optional() {} -// Optional(None) {} -// Optional(Optional&&) = default; -// Optional(const Optional&) = default; -// explicit operator bool() const { return m_engaged; } -// private: -// bool m_engaged = false; -// friend struct Some; -// }; - -/// An Optional is a non-owning nullable pointer that throws on dereference. -// FIXME: Visual Studio 2015's constexpr support isn't sufficient to allow Optional to compile -// in constexpr contexts. -template -class Optional { -public: - using value_type = T&; - using target_type = typename std::decay::type; - - constexpr Optional() {} - constexpr Optional(None) {} // FIXME: Was a delegating constructor, but not fully supported in VS2015 - Optional(const Optional& other) = default; - template - Optional(const Optional& other) : m_ptr(other.m_ptr) {} - template - Optional(std::reference_wrapper ref) : m_ptr(&ref.get()) {} - - constexpr Optional(T& value) : m_ptr(&value) {} - Optional(T&& value) = delete; // Catches accidental references to rvalue temporaries. - - Optional& operator=(None) { m_ptr = nullptr; return *this; } - Optional& operator=(const Optional& other) { m_ptr = other.m_ptr; return *this; } - - template - Optional& operator=(std::reference_wrapper ref) { m_ptr = &ref.get(); return *this; } - - explicit constexpr operator bool() const { return m_ptr; } - constexpr const target_type& value() const; // Throws - target_type& value(); // Throws - constexpr const target_type& operator*() const { return value(); } - target_type& operator*() { return value(); } - constexpr const target_type* operator->() const { return &value(); } - target_type* operator->() { return &value(); } - - void swap(Optional other); // FIXME: Add noexcept() clause -private: - T* m_ptr = nullptr; - - template - friend class Optional; -}; - - -template struct RemoveOptional { - using type = T; -}; -template struct RemoveOptional> { - using type = typename RemoveOptional::type; // Remove recursively -}; - - -/// Implementation: - -template -struct Some { - template - static Optional some(Args&&... args) - { - return Optional{std::forward(args)...}; - } -}; - -/// Disabled for compliance with std::optional. -// template<> -// struct Some { -// static Optional some() -// { -// Optional opt; -// opt.m_engaged = true; -// return opt; -// } -// }; - -template -Optional some(Args&&... args) -{ - return Some::some(std::forward(args)...); -} - - -template -constexpr Optional::Optional(): Storage(none) -{ -} - -template -constexpr Optional::Optional(None): Storage(none) -{ -} - -template -Optional::Optional(Optional&& other): Storage(none) -{ - if (other.m_engaged) { - new(&m_value) T(std::move(other.m_value)); - m_engaged = true; - } -} - -template -Optional::Optional(const Optional& other): Storage(none) -{ - if (other.m_engaged) { - new(&m_value) T(other.m_value); - m_engaged = true; - } -} - -template -constexpr Optional::Optional(T&& value): Storage(_impl::constexpr_move(value)) -{ -} - -template -constexpr Optional::Optional(const T& value): Storage(value) -{ -} - -template -template -constexpr Optional::Optional(InPlace, Args&&... args): Storage(std::forward(args)...) -{ -} - -template -void Optional::clear() -{ - if (m_engaged) { - m_value.~T(); - m_engaged = false; - } -} - -template -Optional& Optional::operator=(None) -{ - clear(); - return *this; -} - -template -Optional& Optional::operator=(Optional&& other) -{ - if (m_engaged) { - if (other.m_engaged) { - m_value = std::move(other.m_value); - } - else { - clear(); - } - } - else { - if (other.m_engaged) { - new(&m_value) T(std::move(other.m_value)); - m_engaged = true; - } - } - return *this; -} - -template -Optional& Optional::operator=(const Optional& other) -{ - if (m_engaged) { - if (other.m_engaged) { - m_value = other.m_value; - } - else { - clear(); - } - } - else { - if (other.m_engaged) { - new(&m_value) T(other.m_value); - m_engaged = true; - } - } - return *this; -} - -template -template -Optional& Optional::operator=(U&& value) -{ - if (m_engaged) { - m_value = std::forward(value); - } - else { - new(&m_value) T(std::forward(value)); - m_engaged = true; - } - return *this; -} - -template -constexpr Optional::operator bool() const -{ - return m_engaged; -} - -template -constexpr const T& Optional::value() const -{ - return m_engaged ? m_value : (throw BadOptionalAccess{"bad optional access"}, m_value); -} - -template -T& Optional::value() -{ - if (!m_engaged) { - throw BadOptionalAccess{"bad optional access"}; - } - return m_value; -} - -template -constexpr const typename Optional::target_type& Optional::value() const -{ - return m_ptr ? *m_ptr : (throw BadOptionalAccess{"bad optional access"}, *m_ptr); -} - -template -typename Optional::target_type& Optional::value() -{ - if (!m_ptr) { - throw BadOptionalAccess{"bad optional access"}; - } - return *m_ptr; -} - -template -constexpr const T& Optional::operator*() const -{ - // Note: This differs from std::optional, which doesn't throw. - return value(); -} - -template -T& Optional::operator*() -{ - // Note: This differs from std::optional, which doesn't throw. - return value(); -} - -template -constexpr const T* Optional::operator->() const -{ - // Note: This differs from std::optional, which doesn't throw. - return &value(); -} - -template -T* Optional::operator->() -{ - // Note: This differs from std::optional, which doesn't throw. - return &value(); -} - -template -template -constexpr T Optional::value_or(U&& otherwise) const& -{ - return m_engaged ? T{m_value} : T{_impl::constexpr_forward(otherwise)}; -} - -template -template -T Optional::value_or(U&& otherwise) && -{ - if (is_engaged()) { - return T(std::move(m_value)); - } - else { - return T(std::forward(otherwise)); - } -} - -template -void Optional::swap(Optional& other) -{ - // FIXME: This might be optimizable. - Optional tmp = std::move(other); - other = std::move(*this); - *this = std::move(tmp); -} - -template -template -void Optional::emplace(Args&&... args) -{ - clear(); - new(&m_value) T(std::forward(args)...); - m_engaged = true; -} - - -template -constexpr Optional::type> -make_optional(T&& value) -{ - using Type = typename std::decay::type; - return some(std::forward(value)); -} - -template -bool operator==(const Optional& lhs, const Optional& rhs) -{ - if (!lhs && !rhs) { return true; } - if (lhs && rhs) { return *lhs == *rhs; } - return false; -} - -template -bool operator!=(const Optional& lhs, const Optional& rhs) -{ - return !(lhs == rhs); -} - -template -bool operator<(const Optional& lhs, const Optional& rhs) -{ - if (!rhs) { return false; } - if (!lhs) { return true; } - return std::less{}(*lhs, *rhs); -} - -template -bool operator>(const util::Optional& lhs, const util::Optional& rhs) -{ - if (!lhs) { return false; } - if (!rhs) { return true; } - return std::greater{}(*lhs, *rhs); -} - -template -bool operator==(const Optional& lhs, None) -{ - return !bool(lhs); -} - -template -bool operator!=(const Optional& lhs, None) -{ - return bool(lhs); -} - -template -bool operator<(const Optional& lhs, None) -{ - static_cast(lhs); - return false; -} - -template -bool operator==(None, const Optional& rhs) -{ - return !bool(rhs); -} - -template -bool operator!=(None, const Optional& rhs) -{ - return bool(rhs); -} - -template -bool operator<(None, const Optional& rhs) -{ - return bool(rhs); -} - -template -bool operator==(const Optional& lhs, const U& rhs) -{ - return lhs ? *lhs == rhs : false; -} - -template -bool operator<(const Optional& lhs, const T& rhs) -{ - return lhs ? std::less{}(*lhs, rhs) : true; -} - -template -bool operator==(const T& lhs, const Optional& rhs) -{ - return rhs ? lhs == *rhs : false; -} - -template -bool operator<(const T& lhs, const Optional& rhs) -{ - return rhs ? std::less{}(lhs, *rhs) : false; -} - -template -auto operator>>(Optional lhs, F&& rhs) -> decltype(fmap(lhs, std::forward(rhs))) -{ - return fmap(lhs, std::forward(rhs)); -} - -template -OS& operator<<(OS& os, const Optional& rhs) -{ - if (rhs) { - os << "some(" << *rhs << ")"; - } - else { - os << "none"; - } - return os; -} - -template -T unwrap(T&& value) -{ - return value; -} - -template -T unwrap(util::Optional&& value) -{ - return *value; -} - -template -T unwrap(const util::Optional& value) -{ - return *value; -} - -template -T unwrap(util::Optional& value) -{ - return *value; -} - -} // namespace util - -namespace _impl { - -// T is trivially destructible. -template -struct OptionalStorage { - union { - T m_value; - char m_null_state; - }; - bool m_engaged = false; - - constexpr OptionalStorage(realm::util::None) : m_null_state() { } - constexpr OptionalStorage(T&& value) : m_value(constexpr_move(value)), m_engaged(true) { } - - template - constexpr OptionalStorage(Args&&... args): m_value(args...), m_engaged(true) { } -}; - -// T is not trivially destructible. -template -struct OptionalStorage { - union { - T m_value; - char m_null_state; - }; - bool m_engaged = false; - - constexpr OptionalStorage(realm::util::None) : m_null_state() { } - constexpr OptionalStorage(T&& value) : m_value(constexpr_move(value)), m_engaged(true) { } - - template - constexpr OptionalStorage(Args&&... args): m_value(args...), m_engaged(true) { } - - ~OptionalStorage() - { - if (m_engaged) - m_value.~T(); - } -}; - -} // namespace _impl - -using util::none; - -} // namespace realm - -#endif // REALM_UTIL_OPTIONAL_HPP diff --git a/Pods/Realm/include/core/realm/util/priority_queue.hpp b/Pods/Realm/include/core/realm/util/priority_queue.hpp deleted file mode 100644 index a0eb0ec2..00000000 --- a/Pods/Realm/include/core/realm/util/priority_queue.hpp +++ /dev/null @@ -1,312 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ - - -#pragma once -#ifndef REALM_UTIL_PRIORITY_QUEUE_HPP -#define REALM_UTIL_PRIORITY_QUEUE_HPP - -#include -#include -#include - -namespace realm { -namespace util { - - -/// PriorityQueue corresponds exactly to `std::priority_queue`, but has the extra feature -/// of allowing iteration and erasure of elements in the queue. -/// -/// PriorityQueue only allows const access to its elements, because non-const access -/// would open up the risk of changing the ordering of the elements. -/// -/// Note: As opposed to `std::priority_queue`, this does not store elements in a heap -/// internally. Instead, elements are stored in sorted order. Users of this class are -/// allowed to operate on this assumption. -template, - class Compare = std::less> -class PriorityQueue : private Compare { -public: - using container_type = Container; - using value_type = typename Container::value_type; - using size_type = typename Container::size_type; - using reference = typename Container::reference; - using const_reference = typename Container::const_reference; - using const_reverse_iterator = typename Container::const_reverse_iterator; - using const_iterator = typename Container::const_iterator; - - //{@ - /// Construct a PriorityQueue, optionally providing a comparator object. - PriorityQueue(const Compare& compare, const Container& cont); - - explicit PriorityQueue(const Compare& compare = Compare{}, Container&& cont = Container{}); - - template - PriorityQueue(InputIt first, InputIt last, const Compare& compare, const Container& cont); - - template - PriorityQueue(InputIt first, InputIt last, const Compare& compare = Compare{}, - Container&& cont = Container{}); - //@} - // Skipping Allocator-specific template constructors. - - PriorityQueue(const PriorityQueue&) = default; - PriorityQueue(PriorityQueue&&) = default; - PriorityQueue& operator=(const PriorityQueue&) = default; - PriorityQueue& operator=(PriorityQueue&&) = default; - - bool empty() const; - size_type size() const; - - //{@ - /// Push an element to the priority queue. - /// - /// If insertion to the underlying `Container` invalidates - /// iterators and references, any iterators and references into this - /// priority queue are also invalidated. By default, this is the case. - void push(const T& value); - void push(T&& value); - //@} - - /// Pop the largest element from the priority queue. - /// - /// If `pop_back` on the underlying `Container` invalidates - /// iterators and references, any iterators and reference into this - /// priority queue are also invalidated. By default, this is *NOT* the case. - /// - /// Calling `pop()` on an empty priority queue is undefined. - void pop(); - - /// Return a reference to the largest element of the priority queue. - /// - /// Calling `top()` on an empty priority queue is undefined. - const_reference top() const; - - /// Pop the top of the queue and return it by moving it out of the queue. - /// - /// Note: This method does not exist in `std::priority_queue`. - /// - /// Calling `pop_top()` on an empty priorty queue is undefined. - value_type pop_top(); - - // FIXME: emplace() deliberately omitted for simplicity. - - /// Swap the contents of this priority queue with the contents of \a other. - void swap(PriorityQueue& other); - - // Not in std::priority_queue: - - /// Return an iterator to the beginning of the queue (smallest element first). - const_iterator begin() const; - - /// Return an iterator to the end of the queue (largest element last); - const_iterator end() const; - - /// Return a reverse iterator into the priority queue (largest element first). - const_reverse_iterator rbegin() const; - - /// Return a reverse iterator representing the end of the priority queue (smallest element last). - const_reverse_iterator rend() const; - - /// Erase element pointed to by \a it. - /// - /// Note: This function differs from `std::priority_queue` by returning the erased - /// element using move semantics. - /// - /// Calling `erase()` with a beyond-end iterator (such as what is returned by `end()`) - /// is undefined. - value_type erase(const_iterator it); - - /// Remove all elements from the priority queue. - void clear(); - - /// Calls `reserve()` on the underlying `Container`. - void reserve(size_type); - -private: - Container m_queue; - - const Compare& compare() const; - Compare& compare(); -}; - - -/// Implementation - -template -PriorityQueue::PriorityQueue(const Compare& compare, const Container& cont): - Compare(compare), m_queue(cont) -{ -} - -template -PriorityQueue::PriorityQueue(const Compare& compare, Container&& cont): - Compare(compare), m_queue(std::move(cont)) -{ -} - -template -template -PriorityQueue::PriorityQueue(InputIt first, InputIt last, - const Compare& compare, const Container& cont): - Compare(compare), m_queue(cont) -{ - for (auto it = first; it != last; ++it) { - push(*it); - } -} - -template -template -PriorityQueue::PriorityQueue(InputIt first, InputIt last, - const Compare& compare, Container&& cont): - Compare(compare), m_queue(std::move(cont)) -{ - for (auto it = first; it != last; ++it) { - push(*it); - } -} - -template -typename PriorityQueue::size_type -PriorityQueue::size() const -{ - return m_queue.size(); -} - -template -bool PriorityQueue::empty() const -{ - return m_queue.empty(); -} - -template -void PriorityQueue::push(const T& element) -{ - auto it = std::lower_bound(m_queue.begin(), m_queue.end(), element, compare()); - m_queue.insert(it, element); -} - -template -void PriorityQueue::push(T&& element) -{ - auto it = std::lower_bound(m_queue.begin(), m_queue.end(), element, compare()); - m_queue.insert(it, std::move(element)); -} - -template -void PriorityQueue::pop() -{ - m_queue.pop_back(); -} - -template -typename PriorityQueue::const_reference -PriorityQueue::top() const -{ - return m_queue.back(); -} - -template -typename PriorityQueue::value_type -PriorityQueue::pop_top() -{ - value_type value = std::move(m_queue.back()); - m_queue.pop_back(); - return value; -} - -template -Compare& PriorityQueue::compare() -{ - return *this; -} - -template -const Compare& PriorityQueue::compare() const -{ - return *this; -} - -template -typename PriorityQueue::const_iterator -PriorityQueue::begin() const -{ - return m_queue.begin(); -} - -template -typename PriorityQueue::const_iterator -PriorityQueue::end() const -{ - return m_queue.end(); -} - -template -typename PriorityQueue::const_reverse_iterator -PriorityQueue::rbegin() const -{ - return m_queue.rbegin(); -} - -template -typename PriorityQueue::const_reverse_iterator -PriorityQueue::rend() const -{ - return m_queue.rend(); -} - -template -typename PriorityQueue::value_type -PriorityQueue::erase(const_iterator it) -{ - // Convert to non-const iterator: - auto non_const_iterator = m_queue.begin() + (it - m_queue.begin()); - value_type value = std::move(*non_const_iterator); - m_queue.erase(non_const_iterator); - return value; -} - -template -void PriorityQueue::clear() -{ - m_queue.clear(); -} - -template -void PriorityQueue::reserve(size_type sz) -{ - m_queue.reserve(sz); -} - -template -void PriorityQueue::swap(PriorityQueue& other) -{ - using std::swap; - swap(m_queue, other.m_queue); - swap(compare(), other.compare()); -} - - -} -} - -#endif // REALM_UTIL_PRIORITY_QUEUE_HPP - diff --git a/Pods/Realm/include/core/realm/util/safe_int_ops.hpp b/Pods/Realm/include/core/realm/util/safe_int_ops.hpp deleted file mode 100644 index 9a94b0db..00000000 --- a/Pods/Realm/include/core/realm/util/safe_int_ops.hpp +++ /dev/null @@ -1,633 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_SAFE_INT_OPS_HPP -#define REALM_UTIL_SAFE_INT_OPS_HPP - -#include - -#include -#include -#include -#include - -namespace realm { -namespace util { - - -/// Perform integral or floating-point promotion on the argument. This -/// is useful for example when printing a number of arbitrary numeric -/// type to 'stdout', since it will convert values of character-like -/// types to regular integer types, which will then be printed as -/// numbers rather characters. -template -typename Promote::type promote(T value) noexcept; - - -/// This function allows you to test for a negative value in any -/// numeric type, even when the type is unsigned. Normally, when the -/// type is unsigned, such a test will produce a compiler warning. -template -bool is_negative(T value) noexcept; - - -/// Cast the specified value to the specified unsigned type reducing -/// the value (or in case of negative values, the two's complement -/// representation) modulo `2**N` where `N` is the number of value -/// bits (or digits) in the unsigned target type. This is usefull in -/// cases where the target type may be `bool`, but need not be `bool`. -template -To cast_to_unsigned(From) noexcept; - - -//@{ - -/// Compare two integers of the same, or of different type, and -/// produce the expected result according to the natural -/// interpretation of the operation. -/// -/// Note that in general a standard comparison between a signed and an -/// unsigned integer type is unsafe, and it often generates a compiler -/// warning. An example is a 'less than' comparison between a negative -/// value of type 'int' and a small positive value of type -/// 'unsigned'. In this case the negative value will be converted to -/// 'unsigned' producing a large positive value which, in turn, will -/// lead to the counter intuitive result of 'false'. -/// -/// Please note that these operation incur absolutely no overhead when -/// the two types have the same signedness. -/// -/// These functions check at compile time that both types have valid -/// specializations of std::numeric_limits<> and that both are indeed -/// integers. -/// -/// These functions make absolutely no assumptions about the platform -/// except that it complies with at least C++03. - -template -inline bool int_equal_to(A,B) noexcept; -template -inline bool int_not_equal_to(A,B) noexcept; -template -inline bool int_less_than(A,B) noexcept; -template -inline bool int_less_than_or_equal(A,B) noexcept; -template -inline bool int_greater_than(A,B) noexcept; -template -inline bool int_greater_than_or_equal(A,B) noexcept; - -//@} - - -//@{ - -/// Check for overflow in integer variable `lval` while adding integer -/// `rval` to it, or while subtracting integer `rval` from it. Returns -/// true on positive or negative overflow. -/// -/// Both `lval` and `rval` must be of an integer type for which a -/// specialization of std::numeric_limits<> exists. The two types need -/// not be the same, in particular, one can be signed and the other -/// one can be unsigned. -/// -/// These functions are especially well suited for cases where \a rval -/// is a compile-time constant. -/// -/// These functions check at compile time that both types have valid -/// specializations of std::numeric_limits<> and that both are indeed -/// integers. -/// -/// These functions make absolutely no assumptions about the platform -/// except that it complies with at least C++03. - -template -inline bool int_add_with_overflow_detect(L& lval, R rval) noexcept; - -template -inline bool int_subtract_with_overflow_detect(L& lval, R rval) noexcept; - -//@} - - -/// Check for positive overflow when multiplying two positive integers -/// of the same, or of different type. Returns true on overflow. -/// -/// \param lval Must not be negative. Both signed and unsigned types -/// can be used. -/// -/// \param rval Must be stricly greater than zero. Both signed and -/// unsigned types can be used. -/// -/// This function is especially well suited for cases where \a rval is -/// a compile-time constant. -/// -/// This function checks at compile time that both types have valid -/// specializations of std::numeric_limits<> and that both are indeed -/// integers. -/// -/// This function makes absolutely no assumptions about the platform -/// except that it complies with at least C++03. -template -inline bool int_multiply_with_overflow_detect(L& lval, R rval) noexcept; - - -/// Checks for positive overflow when performing a bitwise shift to -/// the left on a non-negative value of arbitrary integer -/// type. Returns true on overflow. -/// -/// \param lval Must not be negative. Both signed and unsigned types -/// can be used. -/// -/// \param i Must be non-negative and such that L(1)>>i has a -/// value that is defined by the C++03 standard. -/// -/// This function makes absolutely no assumptions about the platform -/// except that it complies with at least C++03. -template -inline bool int_shift_left_with_overflow_detect(T& lval, int i) noexcept; - - -//@{ - -/// Check for overflow when casting an integer value from one type to -/// another. While the first function is a mere check, the second one -/// also carries out the cast, but only when there is no -/// overflow. Both return true on overflow. -/// -/// These functions check at compile time that both types have valid -/// specializations of std::numeric_limits<> and that both are indeed -/// integers. -/// -/// These functions make absolutely no assumptions about the platform -/// except that it complies with at least C++03. - -template -bool int_cast_has_overflow(From from) noexcept; - -template -bool int_cast_with_overflow_detect(From from, To& to) noexcept; - -//@} - - -/// Convert negative values from two's complement representation to the -/// platforms native representation. -/// -/// If `To` is an unsigned type, this function does nothing beyond casting the -/// specified value to `To`. Otherwise, `To` is a signed type, and negative -/// values will be converted from two's complement representation in unsigned -/// `From` to the platforms native representation in `To`. -/// -/// For signed `To` the result is well-defined if, and only if the value with -/// the specified two's complement representation is representable in the -/// specified signed type. While this is generally the case when using -/// corresponding signed/unsigned type pairs, it is not guaranteed by the -/// standard. However, if you know that the signed type has at least as many -/// value bits as the unsigned type, then the result is always -/// well-defined. Note that a 'value bit' in this context is the same as a -/// 'digit' from the point of view of `std::numeric_limits`. -/// -/// On platforms that use two's complement representation of negative values, -/// this function is expected to be completely optimized away. This has been -/// observed to be true with both GCC 4.8 and Clang 3.2. -/// -/// Note that the **opposite** direction (from the platforms native -/// representation to two's complement) is trivially handled by casting the -/// signed value to a value of a sufficiently wide unsigned integer type. An -/// unsigned type will be sufficiently wide if it has at least one more value -/// bit than the signed type. -/// -/// Interestingly, the C++ language offers no direct way of doing what this -/// function does, yet, this function is implemented in a way that makes no -/// assumption about the underlying platform except what is guaranteed by C++11. -/// -/// \tparam From The unsigned type used to store the two's complement -/// representation. -/// -/// \tparam To A signed or unsigned integer type. -template -To from_twos_compl(From twos_compl) noexcept; - - - - - - -// Implementation: - -template -inline typename Promote::type promote(T value) noexcept -{ - typedef typename Promote::type promoted_type; - promoted_type value_2 = promoted_type(value); - return value_2; -} - -} // namespace util - -namespace _impl { - -template -struct IsNegative { - static bool test(T value) noexcept - { - return value < 0; - } -}; -template -struct IsNegative { - static bool test(T) noexcept - { - return false; - } -}; - -template -struct CastToUnsigned { - template - static To cast(From value) noexcept - { - return To(value); - } -}; -template<> -struct CastToUnsigned -{ - template - static bool cast(From value) noexcept - { - return bool(unsigned(value) & 1); - } -}; - -template -struct SafeIntBinopsImpl {}; - -// (unsigned, unsigned) (all size combinations) -// -// This implementation utilizes the fact that overflow in unsigned -// arithmetic is guaranteed to be handled by reduction modulo 2**N -// where N is the number of bits in the unsigned type. The purpose of -// the bitwise 'and' with lim_l::max() is to make a cast to bool -// behave the same way as casts to other unsigned integer types. -// Finally, this implementation uses the fact that if modular addition -// overflows, then the result must be a value that is less than both -// operands. Also, if modular subtraction overflows, then the result -// must be a value that is greater than the first operand. -template -struct SafeIntBinopsImpl { - typedef std::numeric_limits lim_l; - typedef std::numeric_limits lim_r; - static const int needed_bits_l = lim_l::digits; - static const int needed_bits_r = lim_r::digits; - static const int needed_bits = needed_bits_l >= needed_bits_r ? needed_bits_l : needed_bits_r; - typedef typename util::FastestUnsigned::type common_unsigned; - static bool equal(L l, R r) noexcept - { - return common_unsigned(l) == common_unsigned(r); - } - static bool less(L l, R r) noexcept - { - return common_unsigned(l) < common_unsigned(r); - } - static bool add(L& lval, R rval) noexcept - { - L lval_2 = util::cast_to_unsigned(lval + rval); - bool overflow = common_unsigned(lval_2) < common_unsigned(rval); - if (REALM_UNLIKELY(overflow)) - return true; - lval = lval_2; - return false; - } - static bool sub(L& lval, R rval) noexcept - { - common_unsigned lval_2 = common_unsigned(lval) - common_unsigned(rval); - bool overflow = lval_2 > common_unsigned(lval); - if (REALM_UNLIKELY(overflow)) - return true; - lval = util::cast_to_unsigned(lval_2); - return false; - } -}; - -// (unsigned, signed) (all size combinations) -template -struct SafeIntBinopsImpl { - typedef std::numeric_limits lim_l; - typedef std::numeric_limits lim_r; - static const int needed_bits_l = lim_l::digits; - static const int needed_bits_r = lim_r::digits + 1; - static const int needed_bits = needed_bits_l >= needed_bits_r ? needed_bits_l : needed_bits_r; - typedef typename util::FastestUnsigned::type common_unsigned; - typedef std::numeric_limits lim_cu; - static bool equal(L l, R r) noexcept - { - return (lim_l::digits > lim_r::digits) ? - r >= 0 && l == util::cast_to_unsigned(r) : R(l) == r; - } - static bool less(L l, R r) noexcept - { - return (lim_l::digits > lim_r::digits) ? - r >= 0 && l < util::cast_to_unsigned(r) : R(l) < r; - } - static bool add(L& lval, R rval) noexcept - { - common_unsigned lval_2 = lval + common_unsigned(rval); - bool overflow; - if (lim_l::digits < lim_cu::digits) { - overflow = common_unsigned(lval_2) > common_unsigned(lim_l::max()); - } - else { - overflow = (lval_2 < common_unsigned(lval)) == (rval >= 0); - } - if (REALM_UNLIKELY(overflow)) - return true; - lval = util::cast_to_unsigned(lval_2); - return false; - } - static bool sub(L& lval, R rval) noexcept - { - common_unsigned lval_2 = lval - common_unsigned(rval); - bool overflow; - if (lim_l::digits < lim_cu::digits) { - overflow = common_unsigned(lval_2) > common_unsigned(lim_l::max()); - } - else { - overflow = (common_unsigned(lval_2) > common_unsigned(lval)) == (rval >= 0); - } - if (REALM_UNLIKELY(overflow)) - return true; - lval = util::cast_to_unsigned(lval_2); - return false; - } -}; - -// (signed, unsigned) (all size combinations) -template -struct SafeIntBinopsImpl { - typedef std::numeric_limits lim_l; - typedef std::numeric_limits lim_r; - static const int needed_bits_l = lim_l::digits + 1; - static const int needed_bits_r = lim_r::digits; - static const int needed_bits = needed_bits_l >= needed_bits_r ? needed_bits_l : needed_bits_r; - typedef typename util::FastestUnsigned::type common_unsigned; - static bool equal(L l, R r) noexcept - { - return (lim_l::digits < lim_r::digits) ? - l >= 0 && util::cast_to_unsigned(l) == r : l == L(r); - } - static bool less(L l, R r) noexcept - { - return (lim_l::digits < lim_r::digits) ? - l < 0 || util::cast_to_unsigned(l) < r : l < L(r); - } - static bool add(L& lval, R rval) noexcept - { - common_unsigned max_add = common_unsigned(lim_l::max()) - common_unsigned(lval); - bool overflow = common_unsigned(rval) > max_add; - if (REALM_UNLIKELY(overflow)) - return true; - lval = util::from_twos_compl(common_unsigned(lval) + rval); - return false; - } - static bool sub(L& lval, R rval) noexcept - { - common_unsigned max_sub = common_unsigned(lval) - common_unsigned(lim_l::min()); - bool overflow = common_unsigned(rval) > max_sub; - if (REALM_UNLIKELY(overflow)) - return true; - lval = util::from_twos_compl(common_unsigned(lval) - rval); - return false; - } -}; - -// (signed, signed) (all size combinations) -template -struct SafeIntBinopsImpl { - typedef std::numeric_limits lim_l; - static bool equal(L l, R r) noexcept - { - return l == r; - } - static bool less(L l, R r) noexcept - { - return l < r; - } - static bool add(L& lval, R rval) noexcept - { - // Note that both subtractions below occur in a signed type - // that is at least as wide as both of the two types. Note - // also that any signed type guarantees that there is no - // overflow when subtracting two negative values or two - // non-negative value. See C99 (adopted as subset of C++11) - // section 6.2.6.2 "Integer types" paragraph 2. - if (rval < 0) { - if (REALM_UNLIKELY(lval < lim_l::min() - rval)) - return true; - } - else { - if (REALM_UNLIKELY(lval > lim_l::max() - rval)) - return true; - } - // The following statement has exactly the same effect as - // `lval += rval`. - lval = L(lval + rval); - return false; - } - static bool sub(L& lval, R rval) noexcept - { - // Note that both subtractions below occur in a signed type - // that is at least as wide as both of the two types. Note - // also that there can be no overflow when adding a negative - // value to a non-negative value, or when adding a - // non-negative value to a negative one. - if (rval < 0) { - if (REALM_UNLIKELY(lval > lim_l::max() + rval)) - return true; - } - else { - if (REALM_UNLIKELY(lval < lim_l::min() + rval)) - return true; - } - // The following statement has exactly the same effect as - // `lval += rval`. - lval = L(lval - rval); - return false; - } -}; - -template -struct SafeIntBinops: SafeIntBinopsImpl::is_signed, - std::numeric_limits::is_signed> -{ - typedef std::numeric_limits lim_l; - typedef std::numeric_limits lim_r; - static_assert(lim_l::is_specialized && lim_r::is_specialized, - "std::numeric_limits<> must be specialized for both types"); - static_assert(lim_l::is_integer && lim_r::is_integer, - "Both types must be integers"); -}; - -} // namespace _impl - -namespace util { - -template -inline bool is_negative(T value) noexcept -{ - return _impl::IsNegative::is_signed>::test(value); -} - -template -inline To cast_to_unsigned(From value) noexcept -{ - return _impl::CastToUnsigned::cast(value); -} - -template -inline bool int_equal_to(A a, B b) noexcept -{ - return _impl::SafeIntBinops::equal(a,b); -} - -template -inline bool int_not_equal_to(A a, B b) noexcept -{ - return !_impl::SafeIntBinops::equal(a,b); -} - -template -inline bool int_less_than(A a, B b) noexcept -{ - return _impl::SafeIntBinops::less(a,b); -} - -template -inline bool int_less_than_or_equal(A a, B b) noexcept -{ - return !_impl::SafeIntBinops::less(b,a); // Not greater than -} - -template -inline bool int_greater_than(A a, B b) noexcept -{ - return _impl::SafeIntBinops::less(b,a); -} - -template -inline bool int_greater_than_or_equal(A a, B b) noexcept -{ - return !_impl::SafeIntBinops::less(a,b); // Not less than -} - -template -inline bool int_add_with_overflow_detect(L& lval, R rval) noexcept -{ - return _impl::SafeIntBinops::add(lval, rval); -} - -template -inline bool int_subtract_with_overflow_detect(L& lval, R rval) noexcept -{ - return _impl::SafeIntBinops::sub(lval, rval); -} - -template -inline bool int_multiply_with_overflow_detect(L& lval, R rval) noexcept -{ - // FIXME: Check if the following optimizes better (if it works at all): - // L lval_2 = L(lval * rval); - // bool overflow = rval != 0 && (lval_2 / rval) != lval; - typedef std::numeric_limits lim_l; - typedef std::numeric_limits lim_r; - static_assert(lim_l::is_specialized && lim_r::is_specialized, - "std::numeric_limits<> must be specialized for both types"); - static_assert(lim_l::is_integer && lim_r::is_integer, - "Both types must be integers"); - REALM_ASSERT(int_greater_than_or_equal(lval, 0)); - REALM_ASSERT(int_greater_than(rval, 0)); - if (int_less_than(lim_r::max() / rval, lval)) - return true; - lval = L(lval * rval); - return false; -} - -template -inline bool int_shift_left_with_overflow_detect(T& lval, int i) noexcept -{ - typedef std::numeric_limits lim; - static_assert(lim::is_specialized, - "std::numeric_limits<> must be specialized for T"); - static_assert(lim::is_integer, - "T must be an integer type"); - REALM_ASSERT(int_greater_than_or_equal(lval, 0)); - if ((lim::max() >> i) < lval) - return true; - lval <<= i; - return false; -} - -template -inline bool int_cast_has_overflow(From from) noexcept -{ - typedef std::numeric_limits lim_to; - return int_less_than(from, lim_to::min()) || int_less_than(lim_to::max(), from); -} - -template -inline bool int_cast_with_overflow_detect(From from, To& to) noexcept -{ - if (REALM_LIKELY(!int_cast_has_overflow(from))) { - to = To(from); - return false; - } - return true; -} - -template -inline To from_twos_compl(From twos_compl) noexcept -{ - typedef std::numeric_limits lim_f; - typedef std::numeric_limits lim_t; - static_assert(lim_f::is_specialized && lim_t::is_specialized, - "std::numeric_limits<> must be specialized for both types"); - static_assert(lim_f::is_integer && lim_t::is_integer, - "Both types must be integers"); - static_assert(!lim_f::is_signed, "`From` must be unsigned"); - To native; - int sign_bit_pos = lim_f::digits - 1; - From sign_bit = From(1) << sign_bit_pos; - bool non_negative = !lim_t::is_signed || (twos_compl & sign_bit) == 0; - if (non_negative) { - // Non-negative value - native = To(twos_compl); - } - else { - // Negative value - native = To(-1 - To(From(-1) - twos_compl)); - } - return native; -} - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_SAFE_INT_OPS_HPP diff --git a/Pods/Realm/include/core/realm/util/scope_exit.hpp b/Pods/Realm/include/core/realm/util/scope_exit.hpp deleted file mode 100644 index d17359cf..00000000 --- a/Pods/Realm/include/core/realm/util/scope_exit.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_SCOPE_EXIT_HPP -#define REALM_UTIL_SCOPE_EXIT_HPP - -#include -#include - -#include - -namespace realm { -namespace util { - -template -class ScopeExit { -public: - explicit ScopeExit(const H& handler) noexcept(std::is_nothrow_copy_constructible::value): - m_handler(handler) - { - } - - explicit ScopeExit(H&& handler) noexcept(std::is_nothrow_move_constructible::value): - m_handler(std::move(handler)) - { - } - - ScopeExit(ScopeExit&& se) noexcept(std::is_nothrow_move_constructible::value): - m_handler(std::move(se.m_handler)) - { - se.m_handler = none; - } - - ~ScopeExit() noexcept - { - if (m_handler) - (*m_handler)(); - } - - static_assert(noexcept(std::declval()()), "Handler must be nothrow executable"); - static_assert(std::is_nothrow_destructible::value, "Handler must be nothrow destructible"); - -private: - util::Optional m_handler; -}; - -template -ScopeExit::type> make_scope_exit(H&& handler) - noexcept(noexcept(ScopeExit::type>(std::forward(handler)))) -{ - return ScopeExit::type>(std::forward(handler)); -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_SCOPE_EXIT_HPP diff --git a/Pods/Realm/include/core/realm/util/shared_ptr.hpp b/Pods/Realm/include/core/realm/util/shared_ptr.hpp deleted file mode 100644 index 88faa156..00000000 --- a/Pods/Realm/include/core/realm/util/shared_ptr.hpp +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef REALM_SHARED_PTR_HPP -#define REALM_SHARED_PTR_HPP - -#include // size_t - -namespace realm { -namespace util { - -template -class SharedPtr -{ -public: - SharedPtr(T* p) - { - init(p); - } - - SharedPtr() - { - init(0); - } - - ~SharedPtr() - { - decref(); - } - - SharedPtr(const SharedPtr& o) : m_ptr(o.m_ptr), m_count(o.m_count) - { - incref(); - } - - SharedPtr& operator=(const SharedPtr& o) { - if (m_ptr == o.m_ptr) - return *this; - decref(); - m_ptr = o.m_ptr; - m_count = o.m_count; - incref(); - return *this; - } - - T* operator->() const - { - return m_ptr; - } - - T& operator*() const - { - return *m_ptr; - } - - T* get() const - { - return m_ptr; - } - - bool operator==(const SharedPtr& o) const - { - return m_ptr == o.m_ptr; - } - - bool operator!=(const SharedPtr& o) const - { - return m_ptr != o.m_ptr; - } - - bool operator<(const SharedPtr& o) const - { - return m_ptr < o.m_ptr; - } - - size_t ref_count() const - { - return *m_count; - } - -private: - void init(T* p) - { - m_ptr = p; - try { - m_count = new size_t(1); - } - catch (...) { - delete p; - throw; - } - } - - void decref() - { - if (--(*m_count) == 0) { - delete m_ptr; - delete m_count; - } - } - - void incref() - { - ++(*m_count); - } - - T* m_ptr; - size_t* m_count; -}; - -} -} - -#endif diff --git a/Pods/Realm/include/core/realm/util/string_buffer.hpp b/Pods/Realm/include/core/realm/util/string_buffer.hpp deleted file mode 100644 index 240780a3..00000000 --- a/Pods/Realm/include/core/realm/util/string_buffer.hpp +++ /dev/null @@ -1,187 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_STRING_BUFFER_HPP -#define REALM_UTIL_STRING_BUFFER_HPP - -#include -#include -#include - -#include -#include - -namespace realm { -namespace util { - - -// FIXME: Check whether this class provides anything that a C++03 -// std::string does not already provide. In particular, can a C++03 -// std::string be used as a contiguous mutable buffer? -class StringBuffer { -public: - StringBuffer() noexcept; - ~StringBuffer() noexcept {} - - std::string str() const; - - /// Returns the current size of the string in this buffer. This - /// size does not include the terminating zero. - size_t size() const noexcept; - - /// Gives read and write access to the bytes of this buffer. The - /// caller may read and write from *c_str() up to, but not - /// including, *(c_str()+size()). - char* data() noexcept; - - /// Gives read access to the bytes of this buffer. The caller may - /// read from *c_str() up to, but not including, - /// *(c_str()+size()). - const char* data() const noexcept; - - /// Guarantees that the returned string is zero terminated, that - /// is, *(c_str()+size()) is zero. The caller may read from - /// *c_str() up to and including *(c_str()+size()), the caller may - /// write from *c_str() up to, but not including, - /// *(c_str()+size()). - char* c_str() noexcept; - - /// Guarantees that the returned string is zero terminated, that - /// is, *(c_str()+size()) is zero. The caller may read from - /// *c_str() up to and including *(c_str()+size()). - const char* c_str() const noexcept; - - void append(const std::string&); - - void append(const char* data, size_t size); - - /// Append a zero-terminated string to this buffer. - void append_c_str(const char* c_str); - - /// The specified size is understood as not including the - /// terminating zero. If the specified size is less than the - /// current size, then the string is truncated accordingly. If the - /// specified size is greater than the current size, then the - /// extra characters will have undefined values, however, there - /// will be a terminating zero at *(c_str()+size()), and the - /// original terminating zero will also be left in place such that - /// from the point of view of c_str(), the size of the string is - /// unchanged. - void resize(size_t size); - - /// The specified minimum capacity is understood as not including - /// the terminating zero. This operation does not change the size - /// of the string in the buffer as returned by size(). If the - /// specified capacity is less than the current capacity, this - /// operation has no effect. - void reserve(size_t min_capacity); - - /// Set size to zero. The capacity remains unchanged. - void clear() noexcept; - -private: - util::Buffer m_buffer; - size_t m_size; // Excluding the terminating zero - static char m_zero; - - void reallocate(size_t min_capacity); -}; - - - - - -// Implementation: - -inline StringBuffer::StringBuffer() noexcept: m_size(0) -{ -} - -inline std::string StringBuffer::str() const -{ - return std::string(m_buffer.data(), m_size); -} - -inline size_t StringBuffer::size() const noexcept -{ - return m_size; -} - -inline char* StringBuffer::data() noexcept -{ - return m_buffer.data(); -} - -inline const char* StringBuffer::data() const noexcept -{ - return m_buffer.data(); -} - -inline char* StringBuffer::c_str() noexcept -{ - char* d = data(); - return d ? d : &m_zero; -} - -inline const char* StringBuffer::c_str() const noexcept -{ - const char* d = data(); - return d ? d : &m_zero; -} - -inline void StringBuffer::append(const std::string& s) -{ - return append(s.data(), s.size()); -} - -inline void StringBuffer::append_c_str(const char* c_str) -{ - append(c_str, std::strlen(c_str)); -} - -inline void StringBuffer::reserve(size_t min_capacity) -{ - size_t capacity = m_buffer.size(); - if (capacity == 0 || capacity-1 < min_capacity) - reallocate(min_capacity); -} - -inline void StringBuffer::resize(size_t size) -{ - reserve(size); - // Note that even reserve(0) will attempt to allocate a - // buffer, so we can safely write the truncating zero at this - // time. - m_size = size; - m_buffer[size] = 0; -} - -inline void StringBuffer::clear() noexcept -{ - if (m_buffer.size() == 0) - return; - m_size = 0; - m_buffer[0] = 0; -} - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_STRING_BUFFER_HPP diff --git a/Pods/Realm/include/core/realm/util/terminate.hpp b/Pods/Realm/include/core/realm/util/terminate.hpp deleted file mode 100644 index 41b8272c..00000000 --- a/Pods/Realm/include/core/realm/util/terminate.hpp +++ /dev/null @@ -1,83 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_TERMINATE_HPP -#define REALM_UTIL_TERMINATE_HPP - -#include -#include - -#include -#include -#include - -#define REALM_TERMINATE(msg) realm::util::terminate((msg), __FILE__, __LINE__) - -namespace realm { -namespace util { - -/// Install a custom termination notification callback. This will only be called as a result of -/// Realm crashing internally, i.e. a failed assertion or an otherwise irrecoverable error -/// condition. The termination notification callback is supplied with a zero-terminated string -/// containing information relevant for debugging the issue leading to the crash. -/// -/// The termination notification callback is shared by all threads, which is another way of saying -/// that it must be reentrant, in case multiple threads crash simultaneously. -/// -/// Furthermore, the provided callback must be `noexcept`, indicating that if an exception -/// is thrown in the callback, the process is terminated with a call to `std::terminate`. -void set_termination_notification_callback(void(*callback)(const char* message) noexcept) noexcept; - -REALM_NORETURN void terminate_internal(std::stringstream&) noexcept; - -REALM_NORETURN void terminate(const char* message, const char* file, long line) noexcept; - -// LCOV_EXCL_START -template -REALM_NORETURN void terminate(const char* message, const char* file, long line, - Ts... infos) noexcept -{ - std::stringstream ss; - static_assert(sizeof...(infos) == 2 || sizeof...(infos) == 4 || sizeof...(infos) == 6, - "Called realm::util::terminate() with wrong number of arguments"); - ss << file << ':' << line << ": " REALM_VER_CHUNK " " << message << " ["; - inspect_all(ss, std::forward(infos)...); - ss << "]" << '\n'; - - terminate_internal(ss); -} -// LCOV_EXCL_STOP - -template -REALM_NORETURN void terminate_with_info(const char* assert_message, int line, const char* file, - const char* interesting_names, - Args&&... interesting_values) noexcept -{ - std::stringstream ss; - ss << file << ':' << line << ": " REALM_VER_CHUNK " "; - ss << assert_message << " with " << interesting_names << " = ("; - inspect_all(ss, std::forward(interesting_values)...); - ss << "). \n"; - terminate_internal(ss); -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_TERMINATE_HPP diff --git a/Pods/Realm/include/core/realm/util/thread.hpp b/Pods/Realm/include/core/realm/util/thread.hpp deleted file mode 100644 index f91b9eb4..00000000 --- a/Pods/Realm/include/core/realm/util/thread.hpp +++ /dev/null @@ -1,589 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_THREAD_HPP -#define REALM_UTIL_THREAD_HPP - -#include - -#include - -// Use below line to enable a thread bug detection tool. Note: Will make program execution slower. -// #include <../test/pthread_test.hpp> - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -namespace realm { -namespace util { - - -/// A separate thread of execution. -/// -/// This class is a C++03 compatible reproduction of a subset of -/// std::thread from C++11 (when discounting Thread::start()). -class Thread { -public: - Thread(); - ~Thread() noexcept; - - template - explicit Thread(F func); - - /// This method is an extension of the API provided by - /// std::thread. This method exists because proper move semantics - /// is unavailable in C++03. If move semantics had been available, - /// calling `start(func)` would have been equivalent to `*this = - /// Thread(func)`. Please see std::thread::operator=() for - /// details. - template - void start(F func); - - bool joinable() noexcept; - - void join(); - -private: - pthread_t m_id; - bool m_joinable; - - typedef void* (*entry_func_type)(void*); - - void start(entry_func_type, void* arg); - - template - static void* entry_point(void*) noexcept; - - REALM_NORETURN static void create_failed(int); - REALM_NORETURN static void join_failed(int); -}; - - -/// Low-level mutual exclusion device. -class Mutex { -public: - Mutex(); - ~Mutex() noexcept; - - struct process_shared_tag {}; - - /// Initialize this mutex for use across multiple processes. When - /// constructed this way, the instance may be placed in memory - /// shared by multiple processes, as well as in a memory mapped - /// file. Such a mutex remains valid even after the constructing - /// process terminates. Deleting the instance (freeing the memory - /// or deleting the file) without first calling the destructor is - /// legal and will not cause any system resources to be leaked. - Mutex(process_shared_tag); - - friend class LockGuard; - friend class UniqueLock; - - void lock() noexcept; - void unlock() noexcept; - -protected: - pthread_mutex_t m_impl; - - struct no_init_tag {}; - Mutex(no_init_tag) {} - - void init_as_regular(); - void init_as_process_shared(bool robust_if_available); - - REALM_NORETURN static void init_failed(int); - REALM_NORETURN static void attr_init_failed(int); - REALM_NORETURN static void destroy_failed(int) noexcept; - REALM_NORETURN static void lock_failed(int) noexcept; - - friend class CondVar; -}; - - -/// A simple mutex ownership wrapper. -class LockGuard { -public: - LockGuard(Mutex&) noexcept; - ~LockGuard() noexcept; - -private: - Mutex& m_mutex; - friend class CondVar; -}; - - -/// See UniqueLock. -struct defer_lock_tag {}; - -/// A general-purpose mutex ownership wrapper supporting deferred -/// locking as well as repeated unlocking and relocking. -class UniqueLock { -public: - UniqueLock(Mutex&) noexcept; - UniqueLock(Mutex&, defer_lock_tag) noexcept; - ~UniqueLock() noexcept; - - void lock() noexcept; - void unlock() noexcept; - bool holds_lock() noexcept; -private: - Mutex* m_mutex; - bool m_is_locked; -}; - - -/// A robust version of a process-shared mutex. -/// -/// A robust mutex is one that detects whether a thread (or process) -/// has died while holding a lock on the mutex. -/// -/// When the present platform does not offer support for robust -/// mutexes, this mutex class behaves as a regular process-shared -/// mutex, which means that if a thread dies while holding a lock, any -/// future attempt at locking will block indefinitely. -class RobustMutex: private Mutex { -public: - RobustMutex(); - ~RobustMutex() noexcept; - - static bool is_robust_on_this_platform() noexcept; - - class NotRecoverable; - - /// \param recover_func If the present platform does not support - /// robust mutexes, this function is never called. Otherwise it is - /// called if, and only if a thread has died while holding a - /// lock. The purpose of the function is to reestablish a - /// consistent shared state. If it fails to do this by throwing an - /// exception, the mutex enters the 'unrecoverable' state where - /// any future attempt at locking it will fail and cause - /// NotRecoverable to be thrown. This function is advised to throw - /// NotRecoverable when it fails, but it may throw any exception. - /// - /// \throw NotRecoverable If thrown by the specified recover - /// function, or if the mutex has entered the 'unrecoverable' - /// state due to a different thread throwing from its recover - /// function. - template - void lock(Func recover_func); - - void unlock() noexcept; - - /// Low-level locking of robust mutex. - /// - /// If the present platform does not support robust mutexes, this - /// function always returns true. Otherwise it returns false if, - /// and only if a thread has died while holding a lock. - /// - /// \note Most application should never call this function - /// directly. It is called automatically when using the ordinary - /// lock() function. - /// - /// \throw NotRecoverable If this mutex has entered the "not - /// recoverable" state. It enters this state if - /// mark_as_consistent() is not called between a call to - /// robust_lock() that returns false and the corresponding call to - /// unlock(). - bool low_level_lock(); - - /// Pull this mutex out of the 'inconsistent' state. - /// - /// Must be called only after low_level_lock() has returned false. - /// - /// \note Most application should never call this function - /// directly. It is called automatically when using the ordinary - /// lock() function. - void mark_as_consistent() noexcept; - - /// Attempt to check if this mutex is a valid object. - /// - /// This attempts to trylock() the mutex, and if that fails returns false if - /// the return value indicates that the low-level mutex is invalid (which is - /// distinct from 'inconsistent'). Although pthread_mutex_trylock() may - /// return EINVAL if the argument is not an initialized mutex object, merely - /// attempting to check if an arbitrary blob of memory is a mutex object may - /// involve undefined behavior, so it is only safe to assume that this - /// function will run correctly when it is known that the mutex object is - /// valid. - bool is_valid() noexcept; - - friend class CondVar; -}; - -class RobustMutex::NotRecoverable: public std::exception { -public: - const char* what() const noexcept override - { - return "Failed to recover consistent state of shared memory"; - } -}; - - -/// A simple robust mutex ownership wrapper. -class RobustLockGuard { -public: - /// \param recover_func See RobustMutex::lock(). - template - RobustLockGuard(RobustMutex&, TFunc func); - ~RobustLockGuard() noexcept; - -private: - RobustMutex& m_mutex; - friend class CondVar; -}; - - - - -/// Condition variable for use in synchronization monitors. -class CondVar { -public: - CondVar(); - ~CondVar() noexcept; - - struct process_shared_tag {}; - - /// Initialize this condition variable for use across multiple - /// processes. When constructed this way, the instance may be - /// placed in memory shared by multimple processes, as well as in - /// a memory mapped file. Such a condition variable remains valid - /// even after the constructing process terminates. Deleting the - /// instance (freeing the memory or deleting the file) without - /// first calling the destructor is legal and will not cause any - /// system resources to be leaked. - CondVar(process_shared_tag); - - /// Wait for another thread to call notify() or notify_all(). - void wait(LockGuard& l) noexcept; - template - void wait(RobustMutex& m, Func recover_func, const struct timespec* tp = nullptr); - - /// If any threads are wating for this condition, wake up at least - /// one. - void notify() noexcept; - - /// Wake up every thread that is currently wating on this - /// condition. - void notify_all() noexcept; - -private: - pthread_cond_t m_impl; - - REALM_NORETURN static void init_failed(int); - REALM_NORETURN static void attr_init_failed(int); - REALM_NORETURN static void destroy_failed(int) noexcept; - void handle_wait_error(int error); -}; - - - - - - - - -// Implementation: - -inline Thread::Thread(): m_joinable(false) -{ -} - -template -inline Thread::Thread(F func): m_joinable(true) -{ - std::unique_ptr func2(new F(func)); // Throws - start(&Thread::entry_point, func2.get()); // Throws - func2.release(); -} - -template -inline void Thread::start(F func) -{ - if (m_joinable) - std::terminate(); - std::unique_ptr func2(new F(func)); // Throws - start(&Thread::entry_point, func2.get()); // Throws - func2.release(); - m_joinable = true; -} - -inline Thread::~Thread() noexcept -{ - if (m_joinable) - REALM_TERMINATE("Destruction of joinable thread"); -} - -inline bool Thread::joinable() noexcept -{ - return m_joinable; -} - -inline void Thread::start(entry_func_type entry_func, void* arg) -{ - const pthread_attr_t* attr = nullptr; // Use default thread attributes - int r = pthread_create(&m_id, attr, entry_func, arg); - if (REALM_UNLIKELY(r != 0)) - create_failed(r); // Throws -} - -template -inline void* Thread::entry_point(void* cookie) noexcept -{ - std::unique_ptr func(static_cast(cookie)); - try { - (*func)(); - } - catch (...) { - std::terminate(); - } - return 0; -} - - -inline Mutex::Mutex() -{ - init_as_regular(); -} - -inline Mutex::Mutex(process_shared_tag) -{ - bool robust_if_available = false; - init_as_process_shared(robust_if_available); -} - -inline Mutex::~Mutex() noexcept -{ - int r = pthread_mutex_destroy(&m_impl); - if (REALM_UNLIKELY(r != 0)) - destroy_failed(r); -} - -inline void Mutex::init_as_regular() -{ - int r = pthread_mutex_init(&m_impl, 0); - if (REALM_UNLIKELY(r != 0)) - init_failed(r); -} - -inline void Mutex::lock() noexcept -{ - int r = pthread_mutex_lock(&m_impl); - if (REALM_LIKELY(r == 0)) - return; - lock_failed(r); -} - -inline void Mutex::unlock() noexcept -{ - int r = pthread_mutex_unlock(&m_impl); - REALM_ASSERT(r == 0); -} - - -inline LockGuard::LockGuard(Mutex& m) noexcept: - m_mutex(m) -{ - m_mutex.lock(); -} - -inline LockGuard::~LockGuard() noexcept -{ - m_mutex.unlock(); -} - - -inline UniqueLock::UniqueLock(Mutex& m) noexcept: - m_mutex(&m) -{ - m_mutex->lock(); - m_is_locked = true; -} - -inline UniqueLock::UniqueLock(Mutex& m, defer_lock_tag) noexcept: - m_mutex(&m) -{ - m_is_locked = false; -} - -inline UniqueLock::~UniqueLock() noexcept -{ - if (m_is_locked) - m_mutex->unlock(); -} - -inline bool UniqueLock::holds_lock() noexcept -{ - return m_is_locked; -} - -inline void UniqueLock::lock() noexcept -{ - m_mutex->lock(); - m_is_locked = true; -} - -inline void UniqueLock::unlock() noexcept -{ - m_mutex->unlock(); - m_is_locked = false; -} - -template -inline RobustLockGuard::RobustLockGuard(RobustMutex& m, TFunc func) : - m_mutex(m) -{ - m_mutex.lock(func); -} - -inline RobustLockGuard::~RobustLockGuard() noexcept -{ - m_mutex.unlock(); -} - - - -inline RobustMutex::RobustMutex(): - Mutex(no_init_tag()) -{ - bool robust_if_available = true; - init_as_process_shared(robust_if_available); -} - -inline RobustMutex::~RobustMutex() noexcept -{ -} - -template -inline void RobustMutex::lock(Func recover_func) -{ - bool no_thread_has_died = low_level_lock(); // Throws - if (REALM_LIKELY(no_thread_has_died)) - return; - try { - recover_func(); // Throws - mark_as_consistent(); - // If we get this far, the protected memory has been - // brought back into a consistent state, and the mutex has - // been notified aboit this. This means that we can safely - // enter the applications critical section. - } - catch (...) { - // Unlocking without first calling mark_as_consistent() - // means that the mutex enters the "not recoverable" - // state, which will cause all future attempts at locking - // to fail. - unlock(); - throw; - } -} - -inline void RobustMutex::unlock() noexcept -{ - Mutex::unlock(); -} - - - - - -inline CondVar::CondVar() -{ - int r = pthread_cond_init(&m_impl, 0); - if (REALM_UNLIKELY(r != 0)) - init_failed(r); -} - -inline CondVar::~CondVar() noexcept -{ - int r = pthread_cond_destroy(&m_impl); - if (REALM_UNLIKELY(r != 0)) - destroy_failed(r); -} - -inline void CondVar::wait(LockGuard& l) noexcept -{ - int r = pthread_cond_wait(&m_impl, &l.m_mutex.m_impl); - if (REALM_UNLIKELY(r != 0)) - REALM_TERMINATE("pthread_cond_wait() failed"); -} - -template -inline void CondVar::wait(RobustMutex& m, Func recover_func, const struct timespec* tp) -{ - int r; - - if (!tp) { - r = pthread_cond_wait(&m_impl, &m.m_impl); - } - else { - r = pthread_cond_timedwait(&m_impl, &m.m_impl, tp); - if (r == ETIMEDOUT) - return; - } - - if (REALM_LIKELY(r == 0)) - return; - - handle_wait_error(r); - - try { - recover_func(); // Throws - m.mark_as_consistent(); - // If we get this far, the protected memory has been - // brought back into a consistent state, and the mutex has - // been notified aboit this. This means that we can safely - // enter the applications critical section. - } - catch (...) { - // Unlocking without first calling mark_as_consistent() - // means that the mutex enters the "not recoverable" - // state, which will cause all future attempts at locking - // to fail. - m.unlock(); - throw; - } -} - -inline void CondVar::notify() noexcept -{ - int r = pthread_cond_signal(&m_impl); - REALM_ASSERT(r == 0); -} - -inline void CondVar::notify_all() noexcept -{ - int r = pthread_cond_broadcast(&m_impl); - REALM_ASSERT(r == 0); -} - - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_THREAD_HPP diff --git a/Pods/Realm/include/core/realm/util/to_string.hpp b/Pods/Realm/include/core/realm/util/to_string.hpp deleted file mode 100644 index eb25757d..00000000 --- a/Pods/Realm/include/core/realm/util/to_string.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2016] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_TO_STRING_HPP -#define REALM_UTIL_TO_STRING_HPP - -#include -#include -#include - -namespace realm { -namespace util { - -template -std::string to_string(const T& v) -{ - std::ostringstream out; - out.imbue(std::locale::classic()); - out.exceptions(std::ios_base::failbit | std::ios_base::badbit); - out << v; // Throws - return out.str(); -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_TO_STRING_HPP diff --git a/Pods/Realm/include/core/realm/util/tuple.hpp b/Pods/Realm/include/core/realm/util/tuple.hpp deleted file mode 100644 index a12b2cfd..00000000 --- a/Pods/Realm/include/core/realm/util/tuple.hpp +++ /dev/null @@ -1,186 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_TUPLE_HPP -#define REALM_UTIL_TUPLE_HPP - -#include - -#include - -namespace realm { -namespace util { - - -template -struct Tuple { - typedef typename L::head head_type; - typedef Tuple tail_type; - head_type m_head; - tail_type m_tail; - Tuple(const head_type& h, const tail_type& t): m_head(h), m_tail(t) {} -}; -template<> -struct Tuple {}; - - -template -inline Tuple> cons(const H& h, const Tuple& t) -{ - return Tuple>(h,t); -} - - -inline Tuple tuple() { return Tuple(); } - -template -inline Tuple> tuple(const A& a) -{ - return cons(a, tuple()); -} - -template -inline Tuple>> tuple(const A& a, const B& b) -{ - return cons(a, tuple(b)); -} - -template -inline Tuple>>> -tuple(const A& a, const B& b, const C& c) -{ - return cons(a, tuple(b,c)); -} - -template -inline Tuple>>>> -tuple(const A& a, const B& b, const C& c, const D& d) -{ - return cons(a, tuple(b,c,d)); -} - -template -inline Tuple>>>>> -tuple(const A& a, const B& b, const C& c, const D& d, const E& e) -{ - return cons(a, tuple(b,c,d,e)); -} - -template -inline Tuple>>>>>> -tuple(const A& a, const B& b, const C& c, const D& d, const E& e, const F& f) -{ - return cons(a, tuple(b,c,d,e,f)); -} - -template -inline Tuple>>>>>>> -tuple(const A& a, const B& b, const C& c, const D& d, const E& e, const F& f, const G& g) -{ - return cons(a, tuple(b,c,d,e,f,g)); -} - - -template -inline Tuple::type> append(const Tuple& t, const V& v) -{ - return cons(t.m_head, append(t.m_tail, v)); -} -template -inline Tuple> append(const Tuple&, const V& v) -{ - return tuple(v); -} -template -inline Tuple::type> operator,(const Tuple& t, const V& v) -{ - return append(t,v); -} - -} // namespace util - -namespace _impl { - template - struct TupleAt { - static typename util::TypeAt::type exec(const util::Tuple& t) - { - return TupleAt::exec(t.m_tail); - } - }; - template - struct TupleAt { - static typename L::head exec(const util::Tuple& t) { return t.m_head; } - }; - - template - inline void write(std::basic_ostream& out, - const util::Tuple>& t) - { - out << t.m_head; - } - template - inline void write(std::basic_ostream&, const util::Tuple&) {} - template - inline void write(std::basic_ostream& out, const util::Tuple& t) - { - out << t.m_head << ','; - write(out, t.m_tail); - } -} - -namespace util { - -template -inline typename TypeAt::type at(const Tuple& tuple) -{ - return _impl::TupleAt::exec(tuple); -} - -template class Op, class L> -inline void for_each(const Tuple& tuple) -{ - Op()(tuple.head); - for_each(tuple.m_tail); -} -template class Op> -inline void for_each(const Tuple&) {} - -template class Op, class L, class A> -inline void for_each(const Tuple& tuple, const A& a) -{ - Op()(tuple.m_head, a); - for_each(tuple.m_tail, a); -} -template class Op, class A> -inline void for_each(const Tuple&, const A&) {} - -template -inline std::basic_ostream& operator<<(std::basic_ostream& out, const Tuple& t) -{ - out << '('; - _impl::write(out, t); - out << ')'; - return out; -} - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_TUPLE_HPP diff --git a/Pods/Realm/include/core/realm/util/type_list.hpp b/Pods/Realm/include/core/realm/util/type_list.hpp deleted file mode 100644 index 59fb75c7..00000000 --- a/Pods/Realm/include/core/realm/util/type_list.hpp +++ /dev/null @@ -1,230 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_TYPE_LIST_HPP -#define REALM_UTIL_TYPE_LIST_HPP - -#include - -namespace realm { -namespace util { - - -/// The 'cons' operator for building lists of types. -/// -/// \tparam H The head of the list, that is, the first type in the -/// list. -/// -/// \tparam T The tail of the list, that is, the list of types -/// following the head. It is 'void' if nothing follows the head, -/// otherwise it matches TypeCons. -/// -/// Note that 'void' is interpreted as a zero-length list. -template -struct TypeCons { - typedef H head; - typedef T tail; -}; - - -/// Append a type the the end of a type list. The resulting type list -/// is available as TypeAppend::type. -/// -/// \tparam List A list of types constructed using TypeCons<>. Note -/// that 'void' is interpreted as a zero-length list. -/// -/// \tparam T The new type to be appended. -template -struct TypeAppend { - typedef TypeCons::type> type; -}; -/// Base case for empty type list. -template -struct TypeAppend { - typedef TypeCons type; -}; - - -/// Get an element from the specified list of types. The result is -/// available as TypeAt::type. -/// -/// \tparam List A list of types constructed using TypeCons<>. Note -/// that 'void' is interpreted as a zero-length list. -/// -/// \tparam i The index of the list element to get. -template -struct TypeAt { - typedef typename TypeAt::type type; -}; -/// Base case for empty type list. -template -struct TypeAt { - typedef typename List::head type; -}; - - -/// Count the number of elements in the specified list of types. The -/// result is available as TypeCount::value. -/// -/// \tparam List The list of types, constructed using TypeCons<>. Note -/// that 'void' is interpreted as a zero-length list. -template -struct TypeCount { - static const int value = 1 + TypeCount::value; -}; -/// Base case for empty type list. -template<> -struct TypeCount -{ - static const int value = 0; -}; - - -/// Find the first type in the specified list that satisfies the -/// specified predicate. -/// -/// \tparam List The list of types, constructed using TypeCons<>. Note -/// that 'void' is interpreted as a zero-length list. -/// -/// \tparam Pred Must be such that `Pred::value` is true if, and -/// only if the predicate is satisfied for `T`. -template class Pred> -struct FindType { -private: - typedef typename List::head type_1; - typedef typename FindType::type type_2; -public: - typedef typename std::conditional::value, type_1, type_2>::type type; -}; -/// Base case for empty type list. -template class Pred> -struct FindType { - typedef void type; -}; - - -/// Execute an action for each element in the specified list of types. -/// -/// \tparam List The list of types, constructed using TypeCons<>. Note -/// that 'void' is interpreted as a zero-length list. -template class Op, int i=0> -struct ForEachType { - /// Execute the `Op::exec()` for each type `T` at index `i` - /// in `List`. - static void exec() - { - Op::exec(); - ForEachType::exec(); - } - /// Execute the `Op::exec(a)` for each type `T` at index `i` - /// in `List`. - template - static void exec(const A& a) - { - Op::exec(a); - ForEachType::exec(a); - } - /// Execute the `Op::exec(a,b)` for each type `T` at index - /// `i` in `List`. - template - static void exec(const A& a, const B& b) - { - Op::exec(a,b); - ForEachType::exec(a,b); - } - /// Execute the `Op::exec(a,b,c)` for each type `T` at index - /// `i` in `List`. - template - static void exec(const A& a, const B& b, const C& c) - { - Op::exec(a,b,c); - ForEachType::exec(a,b,c); - } -}; -/// Base case for empty type list. -template -class Op, int i> struct ForEachType { - static void exec() {} - template - static void exec(const A&) {} - template - static void exec(const A&, const B&) {} - template - static void exec(const A&, const B&, const C&) {} -}; - - -/// Execute a predicate for each element in the specified list of -/// types, and return true if, and only if the predicate returns true -/// for at least one of those elements. Iteration over the type list -/// is terminated as soon as a predicate returns true. -/// -/// \tparam List The list of types, constructed using TypeCons<>. Note -/// that 'void' is interpreted as a zero-length list. -template class Pred, int i=0> -struct HasType { - /// Execute the `Op::exec()` for each type `T` at index `i` - /// in `List`. - static bool exec() - { - return Pred::exec() || - HasType::exec(); - } - /// Execute the `Op::exec(a)` for each type `T` at index `i` - /// in `List`. - template - static bool exec(const A& a) - { - return Pred::exec(a) || - HasType::exec(a); - } - /// Execute the `Op::exec(a,b)` for each type `T` at index - /// `i` in `List`. - template - static bool exec(const A& a, const B& b) - { - return Pred::exec(a,b) || - HasType::exec(a,b); - } - /// Execute the `Op::exec(a,b,c)` for each type `T` at index - /// `i` in `List`. - template - static bool exec(const A& a, const B& b, const C& c) - { - return Pred::exec(a,b,c) || - HasType::exec(a,b,c); - } -}; -/// Base case for empty type list. -template class Pred, int i> -struct HasType { - static bool exec() { return false; } - template - static bool exec(const A&) { return false; } - template - static bool exec(const A&, const B&) { return false; } - template - static bool exec(const A&, const B&, const C&) { return false; } -}; - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_TYPE_LIST_HPP diff --git a/Pods/Realm/include/core/realm/util/type_traits.hpp b/Pods/Realm/include/core/realm/util/type_traits.hpp deleted file mode 100644 index d78cad27..00000000 --- a/Pods/Realm/include/core/realm/util/type_traits.hpp +++ /dev/null @@ -1,160 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_TYPE_TRAITS_HPP -#define REALM_UTIL_TYPE_TRAITS_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace realm { -namespace util { - -template -struct CopyConst { -private: - typedef typename std::remove_const::type type_1; -public: - typedef typename std::conditional::value, const type_1, type_1>::type type; -}; - - -/// Member `type` is the type resulting from integral or -/// floating-point promotion of a value of type `T`. -/// -/// \note Enum types are supported only when the compiler supports the -/// C++11 'decltype' feature. -template -struct Promote; - - -/// Member `type` is the type of the result of a binary arithmetic (or -/// bitwise) operation (+, -, *, /, %, |, &, ^) when applied to -/// operands of type `A` and `B` respectively. The type of the result -/// of a shift operation (<<, >>) can instead be found as the type -/// resulting from integral promotion of the left operand. The type of -/// the result of a unary arithmetic (or bitwise) operation can be -/// found as the type resulting from integral promotion of the -/// operand. -/// -/// \note Enum types are supported only when the compiler supports the -/// C++11 'decltype' feature. -template -struct ArithBinOpType; - - -/// Member `type` is `B` if `B` has more value bits than `A`, -/// otherwise is is `A`. -template -struct ChooseWidestInt; - - -/// Member `type` is the first of `unsigned char`, `unsigned short`, -/// `unsigned int`, `unsigned long`, and `unsigned long long` that has -/// at least `bits` value bits. -template -struct LeastUnsigned; - - -/// Member `type` is `unsigned` if `unsigned` has at least `bits` -/// value bits, otherwise it is the same as -/// `LeastUnsigned::type`. -template -struct FastestUnsigned; - - -// Implementation - - -template -struct Promote { - typedef decltype(+T()) type; // FIXME: This is not performing floating-point promotion. -}; - - -template -struct ArithBinOpType { - typedef decltype(A()+B()) type; -}; - - -template -struct ChooseWidestInt { -private: - typedef std::numeric_limits lim_a; - typedef std::numeric_limits lim_b; - static_assert(lim_a::is_specialized && lim_b::is_specialized, - "std::numeric_limits<> must be specialized for both types"); - static_assert(lim_a::is_integer && lim_b::is_integer, - "Both types must be integers"); -public: - typedef typename std::conditional<(lim_a::digits >= lim_b::digits), A, B>::type type; -}; - - -template -struct LeastUnsigned { -private: - typedef void types_0; - typedef TypeAppend::type types_1; - typedef TypeAppend::type types_2; - typedef TypeAppend::type types_3; - typedef TypeAppend::type types_4; - typedef TypeAppend::type types_5; - typedef types_5 types; - // The `dummy<>` template is there to work around a bug in - // VisualStudio (seen in versions 2010 and 2012). Without the - // `dummy<>` template, The C++ compiler in Visual Studio would - // attempt to instantiate `FindType` before the - // instantiation of `LeastUnsigned<>` which obviously fails - // because `pred` depends on `bits`. - template - struct dummy { - template - struct pred { - static const bool value = std::numeric_limits::digits >= bits; - }; - }; -public: - typedef typename FindType::template pred>::type type; - static_assert(!(std::is_same::value), "No unsigned type is that wide"); -}; - - -template -struct FastestUnsigned { -private: - typedef typename util::LeastUnsigned::type least_unsigned; -public: - typedef typename util::ChooseWidestInt::type type; -}; - - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_TYPE_TRAITS_HPP diff --git a/Pods/Realm/include/core/realm/util/uri.hpp b/Pods/Realm/include/core/realm/util/uri.hpp deleted file mode 100644 index 42758998..00000000 --- a/Pods/Realm/include/core/realm/util/uri.hpp +++ /dev/null @@ -1,235 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_URI_HPP -#define REALM_UTIL_URI_HPP - -#include - -namespace realm { -namespace util { - - -/// \brief A decomposed URI reference. -/// -/// A Uri object contains a URI reference decomposed into its 5 main component -/// parts (scheme, authority, path, query, and fragment identifier). -/// -/// The decomposition process (as carried out by the constructor) performs a -/// maximally lenient parsing of the specified URI reference. It does that -/// according to the following regular expression (copied verbatimly from -/// http://tools.ietf.org/html/rfc3986#appendix-B): -/// -/// ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? -/// 12 3 4 5 6 7 8 9 -/// -/// Group -/// ------------------------ -/// 1 Scheme part -/// 3 Authority part -/// 5 Path part -/// 6 Query part -/// 8 Fragment identifier part -/// -/// NOTE: Since this regular expression maches every string, every string is -/// decomposable. -/// -/// NOTE: This class does not attempt to perform any level of validation of URI -/// references against the grammer specified in the RFC. Such validation could -/// be added later, for example through a new `Uri::validate()`. -/// -/// For example, the decomposition of -/// "http://www.ietf.org/rfc/rfc2396.txt?foo=bar#chp3" is: -/// -///
-///
-///   scheme -> "http:"
-///   auth   -> "//www.ietf.org"
-///   path   -> "/rfc/rfc2396.txt"
-///   query  -> "?foo=bar"
-///   frag   -> "#chp3"
-///
-/// 
-/// -/// This class also provides recomposition of a URI references from their -/// component parts, where the parts can be specified individually, or be a -/// result of URI resoultion. -/// -/// It is important to understand, however, that certain restrictions need to -/// apply to each component part in order that the URI reference as a whole is -/// self consistent. More concretely, it is necessary to require that the -/// component parts at any time must have values that will be preserved across a -/// recomposition -> decomposition cycle. -/// -/// The actual restrictions on each component part is specified for the -/// corresponding setter-method (e.g., set_scheme()). -/// -/// Note that component parts resulting from decomposition, canonicalize, or -/// from resolution (resolve()) will automatically (by design of the underlying -/// algorithm) adhere to these rules. -/// -/// Decomposition, recomposition, conanonicalization, and resolution algorithms -/// are taken from RFC 3986. -/// -/// \sa http://tools.ietf.org/html/rfc3986 -class Uri { -public: - Uri(); - - /// Decompose the specified URI reference into its five main parts. - Uri(const std::string&); - - /// Reconstruct a URI reference from its 5 components. - std::string recompose() const; - -/* - /// Resolve this URI reference against the specified base URI reference - /// according to the rules described in section 5.2 of RFC 3986. - /// - /// Be aware that a fragment identifier on the base URI reference is never - /// carried over to the result. This is in accordance with the RFC. - void resolve(const Uri& base, bool strict = true); -*/ - - /// Remove empty URI components. Also, for URI references having either a - /// scheme part or an authority part, replace an absent path with "/". - void canonicalize(); - - /// Get the scheme part of this URI reference including the trailing ":", or - /// the empty tring if there is no scheme part. - const std::string& get_scheme() const; - - /// Get the authority part of this URI reference including the leading "//", - /// or the empty tring if there is no authority part. - const std::string& get_auth() const; - - /// Same as get_auth() (with no arguments), but parse the authority component - /// into userinfo, host, and port subcomponents. - /// - /// \return True if, and only if the authority component was present (i.e., - /// not the empty string). When false is returned, none of the specified - /// strings will have been modified. - bool get_auth(std::string& userinfo, std::string& host, std::string& port) const; - - /// Get the path part of this URI reference, or the empty tring if there is - /// no path part. - const std::string& get_path() const; - - /// Get the query part of this URI reference including the leading "?", or - /// the empty tring if there is no query part. - const std::string& get_query() const; - - /// Get the fragment identifier of this URI reference including the leading - /// "#", or the empty tring if there is no fragment identifier. - const std::string& get_frag() const; - - /// The specified string must either be empty or have a final ":". Also, it - /// must not contain "/", "?", or "#", nor may it contain more than one ":". - /// - /// \throw std::invalid_argument If the specified string is not valid - /// according to the specified rules. - void set_scheme(const std::string&); - - /// The specified string must either be empty or have "//" as a - /// prefix. Also, it must not contain "?" or "#", nor may it contain "/" - /// beyond the first two. - /// - /// \throw std::invalid_argument If the specified string is not valid - /// according to the specified rules. - void set_auth(const std::string&); - - /// The specified string must not contain "?" or "#". - /// - /// \throw std::invalid_argument If the specified string is not valid - /// according to the specified rules. - void set_path(const std::string&); - - /// The specified string must either be empty or have a leading "?". Also, - /// it must not contain "#". - /// - /// \throw std::invalid_argument If the specified string is not valid - /// according to the specified rules. - void set_query(const std::string&); - -/* - /// Set the query string to the serialized form of the specified set of - /// query parameters. This is slightly faster than set_query(q.encode()) - /// because it avoids the validity check on the string. - void set_query(const Params&); -*/ - - /// The specified string must either be empty or have a leading "#". - /// - /// \throw std::invalid_argument If the specified string is not valid - /// according to the specified rules. - void set_frag(const std::string&); - - bool is_absolute() const; - -private: - std::string m_scheme, m_auth, m_path, m_query, m_frag; -}; - - - -// Implementation - -inline Uri::Uri() -{ -} - -inline std::string Uri::recompose() const -{ - return m_scheme + m_auth + m_path + m_query + m_frag; -} - -inline const std::string& Uri::get_scheme() const -{ - return m_scheme; -} - -inline const std::string& Uri::get_auth() const -{ - return m_auth; -} - -inline const std::string& Uri::get_path() const -{ - return m_path; -} - -inline const std::string& Uri::get_query() const -{ - return m_query; -} - -inline const std::string& Uri::get_frag() const -{ - return m_frag; -} - -inline bool Uri::is_absolute() const -{ - return !m_scheme.empty(); -} - -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_URI_HPP diff --git a/Pods/Realm/include/core/realm/util/utf8.hpp b/Pods/Realm/include/core/realm/util/utf8.hpp deleted file mode 100644 index 770f375d..00000000 --- a/Pods/Realm/include/core/realm/util/utf8.hpp +++ /dev/null @@ -1,394 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTIL_UTF8_HPP -#define REALM_UTIL_UTF8_HPP - -#include -#include - -#include -#include -#include -#include - -namespace realm { -namespace util { - - -/// Transcode between UTF-8 and UTF-16. -/// -/// \tparam Char16 Must be an integral type with at least 16 bits. -/// -/// \tparam Traits16 Must define to_int_type() and to_char_type() for -/// \a Char16. -template> -struct Utf8x16 { - /// Transcode as much as possible of the specified UTF-8 input, to - /// UTF-16. Returns true if all input characters were transcoded, or - /// transcoding stopped because the next character did not fit into the - /// output buffer. Returns false if transcoding stopped due to invalid - /// input. It is not specified whether this function returns true or false - /// if invalid input occurs at the same time as the output buffer runs - /// full. In any case, upon return, \a in_begin and \a out_begin are - /// advanced to the position where transcoding stopped. - /// - /// Throws only if Traits16::to_char_type() throws. - static bool to_utf16(const char*& in_begin, const char* in_end, - Char16*& out_begin, Char16* out_end); - - /// Same as to_utf16(), but in reverse. - /// - /// Throws only if Traits16::to_int_type() throws. - static bool to_utf8(const Char16*& in_begin, const Char16* in_end, - char*& out_begin, char* out_end); - - /// Summarize the number of UTF-16 elements needed to hold the result of - /// transcoding the specified UTF-8 string. Upon return, if \a in_begin != - /// \a in_end, then the summation stopped due to invalid UTF-8 input. The - /// returned size then reflects the number of UTF-16 elements needed to hold - /// the result of transcoding the part of the input that was examined. This - /// function will only detect a few UTF-8 validity issues, and can therefore - /// not be used for general UTF-8 validation. - static size_t find_utf16_buf_size(const char*& in_begin, const char* in_end); - - /// Summarize the number of UTF-8 bytes needed to hold the result of - /// transcoding the specified UTF-16 string. Upon return, if \a in_begin != - /// \a in_end, then the summation stopped due to invalid UTF-16 input, or to - /// prevent the returned \c size_t value from overflowing. The returned size - /// then reflects the number of UTF-8 bytes needed to hold the result of - /// transcoding the part of the input that was examined. This function will - /// only detect a few UTF-16 validity issues, and can therefore not be used - /// for general UTF-16 validation. - static size_t find_utf8_buf_size(const Char16*& in_begin, const Char16* in_end); -}; - - - - - -// Implementation: - -// Adapted from reference implementation. -// http://www.unicode.org/resources/utf8.html -// http://www.bsdua.org/files/unicode.tar.gz -template -inline bool Utf8x16::to_utf16(const char*& in_begin, const char* const in_end, - Char16*& out_begin, Char16* const out_end) -{ - typedef std::char_traits traits8; - bool invalid = false; - const char* in = in_begin; - Char16* out = out_begin; - while (in != in_end) { - if (REALM_UNLIKELY(out == out_end)) { - break; // Need space in output buffer - } - REALM_ASSERT(&in[0] >= in_begin && &in[0] < in_end); - uint_fast16_t v1 = uint_fast16_t(traits8::to_int_type(in[0])); - if (REALM_LIKELY(v1 < 0x80)) { // One byte - // UTF-8 layout: 0xxxxxxx - *out++ = Traits16::to_char_type(v1); - in += 1; - continue; - } - if (REALM_UNLIKELY(v1 < 0xC0)) { - invalid = true; - break; // Invalid first byte of UTF-8 sequence - } - if (REALM_LIKELY(v1 < 0xE0)) { // Two bytes - if (REALM_UNLIKELY(in_end - in < 2)) { - invalid = true; - break; // Incomplete UTF-8 sequence - } - REALM_ASSERT(&in[1] >= in_begin && &in[1] < in_end); - uint_fast16_t v2 = uint_fast16_t(traits8::to_int_type(in[1])); - // UTF-8 layout: 110xxxxx 10xxxxxx - if (REALM_UNLIKELY((v2 & 0xC0) != 0x80)) { - invalid = true; - break; // Invalid continuation byte - } - uint_fast16_t v = uint_fast16_t(((v1 & 0x1F) << 6) | - ((v2 & 0x3F) << 0)); - if (REALM_UNLIKELY(v < 0x80)) { - invalid = true; - break; // Overlong encoding is invalid - } - *out++ = Traits16::to_char_type(v); - in += 2; - continue; - } - if (REALM_LIKELY(v1 < 0xF0)) { // Three bytes - if (REALM_UNLIKELY(in_end - in < 3)) { - invalid = true; - break; // Incomplete UTF-8 sequence - } - REALM_ASSERT(&in[1] >= in_begin && &in[2] < in_end); - uint_fast16_t v2 = uint_fast16_t(traits8::to_int_type(in[1])); - uint_fast16_t v3 = uint_fast16_t(traits8::to_int_type(in[2])); - // UTF-8 layout: 1110xxxx 10xxxxxx 10xxxxxx - if (REALM_UNLIKELY((v2 & 0xC0) != 0x80 || (v3 & 0xC0) != 0x80)) { - invalid = true; - break; // Invalid continuation byte - } - uint_fast16_t v = uint_fast16_t(((v1 & 0x0F) << 12) | - ((v2 & 0x3F) << 6) | - ((v3 & 0x3F) << 0)); - if (REALM_UNLIKELY(v < 0x800)) { - invalid = true; - break; // Overlong encoding is invalid - } - if (REALM_UNLIKELY(0xD800 <= v && v < 0xE000)) { - invalid = true; - break; // Illegal code point range (reserved for UTF-16 surrogate pairs) - } - *out++ = Traits16::to_char_type(v); - in += 3; - continue; - } - if (REALM_UNLIKELY(out + 1 == out_end)) { - break; // Need space in output buffer for surrogate pair - } - if (REALM_LIKELY(v1 < 0xF8)) { // Four bytes - if (REALM_UNLIKELY(in_end - in < 4)) { - invalid = true; - break; // Incomplete UTF-8 sequence - } - uint_fast32_t w1 = uint_fast32_t(v1); // 16 bit -> 32 bit - REALM_ASSERT(&in[1] >= in_begin && &in[3] < in_end); - uint_fast32_t v2 = uint_fast32_t(traits8::to_int_type(in[1])); // 32 bit intended - uint_fast16_t v3 = uint_fast16_t(traits8::to_int_type(in[2])); // 16 bit intended - uint_fast16_t v4 = uint_fast16_t(traits8::to_int_type(in[3])); // 16 bit intended - // UTF-8 layout: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - if (REALM_UNLIKELY((v2 & 0xC0) != 0x80 || (v3 & 0xC0) != 0x80 || - (v4 & 0xC0) != 0x80)) { - invalid = true; - break; // Invalid continuation byte - } - uint_fast32_t v = - uint_fast32_t(((w1 & 0x07) << 18) | // Parenthesis is 32 bit partial result - ((v2 & 0x3F) << 12) | // Parenthesis is 32 bit partial result - ((v3 & 0x3F) << 6) | // Parenthesis is 16 bit partial result - ((v4 & 0x3F) << 0)); // Parenthesis is 16 bit partial result - if (REALM_UNLIKELY(v < 0x10000)) { - invalid = true; - break; // Overlong encoding is invalid - } - if (REALM_UNLIKELY(0x110000 <= v)) { - invalid = true; - break; // Code point too big for UTF-16 - } - v -= 0x10000l; - *out++ = Traits16::to_char_type(0xD800 + (v / 0x400)); - *out++ = Traits16::to_char_type(0xDC00 + (v % 0x400)); - in += 4; - continue; - } - // Invalid first byte of UTF-8 sequence, or code point too big for UTF-16 - invalid = true; - break; - } - - REALM_ASSERT(in >= in_begin && in <= in_end); - REALM_ASSERT(out >= out_begin && out <= out_end); - in_begin = in; - out_begin = out; - return !invalid; -} - - -template -inline size_t Utf8x16::find_utf16_buf_size(const char*& in_begin, - const char* const in_end) -{ - typedef std::char_traits traits8; - size_t num_out = 0; - const char* in = in_begin; - while (in != in_end) { - REALM_ASSERT(&in[0] >= in_begin && &in[0] < in_end); - uint_fast16_t v1 = uint_fast16_t(traits8::to_int_type(in[0])); - if (REALM_LIKELY(v1 < 0x80)) { // One byte - num_out += 1; - in += 1; - continue; - } - if (REALM_UNLIKELY(v1 < 0xC0)) { - break; // Invalid first byte of UTF-8 sequence - } - if (REALM_LIKELY(v1 < 0xE0)) { // Two bytes - if (REALM_UNLIKELY(in_end - in < 2)) { - break; // Incomplete UTF-8 sequence - } - num_out += 1; - in += 2; - continue; - } - if (REALM_LIKELY(v1 < 0xF0)) { // Three bytes - if (REALM_UNLIKELY(in_end - in < 3)) { - break; // Incomplete UTF-8 sequence - } - num_out += 1; - in += 3; - continue; - } - if (REALM_LIKELY(v1 < 0xF8)) { // Four bytes - if (REALM_UNLIKELY(in_end - in < 4)) { - break; // Incomplete UTF-8 sequence - } - num_out += 2; // Surrogate pair - in += 4; - continue; - } - // Invalid first byte of UTF-8 sequence, or code point too big for UTF-16 - break; - } - - REALM_ASSERT(in >= in_begin && in <= in_end); - in_begin = in; - return num_out; -} - - - -// Adapted from reference implementation. -// http://www.unicode.org/resources/utf8.html -// http://www.bsdua.org/files/unicode.tar.gz -template -inline bool Utf8x16::to_utf8(const Char16*& in_begin, const Char16* const in_end, - char*& out_begin, char* const out_end) -{ - typedef std::char_traits traits8; - typedef typename traits8::int_type traits8_int_type; - bool invalid = false; - const Char16* in = in_begin; - char* out = out_begin; - while (in != in_end) { - REALM_ASSERT(&in[0] >= in_begin && &in[0] < in_end); - uint_fast16_t v1 = uint_fast16_t(Traits16::to_int_type(in[0])); - if (REALM_LIKELY(v1 < 0x80)) { - if (REALM_UNLIKELY(out == out_end)) { - break; // Not enough output buffer space - } - // UTF-8 layout: 0xxxxxxx - REALM_ASSERT(out >= out_begin && out < out_end); - *out++ = traits8::to_char_type(traits8_int_type(v1)); - in += 1; - continue; - } - if (REALM_LIKELY(v1 < 0x800)) { - if (REALM_UNLIKELY(out_end - out < 2)) { - break; // Not enough output buffer space - } - // UTF-8 layout: 110xxxxx 10xxxxxx - *out++ = traits8::to_char_type(traits8_int_type(0xC0 + v1 / 0x40)); - REALM_ASSERT(out >= out_begin && out < out_end); - *out++ = traits8::to_char_type(traits8_int_type(0x80 + v1 % 0x40)); - in += 1; - continue; - } - if (REALM_LIKELY(v1 < 0xD800 || 0xE000 <= v1)) { - if (REALM_UNLIKELY(out_end - out < 3)) { - break; // Not enough output buffer space - } - // UTF-8 layout: 1110xxxx 10xxxxxx 10xxxxxx - REALM_ASSERT(out >= out_begin && out + 2 < out_end); - *out++ = traits8::to_char_type(traits8_int_type(0xE0 + v1 / 0x1000)); - *out++ = traits8::to_char_type(traits8_int_type(0x80 + v1 / 0x40 % 0x40)); - *out++ = traits8::to_char_type(traits8_int_type(0x80 + v1 % 0x40)); - in += 1; - continue; - } - - // Surrogate pair - if (REALM_UNLIKELY(out_end - out < 4)) { - break; // Not enough output buffer space - } - if (REALM_UNLIKELY(0xDC00 <= v1)) { - invalid = true; - break; // Invalid first half of surrogate pair - } - if (REALM_UNLIKELY(in + 1 == in_end)) { - invalid = true; - break; // Incomplete surrogate pair - } - REALM_ASSERT(&in[1] >= in_begin && &in[1] < in_end); - uint_fast16_t v2 = uint_fast16_t(Traits16::to_int_type(in[1])); - if (REALM_UNLIKELY(v2 < 0xDC00 || 0xE000 <= v2)) { - invalid = true; - break; // Invalid second half of surrogate pair - } - uint_fast32_t v = 0x10000l + (uint_fast32_t(v1 - 0xD800) * 0x400 + (v2 - 0xDC00)); - // UTF-8 layout: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - REALM_ASSERT(out >= out_begin && out + 3 < out_end); - *out++ = traits8::to_char_type(traits8_int_type(0xF0 + v / 0x40000)); - *out++ = traits8::to_char_type(traits8_int_type(0x80 + v / 0x1000 % 0x40)); - *out++ = traits8::to_char_type(traits8_int_type(0x80 + v / 0x40 % 0x40)); - *out++ = traits8::to_char_type(traits8_int_type(0x80 + v % 0x40)); - in += 2; - } - - REALM_ASSERT(in >= in_begin && in <= in_end); - REALM_ASSERT(out >= out_begin && out <= out_end); - in_begin = in; - out_begin = out; - return !invalid; -} - - -template -inline size_t Utf8x16::find_utf8_buf_size(const Char16*& in_begin, - const Char16* const in_end) -{ - size_t num_out = 0; - const Char16* in = in_begin; - while (in != in_end) { - REALM_ASSERT(&in[0] >= in_begin && &in[0] < in_end); - uint_fast16_t v = uint_fast16_t(Traits16::to_int_type(in[0])); - if (REALM_LIKELY(v < 0x80)) { - if (REALM_UNLIKELY(int_add_with_overflow_detect(num_out, 1))) - break; // Avoid overflow - in += 1; - } - else if (REALM_LIKELY(v < 0x800)) { - if (REALM_UNLIKELY(int_add_with_overflow_detect(num_out, 2))) - break; // Avoid overflow - in += 1; - } - else if (REALM_LIKELY(v < 0xD800 || 0xE000 <= v)) { - if (REALM_UNLIKELY(int_add_with_overflow_detect(num_out, 3))) - break; // Avoid overflow - in += 1; - } - else { - if (REALM_UNLIKELY(in + 1 == in_end)) { - break; // Incomplete surrogate pair - } - if (REALM_UNLIKELY(int_add_with_overflow_detect(num_out, 4))) - break; // Avoid overflow - in += 2; - } - } - REALM_ASSERT(in >= in_begin && in <= in_end); - in_begin = in; - return num_out; -} -} // namespace util -} // namespace realm - -#endif // REALM_UTIL_UTF8_HPP diff --git a/Pods/Realm/include/core/realm/utilities.hpp b/Pods/Realm/include/core/realm/utilities.hpp deleted file mode 100644 index a26e0125..00000000 --- a/Pods/Realm/include/core/realm/utilities.hpp +++ /dev/null @@ -1,245 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_UTILITIES_HPP -#define REALM_UTILITIES_HPP - -#include -#include -#include // size_t -#include -#include -#include - -#ifdef _MSC_VER -# include -# include -#endif - -#include -#include -#include - -// GCC defines __i386__ and __x86_64__ -#if (defined(__X86__) || defined(__i386__) || defined(i386) || defined(_M_IX86) || defined(__386__) || defined(__x86_64__) || defined(_M_X64)) -# define REALM_X86_OR_X64 -# define REALM_X86_OR_X64_TRUE true -#else -# define REALM_X86_OR_X64_TRUE false -#endif - -// GCC defines __arm__ -#ifdef __arm__ -# define REALM_ARCH_ARM -#endif - -#if defined _LP64 || defined __LP64__ || defined __64BIT__ || _ADDR64 || defined _WIN64 || defined __arch64__ || __WORDSIZE == 64 || (defined __sparc && defined __sparcv9) || defined __x86_64 || defined __amd64 || defined __x86_64__ || defined _M_X64 || defined _M_IA64 || defined __ia64 || defined __IA64__ -# define REALM_PTR_64 -#endif - - -#if defined(REALM_PTR_64) && defined(REALM_X86_OR_X64) -# define REALM_COMPILER_SSE // Compiler supports SSE 4.2 through __builtin_ accessors or back-end assembler -# define REALM_COMPILER_AVX -#endif - -namespace realm { - -using StringCompareCallback = std::function; - -extern signed char sse_support; -extern signed char avx_support; - -template -REALM_FORCEINLINE bool sseavx() -{ -/* - Return wether or not SSE 3.0 (if version = 30) or 4.2 (for version = 42) is supported. Return value - is based on the CPUID instruction. - - sse_support = -1: No SSE support - sse_support = 0: SSE3 - sse_support = 1: SSE42 - - avx_support = -1: No AVX support - avx_support = 0: AVX1 supported - sse_support = 1: AVX2 supported (not yet implemented for detection in our cpuid_init(), todo) - - This lets us test very rapidly at runtime because we just need 1 compare instruction (with 0) to test both for - SSE 3 and 4.2 by caller (compiler optimizes if calls are concecutive), and can decide branch with ja/jl/je because - sse_support is signed type. Also, 0 requires no immediate operand. Same for AVX. - - We runtime-initialize sse_support in a constructor of a static variable which is not guaranteed to be called - prior to cpu_sse(). So we compile-time initialize sse_support to -2 as fallback. -*/ - static_assert(version == 1 || version == 2 || version == 30 || version == 42, - "Only version == 1 (AVX), 2 (AVX2), 30 (SSE 3) and 42 (SSE 4.2) are supported for detection"); -#ifdef REALM_COMPILER_SSE - if (version == 30) - return (sse_support >= 0); - else if (version == 42) - return (sse_support > 0); // faster than == 1 (0 requres no immediate operand) - else if (version == 1) // avx - return (avx_support >= 0); - else if (version == 2) // avx2 - return (avx_support > 0); - -#else - return false; -#endif -} - -typedef struct { - unsigned long long remainder; - unsigned long long remainder_len; - unsigned long long b_val; - unsigned long long a_val; - unsigned long long result; -} checksum_t; - -void cpuid_init(); -unsigned long long checksum(unsigned char* data, size_t len); -void checksum_rolling(unsigned char* data, size_t len, checksum_t* t); -void* round_up(void* p, size_t align); -void* round_down(void* p, size_t align); -size_t round_up(size_t p, size_t align); -size_t round_down(size_t p, size_t align); -void checksum_init(checksum_t* t); -void millisleep(size_t milliseconds); - -// popcount -int fast_popcount32(int32_t x); -int fast_popcount64(int64_t x); -uint64_t fastrand(uint64_t max = 0xffffffffffffffffULL, bool is_seed = false); - -// log2 - returns -1 if x==0, otherwise log2(x) -inline int log2(size_t x) { - if (x == 0) - return -1; -#if defined(__GNUC__) -# ifdef REALM_PTR_64 - return 63 - __builtin_clzll(x); // returns int -# else - return 31 - __builtin_clz(x); // returns int -# endif -#elif defined(_WIN32) - unsigned long index = 0; -# ifdef REALM_PTR_64 - unsigned char c = _BitScanReverse64(&index, x); // outputs unsigned long -# else - unsigned char c = _BitScanReverse(&index, x); // outputs unsigned long -# endif - return static_cast(index); -#else // not __GNUC__ and not _WIN32 - int r = 0; - while (x >>= 1) { - r++; - } - return r; -#endif -} - -// Implementation: - -// Safe cast from 64 to 32 bits on 32 bit architecture. Differs from to_ref() by not testing alignment and REF-bitflag. -inline size_t to_size_t(int_fast64_t v) noexcept -{ - REALM_ASSERT_DEBUG(!util::int_cast_has_overflow(v)); - return size_t(v); -} - - -template -ReturnType type_punning(OriginalType variable) noexcept -{ - union Both { - OriginalType in; - ReturnType out; - }; - Both both; - both.out = ReturnType(); // Clear all bits in case ReturnType is larger than OriginalType - both.in = variable; - return both.out; -} - -enum FindRes { - FindRes_not_found, - FindRes_single, - FindRes_column -}; - -enum IndexMethod { - index_FindFirst, - index_FindAll, - index_FindAll_nocopy, - index_Count -}; - - -// realm::is_any == -// std::is_same::value || std::is_same::value || std::is_same::value ... -template -struct is_any : std::false_type { }; - -template -struct is_any : std::true_type { }; - -template -struct is_any : is_any { }; - - -// Use safe_equal() instead of std::equal() when comparing sequences which can have a 0 elements. -template -bool safe_equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2) -{ -#if defined(_MSC_VER) && defined(_DEBUG) - - // Windows has a special check in debug mode against passing realm::null() - // pointer to std::equal(). It's uncertain if this is allowed by the C++ standard. For details, see - // http://stackoverflow.com/questions/19120779/is-char-p-0-stdequalp-p-p-well-defined-according-to-the-c-standard. - // Below check 'first1==last1' is to prevent failure in debug mode. - return (first1 == last1 || std::equal(first1, last1, first2)); -#else - return std::equal(first1, last1, first2); -#endif -} - - -template -struct Wrap { - Wrap(const T& v): m_value(v) {} - operator T() const { return m_value; } -private: - T m_value; -}; - -// PlacementDelete is intended for use with std::unique_ptr when it holds an object allocated with -// placement new. It simply calls the object's destructor without freeing the memory. -struct PlacementDelete { - template - void operator()(T* v) const - { - v->~T(); - } -}; - -} // namespace realm - -#endif // REALM_UTILITIES_HPP - diff --git a/Pods/Realm/include/core/realm/version.hpp b/Pods/Realm/include/core/realm/version.hpp deleted file mode 100644 index e48a14ab..00000000 --- a/Pods/Realm/include/core/realm/version.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/************************************************************************* - * - * REALM CONFIDENTIAL - * __________________ - * - * [2011] - [2015] Realm Inc - * All Rights Reserved. - * - * NOTICE: All information contained herein is, and remains - * the property of Realm Incorporated and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to Realm Incorporated - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. - * Dissemination of this information or reproduction of this material - * is strictly forbidden unless prior written permission is obtained - * from Realm Incorporated. - * - **************************************************************************/ -#ifndef REALM_VERSION_HPP -#define REALM_VERSION_HPP - -#include -#include - -#define REALM_VER_MAJOR 1 -#define REALM_VER_MINOR 0 -#define REALM_VER_PATCH 1 -#define REALM_PRODUCT_NAME "realm-core" - -#define REALM_QUOTE2(X) #X -#define REALM_QUOTE(X) REALM_QUOTE2(X) - -#define REALM_VER_STRING REALM_QUOTE(REALM_VER_MAJOR) "." REALM_QUOTE(REALM_VER_MINOR) "." REALM_QUOTE(REALM_VER_PATCH) -#define REALM_VER_CHUNK "[" REALM_PRODUCT_NAME "-" REALM_VER_STRING "]" - -namespace realm { - -enum Feature { - feature_Debug, - feature_Replication -}; - -class Version { -public: - static int get_major() { return REALM_VER_MAJOR; } - static int get_minor() { return REALM_VER_MINOR; } - static int get_patch() { return REALM_VER_PATCH; } - static std::string get_version(); - static bool is_at_least(int major, int minor, int patch); - static bool has_feature(Feature feature); -}; - - -} // namespace realm - -#endif // REALM_VERSION_HPP diff --git a/Pods/Realm/include/core/realm/views.hpp b/Pods/Realm/include/core/realm/views.hpp deleted file mode 100644 index 85aabb7b..00000000 --- a/Pods/Realm/include/core/realm/views.hpp +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef REALM_VIEWS_HPP -#define REALM_VIEWS_HPP - -#include -#include -#include -#include - -namespace realm { - -const int64_t detached_ref = -1; - -// This class is for common functionality of ListView and LinkView which inherit from it. Currently it only -// supports sorting. -class RowIndexes -{ -public: - RowIndexes(IntegerColumn::unattached_root_tag urt, realm::Allocator& alloc) : -#ifdef REALM_COOKIE_CHECK - cookie(cookie_expected), -#endif - m_row_indexes(urt, alloc) - {} - - RowIndexes(IntegerColumn&& col) : -#ifdef REALM_COOKIE_CHECK - cookie(cookie_expected), -#endif - m_row_indexes(std::move(col)) - {} - - RowIndexes(const RowIndexes& source, ConstSourcePayload mode); - RowIndexes(RowIndexes& source, MutableSourcePayload mode); - - virtual ~RowIndexes() - { -#ifdef REALM_COOKIE_CHECK - cookie = 0x7765697633333333; // 0x77656976 = 'view'; 0x33333333 = '3333' = destructed -#endif - } - - // Return a column of the table that m_row_indexes are pointing at (which is the target table for LinkList and - // parent table for TableView) - virtual const ColumnBase& get_column_base(size_t index) const = 0; - - virtual size_t size() const = 0; - - // These two methods are overridden by TableView and LinkView. - virtual uint_fast64_t sync_if_needed() const = 0; - virtual bool is_in_sync() const { return true; } - - void check_cookie() const - { -#ifdef REALM_COOKIE_CHECK - REALM_ASSERT_RELEASE(cookie == cookie_expected); -#endif - } - - // Predicate for std::sort - struct Sorter - { - Sorter(){} - Sorter(const std::vector& columns, const std::vector& ascending) - : m_column_indexes(columns), m_ascending(ascending) {} - bool operator()(size_t i, size_t j) const - { - for (size_t t = 0; t < m_columns.size(); t++) { - // todo/fixme, special treatment of StringEnumColumn by calling StringEnumColumn::compare_values() - // instead of the general ColumnTemplate::compare_values() becuse it cannot overload inherited - // `int64_t get_val()` of Column. Such column inheritance needs to be cleaned up - int c; - if (const StringEnumColumn* cse = m_string_enum_columns[t]) - c = cse->compare_values(i, j); - else - c = m_columns[t]->compare_values(i, j); - - if (c != 0) - return m_ascending[t] ? c > 0 : c < 0; - } - return false; // row i == row j - } - - void init(RowIndexes* row_indexes) - { - m_columns.clear(); - m_string_enum_columns.clear(); - m_columns.resize(m_column_indexes.size(), 0); - m_string_enum_columns.resize(m_column_indexes.size(), 0); - - for (size_t i = 0; i < m_column_indexes.size(); i++) { - const ColumnBase& cb = row_indexes->get_column_base(m_column_indexes[i]); - const ColumnTemplateBase* ctb = dynamic_cast(&cb); - REALM_ASSERT(ctb); - if (const StringEnumColumn* cse = dynamic_cast(&cb)) - m_string_enum_columns[i] = cse; - else - m_columns[i] = ctb; - } - } - - explicit operator bool() const { return !m_column_indexes.empty(); } - - std::vector m_column_indexes; - std::vector m_ascending; - std::vector m_columns; - std::vector m_string_enum_columns; - }; - - void sort(Sorter& sorting_predicate); - -#ifdef REALM_COOKIE_CHECK - static const uint64_t cookie_expected = 0x7765697677777777ull; // 0x77656976 = 'view'; 0x77777777 = '7777' = alive - uint64_t cookie; -#endif - - IntegerColumn m_row_indexes; -}; - -} // namespace realm - -#endif // REALM_VIEWS_HPP diff --git a/Pods/Realm/include/impl/apple/external_commit_helper.hpp b/Pods/Realm/include/impl/apple/external_commit_helper.hpp deleted file mode 100644 index c87d8b24..00000000 --- a/Pods/Realm/include/impl/apple/external_commit_helper.hpp +++ /dev/null @@ -1,80 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include - -namespace realm { -class Realm; - -namespace _impl { -class RealmCoordinator; - -class ExternalCommitHelper { -public: - ExternalCommitHelper(RealmCoordinator& parent); - ~ExternalCommitHelper(); - - void notify_others(); - -private: - // A RAII holder for a file descriptor which automatically closes the wrapped - // fd when it's deallocated - class FdHolder { - public: - FdHolder() = default; - ~FdHolder() { close(); } - operator int() const { return m_fd; } - - FdHolder& operator=(int newFd) { - close(); - m_fd = newFd; - return *this; - } - - private: - int m_fd = -1; - void close(); - - FdHolder& operator=(FdHolder const&) = delete; - FdHolder(FdHolder const&) = delete; - }; - - void listen(); - - RealmCoordinator& m_parent; - - // The listener thread - std::future m_thread; - - // Pipe which is waited on for changes and written to when there is a new - // commit to notify others of. When using a named pipe m_notify_fd is - // read-write and m_notify_fd_write is unused; when using an anonymous pipe - // (on tvOS) m_notify_fd is read-only and m_notify_fd_write is write-only. - FdHolder m_notify_fd; - FdHolder m_notify_fd_write; - - // File descriptor for the kqueue - FdHolder m_kq; - - // The two ends of an anonymous pipe used to notify the kqueue() thread that - // it should be shut down. - FdHolder m_shutdown_read_fd; - FdHolder m_shutdown_write_fd; -}; -} // namespace _impl -} // namespace realm diff --git a/Pods/Realm/include/impl/apple/weak_realm_notifier.hpp b/Pods/Realm/include/impl/apple/weak_realm_notifier.hpp deleted file mode 100644 index 0f94ed7e..00000000 --- a/Pods/Realm/include/impl/apple/weak_realm_notifier.hpp +++ /dev/null @@ -1,48 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#include "impl/weak_realm_notifier_base.hpp" - -#include - -namespace realm { -class Realm; - -namespace _impl { - -class WeakRealmNotifier : public WeakRealmNotifierBase { -public: - WeakRealmNotifier(const std::shared_ptr& realm, bool cache); - ~WeakRealmNotifier(); - - WeakRealmNotifier(WeakRealmNotifier&&); - WeakRealmNotifier& operator=(WeakRealmNotifier&&); - - WeakRealmNotifier(const WeakRealmNotifier&) = delete; - WeakRealmNotifier& operator=(const WeakRealmNotifier&) = delete; - - // Asynchronously call notify() on the Realm on the appropriate thread - void notify(); - -private: - CFRunLoopRef m_runloop; - CFRunLoopSourceRef m_signal; -}; - -} // namespace _impl -} // namespace realm diff --git a/Pods/Realm/include/impl/collection_change_builder.hpp b/Pods/Realm/include/impl/collection_change_builder.hpp deleted file mode 100644 index 6e9f78c1..00000000 --- a/Pods/Realm/include/impl/collection_change_builder.hpp +++ /dev/null @@ -1,67 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_COLLECTION_CHANGE_BUILDER_HPP -#define REALM_COLLECTION_CHANGE_BUILDER_HPP - -#include "collection_notifications.hpp" - -#include - -namespace realm { -namespace _impl { -class CollectionChangeBuilder : public CollectionChangeSet { -public: - CollectionChangeBuilder(CollectionChangeBuilder const&) = default; - CollectionChangeBuilder(CollectionChangeBuilder&&) = default; - CollectionChangeBuilder& operator=(CollectionChangeBuilder const&) = default; - CollectionChangeBuilder& operator=(CollectionChangeBuilder&&) = default; - - CollectionChangeBuilder(IndexSet deletions = {}, - IndexSet insertions = {}, - IndexSet modification = {}, - std::vector moves = {}); - - // Calculate where rows need to be inserted or deleted from old_rows to turn - // it into new_rows, and check all matching rows for modifications - static CollectionChangeBuilder calculate(std::vector const& old_rows, - std::vector const& new_rows, - std::function row_did_change, - bool sort); - - void merge(CollectionChangeBuilder&&); - void clean_up_stale_moves(); - - void insert(size_t ndx, size_t count=1, bool track_moves=true); - void modify(size_t ndx); - void erase(size_t ndx); - void move_over(size_t ndx, size_t last_ndx, bool track_moves=true); - void clear(size_t old_size); - void move(size_t from, size_t to); - - void parse_complete(); - -private: - std::unordered_map m_move_mapping; - - void verify(); -}; -} // namespace _impl -} // namespace realm - -#endif // REALM_COLLECTION_CHANGE_BUILDER_HPP diff --git a/Pods/Realm/include/impl/collection_notifier.hpp b/Pods/Realm/include/impl/collection_notifier.hpp deleted file mode 100644 index 211d5ced..00000000 --- a/Pods/Realm/include/impl/collection_notifier.hpp +++ /dev/null @@ -1,207 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_BACKGROUND_COLLECTION_HPP -#define REALM_BACKGROUND_COLLECTION_HPP - -#include "impl/collection_change_builder.hpp" - -#include - -#include -#include -#include -#include -#include -#include - -namespace realm { -class Realm; - -namespace _impl { -struct ListChangeInfo { - size_t table_ndx; - size_t row_ndx; - size_t col_ndx; - CollectionChangeBuilder* changes; -}; - -struct TransactionChangeInfo { - std::vector table_modifications_needed; - std::vector table_moves_needed; - std::vector lists; - std::vector tables; -}; - -class DeepChangeChecker { -public: - struct OutgoingLink { - size_t col_ndx; - bool is_list; - }; - struct RelatedTable { - size_t table_ndx; - std::vector links; - }; - - DeepChangeChecker(TransactionChangeInfo const& info, Table const& root_table, - std::vector const& related_tables); - - bool operator()(size_t row_ndx); - - // Recursively add `table` and all tables it links to to `out`, along with - // information about the links from them - static void find_related_tables(std::vector& out, Table const& table); - -private: - TransactionChangeInfo const& m_info; - Table const& m_root_table; - const size_t m_root_table_ndx; - IndexSet const* const m_root_modifications; - std::vector m_not_modified; - std::vector const& m_related_tables; - - struct Path { - size_t table; - size_t row; - size_t col; - bool depth_exceeded; - }; - std::array m_current_path; - - bool check_row(Table const& table, size_t row_ndx, size_t depth = 0); - bool check_outgoing_links(size_t table_ndx, Table const& table, - size_t row_ndx, size_t depth = 0); -}; - -// A base class for a notifier that keeps a collection up to date and/or -// generates detailed change notifications on a background thread. This manages -// most of the lifetime-management issues related to sharing an object between -// the worker thread and the collection on the target thread, along with the -// thread-safe callback collection. -class CollectionNotifier { -public: - CollectionNotifier(std::shared_ptr); - virtual ~CollectionNotifier(); - - // ------------------------------------------------------------------------ - // Public API for the collections using this to get notifications: - - // Stop receiving notifications from this background worker - // This must be called in the destructor of the collection - void unregister() noexcept; - - // Add a callback to be called each time the collection changes - // This can only be called from the target collection's thread - // Returns a token which can be passed to remove_callback() - size_t add_callback(CollectionChangeCallback callback); - // Remove a previously added token. The token is no longer valid after - // calling this function and must not be used again. This function can be - // called from any thread. - void remove_callback(size_t token); - - // ------------------------------------------------------------------------ - // API for RealmCoordinator to manage running things and calling callbacks - - Realm* get_realm() const noexcept { return m_realm.get(); } - - // Get the SharedGroup version which this collection can attach to (if it's - // in handover mode), or can deliver to (if it's been handed over to the BG worker alredad) - SharedGroup::VersionID version() const noexcept { return m_sg_version; } - - // Release references to all core types - // This is called on the worker thread to ensure that non-thread-safe things - // can be destroyed on the correct thread, even if the last reference to the - // CollectionNotifier is released on a different thread - virtual void release_data() noexcept = 0; - - // Call each of the currently registered callbacks, if there have been any - // changes since the last time each of those callbacks was called - void call_callbacks(); - - bool is_alive() const noexcept; - - // Attach the handed-over query to `sg`. Must not be already attached to a SharedGroup. - void attach_to(SharedGroup& sg); - // Create a new query handover object and stop using the previously attached - // SharedGroup - void detach(); - - // Set `info` as the new ChangeInfo that will be populated by the next - // transaction advance, and register all required information in it - void add_required_change_info(TransactionChangeInfo& info); - - virtual void run() = 0; - void prepare_handover(); - bool deliver(Realm&, SharedGroup&, std::exception_ptr); - -protected: - bool have_callbacks() const noexcept { return m_have_callbacks; } - void add_changes(CollectionChangeBuilder change) { m_accumulated_changes.merge(std::move(change)); } - void set_table(Table const& table); - std::unique_lock lock_target(); - - std::function get_modification_checker(TransactionChangeInfo const&, Table const&); - -private: - virtual void do_attach_to(SharedGroup&) = 0; - virtual void do_detach_from(SharedGroup&) = 0; - virtual void do_prepare_handover(SharedGroup&) = 0; - virtual bool do_deliver(SharedGroup&) { return true; } - virtual bool do_add_required_change_info(TransactionChangeInfo&) = 0; - - mutable std::mutex m_realm_mutex; - std::shared_ptr m_realm; - - SharedGroup::VersionID m_sg_version; - SharedGroup* m_sg = nullptr; - - std::exception_ptr m_error; - CollectionChangeBuilder m_accumulated_changes; - CollectionChangeSet m_changes_to_deliver; - - std::vector m_related_tables; - - struct Callback { - CollectionChangeCallback fn; - size_t token; - bool initial_delivered; - }; - - // Currently registered callbacks and a mutex which must always be held - // while doing anything with them or m_callback_index - std::mutex m_callback_mutex; - std::vector m_callbacks; - - // Cached value for if m_callbacks is empty, needed to avoid deadlocks in - // run() due to lock-order inversion between m_callback_mutex and m_target_mutex - // It's okay if this value is stale as at worst it'll result in us doing - // some extra work. - std::atomic m_have_callbacks = {false}; - - // Iteration variable for looping over callbacks - // remove_callback() updates this when needed - size_t m_callback_index = npos; - - CollectionChangeCallback next_callback(); -}; - -} // namespace _impl -} // namespace realm - -#endif /* REALM_BACKGROUND_COLLECTION_HPP */ diff --git a/Pods/Realm/include/impl/external_commit_helper.hpp b/Pods/Realm/include/impl/external_commit_helper.hpp deleted file mode 100644 index c467a4b9..00000000 --- a/Pods/Realm/include/impl/external_commit_helper.hpp +++ /dev/null @@ -1,30 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_EXTERNAL_COMMIT_HELPER_HPP -#define REALM_EXTERNAL_COMMIT_HELPER_HPP - -#include - -#if REALM_PLATFORM_APPLE -#include "impl/apple/external_commit_helper.hpp" -#else -#include "impl/generic/external_commit_helper.hpp" -#endif - -#endif // REALM_EXTERNAL_COMMIT_HELPER_HPP diff --git a/Pods/Realm/include/impl/list_notifier.hpp b/Pods/Realm/include/impl/list_notifier.hpp deleted file mode 100644 index 82b4e414..00000000 --- a/Pods/Realm/include/impl/list_notifier.hpp +++ /dev/null @@ -1,62 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_LIST_NOTIFIER_HPP -#define REALM_LIST_NOTIFIER_HPP - -#include "impl/collection_notifier.hpp" - -#include - -namespace realm { -namespace _impl { -class ListNotifier : public CollectionNotifier { -public: - ListNotifier(LinkViewRef lv, std::shared_ptr realm); - -private: - // The linkview, in handover form if this has not been attached to the main - // SharedGroup yet - LinkViewRef m_lv; - std::unique_ptr> m_lv_handover; - - // The last-seen size of the LinkView so that we can report row deletions - // when the LinkView itself is deleted - size_t m_prev_size; - - // The column index of the LinkView - size_t m_col_ndx; - - // The actual change, calculated in run() and delivered in prepare_handover() - CollectionChangeBuilder m_change; - TransactionChangeInfo* m_info; - - void run() override; - - void do_prepare_handover(SharedGroup&) override; - - void do_attach_to(SharedGroup& sg) override; - void do_detach_from(SharedGroup& sg) override; - - void release_data() noexcept override; - bool do_add_required_change_info(TransactionChangeInfo& info) override; -}; -} -} - -#endif // REALM_LIST_NOTIFIER_HPP diff --git a/Pods/Realm/include/impl/realm_coordinator.hpp b/Pods/Realm/include/impl/realm_coordinator.hpp deleted file mode 100644 index 2a6f74b2..00000000 --- a/Pods/Realm/include/impl/realm_coordinator.hpp +++ /dev/null @@ -1,127 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_COORDINATOR_HPP -#define REALM_COORDINATOR_HPP - -#include "shared_realm.hpp" - -#include - -namespace realm { -class Replication; -class Schema; -class SharedGroup; -class StringData; - -namespace _impl { -class CollectionNotifier; -class ExternalCommitHelper; -class WeakRealmNotifier; - -// RealmCoordinator manages the weak cache of Realm instances and communication -// between per-thread Realm instances for a given file -class RealmCoordinator : public std::enable_shared_from_this { -public: - // Get the coordinator for the given path, creating it if neccesary - static std::shared_ptr get_coordinator(StringData path); - // Get the coordinator for the given path, or null if there is none - static std::shared_ptr get_existing_coordinator(StringData path); - - // Get a thread-local shared Realm with the given configuration - // If the Realm is already open on another thread, validates that the given - // configuration is compatible with the existing one - std::shared_ptr get_realm(Realm::Config config); - std::shared_ptr get_realm(); - - const Schema* get_schema() const noexcept; - uint64_t get_schema_version() const noexcept { return m_config.schema_version; } - const std::string& get_path() const noexcept { return m_config.path; } - const std::vector& get_encryption_key() const noexcept { return m_config.encryption_key; } - bool is_in_memory() const noexcept { return m_config.in_memory; } - - // Asynchronously call notify() on every Realm instance for this coordinator's - // path, including those in other processes - void send_commit_notifications(); - - // Clear the weak Realm cache for all paths - // Should only be called in test code, as continuing to use the previously - // cached instances will have odd results - static void clear_cache(); - - // Clears all caches on existing coordinators - static void clear_all_caches(); - - // Explicit constructor/destructor needed for the unique_ptrs to forward-declared types - RealmCoordinator(); - ~RealmCoordinator(); - - // Called by Realm's destructor to ensure the cache is cleaned up promptly - // Do not call directly - void unregister_realm(Realm* realm); - - // Called by m_notifier when there's a new commit to send notifications for - void on_change(); - - // Update the schema in the cached config - void update_schema(Schema const& new_schema); - - static void register_notifier(std::shared_ptr notifier); - - // Advance the Realm to the most recent transaction version which all async - // work is complete for - void advance_to_ready(Realm& realm); - void process_available_async(Realm& realm); - -private: - Realm::Config m_config; - - std::mutex m_realm_mutex; - std::vector m_weak_realm_notifiers; - - std::mutex m_notifier_mutex; - std::vector> m_new_notifiers; - std::vector> m_notifiers; - - // SharedGroup used for actually running async notifiers - // Will have a read transaction iff m_notifiers is non-empty - std::unique_ptr m_notifier_history; - std::unique_ptr m_notifier_sg; - - // SharedGroup used to advance notifiers in m_new_notifiers to the main shared - // group's transaction version - // Will have a read transaction iff m_new_notifiers is non-empty - std::unique_ptr m_advancer_history; - std::unique_ptr m_advancer_sg; - std::exception_ptr m_async_error; - - std::unique_ptr<_impl::ExternalCommitHelper> m_notifier; - - // must be called with m_notifier_mutex locked - void pin_version(uint_fast64_t version, uint_fast32_t index); - - void run_async_notifiers(); - void open_helper_shared_group(); - void advance_helper_shared_group_to_latest(); - void clean_up_dead_notifiers(); -}; - -} // namespace _impl -} // namespace realm - -#endif /* REALM_COORDINATOR_HPP */ diff --git a/Pods/Realm/include/impl/results_notifier.hpp b/Pods/Realm/include/impl/results_notifier.hpp deleted file mode 100644 index 8028fbd0..00000000 --- a/Pods/Realm/include/impl/results_notifier.hpp +++ /dev/null @@ -1,81 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_RESULTS_NOTIFIER_HPP -#define REALM_RESULTS_NOTIFIER_HPP - -#include "collection_notifier.hpp" -#include "results.hpp" - -#include - -namespace realm { -namespace _impl { -class ResultsNotifier : public CollectionNotifier { -public: - ResultsNotifier(Results& target); - -private: - // Target Results to update - // Can only be used with lock_target() held - Results* m_target_results; - - const SortOrder m_sort; - bool m_target_is_in_table_order; - - // The source Query, in handover form iff m_sg is null - std::unique_ptr> m_query_handover; - std::unique_ptr m_query; - - // The TableView resulting from running the query. Will be detached unless - // the query was (re)run since the last time the handover object was created - TableView m_tv; - std::unique_ptr> m_tv_handover; - - // The table version from the last time the query was run. Used to avoid - // rerunning the query when there's no chance of it changing. - uint_fast64_t m_last_seen_version = -1; - - // The rows from the previous run of the query, for calculating diffs - std::vector m_previous_rows; - - // The changeset calculated during run() and delivered in do_prepare_handover() - CollectionChangeBuilder m_changes; - TransactionChangeInfo* m_info = nullptr; - - // Flag for whether or not the query has been run at all, as goofy timing - // can lead to deliver() being called before that - bool m_initial_run_complete = false; - - bool need_to_run(); - void calculate_changes(); - - void run() override; - void do_prepare_handover(SharedGroup&) override; - bool do_deliver(SharedGroup& sg) override; - bool do_add_required_change_info(TransactionChangeInfo& info) override; - - void release_data() noexcept override; - void do_attach_to(SharedGroup& sg) override; - void do_detach_from(SharedGroup& sg) override; -}; - -} // namespace _impl -} // namespace realm - -#endif /* REALM_RESULTS_NOTIFIER_HPP */ diff --git a/Pods/Realm/include/impl/transact_log_handler.hpp b/Pods/Realm/include/impl/transact_log_handler.hpp deleted file mode 100644 index 96dbbfda..00000000 --- a/Pods/Realm/include/impl/transact_log_handler.hpp +++ /dev/null @@ -1,57 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_TRANSACT_LOG_HANDLER_HPP -#define REALM_TRANSACT_LOG_HANDLER_HPP - -#include - -namespace realm { -class BindingContext; - -namespace _impl { -struct TransactionChangeInfo; - -namespace transaction { -// Advance the read transaction version, with change notifications sent to delegate -// Must not be called from within a write transaction. -void advance(SharedGroup& sg, BindingContext* binding_context, - SharedGroup::VersionID version=SharedGroup::VersionID{}); - -// Begin a write transaction -// If the read transaction version is not up to date, will first advance to the -// most recent read transaction and sent notifications to delegate -void begin(SharedGroup& sg, BindingContext* binding_context, - bool validate_schema_changes=true); - -// Commit a write transaction -void commit(SharedGroup& sg, BindingContext* binding_context); - -// Cancel a write transaction and roll back all changes, with change notifications -// for reverting to the old values sent to delegate -void cancel(SharedGroup& sg, BindingContext* binding_context); - -// Advance the read transaction version, with change information gathered in info -void advance(SharedGroup& sg, - TransactionChangeInfo& info, - SharedGroup::VersionID version=SharedGroup::VersionID{}); -} // namespace transaction -} // namespace _impl -} // namespace realm - -#endif /* REALM_TRANSACT_LOG_HANDLER_HPP */ diff --git a/Pods/Realm/include/impl/weak_realm_notifier.hpp b/Pods/Realm/include/impl/weak_realm_notifier.hpp deleted file mode 100644 index b0e4f595..00000000 --- a/Pods/Realm/include/impl/weak_realm_notifier.hpp +++ /dev/null @@ -1,30 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_WEAK_REALM_NOTIFIER_HPP -#define REALM_WEAK_REALM_NOTIFIER_HPP - -#include - -#if REALM_PLATFORM_APPLE -#include "impl/apple/weak_realm_notifier.hpp" -#else -#include "impl/generic/weak_realm_notifier.hpp" -#endif - -#endif // REALM_WEAK_REALM_NOTIFIER_HPP diff --git a/Pods/Realm/include/impl/weak_realm_notifier_base.hpp b/Pods/Realm/include/impl/weak_realm_notifier_base.hpp deleted file mode 100644 index a8c41bab..00000000 --- a/Pods/Realm/include/impl/weak_realm_notifier_base.hpp +++ /dev/null @@ -1,68 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_WEAK_REALM_NOTIFIER_BASE_HPP -#define REALM_WEAK_REALM_NOTIFIER_BASE_HPP - -#include -#include - -namespace realm { -class Realm; - -namespace _impl { - -// WeakRealmNotifierBase stores a weak reference to a Realm instance, along with all of -// the information about a Realm that needs to be accessed from other threads. -// This is needed to avoid forming strong references to the Realm instances on -// other threads, which can produce deadlocks when the last strong reference to -// a Realm instance is released from within a function holding the cache lock. -class WeakRealmNotifierBase { -public: - WeakRealmNotifierBase(const std::shared_ptr& realm, bool cache); - - // Get a strong reference to the cached realm - std::shared_ptr realm() const { return m_realm.lock(); } - - // Does this WeakRealmNotifierBase store a Realm instance that should be used on the current thread? - bool is_cached_for_current_thread() const { return m_cache && m_thread_id == std::this_thread::get_id(); } - - // Has the Realm instance been destroyed? - bool expired() const { return m_realm.expired(); } - - // Is this a WeakRealmNotifierBase for the given Realm instance? - bool is_for_realm(Realm* realm) const { return realm == m_realm_key; } - -private: - std::weak_ptr m_realm; - std::thread::id m_thread_id = std::this_thread::get_id(); - void* m_realm_key; - bool m_cache = false; -}; - -inline WeakRealmNotifierBase::WeakRealmNotifierBase(const std::shared_ptr& realm, bool cache) -: m_realm(realm) -, m_realm_key(realm.get()) -, m_cache(cache) -{ -} - -} // namespace _impl -} // namespace realm - -#endif // REALM_WEAK_REALM_NOTIFIER_BASE_HPP diff --git a/Pods/Realm/include/index_set.hpp b/Pods/Realm/include/index_set.hpp deleted file mode 100644 index 0cf00fd9..00000000 --- a/Pods/Realm/include/index_set.hpp +++ /dev/null @@ -1,326 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_INDEX_SET_HPP -#define REALM_INDEX_SET_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace realm { -namespace _impl { -template -class MutableChunkedRangeVectorIterator; - -// An iterator for ChunkedRangeVector, templated on the vector iterator/const_iterator -template -class ChunkedRangeVectorIterator { -public: - using iterator_category = std::bidirectional_iterator_tag; - using value_type = typename std::remove_referencedata.begin())>::type; - using difference_type = ptrdiff_t; - using pointer = const value_type*; - using reference = const value_type&; - - ChunkedRangeVectorIterator(OuterIterator outer, OuterIterator end, value_type* inner) - : m_outer(outer), m_end(end), m_inner(inner) { } - - reference operator*() const { return *m_inner; } - pointer operator->() const { return m_inner; } - - template bool operator==(Other const& it) const; - template bool operator!=(Other const& it) const; - - ChunkedRangeVectorIterator& operator++(); - ChunkedRangeVectorIterator operator++(int); - - ChunkedRangeVectorIterator& operator--(); - ChunkedRangeVectorIterator operator--(int); - - // Advance directly to the next outer block - void next_chunk(); - - OuterIterator outer() const { return m_outer; } - size_t offset() const { return m_inner - &m_outer->data[0]; } - -private: - OuterIterator m_outer; - OuterIterator m_end; - value_type* m_inner; - friend struct ChunkedRangeVector; - friend class MutableChunkedRangeVectorIterator; -}; - -// A mutable iterator that adds some invariant-preserving mutation methods -template -class MutableChunkedRangeVectorIterator : public ChunkedRangeVectorIterator { -public: - using ChunkedRangeVectorIterator::ChunkedRangeVectorIterator; - - // Set this iterator to the given range and update the parent if needed - void set(size_t begin, size_t end); - // Adjust the begin and end of this iterator by the given amounts and - // update the parent if needed - void adjust(ptrdiff_t front, ptrdiff_t back); - // Shift this iterator by the given amount and update the parent if needed - void shift(ptrdiff_t distance); -}; - -// A vector which stores ranges in chunks with a maximum size -struct ChunkedRangeVector { - struct Chunk { - std::vector> data; - size_t begin; - size_t end; - size_t count; - }; - std::vector m_data; - - using value_type = std::pair; - using iterator = MutableChunkedRangeVectorIterator; - using const_iterator = ChunkedRangeVectorIterator; - -#ifdef REALM_DEBUG - static const size_t max_size = 4; -#else - static const size_t max_size = 4096 / sizeof(std::pair); -#endif - - iterator begin() { return empty() ? end() : iterator(m_data.begin(), m_data.end(), &m_data[0].data[0]); } - iterator end() { return iterator(m_data.end(), m_data.end(), nullptr); } - const_iterator begin() const { return cbegin(); } - const_iterator end() const { return cend(); } - const_iterator cbegin() const { return empty() ? cend() : const_iterator(m_data.cbegin(), m_data.end(), &m_data[0].data[0]); } - const_iterator cend() const { return const_iterator(m_data.end(), m_data.end(), nullptr); } - - bool empty() const noexcept { return m_data.empty(); } - - iterator insert(iterator pos, value_type value); - iterator erase(iterator pos); - void push_back(value_type value); - iterator ensure_space(iterator pos); - - void verify() const noexcept; -}; -} // namespace _impl - -class IndexSet : private _impl::ChunkedRangeVector { -public: - static const size_t npos = -1; - - using ChunkedRangeVector::value_type; - using ChunkedRangeVector::iterator; - using ChunkedRangeVector::const_iterator; - using ChunkedRangeVector::begin; - using ChunkedRangeVector::end; - using ChunkedRangeVector::empty; - using ChunkedRangeVector::verify; - - IndexSet() = default; - IndexSet(std::initializer_list); - - // Check if the index set contains the given index - bool contains(size_t index) const; - - // Counts the number of indices in the set in the given range - size_t count(size_t start_index=0, size_t end_index=-1) const; - - // Add an index to the set, doing nothing if it's already present - void add(size_t index); - void add(IndexSet const& is); - - // Add an index which has had all of the ranges in the set before it removed - // Returns the unshifted index - size_t add_shifted(size_t index); - // Add indexes which have had the ranges in `shifted_by` added and the ranges - // in the current set removed - void add_shifted_by(IndexSet const& shifted_by, IndexSet const& values); - - // Remove all indexes from the set and then add a single range starting from - // zero with the given length - void set(size_t len); - - // Insert an index at the given position, shifting existing indexes at or - // after that point back by one - void insert_at(size_t index, size_t count=1); - void insert_at(IndexSet const&); - - // Shift indexes at or after the given point back by one - void shift_for_insert_at(size_t index, size_t count=1); - void shift_for_insert_at(IndexSet const&); - - // Delete an index at the given position, shifting indexes after that point - // forward by one - void erase_at(size_t index); - void erase_at(IndexSet const&); - - // If the given index is in the set remove it and return npos; otherwise unshift() it - size_t erase_or_unshift(size_t index); - - // Remove the indexes at the given index from the set, without shifting - void remove(size_t index, size_t count=1); - void remove(IndexSet const&); - - // Shift an index by inserting each of the indexes in this set - size_t shift(size_t index) const; - // Shift an index by deleting each of the indexes in this set - size_t unshift(size_t index) const; - - // Remove all indexes from the set - void clear(); - - // An iterator over the individual indices in the set rather than the ranges - class IndexIterator : public std::iterator { - public: - IndexIterator(IndexSet::const_iterator it) : m_iterator(it) { } - size_t operator*() const { return m_iterator->first + m_offset; } - bool operator==(IndexIterator const& it) const { return m_iterator == it.m_iterator; } - bool operator!=(IndexIterator const& it) const { return m_iterator != it.m_iterator; } - - IndexIterator& operator++() - { - ++m_offset; - if (m_iterator->first + m_offset == m_iterator->second) { - ++m_iterator; - m_offset = 0; - } - return *this; - } - - IndexIterator operator++(int) - { - auto value = *this; - ++*this; - return value; - } - - private: - IndexSet::const_iterator m_iterator; - size_t m_offset = 0; - }; - - class IndexIteratableAdaptor { - public: - using value_type = size_t; - using iterator = IndexIterator; - using const_iterator = iterator; - - const_iterator begin() const { return m_index_set.begin(); } - const_iterator end() const { return m_index_set.end(); } - - IndexIteratableAdaptor(IndexSet const& is) : m_index_set(is) { } - private: - IndexSet const& m_index_set; - }; - - IndexIteratableAdaptor as_indexes() const { return *this; } - -private: - // Find the range which contains the index, or the first one after it if - // none do - iterator find(size_t index); - iterator find(size_t index, iterator it); - // Insert the index before the given position, combining existing ranges as - // applicable - // returns inserted position - iterator do_add(iterator pos, size_t index); - void do_erase(iterator it, size_t index); - iterator do_remove(iterator it, size_t index, size_t count); - - void shift_until_end_by(iterator begin, ptrdiff_t shift); -}; - -namespace util { -// This was added in C++14 but is missing from libstdc++ 4.9 -template -std::reverse_iterator make_reverse_iterator(Iterator it) -{ - return std::reverse_iterator(it); -} -} // namespace util - - -namespace _impl { -template -template -inline bool ChunkedRangeVectorIterator::operator==(OtherIterator const& it) const -{ - return m_outer == it.outer() && m_inner == it.operator->(); -} - -template -template -inline bool ChunkedRangeVectorIterator::operator!=(OtherIterator const& it) const -{ - return !(*this == it); -} - -template -inline ChunkedRangeVectorIterator& ChunkedRangeVectorIterator::operator++() -{ - ++m_inner; - if (offset() == m_outer->data.size()) - next_chunk(); - return *this; -} - -template -inline ChunkedRangeVectorIterator ChunkedRangeVectorIterator::operator++(int) -{ - auto value = *this; - ++*this; - return value; -} - -template -inline ChunkedRangeVectorIterator& ChunkedRangeVectorIterator::operator--() -{ - if (!m_inner || m_inner == &m_outer->data.front()) { - --m_outer; - m_inner = &m_outer->data.back(); - } - else { - --m_inner; - } - return *this; -} - -template -inline ChunkedRangeVectorIterator ChunkedRangeVectorIterator::operator--(int) -{ - auto value = *this; - --*this; - return value; -} - -template -inline void ChunkedRangeVectorIterator::next_chunk() -{ - ++m_outer; - m_inner = m_outer != m_end ? &m_outer->data[0] : nullptr; -} -} // namespace _impl - -} // namespace realm - -#endif // REALM_INDEX_SET_HPP diff --git a/Pods/Realm/include/list.hpp b/Pods/Realm/include/list.hpp deleted file mode 100644 index 9e38a686..00000000 --- a/Pods/Realm/include/list.hpp +++ /dev/null @@ -1,116 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_LIST_HPP -#define REALM_LIST_HPP - -#include "collection_notifications.hpp" - -#include -#include - -#include -#include - -namespace realm { -using RowExpr = BasicRowExpr
; - -class ObjectSchema; -class Query; -class Realm; -class Results; -struct SortOrder; - -class List { -public: - List() noexcept; - List(std::shared_ptr r, LinkViewRef l) noexcept; - ~List(); - - const std::shared_ptr& get_realm() const { return m_realm; } - Query get_query() const; - size_t get_origin_row_index() const; - - bool is_valid() const; - void verify_attached() const; - void verify_in_transaction() const; - - size_t size() const; - RowExpr get(size_t row_ndx) const; - size_t get_unchecked(size_t row_ndx) const noexcept; - size_t find(ConstRow const& row) const; - - void add(size_t target_row_ndx); - void insert(size_t list_ndx, size_t target_row_ndx); - void move(size_t source_ndx, size_t dest_ndx); - void remove(size_t list_ndx); - void remove_all(); - void set(size_t row_ndx, size_t target_row_ndx); - void swap(size_t ndx1, size_t ndx2); - - void delete_all(); - - Results sort(SortOrder order); - Results filter(Query q); - - bool operator==(List const& rgt) const noexcept; - - NotificationToken add_notification_callback(CollectionChangeCallback cb); - - // These are implemented in object_accessor.hpp - template - void add(ContextType ctx, ValueType value); - - template - void insert(ContextType ctx, ValueType value, size_t list_ndx); - - template - void set(ContextType ctx, ValueType value, size_t list_ndx); - - // The List object has been invalidated (due to the Realm being invalidated, - // or the containing object being deleted) - // All non-noexcept functions can throw this - struct InvalidatedException {}; - - // The input index parameter was out of bounds - struct OutOfBoundsIndexException { - size_t requested; - size_t valid_count; - }; - - // The input Row object is not attached - struct DetatchedAccessorException { }; - -private: - std::shared_ptr m_realm; - LinkViewRef m_link_view; - std::shared_ptr<_impl::CollectionNotifier> m_notifier; - - void verify_valid_row(size_t row_ndx, bool insertion = false) const; - - friend struct std::hash; -}; -} // namespace realm - -namespace std { -template<> struct hash { - size_t operator()(realm::List const&) const; -}; -} - -#endif /* REALM_LIST_HPP */ diff --git a/Pods/Realm/include/object_schema.hpp b/Pods/Realm/include/object_schema.hpp deleted file mode 100644 index 71d56d69..00000000 --- a/Pods/Realm/include/object_schema.hpp +++ /dev/null @@ -1,60 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_OBJECT_SCHEMA_HPP -#define REALM_OBJECT_SCHEMA_HPP - -#include - -#include -#include - -namespace realm { -class Group; -struct Property; - -class ObjectSchema { -public: - ObjectSchema(); - ObjectSchema(std::string name, std::string primary_key, std::initializer_list persisted_properties); - ~ObjectSchema(); - - // create object schema from existing table - // if no table is provided it is looked up in the group - ObjectSchema(const Group *group, const std::string &name); - - std::string name; - std::vector persisted_properties; - std::vector computed_properties; - std::string primary_key; - - Property *property_for_name(StringData name); - const Property *property_for_name(StringData name) const; - Property *primary_key_property() { - return property_for_name(primary_key); - } - const Property *primary_key_property() const { - return property_for_name(primary_key); - } - -private: - void set_primary_key_property(); -}; -} - -#endif /* defined(REALM_OBJECT_SCHEMA_HPP) */ diff --git a/Pods/Realm/include/object_store.hpp b/Pods/Realm/include/object_store.hpp deleted file mode 100644 index bf5e20ce..00000000 --- a/Pods/Realm/include/object_store.hpp +++ /dev/null @@ -1,319 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_OBJECT_STORE_HPP -#define REALM_OBJECT_STORE_HPP - -#include "object_schema.hpp" -#include "property.hpp" - -#include - -#include -#include - -namespace realm { - class ObjectSchemaValidationException; - class Schema; - - class ObjectStore { - public: - // Schema version used for uninitialized Realms - static const uint64_t NotVersioned; - - // get the last set schema version - static uint64_t get_schema_version(const Group *group); - - // checks if the schema in the group is at the given version - static bool is_schema_at_version(const Group *group, uint64_t version); - - // verify that schema from a group and a target schema are compatible - // updates the column mapping on all ObjectSchema properties of the target schema - // throws if the schema is invalid or does not match - static void verify_schema(Schema const& actual_schema, Schema& target_schema, bool allow_missing_tables = false); - - // determines if a realm with the given old schema needs non-migration - // changes to make it compatible with the given target schema - static bool needs_update(Schema const& old_schema, Schema const& schema); - - // updates a Realm from old_schema to the given target schema, creating and updating tables as needed - // passed in target schema is updated with the correct column mapping - // optionally runs migration function if schema is out of date - // NOTE: must be performed within a write transaction - typedef std::function MigrationFunction; - static void update_realm_with_schema(Group *group, Schema const& old_schema, uint64_t version, - Schema &schema, MigrationFunction migration); - - // get a table for an object type - static realm::TableRef table_for_object_type(Group *group, StringData object_type); - static realm::ConstTableRef table_for_object_type(const Group *group, StringData object_type); - - // get existing Schema from a group - static Schema schema_from_group(const Group *group); - - // deletes the table for the given type - static void delete_data_for_object(Group *group, StringData object_type); - - // renames the object_type's column of the old_name to the new name - static void rename_property(Group *group, Schema& passed_schema, StringData object_type, StringData old_name, StringData new_name); - - // indicates if this group contains any objects - static bool is_empty(const Group *group); - - static std::string table_name_for_object_type(StringData class_name); - static StringData object_type_for_table_name(StringData table_name); - - private: - // set a new schema version - static void set_schema_version(Group *group, uint64_t version); - - // check if the realm already has all metadata tables - static bool has_metadata_tables(const Group *group); - - // create any metadata tables that don't already exist - // must be in write transaction to set - // returns true if it actually did anything - static void create_metadata_tables(Group *group); - - // set references to tables on targetSchema and create/update any missing or out-of-date tables - // if update existing is true, updates existing tables, otherwise only adds and initializes new tables - // returns pairs of object names & properties that should be deleted after the migration process - static std::vector> create_tables(realm::Group *group, Schema &target_schema, bool update_existing); - - // verify to see if there are any renamed properties that don't align with the target schema - static void verify_missing_renamed_properties(Schema const& actual_schema, Schema& target_schema); - - // remove properties marked for deletion by create_tables - static void remove_properties(Group *group, Schema &target_schema, std::vector> to_delete); - - // verify a target schema against an expected schema, setting the table_column property on each schema object - // updates the column mapping on the target_schema - // returns array of validation errors - static std::vector verify_object_schema(ObjectSchema const& expected, - ObjectSchema &target_schema); - - // get primary key property name for object type - static StringData get_primary_key_for_object(const Group *group, StringData object_type); - - // sets primary key property for object type - // must be in write transaction to set - static void set_primary_key_for_object(Group *group, StringData object_type, StringData primary_key); - - static TableRef table_for_object_type_create_if_needed(Group *group, StringData object_type, bool &created); - - // returns if any indexes were changed - static bool update_indexes(Group *group, Schema &schema); - - // validates that all primary key properties have unique values - static void validate_primary_column_uniqueness(const Group *group, Schema const& schema); - - friend ObjectSchema; - }; - - // Base exception - class ObjectStoreException : public std::exception { - public: - ObjectStoreException() = default; - ObjectStoreException(const std::string &what) : m_what(what) {} - const char* what() const noexcept override { return m_what.c_str(); } - protected: - std::string m_what; - }; - - // Migration exceptions - class MigrationException : public ObjectStoreException {}; - - class PropertyRenameMissingObjectTypeException : public MigrationException { - public: - PropertyRenameMissingObjectTypeException(std::string object_type); - std::string object_type() const { return m_object_type; } - private: - std::string m_object_type; - }; - - class PropertyRenameMissingOldObjectTypeException : public PropertyRenameMissingObjectTypeException { - public: - PropertyRenameMissingOldObjectTypeException(std::string object_type); - }; - - class PropertyRenameMissingNewObjectTypeException : public PropertyRenameMissingObjectTypeException { - public: - PropertyRenameMissingNewObjectTypeException(std::string object_type); - }; - - class PropertyRenameException : public MigrationException { - public: - PropertyRenameException(std::string old_property_name, std::string new_property_name); - std::string old_property_name() const { return m_old_property_name; } - std::string new_property_name() const { return m_new_property_name; } - private: - std::string m_old_property_name, m_new_property_name; - }; - - class PropertyRenameMissingOldPropertyException : public PropertyRenameException { - public: - PropertyRenameMissingOldPropertyException(std::string old_property_name, std::string new_property_name); - }; - - class PropertyRenameMissingNewPropertyException : public MigrationException { - public: - std::string new_property_name() const { return m_new_property_name; } - PropertyRenameMissingNewPropertyException(std::string new_property_name); - private: - std::string m_new_property_name; - }; - - class PropertyRenameOldStillExistsException : public PropertyRenameException { - public: - PropertyRenameOldStillExistsException(std::string old_property_name, std::string new_property_name); - }; - - class PropertyRenameTypeMismatchException : public MigrationException { - public: - PropertyRenameTypeMismatchException(Property const& old_property, Property const& new_property); - Property const& old_property() const { return m_old_property; } - Property const& new_property() const { return m_new_property; } - private: - Property m_old_property, m_new_property; - }; - - class InvalidSchemaVersionException : public MigrationException { - public: - InvalidSchemaVersionException(uint64_t old_version, uint64_t new_version); - uint64_t old_version() const { return m_old_version; } - uint64_t new_version() const { return m_new_version; } - private: - uint64_t m_old_version, m_new_version; - }; - - class DuplicatePrimaryKeyValueException : public MigrationException { - public: - DuplicatePrimaryKeyValueException(std::string const& object_type, Property const& property); - DuplicatePrimaryKeyValueException(std::string const& object_type, Property const& property, const std::string message); - - std::string object_type() const { return m_object_type; } - Property const& property() const { return m_property; } - private: - std::string m_object_type; - Property m_property; - }; - - // Schema validation exceptions - class SchemaValidationException : public ObjectStoreException { - public: - SchemaValidationException(std::vector const& errors); - std::vector const& validation_errors() const { return m_validation_errors; } - private: - std::vector m_validation_errors; - }; - - class SchemaMismatchException : public ObjectStoreException { - public: - SchemaMismatchException(std::vector const& errors); - std::vector const& validation_errors() const { return m_validation_errors; } - private: - std::vector m_validation_errors; - }; - - class ObjectSchemaValidationException : public ObjectStoreException { - public: - ObjectSchemaValidationException(std::string const& object_type) : m_object_type(object_type) {} - ObjectSchemaValidationException(std::string const& object_type, std::string const& message) : - m_object_type(object_type) { m_what = message; } - std::string object_type() const { return m_object_type; } - protected: - std::string m_object_type; - }; - - class ObjectSchemaPropertyException : public ObjectSchemaValidationException { - public: - ObjectSchemaPropertyException(std::string const& object_type, Property const& property) : - ObjectSchemaValidationException(object_type), m_property(property) {} - Property const& property() const { return m_property; } - private: - Property m_property; - }; - - class PropertyTypeNotIndexableException : public ObjectSchemaPropertyException { - public: - PropertyTypeNotIndexableException(std::string const& object_type, Property const& property); - }; - - class ExtraPropertyException : public ObjectSchemaPropertyException { - public: - ExtraPropertyException(std::string const& object_type, Property const& property); - }; - - class MissingPropertyException : public ObjectSchemaPropertyException { - public: - MissingPropertyException(std::string const& object_type, Property const& property); - }; - - class InvalidNullabilityException : public ObjectSchemaPropertyException { - public: - InvalidNullabilityException(std::string const& object_type, Property const& property); - }; - - class MissingObjectTypeException : public ObjectSchemaPropertyException { - public: - MissingObjectTypeException(std::string const& object_type, Property const& property); - }; - - class DuplicatePrimaryKeysException : public ObjectSchemaValidationException { - public: - DuplicatePrimaryKeysException(std::string const& object_type); - }; - - class MismatchedPropertiesException : public ObjectSchemaValidationException { - public: - MismatchedPropertiesException(std::string const& object_type, Property const& old_property, Property const& new_property); - Property const& old_property() const { return m_old_property; } - Property const& new_property() const { return m_new_property; } - private: - Property m_old_property, m_new_property; - }; - - class ChangedPrimaryKeyException : public ObjectSchemaValidationException { - public: - ChangedPrimaryKeyException(std::string const& object_type, std::string const& old_primary, std::string const& new_primary); - std::string old_primary() const { return m_old_primary; } - std::string new_primary() const { return m_new_primary; } - private: - std::string m_old_primary, m_new_primary; - }; - - class InvalidPrimaryKeyException : public ObjectSchemaValidationException { - public: - InvalidPrimaryKeyException(std::string const& object_type, std::string const& primary_key); - std::string primary_key() const { return m_primary_key; } - private: - std::string m_primary_key; - }; - - class InvalidLinkingObjectsPropertyException : public ObjectSchemaPropertyException { - public: - enum class Type { - OriginPropertyDoesNotExist, - OriginPropertyIsNotALink, - OriginPropertyInvalidLinkTarget, - }; - InvalidLinkingObjectsPropertyException(Type error_type, std::string const& object_type, Property const& property); - }; -} - -#endif /* defined(REALM_OBJECT_STORE_HPP) */ diff --git a/Pods/Realm/include/property.hpp b/Pods/Realm/include/property.hpp deleted file mode 100644 index 12c7fc59..00000000 --- a/Pods/Realm/include/property.hpp +++ /dev/null @@ -1,105 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_PROPERTY_HPP -#define REALM_PROPERTY_HPP - -#include - -namespace realm { - enum class PropertyType { - Int = 0, - Bool = 1, - Float = 9, - Double = 10, - String = 2, - Data = 4, - Any = 6, // Deprecated - Date = 8, - Object = 12, - Array = 13, - LinkingObjects = 14, - }; - - static inline const char *string_for_property_type(PropertyType type) { - switch (type) { - case PropertyType::String: - return "string"; - case PropertyType::Int: - return "int"; - case PropertyType::Bool: - return "bool"; - case PropertyType::Date: - return "date"; - case PropertyType::Data: - return "data"; - case PropertyType::Double: - return "double"; - case PropertyType::Float: - return "float"; - case PropertyType::Any: - return "any"; - case PropertyType::Object: - return "object"; - case PropertyType::Array: - return "array"; - case PropertyType::LinkingObjects: - return "linking objects"; - } - } - - struct Property { - std::string name; - PropertyType type; - std::string object_type; - std::string link_origin_property_name; - bool is_primary = false; - bool is_indexed = false; - bool is_nullable = false; - - size_t table_column = -1; - bool requires_index() const { return is_primary || is_indexed; } - bool is_indexable() const { - return type == PropertyType::Int - || type == PropertyType::Bool - || type == PropertyType::String - || type == PropertyType::Date; - } - std::string type_string() const { - switch(type) { - case PropertyType::String: - case PropertyType::Int: - case PropertyType::Bool: - case PropertyType::Date: - case PropertyType::Data: - case PropertyType::Double: - case PropertyType::Float: - case PropertyType::Any: - return string_for_property_type(type); - case PropertyType::Object: - return "<" + object_type + ">"; - case PropertyType::Array: - return "array<" + object_type + ">"; - case PropertyType::LinkingObjects: - return "linking objects<" + object_type + ">"; - } - } - }; -} - -#endif /* REALM_PROPERTY_HPP */ diff --git a/Pods/Realm/include/results.hpp b/Pods/Realm/include/results.hpp deleted file mode 100644 index 6d8f9d26..00000000 --- a/Pods/Realm/include/results.hpp +++ /dev/null @@ -1,209 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_RESULTS_HPP -#define REALM_RESULTS_HPP - -#include "collection_notifications.hpp" -#include "shared_realm.hpp" - -#include -#include - -namespace realm { -template class BasicRowExpr; -using RowExpr = BasicRowExpr
; -class Mixed; - -namespace _impl { - class ResultsNotifier; -} - -struct SortOrder { - std::vector column_indices; - std::vector ascending; - - explicit operator bool() const { return !column_indices.empty(); } -}; - -class Results { -public: - // Results can be either be backed by nothing, a thin wrapper around a table, - // or a wrapper around a query and a sort order which creates and updates - // the tableview as needed - Results() = default; - Results(SharedRealm r, SortOrder s, TableView tv); - Results(SharedRealm r, Table& table); - Results(SharedRealm r, Query q, SortOrder s = {}); - Results(SharedRealm r, LinkViewRef lv, util::Optional q = {}, SortOrder s = {}); - ~Results(); - - // Results is copyable and moveable - Results(Results const&) = default; - Results(Results&&) = default; - Results& operator=(Results const&) = default; - Results& operator=(Results&&) = default; - - // Get a query which will match the same rows as is contained in this Results - // Returned query will not be valid if the current mode is Empty - Query get_query() const; - - // Get the currently applied sort order for this Results - SortOrder const& get_sort() const noexcept { return m_sort; } - - // Get a tableview containing the same rows as this Results - TableView get_tableview(); - - // Get the object type which will be returned by get() - StringData get_object_type() const noexcept; - - // Get the LinkView this Results is derived from, if any - LinkViewRef get_linkview() const { return m_link_view; } - - // Get the size of this results - // Can be either O(1) or O(N) depending on the state of things - size_t size(); - - // Get the row accessor for the given index - // Throws OutOfBoundsIndexException if index >= size() - RowExpr get(size_t index); - - // Get a row accessor for the first/last row, or none if the results are empty - // More efficient than calling size()+get() - util::Optional first(); - util::Optional last(); - - // Get the first index of the given row in this results, or not_found - // Throws DetachedAccessorException if row is not attached - // Throws IncorrectTableException if row belongs to a different table - size_t index_of(size_t row_ndx); - size_t index_of(Row const& row); - - // Delete all of the rows in this Results from the Realm - // size() will always be zero afterwards - // Throws InvalidTransactionException if not in a write transaction - void clear(); - - // Create a new Results by further filtering or sorting this Results - Results filter(Query&& q) const; - Results sort(SortOrder&& sort) const; - - // Get the min/max/average/sum of the given column - // All but sum() returns none when there are zero matching rows - // sum() returns 0, except for when it returns none - // Throws UnsupportedColumnTypeException for sum/average on datetime or non-numeric column - // Throws OutOfBoundsIndexException for an out-of-bounds column - util::Optional max(size_t column); - util::Optional min(size_t column); - util::Optional average(size_t column); - util::Optional sum(size_t column); - - enum class Mode { - Empty, // Backed by nothing (for missing tables) - Table, // Backed directly by a Table - Query, // Backed by a query that has not yet been turned into a TableView - LinkView, // Backed directly by a LinkView - TableView // Backed by a TableView created from a Query - }; - // Get the currrent mode of the Results - // Ideally this would not be public but it's needed for some KVO stuff - Mode get_mode() const { return m_mode; } - - // Is this Results associated with a Realm that has not been invalidated? - bool is_valid() const; - - // The Results object has been invalidated (due to the Realm being invalidated) - // All non-noexcept functions can throw this - struct InvalidatedException {}; - - // The input index parameter was out of bounds - struct OutOfBoundsIndexException { - size_t requested; - size_t valid_count; - }; - - // The input Row object is not attached - struct DetatchedAccessorException { }; - - // The input Row object belongs to a different table - struct IncorrectTableException { - StringData expected; - StringData actual; - }; - - // The requested aggregate operation is not supported for the column type - struct UnsupportedColumnTypeException { - size_t column_index; - StringData column_name; - DataType column_type; - - UnsupportedColumnTypeException(size_t column, const Table* table); - }; - - SharedRealm get_realm() const { return m_realm; } - - // Create an async query from this Results - // The query will be run on a background thread and delivered to the callback, - // and then rerun after each commit (if needed) and redelivered if it changed - NotificationToken async(std::function target); - NotificationToken add_notification_callback(CollectionChangeCallback cb); - - bool wants_background_updates() const { return m_wants_background_updates; } - - // Returns whether the rows are guaranteed to be in table order. - bool is_in_table_order() const; - - // Helper type to let ResultsNotifier update the tableview without giving access - // to any other privates or letting anyone else do so - class Internal { - friend class _impl::ResultsNotifier; - static void set_table_view(Results& results, TableView&& tv); - }; - -private: - SharedRealm m_realm; - Query m_query; - TableView m_table_view; - LinkViewRef m_link_view; - Table* m_table = nullptr; - SortOrder m_sort; - - std::shared_ptr<_impl::ResultsNotifier> m_notifier; - - Mode m_mode = Mode::Empty; - bool m_has_used_table_view = false; - bool m_wants_background_updates = true; - - void update_tableview(); - bool update_linkview(); - - void validate_read() const; - void validate_write() const; - - void prepare_async(); - - template - util::Optional aggregate(size_t column, bool return_none_for_empty, - Int agg_int, Float agg_float, - Double agg_double, DateTime agg_datetime); - - void set_table_view(TableView&& tv); -}; -} - -#endif /* REALM_RESULTS_HPP */ diff --git a/Pods/Realm/include/schema.hpp b/Pods/Realm/include/schema.hpp deleted file mode 100644 index 30ee153b..00000000 --- a/Pods/Realm/include/schema.hpp +++ /dev/null @@ -1,57 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_SCHEMA_HPP -#define REALM_SCHEMA_HPP - -#include -#include - -namespace realm { -class ObjectSchema; - -class Schema : private std::vector { -private: - using base = std::vector; -public: - // Create a schema from a vector of ObjectSchema - Schema(base types); - Schema(std::initializer_list types); - - // find an ObjectSchema by name - iterator find(std::string const& name); - const_iterator find(std::string const& name) const; - - // find an ObjectSchema with the same name as the passed in one - iterator find(ObjectSchema const& object) noexcept; - const_iterator find(ObjectSchema const& object) const noexcept; - - // Verify that this schema is internally consistent (i.e. all properties are - // valid, links link to types that actually exist, etc.) - void validate() const; - - using base::iterator; - using base::const_iterator; - using base::begin; - using base::end; - using base::empty; - using base::size; -}; -} - -#endif /* defined(REALM_SCHEMA_HPP) */ diff --git a/Pods/Realm/include/shared_realm.hpp b/Pods/Realm/include/shared_realm.hpp deleted file mode 100644 index ea3d94a0..00000000 --- a/Pods/Realm/include/shared_realm.hpp +++ /dev/null @@ -1,238 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_REALM_HPP -#define REALM_REALM_HPP - -#include -#include -#include -#include - -namespace realm { - class BinaryData; - class BindingContext; - class Group; - class Realm; - class Replication; - class Schema; - class SharedGroup; - class StringData; - typedef std::shared_ptr SharedRealm; - typedef std::weak_ptr WeakRealm; - - namespace _impl { - class CollectionNotifier; - class ListNotifier; - class RealmCoordinator; - class ResultsNotifier; - } - - class Realm : public std::enable_shared_from_this { - public: - typedef std::function MigrationFunction; - - struct Config { - std::string path; - // User-supplied encryption key. Must be either empty or 64 bytes. - std::vector encryption_key; - - // Optional schema for the file. If nullptr, the existing schema - // from the file opened will be used. If present, the file will be - // migrated to the schema if needed. - std::unique_ptr schema; - uint64_t schema_version; - - MigrationFunction migration_function; - bool delete_realm_if_migration_needed = false; - - bool read_only = false; - bool in_memory = false; - - // The following are intended for internal/testing purposes and - // should not be publicly exposed in binding APIs - - // If false, always return a new Realm instance, and don't return - // that Realm instance for other requests for a cached Realm. Useful - // for dynamic Realms and for tests that need multiple instances on - // one thread - bool cache = true; - // Throw an exception rather than automatically upgrading the file - // format. Used by the browser to warn the user that it'll modify - // the file. - bool disable_format_upgrade = false; - // Disable the background worker thread for producing change - // notifications. Useful for tests for those notifications so that - // everything can be done deterministically on one thread, and - // speeds up tests that don't need notifications. - bool automatic_change_notifications = true; - - Config(); - Config(Config&&); - Config(const Config& c); - ~Config(); - - Config& operator=(Config const&); - Config& operator=(Config&&) = default; - }; - - // Get a cached Realm or create a new one if no cached copies exists - // Caching is done by path - mismatches for in_memory and read_only - // Config properties will raise an exception - // If schema/schema_version is specified, update_schema is called - // automatically on the realm and a migration is performed. If not - // specified, the schema version and schema are dynamically read from - // the the existing Realm. - static SharedRealm get_shared_realm(Config config); - - // Updates a Realm to a given target schema/version creating tables and - // updating indexes as necessary. Uses the existing migration function - // on the Config, and the resulting Schema and version with updated - // column mappings are set on the realms config upon success. - void update_schema(std::unique_ptr schema, uint64_t version); - - static uint64_t get_schema_version(Config const& config); - - const Config &config() const { return m_config; } - - void begin_transaction(); - void commit_transaction(); - void cancel_transaction(); - bool is_in_transaction() const noexcept; - bool is_in_read_transaction() const { return !!m_group; } - - bool refresh(); - void set_auto_refresh(bool auto_refresh) { m_auto_refresh = auto_refresh; } - bool auto_refresh() const { return m_auto_refresh; } - void notify(); - - void invalidate(); - bool compact(); - void write_copy(StringData path, BinaryData encryption_key); - - std::thread::id thread_id() const { return m_thread_id; } - void verify_thread() const; - void verify_in_write() const; - - bool can_deliver_notifications() const noexcept; - - // Close this Realm and remove it from the cache. Continuing to use a - // Realm after closing it will produce undefined behavior. - void close(); - - ~Realm(); - - void init(std::shared_ptr<_impl::RealmCoordinator> coordinator); - Realm(Config config); - - // Expose some internal functionality to other parts of the ObjectStore - // without making it public to everyone - class Internal { - friend class _impl::CollectionNotifier; - friend class _impl::ListNotifier; - friend class _impl::RealmCoordinator; - friend class _impl::ResultsNotifier; - - // ResultsNotifier and ListNotifier need access to the SharedGroup - // to be able to call the handover functions, which are not very wrappable - static SharedGroup& get_shared_group(Realm& realm) { return *realm.m_shared_group; } - - // CollectionNotifier needs to be able to access the owning - // coordinator to wake up the worker thread when a callback is - // added, and coordinators need to be able to get themselves from a Realm - static _impl::RealmCoordinator& get_coordinator(Realm& realm) { return *realm.m_coordinator; } - }; - - static void open_with_config(const Config& config, - std::unique_ptr& history, - std::unique_ptr& shared_group, - std::unique_ptr& read_only_group); - - private: - Config m_config; - std::thread::id m_thread_id = std::this_thread::get_id(); - bool m_auto_refresh = true; - - std::unique_ptr m_history; - std::unique_ptr m_shared_group; - std::unique_ptr m_read_only_group; - - Group *m_group = nullptr; - - std::shared_ptr<_impl::RealmCoordinator> m_coordinator; - - public: - std::unique_ptr m_binding_context; - - // FIXME private - Group *read_group(); - }; - - class RealmFileException : public std::runtime_error { - public: - enum class Kind { - /** Thrown for any I/O related exception scenarios when a realm is opened. */ - AccessError, - /** Thrown if the user does not have permission to open or create - the specified file in the specified access mode when the realm is opened. */ - PermissionDenied, - /** Thrown if create_Always was specified and the file did already exist when the realm is opened. */ - Exists, - /** Thrown if no_create was specified and the file was not found when the realm is opened. */ - NotFound, - /** Thrown if the database file is currently open in another - process which cannot share with the current process due to an - architecture mismatch. */ - IncompatibleLockFile, - /** Thrown if the file needs to be upgraded to a new format, but upgrades have been explicitly disabled. */ - FormatUpgradeRequired, - }; - RealmFileException(Kind kind, std::string path, std::string message, std::string underlying) : - std::runtime_error(std::move(message)), m_kind(kind), m_path(std::move(path)), m_underlying(std::move(underlying)) {} - Kind kind() const { return m_kind; } - const std::string& path() const { return m_path; } - const std::string& underlying() const { return m_underlying; } - - private: - Kind m_kind; - std::string m_path; - std::string m_underlying; - }; - - class MismatchedConfigException : public std::runtime_error { - public: - MismatchedConfigException(std::string message) : std::runtime_error(message) {} - }; - - class InvalidTransactionException : public std::runtime_error { - public: - InvalidTransactionException(std::string message) : std::runtime_error(message) {} - }; - - class IncorrectThreadException : public std::runtime_error { - public: - IncorrectThreadException() : std::runtime_error("Realm accessed from incorrect thread.") {} - }; - - class UninitializedRealmException : public std::runtime_error { - public: - UninitializedRealmException(std::string message) : std::runtime_error(message) {} - }; -} - -#endif /* defined(REALM_REALM_HPP) */ diff --git a/Pods/Realm/include/util/atomic_shared_ptr.hpp b/Pods/Realm/include/util/atomic_shared_ptr.hpp deleted file mode 100644 index 0ec541e7..00000000 --- a/Pods/Realm/include/util/atomic_shared_ptr.hpp +++ /dev/null @@ -1,137 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -#ifndef REALM_ATOMIC_SHARED_PTR_HPP -#define REALM_ATOMIC_SHARED_PTR_HPP - -#include -#include -#include - -namespace realm { -namespace _impl { - -// Check if std::atomic_load has an overload taking a std::shared_ptr, and set -// HasAtomicPtrOps to either true_type or false_type - -template struct make_void { typedef void type; }; -template using void_t = typename make_void::type; - -template> -struct HasAtomicPtrOps : std::false_type { }; - -template -struct HasAtomicPtrOps()))>> : std::true_type { }; -} // namespace _impl - -namespace util { -// A wrapper for std::shared_ptr that enables sharing a shared_ptr instance -// (and not just a thing *pointed to* by a shared_ptr) between threads. Is -// lock-free iff the underlying shared_ptr implementation supports atomic -// operations. Currently the only implemented operation other than copy/move -// construction/assignment is exchange(). -template>::value> -class AtomicSharedPtr; - -template -class AtomicSharedPtr { -public: - AtomicSharedPtr() = default; - AtomicSharedPtr(std::shared_ptr ptr) : m_ptr(std::move(ptr)) { } - - AtomicSharedPtr(AtomicSharedPtr const& ptr) : m_ptr(std::atomic_load(&ptr.m_ptr)) { } - AtomicSharedPtr(AtomicSharedPtr&& ptr) : m_ptr(std::atomic_exchange(&ptr.m_ptr, {})) { } - - AtomicSharedPtr& operator=(AtomicSharedPtr const& ptr) - { - if (&ptr != this) { - std::atomic_store(&m_ptr, std::atomic_load(&ptr.m_ptr)); - } - return *this; - } - - AtomicSharedPtr& operator=(AtomicSharedPtr&& ptr) - { - std::atomic_store(&m_ptr, std::atomic_exchange(&ptr.m_ptr, {})); - return *this; - } - - std::shared_ptr exchange(std::shared_ptr ptr) - { - return std::atomic_exchange(&m_ptr, std::move(ptr)); - } - -private: - std::shared_ptr m_ptr = nullptr; -}; - -template -class AtomicSharedPtr { -public: - AtomicSharedPtr() = default; - AtomicSharedPtr(std::shared_ptr ptr) : m_ptr(std::move(ptr)) { } - - AtomicSharedPtr(AtomicSharedPtr const& ptr) - { - std::lock_guard lock(ptr.m_mutex); - m_ptr = ptr.m_ptr; - } - AtomicSharedPtr(AtomicSharedPtr&& ptr) - { - std::lock_guard lock(ptr.m_mutex); - m_ptr = std::move(ptr.m_ptr); - } - - AtomicSharedPtr& operator=(AtomicSharedPtr const& ptr) - { - if (&ptr != this) { - // std::lock() ensures that these are locked in a consistent order - // to avoid deadlock - std::lock(m_mutex, ptr.m_mutex); - m_ptr = ptr.m_ptr; - m_mutex.unlock(); - ptr.m_mutex.unlock(); - } - return *this; - } - - AtomicSharedPtr& operator=(AtomicSharedPtr&& ptr) - { - std::lock(m_mutex, ptr.m_mutex); - m_ptr = std::move(ptr.m_ptr); - m_mutex.unlock(); - ptr.m_mutex.unlock(); - return *this; - } - - std::shared_ptr exchange(std::shared_ptr ptr) - { - std::lock_guard lock(m_mutex); - m_ptr.swap(ptr); - return ptr; - } - -private: - std::mutex m_mutex; - std::shared_ptr m_ptr = nullptr; -}; - -} -} - -#endif // REALM_ASYNC_QUERY_HPP diff --git a/Pods/RealmSwift/LICENSE b/Pods/RealmSwift/LICENSE deleted file mode 100644 index a1943466..00000000 --- a/Pods/RealmSwift/LICENSE +++ /dev/null @@ -1,269 +0,0 @@ -TABLE OF CONTENTS - -1. Apache License version 2.0 -2. Realm Components -3. Export Compliance - -------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -REALM COMPONENTS - -This software contains components with separate copyright and license terms. -Your use of these components is subject to the terms and conditions of the -following licenses. - -For the Realm Core component - - Realm Core Binary License - - Copyright (c) 2011-2014 Realm Inc All rights reserved - - Redistribution and use in binary form, with or without modification, is - permitted provided that the following conditions are met: - - 1. You agree not to attempt to decompile, disassemble, reverse engineer or - otherwise discover the source code from which the binary code was derived. - You may, however, access and obtain a separate license for most of the - source code from which this Software was created, at - http://realm.io/pricing/. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -EXPORT COMPLIANCE - -You understand that the Software may contain cryptographic functions that may be -subject to export restrictions, and you represent and warrant that you are not -located in a country that is subject to United States export restriction or embargo, -including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, and that you -are not on the Department of Commerce list of Denied Persons, Unverified Parties, -or affiliated with a Restricted Entity. - -You agree to comply with all export, re-export and import restrictions and -regulations of the Department of Commerce or other agency or authority of the -United States or other applicable countries. You also agree not to transfer, or -authorize the transfer of, directly or indirectly, the Software to any prohibited -country, including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, -or to any person or organization on or affiliated with the Department of -Commerce lists of Denied Persons, Unverified Parties or Restricted Entities, or -otherwise in violation of any such restrictions or regulations. diff --git a/Pods/RealmSwift/README.md b/Pods/RealmSwift/README.md deleted file mode 100644 index eab2adf6..00000000 --- a/Pods/RealmSwift/README.md +++ /dev/null @@ -1,68 +0,0 @@ -![Realm](https://github.com/realm/realm-cocoa/raw/master/logo.png) - -Realm is a mobile database that runs directly inside phones, tablets or wearables. -This repository holds the source code for the iOS, OS X, watchOS & tvOS versions of Realm Swift & Realm Objective-C. - -## Features - -* **Mobile-first:** Realm is the first database built from the ground up to run directly inside phones, tablets and wearables. -* **Simple:** Data is directly [exposed as objects](https://realm.io/docs/objc/latest/#models) and [queryable by code](https://realm.io/docs/objc/latest/#queries), removing the need for ORM's riddled with performance & maintenance issues. Most of our users pick it up intuitively, getting simple apps up & running in minutes. -* **Modern:** Realm supports relationships, generics, vectorization and even Swift. -* **Fast:** Realm is faster than even raw SQLite on common operations, while maintaining an extremely rich feature set. - -## Getting Started - -Please see the detailed instructions in our docs to add [Realm Objective-C](https://realm.io/docs/objc/latest/#installation) _or_ [Realm Swift](https://realm.io/docs/swift/latest/#installation) to your Xcode project. - -## Documentation - -### Realm Objective-C - -The documentation can be found at [realm.io/docs/objc/latest](https://realm.io/docs/objc/latest). -The API reference is located at [realm.io/docs/objc/latest/api](https://realm.io/docs/objc/latest/api). - -### Realm Swift - -The documentation can be found at [realm.io/docs/swift/latest](https://realm.io/docs/swift/latest). -The API reference is located at [realm.io/docs/swift/latest/api](https://realm.io/docs/swift/latest/api). - -## Getting Help - -- **Need help with your code?**: Look for previous questions on the [#realm tag](https://stackoverflow.com/questions/tagged/realm?sort=newest) — or [ask a new question](https://stackoverflow.com/questions/ask?tags=realm). We actively monitor & answer questions on SO! -- **Have a bug to report?** [Open an issue](https://github.com/realm/realm-cocoa/issues/new). If possible, include the version of Realm, a full log, the Realm file, and a project that shows the issue. -- **Have a feature request?** [Open an issue](https://github.com/realm/realm-cocoa/issues/new). Tell us what the feature should do, and why you want the feature. -- Sign up for our [**Community Newsletter**](http://eepurl.com/VEKCn) to get regular tips, learn about other use-cases and get alerted of blogposts and tutorials about Realm. - -## Building Realm - -In case you don't want to use the precompiled version, you can build Realm yourself from source. - -Prerequisites: - -* Building Realm requires Xcode 7.3. -* Building Realm documentation requires [jazzy](https://github.com/realm/jazzy) - -Once you have all the necessary prerequisites, building Realm.framework just takes a single command: `sh build.sh build`. You'll need an internet connection the first time you build Realm to download the core binary. - -Run `sh build.sh help` to see all the actions you can perform (build ios/osx, generate docs, test, etc.). - -## Contributing - -See [CONTRIBUTING.md](CONTRIBUTING.md) for more details! - -## License - -Realm Objective-C & Realm Swift are published under the Apache 2.0 license. -The underlying core is available under the [Realm Core Binary License](https://github.com/realm/realm-cocoa/blob/master/LICENSE#L210-L243) while we [work to open-source it under the Apache 2.0 license](https://realm.io/docs/objc/latest/#faq). - -**This product is not being made available to any person located in Cuba, Iran, -North Korea, Sudan, Syria or the Crimea region, or to any other person that is -not eligible to receive the product under U.S. law.** - -## Feedback - -**_If you use Realm and are happy with it, all we ask is that you please consider sending out a tweet mentioning [@realm](https://twitter.com/realm) or email [help@realm.io](mailto:help@realm.io) to share your thoughts!_** - -**_And if you don't like it, please let us know what you would like improved, so we can fix it!_** - -![analytics](https://ga-beacon.appspot.com/UA-50247013-2/realm-cocoa/README?pixel) diff --git a/Pods/RealmSwift/RealmSwift/Aliases.swift b/Pods/RealmSwift/RealmSwift/Aliases.swift deleted file mode 100644 index e78487d6..00000000 --- a/Pods/RealmSwift/RealmSwift/Aliases.swift +++ /dev/null @@ -1,53 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -// These types don't change when wrapping in Swift -// so we just typealias them to remove the 'RLM' prefix - -// MARK: Aliases - -/** - `PropertyType` is an enum describing all property types supported in Realm models. - - For more information, see [Realm Models](https://realm.io/docs/swift/latest/#models). - - ### Primitive types - - * `Int` - * `Bool` - * `Float` - * `Double` - - ### Object types - - * `String` - * `Data` - * `Date` - - ### Relationships: List (`Array`) and `Object` types - - * `Object` - * `Array` -*/ -public typealias PropertyType = RLMPropertyType - -/// An opaque token which is returned from methods which subscribe to changes to a Realm. -public typealias NotificationToken = RLMNotificationToken diff --git a/Pods/RealmSwift/RealmSwift/Error.swift b/Pods/RealmSwift/RealmSwift/Error.swift deleted file mode 100644 index c81247eb..00000000 --- a/Pods/RealmSwift/RealmSwift/Error.swift +++ /dev/null @@ -1,132 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Realm - - -/** - `Error` is an enum representing all recoverable errors. It is associated with the - Realm error domain specified in `RLMErrorDomain`. - - let realm: Realm? - do { - realm = Realm() - } catch RealmSwift.Error.IncompatibleLockFile() { - print("Realm Browser app may be attached to Realm on device?") - } - -*/ -public enum Error: ErrorType { - // swiftlint:disable variable_name - /// :nodoc: - public var _code: Int { - return rlmError.rawValue - } - - /// :nodoc: - public var _domain: String { - return RLMErrorDomain - } - // swiftlint:enable variable_name - - /// The `RLMError` value, which can be used to derive the error code. - private var rlmError: RLMError { - switch self { - case .Fail: - return RLMError.Fail - case .FileAccess: - return RLMError.FileAccess - case .FilePermissionDenied: - return RLMError.FilePermissionDenied - case .FileExists: - return RLMError.FileExists - case .FileNotFound: - return RLMError.FileNotFound - case .IncompatibleLockFile: - return RLMError.IncompatibleLockFile - case .FileFormatUpgradeRequired: - return RLMError.FileFormatUpgradeRequired - case .AddressSpaceExhausted: - return RLMError.AddressSpaceExhausted - case .SchemaMismatch: - return RLMError.SchemaMismatch - } - } - - /// Denotes a general error that occurred when trying to open a Realm. - case Fail - - /// Denotes a file I/O error that occurred when trying to open a Realm. - case FileAccess - - /// Denotes a file permission error that ocurred when trying to open a Realm. - /// - /// This error can occur if the user does not have permission to open or create - /// the specified file in the specified access mode when opening a Realm. - case FilePermissionDenied - - /// Denotes an error where a file was to be written to disk, but another file with the same name - /// already exists. - case FileExists - - /// Denotes an error that occurs if a file could not be found. - /// - /// This error may occur if a Realm file could not be found on disk when trying to open a - /// Realm as read-only, or if the directory part of the specified path was not found when - /// trying to write a copy. - case FileNotFound - - /// Denotes an error that occurs if the database file is currently open in another - /// process which cannot share with the current process due to an - /// architecture mismatch. - /// - /// This error may occur if trying to share a Realm file between an i386 (32-bit) iOS - /// Simulator and the Realm Browser application. In this case, please use the 64-bit - /// version of the iOS Simulator. - case IncompatibleLockFile - - /// Denotes an error that occurs if a file format upgrade is required to open the file, - /// but upgrades were explicitly disabled. - case FileFormatUpgradeRequired - - /// Denotes an error that occurs when there is insufficient available address space. - case AddressSpaceExhausted - - /// Denotes an error that occurs if there is a schema version mismatch, so that a migration is required. - case SchemaMismatch -} - -// MARK: Equatable - -extension Error: Equatable {} - -/// Returns a Boolean indicating whether the errors are identical. -public func == (lhs: ErrorType, rhs: ErrorType) -> Bool { // swiftlint:disable:this valid_docs - return lhs._code == rhs._code - && lhs._domain == rhs._domain -} - -// MARK: Pattern Matching - -/** - Pattern matching matching for `Realm.Error`, so that the instances can be used with Swift's - `do { ... } catch { ... }` syntax. -*/ -public func ~= (lhs: Error, rhs: ErrorType) -> Bool { // swiftlint:disable:this valid_docs - return lhs == rhs -} diff --git a/Pods/RealmSwift/RealmSwift/LinkingObjects.swift b/Pods/RealmSwift/RealmSwift/LinkingObjects.swift deleted file mode 100644 index 4137a073..00000000 --- a/Pods/RealmSwift/RealmSwift/LinkingObjects.swift +++ /dev/null @@ -1,419 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2016 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -/// :nodoc: -/// Internal class. Do not use directly. Used for reflection and initialization -public class LinkingObjectsBase: NSObject, NSFastEnumeration { - internal let objectClassName: String - internal let propertyName: String - - private var cachedRLMResults: RLMResults? - private var object: RLMWeakObjectHandle? - private var property: RLMProperty? - - internal func attachTo(object object: RLMObjectBase, property: RLMProperty) { - self.object = RLMWeakObjectHandle(object: object) - self.property = property - self.cachedRLMResults = nil - } - - internal var rlmResults: RLMResults { - if cachedRLMResults == nil { - if let object = self.object, property = self.property { - cachedRLMResults = RLMDynamicGet(object.object, property)! as? RLMResults - self.object = nil - self.property = nil - } else { - cachedRLMResults = RLMResults.emptyDetachedResults() - } - } - return cachedRLMResults! - } - - init(fromClassName objectClassName: String, property propertyName: String) { - self.objectClassName = objectClassName - self.propertyName = propertyName - } - - // MARK: Fast Enumeration - public func countByEnumeratingWithState(state: UnsafeMutablePointer, - objects buffer: AutoreleasingUnsafeMutablePointer, - count len: Int) -> Int { - return Int(rlmResults.countByEnumeratingWithState(state, - objects: buffer, - count: UInt(len))) - } -} - -/** - `LinkingObjects` is an auto-updating container type. It represents a collection of objects that - link to its parent object. - - `LinkingObjects` can be queried with the same predicates as `List` and `Results`. - - `LinkingObjects` always reflects the current state of the Realm on the current thread, - including during write transactions on the current thread. The one exception to - this is when using `for...in` enumeration, which will always enumerate over the - linking objects that were present when the enumeration is begun, even if some of them - are deleted or modified to no longer link to the target object during the enumeration. - - `LinkingObjects` can only be used as a property on `Object` models. Properties of this type must - be declared as `let` and cannot be `dynamic`. - */ -public final class LinkingObjects: LinkingObjectsBase { - /// The element type contained in this collection. - public typealias Element = T - - // MARK: Properties - - /// The Realm which manages this linking objects collection, or `nil` if the collection is unmanaged. - public var realm: Realm? { return rlmResults.attached ? Realm(rlmResults.realm) : nil } - - /// Indicates if the linking objects collection is no longer valid. - /// - /// The linking objects collection becomes invalid if `invalidate` is called on the containing `realm`. - /// - /// An invalidated linking objects can be accessed, but will always be empty. - public var invalidated: Bool { return rlmResults.invalidated } - - /// The number of objects in the linking objects. - public var count: Int { return Int(rlmResults.count) } - - // MARK: Initializers - - /** - Creates an instance of a `LinkingObjects`. This initializer should only be called when - declaring a property on a Realm model. - - - parameter type: The type of the object owning the property this `LinkingObjects` should refer to. - - parameter propertyName: The property name of the property this `LinkingObjects` should refer to. - */ - public init(fromType type: T.Type, property propertyName: String) { - let className = (T.self as Object.Type).className() - super.init(fromClassName: className, property: propertyName) - } - - /// Returns a description of the objects contained within the linking objects. - public override var description: String { - let type = "LinkingObjects<\(rlmResults.objectClassName)>" - return gsub("RLMResults <0x[a-z0-9]+>", template: type, string: rlmResults.description) ?? type - } - - // MARK: Index Retrieval - - /** - Returns the index of the given object, or `nil` if the object is not present. - - - parameter object: The object whose index is being queried. - - - returns: The index of the given object, or `nil` if the object is not present. - */ - public func indexOf(object: T) -> Int? { - return notFoundToNil(rlmResults.indexOfObject(unsafeBitCast(object, RLMObject.self))) - } - - /** - Returns the index of the first object matching the given predicate, - or `nil` if no objects match. - - - parameter predicate: The predicate with which to filter the objects. - - - returns: The index of the first matching object, or `nil` if no objects match. - */ - public func indexOf(predicate: NSPredicate) -> Int? { - return notFoundToNil(rlmResults.indexOfObjectWithPredicate(predicate)) - } - - /** - Returns the index of the first object matching the given predicate, - or `nil` if no objects match. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: The index of the first matching object, or `nil` if no objects match. - */ - public func indexOf(predicateFormat: String, _ args: AnyObject...) -> Int? { - return notFoundToNil(rlmResults.indexOfObjectWithPredicate(NSPredicate(format: predicateFormat, - argumentArray: args))) - } - - // MARK: Object Retrieval - - /** - Returns the object at the given `index`. - - - parameter index: The index. - - - returns: The object at the given `index`. - */ - public subscript(index: Int) -> T { - get { - throwForNegativeIndex(index) - return unsafeBitCast(rlmResults[UInt(index)], T.self) - } - } - - /// Returns the first object in the linking objects collection, or `nil` if the collection is empty. - public var first: T? { return unsafeBitCast(rlmResults.firstObject(), Optional.self) } - - /// Returns the last object in the linking objects collection, or `nil` if collection is empty. - public var last: T? { return unsafeBitCast(rlmResults.lastObject(), Optional.self) } - - // MARK: KVC - - /** - Returns an `Array` containing the results of invoking `valueForKey(_:)` with `key` on each of the linking objects - collection's objects. - - - parameter key: The name of the property. - - - returns: An `Array` containing the results. - */ - public override func valueForKey(key: String) -> AnyObject? { - return rlmResults.valueForKey(key) - } - - /** - Returns an `Array` containing the results of invoking `valueForKeyPath(_:)` with `keyPath` on each of the linking - objects collection's objects. - - - parameter keyPath: The key path to the property. - - - returns: An `Array` containing the results. - */ - public override func valueForKeyPath(keyPath: String) -> AnyObject? { - return rlmResults.valueForKeyPath(keyPath) - } - - /** - Invokes `setValue(_:forKey:)` on each of the linking objects collection's objects using the specified `value` and - `key`. - - - warning: This method may only be called during a write transaction. - - - parameter value: The object value. - - parameter key: The name of the property. - */ - public override func setValue(value: AnyObject?, forKey key: String) { - return rlmResults.setValue(value, forKey: key) - } - - // MARK: Filtering - - /** - Returns all the objects matching the given predicate in the linking objects collection. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: A `Results` object containing the results. - */ - public func filter(predicateFormat: String, _ args: AnyObject...) -> Results { - return Results(rlmResults.objectsWithPredicate(NSPredicate(format: predicateFormat, argumentArray: args))) - } - - /** - Returns all the objects matching the given predicate in the linking objects collection. - - - parameter predicate: The predicate with which to filter the objects. - - - returns: A `Results` object containing the results. - */ - public func filter(predicate: NSPredicate) -> Results { - return Results(rlmResults.objectsWithPredicate(predicate)) - } - - // MARK: Sorting - - /** - Returns a `Results` containing the linking objects collection's elements sorted by the given property name. - - - parameter property: The property name to sort by. - - parameter ascending: The direction to sort in. - - - returns: A `Results` object. - */ - public func sorted(property: String, ascending: Bool = true) -> Results { - return sorted([SortDescriptor(property: property, ascending: ascending)]) - } - - /** - Returns a `Results` containing the linking objects collection's elements sorted by the given sort descriptors. - - - parameter sortDescriptors: A sequence of `SortDescriptor`s to sort by. - - - returns: A `Results` object. - */ - public func sorted(sortDescriptors: S) -> Results { - return Results(rlmResults.sortedResultsUsingDescriptors(sortDescriptors.map { $0.rlmSortDescriptorValue })) - } - - // MARK: Aggregate Operations - - /** - Returns the minimum (lowest) value of the given property among all the objects represented by the linking objects - collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The minimum value of the property, or `nil` if the collection is empty. - */ - public func min(property: String) -> U? { - return rlmResults.minOfProperty(property) as! U? - } - - /** - Returns the maximum (highest) value of the given property among all the objects represented by the linking objects - collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The maximum value of the property, or `nil` if the collection is empty. - */ - public func max(property: String) -> U? { - return rlmResults.maxOfProperty(property) as! U? - } - - /** - Returns the sum of the values of a given property over all the objects represented by the linking objects - collection. - - - warning: Only a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose values should be summed. - - - returns: The sum of the given property. - */ - public func sum(property: String) -> U { - return rlmResults.sumOfProperty(property) as AnyObject as! U - } - - /** - Returns the average value of a given property over all the objects represented by the linking objects collection. - - - warning: Only the name of a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose average value should be calculated. - - - returns: The average value of the given property, or `nil` if the collection is empty. - */ - public func average(property: String) -> U? { - return rlmResults.averageOfProperty(property) as! U? - } - - // MARK: Notifications - - /** - Registers a block to be called each time the linking objects collection changes. - - The block will be asynchronously called with the initial linking objects collection, - and then called again after each write transaction which changes either any - of the objects in the collection, or which objects are in the collection. - - The `change` parameter that is passed to the block reports, in the form of indices within the - collection, which of the objects were added, removed, or modified during each write transaction. See the - `RealmCollectionChange` documentation for more information on the change information supplied and an example of how - to use it to update a `UITableView`. - - At the time when the block is called, the linking objects collection will be fully - evaluated and up-to-date, and as long as you do not perform a write transaction - on the same thread or explicitly call `realm.refresh()`, accessing it will never - perform blocking work. - - Notifications are delivered via the standard run loop, and so can't be - delivered while the run loop is blocked by other activity. When - notifications can't be delivered instantly, multiple notifications may be - coalesced into a single notification. This can include the notification - with the initial set of objects. For example, the following code performs a write - transaction immediately after adding the notification block, so there is no - opportunity for the initial notification to be delivered first. As a - result, the initial notification will reflect the state of the Realm after - the write transaction. - - let dog = realm.objects(Dog).first! - let owners = dog.owners - print("owners.count: \(owners.count)") // => 0 - let token = owners.addNotificationBlock { (changes: RealmCollectionChange) in - switch changes { - case .Initial(let owners): - // Will print "owners.count: 1" - print("owners.count: \(owners.count)") - break - case .Update: - // Will not be hit in this example - break - case .Error: - break - } - } - try! realm.write { - realm.add(Person.self, value: ["name": "Mark", dogs: [dog]]) - } - // end of runloop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `stop()` on the token. - - - warning: This method cannot be called during a write transaction, or when - the containing Realm is read-only. - - - parameter block: The block to be called whenever a change occurs. - - returns: A token which must be retained for as long as you want updates to be delivered. - */ - @warn_unused_result(message="You must hold on to the NotificationToken returned from addNotificationBlock") - public func addNotificationBlock(block: (RealmCollectionChange -> Void)) -> NotificationToken { - return rlmResults.addNotificationBlock { results, change, error in - block(RealmCollectionChange.fromObjc(self, change: change, error: error)) - } - } -} - -extension LinkingObjects: RealmCollectionType { - // MARK: Sequence Support - - /// Returns a `GeneratorOf` that yields successive elements in the results. - public func generate() -> RLMGenerator { - return RLMGenerator(collection: rlmResults) - } - - // MARK: Collection Support - - /// The position of the first element in a non-empty collection. - /// Identical to `endIndex` in an empty collection. - public var startIndex: Int { return 0 } - - /// The collection's "past the end" position. - /// `endIndex` is not a valid argument to subscript, and is always reachable from `startIndex` by - /// zero or more applications of `successor()`. - public var endIndex: Int { return count } - - /// :nodoc: - public func _addNotificationBlock(block: (RealmCollectionChange>) -> Void) -> - NotificationToken { - let anyCollection = AnyRealmCollection(self) - return rlmResults.addNotificationBlock { _, change, error in - block(RealmCollectionChange.fromObjc(anyCollection, change: change, error: error)) - } - } -} diff --git a/Pods/RealmSwift/RealmSwift/List.swift b/Pods/RealmSwift/RealmSwift/List.swift deleted file mode 100644 index b1f2493a..00000000 --- a/Pods/RealmSwift/RealmSwift/List.swift +++ /dev/null @@ -1,512 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm -import Realm.Private - -/// :nodoc: -/// Internal class. Do not use directly. -public class ListBase: RLMListBase { - // Printable requires a description property defined in Swift (and not obj-c), - // and it has to be defined as @objc override, which can't be done in a - // generic class. - /// Returns a human-readable description of the objects contained in the List. - @objc public override var description: String { - return descriptionWithMaxDepth(RLMDescriptionMaxDepth) - } - - @objc private func descriptionWithMaxDepth(depth: UInt) -> String { - let type = "List<\(_rlmArray.objectClassName)>" - return gsub("RLMArray <0x[a-z0-9]+>", template: type, string: _rlmArray.descriptionWithMaxDepth(depth)) ?? type - } - - /// Returns the number of objects in this List. - public var count: Int { return Int(_rlmArray.count) } -} - -/** - `List` is the container type in Realm used to define to-many relationships. - - Like Swift's `Array`s, Lists are parameterized on a single `Object` subclass (`T`). - - Lists can be filtered and sorted with the same predicates as `Results`. - - When added as a property on `Object` models, the property must be declared as `let` and cannot be `dynamic`. -*/ -public final class List: ListBase { - - /// The type of the elements contained within this list. - public typealias Element = T - - // MARK: Properties - - /// The Realm which manages the list. Returns `nil` for unmanaged lists. - public var realm: Realm? { - return _rlmArray.realm.map { Realm($0) } - } - - /// Indicates if the list can no longer be accessed. - public var invalidated: Bool { return _rlmArray.invalidated } - - // MARK: Initializers - - /// Creates a `List` that holds objects of type `T`. - public override init() { - super.init(array: RLMArray(objectClassName: (T.self as Object.Type).className())) - } - - // MARK: Index Retrieval - - /** - Returns the index of an object in the list. - - - parameter object: An object to find. - - - returns: The index of the object, or `nil` if the object is not in the list. - */ - public func indexOf(object: T) -> Int? { - return notFoundToNil(_rlmArray.indexOfObject(unsafeBitCast(object, RLMObject.self))) - } - - /** - Returns the index of the first object in the list matching the predicate. - - - parameter predicate: The predicate with which to filter the objects. - - - returns: The index of the first matching object, or `nil` if no objects match. - */ - public func indexOf(predicate: NSPredicate) -> Int? { - return notFoundToNil(_rlmArray.indexOfObjectWithPredicate(predicate)) - } - - /** - Returns the index of the first object in the list matching the predicate. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: The index of the first matching object, or `nil` if no objects match. - */ - public func indexOf(predicateFormat: String, _ args: AnyObject...) -> Int? { - return indexOf(NSPredicate(format: predicateFormat, argumentArray: args)) - } - - // MARK: Object Retrieval - - /** - Returns the object at the given index (get), or replaces the object at the given index (set). - - - warning: You can only set an object during a write transaction. - - - parameter index: The index of the object to retrieve or replace. - - - returns: The object at the given `index`. - */ - public subscript(index: Int) -> T { - get { - throwForNegativeIndex(index) - return _rlmArray[UInt(index)] as! T - } - set { - throwForNegativeIndex(index) - return _rlmArray[UInt(index)] = unsafeBitCast(newValue, RLMObject.self) - } - } - - /// Returns the first object in the list, or `nil` if the list is empty. - public var first: T? { return _rlmArray.firstObject() as! T? } - - /// Returns the last object in the list, or `nil` if the list is empty. - public var last: T? { return _rlmArray.lastObject() as! T? } - - // MARK: KVC - - /** - Returns an `Array` containing the results of invoking `valueForKey(_:)` using `key` on each of the collection's - objects. - - - parameter key: The name of the property. - - - returns: An `Array` containing the results. - */ - public override func valueForKey(key: String) -> AnyObject? { - return _rlmArray.valueForKey(key) - } - - /** - Returns an `Array` containing the results of invoking `valueForKeyPath(_:)` using `keyPath` on each of the - collection's objects. - - - parameter keyPath: The key path to the property. - - - returns: An `Array` containing the results. - */ - public override func valueForKeyPath(keyPath: String) -> AnyObject? { - return _rlmArray.valueForKeyPath(keyPath) - } - - /** - Invokes `setValue(_:forKey:)` on each of the collection's objects using the specified `value` and `key`. - - - warning: This method can only be called during a write transaction. - - - parameter value: The object value. - - parameter key: The name of the property. - */ - public override func setValue(value: AnyObject?, forKey key: String) { - return _rlmArray.setValue(value, forKey: key) - } - - // MARK: Filtering - - /** - Returns all objects matching the given predicate in the list. - - - parameter predicateFormat: A predicate format string; variable arguments are supported. - - - returns: A `Results` containing objects that match the predicate. - */ - public func filter(predicateFormat: String, _ args: AnyObject...) -> Results { - return Results(_rlmArray.objectsWithPredicate(NSPredicate(format: predicateFormat, argumentArray: args))) - } - - /** - Returns all objects matching the given predicate in the list. - - - parameter predicate: The predicate with which to filter the objects. - - - returns: A `Results` containing objects that match the predicate. - */ - public func filter(predicate: NSPredicate) -> Results { - return Results(_rlmArray.objectsWithPredicate(predicate)) - } - - // MARK: Sorting - - /** - Returns a sorted `Results` from the list. - - - parameter property: The property name to sort by. - - parameter ascending: The direction to sort by. - - - returns: A `Results` containing the list objects sorted by the specified property. - */ - public func sorted(property: String, ascending: Bool = true) -> Results { - return sorted([SortDescriptor(property: property, ascending: ascending)]) - } - - /** - Returns a sorted `Results` from the list. - - - parameter sortDescriptors: An sequence of `SortDescriptor`s to sort by. - - - returns: A `Results` containing the list objects sorted by the specified property. - */ - public func sorted(sortDescriptors: S) -> Results { - return Results(_rlmArray.sortedResultsUsingDescriptors(sortDescriptors.map { $0.rlmSortDescriptorValue })) - } - - // MARK: Aggregate Operations - - /** - Returns the minimum (lowest) value of the given property among all the objects in the list. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The minimum value of the property, or `nil` if the list is empty. - */ - public func min(property: String) -> U? { - return filter(NSPredicate(value: true)).min(property) - } - - /** - Returns the maximum (highest) value of the given property among all the objects in the list. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose maximum value is desired. - - - returns: The maximum value of the property, or '`nil` if the list is empty. - */ - public func max(property: String) -> U? { - return filter(NSPredicate(value: true)).max(property) - } - - /** - Returns the sum of the values of a given property over all the objects in the list. - - - warning: Only a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose values should be summed. - - - returns: The sum of the given property. - */ - public func sum(property: String) -> U { - return filter(NSPredicate(value: true)).sum(property) - } - - /** - Returns the average value of a given property over all the objects in the list. - - - warning: Only a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose average value should be calculated. - - - returns: The average value of the given property. - */ - public func average(property: String) -> U? { - return filter(NSPredicate(value: true)).average(property) - } - - // MARK: Mutation - - /** - Appends the given object to the end of the list. - - If the object is managed by a different Realm than the receiver, a copy is made and added to the Realm managing - the receiver. - - - warning: This method may only be called during a write transaction. - - - parameter object: An object. - */ - public func append(object: T) { - _rlmArray.addObject(unsafeBitCast(object, RLMObject.self)) - } - - /** - Appends the objects in the given sequence to the end of the list. - - - warning: This method may only be called during a write transaction. - - - parameter objects: A sequence of objects. - */ - public func appendContentsOf(objects: S) { - for obj in objects { - _rlmArray.addObject(unsafeBitCast(obj, RLMObject.self)) - } - } - - /** - Inserts an object at the given index. - - - warning: This method may only be called during a write transaction. - - - warning: This method will throw an exception if called with an invalid index. - - - parameter object: An object. - - parameter index: The index at which to insert the object. - */ - public func insert(object: T, atIndex index: Int) { - throwForNegativeIndex(index) - _rlmArray.insertObject(unsafeBitCast(object, RLMObject.self), atIndex: UInt(index)) - } - - /** - Removes an object at the given index. The object is not removed from the Realm that manages it. - - - warning: This method may only be called during a write transaction. - - - warning: This method will throw an exception if called with an invalid index. - - - parameter index: The index at which to remove the object. - */ - public func removeAtIndex(index: Int) { - throwForNegativeIndex(index) - _rlmArray.removeObjectAtIndex(UInt(index)) - } - - /** - Removes the last object in the list. The object is not removed from the Realm that manages it. - - - warning: This method may only be called during a write transaction. - */ - public func removeLast() { - _rlmArray.removeLastObject() - } - - /** - Removes all objects from the list. The objects are not removed from the Realm that manages them. - - - warning: This method may only be called during a write transaction. - */ - public func removeAll() { - _rlmArray.removeAllObjects() - } - - /** - Replaces an object at the given index with a new object. - - - warning: This method may only be called during a write transaction. - - - warning: This method will throw an exception if called with an invalid index. - - - parameter index: The index of the object to be replaced. - - parameter object: An object. - */ - public func replace(index: Int, object: T) { - throwForNegativeIndex(index) - _rlmArray.replaceObjectAtIndex(UInt(index), withObject: unsafeBitCast(object, RLMObject.self)) - } - - /** - Moves the object at the given source index to the given destination index. - - - warning: This method may only be called during a write transaction. - - - warning: This method will throw an exception if called with invalid indices. - - - parameter from: The index of the object to be moved. - - parameter to: index to which the object at `from` should be moved. - */ - public func move(from from: Int, to: Int) { // swiftlint:disable:this variable_name - throwForNegativeIndex(from) - throwForNegativeIndex(to) - _rlmArray.moveObjectAtIndex(UInt(from), toIndex: UInt(to)) - } - - /** - Exchanges the objects in the list at given indices. - - - warning: This method may only be called during a write transaction. - - - warning: This method will throw an exception if called with invalid indices. - - - parameter index1: The index of the object which should replace the object at index `index2`. - - parameter index2: The index of the object which should replace the object at index `index1`. - */ - public func swap(index1: Int, _ index2: Int) { - throwForNegativeIndex(index1, parameterName: "index1") - throwForNegativeIndex(index2, parameterName: "index2") - _rlmArray.exchangeObjectAtIndex(UInt(index1), withObjectAtIndex: UInt(index2)) - } - - // MARK: Notifications - - /** - Registers a block to be called each time the list changes. - - The block will be asynchronously called with the initial list, and then - called again after each write transaction which changes the list or any of - the items in the list. - - The `change` parameter that is passed to the block reports, in the form of indices within the - list, which of the objects were added, removed, or modified during each write transaction. See the - `RealmCollectionChange` documentation for more information on the change information supplied and an example of how - to use it to update a `UITableView`. - - The block is called on the same thread as it was added on, and can only - be added on threads which are currently within a run loop. Unless you are - specifically creating and running a run loop on a background thread, this - will normally only be the main thread. - - Notifications can't be delivered as long as the run loop is blocked by - other activity. When notifications can't be delivered instantly, multiple - notifications may be coalesced into a single notification. This can include - the notification with the initial list. For example, the following code - performs a write transaction immediately after adding the notification block, - so there is no opportunity for the initial notification to be delivered first. - As a result, the initial notification will reflect the state of the Realm - after the write transaction, and will not include change information. - - let person = realm.objects(Person).first! - print("dogs.count: \(person.dogs.count)") // => 0 - let token = person.dogs.addNotificationBlock { (changes: RealmCollectionChange) in - switch changes { - case .Initial(let dogs): - // Will print "dogs.count: 1" - print("dogs.count: \(dogs.count)") - break - case .Update: - // Will not be hit in this example - break - case .Error: - break - } - } - try! realm.write { - let dog = Dog() - dog.name = "Rex" - person.dogs.append(dog) - } - // end of run loop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `stop()` on the token. - - - warning: This method cannot be called during a write transaction, or when - the containing Realm is read-only. - - warning: This method may only be called on a managed list. - - - parameter block: The block to be called each time the list changes. - - returns: A token which must be held for as long as you want updates to be delivered. - */ - @warn_unused_result(message="You must hold on to the NotificationToken returned from addNotificationBlock") - public func addNotificationBlock(block: (RealmCollectionChange) -> ()) -> NotificationToken { - return _rlmArray.addNotificationBlock { list, change, error in - block(RealmCollectionChange.fromObjc(self, change: change, error: error)) - } - } -} - -extension List: RealmCollectionType, RangeReplaceableCollectionType { - // MARK: Sequence Support - - /// Returns a `GeneratorOf` that yields successive elements in the list. - public func generate() -> RLMGenerator { - return RLMGenerator(collection: _rlmArray) - } - - // MARK: RangeReplaceableCollection Support - - /** - Replace the given `subRange` of elements with `newElements`. - - - parameter subRange: The range of elements to be replaced. - - parameter newElements: The new elements to be inserted into the list. - */ - public func replaceRange(subRange: Range, - with newElements: C) { - for _ in subRange { - removeAtIndex(subRange.startIndex) - } - for x in newElements.reverse() { - insert(x, atIndex: subRange.startIndex) - } - } - - /// The position of the first element in a non-empty collection. - /// Identical to `endIndex` in an empty collection. - public var startIndex: Int { return 0 } - - /// The collection's "past the end" position. - /// `endIndex` is not a valid argument to subscript, and is always reachable from `startIndex` by - /// zero or more applications of `successor()`. - public var endIndex: Int { return count } - - /// :nodoc: - public func _addNotificationBlock(block: (RealmCollectionChange>) -> Void) -> - NotificationToken { - let anyCollection = AnyRealmCollection(self) - return _rlmArray.addNotificationBlock { _, change, error in - block(RealmCollectionChange.fromObjc(anyCollection, change: change, error: error)) - } - } -} diff --git a/Pods/RealmSwift/RealmSwift/Migration.swift b/Pods/RealmSwift/RealmSwift/Migration.swift deleted file mode 100644 index a5fd5ffe..00000000 --- a/Pods/RealmSwift/RealmSwift/Migration.swift +++ /dev/null @@ -1,199 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm -import Realm.Private - -/** - The type of a migration block used to migrate a Realm. - - - parameter migration: A `RLMMigration` object used to perform the migration. The - migration object allows you to enumerate and alter any - existing objects which require migration. - - - parameter oldSchemaVersion: The schema version of the Realm being migrated. -*/ -public typealias MigrationBlock = (migration: Migration, oldSchemaVersion: UInt64) -> Void - -/// An object class used during migrations. -public typealias MigrationObject = DynamicObject - -/** - A block type which provides both the old and new versions of an object in the Realm. Object - properties can only be accessed using subscripting. - - - parameter oldObject: The object from the original Realm (read-only). - - parameter newObject: The object from the migrated Realm (read-write). -*/ -public typealias MigrationObjectEnumerateBlock = (oldObject: MigrationObject?, newObject: MigrationObject?) -> Void - -/** - Returns the schema version for a Realm at a given local URL. - - - parameter fileURL: Local URL to a Realm file. - - parameter encryptionKey: 64-byte key used to encrypt the file, or `nil` if it is unencrypted. - - - throws: An `NSError` that describes the problem. - - - returns: The version of the Realm at `fileURL`. -*/ -public func schemaVersionAtURL(fileURL: NSURL, encryptionKey: NSData? = nil) throws -> UInt64 { - var error: NSError? = nil - let version = RLMRealm.schemaVersionAtURL(fileURL, encryptionKey: encryptionKey, error: &error) - if let error = error { - throw error - } - return version -} - -/** - Performs the given Realm configuration's migration block on a Realm at the given path. - - This method is called automatically when opening a Realm for the first time and does - not need to be called explicitly. You can choose to call this method to control - exactly when and how migrations are performed. - - - parameter configuration: The Realm configuration used to open and migrate the Realm. - - - returns: An `NSError` that describes an error that occurred while applying the migration, if any. -*/ -public func migrateRealm(configuration: Realm.Configuration = Realm.Configuration.defaultConfiguration) -> NSError? { - return RLMRealm.migrateRealm(configuration.rlmConfiguration) -} - - -/** - `Migration` instances encapsulate information intended to facilitate a schema migration. - - A `Migration` instance is passed into a user-defined `MigrationBlock` block when updating - the version of a Realm. This instance provides access to the old and new database schemas, the - objects in the Realm, and provides functionality for modifying the Realm during the migration. -*/ -public final class Migration { - - // MARK: Properties - - /// Returns the old schema, describing the Realm before applying a migration. - public var oldSchema: Schema { return Schema(rlmMigration.oldSchema) } - - /// Returns the new schema, describing the Realm after applying a migration. - public var newSchema: Schema { return Schema(rlmMigration.newSchema) } - - internal var rlmMigration: RLMMigration - - // MARK: Altering Objects During a Migration - - /** - Enumerates all the objects of a given type in this Realm, providing both the old and new versions of - each object. Object properties can be accessed using subscripting. - - - parameter objectClassName: The name of the `Object` class to enumerate. - - parameter block: The block providing both the old and new versions of an object in this Realm. - */ - public func enumerate(objectClassName: String, _ block: MigrationObjectEnumerateBlock) { - rlmMigration.enumerateObjects(objectClassName) { - block(oldObject: unsafeBitCast($0, MigrationObject.self), - newObject: unsafeBitCast($1, MigrationObject.self)) - } - } - - /** - Creates and returns an `Object` of type `className` in the Realm being migrated. - - - parameter className: The name of the `Object` class to create. - - parameter value: The value used to populate the created object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `Array` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `Array`, all properties must be present, - valid and in the same order as the properties defined in the model. - - - returns: The newly created object. - */ - public func create(className: String, value: AnyObject = [:]) -> MigrationObject { - return unsafeBitCast(rlmMigration.createObject(className, withValue: value), MigrationObject.self) - } - - /** - Deletes an object from a Realm during a migration. - - It is permitted to call this method from within the block passed to `enumerate(_:block:)`. - - - parameter object: Object to be deleted from the Realm being migrated. - */ - public func delete(object: MigrationObject) { - RLMDeleteObjectFromRealm(object, RLMObjectBaseRealm(object)) - } - - /** - Deletes the data for the class with the given name. - - All objects of the given class will be deleted. If the `RLMObject` subclass no longer exists in your program, any - remaining metadata for the class will be removed from the Realm file. - - - parameter objectClassName: The name of the `Object` class to delete. - - - returns: A Boolean value indicating whether there was any data to delete. - */ - public func deleteData(objectClassName: String) -> Bool { - return rlmMigration.deleteDataForClassName(objectClassName) - } - - /** - Renames a property of the given class from `oldName` to `newName`. - - - parameter className: The name of the class whose property should be renamed. This class must be present - in both the old and new Realm schemas. - - parameter oldName: The old name for the property to be renamed. There must not be a property with this name in - the class as defined by the new Realm schema. - - parameter newName: The new name for the property to be renamed. There must not be a property with this name in - the class as defined by the old Realm schema. - */ - public func renamePropertyForClass(className: String, oldName: String, newName: String) { - rlmMigration.renamePropertyForClass(className, oldName: oldName, newName: newName) - } - - private init(_ rlmMigration: RLMMigration) { - self.rlmMigration = rlmMigration - } -} - - -// MARK: Private Helpers - -internal func accessorMigrationBlock(migrationBlock: MigrationBlock) -> RLMMigrationBlock { - return { migration, oldVersion in - // set all accessor classes to MigrationObject - for objectSchema in migration.oldSchema.objectSchema { - objectSchema.accessorClass = MigrationObject.self - // isSwiftClass is always `false` for object schema generated - // from the table, but we need to pretend it's from a swift class - // (even if it isn't) for the accessors to be initialized correctly. - objectSchema.isSwiftClass = true - } - for objectSchema in migration.newSchema.objectSchema { - objectSchema.accessorClass = MigrationObject.self - } - - // run migration - migrationBlock(migration: Migration(migration), oldSchemaVersion: oldVersion) - } -} diff --git a/Pods/RealmSwift/RealmSwift/Object.swift b/Pods/RealmSwift/RealmSwift/Object.swift deleted file mode 100644 index cb79cca1..00000000 --- a/Pods/RealmSwift/RealmSwift/Object.swift +++ /dev/null @@ -1,428 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm -import Realm.Private - -/** - `Object` is a class used to define Realm model objects. - - In Realm you define your model classes by subclassing `Object` and adding properties to be persisted. - You then instantiate and use your custom subclasses instead of using the `Object` class directly. - - ```swift - class Dog: Object { - dynamic var name: String = "" - dynamic var adopted: Bool = false - let siblings = List() - } - ``` - - ### Supported property types - - - `String`, `NSString` - - `Int` - - `Int8`, `Int16`, `Int32`, `Int64` - - `Float` - - `Double` - - `Bool` - - `NSDate` - - `NSData` - - `RealmOptional` for optional numeric properties - - `Object` subclasses, to model many-to-one relationships - - `List`, to model many-to-many relationships - - `String`, `NSString`, `NSDate`, `NSData` and `Object` subclass properties can be declared as optional. `Int`, `Int8`, - Int16`, Int32`, `Int64`, `Float`, `Double`, `Bool`, and `List` properties cannot. To store an optional number, use - `RealmOptional`, `RealmOptional`, `RealmOptional`, or `RealmOptional` instead, which wraps an - optional numeric value. - - All property types except for `List` and `RealmOptional` *must* be declared as `dynamic var`. `List` and - `RealmOptional` properties must be declared as non-dynamic `let` properties. - - ### Querying - - You can retrieve all objects of a given type from a Realm by calling the `objects(_:)` instance method. - - ### Relationships - - See our [Cocoa guide](http://realm.io/docs/cocoa) for more details. -*/ -@objc(RealmSwiftObject) -public class Object: RLMObjectBase { - - // MARK: Initializers - - /** - Initializes an unmanaged instance of a Realm object. - - Call `add(_:)` on a `Realm` instance to add an unmanaged object into that Realm. - - - see: `Realm().add(_:)` - */ - public override required init() { - super.init() - } - - /** - Initializes an unmanaged instance of a Realm object. - - Pass in an `Array` or `Dictionary` instance to set the values of the object's - properties, or any other valid object as described below. - - Call `add(_:)` on a `Realm` instance to add an unmanaged object into that Realm. - - - parameter value: The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `Array` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `Array`, all properties must be present, - valid and in the same order as the properties defined in the model. - */ - public init(value: AnyObject) { - self.dynamicType.sharedSchema() // ensure this class' objectSchema is loaded in the partialSharedSchema - super.init(value: value, schema: RLMSchema.partialSharedSchema()) - } - - - // MARK: Properties - - /// The Realm which manages the object, or `nil` if the object is unmanaged. - public var realm: Realm? { - if let rlmReam = RLMObjectBaseRealm(self) { - return Realm(rlmReam) - } - return nil - } - - /// The object schema which lists the persisted properties for the object. - public var objectSchema: ObjectSchema { - return ObjectSchema(RLMObjectBaseObjectSchema(self)) - } - - /// Indicates if the object can no longer be accessed because it is now invalid. - /// - /// An object can no longer be accessed if the object has been deleted from the Realm that manages it, or if - /// `invalidate` is called on that Realm. - public override var invalidated: Bool { return super.invalidated } - - /// Returns a human-readable description of the object. - public override var description: String { return super.description } - - #if os(OSX) - /// A helper property that returns the class name for an `Object` subclass. - public final override var className: String { return "" } - #else - /// A helper property that returns the class name for an `Object` subclass. - public final var className: String { return "" } - #endif - - /** - WARNING: This is an internal helper method not intended for public use. - :nodoc: - */ - public override class func objectUtilClass(isSwift: Bool) -> AnyClass { - return ObjectUtil.self - } - - - // MARK: Object Customization - - /** - Override this method to specify the name of a property to be used as the primary key. - - Only properties of types `String` and `Int` can be designated as the primary key. Primary key properties enforce - uniqueness for each value whenever the property is set, which incurs minor overhead. Indexes are created - automatically for primary key properties. - - - returns: The name of the property designated as the primary key, or `nil` if the model has no primary key. - */ - public class func primaryKey() -> String? { return nil } - - /** - Override this method to specify the names of properties to ignore. These properties will not be persisted within - the Realm that manages the object. - - - returns: An array of property names to ignore. - */ - public class func ignoredProperties() -> [String] { return [] } - - /** - Returns an array of property names for properties which should be indexed. - - Only string, integer, boolean, and `NSDate` properties are supported. - - - returns: An array of property names. - */ - public class func indexedProperties() -> [String] { return [] } - - - // MARK: Key-Value Coding & Subscripting - - /// Returns or sets the value of the property with the given name. - public subscript(key: String) -> AnyObject? { - get { - if realm == nil { - return valueForKey(key) - } - let property = RLMValidatedGetProperty(self, key) - if property.type == .Array { - return listForProperty(property) - } - // No special logic is needed for optional numbers here because the NSNumber returned by RLMDynamicGet - // is better for callers than the RealmOptional that optionalForProperty would give us. - return RLMDynamicGet(self, property) - } - set(value) { - if realm == nil { - setValue(value, forKey: key) - } else { - RLMDynamicValidatedSet(self, key, value) - } - } - } - - // MARK: Dynamic list - - /** - Returns a list of `DynamicObject`s for a given property name. - - - warning: This method is useful only in specialized circumstances, for example, when building - components that integrate with Realm. If you are simply building an app on Realm, it is - recommended to use instance variables or cast the values returned from key-value coding. - - - parameter propertyName: The name of the property. - - - returns: A list of `DynamicObject`s. - - :nodoc: - */ - public func dynamicList(propertyName: String) -> List { - return unsafeBitCast(listForProperty(RLMValidatedGetProperty(self, propertyName)), List.self) - } - - // MARK: Equatable - - /** - Returns whether two Realm objects are equal. - - Objects are considered equal if and only if they are both managed by the same Realm and point to the same - underlying object in the database. - - - parameter object: The object to compare the receiver to. - */ - public override func isEqual(object: AnyObject?) -> Bool { - return RLMObjectBaseAreEqual(self as RLMObjectBase?, object as? RLMObjectBase) - } - - // MARK: Private functions - - // FIXME: None of these functions should be exposed in the public interface. - - /** - WARNING: This is an internal initializer not intended for public use. - :nodoc: - */ - public override required init(realm: RLMRealm, schema: RLMObjectSchema) { - super.init(realm: realm, schema: schema) - } - - /** - WARNING: This is an internal initializer not intended for public use. - :nodoc: - */ - public override required init(value: AnyObject, schema: RLMSchema) { - super.init(value: value, schema: schema) - } - - // Helper for getting the list object for a property - internal func listForProperty(prop: RLMProperty) -> RLMListBase { - return object_getIvar(self, prop.swiftIvar) as! RLMListBase - } - - // Helper for getting the optional object for a property - internal func optionalForProperty(prop: RLMProperty) -> RLMOptionalBase { - return object_getIvar(self, prop.swiftIvar) as! RLMOptionalBase - } - - // Helper for getting the linking objects object for a property - internal func linkingObjectsForProperty(prop: RLMProperty) -> LinkingObjectsBase? { - return object_getIvar(self, prop.swiftIvar) as? LinkingObjectsBase - } -} - - - -/// Object interface which allows untyped getters and setters for Objects. -/// :nodoc: -public final class DynamicObject: Object { - private var listProperties = [String: List]() - private var optionalProperties = [String: RLMOptionalBase]() - - // Override to create List on access - internal override func listForProperty(prop: RLMProperty) -> RLMListBase { - if let list = listProperties[prop.name] { - return list - } - let list = List() - listProperties[prop.name] = list - return list - } - - // Override to create RealmOptional on access - internal override func optionalForProperty(prop: RLMProperty) -> RLMOptionalBase { - if let optional = optionalProperties[prop.name] { - return optional - } - let optional = RLMOptionalBase() - optional.property = prop - optionalProperties[prop.name] = optional - return optional - } - - // Dynamic objects never have linking objects properties - internal override func linkingObjectsForProperty(prop: RLMProperty) -> LinkingObjectsBase? { - return nil - } - - /// :nodoc: - public override func valueForUndefinedKey(key: String) -> AnyObject? { - return self[key] - } - - /// :nodoc: - public override func setValue(value: AnyObject?, forUndefinedKey key: String) { - self[key] = value - } - - /// :nodoc: - public override class func shouldIncludeInDefaultSchema() -> Bool { - return false - } -} - -/// :nodoc: -/// Internal class. Do not use directly. -@objc(RealmSwiftObjectUtil) -public class ObjectUtil: NSObject { - @objc private class func swiftVersion() -> NSString { - return swiftLanguageVersion - } - - @objc private class func ignoredPropertiesForClass(type: AnyClass) -> NSArray? { - if let type = type as? Object.Type { - return type.ignoredProperties() as NSArray? - } - return nil - } - - @objc private class func indexedPropertiesForClass(type: AnyClass) -> NSArray? { - if let type = type as? Object.Type { - return type.indexedProperties() as NSArray? - } - return nil - } - - @objc private class func linkingObjectsPropertiesForClass(type: AnyClass) -> NSDictionary? { - // Not used for Swift. getLinkingObjectsProperties(_:) is used instead. - return nil - } - - // Get the names of all properties in the object which are of type List<>. - @objc private class func getGenericListPropertyNames(object: AnyObject) -> NSArray { - return Mirror(reflecting: object).children.filter { (prop: Mirror.Child) in - return prop.value.dynamicType is RLMListBase.Type - }.flatMap { (prop: Mirror.Child) in - return prop.label - } - } - - @objc private class func initializeListProperty(object: RLMObjectBase, property: RLMProperty, array: RLMArray) { - (object as! Object).listForProperty(property)._rlmArray = array - } - - @objc private class func initializeOptionalProperty(object: RLMObjectBase, property: RLMProperty) { - let optional = (object as! Object).optionalForProperty(property) - optional.property = property - optional.object = object - } - - // swiftlint:disable:next cyclomatic_complexity - @objc private class func getOptionalProperties(object: AnyObject) -> NSDictionary { - let children = Mirror(reflecting: object).children - return children.reduce([String: AnyObject]()) { ( properties: [String:AnyObject], prop: Mirror.Child) in - guard let name = prop.label else { return properties } - let mirror = Mirror(reflecting: prop.value) - let type = mirror.subjectType - var properties = properties - if type is Optional.Type || type is Optional.Type { - properties[name] = Int(PropertyType.String.rawValue) - } else if type is Optional.Type { - properties[name] = Int(PropertyType.Date.rawValue) - } else if type is Optional.Type { - properties[name] = Int(PropertyType.Data.rawValue) - } else if type is Optional.Type { - properties[name] = Int(PropertyType.Object.rawValue) - } else if type is RealmOptional.Type || - type is RealmOptional.Type || - type is RealmOptional.Type || - type is RealmOptional.Type || - type is RealmOptional.Type { - properties[name] = Int(PropertyType.Int.rawValue) - } else if type is RealmOptional.Type { - properties[name] = Int(PropertyType.Float.rawValue) - } else if type is RealmOptional.Type { - properties[name] = Int(PropertyType.Double.rawValue) - } else if type is RealmOptional.Type { - properties[name] = Int(PropertyType.Bool.rawValue) - } else if prop.value as? RLMOptionalBase != nil { - throwRealmException("'\(type)' is not a a valid RealmOptional type.") - } else if mirror.displayStyle == .Optional { - properties[name] = NSNull() - } - return properties - } - } - - @objc private class func requiredPropertiesForClass(_: AnyClass) -> NSArray? { - return nil - } - - // Get information about each of the linking objects properties. - @objc private class func getLinkingObjectsProperties(object: AnyObject) -> NSDictionary { - let properties = Mirror(reflecting: object).children.filter { (prop: Mirror.Child) in - return prop.value as? LinkingObjectsBase != nil - }.flatMap { (prop: Mirror.Child) in - (prop.label!, prop.value as! LinkingObjectsBase) - } - return properties.reduce([:] as [String : [String: String ]]) { (dictionary, property) in - var d = dictionary - let (name, results) = property - d[name] = ["class": results.objectClassName, "property": results.propertyName] - return d - } - } - - @objc private class func initializeLinkingObjectsProperty(object: RLMObjectBase, property: RLMProperty) { - guard let linkingObjects = (object as! Object).linkingObjectsForProperty(property) else { return } - linkingObjects.attachTo(object: object, property: property) - } -} diff --git a/Pods/RealmSwift/RealmSwift/ObjectSchema.swift b/Pods/RealmSwift/RealmSwift/ObjectSchema.swift deleted file mode 100644 index 7e0affe1..00000000 --- a/Pods/RealmSwift/RealmSwift/ObjectSchema.swift +++ /dev/null @@ -1,83 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -/** - This class represents Realm model object schemas. - - When using Realm, `ObjectSchema` instances allow performing migrations and - introspecting the database's schema. - - Object schemas map to tables in the core database. -*/ -public final class ObjectSchema: CustomStringConvertible { - - // MARK: Properties - - internal let rlmObjectSchema: RLMObjectSchema - - /** - An array of `Property` instances representing the persisted properties of a class described by the schema. - - - see: `Property` - */ - public var properties: [Property] { - return rlmObjectSchema.properties.map { Property($0) } - } - - /// The name of the class the schema describes. - public var className: String { return rlmObjectSchema.className } - - /// The property which serves as the primary key for the class the schema describes, if any. - public var primaryKeyProperty: Property? { - if let rlmProperty = rlmObjectSchema.primaryKeyProperty { - return Property(rlmProperty) - } - return nil - } - - /// Returns a human-readable description of the properties contained in the object schema. - public var description: String { return rlmObjectSchema.description } - - // MARK: Initializers - - internal init(_ rlmObjectSchema: RLMObjectSchema) { - self.rlmObjectSchema = rlmObjectSchema - } - - // MARK: Property Retrieval - - /// Returns the property with the given name, if it exists. - public subscript(propertyName: String) -> Property? { - if let rlmProperty = rlmObjectSchema[propertyName] { - return Property(rlmProperty) - } - return nil - } -} - -// MARK: Equatable - -extension ObjectSchema: Equatable {} - -/// Returns whether the two object schemas are equal. -public func == (lhs: ObjectSchema, rhs: ObjectSchema) -> Bool { // swiftlint:disable:this valid_docs - return lhs.rlmObjectSchema.isEqualToObjectSchema(rhs.rlmObjectSchema) -} diff --git a/Pods/RealmSwift/RealmSwift/Optional.swift b/Pods/RealmSwift/RealmSwift/Optional.swift deleted file mode 100644 index f1a07047..00000000 --- a/Pods/RealmSwift/RealmSwift/Optional.swift +++ /dev/null @@ -1,88 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Realm - -/// A protocol describing types that can parameterize a `RealmOptional`. -public protocol RealmOptionalType {} -extension Int: RealmOptionalType {} -extension Int8: RealmOptionalType {} -extension Int16: RealmOptionalType {} -extension Int32: RealmOptionalType {} -extension Int64: RealmOptionalType {} -extension Float: RealmOptionalType {} -extension Double: RealmOptionalType {} -extension Bool: RealmOptionalType {} - -// Not all RealmOptionalType's can be cast to AnyObject, so handle casting logic here. -private func realmOptionalToAnyObject(value: T?) -> AnyObject? { - if let anyObjectValue: AnyObject = value as? AnyObject { - return anyObjectValue - } else if let int8Value = value as? Int8 { - return NSNumber(long: Int(int8Value)) - } else if let int16Value = value as? Int16 { - return NSNumber(long: Int(int16Value)) - } else if let int32Value = value as? Int32 { - return NSNumber(long: Int(int32Value)) - } else if let int64Value = value as? Int64 { - return NSNumber(longLong: int64Value) - } - return nil -} - -// Not all RealmOptionalType's can be cast from AnyObject, so handle casting logic here. -private func anyObjectToRealmOptional(anyObject: AnyObject?) -> T? { - if T.self is Int8.Type { - return ((anyObject as! NSNumber?)?.longValue).map { Int8($0) } as! T? - } else if T.self is Int16.Type { - return ((anyObject as! NSNumber?)?.longValue).map { Int16($0) } as! T? - } else if T.self is Int32.Type { - return ((anyObject as! NSNumber?)?.longValue).map { Int32($0) } as! T? - } else if T.self is Int64.Type { - return (anyObject as! NSNumber?)?.longLongValue as! T? - } - return anyObject as! T? -} - -/** - A `RealmOptional` instance represents a optional value for types that can't be directly declared as `dynamic` in Swift, - such as `Int`, `Float`, `Double`, and `Bool`. - - To change the underlying value stored by a `RealmOptional` instance, mutate the instance's `value` property. -*/ -public final class RealmOptional: RLMOptionalBase { - /// The value this optional represents. - public var value: T? { - get { - return anyObjectToRealmOptional(underlyingValue) - } - set { - underlyingValue = realmOptionalToAnyObject(newValue) - } - } - - /** - Creates a `RealmOptional` instance encapsulating the given default value. - - - parameter value: The value to store in the optional, or `nil` if not specified. - */ - public init(_ value: T? = nil) { - super.init() - self.value = value - } -} diff --git a/Pods/RealmSwift/RealmSwift/Property.swift b/Pods/RealmSwift/RealmSwift/Property.swift deleted file mode 100644 index cad8bfb1..00000000 --- a/Pods/RealmSwift/RealmSwift/Property.swift +++ /dev/null @@ -1,68 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -/** - `Property` instances represent properties persisted to Realm in the context of an object schema. - - When using Realm, `Property` instances allow performing migrations and introspecting the database's schema. - - These property instances map to columns in the core database. -*/ -public final class Property: CustomStringConvertible { - - // MARK: Properties - - internal let rlmProperty: RLMProperty - - /// The name of the property. - public var name: String { return rlmProperty.name } - - /// The type of the property. - public var type: PropertyType { return rlmProperty.type } - - /// Indicates whether this property is indexed. - public var indexed: Bool { return rlmProperty.indexed } - - /// Indicates whether this property is optional. (Note that certain numeric types must be wrapped in a - /// `RealmOptional` instance in order to be declared as optional.) - public var optional: Bool { return rlmProperty.optional } - - /// For `Object` and `List` properties, the name of the class of object stored in the property. - public var objectClassName: String? { return rlmProperty.objectClassName } - - /// Returns a human-readable description of this property. - public var description: String { return rlmProperty.description } - - // MARK: Initializers - - internal init(_ rlmProperty: RLMProperty) { - self.rlmProperty = rlmProperty - } -} - -// MARK: Equatable - -extension Property: Equatable {} - -/// Returns whether the two property objects are equal. -public func == (lhs: Property, rhs: Property) -> Bool { // swiftlint:disable:this valid_docs - return lhs.rlmProperty.isEqualToProperty(rhs.rlmProperty) -} diff --git a/Pods/RealmSwift/RealmSwift/Realm.swift b/Pods/RealmSwift/RealmSwift/Realm.swift deleted file mode 100644 index 851fd798..00000000 --- a/Pods/RealmSwift/RealmSwift/Realm.swift +++ /dev/null @@ -1,619 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm -import Realm.Private - -/** - A `Realm` instance (also referred to as "a Realm") represents a Realm database. - - Realms can either be stored on disk (see `init(path:)`) or in memory (see `Configuration`). - - `Realm` instances are cached internally, and constructing equivalent `Realm` objects (for example, by using the same - path or identifier) produces limited overhead. - - If you specifically want to ensure a `Realm` instance is destroyed (for example, if you wish to open a Realm, check - some property, and then possibly delete the Realm file and re-open it), place the code which uses the Realm within an - `autoreleasepool {}` and ensure you have no other strong references to it. - - - warning: `Realm` instances are not thread safe and cannot be shared across threads or dispatch queues. You must - construct a new instance for each thread in which a Realm will be accessed. For dispatch queues, this means - that you must construct a new instance in each block which is dispatched, as a queue is not guaranteed to - run all of its blocks on the same thread. -*/ -public final class Realm { - - // MARK: Properties - - /// The `Schema` used by the Realm. - public var schema: Schema { return Schema(rlmRealm.schema) } - - /// The `RealmConfiguration` object that was used to create this `Realm` instance. - public var configuration: Configuration { return Configuration.fromRLMRealmConfiguration(rlmRealm.configuration) } - - /// Indicates if this Realm contains any objects. - public var isEmpty: Bool { return rlmRealm.isEmpty } - - // MARK: Initializers - - /** - Obtains an instance of the default Realm. - - The default Realm is persisted as default.realm under the Documents directory of your Application on iOS, and in - your application's Application Support directory on OS X. - - The default Realm is created using the default `Configuration`, which can be changed by setting a new - `Configuration` object on the `Realm.Configuration.defaultConfiguration` property. - - - throws: An `NSError` if the Realm could not be initialized. - */ - public convenience init() throws { - let rlmRealm = try RLMRealm(configuration: RLMRealmConfiguration.defaultConfiguration()) - self.init(rlmRealm) - } - - /** - Obtains a `Realm` instance with the given configuration. - - - parameter configuration: A configuration value to use when creating the Realm. - - - throws: An `NSError` if the Realm could not be initialized. - */ - public convenience init(configuration: Configuration) throws { - let rlmRealm = try RLMRealm(configuration: configuration.rlmConfiguration) - self.init(rlmRealm) - } - - /** - Obtains a `Realm` instance persisted at a specified file URL. - - - parameter fileURL: The local URL of the file the Realm should be saved at. - - - throws: An `NSError` if the Realm could not be initialized. - */ - public convenience init(fileURL: NSURL) throws { - var configuration = Configuration.defaultConfiguration - configuration.fileURL = fileURL - try self.init(configuration: configuration) - } - - // MARK: Transactions - - /** - Performs actions contained within the given block inside a write transaction. - - Write transactions cannot be nested, and trying to execute a write transaction on a Realm which is already - participating in a write transaction will throw an error. Calls to `write` from `Realm` instances in other threads - will block until the current write transaction completes. - - Before executing the write transaction, `write` updates the `Realm` instance to the - latest Realm version, as if `refresh()` had been called, and generates notifications - if applicable. This has no effect if the Realm was already up to date. - - - parameter block: The block containing actions to perform. - - - throws: An `NSError` if the transaction could not be completed successfully. - */ - public func write(@noescape block: (() -> Void)) throws { - try rlmRealm.transactionWithBlock(block) - } - - /** - Begins a write transaction on the Realm. - - Only one write transaction can be open at a time. Write transactions cannot be - nested, and trying to begin a write transaction on a Realm which is - already in a write transaction will throw an error. Calls to - `beginWrite` from `Realm` instances in other threads will block - until the current write transaction completes. - - Before beginning the write transaction, `beginWrite` updates the - `Realm` instance to the latest Realm version, as if `refresh()` had been called, and - generates notifications if applicable. This has no effect if the Realm - was already up to date. - - It is rarely a good idea to have write transactions span multiple cycles of - the run loop, but if you do wish to do so you will need to ensure that the - Realm in the write transaction is kept alive until the write transaction - is committed. - */ - public func beginWrite() { - rlmRealm.beginWriteTransaction() - } - - /** - Commits all write operations in the current write transaction, and ends the transaction. - - - warning: This method may only be called during a write transaction. - - - throws: An `NSError` if the transaction could not be written. - */ - public func commitWrite() throws { - try rlmRealm.commitWriteTransaction() - } - - /** - Reverts all writes made in the current write transaction and ends the transaction. - - This rolls back all objects in the Realm to the state they were in at the - beginning of the write transaction, and then ends the transaction. - - This restores the data for deleted objects, but does not revive invalidated - object instances. Any `Object`s which were added to the Realm will be - invalidated rather than becoming unmanaged. - Given the following code: - - ```swift - let oldObject = objects(ObjectType).first! - let newObject = ObjectType() - - realm.beginWrite() - realm.add(newObject) - realm.delete(oldObject) - realm.cancelWrite() - ``` - - Both `oldObject` and `newObject` will return `true` for `invalidated`, - but re-running the query which provided `oldObject` will once again return - the valid object. - - - warning: This method may only be called during a write transaction. - */ - public func cancelWrite() { - rlmRealm.cancelWriteTransaction() - } - - /** - Indicates whether this Realm is currently in a write transaction. - - - warning: Wrapping mutating operations in a write transaction if this property returns `false` - may cause a large number of write transactions to be created, which could negatively - impact Realm's performance. Always prefer performing multiple mutations in a single - transaction when possible. - */ - public var inWriteTransaction: Bool { - return rlmRealm.inWriteTransaction - } - - // MARK: Adding and Creating objects - - /** - Adds or updates an existing object into the Realm. - - Only pass `true` to `update` if the object has a primary key. If no objects exist in - the Realm with the same primary key value, the object is inserted. Otherwise, - the existing object is updated with any changed values. - - When added, all child relationships referenced by this object will also be added to - the Realm if they are not already in it. If the object or any related - objects are already being managed by a different Realm an error will be thrown. Use one - of the `create` functions to insert a copy of a managed object into a different - Realm. - - The object to be added must be valid and cannot have been previously deleted - from a Realm (i.e. `invalidated` must be `false`). - - - parameter object: The object to be added to this Realm. - - parameter update: If `true`, the Realm will try to find an existing copy of the object (with the same primary - key), and update it. Otherwise, the object will be added. - */ - public func add(object: Object, update: Bool = false) { - if update && object.objectSchema.primaryKeyProperty == nil { - throwRealmException("'\(object.objectSchema.className)' does not have a primary key and can not be updated") - } - RLMAddObjectToRealm(object, rlmRealm, update) - } - - /** - Adds or updates all the objects in a collection into the Realm. - - - see: `add(_:update:)` - - - warning: This method may only be called during a write transaction. - - - parameter objects: A sequence which contains objects to be added to the Realm. - - parameter update: If `true`, objects that are already in the Realm will be updated instead of added anew. - */ - public func add(objects: S, update: Bool = false) { - for obj in objects { - add(obj, update: update) - } - } - - /** - Creates or updates a Realm object with a given value, adding it to the Realm and returning it. - - Only pass `true` to `update` if the object has a primary key. If no objects exist in - the Realm with the same primary key value, the object is inserted. Otherwise, - the existing object is updated with any changed values. - - - warning: This method may only be called during a write transaction. - - - parameter type: The type of the object to create. - - parameter value: The value used to populate the object. This can be any key-value coding compliant - object, or an array or dictionary returned from the methods in `NSJSONSerialization`, or - an `Array` containing one element for each persisted property. An error will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `Array`, all properties must be present, - valid and in the same order as the properties defined in the model. - - parameter update: If `true`, the Realm will try to find an existing copy of the object (with the same primary - key), and update it. Otherwise, the object will be added. - - - returns: The newly created object. - */ - public func create(type: T.Type, value: AnyObject = [:], update: Bool = false) -> T { - let className = (type as Object.Type).className() - if update && schema[className]?.primaryKeyProperty == nil { - throwRealmException("'\(className)' does not have a primary key and can not be updated") - } - return unsafeBitCast(RLMCreateObjectInRealmWithValue(rlmRealm, className, value, update), T.self) - } - - /** - This method is useful only in specialized circumstances, for example, when building - components that integrate with Realm. If you are simply building an app on Realm, it is - recommended to use the typed method `create(_:value:update:)`. - - Creates or updates an object with the given class name and adds it to the `Realm`, populating - the object with the given value. - - When 'update' is 'true', the object must have a primary key. If no objects exist in - the Realm instance with the same primary key value, the object is inserted. Otherwise, - the existing object is updated with any changed values. - - - warning: This method can only be called during a write transaction. - - - parameter className: The class name of the object to create. - - parameter value: The value used to populate the object. This can be any key-value coding compliant - object, or a JSON object such as those returned from the methods in `NSJSONSerialization`, - or an `Array` containing one element for each persisted property. An exception will be - thrown if any required properties are not present and those properties were not defined with - default values. - - When passing in an `Array`, all properties must be present, - valid and in the same order as the properties defined in the model. - - parameter update: If true will try to update existing objects with the same primary key. - - - returns: The created object. - - :nodoc: - */ - public func dynamicCreate(className: String, value: AnyObject = [:], update: Bool = false) -> DynamicObject { - if update && schema[className]?.primaryKeyProperty == nil { - throwRealmException("'\(className)' does not have a primary key and can not be updated") - } - return unsafeBitCast(RLMCreateObjectInRealmWithValue(rlmRealm, className, value, update), DynamicObject.self) - } - - // MARK: Deleting objects - - /** - Deletes an object from the Realm. Once the object is deleted it is considered invalidated. - - - warning: This method may only be called during a write transaction. - - - parameter object: The object to be deleted. - */ - public func delete(object: Object) { - RLMDeleteObjectFromRealm(object, rlmRealm) - } - - /** - Deletes one or more objects from the Realm. - - - warning: This method may only be called during a write transaction. - - - parameter objects: The objects to be deleted. This can be a `List`, `Results`, - or any other enumerable `SequenceType` whose elements are `Object`s. - */ - public func delete(objects: S) { - for obj in objects { - delete(obj) - } - } - - /** - Deletes one or more objects from the Realm. - - - warning: This method may only be called during a write transaction. - - - parameter objects: A list of objects to delete. - - :nodoc: - */ - public func delete(objects: List) { - rlmRealm.deleteObjects(objects._rlmArray) - } - - /** - Deletes one or more objects from the Realm. - - - warning: This method may only be called during a write transaction. - - - parameter objects: A `Results` containing the objects to be deleted. - - :nodoc: - */ - public func delete(objects: Results) { - rlmRealm.deleteObjects(objects.rlmResults) - } - - /** - Deletes all objects from the Realm. - - - warning: This method may only be called during a write transaction. - */ - public func deleteAll() { - RLMDeleteAllObjectsFromRealm(rlmRealm) - } - - // MARK: Object Retrieval - - /** - Returns all objects of the given type stored in the Realm. - - - parameter type: The type of the objects to be returned. - - - returns: A `Results` containing the objects. - */ - public func objects(type: T.Type) -> Results { - return Results(RLMGetObjects(rlmRealm, (type as Object.Type).className(), nil)) - } - - /** - This method is useful only in specialized circumstances, for example, when building - components that integrate with Realm. If you are simply building an app on Realm, it is - recommended to use the typed method `objects(type:)`. - - Returns all objects for a given class name in the Realm. - - - warning: This method is useful only in specialized circumstances. - - - parameter className: The class name of the objects to be returned. - - - returns: All objects for the given class name as dynamic objects - - :nodoc: - */ - public func dynamicObjects(className: String) -> Results { - return Results(RLMGetObjects(rlmRealm, className, nil)) - } - - /** - Retrieves the single instance of a given object type with the given primary key from the Realm. - - This method requires that `primaryKey()` be overridden on the given object class. - - - see: `Object.primaryKey()` - - - parameter type: The type of the object to be returned. - - parameter key: The primary key of the desired object. - - - returns: An object of type `type`, or `nil` if no instance with the given primary key exists. - */ - public func objectForPrimaryKey(type: T.Type, key: AnyObject) -> T? { - return unsafeBitCast(RLMGetObject(rlmRealm, (type as Object.Type).className(), key), Optional.self) - } - - /** - This method is useful only in specialized circumstances, for example, when building - components that integrate with Realm. If you are simply building an app on Realm, it is - recommended to use the typed method `objectForPrimaryKey(_:key:)`. - - Get a dynamic object with the given class name and primary key. - - Returns `nil` if no object exists with the given class name and primary key. - - This method requires that `primaryKey()` be overridden on the given subclass. - - - see: Object.primaryKey() - - - warning: This method is useful only in specialized circumstances. - - - parameter className: The class name of the object to be returned. - - parameter key: The primary key of the desired object. - - - returns: An object of type `DynamicObject` or `nil` if an object with the given primary key does not exist. - - :nodoc: - */ - public func dynamicObjectForPrimaryKey(className: String, key: AnyObject) -> DynamicObject? { - return unsafeBitCast(RLMGetObject(rlmRealm, className, key), Optional.self) - } - - // MARK: Notifications - - /** - Adds a notification handler for changes in this Realm, and returns a notification token. - - Notification handlers are called after each write transaction is committed, - independent from the thread or process. - - Handler blocks are called on the same thread that they were added on, and may only be added on threads which are - currently within a run loop. Unless you are specifically creating and running a run loop on a background thread, - this will normally only be the main thread. - - Notifications can't be delivered as long as the run loop is blocked by - other activity. When notifications can't be delivered instantly, multiple - notifications may be coalesced. - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `stop()` on the token. - - - parameter block: A block which is called to process Realm notifications. - It receives the following parameters: - - - `Notification`: The incoming notification. - - `Realm`: The Realm for which this notification occurred. - - - returns: A token which must be retained for as long as you wish to continue receiving change notifications. - */ - @warn_unused_result(message="You must hold on to the NotificationToken returned from addNotificationBlock") - public func addNotificationBlock(block: NotificationBlock) -> NotificationToken { - return rlmRealm.addNotificationBlock { rlmNotification, _ in - if rlmNotification == RLMRealmDidChangeNotification { - block(notification: Notification.DidChange, realm: self) - } else if rlmNotification == RLMRealmRefreshRequiredNotification { - block(notification: Notification.RefreshRequired, realm: self) - } - } - } - - // MARK: Autorefresh and Refresh - - /** - Set this property to `true` to automatically update this Realm when changes happen in other threads. - - If set to `true` (the default), changes made on other threads will be reflected - in this Realm on the next cycle of the run loop after the changes are - committed. If set to `false`, you must manually call `refresh()` on the Realm to - update it to get the latest data. - - Note that by default, background threads do not have an active run loop and you - will need to manually call `refresh()` in order to update to the latest version, - even if `autorefresh` is set to `true`. - - Even with this enabled, you can still call `refresh()` at any time to update the - Realm before the automatic refresh would occur. - - Notifications are sent when a write transaction is committed whether or not - automatic refreshing is enabled. - - Disabling `autorefresh` on a `Realm` without any strong references to it will not - have any effect, and `autorefresh` will revert back to `true` the next time the Realm is created. This is normally - irrelevant as it means that there is nothing to refresh (as persisted `Object`s, `List`s, and `Results` have strong - references to the `Realm` that manages them), but it means that setting - `Realm().autorefresh = false` in - `application(_:didFinishLaunchingWithOptions:)` and only later storing Realm - objects will not work. - - Defaults to `true`. - */ - public var autorefresh: Bool { - get { - return rlmRealm.autorefresh - } - set { - rlmRealm.autorefresh = newValue - } - } - - /** - Updates the Realm and outstanding objects managed by the Realm to point to the most recent data. - - - returns: Whether there were any updates for the Realm. Note that `true` may be returned even if no data actually - changed. - */ - public func refresh() -> Bool { - return rlmRealm.refresh() - } - - // MARK: Invalidation - - /** - Invalidates all `Object`s and `Results` managed by the Realm. - - A Realm holds a read lock on the version of the data accessed by it, so - that changes made to the Realm on different threads do not modify or delete the - data seen by this Realm. Calling this method releases the read lock, - allowing the space used on disk to be reused by later write transactions rather - than growing the file. This method should be called before performing long - blocking operations on a background thread on which you previously read data - from the Realm which you no longer need. - - All `Object`, `Results` and `List` instances obtained from this `Realm` instance on the current thread are - invalidated. `Object`s and `Array`s cannot be used. `Results` will become empty. The Realm itself remains valid, - and a new read transaction is implicitly begun the next time data is read from the Realm. - - Calling this method multiple times in a row without reading any data from the - Realm, or before ever reading any data from the Realm, is a no-op. This method - may not be called on a read-only Realm. - */ - public func invalidate() { - rlmRealm.invalidate() - } - - // MARK: Writing a Copy - - /** - Writes a compacted and optionally encrypted copy of the Realm to the given local URL. - - The destination file cannot already exist. - - Note that if this method is called from within a write transaction, the *current* data is written, not the data - from the point when the previous write transaction was committed. - - - parameter fileURL: Local URL to save the Realm to. - - parameter encryptionKey: Optional 64-byte encryption key to encrypt the new file with. - - - throws: An `NSError` if the copy could not be written. - */ - public func writeCopyToURL(fileURL: NSURL, encryptionKey: NSData? = nil) throws { - try rlmRealm.writeCopyToURL(fileURL, encryptionKey: encryptionKey) - } - - // MARK: Internal - - internal var rlmRealm: RLMRealm - - internal init(_ rlmRealm: RLMRealm) { - self.rlmRealm = rlmRealm - } -} - -// MARK: Equatable - -extension Realm: Equatable { } - -/// Returns a Boolean indicating whether two `Realm` instances are equal. -public func == (lhs: Realm, rhs: Realm) -> Bool { // swiftlint:disable:this valid_docs - return lhs.rlmRealm == rhs.rlmRealm -} - -// MARK: Notifications - -/// A notification indicating that changes were made to a Realm. -public enum Notification: String { - /** - This notification is posted when the data in a Realm has changed. - - `DidChange` is posted after a Realm has been refreshed to reflect a write transaction, This can happen when - an autorefresh occurs, `refresh()` is called, after an implicit refresh from - `write(_:)`/`beginWrite()`, or after a local write transaction is committed. - */ - case DidChange = "RLMRealmDidChangeNotification" - - /** - This notification is posted when a write transaction has been committed to a Realm on a different thread for the - same file. - - It is not posted if `autorefresh` is enabled, or if the Realm is refreshed before the - notification has a chance to run. - - Realms with autorefresh disabled should normally install a handler for this notification which calls `refresh()` - after doing some work. Refreshing the Realm is optional, but not refreshing the Realm may lead to large Realm - files. This is because Realm must keep an extra copy of the data for the stale Realm. - */ - case RefreshRequired = "RLMRealmRefreshRequiredNotification" -} - -/// The type of a block to run for notification purposes when the data in a Realm is modified. -public typealias NotificationBlock = (notification: Notification, realm: Realm) -> Void diff --git a/Pods/RealmSwift/RealmSwift/RealmCollectionType.swift b/Pods/RealmSwift/RealmSwift/RealmCollectionType.swift deleted file mode 100644 index 30dcc984..00000000 --- a/Pods/RealmSwift/RealmSwift/RealmCollectionType.swift +++ /dev/null @@ -1,919 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -/** - An iterator for a `RealmCollectionType` instance. -*/ -public final class RLMGenerator: GeneratorType { - private let generatorBase: NSFastGenerator - - internal init(collection: RLMCollection) { - generatorBase = NSFastGenerator(collection) - } - - /// Advance to the next element and return it, or `nil` if no next element exists. - public func next() -> T? { // swiftlint:disable:this valid_docs - let accessor = generatorBase.next() as! T? - if let accessor = accessor { - RLMInitializeSwiftAccessorGenerics(accessor) - } - return accessor - } -} - -/** - A `RealmCollectionChange` value encapsulates information about changes to collections - that are reported by Realm notifications. - - The change information is available in two formats: a simple array of row - indices in the collection for each type of change, and an array of index paths - in a requested section suitable for passing directly to `UITableView`'s batch - update methods. - - The arrays of indices in the `.Update` case follow `UITableView`'s batching - conventions, and can be passed as-is to a table view's batch update functions after being converted to index paths. - For example, for a simple one-section table view, you can do the following: - - self.notificationToken = results.addNotificationBlock { changes - switch changes { - case .Initial: - // Results are now populated and can be accessed without blocking the UI - self.tableView.reloadData() - break - case .Update(_, let deletions, let insertions, let modifications): - // Query results have changed, so apply them to the TableView - self.tableView.beginUpdates() - self.tableView.insertRowsAtIndexPaths(insertions.map { NSIndexPath(forRow: $0, inSection: 0) }, - withRowAnimation: .Automatic) - self.tableView.deleteRowsAtIndexPaths(deletions.map { NSIndexPath(forRow: $0, inSection: 0) }, - withRowAnimation: .Automatic) - self.tableView.reloadRowsAtIndexPaths(modifications.map { NSIndexPath(forRow: $0, inSection: 0) }, - withRowAnimation: .Automatic) - self.tableView.endUpdates() - break - case .Error(let err): - // An error occurred while opening the Realm file on the background worker thread - fatalError("\(err)") - break - } - } - */ -public enum RealmCollectionChange { - /// The initial run of the query has completed (if applicable), and the - /// collection can now be used without performing any blocking work. - case Initial(T) - - /// A write transaction has been committed which either changed which objects - /// are in the collection and/or modified one or more of the objects in the - /// collection. - /// - /// All three of the change arrays are always sorted in ascending order. - /// - /// - parameter deletions: The indices in the previous version of the collection - /// which were removed from this one. - /// - parameter insertions: The indices in the new collection which were added in - /// this version. - /// - parameter modifications: The indices of the objects in the new collection which - /// were modified in this version. - case Update(T, deletions: [Int], insertions: [Int], modifications: [Int]) - - /// If an error occurs, notification blocks are called one time with a - /// `.Error` result and an `NSError` containing details about the error. This can only currently happen if the - /// Realm is opened on a background worker thread to calculate the change set. - case Error(NSError) - - static func fromObjc(value: T, change: RLMCollectionChange?, error: NSError?) -> RealmCollectionChange { - if let error = error { - return .Error(error) - } - if let change = change { - return .Update(value, - deletions: change.deletions as! [Int], - insertions: change.insertions as! [Int], - modifications: change.modifications as! [Int]) - } - return .Initial(value) - } -} - -/** - A homogenous collection of `Object`s which can be retrieved, filtered, sorted, - and operated upon. -*/ -public protocol RealmCollectionType: CollectionType, CustomStringConvertible { - - /// The type of the objects contained in the collection. - associatedtype Element: Object - - - // MARK: Properties - - /// The Realm which manages the collection, or `nil` for unmanaged collections. - var realm: Realm? { get } - - /// Indicates if the collection can no longer be accessed. - /// - /// The collection can no longer be accessed if `invalidate` is called on the `Realm` that manages the collection. - var invalidated: Bool { get } - - /// The number of objects in the collection. - var count: Int { get } - - /// A human-readable description of the objects contained in the collection. - var description: String { get } - - - // MARK: Index Retrieval - - /** - Returns the index of an object in the collection. - - - parameter object: An object. - - - returns: The index of the given object, or `nil` if the object is not in the collection. - */ - func indexOf(object: Element) -> Int? - - /** - Returns the index of the first object matching the predicate. - - - parameter predicate: The predicate to use to filter the objects. - - - returns: The index of the first object that matches, or `nil` if no objects match. - */ - func indexOf(predicate: NSPredicate) -> Int? - - /** - Returns the index of the first object matching the predicate. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: The index of the first object that matches, or `nil` if no objects match. - */ - func indexOf(predicateFormat: String, _ args: AnyObject...) -> Int? - - - // MARK: Filtering - - /** - Returns all objects matching the given predicate in the collection. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: A `Results` containing objects that match the given predicate. - */ - func filter(predicateFormat: String, _ args: AnyObject...) -> Results - - /** - Returns all objects matching the given predicate in the collection. - - - parameter predicate: The predicate to use to filter the objects. - - - returns: A `Results` containing objects that match the given predicate. - */ - func filter(predicate: NSPredicate) -> Results - - - // MARK: Sorting - - /** - Returns a sorted `Results` from the collection. - - - parameter property: The property name to sort by. - - parameter ascending: The direction to sort in. - - - returns: A `Results` sorted by the specified property. - */ - func sorted(property: String, ascending: Bool) -> Results - - /** - Returns a sorted `Results` from the collection. - - - parameter sortDescriptors: A sequence of `SortDescriptor`s to sort by. - - - returns: A `Results` sorted by the specified properties. - */ - func sorted(sortDescriptors: S) -> Results - - - // MARK: Aggregate Operations - - /** - Returns the minimum (lowest) value of the given property among all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The minimum value of the property, or `nil` if the collection is empty. - */ - func min(property: String) -> U? - - /** - Returns the maximum (highest) value of the given property among all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The maximum value of the property, or `nil` if the collection is empty. - */ - func max(property: String) -> U? - - /** - Returns the sum of the values of a given property over all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose values should be summed. - - - returns: The sum of the given property. - */ - func sum(property: String) -> U - - /** - Returns the average value of a given property over all the objects represented by the collection. - - - warning: Only the name of a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose average value should be calculated. - - - returns: The average value of the given property, or `nil` if the collection is empty. - */ - func average(property: String) -> U? - - - // MARK: Key-Value Coding - - /** - Returns an `Array` containing the results of invoking `valueForKey(_:)` with `key` on each of the collection's - objects. - - - parameter key: The name of the property. - - - returns: An `Array` containing the results. - */ - func valueForKey(key: String) -> AnyObject? - - /** - Returns an `Array` containing the results of invoking `valueForKeyPath(_:)` with `keyPath` on each of the - collection's objects. - - - parameter keyPath: The key path to the property. - - - returns: An `Array` containing the results. - */ - func valueForKeyPath(keyPath: String) -> AnyObject? - - /** - Invokes `setValue(_:forKey:)` on each of the collection's objects using the specified `value` and `key`. - - - warning: This method may only be called during a write transaction. - - - parameter value: The object value. - - parameter key: The name of the property. - */ - func setValue(value: AnyObject?, forKey key: String) - - // MARK: Notifications - - /** - Registers a block to be called each time the collection changes. - - The block will be asynchronously called with the initial results, and then - called again after each write transaction which changes either any of the - objects in the collection, or which objects are in the collection. - - The `change` parameter that is passed to the block reports, in the form of indices within the - collection, which of the objects were added, removed, or modified during each write transaction. See the - `RealmCollectionChange` documentation for more information on the change information supplied and an example of how - to use it to update a `UITableView`. - - At the time when the block is called, the collection will be fully - evaluated and up-to-date, and as long as you do not perform a write - transaction on the same thread or explicitly call `realm.refresh()`, - accessing it will never perform blocking work. - - Notifications are delivered via the standard run loop, and so can't be - delivered while the run loop is blocked by other activity. When - notifications can't be delivered instantly, multiple notifications may be - coalesced into a single notification. This can include the notification - with the initial collection. For example, the following code performs a write - transaction immediately after adding the notification block, so there is no - opportunity for the initial notification to be delivered first. As a - result, the initial notification will reflect the state of the Realm after - the write transaction. - - let results = realm.objects(Dog) - print("dogs.count: \(dogs?.count)") // => 0 - let token = dogs.addNotificationBlock { (changes: RealmCollectionChange) in - switch changes { - case .Initial(let dogs): - // Will print "dogs.count: 1" - print("dogs.count: \(dogs.count)") - break - case .Update: - // Will not be hit in this example - break - case .Error: - break - } - } - try! realm.write { - let dog = Dog() - dog.name = "Rex" - person.dogs.append(dog) - } - // end of run loop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `stop()` on the token. - - - warning: This method cannot be called during a write transaction, or when - the containing Realm is read-only. - - - parameter block: The block to be called whenever a change occurs. - - returns: A token which must be retained for as long as you want updates to be delivered. - */ - func addNotificationBlock(block: (RealmCollectionChange) -> Void) -> NotificationToken - - /// :nodoc: - func _addNotificationBlock(block: (RealmCollectionChange>) -> Void) -> NotificationToken -} - -private class _AnyRealmCollectionBase { - typealias Wrapper = AnyRealmCollection - typealias Element = T - var realm: Realm? { fatalError() } - var invalidated: Bool { fatalError() } - var count: Int { fatalError() } - var description: String { fatalError() } - func indexOf(object: Element) -> Int? { fatalError() } - func indexOf(predicate: NSPredicate) -> Int? { fatalError() } - func indexOf(predicateFormat: String, _ args: AnyObject...) -> Int? { fatalError() } - func filter(predicateFormat: String, _ args: AnyObject...) -> Results { fatalError() } - func filter(predicate: NSPredicate) -> Results { fatalError() } - func sorted(property: String, ascending: Bool) -> Results { fatalError() } - func sorted(sortDescriptors: S) -> Results { - fatalError() - } - func min(property: String) -> U? { fatalError() } - func max(property: String) -> U? { fatalError() } - func sum(property: String) -> U { fatalError() } - func average(property: String) -> U? { fatalError() } - subscript(index: Int) -> Element { fatalError() } - func generate() -> RLMGenerator { fatalError() } - var startIndex: Int { fatalError() } - var endIndex: Int { fatalError() } - func valueForKey(key: String) -> AnyObject? { fatalError() } - func valueForKeyPath(keyPath: String) -> AnyObject? { fatalError() } - func setValue(value: AnyObject?, forKey key: String) { fatalError() } - func _addNotificationBlock(block: (RealmCollectionChange) -> Void) - -> NotificationToken { fatalError() } -} - -private final class _AnyRealmCollection: _AnyRealmCollectionBase { - let base: C - init(base: C) { - self.base = base - } - - // TODO (az): copyedit private docstrings - // MARK: Properties - - /// The Realm the objects in this collection belong to, or `nil` if the - /// collection's owning object does not belong to a realm (the collection is - /// standalone). - override var realm: Realm? { return base.realm } - - /// Indicates if the collection can no longer be accessed. - /// - /// The collection can no longer be accessed if `invalidate` is called on the containing `Realm`. - override var invalidated: Bool { return base.invalidated } - - /// Returns the number of objects in this collection. - override var count: Int { return base.count } - - /// Returns a human-readable description of the objects contained in this collection. - override var description: String { return base.description } - - - // MARK: Index Retrieval - - /** - Returns the index of the given object, or `nil` if the object is not in the collection. - - - parameter object: The object whose index is being queried. - - - returns: The index of the given object, or `nil` if the object is not in the collection. - */ - override func indexOf(object: C.Element) -> Int? { return base.indexOf(object) } - - /** - Returns the index of the first object matching the given predicate, - or `nil` no objects match. - - - parameter predicate: The `NSPredicate` used to filter the objects. - - - returns: The index of the first matching object, or `nil` if no objects match. - */ - override func indexOf(predicate: NSPredicate) -> Int? { return base.indexOf(predicate) } - - /** - Returns the index of the first object matching the given predicate, - or `nil` if no objects match. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number - of arguments. - - - returns: The index of the first matching object, or `nil` if no objects match. - */ - override func indexOf(predicateFormat: String, _ args: AnyObject...) -> Int? { - return base.indexOf(NSPredicate(format: predicateFormat, argumentArray: args)) - } - - // MARK: Filtering - - /** - Returns a `Results` containing collection elements that match the given predicate. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number - of arguments. - - - returns: `Results` containing collection elements that match the given predicate. - */ - override func filter(predicateFormat: String, _ args: AnyObject...) -> Results { - return base.filter(NSPredicate(format: predicateFormat, argumentArray: args)) - } - - /** - Returns a `Results` containing collection elements that match the given predicate. - - - parameter predicate: The predicate to use to filter the objects. - - - returns: `Results` containing collection elements that match the given predicate. - */ - override func filter(predicate: NSPredicate) -> Results { return base.filter(predicate) } - - - // MARK: Sorting - - /** - Returns a `Results` containing collection elements sorted by the given property. - - - parameter property: The property name to sort by. - - parameter ascending: The direction to sort by. - - - returns: `Results` containing collection elements sorted by the given property. - */ - override func sorted(property: String, ascending: Bool) -> Results { - return base.sorted(property, ascending: ascending) - } - - /** - Returns a `Results` with elements sorted by the given sort descriptors. - - - parameter sortDescriptors: `SortDescriptor`s to sort by. - - - returns: `Results` with elements sorted by the given sort descriptors. - */ - override func sorted - (sortDescriptors: S) -> Results { - return base.sorted(sortDescriptors) - } - - - // MARK: Aggregate Operations - - /** - Returns the minimum value of the given property. - - - warning: Only names of properties of a type conforming to the `MinMaxType` protocol can be used. - - - parameter property: The name of a property conforming to `MinMaxType` to look for a minimum on. - - - returns: The minimum value of the property amongst objects in the collection, or `nil` if the - collection is empty. - */ - override func min(property: String) -> U? { return base.min(property) } - - /** - Returns the maximum value of the given property. - - - warning: Only names of properties of a type conforming to the `MinMaxType` protocol can be used. - - - parameter property: The name of a property conforming to `MinMaxType` to look for a maximum on. - - - returns: The maximum value of the property amongst objects in the collection, or `nil` if the - collection is empty. - */ - override func max(property: String) -> U? { return base.max(property) } - - /** - Returns the sum of the given property for objects in the collection. - - - warning: Only names of properties of a type conforming to the `AddableType` protocol can be used. - - - parameter property: The name of a property conforming to `AddableType` to calculate sum on. - - - returns: The sum of the given property over all objects in the collection. - */ - override func sum(property: String) -> U { return base.sum(property) } - - /** - Returns the average of the given property for objects in the collection. - - - warning: Only names of properties of a type conforming to the `AddableType` protocol can be used. - - - parameter property: The name of a property conforming to `AddableType` to calculate average on. - - - returns: The average of the given property over all objects in the collection, or `nil` if the - collection is empty. - */ - override func average(property: String) -> U? { return base.average(property) } - - - // MARK: Sequence Support - - /** - Returns the object at the given `index`. - - - parameter index: The index. - - - returns: The object at the given `index`. - */ - override subscript(index: Int) -> C.Element { - // FIXME: it should be possible to avoid this force-casting - return unsafeBitCast(base[index as! C.Index], C.Element.self) - } - - /// Returns a `GeneratorOf` that yields successive elements in the collection. - override func generate() -> RLMGenerator { - // FIXME: it should be possible to avoid this force-casting - return base.generate() as! RLMGenerator - } - - - // MARK: Collection Support - - /// The position of the first element in a non-empty collection. - /// Identical to endIndex in an empty collection. - override var startIndex: Int { - // FIXME: it should be possible to avoid this force-casting - return base.startIndex as! Int - } - - /// The collection's "past the end" position. - /// endIndex is not a valid argument to subscript, and is always reachable from startIndex by - /// zero or more applications of successor(). - override var endIndex: Int { - // FIXME: it should be possible to avoid this force-casting - return base.endIndex as! Int - } - - - // MARK: Key-Value Coding - - /** - Returns an Array containing the results of invoking `valueForKey(_:)` using key on each of the collection's objects. - - - parameter key: The name of the property. - - - returns: Array containing the results of invoking `valueForKey(_:)` using key on each of the collection's objects. - */ - override func valueForKey(key: String) -> AnyObject? { return base.valueForKey(key) } - - /** - Returns an Array containing the results of invoking `valueForKeyPath(_:)` using keyPath on each of the - collection's objects. - - - parameter keyPath: The key path to the property. - - - returns: Array containing the results of invoking `valueForKeyPath(_:)` using keyPath on each of the - collection's objects. - */ - override func valueForKeyPath(keyPath: String) -> AnyObject? { return base.valueForKeyPath(keyPath) } - - /** - Invokes `setValue(_:forKey:)` on each of the collection's objects using the specified value and key. - - - warning: This method can only be called during a write transaction. - - - parameter value: The object value. - - parameter key: The name of the property. - */ - override func setValue(value: AnyObject?, forKey key: String) { base.setValue(value, forKey: key) } - - // MARK: Notifications - - /// :nodoc: - override func _addNotificationBlock(block: (RealmCollectionChange) -> Void) - -> NotificationToken { return base._addNotificationBlock(block) } -} - -/** - A type-erased `RealmCollectionType`. - - Instances of `RealmCollectionType` forward operations to an opaque underlying collection having the same `Element` - type. - */ -public final class AnyRealmCollection: RealmCollectionType { - - /// The type of the objects contained in the collection. - public typealias Element = T - private let base: _AnyRealmCollectionBase - - /// Creates an `AnyRealmCollection` wrapping `base`. - public init(_ base: C) { - self.base = _AnyRealmCollection(base: base) - } - - // MARK: Properties - - /// The Realm which manages this collection, or `nil` if the collection is unmanaged. - public var realm: Realm? { return base.realm } - - /// Indicates if the collection can no longer be accessed. - /// - /// The collection can no longer be accessed if `invalidate` is called on the containing `realm`. - public var invalidated: Bool { return base.invalidated } - - /// The number of objects in the collection. - public var count: Int { return base.count } - - /// A human-readable description of the objects contained in the collection. - public var description: String { return base.description } - - - // MARK: Index Retrieval - - /** - Returns the index of an object in the collection. - - - parameter object: An object. - - - returns: The index of the given object, or `nil` if the object is not in the collection. - */ - public func indexOf(object: Element) -> Int? { return base.indexOf(object) } - - /** - Returns the index of the first object matching the predicate. - - - parameter predicate: The predicate to use to filter the objects. - - - returns: The index of the first object that matches, or `nil` if no objects match. - */ - public func indexOf(predicate: NSPredicate) -> Int? { return base.indexOf(predicate) } - - /** - Returns the index of the first object matching the predicate. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: The index of the first object that matches, or `nil` if no objects match. - */ - public func indexOf(predicateFormat: String, _ args: AnyObject...) -> Int? { - return base.indexOf(NSPredicate(format: predicateFormat, argumentArray: args)) - } - - // MARK: Filtering - - /** - Returns all objects matching the given predicate in the collection. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: A `Results` containing objects that match the given predicate. - */ - public func filter(predicateFormat: String, _ args: AnyObject...) -> Results { - return base.filter(NSPredicate(format: predicateFormat, argumentArray: args)) - } - - /** - Returns all objects matching the given predicate in the collection. - - - parameter predicate: The predicate to use to filter the objects. - - - returns: A `Results` containing objects that match the given predicate. - */ - public func filter(predicate: NSPredicate) -> Results { return base.filter(predicate) } - - - // MARK: Sorting - - /** - Returns a sorted `Results` from the collection. - - - parameter property: The property name to sort by. - - parameter ascending: The direction to sort in. - - - returns: A `Results` sorted by the specified property. - */ - public func sorted(property: String, ascending: Bool) -> Results { - return base.sorted(property, ascending: ascending) - } - - /** - Returns a sorted `Results` from the collection. - - - parameter sortDescriptors: A sequence of `SortDescriptor`s to sort by. - - - returns: A `Results` sorted by the specified properties. - */ - public func sorted - (sortDescriptors: S) -> Results { - return base.sorted(sortDescriptors) - } - - - // MARK: Aggregate Operations - - /** - Returns the minimum (lowest) value of the given property among all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The minimum value of the property, or `nil` if the collection is empty. - */ - public func min(property: String) -> U? { return base.min(property) } - - /** - Returns the maximum (highest) value of the given property among all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The maximum value of the property, or `nil` if the collection is empty. - */ - public func max(property: String) -> U? { return base.max(property) } - - /** - Returns the sum of the values of a given property over all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose values should be summed. - - - returns: The sum of the given property. - */ - public func sum(property: String) -> U { return base.sum(property) } - - /** - Returns the average value of a given property over all the objects represented by the collection. - - - warning: Only the name of a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose average value should be calculated. - - - returns: The average value of the given property, or `nil` if the collection is empty. - */ - public func average(property: String) -> U? { return base.average(property) } - - - // MARK: Sequence Support - - /** - Returns the object at the given `index`. - - - parameter index: The index. - - - returns: The object at the given `index`. - */ - public subscript(index: Int) -> T { return base[index] } - - /// Returns a `GeneratorOf` that yields successive elements in the collection. - public func generate() -> RLMGenerator { return base.generate() } - - - // MARK: Collection Support - - /// The position of the first element in a non-empty collection. - /// Identical to `endIndex` in an empty collection. - public var startIndex: Int { return base.startIndex } - - /// The collection's "past the end" position. - /// `endIndex` is not a valid argument to `subscript`, and is always reachable from `startIndex` by - /// zero or more applications of `successor()`. - public var endIndex: Int { return base.endIndex } - - - // MARK: Key-Value Coding - - /** - Returns an `Array` containing the results of invoking `valueForKey(_:)` with `key` on each of the collection's - objects. - - - parameter key: The name of the property. - - - returns: An `Array` containing the results. - */ - public func valueForKey(key: String) -> AnyObject? { return base.valueForKey(key) } - - /** - Returns an `Array` containing the results of invoking `valueForKeyPath(_:)` with `keyPath` on each of the - collection's objects. - - - parameter keyPath: The key path to the property. - - - returns: An `Array` containing the results. - */ - public func valueForKeyPath(keyPath: String) -> AnyObject? { return base.valueForKeyPath(keyPath) } - - /** - Invokes `setValue(_:forKey:)` on each of the collection's objects using the specified `value` and `key`. - - - warning: This method may only be called during a write transaction. - - - parameter value: The object value. - - parameter key: The name of the property. - */ - public func setValue(value: AnyObject?, forKey key: String) { base.setValue(value, forKey: key) } - - // MARK: Notifications - - /** - Registers a block to be called each time the collection changes. - - The block will be asynchronously called with the initial results, and then - called again after each write transaction which changes either any of the - objects in the collection, or which objects are in the collection. - - The `change` parameter that is passed to the block reports, in the form of indices within the - collection, which of the objects were added, removed, or modified during each write transaction. See the - `RealmCollectionChange` documentation for more information on the change information supplied and an example of how - to use it to update a `UITableView`. - - At the time when the block is called, the collection will be fully - evaluated and up-to-date, and as long as you do not perform a write - transaction on the same thread or explicitly call `realm.refresh()`, - accessing it will never perform blocking work. - - Notifications are delivered via the standard run loop, and so can't be - delivered while the run loop is blocked by other activity. When - notifications can't be delivered instantly, multiple notifications may be - coalesced into a single notification. This can include the notification - with the initial collection. For example, the following code performs a write - transaction immediately after adding the notification block, so there is no - opportunity for the initial notification to be delivered first. As a - result, the initial notification will reflect the state of the Realm after - the write transaction. - - let results = realm.objects(Dog) - print("dogs.count: \(dogs?.count)") // => 0 - let token = dogs.addNotificationBlock { (changes: RealmCollectionChange) in - switch changes { - case .Initial(let dogs): - // Will print "dogs.count: 1" - print("dogs.count: \(dogs.count)") - break - case .Update: - // Will not be hit in this example - break - case .Error: - break - } - } - try! realm.write { - let dog = Dog() - dog.name = "Rex" - person.dogs.append(dog) - } - // end of run loop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `stop()` on the token. - - - warning: This method cannot be called during a write transaction, or when - the containing Realm is read-only. - - - parameter block: The block to be called whenever a change occurs. - - returns: A token which must be retained for as long as you want updates to be delivered. - */ - public func addNotificationBlock(block: (RealmCollectionChange) -> ()) - -> NotificationToken { return base._addNotificationBlock(block) } - - /// :nodoc: - public func _addNotificationBlock(block: (RealmCollectionChange) -> ()) - -> NotificationToken { return base._addNotificationBlock(block) } -} diff --git a/Pods/RealmSwift/RealmSwift/RealmConfiguration.swift b/Pods/RealmSwift/RealmSwift/RealmConfiguration.swift deleted file mode 100644 index f4972cd5..00000000 --- a/Pods/RealmSwift/RealmSwift/RealmConfiguration.swift +++ /dev/null @@ -1,203 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm -import Realm.Private - -extension Realm { - /** - A `Configuration` instance describes the different options used to - create an instance of a Realm. - - `Configuration` instances are just plain Swift structs. Unlike `Realm`s - and `Object`s, they can be freely shared between threads as long as you do not - mutate them. - - Creating configuration values for class subsets (by setting the - `objectClasses` property) can be expensive. Because of this, you will normally want to - cache and reuse a single configuration value for each distinct configuration rather than - creating a new value each time you open a Realm. - */ - public struct Configuration { - - // MARK: Default Configuration - - /// Returns the default configuration used to create Realms when no other - /// configuration is explicitly specified (i.e. `Realm()`). - public static var defaultConfiguration: Configuration { - get { - return fromRLMRealmConfiguration(RLMRealmConfiguration.defaultConfiguration()) - } - set { - RLMRealmConfiguration.setDefaultConfiguration(newValue.rlmConfiguration) - } - } - - // MARK: Initialization - - /** - Initializes a `Realm.Configuration`, suitable for creating new `Realm` instances. - - - parameter fileURL: The local URL to the Realm file. - - parameter inMemoryIdentifier: A string used to identify a particular in-memory Realm. - - parameter encryptionKey: An optional 64-byte key to use to encrypt the data. - - parameter readOnly: Whether the Realm is read-only (must be true for read-only files). - - parameter schemaVersion: The current schema version. - - parameter migrationBlock: The block which migrates the Realm to the current version. - - parameter deleteRealmIfMigrationNeeded: If `true`, recreate the Realm file with the provided - schema if a migration is required. - - parameter objectTypes: The subset of `Object` subclasses persisted in the Realm. - */ - public init(fileURL: NSURL? = NSURL(fileURLWithPath: RLMRealmPathForFile("default.realm"), isDirectory: false), - inMemoryIdentifier: String? = nil, - encryptionKey: NSData? = nil, - readOnly: Bool = false, - schemaVersion: UInt64 = 0, - migrationBlock: MigrationBlock? = nil, - deleteRealmIfMigrationNeeded: Bool = false, - objectTypes: [Object.Type]? = nil) { - self.fileURL = fileURL - if inMemoryIdentifier != nil { - self.inMemoryIdentifier = inMemoryIdentifier - } - self.encryptionKey = encryptionKey - self.readOnly = readOnly - self.schemaVersion = schemaVersion - self.migrationBlock = migrationBlock - self.deleteRealmIfMigrationNeeded = deleteRealmIfMigrationNeeded - self.objectTypes = objectTypes - } - - // MARK: Configuration Properties - - /// The local URL of the Realm file. Mutually exclusive with `inMemoryIdentifier`. - public var fileURL: NSURL? { - set { - _inMemoryIdentifier = nil - _path = newValue?.path - } - get { - return _path.map { NSURL(fileURLWithPath: $0) } - } - } - - private var _path: String? - - /// A string used to identify a particular in-memory Realm. Mutually exclusive with `path`. - public var inMemoryIdentifier: String? { - set { - _path = nil - _inMemoryIdentifier = newValue - } - get { - return _inMemoryIdentifier - } - } - - private var _inMemoryIdentifier: String? = nil - - /// A 64-byte key to use to encrypt the data, or `nil` if encryption is not enabled. - public var encryptionKey: NSData? = nil - - /// Whether the Realm is read-only (must be `true` for read-only files). - public var readOnly: Bool = false - - /// The current schema version. - public var schemaVersion: UInt64 = 0 - - /// The block which migrates the Realm to the current version. - public var migrationBlock: MigrationBlock? = nil - - /** - Whether to recreate the Realm file with the provided schema if a migration is required. - This is the case when the stored schema differs from the provided schema or - the stored schema version differs from the version on this configuration. - Setting this property to `true` deletes the file if a migration would otherwise be required or executed. - - - note: Setting this property to `true` doesn't disable file format migrations. - */ - public var deleteRealmIfMigrationNeeded: Bool = false - - /// The classes persisted in the Realm. - public var objectTypes: [Object.Type]? { - set { - self.customSchema = newValue.map { RLMSchema(objectClasses: $0) } - } - get { - return self.customSchema.map { $0.objectSchema.map { $0.objectClass as! Object.Type } } - } - } - - /// A custom schema to use for the Realm. - private var customSchema: RLMSchema? = nil - - /// If `true`, disables automatic format upgrades when accessing the Realm. - internal var disableFormatUpgrade: Bool = false - - // MARK: Private Methods - - internal var rlmConfiguration: RLMRealmConfiguration { - let configuration = RLMRealmConfiguration() - if fileURL != nil { - configuration.fileURL = self.fileURL - } else if inMemoryIdentifier != nil { - configuration.inMemoryIdentifier = self.inMemoryIdentifier - } else { - fatalError("A Realm Configuration must specify a path or an in-memory identifier.") - } - configuration.encryptionKey = self.encryptionKey - configuration.readOnly = self.readOnly - configuration.schemaVersion = self.schemaVersion - configuration.migrationBlock = self.migrationBlock.map { accessorMigrationBlock($0) } - configuration.deleteRealmIfMigrationNeeded = self.deleteRealmIfMigrationNeeded - configuration.customSchema = self.customSchema - configuration.disableFormatUpgrade = self.disableFormatUpgrade - return configuration - } - - internal static func fromRLMRealmConfiguration(rlmConfiguration: RLMRealmConfiguration) -> Configuration { - var configuration = Configuration() - configuration._path = rlmConfiguration.fileURL?.path - configuration._inMemoryIdentifier = rlmConfiguration.inMemoryIdentifier - configuration.encryptionKey = rlmConfiguration.encryptionKey - configuration.readOnly = rlmConfiguration.readOnly - configuration.schemaVersion = rlmConfiguration.schemaVersion - configuration.migrationBlock = rlmConfiguration.migrationBlock.map { rlmMigration in - return { migration, schemaVersion in - rlmMigration(migration.rlmMigration, schemaVersion) - } - } - configuration.deleteRealmIfMigrationNeeded = rlmConfiguration.deleteRealmIfMigrationNeeded - configuration.customSchema = rlmConfiguration.customSchema - configuration.disableFormatUpgrade = rlmConfiguration.disableFormatUpgrade - return configuration - } - } -} - -// MARK: CustomStringConvertible - -extension Realm.Configuration: CustomStringConvertible { - /// Returns a human-readable description of the configuration. - public var description: String { - return gsub("\\ARLMRealmConfiguration", - template: "Realm.Configuration", - string: rlmConfiguration.description) ?? "" - } -} diff --git a/Pods/RealmSwift/RealmSwift/Results.swift b/Pods/RealmSwift/RealmSwift/Results.swift deleted file mode 100644 index a24145bc..00000000 --- a/Pods/RealmSwift/RealmSwift/Results.swift +++ /dev/null @@ -1,420 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -// MARK: MinMaxType - -/// Types which can be used for min()/max(). -public protocol MinMaxType {} -extension Double: MinMaxType {} -extension Float: MinMaxType {} -extension Int: MinMaxType {} -extension Int8: MinMaxType {} -extension Int16: MinMaxType {} -extension Int32: MinMaxType {} -extension Int64: MinMaxType {} -extension NSDate: MinMaxType {} - -// MARK: AddableType - -/// Types which can be used for average()/sum(). -public protocol AddableType {} -extension Double: AddableType {} -extension Float: AddableType {} -extension Int: AddableType {} -extension Int8: AddableType {} -extension Int16: AddableType {} -extension Int32: AddableType {} -extension Int64: AddableType {} - -/// :nodoc: -/// Internal class. Do not use directly. -public class ResultsBase: NSObject, NSFastEnumeration { - internal let rlmResults: RLMResults - - /// Returns a human-readable description of the objects contained in these results. - public override var description: String { - let type = "Results<\(rlmResults.objectClassName)>" - return gsub("RLMResults <0x[a-z0-9]+>", template: type, string: rlmResults.description) ?? type - } - - // MARK: Initializers - - internal init(_ rlmResults: RLMResults) { - self.rlmResults = rlmResults - } - - // MARK: Fast Enumeration - - public func countByEnumeratingWithState(state: UnsafeMutablePointer, - objects buffer: AutoreleasingUnsafeMutablePointer, - count len: Int) -> Int { - return Int(rlmResults.countByEnumeratingWithState(state, - objects: buffer, - count: UInt(len))) - } -} - -/** - `Results` is an auto-updating container type in Realm returned from object queries. - - `Results` can be queried with the same predicates as `List`, and you can chain - queries to further filter query results. - - `Results` always reflect the current state of the Realm on the current thread, - including during write transactions on the current thread. The one exception to - this is when using `for...in` enumeration, which will always enumerate over the - objects which matched the query when the enumeration is begun, even if - some of them are deleted or modified to be excluded by the filter during the - enumeration. - - `Results` are lazily evaluated the first time they are accessed; they only - run queries when the result of the query is requested. This means that - chaining several temporary `Results` to sort and filter your data does not - perform any extra work processing the intermediate state. - - Once the results have been evaluated or a notification block has been added, - the results are eagerly kept up-to-date, with the work done to keep them - up-to-date done on a background thread whenever possible. - - `Results` cannot be directly instantiated. -*/ -public final class Results: ResultsBase { - - /// The type of the objects contained in the collection. - public typealias Element = T - - // MARK: Properties - - /// The Realm which manages this results collection. Note that this property will never return `nil`. - public var realm: Realm? { return Realm(rlmResults.realm) } - - /** - Indicates if the results collection is no longer valid. - - The results collection becomes invalid if `invalidate` is called on the containing `realm`. - An invalidated results collection can be accessed, but will always be empty. - */ - public var invalidated: Bool { return rlmResults.invalidated } - - /// The number of objects in the results collection. - public var count: Int { return Int(rlmResults.count) } - - // MARK: Initializers - - internal override init(_ rlmResults: RLMResults) { - super.init(rlmResults) - } - - // MARK: Index Retrieval - - /** - Returns the index of an object in the results collection. - - - parameter object: An object. - - - returns: The index of the given object, or `nil` if the object is not in the results collection. - */ - public func indexOf(object: T) -> Int? { - return notFoundToNil(rlmResults.indexOfObject(unsafeBitCast(object, RLMObject.self))) - } - - /** - Returns the index of the first object matching the predicate. - - - parameter predicate: The predicate with which to filter the objects. - - - returns: The index of the first object that matches, or `nil` if no objects match. - */ - public func indexOf(predicate: NSPredicate) -> Int? { - return notFoundToNil(rlmResults.indexOfObjectWithPredicate(predicate)) - } - - /** - Returns the index of the first object matching the predicate. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: The index of the first object that matches, or `nil` if no objects match. - */ - public func indexOf(predicateFormat: String, _ args: AnyObject...) -> Int? { - return notFoundToNil(rlmResults.indexOfObjectWithPredicate(NSPredicate(format: predicateFormat, - argumentArray: args))) - } - - // MARK: Object Retrieval - - /** - Returns the object at the given `index`. - - - parameter index: An index. - - - returns: The object at the given `index`. - */ - public subscript(index: Int) -> T { - get { - throwForNegativeIndex(index) - return unsafeBitCast(rlmResults[UInt(index)], T.self) - } - } - - /// Returns the first object in the results collection, or `nil` if the collection is empty. - public var first: T? { return unsafeBitCast(rlmResults.firstObject(), Optional.self) } - - /// Returns the last object in the results collection, or `nil` if the collection is empty. - public var last: T? { return unsafeBitCast(rlmResults.lastObject(), Optional.self) } - - // MARK: KVC - - /** - Returns an `Array` containing the results of invoking `valueForKey(_:)` with `key` on each of the results - collection's objects. - - - parameter key: The name of the property. - - - returns: An `Array` containing the results. - */ - public override func valueForKey(key: String) -> AnyObject? { - return rlmResults.valueForKey(key) - } - - /** - Returns an `Array` containing the results of invoking `valueForKeyPath(_:)` with `keyPath` on each of the results - collection's objects. - - - parameter keyPath: The key path to the property. - - - returns: An `Array` containing the results. - */ - public override func valueForKeyPath(keyPath: String) -> AnyObject? { - return rlmResults.valueForKeyPath(keyPath) - } - - /** - Invokes `setValue(_:forKey:)` on each of the results collection's objects using the specified `value` and `key`. - - - warning: This method may only be called during a write transaction. - - - parameter value: The object value. - - parameter key: The name of the property. - */ - public override func setValue(value: AnyObject?, forKey key: String) { - return rlmResults.setValue(value, forKey: key) - } - - // MARK: Filtering - - /** - Returns all objects matching the given predicate in the collection. - - - parameter predicateFormat: A predicate format string, optionally followed by a variable number of arguments. - - - returns: A `Results` containing objects that match the given predicate. - */ - public func filter(predicateFormat: String, _ args: AnyObject...) -> Results { - return Results(rlmResults.objectsWithPredicate(NSPredicate(format: predicateFormat, argumentArray: args))) - } - - /** - Returns all objects matching the given predicate in the collection. - - - parameter predicate: The predicate with which to filter the objects. - - - returns: A `Results` containing objects that match the given predicate. - */ - public func filter(predicate: NSPredicate) -> Results { - return Results(rlmResults.objectsWithPredicate(predicate)) - } - - // MARK: Sorting - - /** - Returns a sorted `Results` from the collection. - - - parameter property: The property name to sort by. - - parameter ascending: The direction to sort in. - - - returns: A `Results` sorted by the specified property. - */ - public func sorted(property: String, ascending: Bool = true) -> Results { - return sorted([SortDescriptor(property: property, ascending: ascending)]) - } - - /** - Returns a sorted `Results` from the collection. - - - parameter sortDescriptors: A sequence of `SortDescriptor`s to sort by. - - - returns: A `Results` sorted by the specified properties. - */ - public func sorted(sortDescriptors: S) -> Results { - return Results(rlmResults.sortedResultsUsingDescriptors(sortDescriptors.map { $0.rlmSortDescriptorValue })) - } - - // MARK: Aggregate Operations - - /** - Returns the minimum (lowest) value of the given property among all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The minimum value of the property, or `nil` if the collection is empty. - */ - public func min(property: String) -> U? { - return rlmResults.minOfProperty(property) as! U? - } - - /** - Returns the maximum (highest) value of the given property among all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `MinMaxType` protocol can be specified. - - - parameter property: The name of a property whose minimum value is desired. - - - returns: The maximum value of the property, or `nil` if the collection is empty. - */ - public func max(property: String) -> U? { - return rlmResults.maxOfProperty(property) as! U? - } - - /** - Returns the sum of the values of a given property over all the objects represented by the collection. - - - warning: Only a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose values should be summed. - - - returns: The sum of the given property. - */ - public func sum(property: String) -> U { - return rlmResults.sumOfProperty(property) as AnyObject as! U - } - - /** - Returns the average value of a given property over all the objects represented by the collection. - - - warning: Only the name of a property whose type conforms to the `AddableType` protocol can be specified. - - - parameter property: The name of a property whose average value should be calculated. - - - returns: The average value of the given property, or `nil` if the collection is empty. - */ - public func average(property: String) -> U? { - return rlmResults.averageOfProperty(property) as! U? - } - - // MARK: Notifications - - /** - Registers a block to be called each time the results collection changes. - - The block will be asynchronously called with the initial results, and then - called again after each write transaction which changes either any of the - objects in the collection, or which objects are in the collection. - - The `change` parameter that is passed to the block reports, in the form of indices within the - collection, which of the objects were added, removed, or modified during each write transaction. See the - `RealmCollectionChange` documentation for more information on the change information supplied and an example of how - to use it to update a `UITableView`. - - At the time when the block is called, the collection will be fully - evaluated and up-to-date, and as long as you do not perform a write - transaction on the same thread or explicitly call `realm.refresh()`, - accessing it will never perform blocking work. - - Notifications are delivered via the standard run loop, and so can't be - delivered while the run loop is blocked by other activity. When - notifications can't be delivered instantly, multiple notifications may be - coalesced into a single notification. This can include the notification - with the initial collection. For example, the following code performs a write - transaction immediately after adding the notification block, so there is no - opportunity for the initial notification to be delivered first. As a - result, the initial notification will reflect the state of the Realm after - the write transaction. - - let dogs = realm.objects(Dog) - print("dogs.count: \(dogs?.count)") // => 0 - let token = dogs.addNotificationBlock { (changes: RealmCollectionChange) in - switch changes { - case .Initial(let dogs): - // Will print "dogs.count: 1" - print("dogs.count: \(dogs.count)") - break - case .Update: - // Will not be hit in this example - break - case .Error: - break - } - } - try! realm.write { - let dog = Dog() - dog.name = "Rex" - person.dogs.append(dog) - } - // end of run loop execution context - - You must retain the returned token for as long as you want updates to continue - to be sent to the block. To stop receiving updates, call `stop()` on the token. - - - warning: This method cannot be called during a write transaction, or when - the containing Realm is read-only. - - - parameter block: The block to be called whenever a change occurs. - - returns: A token which must be retained for as long as you want updates to be delivered. - */ - @warn_unused_result(message="You must hold on to the NotificationToken returned from addNotificationBlock") - public func addNotificationBlock(block: (RealmCollectionChange -> Void)) -> NotificationToken { - return rlmResults.addNotificationBlock { results, change, error in - block(RealmCollectionChange.fromObjc(self, change: change, error: error)) - } - } -} - -extension Results: RealmCollectionType { - // MARK: Sequence Support - - /// Returns a `GeneratorOf` that yields successive elements in the results. - public func generate() -> RLMGenerator { - return RLMGenerator(collection: rlmResults) - } - - // MARK: Collection Support - - /// The position of the first element in a non-empty collection. - /// Identical to `endIndex` in an empty collection. - public var startIndex: Int { return 0 } - - /// The collection's "past the end" position. - /// `endIndex` is not a valid argument to `subscript`, and is always reachable from `startIndex` by - /// zero or more applications of `successor()`. - public var endIndex: Int { return count } - - /// :nodoc: - public func _addNotificationBlock(block: (RealmCollectionChange>) -> Void) -> - NotificationToken { - let anyCollection = AnyRealmCollection(self) - return rlmResults.addNotificationBlock { _, change, error in - block(RealmCollectionChange.fromObjc(anyCollection, change: change, error: error)) - } - } -} diff --git a/Pods/RealmSwift/RealmSwift/Schema.swift b/Pods/RealmSwift/RealmSwift/Schema.swift deleted file mode 100644 index e655df28..00000000 --- a/Pods/RealmSwift/RealmSwift/Schema.swift +++ /dev/null @@ -1,72 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2014 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -/** - `Schema` instances represent collections of model object schemas persisted to a Realm. - - When using Realm, `Schema` instances allow performing migrations and - introspecting the database's schema. - - Schemas map to collections of tables in the core database. -*/ -public final class Schema: CustomStringConvertible { - - // MARK: Properties - - internal let rlmSchema: RLMSchema - - /** - An array of `ObjectSchema`s for all object types in the Realm. - - This property is intended to be used during migrations for dynamic introspection. - */ - public var objectSchema: [ObjectSchema] { - return rlmSchema.objectSchema.map(ObjectSchema.init) - } - - /// Returns a human-readable description of the object schemas contained in this schema. - public var description: String { return rlmSchema.description } - - // MARK: Initializers - - internal init(_ rlmSchema: RLMSchema) { - self.rlmSchema = rlmSchema - } - - // MARK: ObjectSchema Retrieval - - /// Looks up and returns an `ObjectSchema` for the given class name in the Realm, if it exists. - public subscript(className: String) -> ObjectSchema? { - if let rlmObjectSchema = rlmSchema.schemaForClassName(className) { - return ObjectSchema(rlmObjectSchema) - } - return nil - } -} - -// MARK: Equatable - -extension Schema: Equatable {} - -/// Returns a Boolean value that indicates whether two `Schema` instances are equivalent. -public func == (lhs: Schema, rhs: Schema) -> Bool { // swiftlint:disable:this valid_docs - return lhs.rlmSchema.isEqualToSchema(rhs.rlmSchema) -} diff --git a/Pods/RealmSwift/RealmSwift/SortDescriptor.swift b/Pods/RealmSwift/RealmSwift/SortDescriptor.swift deleted file mode 100644 index 9390401c..00000000 --- a/Pods/RealmSwift/RealmSwift/SortDescriptor.swift +++ /dev/null @@ -1,121 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -/** - A `SortDescriptor` stores a property name and a sort order for use with - `sorted(sortDescriptors:)`. It is similar to `NSSortDescriptor`, but supports - only the subset of functionality which can be efficiently run by Realm's query - engine. - */ -public struct SortDescriptor { - - // MARK: Properties - - /// The name of the property which the sort descriptor orders results by. - public let property: String - - /// Whether the descriptor sorts in ascending or descending order. - public let ascending: Bool - - /// Converts the receiver to an `RLMSortDescriptor` - internal var rlmSortDescriptorValue: RLMSortDescriptor { - return RLMSortDescriptor(property: property, ascending: ascending) - } - - // MARK: Initializers - - /** - Initializes a sort descriptor with the given property and sort order values. - - - parameter property: The name of the property which the sort descriptor orders results by. - - parameter ascending: Whether the descriptor sorts in ascending or descending order. - */ - public init(property: String, ascending: Bool = true) { - self.property = property - self.ascending = ascending - } - - // MARK: Functions - - /// Returns a copy of the sort descriptor with the sort order reversed. - public func reversed() -> SortDescriptor { - return SortDescriptor(property: property, ascending: !ascending) - } -} - -// MARK: CustomStringConvertible - -extension SortDescriptor: CustomStringConvertible { - /// Returns a human-readable description of the sort descriptor. - public var description: String { - let direction = ascending ? "ascending" : "descending" - return "SortDescriptor (property: \(property), direction: \(direction))" - } -} - -// MARK: Equatable - -extension SortDescriptor: Equatable {} - -/// Returns whether the two sort descriptors are equal. -public func == (lhs: SortDescriptor, rhs: SortDescriptor) -> Bool { - // swiftlint:disable:previous valid_docs - return lhs.property == rhs.property && - lhs.ascending == lhs.ascending -} - -// MARK: StringLiteralConvertible - -extension SortDescriptor: StringLiteralConvertible { - - /// `StringLiteralType`. Required for `StringLiteralConvertible` conformance. - public typealias UnicodeScalarLiteralType = StringLiteralType - - /// `StringLiteralType`. Required for `StringLiteralConvertible` conformance. - public typealias ExtendedGraphemeClusterLiteralType = StringLiteralType - - /** - Creates a `SortDescriptor` from a `UnicodeScalarLiteralType`. - - - parameter unicodeScalarLiteral: Property name literal. - */ - public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) { - self.init(property: value) - } - - /** - Creates a `SortDescriptor` from an `ExtendedGraphemeClusterLiteralType`. - - - parameter extendedGraphemeClusterLiteral: Property name literal. - */ - public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) { - self.init(property: value) - } - - /** - Creates a `SortDescriptor` from a `StringLiteralType`. - - - parameter stringLiteral: Property name literal. - */ - public init(stringLiteral value: StringLiteralType) { - self.init(property: value) - } -} diff --git a/Pods/RealmSwift/RealmSwift/SwiftVersion.swift b/Pods/RealmSwift/RealmSwift/SwiftVersion.swift deleted file mode 100644 index d5f8cfd7..00000000 --- a/Pods/RealmSwift/RealmSwift/SwiftVersion.swift +++ /dev/null @@ -1 +0,0 @@ -let swiftLanguageVersion = "2.2" diff --git a/Pods/RealmSwift/RealmSwift/Util.swift b/Pods/RealmSwift/RealmSwift/Util.swift deleted file mode 100644 index 9d2ce752..00000000 --- a/Pods/RealmSwift/RealmSwift/Util.swift +++ /dev/null @@ -1,51 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// -// Copyright 2015 Realm Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////// - -import Foundation -import Realm - -// MARK: Internal Helpers - -internal func notFoundToNil(index: UInt) -> Int? { - if index == UInt(NSNotFound) { - return nil - } - return Int(index) -} - -internal func throwRealmException(message: String, userInfo: [String:AnyObject] = [:]) { - NSException(name: RLMExceptionName, reason: message, userInfo: userInfo).raise() -} - -internal func throwForNegativeIndex(int: Int, parameterName: String = "index") { - if int < 0 { - throwRealmException("Cannot pass a negative value for '\(parameterName)'.") - } -} - -internal func gsub(pattern: String, template: String, string: String, error: NSErrorPointer = nil) -> String? { - do { - let regex = try NSRegularExpression(pattern: pattern, options: []) - return regex.stringByReplacingMatchesInString(string, options: [], - range: NSRange(location: 0, length: string.utf16.count), - withTemplate: template) - } catch { - // no-op - } - return nil -} diff --git a/Pods/RealmSwift/build.sh b/Pods/RealmSwift/build.sh deleted file mode 100755 index cbeaa225..00000000 --- a/Pods/RealmSwift/build.sh +++ /dev/null @@ -1,1289 +0,0 @@ -#!/bin/sh - -################################################################################## -# Custom build tool for Realm Objective-C binding. -# -# (C) Copyright 2011-2015 by realm.io. -################################################################################## - -# Warning: pipefail is not a POSIX compatible option, but on OS X it works just fine. -# OS X uses a POSIX complain version of bash as /bin/sh, but apparently it does -# not strip away this feature. Also, this will fail if somebody forces the script -# to be run with zsh. -set -o pipefail -set -e - -# You can override the version of the core library -: ${REALM_CORE_VERSION:=1.0.1} # set to "current" to always use the current build - -# You can override the xcmode used -: ${XCMODE:=xcodebuild} # must be one of: xcodebuild (default), xcpretty, xctool - -# Provide a fallback value for TMPDIR, relevant for Xcode Bots -: ${TMPDIR:=$(getconf DARWIN_USER_TEMP_DIR)} - -PATH=/usr/libexec:$PATH - -if ! [ -z "${JENKINS_HOME}" ]; then - XCPRETTY_PARAMS="--no-utf --report junit --output build/reports/junit.xml" - CODESIGN_PARAMS="CODE_SIGN_IDENTITY= CODE_SIGNING_REQUIRED=NO" -fi - -export REALM_SKIP_DEBUGGER_CHECKS=YES - -usage() { -cat < 120 seconds for the tests to - # build (). Work around this by having the test phases intentionally - # exit after they finish building the first time, then run the tests for real. - ( REALM_EXIT_AFTER_BUILDING_TESTS=YES xc "$1" ) || true - # Xcode 7.2.1 fails to run tests in the iOS simulator for unknown reasons. Resetting the simulator here works - # around this issue. - sh build.sh prelaunch-simulator - xc "$1" -} - -clean_retrieve() { - mkdir -p "$2" - rm -rf "$2/$3" - cp -R "$1" "$2" -} - -move_to_clean_dir() { - rm -rf "$2" - mkdir -p "$2" - mv "$1" "$2" -} - -shutdown_simulators() { - # Shut down simulators until there's no booted ones left - # Only do one at a time because devices sometimes show up multiple times - while xcrun simctl list | grep -q Booted; do - xcrun simctl list | grep Booted | sed 's/.* (\(.*\)) (Booted)/\1/' | head -n 1 | xargs xcrun simctl shutdown - done -} - -###################################### -# Device Test Helper -###################################### - -test_devices() { - serial_numbers_str=$(system_profiler SPUSBDataType | grep "Serial Number: ") - serial_numbers=() - while read -r line; do - number=${line:15} # Serial number starts at position 15 - if [[ ${#number} == 40 ]]; then - serial_numbers+=("$number") - fi - done <<< "$serial_numbers_str" - if [[ ${#serial_numbers[@]} == 0 ]]; then - echo "At least one iOS/tvOS device must be connected to this computer to run device tests" - if [ -z "${JENKINS_HOME}" ]; then - # Don't fail if running locally and there's no device - exit 0 - fi - exit 1 - fi - local sdk="$1" - local scheme="$2" - local configuration="$3" - local failed=0 - for device in "${serial_numbers[@]}"; do - xc "-scheme '$scheme' -configuration $configuration -destination 'id=$device' -sdk $sdk test" || failed=1 - done - return $failed -} - -###################################### -# Docs -###################################### - -build_docs() { - local language="$1" - local version=$(sh build.sh get-version) - - local xcodebuild_arguments="--objc,Realm/Realm.h,--,-x,objective-c,-isysroot,$(xcrun --show-sdk-path),-I,$(pwd)" - local module="Realm" - local objc="--objc" - - if [[ "$language" == "swift" ]]; then - : ${REALM_SWIFT_VERSION:=2.2} - sh build.sh set-swift-version - xcodebuild_arguments="-scheme,RealmSwift" - module="RealmSwift" - objc="" - fi - - touch Realm/RLMPlatform.h # jazzy will fail if it can't find all public header files - jazzy \ - ${objc} \ - --swift-version 2.2 \ - --clean \ - --author Realm \ - --author_url https://realm.io \ - --github_url https://github.com/realm/realm-cocoa \ - --github-file-prefix https://github.com/realm/realm-cocoa/tree/v${version} \ - --module-version ${version} \ - --xcodebuild-arguments ${xcodebuild_arguments} \ - --module ${module} \ - --root-url https://realm.io/docs/${language}/${version}/api/ \ - --output docs/${language}_output \ - --head "$(cat docs/custom_head.html)" - - rm Realm/RLMPlatform.h -} - -###################################### -# Input Validation -###################################### - -if [ "$#" -eq 0 -o "$#" -gt 3 ]; then - usage - exit 1 -fi - -###################################### -# Variables -###################################### - -download_core() { - echo "Downloading dependency: core ${REALM_CORE_VERSION}" - TMP_DIR="$TMPDIR/core_bin" - mkdir -p "${TMP_DIR}" - CORE_TMP_TAR="${TMP_DIR}/core-${REALM_CORE_VERSION}.tar.bz2.tmp" - CORE_TAR="${TMP_DIR}/core-${REALM_CORE_VERSION}.tar.bz2" - if [ ! -f "${CORE_TAR}" ]; then - local CORE_URL="https://static.realm.io/downloads/core/realm-core-${REALM_CORE_VERSION}.tar.bz2" - set +e # temporarily disable immediate exit - local ERROR # sweeps the exit code unless declared separately - ERROR=$(curl --fail --silent --show-error --location "$CORE_URL" --output "${CORE_TMP_TAR}" 2>&1 >/dev/null) - if [[ $? -ne 0 ]]; then - echo "Downloading core failed:\n${ERROR}" - exit 1 - fi - set -e # re-enable flag - mv "${CORE_TMP_TAR}" "${CORE_TAR}" - fi - - ( - cd "${TMP_DIR}" - rm -rf core - tar xjf "${CORE_TAR}" - mv core core-${REALM_CORE_VERSION} - ) - - rm -rf core-${REALM_CORE_VERSION} core - mv ${TMP_DIR}/core-${REALM_CORE_VERSION} . - ln -s core-${REALM_CORE_VERSION} core -} - -COMMAND="$1" - -# Use Debug config if command ends with -debug, otherwise default to Release -case "$COMMAND" in - *-debug) - COMMAND="${COMMAND%-debug}" - CONFIGURATION="Debug" - ;; - *) CONFIGURATION=${CONFIGURATION:-Release} -esac -export CONFIGURATION - -source "$(dirname "$0")/scripts/swift-version.sh" - -case "$COMMAND" in - - ###################################### - # Clean - ###################################### - "clean") - find . -type d -name build -exec rm -r "{}" +\; - exit 0 - ;; - - ###################################### - # Core - ###################################### - "download-core") - if [ "$REALM_CORE_VERSION" = "current" ]; then - echo "Using version of core already in core/ directory" - exit 0 - fi - if [ -d core -a -d ../realm-core -a ! -L core ]; then - # Allow newer versions than expected for local builds as testing - # with unreleased versions is one of the reasons to use a local build - if ! $(grep -i "${REALM_CORE_VERSION} Release notes" core/release_notes.txt >/dev/null); then - echo "Local build of core is out of date." - exit 1 - else - echo "The core library seems to be up to date." - fi - elif ! [ -L core ]; then - echo "core is not a symlink. Deleting..." - rm -rf core - download_core - # With a prebuilt version we only want to check the first non-empty - # line so that checking out an older commit will download the - # appropriate version of core if the already-present version is too new - elif ! $(grep -m 1 . core/release_notes.txt | grep -i "${REALM_CORE_VERSION} RELEASE NOTES" >/dev/null); then - download_core - else - echo "The core library seems to be up to date." - fi - exit 0 - ;; - - ###################################### - # Object Store - ###################################### - "push-object-store-changes") - commit="$2" - path="$3" - if [ -z "$commit" -o -z "$path" ]; then - echo "usage: sh build.sh push-object-store-changes [base commit] [path to objectore repo]" - exit 1 - fi - - # List all commits since $commit which touched the objecstore, generate - # patches for each of them, and then apply those patches to the - # objectstore repo - git rev-list --reverse $commit..HEAD -- Realm/ObjectStore \ - | xargs -I@ git format-patch --stdout @^! Realm/ObjectStore \ - | git -C $path am -p 3 --directory src - ;; - - "pull-object-store-changes") - commit="$2" - path="$3" - if [ -z "$commit" -o -z "$path" ]; then - echo "usage: sh build.sh pull-object-store-changes [base commit] [path to objectore repo]" - exit 1 - fi - - git -C $path format-patch --stdout $commit..HEAD src | git am -p 2 --directory Realm/ObjectStore --exclude='*CMake*' --reject - ;; - - ###################################### - # Swift versioning - ###################################### - "set-swift-version") - version="$2" - if [[ -z "$version" ]]; then - version="$REALM_SWIFT_VERSION" - fi - - # Update the symlinks to point to the correct verion of the source, and - # then tell git to ignore the fact that we just changed a tracked file so - # that the new symlink doesn't accidentally get committed - rm -rf RealmSwift - ln -s "RealmSwift-swift$version" RealmSwift - git update-index --assume-unchanged RealmSwift || true - - # Only write SwiftVersion.swift if RealmSwift supports the given version of Swift. - if [[ -e "RealmSwift-swift$version" ]]; then - SWIFT_VERSION_FILE="RealmSwift/SwiftVersion.swift" - CONTENTS="let swiftLanguageVersion = \"$version\"" - if [ ! -f "$SWIFT_VERSION_FILE" ] || ! grep -q "$CONTENTS" "$SWIFT_VERSION_FILE"; then - echo "$CONTENTS" > "$SWIFT_VERSION_FILE" - fi - fi - - cd Realm/Tests - rm -rf Swift - ln -s "Swift$version" Swift - git update-index --assume-unchanged Swift || true - exit 0 - ;; - - "prelaunch-simulator") - sh $(dirname $0)/scripts/reset-simulators.sh - ;; - - ###################################### - # Building - ###################################### - "build") - sh build.sh ios-static - sh build.sh ios-dynamic - sh build.sh ios-swift - sh build.sh watchos - sh build.sh watchos-swift - sh build.sh tvos - sh build.sh tvos-swift - sh build.sh osx - sh build.sh osx-swift - exit 0 - ;; - - "ios-static") - build_combined 'Realm iOS static' Realm iphoneos iphonesimulator "-static" - exit 0 - ;; - - "ios-dynamic") - build_combined Realm Realm iphoneos iphonesimulator - exit 0 - ;; - - "ios-swift") - sh build.sh ios-dynamic - build_combined RealmSwift RealmSwift iphoneos iphonesimulator '' "/swift-$REALM_SWIFT_VERSION" - cp -R build/ios/Realm.framework build/ios/swift-$REALM_SWIFT_VERSION - exit 0 - ;; - - "watchos") - build_combined Realm Realm watchos watchsimulator - exit 0 - ;; - - "watchos-swift") - sh build.sh watchos - build_combined RealmSwift RealmSwift watchos watchsimulator - exit 0 - ;; - - "tvos") - build_combined Realm Realm appletvos appletvsimulator - exit 0 - ;; - - "tvos-swift") - sh build.sh tvos - build_combined RealmSwift RealmSwift appletvos appletvsimulator - exit 0 - ;; - - "osx") - xc "-scheme Realm -configuration $CONFIGURATION" - rm -rf build/osx - mkdir build/osx - cp -R build/DerivedData/Realm/Build/Products/$CONFIGURATION/Realm.framework build/osx - exit 0 - ;; - - "osx-swift") - sh build.sh osx - xc "-scheme 'RealmSwift' -configuration $CONFIGURATION build" - destination="build/osx/swift-$REALM_SWIFT_VERSION" - clean_retrieve "build/DerivedData/Realm/Build/Products/$CONFIGURATION/RealmSwift.framework" "$destination" "RealmSwift.framework" - cp -R build/osx/Realm.framework "$destination" - exit 0 - ;; - - ###################################### - # Analysis - ###################################### - - "analyze-osx") - xc "-scheme Realm -configuration $CONFIGURATION analyze" - exit 0 - ;; - - ###################################### - # Testing - ###################################### - "test") - set +e # Run both sets of tests even if the first fails - failed=0 - sh build.sh test-ios-static || failed=1 - sh build.sh test-ios-dynamic || failed=1 - sh build.sh test-ios-swift || failed=1 - sh build.sh test-ios-devices || failed=1 - sh build.sh test-tvos-devices || failed=1 - sh build.sh test-osx || failed=1 - sh build.sh test-osx-swift || failed=1 - exit $failed - ;; - - "test-all") - set +e - failed=0 - sh build.sh test || failed=1 - sh build.sh test-debug || failed=1 - exit $failed - ;; - - "test-ios-static") - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s' test" - exit 0 - ;; - - "test-ios7-static") - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 5S,OS=7.1' test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme 'Realm iOS static' -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s,OS=7.1' test" - exit 0 - ;; - - "test-ios-dynamic") - xc_work_around_rdar_23055637 "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme Realm -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s' test" - exit 0 - ;; - - "test-ios-swift") - xc_work_around_rdar_23055637 "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 6' build test" - shutdown_simulators - xc_work_around_rdar_23055637 "-scheme RealmSwift -configuration $CONFIGURATION -sdk iphonesimulator -destination 'name=iPhone 4s' build test" - exit 0 - ;; - - "test-ios-devices") - failed=0 - trap "failed=1" ERR - sh build.sh test-ios-devices-objc - sh build.sh test-ios-devices-swift - exit $failed - ;; - - "test-ios-devices-objc") - test_devices iphoneos "Realm iOS static" "$CONFIGURATION" - exit $? - ;; - - "test-ios-devices-swift") - test_devices iphoneos "RealmSwift" "$CONFIGURATION" - exit $? - ;; - - "test-tvos") - xc_work_around_rdar_23055637 "-scheme Realm -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=Apple TV 1080p' test" - exit $? - ;; - - "test-tvos-swift") - xc_work_around_rdar_23055637 "-scheme RealmSwift -configuration $CONFIGURATION -sdk appletvsimulator -destination 'name=Apple TV 1080p' test" - exit $? - ;; - - "test-tvos-devices") - test_devices appletvos TestHost "$CONFIGURATION" - ;; - - "test-osx") - COVERAGE_PARAMS="" - if [[ "$CONFIGURATION" == "Debug" ]]; then - COVERAGE_PARAMS="GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES" - fi - xc "-scheme Realm -configuration $CONFIGURATION test $COVERAGE_PARAMS" - exit 0 - ;; - - "test-osx-swift") - xc "-scheme RealmSwift -configuration $CONFIGURATION test" - exit 0 - ;; - - ###################################### - # Full verification - ###################################### - "verify") - sh build.sh verify-cocoapods - sh build.sh verify-docs - sh build.sh verify-osx - sh build.sh verify-osx-debug - sh build.sh verify-osx-swift - sh build.sh verify-osx-swift-debug - sh build.sh verify-ios-static - sh build.sh verify-ios-static-debug - sh build.sh verify-ios7-static - sh build.sh verify-ios7-static-debug - sh build.sh verify-ios-dynamic - sh build.sh verify-ios-dynamic-debug - sh build.sh verify-ios-swift - sh build.sh verify-ios-swift-debug - sh build.sh verify-ios-device-objc - sh build.sh verify-ios-device-swift - sh build.sh verify-watchos - sh build.sh verify-tvos - sh build.sh verify-tvos-debug - sh build.sh verify-tvos-device - sh build.sh verify-swiftlint - ;; - - "verify-cocoapods") - if [[ -d .git ]]; then - # Verify the current branch, unless one was already specified in the sha environment variable. - if [[ -z $sha ]]; then - export sha=$(git rev-parse --abbrev-ref HEAD) - fi - - if [[ $(git log -1 @{push}..) != "" ]] || ! git diff-index --quiet HEAD; then - echo "WARNING: verify-cocoapods will test the latest revision of $sha found on GitHub." - echo " Any unpushed local changes will not be tested." - echo "" - sleep 1 - fi - fi - - cd examples/installation - sh build.sh test-ios-objc-cocoapods - sh build.sh test-ios-objc-cocoapods-dynamic - sh build.sh test-ios-swift-cocoapods - sh build.sh test-osx-objc-cocoapods - sh build.sh test-osx-swift-cocoapods - sh build.sh test-watchos-objc-cocoapods - sh build.sh test-watchos-swift-cocoapods - ;; - - "verify-osx-encryption") - REALM_ENCRYPT_ALL=YES sh build.sh test-osx - exit 0 - ;; - - "verify-osx") - sh build.sh test-osx - sh build.sh analyze-osx - sh build.sh examples-osx - - ( - cd examples/osx/objc/build/DerivedData/RealmExamples/Build/Products/$CONFIGURATION - DYLD_FRAMEWORK_PATH=. ./JSONImport >/dev/null - ) - exit 0 - ;; - - "verify-osx-swift") - sh build.sh test-osx-swift - exit 0 - ;; - - "verify-ios-static") - sh build.sh test-ios-static - sh build.sh examples-ios - ;; - - "verify-ios7-static") - sh build.sh test-ios7-static - ;; - - "verify-ios-dynamic") - sh build.sh test-ios-dynamic - ;; - - "verify-ios-swift") - sh build.sh test-ios-swift - sh build.sh examples-ios-swift - ;; - - "verify-ios-device-objc") - sh build.sh test-ios-devices-objc - exit 0 - ;; - - "verify-ios-device-swift") - sh build.sh test-ios-devices-swift - exit 0 - ;; - - "verify-docs") - sh build.sh docs - for lang in swift objc; do - undocumented="docs/${lang}_output/undocumented.json" - if ! cat "$undocumented" | grep '"warnings":\[\]' > /dev/null 2>&1; then - echo "Undocumented Realm $lang declarations:" - cat "$undocumented" - exit 1 - fi - done - exit 0 - ;; - - "verify-watchos") - sh build.sh watchos-swift - exit 0 - ;; - - "verify-tvos") - sh build.sh test-tvos - sh build.sh test-tvos-swift - sh build.sh examples-tvos - sh build.sh examples-tvos-swift - exit 0 - ;; - - "verify-tvos-device") - sh build.sh test-tvos-devices - exit 0 - ;; - - "verify-swiftlint") - swiftlint lint --strict - exit 0 - ;; - - ###################################### - # Docs - ###################################### - "docs") - build_docs objc - build_docs swift - exit 0 - ;; - - ###################################### - # Examples - ###################################### - "examples") - sh build.sh clean - sh build.sh examples-ios - sh build.sh examples-ios-swift - sh build.sh examples-osx - sh build.sh examples-tvos - sh build.sh examples-tvos-swift - exit 0 - ;; - - "examples-ios") - sh build.sh prelaunch-simulator - if [[ -d "examples/ios/objc" ]]; then - workspace="examples/ios/objc/RealmExamples.xcworkspace" - else - workspace="examples/ios/xcode-7/objc/RealmExamples.xcworkspace" - fi - pod install --project-directory="$workspace/.." --no-repo-update - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme RACTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - - if [ ! -z "${JENKINS_HOME}" ]; then - xc "-workspace $workspace -scheme Extension -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - fi - - exit 0 - ;; - - "examples-ios-swift") - sh build.sh prelaunch-simulator - workspace="examples/ios/swift-$REALM_SWIFT_VERSION/RealmExamples.xcworkspace" - pod install --project-directory="$workspace/.." --no-repo-update - xc "-workspace $workspace -scheme Simple -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme TableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Migration -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Encryption -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme Backlink -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme GroupedTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme ReactKitTableView -configuration $CONFIGURATION -destination 'name=iPhone 6' build ${CODESIGN_PARAMS}" - exit 0 - ;; - - "examples-osx") - xc "-workspace examples/osx/objc/RealmExamples.xcworkspace -scheme JSONImport -configuration ${CONFIGURATION} build ${CODESIGN_PARAMS}" - ;; - - "examples-tvos") - workspace="examples/tvos/objc/RealmExamples.xcworkspace" - xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - exit 0 - ;; - - "examples-tvos-swift") - workspace="examples/tvos/swift/RealmExamples.xcworkspace" - xc "-workspace $workspace -scheme DownloadCache -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - xc "-workspace $workspace -scheme PreloadedData -configuration $CONFIGURATION -destination 'name=Apple TV 1080p' build ${CODESIGN_PARAMS}" - exit 0 - ;; - - ###################################### - # Versioning - ###################################### - "get-version") - version_file="Realm/Realm-Info.plist" - echo "$(PlistBuddy -c "Print :CFBundleVersion" "$version_file")" - exit 0 - ;; - - "set-version") - realm_version="$2" - version_files="Realm/Realm-Info.plist" - - if [ -z "$realm_version" ]; then - echo "You must specify a version." - exit 1 - fi - for version_file in $version_files; do - PlistBuddy -c "Set :CFBundleVersion $realm_version" "$version_file" - PlistBuddy -c "Set :CFBundleShortVersionString $realm_version" "$version_file" - done - exit 0 - ;; - - ###################################### - # Bitcode Detection - ###################################### - - "binary-has-bitcode") - BINARY="$2" - # Although grep has a '-q' flag to prevent logging to stdout, grep - # behaves differently when used, so redirect stdout to /dev/null. - if otool -l "$BINARY" | grep "segname __LLVM" > /dev/null 2>&1; then - exit 0 - fi - # Work around rdar://21826157 by checking for bitcode in thin binaries - - # Get architectures for binary - archs="$(lipo -info "$BINARY" | rev | cut -d ':' -f1 | rev)" - - archs_array=( $archs ) - if [[ ${#archs_array[@]} < 2 ]]; then - exit 1 # Early exit if not a fat binary - fi - - TEMPDIR=$(mktemp -d $TMPDIR/realm-bitcode-check.XXXX) - - for arch in $archs; do - lipo -thin "$arch" "$BINARY" -output "$TEMPDIR/$arch" - if otool -l "$TEMPDIR/$arch" | grep -q "segname __LLVM"; then - exit 0 - fi - done - exit 1 - ;; - - ###################################### - # CocoaPods - ###################################### - "cocoapods-setup") - if [ ! -d core ]; then - sh build.sh download-core - fi - - # CocoaPods won't automatically preserve files referenced via symlinks - for symlink in $(find . -not -path "./.git/*" -type l); do - if [[ -L "$symlink" ]]; then - link="$(dirname "$symlink")/$(readlink "$symlink")" - rm "$symlink" - cp -RH "$link" "$symlink" - fi - done - - if [[ "$2" != "swift" ]]; then - rm -rf include - mkdir -p include - mv core/include include/core - - mkdir -p include/impl/apple - mkdir -p include/util - cp Realm/*.hpp include - cp Realm/ObjectStore/*.hpp include - cp Realm/ObjectStore/impl/*.hpp include/impl - cp Realm/ObjectStore/impl/apple/*.hpp include/impl/apple - cp Realm/ObjectStore/util/*.hpp include/util - - touch Realm/RLMPlatform.h - if [ -n "$COCOAPODS_VERSION" ]; then - # This variable is set for the prepare_command available - # from the 1.0 prereleases, which requires a different - # header layout within the header_mappings_dir. - cp Realm/*.h include - else - # For CocoaPods < 1.0, we need to scope the headers within - # the header_mappings_dir by another subdirectory to avoid - # Clang from complaining about non-modular headers. - mkdir -p include/Realm - cp Realm/*.h include/Realm - fi - else - echo "let swiftLanguageVersion = \"$(get_swift_version)\"" > RealmSwift/SwiftVersion.swift - fi - ;; - - ###################################### - # Continuous Integration - ###################################### - - "ci-pr") - mkdir -p build/reports - - if [ "$target" = "docs" ]; then - sh build.sh set-swift-version - sh build.sh verify-docs - elif [ "$target" = "swiftlint" ]; then - sh build.sh verify-swiftlint - else - export sha=$ghprbSourceBranch - export REALM_SWIFT_VERSION=$swift_version - export CONFIGURATION=$configuration - export REALM_EXTRA_BUILD_ARGUMENTS='GCC_GENERATE_DEBUGGING_SYMBOLS=NO REALM_PREFIX_HEADER=Realm/RLMPrefix.h' - sh build.sh prelaunch-simulator - # Verify that no Realm files still exist - ! find ~/Library/Developer/CoreSimulator/Devices/ -name '*.realm' | grep -q . - - sh build.sh verify-$target | tee build/build.log | xcpretty -r junit -o build/reports/junit.xml || \ - (echo "\n\n***\nbuild/build.log\n***\n\n" && cat build/build.log && exit 1) - fi - - if [ "$target" = "osx" ] && [ "$configuration" = "Debug" ]; then - gcovr -r . -f ".*Realm.*" -e ".*Tests.*" -e ".*core.*" --xml > build/reports/coverage-report.xml - WS=$(pwd | sed "s/\//\\\\\//g") - sed -i ".bak" "s/\./${WS}/" build/reports/coverage-report.xml - fi - ;; - - ###################################### - # Release packaging - ###################################### - - "package-examples") - cd tightdb_objc - ./scripts/package_examples.rb - zip --symlinks -r realm-examples.zip examples -x "examples/installation/*" - ;; - - "package-test-examples") - if ! VERSION=$(echo realm-objc-*.zip | grep -o '\d*\.\d*\.\d*-[a-z]*'); then - VERSION=$(echo realm-objc-*.zip | grep -o '\d*\.\d*\.\d*') - fi - OBJC="realm-objc-${VERSION}" - SWIFT="realm-swift-${VERSION}" - unzip ${OBJC}.zip - - cp $0 ${OBJC} - cp -r $(dirname $0)/scripts ${OBJC} - cd ${OBJC} - sh build.sh examples-ios - sh build.sh examples-osx - cd .. - rm -rf ${OBJC} - - unzip ${SWIFT}.zip - - cp $0 ${SWIFT} - cp -r $(dirname $0)/scripts ${SWIFT} - cd ${SWIFT} - sh build.sh examples-ios-swift - cd .. - rm -rf ${SWIFT} - ;; - - "package-ios-static") - cd tightdb_objc - - sh build.sh prelaunch-simulator - sh build.sh test-ios-static - sh build.sh ios-static - move_to_clean_dir build/ios-static/Realm.framework xcode-7 - - zip --symlinks -r build/ios-static/realm-framework-ios.zip xcode-7 - ;; - - "package-ios-dynamic") - cd tightdb_objc - - sh build.sh prelaunch-simulator - sh build.sh ios-dynamic - move_to_clean_dir build/ios/Realm.framework xcode-7 - - zip --symlinks -r build/ios/realm-dynamic-framework-ios.zip xcode-7 - ;; - - "package-osx") - cd tightdb_objc - sh build.sh test-osx - - cd build/DerivedData/Realm/Build/Products/Release - zip --symlinks -r realm-framework-osx.zip Realm.framework - ;; - - "package-ios-swift") - cd tightdb_objc - rm -rf build/ios/Realm.framework - sh build.sh prelaunch-simulator - sh build.sh ios-swift - - cd build/ios - zip --symlinks -r realm-swift-framework-ios.zip swift-2.2 - ;; - - "package-osx-swift") - cd tightdb_objc - sh build.sh osx-swift - - cd build/osx - zip --symlinks -r realm-swift-framework-osx.zip swift-2.2 - ;; - - "package-watchos") - cd tightdb_objc - sh build.sh watchos - - cd build/watchos - zip --symlinks -r realm-framework-watchos.zip Realm.framework - ;; - - "package-watchos-swift") - cd tightdb_objc - sh build.sh watchos-swift - - cd build/watchos - zip --symlinks -r realm-swift-framework-watchos.zip RealmSwift.framework Realm.framework - ;; - - "package-tvos") - cd tightdb_objc - sh build.sh tvos - - cd build/tvos - zip --symlinks -r realm-framework-tvos.zip Realm.framework - ;; - - "package-tvos-swift") - cd tightdb_objc - sh build.sh tvos-swift - - cd build/tvos - zip --symlinks -r realm-swift-framework-tvos.zip RealmSwift.framework Realm.framework - ;; - - "package-release") - LANG="$2" - TEMPDIR=$(mktemp -d $TMPDIR/realm-release-package-${LANG}.XXXX) - - cd tightdb_objc - VERSION=$(sh build.sh get-version) - cd .. - - FOLDER=${TEMPDIR}/realm-${LANG}-${VERSION} - - mkdir -p ${FOLDER}/osx ${FOLDER}/ios ${FOLDER}/watchos ${FOLDER}/tvos - - if [[ "${LANG}" == "objc" ]]; then - mkdir -p ${FOLDER}/ios/static - mkdir -p ${FOLDER}/ios/dynamic - mkdir -p ${FOLDER}/Swift - - ( - cd ${FOLDER}/osx - unzip ${WORKSPACE}/realm-framework-osx.zip - ) - - ( - cd ${FOLDER}/ios/static - unzip ${WORKSPACE}/realm-framework-ios.zip - ) - - ( - cd ${FOLDER}/ios/dynamic - unzip ${WORKSPACE}/realm-dynamic-framework-ios.zip - ) - - ( - cd ${FOLDER}/watchos - unzip ${WORKSPACE}/realm-framework-watchos.zip - ) - - ( - cd ${FOLDER}/tvos - unzip ${WORKSPACE}/realm-framework-tvos.zip - ) - else - ( - cd ${FOLDER}/osx - unzip ${WORKSPACE}/realm-swift-framework-osx.zip - ) - - ( - cd ${FOLDER}/ios - unzip ${WORKSPACE}/realm-swift-framework-ios.zip - ) - - ( - cd ${FOLDER}/watchos - unzip ${WORKSPACE}/realm-swift-framework-watchos.zip - ) - - ( - cd ${FOLDER}/tvos - unzip ${WORKSPACE}/realm-swift-framework-tvos.zip - ) - fi - - ( - cd ${WORKSPACE}/tightdb_objc - cp -R plugin ${FOLDER} - cp LICENSE ${FOLDER}/LICENSE.txt - if [[ "${LANG}" == "objc" ]]; then - cp Realm/Swift/RLMSupport.swift ${FOLDER}/Swift/ - fi - ) - - ( - cd ${FOLDER} - unzip ${WORKSPACE}/realm-examples.zip - cd examples - if [[ "${LANG}" == "objc" ]]; then - rm -rf ios/swift-2.2 - else - rm -rf ios/objc ios/rubymotion osx - fi - ) - - cat > ${FOLDER}/docs.webloc < - - - - URL - https://realm.io/docs/${LANG}/${VERSION} - - -EOF - - ( - cd ${TEMPDIR} - zip --symlinks -r realm-${LANG}-${VERSION}.zip realm-${LANG}-${VERSION} - mv realm-${LANG}-${VERSION}.zip ${WORKSPACE} - ) - ;; - - "test-package-release") - # Generate a release package locally for testing purposes - # Real releases should always be done via Jenkins - if [ -z "${WORKSPACE}" ]; then - echo 'WORKSPACE must be set to a directory to assemble the release in' - exit 1 - fi - if [ -d "${WORKSPACE}" ]; then - echo 'WORKSPACE directory should not already exist' - exit 1 - fi - - REALM_SOURCE="$(pwd)" - mkdir -p "$WORKSPACE" - WORKSPACE="$(cd "$WORKSPACE" && pwd)" - export WORKSPACE - cd $WORKSPACE - git clone $REALM_SOURCE tightdb_objc - - echo 'Packaging iOS static' - sh tightdb_objc/build.sh package-ios-static - cp tightdb_objc/build/ios-static/realm-framework-ios.zip . - - echo 'Packaging iOS dynamic' - sh tightdb_objc/build.sh package-ios-dynamic - cp tightdb_objc/build/ios/realm-dynamic-framework-ios.zip . - - echo 'Packaging OS X' - sh tightdb_objc/build.sh package-osx - cp tightdb_objc/build/DerivedData/Realm/Build/Products/Release/realm-framework-osx.zip . - - echo 'Packaging examples' - ( - cd tightdb_objc/examples - git clean -xfd - ) - sh tightdb_objc/build.sh package-examples - cp tightdb_objc/realm-examples.zip . - - echo 'Packaging iOS Swift' - sh tightdb_objc/build.sh package-ios-swift - cp tightdb_objc/build/ios/realm-swift-framework-ios.zip . - - echo 'Packaging OS X Swift' - sh tightdb_objc/build.sh package-osx-swift - cp tightdb_objc/build/osx/realm-swift-framework-osx.zip . - - echo 'Packaging watchOS' - sh tightdb_objc/build.sh package-watchos - sh tightdb_objc/build.sh package-watchos-swift - cp tightdb_objc/build/watchos/realm-swift-framework-watchos.zip . - cp tightdb_objc/build/watchos/realm-framework-watchos.zip . - - echo 'Packaging tvOS' - sh tightdb_objc/build.sh package-tvos - sh tightdb_objc/build.sh package-tvos-swift - cp tightdb_objc/build/tvos/realm-swift-framework-tvos.zip . - cp tightdb_objc/build/tvos/realm-framework-tvos.zip . - - echo 'Building final release packages' - sh tightdb_objc/build.sh package-release objc - sh tightdb_objc/build.sh package-release swift - - echo 'Testing packaged examples' - sh tightdb_objc/build.sh package-test-examples - - ;; - - "github-release") - if [ -z "${GITHUB_ACCESS_TOKEN}" ]; then - echo 'GITHUB_ACCESS_TOKEN must be set to create GitHub releases' - exit 1 - fi - ./scripts/github_release.rb - ;; - - "add-empty-changelog") - empty_section=$(cat < CHANGELOG.md - echo >> CHANGELOG.md - echo "$changelog" >> CHANGELOG.md - ;; - - *) - echo "Unknown command '$COMMAND'" - usage - exit 1 - ;; -esac diff --git a/Pods/SenseKit/Pod/Classes/API/API.h b/Pods/SenseKit/Pod/Classes/API/API.h index 5c15cc4b..f8cf7002 100644 --- a/Pods/SenseKit/Pod/Classes/API/API.h +++ b/Pods/SenseKit/Pod/Classes/API/API.h @@ -16,6 +16,5 @@ #import "SENAPIPhoto.h" #import "SENAPIShare.h" #import "SENAPISpeech.h" -#import "SENAPIFeature.h" #import "SENAPISensor.h" #import "SENAPIExpansion.h" \ No newline at end of file diff --git a/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.h b/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.h index 878c42cf..f48100e1 100644 --- a/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.h +++ b/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.h @@ -18,6 +18,7 @@ typedef NS_ENUM(NSInteger, SENAPIDeviceError) { @class SENPillMetadata; @class SENSenseMetadata; +@class SENSenseVoiceSettings; @interface SENAPIDevice : NSObject @@ -98,6 +99,31 @@ typedef NS_ENUM(NSInteger, SENAPIDeviceError) { */ + (void)issueIntentToSwapWithDeviceId:(NSString*)deviceId completion:(nullable SENAPIDataBlock)completion; +#pragma mark - Voice + +/** + * @discussion + * Update voice metadata / settings for Sense. Only applies to specific device + * hardware versions + * + * @param voiceSettings: the updated voice settings object to be updated + * @param senseId: the identifier of Sense to update the voice metadata for + * @param copletion: the block to call when request is completed + */ ++ (void)updateVoiceSettings:(SENSenseVoiceSettings*)voiceSettings + forSenseId:(NSString*)senseId + completion:(SENAPIDataBlock)completion; + +/** + * @discussion + * Get voice metadata / settings for Sense. Only applies to specific device + * hardware versions + * + * @param senseId: the identifier of Sense to get the voice metadata for + * @param copletion: the block to call when request is completed + */ ++ (void)getVoiceSettingsForSenseId:(NSString*)senseId completion:(SENAPIDataBlock)completion; + @end NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.m b/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.m index 17620445..5ec455ea 100644 --- a/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.m +++ b/Pods/SenseKit/Pod/Classes/API/SENAPIDevice.m @@ -15,6 +15,7 @@ static NSString* const SENAPIDeviceInfoPath = @"info"; static NSString* const SENAPIDeviceSensePath = @"sense"; static NSString* const SENAPIDevicePillPath = @"pill"; +static NSString* const SENAPIDeviceVoicePath = @"voice"; static NSString* const SENAPIDeviceOTAEndpoint = @"v1/ota"; static NSString* const SENAPIDeviceOTAStatusPath = @"status"; @@ -49,6 +50,33 @@ + (void)getPairingInfo:(SENAPIDataBlock)completion { }]; } +#pragma mark - Voice Controls + ++ (void)updateVoiceSettings:(SENSenseVoiceSettings*)voiceSettings + forSenseId:(NSString*)senseId + completion:(SENAPIDataBlock)completion { + NSString* path = [SENAPIDeviceEndpoint stringByAppendingFormat:@"/%@/%@/%@", + SENAPIDeviceSensePath, + senseId, + SENAPIDeviceVoicePath]; + NSDictionary* params = [voiceSettings dictionaryValue]; + [SENAPIClient PATCH:path parameters:params completion:completion]; +} + ++ (void)getVoiceSettingsForSenseId:(NSString*)senseId completion:(SENAPIDataBlock)completion { + NSString* path = [SENAPIDeviceEndpoint stringByAppendingFormat:@"/%@/%@/%@", + SENAPIDeviceSensePath, + senseId, + SENAPIDeviceVoicePath]; + [SENAPIClient GET:path parameters:nil completion:^(id data, NSError *error) { + SENSenseVoiceSettings* voiceSettings = nil; + if (!error && [data isKindOfClass:[NSDictionary class]]) { + voiceSettings = [[SENSenseVoiceSettings alloc] initWithDictionary:data]; + } + completion (voiceSettings, error); + }]; +} + #pragma mark - Swap + (void)issueIntentToSwapWithDeviceId:(NSString*)deviceId completion:(SENAPIDataBlock)completion { diff --git a/Pods/SenseKit/Pod/Classes/API/SENAPIFeature.h b/Pods/SenseKit/Pod/Classes/API/SENAPIFeature.h deleted file mode 100644 index 80b4b92f..00000000 --- a/Pods/SenseKit/Pod/Classes/API/SENAPIFeature.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// SENAPIFeature.h -// Pods -// -// Created by Jimmy Lu on 8/4/16. -// -// - -#import -#import "SENAPIClient.h" - -@interface SENAPIFeature : NSObject - -+ (void)getFeatures:(SENAPIDataBlock)completion; - -@end diff --git a/Pods/SenseKit/Pod/Classes/API/SENAPIFeature.m b/Pods/SenseKit/Pod/Classes/API/SENAPIFeature.m deleted file mode 100644 index 8f40b002..00000000 --- a/Pods/SenseKit/Pod/Classes/API/SENAPIFeature.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// SENAPIFeature.m -// Pods -// -// Created by Jimmy Lu on 8/4/16. -// -// - -#import "SENAPIFeature.h" -#import "SENFeatures.h" - -static NSString* const SENAPIFeatureResource = @"v2/features"; - -@implementation SENAPIFeature - -+ (void)getFeatures:(SENAPIDataBlock)completion { - [SENAPIClient GET:SENAPIFeatureResource parameters:nil completion:^(id data, NSError *error) { - SENFeatures* features = nil; - if (!error && [data isKindOfClass:[NSDictionary class]]) { - features = [[SENFeatures alloc] initWithDictionary:data]; - } - completion (features, error); - }]; -} - -@end diff --git a/Pods/SenseKit/Pod/Classes/BLE/SENSense.h b/Pods/SenseKit/Pod/Classes/BLE/SENSense.h index aacc16d5..26b1f75a 100644 --- a/Pods/SenseKit/Pod/Classes/BLE/SENSense.h +++ b/Pods/SenseKit/Pod/Classes/BLE/SENSense.h @@ -16,12 +16,19 @@ typedef NS_ENUM(NSUInteger, SENSenseMode) { SENSenseModePairing = 2 }; +typedef NS_ENUM(NSUInteger, SENSenseAdvertisedVersion) { + SENSenseAdvertisedVersionUnknown = 0, + SENSenseAdvertisedVersionVoice +}; + @interface SENSense : NSObject @property (nonatomic, copy, readonly) NSString* name; +@property (nonatomic, strong, readonly) NSString* macAddress; @property (nonatomic, copy, readonly) NSString* deviceId; @property (nonatomic, assign, readonly) SENSenseMode mode; @property (nonatomic, strong, readonly) LGPeripheral* peripheral; +@property (nonatomic, assign, readonly) SENSenseAdvertisedVersion version; - (instancetype)initWithPeripheral:(LGPeripheral*)peripheral; - (instancetype)initWithPeripheral:(LGPeripheral*)peripheral andDeviceId:(NSString*)deviceId; diff --git a/Pods/SenseKit/Pod/Classes/BLE/SENSense.m b/Pods/SenseKit/Pod/Classes/BLE/SENSense.m index d38b5bd7..456cfdf9 100644 --- a/Pods/SenseKit/Pod/Classes/BLE/SENSense.m +++ b/Pods/SenseKit/Pod/Classes/BLE/SENSense.m @@ -9,9 +9,13 @@ #import "LGPeripheral.h" #import "SENSense.h" +static unsigned char const kSENSenseVoiceByte = 0x22; +static NSInteger const kSENSenseVoiceHwVersionLoc = 2; + @interface SENSense() @property (nonatomic, copy, readwrite) NSString* deviceId; +@property (nonatomic, copy, readwrite) NSString* macAddress; @property (nonatomic, assign, readwrite) SENSenseMode mode; @property (nonatomic, strong) LGPeripheral* peripheral; @@ -38,15 +42,33 @@ - (instancetype)initWithPeripheral:(LGPeripheral*)peripheral andDeviceId:(NSStri } - (void)processAdvertisementData:(NSDictionary*)data { - SENSenseMode mode = SENSenseModeUnknown; NSDictionary* serviceData = data[CBAdvertisementDataServiceDataKey]; - NSMutableString* deviceIdInHex = nil; - if ([serviceData count] == 1) { NSData* deviceIdData = [serviceData allValues][0]; - const unsigned char* dataBuffer = (const unsigned char*)[deviceIdData bytes]; + [self processAdvertisementServiceData:deviceIdData]; + } + + [self processManufacturerData:data[CBAdvertisementDataManufacturerDataKey]]; +} + +- (void)processManufacturerData:(NSData*)manufacturerData { + if ([manufacturerData length] >= kSENSenseVoiceHwVersionLoc + 1) { + const unsigned char* bytes = (const unsigned char*)[manufacturerData bytes]; + unsigned char hwByte = bytes[kSENSenseVoiceHwVersionLoc]; + if (hwByte == kSENSenseVoiceByte) { + _version = SENSenseAdvertisedVersionVoice; + } + } +} + +- (void)processAdvertisementServiceData:(NSData*)serviceData { + NSMutableString* deviceIdInHex = nil; + SENSenseMode mode = SENSenseModeUnknown; + + if (serviceData) { // serviceData is the device id data + const unsigned char* dataBuffer = (const unsigned char*)[serviceData bytes]; if (dataBuffer) { - NSInteger len = [deviceIdData length]; + NSInteger len = [serviceData length]; NSInteger deviceIdLength = len; // per Pang, if device id data is odd in length, the last byte indicates @@ -70,12 +92,55 @@ - (void)processAdvertisementData:(NSDictionary*)data { [self setMode:mode]; } +- (NSString*)macAddressFrom:(unsigned char*)deviceId deviceIdLength:(NSInteger)length { + // determine mac address from device id (based on code from fw) + int macSize = 6; + char* mac[6] = {0x5c,0x6b,0x4f,0,0,0}; + mac[3] = deviceId[length - 3]; + mac[4] = deviceId[length - 2]; + mac[5] = deviceId[length - 1]; + + NSMutableString* macAddress = [NSMutableString new]; + for (int i = 0; i < macSize; i++) { + [macAddress appendString:[NSString stringWithFormat:@"%@%02lX", + [macAddress length] > 0 ? @":" : @"", + (unsigned long)mac[i]]]; + } + + return macAddress; +} + +- (NSString*)macAddress { + if ([[self deviceId] length] == 0) { + return nil; + } + + if (!_macAddress) { + NSMutableData* deviceIdData = [NSMutableData data]; + int idx; + for (idx = 0; idx+2 <= [[self deviceId] length]; idx+=2) { + NSRange range = NSMakeRange(idx, 2); + NSString* hexStr = [[self deviceId] substringWithRange:range]; + NSScanner* scanner = [NSScanner scannerWithString:hexStr]; + unsigned int intValue; + [scanner scanHexInt:&intValue]; + [deviceIdData appendBytes:&intValue length:1]; + } + NSInteger len = [deviceIdData length]; + const unsigned char* dataBuffer = (const unsigned char*)[deviceIdData bytes]; + _macAddress = [self macAddressFrom:dataBuffer deviceIdLength:len]; + } + + return _macAddress; +} + - (NSString*)name { return [[self peripheral] name]; } - (NSString*)description { - return [NSString stringWithFormat:@"Sense: %@, in mode: %ld, id: %@", [self name], (long)[self mode], [self deviceId]]; + return [NSString stringWithFormat:@"Sense: %@, mac: %@, in mode: %ld, id: %@", + [self name], [self macAddress], (long)[self mode], [self deviceId]]; } - (BOOL)isEqual:(id)object { diff --git a/Pods/SenseKit/Pod/Classes/Model/Model.h b/Pods/SenseKit/Pod/Classes/Model/Model.h index c5b5f56f..42039392 100644 --- a/Pods/SenseKit/Pod/Classes/Model/Model.h +++ b/Pods/SenseKit/Pod/Classes/Model/Model.h @@ -27,12 +27,12 @@ #import "SENSleepSoundsState.h" #import "SENDFUStatus.h" #import "SENSpeechResult.h" -#import "SENFeatures.h" #import "SENSwapStatus.h" #import "SENSensorStatus.h" #import "SENSensorDataRequest.h" #import "SENExpansion.h" #import "SENAlarmCollection.h" +#import "SENSenseVoiceSettings.h" void SENClearModel(); diff --git a/Pods/SenseKit/Pod/Classes/Model/SENAlarm.h b/Pods/SenseKit/Pod/Classes/Model/SENAlarm.h index 5bdced59..3fa09272 100644 --- a/Pods/SenseKit/Pod/Classes/Model/SENAlarm.h +++ b/Pods/SenseKit/Pod/Classes/Model/SENAlarm.h @@ -1,6 +1,7 @@ #import #import "SENSerializable.h" +#import "SENExpansion.h" typedef NS_ENUM(NSUInteger, SENAlarmRepeatDays) { SENAlarmRepeatSunday = (1UL << 1), @@ -37,6 +38,8 @@ struct SENAlarmTime { @interface SENAlarmExpansion : NSObject @property (nonatomic, strong, readonly) NSNumber* expansionId; +@property (nonatomic, assign, readonly) SENExpansionType type; +@property (nonatomic, assign) SENExpansionValueRange targetRange; @property (nonatomic, assign, getter=isEnable) BOOL enable; - (instancetype)initWithExpansionId:(NSNumber*)expansionId enable:(BOOL)enable; diff --git a/Pods/SenseKit/Pod/Classes/Model/SENAlarm.m b/Pods/SenseKit/Pod/Classes/Model/SENAlarm.m index e56cb483..517ad39a 100644 --- a/Pods/SenseKit/Pod/Classes/Model/SENAlarm.m +++ b/Pods/SenseKit/Pod/Classes/Model/SENAlarm.m @@ -13,12 +13,19 @@ - (NSDictionary*)dictionaryValue; @implementation SENAlarmExpansion static NSString* const SENAlarmExpansionIdKey = @"id"; -static NSString* const SENAlarmExpansionEnableKey = @"enable"; +static NSString* const SENAlarmExpansionEnableKey = @"enabled"; +static NSString* const SENAlarmExpansionCategoryKey = @"category"; +static NSString* const SENAlarmExpansionTargetRangeKey = @"target_value"; - (instancetype)initWithDictionary:(NSDictionary *)data { if (self = [super init]) { + NSDictionary* targetRange = SENObjectOfClass(data[SENAlarmExpansionTargetRangeKey], [NSDictionary class]); + NSString* category = SENObjectOfClass(data[SENAlarmExpansionCategoryKey], [NSString class]); + + _type = [SENExpansion typeFromString:category]; _expansionId = SENObjectOfClass(data[SENAlarmExpansionIdKey], [NSNumber class]); _enable = [SENObjectOfClass(data[SENAlarmExpansionEnableKey], [NSNumber class]) boolValue]; + _targetRange = [SENExpansion valueRangeFromDict:targetRange]; } return self; } @@ -42,12 +49,21 @@ - (BOOL)isEqual:(id)object { SENAlarmExpansion* other = object; return SENObjectIsEqual([self expansionId], [other expansionId]) - && [self isEnable] == [other isEnable]; + && [self isEnable] == [other isEnable] + && [self type] == [other type] + && [self targetRange].min == [other targetRange].min + && [self targetRange].max == [other targetRange].max + && [self targetRange].setpoint == [other targetRange].setpoint; } - (NSDictionary*)dictionaryValue { + // type is purposely not included + SENExpansionValueRange range = {.min = [self targetRange].min, + .max = [self targetRange].max}; + NSDictionary* targetRange = [SENExpansion dictionaryValueFromRange:range]; return @{SENAlarmExpansionIdKey : [self expansionId], - SENAlarmExpansionEnableKey : @([self isEnable])}; + SENAlarmExpansionEnableKey : @([self isEnable]), + SENAlarmExpansionTargetRangeKey : targetRange}; } @end @@ -157,8 +173,8 @@ - (instancetype)initWithDictionary:(NSDictionary*)dict { return self; } -- (NSSet*)expansionsFromRawArray:(NSArray*)expansionArray { - NSMutableSet* expansions = [NSMutableSet setWithCapacity:[expansionArray count]]; +- (NSArray*)expansionsFromRawArray:(NSArray*)expansionArray { + NSMutableArray* expansions = [NSMutableArray arrayWithCapacity:[expansionArray count]]; for (id expansionObj in expansionArray) { if ([expansionObj isKindOfClass:[NSDictionary class]]) { [expansions addObject:[[SENAlarmExpansion alloc] initWithDictionary:expansionObj]]; diff --git a/Pods/SenseKit/Pod/Classes/Model/SENExpansion.h b/Pods/SenseKit/Pod/Classes/Model/SENExpansion.h index e6773a8c..363de82d 100644 --- a/Pods/SenseKit/Pod/Classes/Model/SENExpansion.h +++ b/Pods/SenseKit/Pod/Classes/Model/SENExpansion.h @@ -20,10 +20,21 @@ typedef NS_ENUM(NSUInteger, SENExpansionState) { SENExpansionStateNotConfigured }; +typedef NS_ENUM(NSUInteger, SENExpansionType) { + SENExpansionTypeUnknown = 0, + SENExpansionTypeLights, + SENExpansionTypeThermostat +}; + +typedef struct { + CGFloat min; + CGFloat max; + CGFloat setpoint; +} SENExpansionValueRange; + @interface SENExpansion : NSObject @property (nonatomic, copy, readonly) NSNumber* identifier; -@property (nonatomic, copy, readonly) NSString* category; @property (nonatomic, copy, readonly) NSString* deviceName; @property (nonatomic, copy, readonly) NSString* serviceName; @property (nonatomic, copy, readonly) NSString* authUri; @@ -31,7 +42,13 @@ typedef NS_ENUM(NSUInteger, SENExpansionState) { @property (nonatomic, copy, readonly) NSString* expansionDescription; @property (nonatomic, strong, readonly) SENRemoteImage* remoteIcon; @property (nonatomic, assign) SENExpansionState state; +@property (nonatomic, assign) SENExpansionType type; +@property (nonatomic, assign, readonly) SENExpansionValueRange valueRange; ++ (SENExpansionValueRange)valueRangeFromDict:(NSDictionary*)dict; ++ (SENExpansionType)typeFromString:(NSString*)typeString; ++ (NSString*)typeStringFromEnum:(SENExpansionType)type; ++ (NSDictionary*)dictionaryValueFromRange:(SENExpansionValueRange)range; - (NSDictionary*)dictionaryValueForUpdate; @end diff --git a/Pods/SenseKit/Pod/Classes/Model/SENExpansion.m b/Pods/SenseKit/Pod/Classes/Model/SENExpansion.m index 7c1332e3..83c5b8fc 100644 --- a/Pods/SenseKit/Pod/Classes/Model/SENExpansion.m +++ b/Pods/SenseKit/Pod/Classes/Model/SENExpansion.m @@ -20,6 +20,7 @@ @implementation SENExpansion static NSString* const kSENExpansionAttrCompletionUri = @"completion_uri"; static NSString* const kSENExpansionAttrState = @"state"; static NSString* const kSENExpansionAttrDescription = @"description"; +static NSString* const kSENExpansionAttrValueRange = @"value_range"; static NSString* const kSENExpansionStateEnumNotConnected = @"NOT_CONNECTED"; static NSString* const kSENExpansionStateEnumConnectedOn = @"CONNECTED_ON"; @@ -27,10 +28,52 @@ @implementation SENExpansion static NSString* const kSENExpansionStateEnumRevoked = @"REVOKED"; static NSString* const kSENExpansionStateEnumNotConfigured = @"NOT_CONFIGURED"; +static NSString* const kSENExpansionCategoryEnumLights = @"LIGHT"; +static NSString* const kSENExpansionCategoryEnumTemp = @"TEMPERATURE"; + +static NSString* const kSENExpansionValueRangeAttrMin = @"min"; +static NSString* const kSENExpansionValueRangeAttrMax = @"max"; +static NSString* const kSENExpansionValueRangeAttrSetpoint = @"setpoint"; + ++ (SENExpansionType)typeFromString:(NSString*)typeString { + NSString* upperString = [typeString uppercaseString]; + if ([upperString isEqualToString:kSENExpansionCategoryEnumLights]) { + return SENExpansionTypeLights; + } else if ([upperString isEqualToString:kSENExpansionCategoryEnumTemp]) { + return SENExpansionTypeThermostat; + } else { + return SENExpansionTypeUnknown; + } +} + ++ (NSString*)typeStringFromEnum:(SENExpansionType)type { + switch (type) { + case SENExpansionTypeLights: + return kSENExpansionCategoryEnumLights; + case SENExpansionTypeThermostat: + return kSENExpansionCategoryEnumTemp; + case SENExpansionTypeUnknown: + return @""; + } +} + ++ (SENExpansionValueRange)valueRangeFromDict:(NSDictionary*)dict { + SENExpansionValueRange range; + range.min = [SENObjectOfClass(dict[kSENExpansionValueRangeAttrMin], [NSNumber class]) doubleValue]; + range.max = [SENObjectOfClass(dict[kSENExpansionValueRangeAttrMax], [NSNumber class]) doubleValue]; + range.setpoint = [SENObjectOfClass(dict[kSENExpansionValueRangeAttrSetpoint], [NSNumber class]) doubleValue]; + return range; +} + ++ (NSDictionary*)dictionaryValueFromRange:(SENExpansionValueRange)range { + return @{kSENExpansionValueRangeAttrMin : @(range.min), + kSENExpansionValueRangeAttrMax : @(range.max), + kSENExpansionValueRangeAttrSetpoint : @(range.setpoint)}; +} + - (instancetype)initWithDictionary:(NSDictionary*)dict { if (self = [super init]) { _identifier = SENObjectOfClass(dict[kSENExpansionAttrId], [NSNumber class]); - _category = SENObjectOfClass(dict[kSENExpansionAttrCategory], [NSString class]); _deviceName = SENObjectOfClass(dict[kSENExpansionAttrDeviceName], [NSString class]); _serviceName = SENObjectOfClass(dict[kSENExpansionAttrServiceName], [NSString class]); _authUri = SENObjectOfClass(dict[kSENExpansionAttrAuthUri], [NSString class]); @@ -40,8 +83,14 @@ - (instancetype)initWithDictionary:(NSDictionary*)dict { NSDictionary* iconDict = SENObjectOfClass(dict[kSENExpansionAttrIcon], [NSDictionary class]); _remoteIcon = [[SENRemoteImage alloc] initWithDictionary:iconDict]; + NSString* typeText = SENObjectOfClass(dict[kSENExpansionAttrCategory], [NSString class]); + _type = [[self class] typeFromString:typeText]; + NSString* stateText = SENObjectOfClass(dict[kSENExpansionAttrState], [NSString class]); _state = [self stateFromString:stateText]; + + NSDictionary* range = SENObjectOfClass(dict[kSENExpansionAttrValueRange], [NSDictionary class]); + _valueRange = [[self class] valueRangeFromDict:range]; } return self; } @@ -87,12 +136,12 @@ - (BOOL)isEqual:(id)object { SENExpansion* other = object; return SENObjectIsEqual([self identifier], [other identifier]) - && SENObjectIsEqual([self category], [other category]) && SENObjectIsEqual([self deviceName], [other deviceName]) && SENObjectIsEqual([self serviceName], [other serviceName]) && SENObjectIsEqual([self authUri], [other authUri]) && SENObjectIsEqual([self authCompletionUri], [other authCompletionUri]) - && [self state] == [other state]; + && [self state] == [other state] + && [self type] == [other type]; } - (NSUInteger)hash { diff --git a/Pods/SenseKit/Pod/Classes/Model/SENFeatures.h b/Pods/SenseKit/Pod/Classes/Model/SENFeatures.h deleted file mode 100644 index 7ed390c2..00000000 --- a/Pods/SenseKit/Pod/Classes/Model/SENFeatures.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// SENFeatures.h -// Pods -// -// Created by Jimmy Lu on 8/4/16. -// -// - -#import -#import "SENSerializable.h" - -@interface SENFeatures : NSObject - -@property (nonatomic, assign, getter=hasVoice, readonly) BOOL voice; - -+ (instancetype)savedFeatures; -- (void)save; -- (void)remove; - -@end diff --git a/Pods/SenseKit/Pod/Classes/Model/SENFeatures.m b/Pods/SenseKit/Pod/Classes/Model/SENFeatures.m deleted file mode 100644 index b42bbb31..00000000 --- a/Pods/SenseKit/Pod/Classes/Model/SENFeatures.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// SENFeatures.m -// Pods -// -// Created by Jimmy Lu on 8/4/16. -// -// - -#import "SENFeatures.h" -#import "SENKeyedArchiver.h" -#import "Model.h" - -static NSString* const SENFeaturesTypeVoice = @"VOICE"; - -@interface SENFeatures() - -@property (nonatomic, assign, getter=hasVoice) BOOL voice; - -@end - -@implementation SENFeatures - -+ (instancetype)savedFeatures { - NSString *key = [self collectionName]; - return [SENKeyedArchiver objectsForKey:key inCollection:key]; -} - -+ (NSString*)collectionName { - return NSStringFromClass(self); -} - -- (instancetype)initWithDictionary:(NSDictionary*)dictionary { - self = [super init]; - if (self) { - NSArray* keys = [dictionary allKeys]; - NSString* key = nil; - for (id object in keys) { - key = SENObjectOfClass(object, [NSString class]); - if ([[key uppercaseString] isEqualToString:SENFeaturesTypeVoice]) { - _voice = YES; - } - } - } - return self; -} - -- (id)initWithCoder:(NSCoder*)aDecoder { - if (self = [super init]) { - _voice = [[aDecoder decodeObjectForKey:SENFeaturesTypeVoice] boolValue]; - } - return self; -} - -- (NSString*)description { - static NSString* const SENFeaturesStringFormat = @""; - return [NSString stringWithFormat:SENFeaturesStringFormat, [self hasVoice] ? @"yes" : @"no"]; -} - -- (void)encodeWithCoder:(NSCoder*)aCoder { - [aCoder encodeObject:@([self hasVoice]) forKey:SENFeaturesTypeVoice]; -} - -- (void)save { - NSString* collection = [[self class] collectionName]; - [SENKeyedArchiver setObject:self forKey:collection inCollection:collection]; -} - -- (void)remove { - NSString* collection = [[self class] collectionName]; - [SENKeyedArchiver removeAllObjectsInCollection:collection]; -} - -@end diff --git a/Pods/SenseKit/Pod/Classes/Model/SENSenseMetadata.h b/Pods/SenseKit/Pod/Classes/Model/SENSenseMetadata.h index 7b3bf0ea..523daf83 100644 --- a/Pods/SenseKit/Pod/Classes/Model/SENSenseMetadata.h +++ b/Pods/SenseKit/Pod/Classes/Model/SENSenseMetadata.h @@ -8,6 +8,7 @@ #import #import "SENDeviceMetadata.h" +#import "SENSerializable.h" typedef NS_ENUM(NSUInteger, SENSenseColor) { SENSenseColorUnknown = 0, @@ -33,22 +34,24 @@ typedef NS_ENUM(NSUInteger, SENSenseHardware) { SENSenseHardwareVoice }; -@interface SENSenseWiFiInfo : NSObject +NS_ASSUME_NONNULL_BEGIN + +@interface SENSenseWiFiInfo : NSObject @property (nonatomic, copy, readonly, nullable) NSString* ssid; @property (nonatomic, strong, readonly, nullable) NSNumber* rssi; @property (nonatomic, strong, readonly, nullable) NSDate* lastUpdated; @property (nonatomic, assign, readonly) SENWiFiCondition condition; -- (nonnull instancetype)initWithDictionary:(nonnull NSDictionary*)dict; - @end @interface SENSenseMetadata : SENDeviceMetadata @property (nonatomic, assign, readonly) SENSenseState state; @property (nonatomic, assign, readonly) SENSenseColor color; -@property (nonatomic, strong, readonly, nonnull) SENSenseWiFiInfo* wiFi; +@property (nonatomic, strong, readonly) SENSenseWiFiInfo* wiFi; @property (nonatomic, assign, readonly) SENSenseHardware hardwareVersion; @end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Pods/SenseKit/Pod/Classes/Model/SENSenseVoiceSettings.h b/Pods/SenseKit/Pod/Classes/Model/SENSenseVoiceSettings.h new file mode 100644 index 00000000..162d3ec3 --- /dev/null +++ b/Pods/SenseKit/Pod/Classes/Model/SENSenseVoiceSettings.h @@ -0,0 +1,26 @@ +// +// SENSenseVoiceSettings.h +// Pods +// +// Created by Jimmy Lu on 10/19/16. +// +// + +#import +#import "SENSerializable.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SENSenseVoiceSettings : NSObject + +@property (nonatomic, strong, nullable) NSNumber* primaryUser; +@property (nonatomic, assign, nullable) NSNumber* muted; +@property (nonatomic, strong, nullable) NSNumber* volume; + +- (NSDictionary*)dictionaryValue; +- (BOOL)isPrimaryUser; +- (BOOL)isMuted; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Pods/SenseKit/Pod/Classes/Model/SENSenseVoiceSettings.m b/Pods/SenseKit/Pod/Classes/Model/SENSenseVoiceSettings.m new file mode 100644 index 00000000..45a04722 --- /dev/null +++ b/Pods/SenseKit/Pod/Classes/Model/SENSenseVoiceSettings.m @@ -0,0 +1,64 @@ +// +// SENSenseVoiceSettings.m +// Pods +// +// Created by Jimmy Lu on 10/19/16. +// +// + +#import "SENSenseVoiceSettings.h" +#import "Model.h" + +@implementation SENSenseVoiceSettings + +static NSString* const SENSenseVoiceDictPropPrmaryUser = @"is_primary_user"; +static NSString* const SENSenseVoiceDictPropVolume = @"volume"; +static NSString* const SENSenseVoiceDictPropMuted = @"muted"; + +- (instancetype)initWithDictionary:(NSDictionary *)data { + if (self = [super init]) { + _volume = SENObjectOfClass(data[SENSenseVoiceDictPropVolume], [NSNumber class]); + _primaryUser = SENObjectOfClass(data[SENSenseVoiceDictPropPrmaryUser], [NSNumber class]); + _muted = SENObjectOfClass(data[SENSenseVoiceDictPropMuted], [NSNumber class]); + } + return self; +} + +- (BOOL)isPrimaryUser { + return [[self primaryUser] boolValue]; +} + +- (BOOL)isMuted { + return [[self muted] boolValue]; +} + +- (NSDictionary*)dictionaryValue { + NSMutableDictionary* data = [NSMutableDictionary dictionaryWithCapacity:3]; + if ([self primaryUser]) { + [data setObject:[self primaryUser] forKey:SENSenseVoiceDictPropPrmaryUser]; + } + if ([self muted]) { + [data setObject:[self muted] forKey:SENSenseVoiceDictPropMuted]; + } + if ([self volume]) { + [data setObject:[self volume] forKey:SENSenseVoiceDictPropVolume]; + } + return data; +} + +- (BOOL)isEqual:(id)object { + if (![object isKindOfClass:[self class]]) { + return NO; + } + + SENSenseVoiceSettings* other = object; + return SENObjectIsEqual([self volume], [other volume]) + && SENObjectIsEqual([self primaryUser], [other primaryUser]) + && SENObjectIsEqual([self muted], [other muted]); +} + +- (NSUInteger)hash { + return [[self volume] hash] + [self isPrimaryUser] + [self isMuted]; +} + +@end diff --git a/Pods/SenseKit/Pod/Classes/Model/SENSensor.h b/Pods/SenseKit/Pod/Classes/Model/SENSensor.h index 8d38c389..172c337c 100644 --- a/Pods/SenseKit/Pod/Classes/Model/SENSensor.h +++ b/Pods/SenseKit/Pod/Classes/Model/SENSensor.h @@ -20,7 +20,8 @@ typedef NS_ENUM(NSUInteger, SENSensorUnit) { SENSensorUnitPPM, SENSensorUnitRatio, SENSensorUnitKelvin, - SENSensorUnitKPA + SENSensorUnitKPA, + SENSensorUnitMBar }; typedef NS_ENUM(NSUInteger, SENSensorType) { diff --git a/Pods/SenseKit/Pod/Classes/Model/SENSensor.m b/Pods/SenseKit/Pod/Classes/Model/SENSensor.m index a9d643b0..0ce35ed5 100644 --- a/Pods/SenseKit/Pod/Classes/Model/SENSensor.m +++ b/Pods/SenseKit/Pod/Classes/Model/SENSensor.m @@ -16,6 +16,7 @@ static NSString* const kSENSensorUnitValueRatio = @"RATIO"; static NSString* const kSENSensorUnitValueKelvin = @"KELVIN"; static NSString* const kSENSensorUnitValueKPA = @"KPA"; +static NSString* const kSENSensorUnitValueMBar = @"MILLIBAR"; // type values static NSString* const kSENSensorTypeValueTemp = @"TEMPERATURE"; @@ -54,6 +55,8 @@ SENSensorUnit SensorUnitFromString(NSString* unitString) { return SENSensorUnitKelvin; } else if ([unitStringUpper isEqualToString:kSENSensorUnitValueKPA]) { return SENSensorUnitKPA; + } else if ([unitStringUpper isEqualToString:kSENSensorUnitValueMBar]) { + return SENSensorUnitMBar; } else { return SENSensorUnitUnknown; } diff --git a/Pods/Target Support Files/Charts/Charts.xcconfig b/Pods/Target Support Files/Charts/Charts.xcconfig index c408e641..fbdd233a 100644 --- a/Pods/Target Support Files/Charts/Charts.xcconfig +++ b/Pods/Target Support Files/Charts/Charts.xcconfig @@ -1,5 +1,4 @@ CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Charts -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Realm" "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ZendeskSDK" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" diff --git a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.markdown b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.markdown index 71aa50d2..d167bd69 100644 --- a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.markdown @@ -612,552 +612,6 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -## Realm - -TABLE OF CONTENTS - -1. Apache License version 2.0 -2. Realm Components -3. Export Compliance - -------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -REALM COMPONENTS - -This software contains components with separate copyright and license terms. -Your use of these components is subject to the terms and conditions of the -following licenses. - -For the Realm Core component - - Realm Core Binary License - - Copyright (c) 2011-2014 Realm Inc All rights reserved - - Redistribution and use in binary form, with or without modification, is - permitted provided that the following conditions are met: - - 1. You agree not to attempt to decompile, disassemble, reverse engineer or - otherwise discover the source code from which the binary code was derived. - You may, however, access and obtain a separate license for most of the - source code from which this Software was created, at - http://realm.io/pricing/. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -EXPORT COMPLIANCE - -You understand that the Software may contain cryptographic functions that may be -subject to export restrictions, and you represent and warrant that you are not -located in a country that is subject to United States export restriction or embargo, -including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, and that you -are not on the Department of Commerce list of Denied Persons, Unverified Parties, -or affiliated with a Restricted Entity. - -You agree to comply with all export, re-export and import restrictions and -regulations of the Department of Commerce or other agency or authority of the -United States or other applicable countries. You also agree not to transfer, or -authorize the transfer of, directly or indirectly, the Software to any prohibited -country, including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, -or to any person or organization on or affiliated with the Department of -Commerce lists of Denied Persons, Unverified Parties or Restricted Entities, or -otherwise in violation of any such restrictions or regulations. - - -## RealmSwift - -TABLE OF CONTENTS - -1. Apache License version 2.0 -2. Realm Components -3. Export Compliance - -------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -REALM COMPONENTS - -This software contains components with separate copyright and license terms. -Your use of these components is subject to the terms and conditions of the -following licenses. - -For the Realm Core component - - Realm Core Binary License - - Copyright (c) 2011-2014 Realm Inc All rights reserved - - Redistribution and use in binary form, with or without modification, is - permitted provided that the following conditions are met: - - 1. You agree not to attempt to decompile, disassemble, reverse engineer or - otherwise discover the source code from which the binary code was derived. - You may, however, access and obtain a separate license for most of the - source code from which this Software was created, at - http://realm.io/pricing/. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -EXPORT COMPLIANCE - -You understand that the Software may contain cryptographic functions that may be -subject to export restrictions, and you represent and warrant that you are not -located in a country that is subject to United States export restriction or embargo, -including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, and that you -are not on the Department of Commerce list of Denied Persons, Unverified Parties, -or affiliated with a Restricted Entity. - -You agree to comply with all export, re-export and import restrictions and -regulations of the Department of Commerce or other agency or authority of the -United States or other applicable countries. You also agree not to transfer, or -authorize the transfer of, directly or indirectly, the Software to any prohibited -country, including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, -or to any person or organization on or affiliated with the Department of -Commerce lists of Denied Persons, Unverified Parties or Restricted Entities, or -otherwise in violation of any such restrictions or regulations. - - ## SHSProtoBuf Copyright 2010 Booyah Inc. diff --git a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.plist b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.plist index 9d7dc29b..af07ee37 100644 --- a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-acknowledgements.plist @@ -683,560 +683,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Type PSGroupSpecifier - - FooterText - TABLE OF CONTENTS - -1. Apache License version 2.0 -2. Realm Components -3. Export Compliance - -------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -REALM COMPONENTS - -This software contains components with separate copyright and license terms. -Your use of these components is subject to the terms and conditions of the -following licenses. - -For the Realm Core component - - Realm Core Binary License - - Copyright (c) 2011-2014 Realm Inc All rights reserved - - Redistribution and use in binary form, with or without modification, is - permitted provided that the following conditions are met: - - 1. You agree not to attempt to decompile, disassemble, reverse engineer or - otherwise discover the source code from which the binary code was derived. - You may, however, access and obtain a separate license for most of the - source code from which this Software was created, at - http://realm.io/pricing/. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -EXPORT COMPLIANCE - -You understand that the Software may contain cryptographic functions that may be -subject to export restrictions, and you represent and warrant that you are not -located in a country that is subject to United States export restriction or embargo, -including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, and that you -are not on the Department of Commerce list of Denied Persons, Unverified Parties, -or affiliated with a Restricted Entity. - -You agree to comply with all export, re-export and import restrictions and -regulations of the Department of Commerce or other agency or authority of the -United States or other applicable countries. You also agree not to transfer, or -authorize the transfer of, directly or indirectly, the Software to any prohibited -country, including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, -or to any person or organization on or affiliated with the Department of -Commerce lists of Denied Persons, Unverified Parties or Restricted Entities, or -otherwise in violation of any such restrictions or regulations. - - Title - Realm - Type - PSGroupSpecifier - - - FooterText - TABLE OF CONTENTS - -1. Apache License version 2.0 -2. Realm Components -3. Export Compliance - -------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -REALM COMPONENTS - -This software contains components with separate copyright and license terms. -Your use of these components is subject to the terms and conditions of the -following licenses. - -For the Realm Core component - - Realm Core Binary License - - Copyright (c) 2011-2014 Realm Inc All rights reserved - - Redistribution and use in binary form, with or without modification, is - permitted provided that the following conditions are met: - - 1. You agree not to attempt to decompile, disassemble, reverse engineer or - otherwise discover the source code from which the binary code was derived. - You may, however, access and obtain a separate license for most of the - source code from which this Software was created, at - http://realm.io/pricing/. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -EXPORT COMPLIANCE - -You understand that the Software may contain cryptographic functions that may be -subject to export restrictions, and you represent and warrant that you are not -located in a country that is subject to United States export restriction or embargo, -including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, and that you -are not on the Department of Commerce list of Denied Persons, Unverified Parties, -or affiliated with a Restricted Entity. - -You agree to comply with all export, re-export and import restrictions and -regulations of the Department of Commerce or other agency or authority of the -United States or other applicable countries. You also agree not to transfer, or -authorize the transfer of, directly or indirectly, the Software to any prohibited -country, including Cuba, Iran, North Korea, Sudan, Syria or the Crimea region, -or to any person or organization on or affiliated with the Department of -Commerce lists of Denied Persons, Unverified Parties or Restricted Entities, or -otherwise in violation of any such restrictions or regulations. - - Title - RealmSwift - Type - PSGroupSpecifier - FooterText Copyright 2010 Booyah Inc. diff --git a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-frameworks.sh b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-frameworks.sh index 3d68e3a9..8762c71b 100755 --- a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-frameworks.sh +++ b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense-frameworks.sh @@ -99,8 +99,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "$BUILT_PRODUCTS_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework" install_framework "$BUILT_PRODUCTS_DIR/NAPickerView/NAPickerView.framework" install_framework "$BUILT_PRODUCTS_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework" - install_framework "$BUILT_PRODUCTS_DIR/Realm/Realm.framework" - install_framework "$BUILT_PRODUCTS_DIR/RealmSwift/RealmSwift.framework" install_framework "$BUILT_PRODUCTS_DIR/SHSProtoBuf/ProtocolBuffers.framework" install_framework "$BUILT_PRODUCTS_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework" install_framework "$BUILT_PRODUCTS_DIR/SVWebViewController/SVWebViewController.framework" @@ -126,8 +124,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "$BUILT_PRODUCTS_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework" install_framework "$BUILT_PRODUCTS_DIR/NAPickerView/NAPickerView.framework" install_framework "$BUILT_PRODUCTS_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework" - install_framework "$BUILT_PRODUCTS_DIR/Realm/Realm.framework" - install_framework "$BUILT_PRODUCTS_DIR/RealmSwift/RealmSwift.framework" install_framework "$BUILT_PRODUCTS_DIR/SHSProtoBuf/ProtocolBuffers.framework" install_framework "$BUILT_PRODUCTS_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework" install_framework "$BUILT_PRODUCTS_DIR/SVWebViewController/SVWebViewController.framework" @@ -153,8 +149,6 @@ if [[ "$CONFIGURATION" == "Beta" ]]; then install_framework "$BUILT_PRODUCTS_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework" install_framework "$BUILT_PRODUCTS_DIR/NAPickerView/NAPickerView.framework" install_framework "$BUILT_PRODUCTS_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework" - install_framework "$BUILT_PRODUCTS_DIR/Realm/Realm.framework" - install_framework "$BUILT_PRODUCTS_DIR/RealmSwift/RealmSwift.framework" install_framework "$BUILT_PRODUCTS_DIR/SHSProtoBuf/ProtocolBuffers.framework" install_framework "$BUILT_PRODUCTS_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework" install_framework "$BUILT_PRODUCTS_DIR/SVWebViewController/SVWebViewController.framework" @@ -180,8 +174,6 @@ if [[ "$CONFIGURATION" == "Dev" ]]; then install_framework "$BUILT_PRODUCTS_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework" install_framework "$BUILT_PRODUCTS_DIR/NAPickerView/NAPickerView.framework" install_framework "$BUILT_PRODUCTS_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework" - install_framework "$BUILT_PRODUCTS_DIR/Realm/Realm.framework" - install_framework "$BUILT_PRODUCTS_DIR/RealmSwift/RealmSwift.framework" install_framework "$BUILT_PRODUCTS_DIR/SHSProtoBuf/ProtocolBuffers.framework" install_framework "$BUILT_PRODUCTS_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework" install_framework "$BUILT_PRODUCTS_DIR/SVWebViewController/SVWebViewController.framework" diff --git a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.beta.xcconfig b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.beta.xcconfig index 7dca39c2..6f4235b9 100644 --- a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.beta.xcconfig +++ b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.beta.xcconfig @@ -1,12 +1,12 @@ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/Realm" "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" GCC_ENABLE_CPP_EXCEPTIONS = YES GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ZendeskSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Realm/Realm.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift/RealmSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "Realm" -framework "RealmSwift" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.debug.xcconfig b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.debug.xcconfig index 7dca39c2..6f4235b9 100644 --- a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.debug.xcconfig +++ b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.debug.xcconfig @@ -1,12 +1,12 @@ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/Realm" "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" GCC_ENABLE_CPP_EXCEPTIONS = YES GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ZendeskSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Realm/Realm.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift/RealmSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "Realm" -framework "RealmSwift" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.dev.xcconfig b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.dev.xcconfig index 7dca39c2..6f4235b9 100644 --- a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.dev.xcconfig +++ b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.dev.xcconfig @@ -1,12 +1,12 @@ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/Realm" "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" GCC_ENABLE_CPP_EXCEPTIONS = YES GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ZendeskSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Realm/Realm.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift/RealmSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "Realm" -framework "RealmSwift" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.release.xcconfig b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.release.xcconfig index 7dca39c2..6f4235b9 100644 --- a/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.release.xcconfig +++ b/Pods/Target Support Files/Pods-SenseApp-Sense/Pods-SenseApp-Sense.release.xcconfig @@ -1,12 +1,12 @@ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/Realm" "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/Analytics" "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag" "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType" "$PODS_CONFIGURATION_BUILD_DIR/Charts" "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain" "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth" "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController" "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView" "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval" "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf" "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer" "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController" "$PODS_CONFIGURATION_BUILD_DIR/SenseKit" "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel" "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects" "$PODS_CONFIGURATION_BUILD_DIR/Zip" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary" "${PODS_ROOT}/ZendeskSDK" GCC_ENABLE_CPP_EXCEPTIONS = YES GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ZendeskSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Realm/Realm.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift/RealmSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "Realm" -framework "RealmSwift" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Analytics/Analytics.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/AttributedMarkdown/AttributedMarkdown.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bugsnag/Bugsnag.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CGFloatType/CGFloatType.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Charts/Charts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/CocoaLumberjack/CocoaLumberjack.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FXKeychain/FXKeychain.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/LGBluetooth/LGBluetooth.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MSDynamicsDrawerViewController/MSDynamicsDrawerViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NAPickerView/NAPickerView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/NSJSONSerialization-NSNullRemoval/NSJSONSerialization_NSNullRemoval.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SHSProtoBuf/ProtocolBuffers.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SORelativeDateTransformer/SORelativeDateTransformer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SVWebViewController/SVWebViewController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SenseKit/SenseKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UICountingLabel/UICountingLabel.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageEffects/UIImageEffects.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary/iOSDFULibrary.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ZendeskSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "AFNetworking" -framework "Analytics" -framework "AttributedMarkdown" -framework "Bolts" -framework "Bugsnag" -framework "CGFloatType" -framework "Charts" -framework "CocoaLumberjack" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FXKeychain" -framework "LGBluetooth" -framework "MSDynamicsDrawerViewController" -framework "MessageUI" -framework "MobileCoreServices" -framework "NAPickerView" -framework "NSJSONSerialization_NSNullRemoval" -framework "ProtocolBuffers" -framework "SORelativeDateTransformer" -framework "SVWebViewController" -framework "Security" -framework "SenseKit" -framework "SystemConfiguration" -framework "UICountingLabel" -framework "UIImageEffects" -framework "ZendeskProviderSDK" -framework "ZendeskSDK" -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Realm/Info.plist b/Pods/Target Support Files/Realm/Info.plist deleted file mode 100644 index ba61e715..00000000 --- a/Pods/Target Support Files/Realm/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.103.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Realm/Realm-dummy.m b/Pods/Target Support Files/Realm/Realm-dummy.m deleted file mode 100644 index dd775bfe..00000000 --- a/Pods/Target Support Files/Realm/Realm-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Realm : NSObject -@end -@implementation PodsDummy_Realm -@end diff --git a/Pods/Target Support Files/Realm/Realm-prefix.pch b/Pods/Target Support Files/Realm/Realm-prefix.pch deleted file mode 100644 index aa992a4a..00000000 --- a/Pods/Target Support Files/Realm/Realm-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/Pods/Target Support Files/Realm/Realm.modulemap b/Pods/Target Support Files/Realm/Realm.modulemap deleted file mode 100644 index 18b5e2ec..00000000 --- a/Pods/Target Support Files/Realm/Realm.modulemap +++ /dev/null @@ -1,27 +0,0 @@ -framework module Realm { - umbrella header "Realm.h" - - export * - module * { export * } - - explicit module Private { - header "RLMAccessor.h" - header "RLMArray_Private.h" - header "RLMListBase.h" - header "RLMMigration_Private.h" - header "RLMObjectSchema_Private.h" - header "RLMObjectStore.h" - header "RLMObject_Private.h" - header "RLMOptionalBase.h" - header "RLMProperty_Private.h" - header "RLMRealmConfiguration_Private.h" - header "RLMRealm_Private.h" - header "RLMResults_Private.h" - header "RLMSchema_Private.h" - } - - explicit module Dynamic { - header "RLMRealm_Dynamic.h" - header "RLMObjectBase_Dynamic.h" - } -} diff --git a/Pods/Target Support Files/Realm/Realm.xcconfig b/Pods/Target Support Files/Realm/Realm.xcconfig deleted file mode 100644 index d2e89217..00000000 --- a/Pods/Target Support Files/Realm/Realm.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -APPLICATION_EXTENSION_API_ONLY = YES -CLANG_CXX_LANGUAGE_STANDARD = compiler-default -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Realm -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ZendeskSDK" "${PODS_ROOT}/Realm/include/core" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Realm/core" -OTHER_CPLUSPLUSFLAGS = -std=c++1y $(inherited) -OTHER_LDFLAGS = -l"c++" -l"realm-ios" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USER_HEADER_SEARCH_PATHS = "${PODS_ROOT}/Realm/include" "${PODS_ROOT}/Realm/include/Realm" diff --git a/Pods/Target Support Files/RealmSwift/Info.plist b/Pods/Target Support Files/RealmSwift/Info.plist deleted file mode 100644 index ba61e715..00000000 --- a/Pods/Target Support Files/RealmSwift/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.103.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/RealmSwift/RealmSwift-dummy.m b/Pods/Target Support Files/RealmSwift/RealmSwift-dummy.m deleted file mode 100644 index cf759b1f..00000000 --- a/Pods/Target Support Files/RealmSwift/RealmSwift-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_RealmSwift : NSObject -@end -@implementation PodsDummy_RealmSwift -@end diff --git a/Pods/Target Support Files/RealmSwift/RealmSwift-prefix.pch b/Pods/Target Support Files/RealmSwift/RealmSwift-prefix.pch deleted file mode 100644 index aa992a4a..00000000 --- a/Pods/Target Support Files/RealmSwift/RealmSwift-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/Pods/Target Support Files/RealmSwift/RealmSwift-umbrella.h b/Pods/Target Support Files/RealmSwift/RealmSwift-umbrella.h deleted file mode 100644 index 81f01b39..00000000 --- a/Pods/Target Support Files/RealmSwift/RealmSwift-umbrella.h +++ /dev/null @@ -1,6 +0,0 @@ -#import - - -FOUNDATION_EXPORT double RealmSwiftVersionNumber; -FOUNDATION_EXPORT const unsigned char RealmSwiftVersionString[]; - diff --git a/Pods/Target Support Files/RealmSwift/RealmSwift.modulemap b/Pods/Target Support Files/RealmSwift/RealmSwift.modulemap deleted file mode 100644 index 7f9767a0..00000000 --- a/Pods/Target Support Files/RealmSwift/RealmSwift.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module RealmSwift { - umbrella header "RealmSwift-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig b/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig deleted file mode 100644 index f0f3364e..00000000 --- a/Pods/Target Support Files/RealmSwift/RealmSwift.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -APPLICATION_EXTENSION_API_ONLY = YES -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/RealmSwift -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Realm" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/ZendeskSDK" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -SWIFT_WHOLE_MODULE_OPTIMIZATION = YES diff --git a/Pods/Target Support Files/SenseKit/SenseKit-umbrella.h b/Pods/Target Support Files/SenseKit/SenseKit-umbrella.h index f10e57ba..996f0e5e 100644 --- a/Pods/Target Support Files/SenseKit/SenseKit-umbrella.h +++ b/Pods/Target Support Files/SenseKit/SenseKit-umbrella.h @@ -9,7 +9,6 @@ #import "SENAPIClient.h" #import "SENAPIDevice.h" #import "SENAPIExpansion.h" -#import "SENAPIFeature.h" #import "SENAPIInsight.h" #import "SENAPINotification.h" #import "SENAPIPhoto.h" @@ -48,7 +47,6 @@ #import "SENDevicePairingInfo.h" #import "SENDFUStatus.h" #import "SENExpansion.h" -#import "SENFeatures.h" #import "SENInsight.h" #import "SENKeyedArchiver.h" #import "SENLocalPreferences.h" @@ -58,6 +56,7 @@ #import "SENQuestion.h" #import "SENRemoteImage.h" #import "SENSenseMetadata.h" +#import "SENSenseVoiceSettings.h" #import "SENSenseWiFiStatus.h" #import "SENSensor.h" #import "SENSensorDataRequest.h" diff --git a/Sense.xcodeproj/project.pbxproj b/Sense.xcodeproj/project.pbxproj index de4523e5..52c9902f 100644 --- a/Sense.xcodeproj/project.pbxproj +++ b/Sense.xcodeproj/project.pbxproj @@ -92,7 +92,6 @@ 8ACD40451BACAF7400BB2815 /* Launch.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8ACD40441BACAF7400BB2815 /* Launch.xib */; }; 8AD331261BB0836700DFF95A /* Alarm.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8AD331251BB0836700DFF95A /* Alarm.xcassets */; }; 8AD331281BB08C4300DFF95A /* Drawer.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8AD331271BB08C4300DFF95A /* Drawer.xcassets */; }; - 8AD3312A1BB08D5300DFF95A /* Sensors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8AD331291BB08D5300DFF95A /* Sensors.xcassets */; }; 8AD3312C1BB08D9900DFF95A /* Settings.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8AD3312B1BB08D9900DFF95A /* Settings.xcassets */; }; 8AD3312E1BB08DCB00DFF95A /* Questions.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8AD3312D1BB08DCB00DFF95A /* Questions.xcassets */; }; 8AD331301BB08DFF00DFF95A /* Timeline.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8AD3312F1BB08DFF00DFF95A /* Timeline.xcassets */; }; @@ -136,6 +135,15 @@ BF1E2E5D1A00691000DDD0D0 /* HEMInsightCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1E2E5C1A00691000DDD0D0 /* HEMInsightCollectionViewCell.m */; }; BF20B2221BFAA3BE00AD1F21 /* HEMSettingsHeaderFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF20B2211BFAA3BE00AD1F21 /* HEMSettingsHeaderFooterView.m */; }; BF2123F61B66E8B50017D67A /* HEMAppUsage.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2123F51B66E8B50017D67A /* HEMAppUsage.m */; }; + BF21F01C1DAEE6400057F24E /* HEMVoiceExampleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BF21F01B1DAEE6400057F24E /* HEMVoiceExampleView.xib */; }; + BF21F0221DAEEB560057F24E /* HEMVoiceExampleView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF21F0211DAEEB560057F24E /* HEMVoiceExampleView.m */; }; + BF21F0241DAEF0430057F24E /* Voice.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF21F0231DAEF0430057F24E /* Voice.xcassets */; }; + BF21F0271DAF20540057F24E /* HEMAlarmExpansionListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF21F0261DAF20540057F24E /* HEMAlarmExpansionListCell.m */; }; + BF21F02A1DAFFC120057F24E /* HEMWelcomeVoiceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF21F0291DAFFC120057F24E /* HEMWelcomeVoiceCell.m */; }; + BF21F02D1DB0253D0057F24E /* HEMVoiceExamplesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF21F02C1DB0253D0057F24E /* HEMVoiceExamplesViewController.m */; }; + BF21F0331DB02B720057F24E /* HEMVoiceExampleGroupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF21F0321DB02B720057F24E /* HEMVoiceExampleGroupCell.m */; }; + BF21F0361DB02B920057F24E /* HEMVoiceGroupHeaderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF21F0351DB02B920057F24E /* HEMVoiceGroupHeaderCell.m */; }; + BF21F0391DB02C650057F24E /* HEMVoiceExamplesPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF21F0381DB02C650057F24E /* HEMVoiceExamplesPresenter.m */; }; BF238DE31D1A126600F6E62C /* HEMShareService.m in Sources */ = {isa = PBXBuildFile; fileRef = BF238DE21D1A126600F6E62C /* HEMShareService.m */; }; BF238DE71D1A15FC00F6E62C /* HEMShareContentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = BF238DE61D1A15FC00F6E62C /* HEMShareContentProvider.m */; }; BF238DEA1D1B254100F6E62C /* HEMConfirmationView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF238DE91D1B254100F6E62C /* HEMConfirmationView.m */; }; @@ -151,6 +159,10 @@ BF2AB93C1B1940610092E9C4 /* HEMFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2AB93B1B1940610092E9C4 /* HEMFormViewController.m */; }; BF2D64341C585C01009AD365 /* HEMHandHoldingServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2D64331C585C01009AD365 /* HEMHandHoldingServiceSpec.m */; }; BF2EAD211B2F520400C3A6E3 /* HEMSupportTopicsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2EAD201B2F520400C3A6E3 /* HEMSupportTopicsViewController.m */; }; + BF2F4C641DAD977A00502521 /* HEMVoiceFeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2F4C631DAD977A00502521 /* HEMVoiceFeedViewController.m */; }; + BF2F4C681DAD9BEA00502521 /* HEMVoiceCommandsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2F4C671DAD9BEA00502521 /* HEMVoiceCommandsCell.m */; }; + BF2F4C6C1DADA2DB00502521 /* HEMVoiceFeedPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2F4C6B1DADA2DB00502521 /* HEMVoiceFeedPresenter.m */; }; + BF2F4C701DADB22700502521 /* HEMVoiceCommandGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2F4C6F1DADB22700502521 /* HEMVoiceCommandGroup.m */; }; BF31A5DA1D07AEC20054D82E /* HEMLocationRequestPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF31A5D91D07AEC20054D82E /* HEMLocationRequestPresenter.m */; }; BF3326E01D87309B009A3E65 /* HEMSensorDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF3326DF1D87309B009A3E65 /* HEMSensorDetailViewController.m */; }; BF3326E31D8751FF009A3E65 /* HEMSensorValueCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF3326E21D8751FF009A3E65 /* HEMSensorValueCollectionViewCell.m */; }; @@ -201,7 +213,6 @@ BF53D8CE1D931D5F00C24F9D /* RoomConditionsExtension.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF53D8C31D931AEE00C24F9D /* RoomConditionsExtension.xcassets */; }; BF53D8CF1D931E3F00C24F9D /* HEMRoomConditionsExtViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF53D8BF1D931AEE00C24F9D /* HEMRoomConditionsExtViewController.m */; }; BF53D8D01D931E4B00C24F9D /* HEMSensorExtTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF53D8C11D931AEE00C24F9D /* HEMSensorExtTableViewCell.m */; }; - BF5592421C21048D00FC7849 /* HEMInsightTabPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5592411C21048D00FC7849 /* HEMInsightTabPresenter.m */; }; BF55D87E1CA484F500379FBF /* HEMSoundsContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF55D87D1CA484F500379FBF /* HEMSoundsContainerViewController.m */; }; BF55D8811CA48A6E00379FBF /* HEMSoundsTabPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF55D8801CA48A6E00379FBF /* HEMSoundsTabPresenter.m */; }; BF55D8841CA48C7F00379FBF /* HEMSoundsContentPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF55D8831CA48C7F00379FBF /* HEMSoundsContentPresenter.m */; }; @@ -223,6 +234,9 @@ BF5BAD081C6169BF00347185 /* HEMTrendsCircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5BAD071C6169BF00347185 /* HEMTrendsCircleView.m */; }; BF5BF2991D78D628007B39A2 /* HEMSensorCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5BF2981D78D628007B39A2 /* HEMSensorCollectionViewCell.m */; }; BF5D532B1A26749F0090DD6A /* HEMActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5D532A1A26749F0090DD6A /* HEMActivityIndicatorView.m */; }; + BF5F972B1DB6C61800EF460B /* HEMVolumeControlViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5F972A1DB6C61800EF460B /* HEMVolumeControlViewController.m */; }; + BF5F97311DB6C80D00EF460B /* HEMVolumeControlPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5F97301DB6C80D00EF460B /* HEMVolumeControlPresenter.m */; }; + BF5F97341DB6C94700EF460B /* HEMVolumeSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5F97331DB6C94700EF460B /* HEMVolumeSlider.m */; }; BF6098741D4811CA0005C8F0 /* HEMVoiceTutorialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF6098731D4811CA0005C8F0 /* HEMVoiceTutorialViewController.m */; }; BF6098771D4820E20005C8F0 /* HEMVoiceTutorialPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF6098761D4820E20005C8F0 /* HEMVoiceTutorialPresenter.m */; }; BF6098861D4AD67A0005C8F0 /* HEMVoiceService.m in Sources */ = {isa = PBXBuildFile; fileRef = BF6098851D4AD67A0005C8F0 /* HEMVoiceService.m */; }; @@ -267,6 +281,9 @@ BF78E9A21B266C310015949F /* HEMTutorialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF78E9A11B266C310015949F /* HEMTutorialViewController.m */; }; BF78E9A61B2762060015949F /* HEMTutorialContent.m in Sources */ = {isa = PBXBuildFile; fileRef = BF78E9A51B2762060015949F /* HEMTutorialContent.m */; }; BF78E9A91B2763CA0015949F /* HEMTutorialDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BF78E9A81B2763CA0015949F /* HEMTutorialDataSource.m */; }; + BF7B2F7A1DB9AAA600A8E602 /* HEMAlarmValueRangePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF7B2F791DB9AAA600A8E602 /* HEMAlarmValueRangePickerView.m */; }; + BF7B2F7D1DB9AE5900A8E602 /* HEMAlarmExpansionSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF7B2F7C1DB9AE5900A8E602 /* HEMAlarmExpansionSetupViewController.m */; }; + BF7B2F801DB9B37000A8E602 /* HEMAlarmExpansionSetupPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF7B2F7F1DB9B37000A8E602 /* HEMAlarmExpansionSetupPresenter.m */; }; BF7F1BCA19E304050028F799 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF7F1BC919E304050028F799 /* NotificationCenter.framework */; }; BF7F1BD519E304050028F799 /* RoomConditionsExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = BF7F1BC819E304050028F799 /* RoomConditionsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BF812A9A1B6827CD00BF672F /* HEMAppUsageSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = BF812A991B6827CD00BF672F /* HEMAppUsageSpec.m */; }; @@ -291,6 +308,8 @@ BF885F251CE562A500A92F90 /* HEMNewAccountPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF885F241CE562A500A92F90 /* HEMNewAccountPresenter.m */; }; BF885F281CE6592C00A92F90 /* HEMTextFieldCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF885F271CE6592C00A92F90 /* HEMTextFieldCollectionViewCell.m */; }; BF885F2B1CE6750700A92F90 /* HEMNewProfileCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF885F2A1CE6750700A92F90 /* HEMNewProfileCollectionViewCell.m */; }; + BF88EA791DBECF3F00BCE15E /* HEMMathUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = BFB93C7819CB7F89005067D0 /* HEMMathUtil.m */; }; + BF88EA7B1DBEF8EE00BCE15E /* AmazonReviewsForVoice.plist in Resources */ = {isa = PBXBuildFile; fileRef = BF88EA7A1DBEF8EE00BCE15E /* AmazonReviewsForVoice.plist */; }; BF896D491C74225A0095D37D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; BF896D4C1C74227E0095D37D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; BF896D4D1C7422CD0095D37D /* UIColor+HEMStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A7D800D1A3F952000B0BFD7 /* UIColor+HEMStyle.m */; }; @@ -310,7 +329,6 @@ BF8C094D1C335386005AB5A7 /* HEMDeviceServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8C094C1C335386005AB5A7 /* HEMDeviceServiceSpec.m */; }; BF8C09511C345C98005AB5A7 /* HEMAlarmPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8C09501C345C98005AB5A7 /* HEMAlarmPresenter.m */; }; BF8C09551C345DCA005AB5A7 /* HEMAlarmService.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8C09541C345DCA005AB5A7 /* HEMAlarmService.m */; }; - BF8E1AA11A689FB2009E421F /* HEMSenseAudioViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8E1AA01A689FB2009E421F /* HEMSenseAudioViewController.m */; }; BF90E2B81A854F6B00816BC1 /* HEMURLImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF90E2B71A854F6B00816BC1 /* HEMURLImageView.m */; }; BF90E2BB1A8578E900816BC1 /* HEMImageCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF90E2BA1A8578E900816BC1 /* HEMImageCollectionViewCell.m */; }; BF90E2BE1A857DF600816BC1 /* HEMTextCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BF90E2BD1A857DF600816BC1 /* HEMTextCollectionViewCell.m */; }; @@ -322,6 +340,8 @@ BF98FC361A98017C00AEC04C /* HEMTextFooterCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = BF98FC351A98017C00AEC04C /* HEMTextFooterCollectionReusableView.m */; }; BF98FC391A9BB29D00AEC04C /* HEMConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BF98FC381A9BB29D00AEC04C /* HEMConfig.m */; }; BF9C87D819B6A199003188D4 /* HEMPillPairViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9C87D719B6A199003188D4 /* HEMPillPairViewController.m */; }; + BF9D499F1DAC57120027AAAA /* HEMFeedContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9D499E1DAC57120027AAAA /* HEMFeedContainerViewController.m */; }; + BF9D49A31DAC5D140027AAAA /* HEMFeedNavigationPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9D49A21DAC5D140027AAAA /* HEMFeedNavigationPresenter.m */; }; BFA2056D1D551CBD0090265B /* HEMSetupDoneViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BFA2056C1D551CBD0090265B /* HEMSetupDoneViewController.m */; }; BFA540E71BCDC326007AF607 /* HEMMeetSenseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BFA540E61BCDC326007AF607 /* HEMMeetSenseView.xib */; }; BFA540EA1BCDE0C6007AF607 /* HEMMeetSenseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BFA540E91BCDE0C6007AF607 /* HEMMeetSenseView.m */; }; @@ -389,6 +409,9 @@ BFCB894E1BFBCAFB00A72ED3 /* AvenirNext-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BFCB894A1BFBCAFB00A72ED3 /* AvenirNext-LightItalic.ttf */; }; BFCB894F1BFBCAFB00A72ED3 /* AvenirNext-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BFCB894B1BFBCAFB00A72ED3 /* AvenirNext-Thin.ttf */; }; BFCB89501BFBCAFB00A72ED3 /* AvenirNext-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BFCB894C1BFBCAFB00A72ED3 /* AvenirNext-ThinItalic.ttf */; }; + BFCB91C21DB16F7900810CFB /* HEMMacAddressHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BFCB91C11DB16F7900810CFB /* HEMMacAddressHeaderView.m */; }; + BFCB91C61DB57EA900810CFB /* HEMVoiceSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BFCB91C51DB57EA900810CFB /* HEMVoiceSettingsViewController.m */; }; + BFCB91CB1DB57F3700810CFB /* HEMVoiceSettingsPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BFCB91CA1DB57F3700810CFB /* HEMVoiceSettingsPresenter.m */; }; BFCB99091CA61A4E000D7619 /* HEMSleepSoundDurationsPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BFCB99081CA61A4E000D7619 /* HEMSleepSoundDurationsPresenter.m */; }; BFCB990C1CA9D032000D7619 /* HEMSleepSoundVolumePresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BFCB990B1CA9D032000D7619 /* HEMSleepSoundVolumePresenter.m */; }; BFCB99101CA9D259000D7619 /* HEMSleepSoundVolume.m in Sources */ = {isa = PBXBuildFile; fileRef = BFCB990F1CA9D259000D7619 /* HEMSleepSoundVolume.m */; }; @@ -659,7 +682,6 @@ 8ACD40441BACAF7400BB2815 /* Launch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Launch.xib; sourceTree = ""; }; 8AD331251BB0836700DFF95A /* Alarm.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Alarm.xcassets; sourceTree = ""; }; 8AD331271BB08C4300DFF95A /* Drawer.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Drawer.xcassets; sourceTree = ""; }; - 8AD331291BB08D5300DFF95A /* Sensors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Sensors.xcassets; sourceTree = ""; }; 8AD3312B1BB08D9900DFF95A /* Settings.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Settings.xcassets; sourceTree = ""; }; 8AD3312D1BB08DCB00DFF95A /* Questions.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Questions.xcassets; sourceTree = ""; }; 8AD3312F1BB08DFF00DFF95A /* Timeline.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Timeline.xcassets; sourceTree = ""; }; @@ -741,6 +763,22 @@ BF20B2211BFAA3BE00AD1F21 /* HEMSettingsHeaderFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMSettingsHeaderFooterView.m; sourceTree = ""; }; BF2123F41B66E8B50017D67A /* HEMAppUsage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMAppUsage.h; sourceTree = ""; }; BF2123F51B66E8B50017D67A /* HEMAppUsage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAppUsage.m; sourceTree = ""; }; + BF21F01B1DAEE6400057F24E /* HEMVoiceExampleView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HEMVoiceExampleView.xib; sourceTree = ""; }; + BF21F0201DAEEB560057F24E /* HEMVoiceExampleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceExampleView.h; sourceTree = ""; }; + BF21F0211DAEEB560057F24E /* HEMVoiceExampleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceExampleView.m; sourceTree = ""; }; + BF21F0231DAEF0430057F24E /* Voice.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Voice.xcassets; sourceTree = ""; }; + BF21F0251DAF20540057F24E /* HEMAlarmExpansionListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMAlarmExpansionListCell.h; sourceTree = ""; }; + BF21F0261DAF20540057F24E /* HEMAlarmExpansionListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAlarmExpansionListCell.m; sourceTree = ""; }; + BF21F0281DAFFC120057F24E /* HEMWelcomeVoiceCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMWelcomeVoiceCell.h; sourceTree = ""; }; + BF21F0291DAFFC120057F24E /* HEMWelcomeVoiceCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMWelcomeVoiceCell.m; sourceTree = ""; }; + BF21F02B1DB0253D0057F24E /* HEMVoiceExamplesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceExamplesViewController.h; sourceTree = ""; }; + BF21F02C1DB0253D0057F24E /* HEMVoiceExamplesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceExamplesViewController.m; sourceTree = ""; }; + BF21F0311DB02B720057F24E /* HEMVoiceExampleGroupCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceExampleGroupCell.h; sourceTree = ""; }; + BF21F0321DB02B720057F24E /* HEMVoiceExampleGroupCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceExampleGroupCell.m; sourceTree = ""; }; + BF21F0341DB02B920057F24E /* HEMVoiceGroupHeaderCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceGroupHeaderCell.h; sourceTree = ""; }; + BF21F0351DB02B920057F24E /* HEMVoiceGroupHeaderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceGroupHeaderCell.m; sourceTree = ""; }; + BF21F0371DB02C650057F24E /* HEMVoiceExamplesPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceExamplesPresenter.h; sourceTree = ""; }; + BF21F0381DB02C650057F24E /* HEMVoiceExamplesPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceExamplesPresenter.m; sourceTree = ""; }; BF238DE11D1A126600F6E62C /* HEMShareService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMShareService.h; sourceTree = ""; }; BF238DE21D1A126600F6E62C /* HEMShareService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMShareService.m; sourceTree = ""; }; BF238DE51D1A15FC00F6E62C /* HEMShareContentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMShareContentProvider.h; sourceTree = ""; }; @@ -767,6 +805,14 @@ BF2D64331C585C01009AD365 /* HEMHandHoldingServiceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMHandHoldingServiceSpec.m; sourceTree = ""; }; BF2EAD1F1B2F520400C3A6E3 /* HEMSupportTopicsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSupportTopicsViewController.h; sourceTree = ""; }; BF2EAD201B2F520400C3A6E3 /* HEMSupportTopicsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMSupportTopicsViewController.m; sourceTree = ""; }; + BF2F4C621DAD977A00502521 /* HEMVoiceFeedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceFeedViewController.h; sourceTree = ""; }; + BF2F4C631DAD977A00502521 /* HEMVoiceFeedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceFeedViewController.m; sourceTree = ""; }; + BF2F4C661DAD9BEA00502521 /* HEMVoiceCommandsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceCommandsCell.h; sourceTree = ""; }; + BF2F4C671DAD9BEA00502521 /* HEMVoiceCommandsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceCommandsCell.m; sourceTree = ""; }; + BF2F4C6A1DADA2DB00502521 /* HEMVoiceFeedPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceFeedPresenter.h; sourceTree = ""; }; + BF2F4C6B1DADA2DB00502521 /* HEMVoiceFeedPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceFeedPresenter.m; sourceTree = ""; }; + BF2F4C6E1DADB22700502521 /* HEMVoiceCommandGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceCommandGroup.h; sourceTree = ""; }; + BF2F4C6F1DADB22700502521 /* HEMVoiceCommandGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceCommandGroup.m; sourceTree = ""; }; BF31A5D81D07AEC20054D82E /* HEMLocationRequestPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMLocationRequestPresenter.h; sourceTree = ""; }; BF31A5D91D07AEC20054D82E /* HEMLocationRequestPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMLocationRequestPresenter.m; sourceTree = ""; }; BF3326DE1D87309B009A3E65 /* HEMSensorDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSensorDetailViewController.h; sourceTree = ""; }; @@ -853,8 +899,6 @@ BF53D8C31D931AEE00C24F9D /* RoomConditionsExtension.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = RoomConditionsExtension.xcassets; path = Extensions/RoomConditions/RoomConditionsExtension.xcassets; sourceTree = SOURCE_ROOT; }; BF53D8C81D931AF900C24F9D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Extensions/RoomConditions/Info.plist; sourceTree = SOURCE_ROOT; }; BF53D8C91D931AF900C24F9D /* Sense.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = Sense.entitlements; path = Extensions/RoomConditions/Sense.entitlements; sourceTree = SOURCE_ROOT; }; - BF5592401C21048D00FC7849 /* HEMInsightTabPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMInsightTabPresenter.h; sourceTree = ""; }; - BF5592411C21048D00FC7849 /* HEMInsightTabPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMInsightTabPresenter.m; sourceTree = ""; }; BF55D87C1CA484F500379FBF /* HEMSoundsContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSoundsContainerViewController.h; sourceTree = ""; }; BF55D87D1CA484F500379FBF /* HEMSoundsContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMSoundsContainerViewController.m; sourceTree = ""; }; BF55D87F1CA48A6E00379FBF /* HEMSoundsTabPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSoundsTabPresenter.h; sourceTree = ""; }; @@ -896,6 +940,12 @@ BF5BF2981D78D628007B39A2 /* HEMSensorCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMSensorCollectionViewCell.m; sourceTree = ""; }; BF5D53291A26749F0090DD6A /* HEMActivityIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMActivityIndicatorView.h; sourceTree = ""; }; BF5D532A1A26749F0090DD6A /* HEMActivityIndicatorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMActivityIndicatorView.m; sourceTree = ""; }; + BF5F97291DB6C61800EF460B /* HEMVolumeControlViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVolumeControlViewController.h; sourceTree = ""; }; + BF5F972A1DB6C61800EF460B /* HEMVolumeControlViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVolumeControlViewController.m; sourceTree = ""; }; + BF5F972F1DB6C80D00EF460B /* HEMVolumeControlPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVolumeControlPresenter.h; sourceTree = ""; }; + BF5F97301DB6C80D00EF460B /* HEMVolumeControlPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVolumeControlPresenter.m; sourceTree = ""; }; + BF5F97321DB6C94700EF460B /* HEMVolumeSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVolumeSlider.h; sourceTree = ""; }; + BF5F97331DB6C94700EF460B /* HEMVolumeSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVolumeSlider.m; sourceTree = ""; }; BF6098721D4811CA0005C8F0 /* HEMVoiceTutorialViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceTutorialViewController.h; sourceTree = ""; }; BF6098731D4811CA0005C8F0 /* HEMVoiceTutorialViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceTutorialViewController.m; sourceTree = ""; }; BF6098751D4820E20005C8F0 /* HEMVoiceTutorialPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceTutorialPresenter.h; sourceTree = ""; }; @@ -975,6 +1025,12 @@ BF78E9A51B2762060015949F /* HEMTutorialContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMTutorialContent.m; sourceTree = ""; }; BF78E9A71B2763CA0015949F /* HEMTutorialDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMTutorialDataSource.h; sourceTree = ""; }; BF78E9A81B2763CA0015949F /* HEMTutorialDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMTutorialDataSource.m; sourceTree = ""; }; + BF7B2F781DB9AAA600A8E602 /* HEMAlarmValueRangePickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMAlarmValueRangePickerView.h; sourceTree = ""; }; + BF7B2F791DB9AAA600A8E602 /* HEMAlarmValueRangePickerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAlarmValueRangePickerView.m; sourceTree = ""; }; + BF7B2F7B1DB9AE5900A8E602 /* HEMAlarmExpansionSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMAlarmExpansionSetupViewController.h; sourceTree = ""; }; + BF7B2F7C1DB9AE5900A8E602 /* HEMAlarmExpansionSetupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAlarmExpansionSetupViewController.m; sourceTree = ""; }; + BF7B2F7E1DB9B37000A8E602 /* HEMAlarmExpansionSetupPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMAlarmExpansionSetupPresenter.h; sourceTree = ""; }; + BF7B2F7F1DB9B37000A8E602 /* HEMAlarmExpansionSetupPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAlarmExpansionSetupPresenter.m; sourceTree = ""; }; BF7F1BC819E304050028F799 /* RoomConditionsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RoomConditionsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; BF7F1BC919E304050028F799 /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; }; BF812A991B6827CD00BF672F /* HEMAppUsageSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAppUsageSpec.m; sourceTree = ""; }; @@ -1017,6 +1073,7 @@ BF885F271CE6592C00A92F90 /* HEMTextFieldCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMTextFieldCollectionViewCell.m; sourceTree = ""; }; BF885F291CE6750700A92F90 /* HEMNewProfileCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMNewProfileCollectionViewCell.h; sourceTree = ""; }; BF885F2A1CE6750700A92F90 /* HEMNewProfileCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMNewProfileCollectionViewCell.m; sourceTree = ""; }; + BF88EA7A1DBEF8EE00BCE15E /* AmazonReviewsForVoice.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AmazonReviewsForVoice.plist; sourceTree = ""; }; BF896D4A1C7422720095D37D /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; BF8A0DD71BEAA523006B3B70 /* Trends.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Trends.xcassets; sourceTree = ""; }; BF8A0DD91BEACC58006B3B70 /* HEMNoAlarmCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMNoAlarmCell.h; sourceTree = ""; }; @@ -1048,8 +1105,6 @@ BF8C09501C345C98005AB5A7 /* HEMAlarmPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAlarmPresenter.m; sourceTree = ""; }; BF8C09531C345DCA005AB5A7 /* HEMAlarmService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMAlarmService.h; sourceTree = ""; }; BF8C09541C345DCA005AB5A7 /* HEMAlarmService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMAlarmService.m; sourceTree = ""; }; - BF8E1A9F1A689FB2009E421F /* HEMSenseAudioViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSenseAudioViewController.h; sourceTree = ""; }; - BF8E1AA01A689FB2009E421F /* HEMSenseAudioViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMSenseAudioViewController.m; sourceTree = ""; }; BF90E2B61A854F6B00816BC1 /* HEMURLImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMURLImageView.h; sourceTree = ""; }; BF90E2B71A854F6B00816BC1 /* HEMURLImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMURLImageView.m; sourceTree = ""; }; BF90E2B91A8578E900816BC1 /* HEMImageCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMImageCollectionViewCell.h; sourceTree = ""; }; @@ -1071,6 +1126,10 @@ BF98FC381A9BB29D00AEC04C /* HEMConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMConfig.m; sourceTree = ""; }; BF9C87D619B6A199003188D4 /* HEMPillPairViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMPillPairViewController.h; sourceTree = ""; }; BF9C87D719B6A199003188D4 /* HEMPillPairViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMPillPairViewController.m; sourceTree = ""; }; + BF9D499D1DAC57120027AAAA /* HEMFeedContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMFeedContainerViewController.h; sourceTree = ""; }; + BF9D499E1DAC57120027AAAA /* HEMFeedContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMFeedContainerViewController.m; sourceTree = ""; }; + BF9D49A11DAC5D140027AAAA /* HEMFeedNavigationPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMFeedNavigationPresenter.h; sourceTree = ""; }; + BF9D49A21DAC5D140027AAAA /* HEMFeedNavigationPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMFeedNavigationPresenter.m; sourceTree = ""; }; BFA2056B1D551CBD0090265B /* HEMSetupDoneViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSetupDoneViewController.h; sourceTree = ""; }; BFA2056C1D551CBD0090265B /* HEMSetupDoneViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMSetupDoneViewController.m; sourceTree = ""; }; BFA540E61BCDC326007AF607 /* HEMMeetSenseView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HEMMeetSenseView.xib; sourceTree = ""; }; @@ -1190,6 +1249,12 @@ BFCB894A1BFBCAFB00A72ED3 /* AvenirNext-LightItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "AvenirNext-LightItalic.ttf"; path = "Resources/Fonts/AvenirNext-LightItalic.ttf"; sourceTree = SOURCE_ROOT; }; BFCB894B1BFBCAFB00A72ED3 /* AvenirNext-Thin.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "AvenirNext-Thin.ttf"; path = "Resources/Fonts/AvenirNext-Thin.ttf"; sourceTree = SOURCE_ROOT; }; BFCB894C1BFBCAFB00A72ED3 /* AvenirNext-ThinItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "AvenirNext-ThinItalic.ttf"; path = "Resources/Fonts/AvenirNext-ThinItalic.ttf"; sourceTree = SOURCE_ROOT; }; + BFCB91C01DB16F7900810CFB /* HEMMacAddressHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMMacAddressHeaderView.h; sourceTree = ""; }; + BFCB91C11DB16F7900810CFB /* HEMMacAddressHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMMacAddressHeaderView.m; sourceTree = ""; }; + BFCB91C41DB57EA900810CFB /* HEMVoiceSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceSettingsViewController.h; sourceTree = ""; }; + BFCB91C51DB57EA900810CFB /* HEMVoiceSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceSettingsViewController.m; sourceTree = ""; }; + BFCB91C91DB57F3700810CFB /* HEMVoiceSettingsPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMVoiceSettingsPresenter.h; sourceTree = ""; }; + BFCB91CA1DB57F3700810CFB /* HEMVoiceSettingsPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMVoiceSettingsPresenter.m; sourceTree = ""; }; BFCB99071CA61A4E000D7619 /* HEMSleepSoundDurationsPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSleepSoundDurationsPresenter.h; sourceTree = ""; }; BFCB99081CA61A4E000D7619 /* HEMSleepSoundDurationsPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HEMSleepSoundDurationsPresenter.m; sourceTree = ""; }; BFCB990A1CA9D032000D7619 /* HEMSleepSoundVolumePresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HEMSleepSoundVolumePresenter.h; sourceTree = ""; }; @@ -1462,6 +1527,7 @@ 8A03386A1974AFD800BE8327 /* Podfile */, 6003F595195388D20070C39A /* Sense-Info.plist */, BF238DFF1D1E009D00F6E62C /* AmazonReviews.plist */, + BF88EA7A1DBEF8EE00BCE15E /* AmazonReviewsForVoice.plist */, ); name = "Supporting Files"; sourceTree = ""; @@ -1637,6 +1703,8 @@ 8AB2683B19CCFDBF00017818 /* HEMAlarmListViewController.m */, 6003F5A5195388D20070C39A /* HEMAlarmViewController.h */, 6003F5A6195388D20070C39A /* HEMAlarmViewController.m */, + BF7B2F7B1DB9AE5900A8E602 /* HEMAlarmExpansionSetupViewController.h */, + BF7B2F7C1DB9AE5900A8E602 /* HEMAlarmExpansionSetupViewController.m */, ); name = "View Controllers"; sourceTree = ""; @@ -1705,6 +1773,8 @@ BF885F2A1CE6750700A92F90 /* HEMNewProfileCollectionViewCell.m */, BFE375E71CEE97130029EE66 /* HEMFbAutofillButton.h */, BFE375E81CEE97130029EE66 /* HEMFbAutofillButton.m */, + BFCB91C01DB16F7900810CFB /* HEMMacAddressHeaderView.h */, + BFCB91C11DB16F7900810CFB /* HEMMacAddressHeaderView.m */, ); name = Views; sourceTree = ""; @@ -1852,6 +1922,10 @@ 8AA1E62B1A898EDB00590EB6 /* HEMClockPickerView.m */, BF8A0DD91BEACC58006B3B70 /* HEMNoAlarmCell.h */, BF8A0DDA1BEACC58006B3B70 /* HEMNoAlarmCell.m */, + BF21F0251DAF20540057F24E /* HEMAlarmExpansionListCell.h */, + BF21F0261DAF20540057F24E /* HEMAlarmExpansionListCell.m */, + BF7B2F781DB9AAA600A8E602 /* HEMAlarmValueRangePickerView.h */, + BF7B2F791DB9AAA600A8E602 /* HEMAlarmValueRangePickerView.m */, ); name = Views; sourceTree = ""; @@ -1883,6 +1957,7 @@ children = ( 8AD331271BB08C4300DFF95A /* Drawer.xcassets */, 8A7D80171A40D70600B0BFD7 /* Layouts */, + BF9D49A01DAC57880027AAAA /* Presenters */, 8AC3C2E31A3CB3260074A87F /* View Controllers */, 8AC3C2E41A3CB32E0074A87F /* Views */, ); @@ -1894,6 +1969,8 @@ children = ( 8AC3C2DA1A3C7FF00074A87F /* HEMSnazzBarController.h */, 8AC3C2DB1A3C7FF00074A87F /* HEMSnazzBarController.m */, + BF9D499D1DAC57120027AAAA /* HEMFeedContainerViewController.h */, + BF9D499E1DAC57120027AAAA /* HEMFeedContainerViewController.m */, ); name = "View Controllers"; sourceTree = ""; @@ -1963,7 +2040,6 @@ 8AC49F981982DE5E00C2BD63 /* Sensors */ = { isa = PBXGroup; children = ( - 8AD331291BB08D5300DFF95A /* Sensors.xcassets */, BF6952601C57040B000A8E85 /* Presenters */, BF287D601C9CBEE50052F543 /* Services */, 8A7214351A1C12E1008B59C4 /* Utilities */, @@ -2067,8 +2143,6 @@ BF005C6E19FECACC00E68E87 /* HEMWifiPickerViewController.h */, BF005C6F19FECACC00E68E87 /* HEMWifiPickerViewController.m */, BFF3B45D1A5F569B00B11643 /* HEMSensePairDelegate.h */, - BF8E1A9F1A689FB2009E421F /* HEMSenseAudioViewController.h */, - BF8E1AA01A689FB2009E421F /* HEMSenseAudioViewController.m */, ); name = "Sense setup"; sourceTree = ""; @@ -2154,6 +2228,65 @@ name = Onboarding; sourceTree = ""; }; + BF2F4C611DAD975300502521 /* View Controllers */ = { + isa = PBXGroup; + children = ( + BFCB91C41DB57EA900810CFB /* HEMVoiceSettingsViewController.h */, + BFCB91C51DB57EA900810CFB /* HEMVoiceSettingsViewController.m */, + BF2F4C621DAD977A00502521 /* HEMVoiceFeedViewController.h */, + BF2F4C631DAD977A00502521 /* HEMVoiceFeedViewController.m */, + BF21F02B1DB0253D0057F24E /* HEMVoiceExamplesViewController.h */, + BF21F02C1DB0253D0057F24E /* HEMVoiceExamplesViewController.m */, + BF5F97291DB6C61800EF460B /* HEMVolumeControlViewController.h */, + BF5F972A1DB6C61800EF460B /* HEMVolumeControlViewController.m */, + ); + name = "View Controllers"; + sourceTree = ""; + }; + BF2F4C651DAD9BB300502521 /* Views */ = { + isa = PBXGroup; + children = ( + BF2F4C661DAD9BEA00502521 /* HEMVoiceCommandsCell.h */, + BF2F4C671DAD9BEA00502521 /* HEMVoiceCommandsCell.m */, + BF21F01B1DAEE6400057F24E /* HEMVoiceExampleView.xib */, + BF21F0201DAEEB560057F24E /* HEMVoiceExampleView.h */, + BF21F0211DAEEB560057F24E /* HEMVoiceExampleView.m */, + BF21F0281DAFFC120057F24E /* HEMWelcomeVoiceCell.h */, + BF21F0291DAFFC120057F24E /* HEMWelcomeVoiceCell.m */, + BF21F0311DB02B720057F24E /* HEMVoiceExampleGroupCell.h */, + BF21F0321DB02B720057F24E /* HEMVoiceExampleGroupCell.m */, + BF21F0341DB02B920057F24E /* HEMVoiceGroupHeaderCell.h */, + BF21F0351DB02B920057F24E /* HEMVoiceGroupHeaderCell.m */, + BF5F97321DB6C94700EF460B /* HEMVolumeSlider.h */, + BF5F97331DB6C94700EF460B /* HEMVolumeSlider.m */, + ); + name = Views; + sourceTree = ""; + }; + BF2F4C691DADA2BF00502521 /* Presenters */ = { + isa = PBXGroup; + children = ( + BFCB91C91DB57F3700810CFB /* HEMVoiceSettingsPresenter.h */, + BFCB91CA1DB57F3700810CFB /* HEMVoiceSettingsPresenter.m */, + BF2F4C6A1DADA2DB00502521 /* HEMVoiceFeedPresenter.h */, + BF2F4C6B1DADA2DB00502521 /* HEMVoiceFeedPresenter.m */, + BF21F0371DB02C650057F24E /* HEMVoiceExamplesPresenter.h */, + BF21F0381DB02C650057F24E /* HEMVoiceExamplesPresenter.m */, + BF5F972F1DB6C80D00EF460B /* HEMVolumeControlPresenter.h */, + BF5F97301DB6C80D00EF460B /* HEMVolumeControlPresenter.m */, + ); + name = Presenters; + sourceTree = ""; + }; + BF2F4C6D1DADB20D00502521 /* Models */ = { + isa = PBXGroup; + children = ( + BF2F4C6E1DADB22700502521 /* HEMVoiceCommandGroup.h */, + BF2F4C6F1DADB22700502521 /* HEMVoiceCommandGroup.m */, + ); + name = Models; + sourceTree = ""; + }; BF3583881CAC8F0D00760CD4 /* Shortcuts */ = { isa = PBXGroup; children = ( @@ -2299,8 +2432,6 @@ BF539CC61C0D38BA000F77AA /* HEMInsightsFeedPresenter.m */, BF83398A1C12277B00BFD0F4 /* HEMInsightPresenter.h */, BF83398B1C12277B00BFD0F4 /* HEMInsightPresenter.m */, - BF5592401C21048D00FC7849 /* HEMInsightTabPresenter.h */, - BF5592411C21048D00FC7849 /* HEMInsightTabPresenter.m */, BF69525D1C56FE5F000A8E85 /* HEMInsightsHandHoldingPresenter.h */, BF69525E1C56FE5F000A8E85 /* HEMInsightsHandHoldingPresenter.m */, BF238DF21D1C634400F6E62C /* HEMInsightActionPresenter.h */, @@ -2474,7 +2605,12 @@ BF6098821D4AD61F0005C8F0 /* Voice */ = { isa = PBXGroup; children = ( + BF21F0231DAEF0430057F24E /* Voice.xcassets */, + BF2F4C6D1DADB20D00502521 /* Models */, + BF2F4C691DADA2BF00502521 /* Presenters */, BF6098831D4AD6530005C8F0 /* Services */, + BF2F4C611DAD975300502521 /* View Controllers */, + BF2F4C651DAD9BB300502521 /* Views */, ); name = Voice; sourceTree = ""; @@ -3019,6 +3155,8 @@ BFB7B20F1CCFE9E40060999E /* HEMAlarmRepeatDaysPresenter.m */, BFBEE9101D18AC69007A986B /* HEMAlarmListPresenter.h */, BFBEE9111D18AC69007A986B /* HEMAlarmListPresenter.m */, + BF7B2F7E1DB9B37000A8E602 /* HEMAlarmExpansionSetupPresenter.h */, + BF7B2F7F1DB9B37000A8E602 /* HEMAlarmExpansionSetupPresenter.m */, ); name = Presenters; sourceTree = ""; @@ -3045,6 +3183,15 @@ name = Views; sourceTree = ""; }; + BF9D49A01DAC57880027AAAA /* Presenters */ = { + isa = PBXGroup; + children = ( + BF9D49A11DAC5D140027AAAA /* HEMFeedNavigationPresenter.h */, + BF9D49A21DAC5D140027AAAA /* HEMFeedNavigationPresenter.m */, + ); + name = Presenters; + sourceTree = ""; + }; BFA884A71C19FAC900613069 /* Controllers */ = { isa = PBXGroup; children = ( @@ -3629,8 +3776,8 @@ 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, BF238E001D1E009D00F6E62C /* AmazonReviews.plist in Resources */, BF5BACA01C920336001E77F6 /* SleepSounds.xcassets in Resources */, + BF88EA7B1DBEF8EE00BCE15E /* AmazonReviewsForVoice.plist in Resources */, BF9450AD1BC3541E00BA0023 /* SystemAlerts.xcassets in Resources */, - 8AD3312A1BB08D5300DFF95A /* Sensors.xcassets in Resources */, 8AD3313A1BB090DA00DFF95A /* Tutorial.xcassets in Resources */, BFF364731D62702E008D4DF8 /* Upgrade.xcassets in Resources */, BFCB894F1BFBCAFB00A72ED3 /* AvenirNext-Thin.ttf in Resources */, @@ -3641,6 +3788,7 @@ BF4BE3D81D835A1B003B96ED /* HEMSensorGroupMemberView.xib in Resources */, BFE7B6C01BEBE8FB0013740C /* Common.xcassets in Resources */, 6003F5A1195388D20070C39A /* Main.storyboard in Resources */, + BF21F0241DAEF0430057F24E /* Voice.xcassets in Resources */, BF53D8C71D931AEE00C24F9D /* RoomConditionsExtension.xcassets in Resources */, 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, 8AD331301BB08DFF00DFF95A /* Timeline.xcassets in Resources */, @@ -3648,6 +3796,7 @@ 8AD88C3B1A087DD000B4F803 /* HEMTimelineTopBarCollectionReusableView.xib in Resources */, BFAB22D91AD35F9C00CCBF8A /* HEMRoomCheckView.xib in Resources */, BF68B6771D8B6452001AD1EF /* HEMSensorScaleView.xib in Resources */, + BF21F01C1DAEE6400057F24E /* HEMVoiceExampleView.xib in Resources */, BF398C281D9F24BE009EEF59 /* Expansions.xcassets in Resources */, BFCB89471BFBCAEA00A72ED3 /* TimeZones.plist in Resources */, ); @@ -3909,6 +4058,7 @@ 8A7D800E1A3F952000B0BFD7 /* UIColor+HEMStyle.m in Sources */, BF238DFC1D1DACEB00F6E62C /* HEMShareButton.m in Sources */, 8AC49F9C198305F600C2BD63 /* HEMAuthenticationViewController.m in Sources */, + BFCB91C61DB57EA900810CFB /* HEMVoiceSettingsViewController.m in Sources */, BF14E3DB19EF3C3D0006EFEA /* HEMSenseSetupViewController.m in Sources */, BF5BAD021C5FE02100347185 /* HEMTrendsBarGraphCell.m in Sources */, 8A63D5551A5F372C00F5307D /* HEMTimelineFooterCollectionReusableView.m in Sources */, @@ -3989,6 +4139,7 @@ BF14E3D919EF3C3D0006EFEA /* HEMPillSetupViewController.m in Sources */, 8AB33FE6199D3F710046188F /* HEMLocationFinderViewController.m in Sources */, 8A7D80271A40ECDB00B0BFD7 /* NSAttributedString+HEMUtils.m in Sources */, + BF21F02D1DB0253D0057F24E /* HEMVoiceExamplesViewController.m in Sources */, 8A03386E197DD2D300BE8327 /* HEMSettingsTableViewController.m in Sources */, BFCB99091CA61A4E000D7619 /* HEMSleepSoundDurationsPresenter.m in Sources */, BFACC71A19A4282A00FC77EE /* HEMWifiPasswordViewController.m in Sources */, @@ -4007,22 +4158,26 @@ BF238DF81D1CAD0A00F6E62C /* UIActivityViewController+HEMSharing.m in Sources */, BF005C7019FECACC00E68E87 /* HEMWifiPickerViewController.m in Sources */, BFB0FBE719D38D790056FFEC /* HEMSenseViewController.m in Sources */, + BFCB91C21DB16F7900810CFB /* HEMMacAddressHeaderView.m in Sources */, 8A4B3D5E199534F000856BDE /* HEMMainStoryboard.m in Sources */, BF257EEA1A1D269300DAF923 /* HEMAlertView.m in Sources */, BFE375F01CEFE1520029EE66 /* UIImage+HEMCompression.m in Sources */, BF539CC01C0D292C000F77AA /* HEMInsightsService.m in Sources */, BF8C09301C29D9DF005AB5A7 /* HEMPasswordChangePresenter.m in Sources */, 8A8621671B5D5DC20033F44C /* HEMAppReview.m in Sources */, + BF21F02A1DAFFC120057F24E /* HEMWelcomeVoiceCell.m in Sources */, BFF6A5BA1B33790800A30429 /* HEMHandholdingView.m in Sources */, BFA884AD1C1A012100613069 /* HEMNetworkAlertService.m in Sources */, BFF6A5BD1B339CA400A30429 /* HEMHintMessageView.m in Sources */, BFEAA0A819A51DCF002FBD44 /* HEMWelcomeViewController.m in Sources */, BF535B7A1DA471AD001944F5 /* HEMExpansionsConfigViewController.m in Sources */, + BFCB91CB1DB57F3700810CFB /* HEMVoiceSettingsPresenter.m in Sources */, 8AA8D94019AD31E900349FD0 /* HEMMiniGraphCollectionViewCell.m in Sources */, 8A66FC8E199D17C000922ED5 /* HEMHeightPickerViewController.m in Sources */, 8AA1E62C1A898EDB00590EB6 /* HEMClockPickerView.m in Sources */, BF885F1E1CE54D0900A92F90 /* HEMCreateAccountViewController.m in Sources */, BFE3760C1CF79FF60029EE66 /* HEMPresenter+HEMBreadcrumb.m in Sources */, + BF21F0331DB02B720057F24E /* HEMVoiceExampleGroupCell.m in Sources */, BF78E9A21B266C310015949F /* HEMTutorialViewController.m in Sources */, BF645D971A9FB3A70051C120 /* HEMTransitionDelegate.m in Sources */, BF6D9B7E1C73EA8A00774322 /* HEMTrendsSleepDepthCell.m in Sources */, @@ -4035,6 +4190,7 @@ BF8339A21C18E05600BFD0F4 /* HEMNavigationShadowView.m in Sources */, BF05C8E11A3A52CB002A1307 /* HEMMultipleResponseCell.m in Sources */, BF1E2E5D1A00691000DDD0D0 /* HEMInsightCollectionViewCell.m in Sources */, + BF21F0271DAF20540057F24E /* HEMAlarmExpansionListCell.m in Sources */, BF6952631C570424000A8E85 /* HEMSensorHandHoldingPresenter.m in Sources */, BF3326E61D875213009A3E65 /* HEMSensorChartCollectionViewCell.m in Sources */, 8A50A1871B546AE2007FDECC /* HEMScreenUtils.m in Sources */, @@ -4048,6 +4204,7 @@ BFA884B41C1A0CAB00613069 /* HEMSystemAlertPresenter.m in Sources */, BF539CC71C0D38BA000F77AA /* HEMInsightsFeedPresenter.m in Sources */, 8ADF03CD1A719185002B036A /* HEMDynamicsStatusStyler.m in Sources */, + BF7B2F7A1DB9AAA600A8E602 /* HEMAlarmValueRangePickerView.m in Sources */, BF5BACF31C5BE2C800347185 /* HEMTrendsTabPresenter.m in Sources */, 8ADE06391B2F521B00976654 /* HEMSplitTextFormatter.m in Sources */, BFE376061CF654F20029EE66 /* HEMSignInNavBarPresenter.m in Sources */, @@ -4070,11 +4227,13 @@ BF8339891C10F70500BFD0F4 /* SENRemoteImage+HEMDeviceSpecific.m in Sources */, BF14E3D819EF3C3D0006EFEA /* HEMNoBLEViewController.m in Sources */, BFF3648D1D665C3E008D4DF8 /* HEMResetSenseViewController.m in Sources */, + BF2F4C641DAD977A00502521 /* HEMVoiceFeedViewController.m in Sources */, BFDFCE9F1B72884B000DA303 /* HEMSensorValueFormatter.m in Sources */, BF5B1D1E1D2C6F3600DF1190 /* HEMSleepPillDfuViewController.m in Sources */, BF8C09471C330E55005AB5A7 /* HEMDevicesPresenter.m in Sources */, BF5703DF1A81889800B613F0 /* HEMPillDescriptionViewController.m in Sources */, BFB59E0C1C03A7CB001BD941 /* HEMTimeZonePresenter.m in Sources */, + BF5F972B1DB6C61800EF460B /* HEMVolumeControlViewController.m in Sources */, 8AC49F87197F365C00C2BD63 /* HEMSleepScoreGraphView.m in Sources */, BF6D9B7B1C6D409F00774322 /* HEMIntroMessageCell.m in Sources */, BF0E37991C3C70FC00FEA097 /* HEMStyle.m in Sources */, @@ -4092,17 +4251,20 @@ BF35838C1CAC8F3600760CD4 /* HEMShortcutService.m in Sources */, 8A91EEF819E46D9900EA6E5F /* HEMAlarmCache.m in Sources */, 8A66FC9C199D308B00922ED5 /* HEMWeightPickerViewController.m in Sources */, - BF8E1AA11A689FB2009E421F /* HEMSenseAudioViewController.m in Sources */, 8B15FB5B1C0E6EBA007F9C5F /* HEMTellAFriendItemProvider.m in Sources */, BFB815201BFCFC3D009740D0 /* HEMDeviceWarning.m in Sources */, BF8A0DDB1BEACC58006B3B70 /* HEMNoAlarmCell.m in Sources */, + BF7B2F801DB9B37000A8E602 /* HEMAlarmExpansionSetupPresenter.m in Sources */, BF6215101AB8CF730047A518 /* HEMTimeZoneViewController.m in Sources */, BFC4C20B1B90D89500BB7761 /* HEMEmbeddedVideoView.m in Sources */, BFB7B2101CCFE9E40060999E /* HEMAlarmRepeatDaysPresenter.m in Sources */, BFD9A96D1D5A80E5003EC82A /* HEMOnboardingNewSensePresenter.m in Sources */, BF2EAD211B2F520400C3A6E3 /* HEMSupportTopicsViewController.m in Sources */, + BF2F4C681DAD9BEA00502521 /* HEMVoiceCommandsCell.m in Sources */, + BF21F0221DAEEB560057F24E /* HEMVoiceExampleView.m in Sources */, BF885F251CE562A500A92F90 /* HEMNewAccountPresenter.m in Sources */, BFF6A5B61B335A3300A30429 /* HEMHintGestureView.m in Sources */, + BF2F4C6C1DADA2DB00502521 /* HEMVoiceFeedPresenter.m in Sources */, BF3583A11CB5C03700760CD4 /* HEMSleepSoundActionOperation.m in Sources */, BF83399C1C179B2F00BFD0F4 /* UIImage+HEMPixelColor.m in Sources */, BFC7D32B1B91118600D40D58 /* HEMVideoCollectionViewCell.m in Sources */, @@ -4112,6 +4274,7 @@ BF5BACEA1C5AE0EA00347185 /* HEMTrendsService.m in Sources */, BF78E9941B21199B0015949F /* HEMSupportViewController.m in Sources */, 8A66FC85199C035500922ED5 /* HEMMiniSleepHistoryView.m in Sources */, + BF5F97311DB6C80D00EF460B /* HEMVolumeControlPresenter.m in Sources */, BF6D9B751C6A689100774322 /* HEMTrendsScoreLabel.m in Sources */, 8ADE06071B2A4DE100976654 /* HEMTimelineContainerViewController.m in Sources */, BFD7E79D1D9B2D0E007DB6E4 /* HEMSettingsPresenter.m in Sources */, @@ -4119,6 +4282,8 @@ BF69525F1C56FE5F000A8E85 /* HEMInsightsHandHoldingPresenter.m in Sources */, 6003F59A195388D20070C39A /* main.m in Sources */, BFE7B6BE1BEBE5AC0013740C /* HEMSenseRequiredCollectionViewCell.m in Sources */, + BF7B2F7D1DB9AE5900A8E602 /* HEMAlarmExpansionSetupViewController.m in Sources */, + BF2F4C701DADB22700502521 /* HEMVoiceCommandGroup.m in Sources */, BF55D8811CA48A6E00379FBF /* HEMSoundsTabPresenter.m in Sources */, BF55D8841CA48C7F00379FBF /* HEMSoundsContentPresenter.m in Sources */, BFC458BE1BDAA2CE008EE871 /* HEMGlobalContants.m in Sources */, @@ -4164,6 +4329,8 @@ BFB7B2071CCEC52E0060999E /* HEMAlarmSoundsPresenter.m in Sources */, BFAE0B1419AE57FA0021EC0D /* HEMSleepSummarySlideViewController.m in Sources */, BF781E3119DC716F00B68EBC /* HEMUnitPreferenceViewController.m in Sources */, + BF9D49A31DAC5D140027AAAA /* HEMFeedNavigationPresenter.m in Sources */, + BF21F0391DB02C650057F24E /* HEMVoiceExamplesPresenter.m in Sources */, 8A8397A41B683A200079AC24 /* HEMWaveform.m in Sources */, 8AB2683919CCFDB400017818 /* HEMAlarmAddButton.m in Sources */, BFA884B71C1A30F500613069 /* HEMTimeZoneAlertService.m in Sources */, @@ -4197,16 +4364,17 @@ BF5B1D271D2C717500DF1190 /* HEMPillDfuPresenter.m in Sources */, BFC3AA1019C27A610055D308 /* HEMSleepQuestionsViewController.m in Sources */, BF238DE31D1A126600F6E62C /* HEMShareService.m in Sources */, + BF5F97341DB6C94700EF460B /* HEMVolumeSlider.m in Sources */, BFF3B44A1A5DB5DE00B11643 /* HEMNoDeviceCollectionViewCell.m in Sources */, BFB815151BFC1E0D009740D0 /* HEMExtendedHeaderCollectionViewLayout.m in Sources */, BF78E9A91B2763CA0015949F /* HEMTutorialDataSource.m in Sources */, BF825CF91D76360E003F34B0 /* HEMRoomConditionsPresenter.m in Sources */, + BF21F0361DB02B920057F24E /* HEMVoiceGroupHeaderCell.m in Sources */, 8A1C94B81A08178A006E3A31 /* UIFont+HEMStyle.m in Sources */, BF238DEA1D1B254100F6E62C /* HEMConfirmationView.m in Sources */, 8A28CAFF19CB95E40044A27D /* HEMNotificationHandler.m in Sources */, BF1C46B11B155B4900AFCB7B /* HEMHealthViewController.m in Sources */, BF4E88E71A12FB3700831380 /* UIView+HEMSnapshot.m in Sources */, - BF5592421C21048D00FC7849 /* HEMInsightTabPresenter.m in Sources */, BFA884B01C1A01A200613069 /* HEMDeviceAlertService.m in Sources */, BF6098861D4AD67A0005C8F0 /* HEMVoiceService.m in Sources */, BF3326EC1D8762A3009A3E65 /* HEMSensorDetailSubNavPresenter.m in Sources */, @@ -4241,6 +4409,7 @@ 8AA8EE5C1B62F05C00FE9D1F /* HEMPopupMaskView.m in Sources */, BF84C2031A0C1D23009471D5 /* HEMRootViewController.m in Sources */, BF4BE3D61D8358DD003B96ED /* HEMSensorGroupCollectionViewCell.m in Sources */, + BF9D499F1DAC57120027AAAA /* HEMFeedContainerViewController.m in Sources */, BFF3B43E1A5B831200B11643 /* HEMSettingsTableViewCell.m in Sources */, 8A1743B719A7B471001E3C15 /* HEMSleepGraphViewController.m in Sources */, BFE872CE1A2F9ADC00494231 /* HEMRoomCheckViewController.m in Sources */, @@ -4296,6 +4465,7 @@ files = ( BF8411EE1D83912700D7A676 /* HEMSensorDataRequestOperation.m in Sources */, BF53D8CF1D931E3F00C24F9D /* HEMRoomConditionsExtViewController.m in Sources */, + BF88EA791DBECF3F00BCE15E /* HEMMathUtil.m in Sources */, 8A1C94B91A08178A006E3A31 /* UIFont+HEMStyle.m in Sources */, BF896D4D1C7422CD0095D37D /* UIColor+HEMStyle.m in Sources */, BF287D641C9CBF250052F543 /* HEMSensorService.m in Sources */, diff --git a/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/Contents.json b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/Contents.json new file mode 100644 index 00000000..1b711337 --- /dev/null +++ b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "alarmThermostatIcon.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "alarmThermostatIcon@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "alarmThermostatIcon@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon.png b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon.png new file mode 100644 index 00000000..3d3f58cf Binary files /dev/null and b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon.png differ diff --git a/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon@2x.png b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon@2x.png new file mode 100644 index 00000000..04bf0fa7 Binary files /dev/null and b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon@2x.png differ diff --git a/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon@3x.png b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon@3x.png new file mode 100644 index 00000000..de867476 Binary files /dev/null and b/SleepModel/Alarm.xcassets/alarmThermostatIcon.imageset/alarmThermostatIcon@3x.png differ diff --git a/SleepModel/AmazonReviewsForVoice.plist b/SleepModel/AmazonReviewsForVoice.plist new file mode 100644 index 00000000..f629fd08 --- /dev/null +++ b/SleepModel/AmazonReviewsForVoice.plist @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/SleepModel/Base.lproj/Localizable.strings b/SleepModel/Base.lproj/Localizable.strings index c9c3f4d4..dba27bc4 100644 --- a/SleepModel/Base.lproj/Localizable.strings +++ b/SleepModel/Base.lproj/Localizable.strings @@ -16,8 +16,8 @@ "welcome.intro.desc.current-conditions" = "Sense is packed with sensors that monitor the conditions of your bedroom, giving you unparalleled insight into how temperature, humidity, light, sound, and even air quality affects how well you sleep."; // onboarding -"onboarding.new-sense.title" = "Have Sense ready?"; -"onboarding.new-sense.desc" = "You'll need Sense and Sleep Pill handy to continue. If you're not ready now, you can always come back later."; +"onboarding.new-sense.title" = "Set up Sense"; +"onboarding.new-sense.desc" = "The Sense app works with Sense, a smarter sleep tracker that helps you improve your sleep. Before continuing, make sure your Sense and Sleep PIll are nearby."; "onboarding.pair-sense.title" = "Pair your Sense"; "onboarding.pair-sense.not-glowing" = "Sense isn’t glowing blue or purple"; "onboarding.pair-sense.desc" = "Sense should be plugged in, nearby, and glowing either blue or purple."; @@ -34,16 +34,16 @@ "sign-up.error.name-too-short" = "Your name is too short."; "onboarding.account.not-loaded-title" = "Account update failed"; "onboarding.account.dob-not-updated" = "There was a problem setting your birthday."; -"onboarding.before-sleep.1.title" = "Sense Colors"; -"onboarding.before-sleep.2.title" = "All good."; +"onboarding.before-sleep.1.title" = "Sense colors"; +"onboarding.before-sleep.2.title" = "Everything’s good"; "onboarding.before-sleep.3.title" = "Something's not right"; -"onboarding.before-sleep.4.title" = "We've got a problem"; -"onboarding.before-sleep.5.title" = "Just wave"; -"onboarding.before-sleep.1.description" = "Sense glows to tell you about the conditions in your bedroom - including temperature, humidity, air quality, light, and noise. Sense has three different colors."; -"onboarding.before-sleep.2.description" = "Sense glows green when the conditions in your room are just right for a good night's sleep."; -"onboarding.before-sleep.3.description" = "Sense glows yellow when something in your bedroom is not quite right. Check the Sense app for details."; -"onboarding.before-sleep.4.description" = "Sense glows red when the conditions in your bedroom would prevent restful sleep. Check the Sense app for details."; -"onboarding.before-sleep.5.description" = "Just wave your hand over Sense and instantly you'll know about the conditions in your bedroom. Go ahead, give it a try now."; +"onboarding.before-sleep.4.title" = "Things aren’t great"; +"onboarding.before-sleep.5.title" = "Check any time"; +"onboarding.before-sleep.1.description" = "Sense can glow one of three colors to tell you if the conditions in your bedroom are conducive to a good night’s sleep."; +"onboarding.before-sleep.2.description" = "Sense glows green when the conditions in your room are just right."; +"onboarding.before-sleep.3.description" = "Sense glows yellow when something in your room is less than ideal."; +"onboarding.before-sleep.4.description" = "Sense glows red when the conditions in your room might prevent restful sleep. You’ll be able to see further details in the Sense app."; +"onboarding.before-sleep.5.description" = "You can also wave your hand over Sense to check the conditions in your room at any time."; "onboarding.end-message.well-done" = "You're all set."; "onboarding.room-check.checking-sensor.format" = "Checking %@"; "onboarding.room-check.failed" = "Unsuccessful"; @@ -62,12 +62,12 @@ "onboarding.account.password" = "Password"; // onboarding pill -"onboarding.pill-setup.title" = "Clip Sleep Pill to your pillow"; -"onboarding.pill-setup.description" = "Clip the new Sleep Pill to the side of your pillowcase closest to the edge of your bed. You may need to pull your pillowcase taut between two hands."; +"onboarding.pill-setup.title" = "Attach your Sleep Pill"; +"onboarding.pill-setup.description" = "Clip your Sleep Pill to the side of your pillowcase closest to the edge of your bed."; "onboarding.pill.title" = "Sleep Pill"; -"onboarding.pill.description" = "Sleep Pill clips to your pillow and tracks your sleep during the night. Each person using Sense has their own Sleep Pill, so if you're using Sense with a partner, they will set up their Sleep Pill separately. Next, we'll pair your Sleep Pill with Sense."; +"onboarding.pill.description" = "Your Sleep Pill clips to your pillow and tracks your sleep through your movement during the night. Each person using Sense will need their own Sleep Pill. If you’re using Sense with a partner, they’ll set up their Sleep Pill separately."; "onboarding.pill.pair.title" = "Pairing your Sleep Pill"; -"onboarding.pill.pair.description" = "Shake your Sleep Pill for three seconds to pair it with your Sense. You may need to shake it quickly for it to register."; +"onboarding.pill.pair.description" = "Hold your Sleep Pill nearby Sense, and shake it quickly. It may take a few seconds to pair your Sleep Pill with Sense."; // help links "help.email.address" = "support@hello.is"; @@ -107,7 +107,7 @@ "user.info.accessibility.birthdate-title" = "Select the month, day, and year of your birthday"; // pairing -"pairing.activity.checking-wifi" = "Checking WiFi"; +"pairing.activity.checking-wifi" = "Checking for Wi-Fi"; "pairing.activity.pairing-sense" = "Pairing with Sense"; "pairing.activity.scanning-sense" = "Looking for Sense"; "pairing.activity.bluetooth-not-on" = "Bluetooth is required to pair your Sleep Pill. Make sure it's on and try again."; @@ -115,44 +115,44 @@ "pairing.activity.connecting-sense" = "Connecting to Sense"; "pairing.activity.linking-account" = "Linking account to Sense"; "pairing.activity.setting-timezone" = "Setting time zone"; -"pairing.failed.title" = "Pairing Failed"; +"pairing.failed.title" = "Pairing failed"; "pairing.activity.waiting-for-sense" = "Waiting for Sense"; -"pairing.error.sense-not-found" = "Could not detect a Sense nearby. Make sure Sense is plugged in, nearby, and in pairing mode. Ensure no other devices are connected with Sense over Bluetooth."; -"pairing.error.could-not-pair" = "Could not connect to Sense to pair. Sense should be plugged in, nearby, and in Pairing Mode. Make sure no other devices are connected with Sense over Bluetooth."; +"pairing.error.sense-not-found" = "Could not detect a Sense nearby. Sense should be plugged into a power outlet, nearby, and glowing blue or purple. Check to make sure no other devices are paired with Sense over Bluetooth."; +"pairing.error.could-not-pair" = "Could not connect to Sense to pair. Sense should be plugged into a power outlet, nearby, and glowing blue or purple. Check to make sure no other devices are paired with Sense over Bluetooth."; "pairing.error.unexpected-disconnect" = "The connection with Sense was broken. Please try again."; "pairing.error.link-account-failed" = "Your account could not be linked with Sense."; -"pairing.error.link-account-failed-edit-wifi" = "Your account could not be linked with Sense. You can try changing the WiFi Sense is configured to."; +"pairing.error.link-account-failed-edit-wifi" = "Your account could not be linked with Sense. You can try changing the Wi-Fi Sense is configured to."; "pairing.error.set-timezone-failed" = "There was a problem setting your timezone."; "pairing.error.timed-out" = "Sense did not respond in time."; "pairing.done" = "Paired"; -"pairing.pill.done" = "Sleep Pill connected"; -"pairing.pill.error.title" = "Sleep Pill Pairing Failed"; +"pairing.pill.done" = "Sleep Pill paired"; +"pairing.pill.error.title" = "Pairing failed"; "pairing.error.pill-already-paired" = "This Sleep Pill is already paired with another account."; "pairing.error.fail-to-load-paired-info" = "Could not load paired Sense information."; -"pairing.error.pill-pairing-failed" = "Sense could not pair your Sleep Pill. Please try again."; -"pairing.error.pill-pairing-no-network" = "Sense could not pair your Sleep Pill. Please ensure the network Sense is connected to can reach the internet then try again."; +"pairing.error.pill-pairing-failed" = "Sense was unable to pair with your Sleep Pill."; +"pairing.error.pill-pairing-no-network" = "Sense was unable to pair with your Sleep Pill. Please ensure the network Sense is connected to can reach the internet then try again."; "pairing.pill.skip-confirmation-title" = "Are you sure?"; "pairing.pill.skip-confirmation-message" = "Sense is not designed to work without a Sleep Pill. You will not be able to track your sleep, or set Smart Alarms. If you're having trouble, you can skip for now, and pair a Sleep Pill later."; // wifi setup -"wifi.error.title" = "WiFi Setup Failed"; +"wifi.error.title" = "Wi-Fi setup failed"; "wifi.error.link-account-title" = "Account not linked"; "wifi.error.timezone-title" = "Setting Time Zone Failed"; -"wifi.activity.setting-wifi" = "Setting WiFi credentials"; +"wifi.activity.setting-wifi" = "Connecting to Wi-Fi network"; "wifi.activity.setting-timezone" = "Setting time zone"; -"wifi.error.set-sense-general" = "There was a problem connecting Sense to WiFi. Make sure Sense is plugged in and nearby and try again."; -"wifi.activity.scanning" = "Finding WiFi networks..."; -"wifi.error.invalid-input" = "The WiFi credentials provided are invalid. Please ensure you have entered everything correctly."; -"wifi.error.invalid-wep-key" = "The WiFi credentials provided are invalid. Please ensure you have entered the WEP key generated by your router and not the passphrase."; -"wifi.error.set-sense-not-in-range" = "Sense could not connect to WiFi. Please verify your credentials and ensure Sense is within WiFi range."; -"wifi.error.wep.no-ascii" = "Sense could not connect to WiFi. Make sure you are using your network's WEP key."; -"wifi.error.set-sense-timeout" = "Timed out while setting WiFi credentials on Sense."; -"wifi.error.set-sense-failed-connection" = "Sense could not connect to the WiFi."; +"wifi.error.set-sense-general" = "There was a problem connecting to the selected Wi-Fi network. Make sure Sense is plugged in and nearby, and try again."; +"wifi.activity.scanning" = "Finding Wi-Fi networks"; +"wifi.error.invalid-input" = "The Wi-Fi credentials provided are invalid. Please ensure you have entered everything correctly."; +"wifi.error.invalid-wep-key" = "The Wi-Fi credentials provided are invalid. Please ensure you have entered the WEP key generated by your router and not the passphrase."; +"wifi.error.set-sense-not-in-range" = "Sense could not connect to Wi-Fi. Please verify your credentials and ensure Sense is within Wi-Fi range."; +"wifi.error.wep.no-ascii" = "Sense could not connect to Wi-Fi. Make sure you are using your network's WEP key."; +"wifi.error.set-sense-timeout" = "Timed out while setting Wi-Fi credentials on Sense."; +"wifi.error.set-sense-failed-connection" = "Sense could not connect to the Wi-Fi."; "wifi.error.account-link-message" = "Your account could not be linked. Please try again."; "wifi.error.account-link-timeout" = "Timed out while linking Sense to your account."; "wifi.error.account-link-network-failed" = "Sense failed to connect to your network to link your account."; "wifi.error.time-zone-failed" = "There was a problem setting your timezone."; -"wifi.error.scan-title" = "Could not scan for WiFi networks."; +"wifi.error.scan-title" = "Could not scan for Wi-Fi networks."; "wifi.error.scan-out-of-memory" = "Sense failed to complete the scan due to a memory issue."; "wifi.error.unexpected-disconnnect" = "The connection with Sense was broken. Please try again."; "wifi.error.scan-general" = "Sense failed to complete the scan due to an unknown issue."; @@ -172,6 +172,7 @@ // settings "settings.title" = "Settings"; "settings.expansions" = "Expansions"; +"settings.voice" = "Voice"; "settings.notifications" = "Notifications"; "settings.notifications.section.push" = "Push notifications"; "settings.account" = "My account"; @@ -310,7 +311,7 @@ "settings.sense.warning.summary.last-seen" = "No recent data."; "settings.sense.warning.summary.not-connected-ble" = "Could not connect over Bluetooth."; "settings.sense.action.pairing-mode" = "Put into pairing mode"; -"settings.sense.action.edit-wifi" = "Edit WiFi"; +"settings.sense.action.edit-wifi" = "Edit Wi-Fi"; "settings.sense.action.change-time-zone" = "Change Time Zone"; "settings.sense.action.advanced" = "Advanced"; "settings.sense.advanced.option.title" = "Advanced"; @@ -321,7 +322,7 @@ "settings.sense.factory-reset.complete.title" = "Power Cycle Sense"; "settings.sense.factory-reset.complete.confirmation" = "Sense has been successfully restored to factory settings. Please remove Sense in your Settings app under Bluetooth, unplug Sense, wait a few seconds, and plug it back in before you continue."; "settings.sense.not-found-title" = "Sense not found"; -"settings.sense.wifi" = "WiFi"; +"settings.sense.wifi" = "Wi-Fi"; "settings.sense.unpairing-message" = "Removing Sense"; "settings.sense.unpair.title" = "Remove Sense"; "settings.sense.unpair.confirmation.format" = "Are you sure you want to remove Sense from your account? You should only do this if you have another Sense that you would like to replace it with. If you're having trouble, visit %@ for support."; @@ -335,8 +336,8 @@ "settings.sense.dialog.enable-pair-mode-title" = "Put Sense into Pairing Mode"; "settings.sense.dialog.enable-pair-mode-message.format" = "Are you sure you want to put Sense into Pairing Mode? You should use this option only if you have another mobile device you wish to pair with Sense. If you're having trouble, visit %@ for support."; "settings.sense.warning.last-seen-format" = "Sense was last seen %@. Tap below to troubleshoot."; -"settings.sense.warning.summary.wifi" = "Sense cannot connect to WiFi."; -"settings.sense.warning.wifi" = "To edit your WiFi credentials, tap 'Edit WiFi' below."; +"settings.sense.warning.summary.wifi" = "Sense cannot connect to Wi-Fi."; +"settings.sense.warning.wifi" = "To edit your WiFi credentials, tap 'Edit Wi-Fi' below."; "settings.sense.warning.not-connected-sense" = "Make sure Sense is plugged in and nearby. If you're still having trouble, tap below to troubleshoot. Some actions below are disabled."; "settings.sense.enabling-pairing-mode" = "Enabling pairing mode"; "settings.device.restoring-factory-settings" = "Restoring to Factory Settings"; @@ -397,8 +398,11 @@ "alarm.clock.divider" = ":"; "alarm.sound.no-selection" = "Default"; "alarm.light.title" = "Lights"; -"alarm.light.error.unable.to.load.title" = "Expansion not loaded"; -"alarm.light.error.unable.to.load.message" = "Sense could not load expansions at this time. Please try again later."; +"alarm.light.attribution.format" = "%@ set at %@"; +"alarm.thermostat.title" = "Thermostat"; +"alarm.thermostat.attribution.format" = "%@ set at %@° - %@°"; +"alarm.expansion.error.unable.to.load.title" = "Expansion not loaded"; +"alarm.expansion.error.unable.to.load.message" = "Sense could not load expansions at this time. Please try again later."; "alarm.repeat.days.weekdays" = "Weekdays"; "alarm.repeat.days.weekends" = "Weekends"; @@ -424,6 +428,15 @@ "alarm.sounds.error.title" = "Could not load sounds"; "alarm.sounds.error.message" = "Available alarm sounds could not be loaded at this time. Tap 'Refresh' to try again."; +"alarm.expansion.temp.range.format" = "%.0f° - %.0f°"; +"alarm.expansion.light.format" = "%.0f%@"; +"alarm.expansion.error.cannot-set-config.title" = "Update failed"; +"alarm.expansion.error.cannot-set-config.message" = "A problem occurred while trying to update your selection."; + +"alarm.expansion.configuration.selection.title.format" = "Select a %@"; +"alarm.expansion.lights.selection.subtitle" = "This will apply to all alarms activating lights."; +"alarm.expansion.thermostat.selection.subtitle" = "This will apply to all alarms activating a thermostat."; + // background noise "noise.sound-name.none" = "None"; @@ -452,6 +465,7 @@ "measurement.percentage.unit" = "%"; "measurement.particle.unit" = "µg/m³"; "measurement.ppm.unit" = "ppm"; +"measurement.mbar.unit" = "mbar"; "measurement.light.unit" = "lx"; "measurement.sound.unit" = "dB"; "measurement.cm.unit" = "cm"; @@ -645,7 +659,7 @@ "actions.close" = "Close"; "actions.ok" = "Okay"; "actions.sign-out" = "Sign out"; -"actions.sign-in" = "Log in"; +"actions.sign-in" = "Sign in"; "actions.no" = "No"; "actions.yes" = "Yes"; "actions.skip" = "Skip"; @@ -659,7 +673,7 @@ "actions.deleted" = "Deleted"; "actions.save" = "Save"; "actions.troubleshoot" = "troubleshoot"; -"actions.edit.wifi" = "Edit WiFi"; +"actions.edit.wifi" = "Edit Wi-Fi"; "actions.import.from.fb" = "Import from Facebook"; "actions.take.photo" = "Take Photo"; "actions.camera-roll" = "Choose from Library"; @@ -669,6 +683,9 @@ "actions.share" = "Share"; "status.shared" = "Shared"; "status.copied" = "Copied"; +"status.updating" = "Updating"; +"status.off" = "Off"; +"actions.copy" = "Copy"; // action sheet "action-sheet.accessibility.did-appear" = "Open options"; @@ -931,7 +948,7 @@ "sensor.section.about.temperature.fahrenheit" = "At night, your body temperature cools to help induce sleep, and the right external temperature can make this easier. The ideal temperature for this is generally between 59 and 68 degrees Fahrenheit. While cooler temperatures are generally better than warmer ones, be careful not to set your thermostat too low. A bedroom that’s uncomfortably hot or cold can disrupt your sleep cycle, which can negatively impact the quality of your sleep."; "sensor.section.about.humidity" = "The ideal humidity for a good night’s sleep is around 50%. In addition to affecting the quality of your sleep, low humidity can cause your throat to become irritated and your skin to become dry, while high humidity can make it harder for moisture to evaporate off your body — making you hot, uncomfortable, and sweaty. Damp air can also encourage mold growth, which may affect your sleep if you suffer from mold allergies."; "sensor.section.about.sound" = "A noisy environment can make it difficult to fall asleep, but the impact of sound on your quality of sleep doesn’t end there. Even if you manage to doze off, your brain continues to register and process sounds, meaning nighttime noise can disrupt your sleep even if it doesn’t wake you up."; -"sensor.section.about.particulates" = "Air quality is rated using the Air Quality Index (AQI). The AQI shows you how clean or polluted the air is in your area, as well as potential corresponding effects the air might have on your health. The AQI is calculated using five major pollutants: ground-level ozone, particle pollution (or particulate matter), carbon monoxide, sulfur dioxide, and nitrogen dioxide. Poor air quality has been correlated with increased risk of poor sleep, and sustained levels of poor air quality can be detrimental to your overall health."; +"sensor.section.about.particulates" = "Particle pollution (or particulate matter) is one of the main contributors to poor air quality, and is one of the pollutants measured by the Air Quality Index (AQI). The AQI shows you how clean or polluted the air is in your area by measuring the concentration of pollutants in the air, as well potential corresponding effects the air might have on your health. Poor air quality has been correlated with increased risk of poor sleep, and sustained levels of poor air quality can be detrimental to your overall health."; "sensor.section.about.tvoc" = "Volatile organic compounds (VOCs) can be essential ingredients in many household products, such as cleansers, disinfectants, mattresses, fresh paint, and more. Indoors, normal atmospheric conditions can cause these compounds to evaporate into the air, which in large concentrations can have a detrimental effect on overall air quality, and your health. VOCs may lead to irritated eyes, headaches, allergies, or asthma which may in turn impact the quality of your sleep."; "sensor.section.about.light" = "Light is the primary signal for your circadian rhythm, which governs not only your sleep, but also your mood, appetite, and more. In the morning, light prompts your body to wake up, while in the evening, the decrease in light signals to your body that it’s time to wind down, relax, and prepare for sleep. Being exposed to too little light in the morning or too much at night can confuse this rhythm and make it much harder to maintain a healthy sleep schedule."; "sensor.section.about.co2" = "Equivalent carbon dioxide (CO2e) is a measure of the equivalent amount or concentration of carbon dioxide (CO2). The greenhouse gas carbon dioxide (CO2) is naturally part of Earth’s atmosphere, and CO2 emissions come from a variety of natural sources. However, human activity such as fuel combustion for energy and transportation increases the amount of CO2 present in the atmosphere, and high concentrations can impair brain activity and make it difficult to breathe, which could affect sleep quality."; @@ -977,6 +994,8 @@ "expansion.error.setup.no-groups.temperature.message.format" = "You will need to set up a thermostat in the %@ app."; "expansion.error.setup.no-groups.light.title" = "No rooms available"; "expansion.error.setup.no-groups.light.message.format" = "You will need to set up a room in the %@ app."; +"expansion.error.setup.no-groups.generic.title" = "No configurations available"; +"expansion.error.setup.no-groups.generic.message.format" = "You will need to make additional changes in the %@ app before continuing with this setup."; "expansion.error.setup.generic.title" = "Changes not saved"; "expansion.error.setup.generic.message" = "Sense couldn't save your changes. Please try again later."; "expansion.config.title.format" = "You've connected to %@"; @@ -984,4 +1003,71 @@ "expansion.config.no-config.footer.format" = "Go to your %@ app to configure %@"; "expansion.config.no-cnfig.format" = "No %@ found"; "expansion.config.select" = "Select"; -"expansion.error.empty-list" = "There was a problem loading expansions. Please try again."; \ No newline at end of file +"expansion.error.empty-list" = "There was a problem loading expansions. Please try again."; + +// voice +"voice.title" = "Voice"; + +"voice.welcome.message" = "Always say \"Okay Sense\" before each command to activate Voice. Ask about your Sleep Score, room conditions, and more."; +"voice.welcome.title" = "Welcome to Voice"; + +"voice.command.sound.category.name" = "Alarm and Sleep Sounds"; +"voice.command.sound.message" = "Before each command, say \"Okay Sense\" to set an alarm or begin playing Sleep Sounds."; +"voice.command.alarm.category.name" = "Alarms"; +"voice.command.alarm.example.1" = "Wake me up at 10 AM."; +"voice.command.alarm.example.2" = "Set alarm for tomorrow morning at 8."; + +"voice.command.sleep-sound.category.name" = "Sleep Sounds"; +"voice.command.sleep-sound.example.1" = "Play a Sleep Sound."; +"voice.command.sleep-sound.example.2" = "Play White Noise."; + +"voice.command.sleep.category.name" = "Sleep"; +"voice.command.sleep.message" = "Before each command, say \"Okay Sense\" to ask about your Sleep Score, Sleep Timeline, and Sleep Trends."; +"voice.command.timeline.category.name" = "Sleep Timeline"; +"voice.command.timeline.example.1" = "How was my sleep last night?"; +"voice.command.timeline.example.2" = "What was my Sleep Score?"; + +"voice.command.room-conditions.category.name" = "Room Conditions"; +"voice.command.room-conditions.message" = "Before each command, say \"Okay Sense\" to ask about your temperature, humidity, air quality, and more."; + +"voice.command.temperature.category.name" = "Temperature"; +"voice.command.temperature.example.1" = "What is the temperature?"; + +"voice.command.humidity.category.name" = "Humidity"; +"voice.command.humidity.example.1" = "What is the humidity?"; + +"voice.command.noise.category.name" = "Noise Level"; +"voice.command.noise.example.1" = "How noisy is it?"; +"voice.command.noise.example.2" = "What is the noise level?"; + +"voice.command.air.category.name" = "Air Quality"; +"voice.command.air.example.1" = "How is the air quality?"; + +"voice.command.expansions.category.name" = "Expansions"; +"voice.command.expansions.message" = "Before each command, say \"Okay Sense\" to control your lights or thermostat."; +"voice.command.lights.category.name" = "Lights"; +"voice.command.lights.example.1" = "Turn the lights on."; +"voice.command.lights.example.2" = "Turn the lights off."; +"voice.command.lights.example.3" = "Brighten the lights."; +"voice.command.lights.example.4" = "Dim the lights."; + +"voice.command.thermostat.category.name" = "Thermostat"; +"voice.command.thermostat.example.1" = "Set the thermostat to 70°."; + +"voice.settings.primary-user" = "Primary User"; +"voice.settings.primary-user.foot.note" = "Tell Sense whose information to respond with when asked questions like \"What’s my sleep score?\" by setting primary user."; +"voice.settings.update.status" = "Saving"; +"voice.settings.update.error.title" = "Changes not saved"; +"voice.settings.update.error.primary-not-set" = "Sense was not able to set you as the primary user. Try again."; +"voice.settings.error.message" = "There was a problem loading voice settings. Please try again."; +"voice.settings.primary-user.confirm.title" = "Are you sure?"; +"voice.settings.primary-user.confirm.message" = "Once you set yourself as the primary user of this Sense, you won’t be able to undo it unless another person using this Sense sets themselves as the primary user."; +"voice.settings.primary-user.confirm.ok" = "Become primary"; +"voice.settings.primary-user.you" = "You"; +"voice.settings.primary-user.change" = "Change"; +"voice.settings.volume" = "Volume"; +"voice.settings.volume.control.title" = "Select volume"; +"voice.settings.volume.control.description" = "Drag your finger across the volume bars to adjust the volume for Voice."; +"voice.settings.mute" = "Mute"; +"voice.settings.update.error.mute-not-changed" = "Sense did not accept the changes."; +"voice.settings.update.error.volume-not-set" = "Sense did not accept the changes."; \ No newline at end of file diff --git a/SleepModel/Base.lproj/Main.storyboard b/SleepModel/Base.lproj/Main.storyboard index 96bb2037..e42a4b14 100644 --- a/SleepModel/Base.lproj/Main.storyboard +++ b/SleepModel/Base.lproj/Main.storyboard @@ -55,43 +55,49 @@ - + - + - + - - - + + + + + + + + - - + + - + + - + @@ -142,7 +148,7 @@ - + @@ -189,7 +195,7 @@ - + @@ -235,8 +241,8 @@ - - + + @@ -254,19 +260,6 @@ - - - - - + + + + + + - - + + - + @@ -353,13 +356,176 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -457,7 +623,7 @@ - + @@ -908,7 +1074,7 @@ - + @@ -1216,7 +1382,7 @@ - + @@ -1321,7 +1487,7 @@ - + @@ -1438,7 +1604,7 @@ - + @@ -1550,6 +1716,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1870,6 +2268,22 @@ + + + + + + + + + + + + + + + + @@ -2171,6 +2585,7 @@ + @@ -2180,7 +2595,7 @@ - + @@ -2321,11 +2736,11 @@ - + @@ -3440,20 +3855,20 @@ - + - + @@ -3472,15 +3887,15 @@ - + - + - + @@ -3524,13 +3939,13 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -3749,7 +4224,7 @@ - + @@ -4355,6 +4830,14 @@ + @@ -4411,14 +4894,14 @@ - + - + - + - @@ -4526,7 +5009,7 @@ - + @@ -4534,7 +5017,7 @@ - + @@ -4561,7 +5044,7 @@ - + @@ -4652,14 +5135,6 @@ - @@ -4708,7 +5183,7 @@ - + @@ -5031,7 +5506,265 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6024,6 +6757,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6328,7 +7120,7 @@ - + @@ -6336,7 +7128,7 @@ - + @@ -6644,6 +7436,7 @@ + @@ -6654,7 +7447,6 @@ - @@ -6674,10 +7466,11 @@ + - - + + diff --git a/SleepModel/Base.lproj/Onboarding.storyboard b/SleepModel/Base.lproj/Onboarding.storyboard index 42d8c40c..984805c3 100644 --- a/SleepModel/Base.lproj/Onboarding.storyboard +++ b/SleepModel/Base.lproj/Onboarding.storyboard @@ -187,7 +187,7 @@ - + @@ -288,7 +288,7 @@ @@ -818,7 +819,7 @@ - + + + + + + + + + + + + + + + + + + + + - + @@ -1192,7 +1241,7 @@ - + @@ -1225,26 +1274,26 @@ - + - - + + - + - - - - + + + + - + - + @@ -1265,7 +1314,7 @@ - + @@ -1394,7 +1443,7 @@ - + @@ -1419,7 +1468,7 @@ @@ -1498,7 +1547,7 @@ - + @@ -1587,7 +1636,7 @@ - + @@ -1610,7 +1659,7 @@ - @@ -1756,10 +1805,10 @@ - + - + @@ -1774,17 +1823,17 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3164,7 +3108,7 @@ Otherwise, Sense only looks at background noise levels. -