From 929221c9af8b7dacde58ae27aa84506315b26d82 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Mon, 2 Jul 2018 10:33:17 -0500 Subject: [PATCH] First release to App Store --- Podfile | 1 + Podfile.lock | 28 +- Pods/Charts/LICENSE | 202 + Pods/Charts/README.md | 212 + .../Source/Charts/Animation/Animator.swift | 268 + .../Animation/ChartAnimationEasing.swift | 394 + .../Source/Charts/Charts/BarChartView.swift | 183 + .../Charts/Charts/BarLineChartViewBase.swift | 1936 ++++ .../Charts/Charts/BubbleChartView.swift | 27 + .../Charts/Charts/CandleStickChartView.swift | 34 + .../Source/Charts/Charts/ChartViewBase.swift | 992 ++ .../Charts/Charts/CombinedChartView.swift | 246 + .../Charts/HorizontalBarChartView.swift | 274 + .../Source/Charts/Charts/LineChartView.swift | 28 + .../Source/Charts/Charts/PieChartView.swift | 642 ++ .../Charts/Charts/PieRadarChartViewBase.swift | 866 ++ .../Source/Charts/Charts/RadarChartView.swift | 232 + .../Charts/Charts/ScatterChartView.swift | 31 + .../Source/Charts/Components/AxisBase.swift | 371 + .../Charts/Components/ChartLimitLine.swift | 85 + .../Charts/Components/ComponentBase.swift | 37 + .../Charts/Components/Description.swift | 50 + .../Source/Charts/Components/IMarker.swift | 40 + .../Source/Charts/Components/Legend.swift | 428 + .../Charts/Components/LegendEntry.swift | 91 + .../Charts/Components/MarkerImage.swift | 110 + .../Source/Charts/Components/MarkerView.swift | 99 + .../Source/Charts/Components/XAxis.swift | 75 + .../Source/Charts/Components/YAxis.swift | 179 + .../Implementations/ChartBaseDataSet.swift | 424 + .../Standard/BarChartData.swift | 105 + .../Standard/BarChartDataEntry.swift | 247 + .../Standard/BarChartDataSet.swift | 165 + .../BarLineScatterCandleBubbleChartData.swift | 25 + ...rLineScatterCandleBubbleChartDataSet.swift | 38 + .../Standard/BubbleChartData.swift | 32 + .../Standard/BubbleChartDataEntry.swift | 77 + .../Standard/BubbleChartDataSet.swift | 57 + .../Standard/CandleChartData.swift | 25 + .../Standard/CandleChartDataEntry.swift | 109 + .../Standard/CandleChartDataSet.swift | 147 + .../Implementations/Standard/ChartData.swift | 759 ++ .../Standard/ChartDataEntry.swift | 108 + .../Standard/ChartDataEntryBase.swift | 95 + .../Standard/ChartDataSet.swift | 508 + .../Standard/CombinedChartData.swift | 320 + .../Standard/LineChartData.swift | 26 + .../Standard/LineChartDataSet.swift | 178 + .../Standard/LineRadarChartDataSet.swift | 94 + .../LineScatterCandleRadarChartDataSet.swift | 51 + .../Standard/PieChartData.swift | 130 + .../Standard/PieChartDataEntry.swift | 102 + .../Standard/PieChartDataSet.swift | 121 + .../Standard/RadarChartData.swift | 46 + .../Standard/RadarChartDataEntry.swift | 51 + .../Standard/RadarChartDataSet.swift | 59 + .../Standard/ScatterChartData.swift | 48 + .../Standard/ScatterChartDataSet.swift | 78 + .../Data/Interfaces/IBarChartDataSet.swift | 42 + ...rLineScatterCandleBubbleChartDataSet.swift | 26 + .../Data/Interfaces/IBubbleChartDataSet.swift | 27 + .../Data/Interfaces/ICandleChartDataSet.swift | 66 + .../Data/Interfaces/IChartDataSet.swift | 261 + .../Data/Interfaces/ILineChartDataSet.swift | 80 + .../Interfaces/ILineRadarChartDataSet.swift | 45 + .../ILineScatterCandleRadarChartDataSet.swift | 36 + .../Data/Interfaces/IPieChartDataSet.swift | 64 + .../Data/Interfaces/IRadarChartDataSet.swift | 40 + .../Interfaces/IScatterChartDataSet.swift | 36 + .../Charts/Filters/DataApproximator+N.swift | 152 + .../Charts/Filters/DataApproximator.swift | 123 + .../DefaultAxisValueFormatter.swift | 100 + .../Formatters/DefaultFillFormatter.swift | 62 + .../Formatters/DefaultValueFormatter.swift | 103 + .../Formatters/IAxisValueFormatter.swift | 30 + .../Charts/Formatters/IFillFormatter.swift | 21 + .../Charts/Formatters/IValueFormatter.swift | 41 + .../Formatters/IndexAxisValueFormatter.swift | 59 + .../Charts/Highlight/BarHighlighter.swift | 118 + .../Charts/Highlight/ChartHighlighter.swift | 188 + .../Highlight/CombinedHighlighter.swift | 70 + .../Source/Charts/Highlight/Highlight.swift | 198 + .../Highlight/HorizontalBarHighlighter.swift | 68 + .../Charts/Highlight/IHighlighter.swift | 23 + .../Charts/Highlight/PieHighlighter.swift | 27 + .../Highlight/PieRadarHighlighter.swift | 60 + .../Charts/Highlight/RadarHighlighter.swift | 78 + .../Source/Charts/Highlight/Range.swift | 51 + .../Interfaces/BarChartDataProvider.swift | 23 + ...ScatterCandleBubbleChartDataProvider.swift | 23 + .../Interfaces/BubbleChartDataProvider.swift | 19 + .../Interfaces/CandleChartDataProvider.swift | 19 + .../Charts/Interfaces/ChartDataProvider.swift | 39 + .../CombinedChartDataProvider.swift | 19 + .../Interfaces/LineChartDataProvider.swift | 21 + .../Interfaces/ScatterChartDataProvider.swift | 19 + .../Charts/Jobs/AnimatedMoveViewJob.swift | 37 + .../Charts/Jobs/AnimatedViewPortJob.swift | 130 + .../Charts/Jobs/AnimatedZoomViewJob.swift | 96 + .../Source/Charts/Jobs/MoveViewJob.swift | 38 + .../Source/Charts/Jobs/ViewPortJob.swift | 46 + .../Source/Charts/Jobs/ZoomViewJob.swift | 75 + .../Charts/Renderers/AxisRendererBase.swift | 216 + .../Charts/Renderers/BarChartRenderer.swift | 691 ++ .../BarLineScatterCandleBubbleRenderer.swift | 89 + .../Renderers/BubbleChartRenderer.swift | 285 + .../Renderers/CandleStickChartRenderer.swift | 377 + .../Renderers/ChartDataRendererBase.swift | 59 + .../Renderers/CombinedChartRenderer.swift | 200 + .../HorizontalBarChartRenderer.swift | 612 ++ .../Charts/Renderers/LegendRenderer.swift | 570 ++ .../Charts/Renderers/LineChartRenderer.swift | 754 ++ .../Charts/Renderers/LineRadarRenderer.swift | 54 + .../LineScatterCandleRadarRenderer.swift | 49 + .../Charts/Renderers/PieChartRenderer.swift | 834 ++ .../Charts/Renderers/RadarChartRenderer.swift | 403 + .../Source/Charts/Renderers/Renderer.swift | 26 + .../Scatter/ChevronDownShapeRenderer.swift | 36 + .../Scatter/ChevronUpShapeRenderer.swift | 36 + .../Scatter/CircleShapeRenderer.swift | 63 + .../Scatter/CrossShapeRenderer.swift | 36 + .../Renderers/Scatter/IShapeRenderer.swift | 31 + .../Scatter/SquareShapeRenderer.swift | 63 + .../Scatter/TriangleShapeRenderer.swift | 66 + .../Renderers/Scatter/XShapeRenderer.swift | 36 + .../Renderers/ScatterChartRenderer.swift | 243 + .../Charts/Renderers/XAxisRenderer.swift | 461 + .../XAxisRendererHorizontalBarChart.swift | 360 + .../Renderers/XAxisRendererRadarChart.swift | 95 + .../Charts/Renderers/YAxisRenderer.swift | 392 + .../YAxisRendererHorizontalBarChart.swift | 367 + .../Renderers/YAxisRendererRadarChart.swift | 274 + .../Charts/Utils/ChartColorTemplates.swift | 203 + .../Source/Charts/Utils/ChartUtils.swift | 284 + Pods/Charts/Source/Charts/Utils/Fill.swift | 323 + .../Charts/Source/Charts/Utils/Platform.swift | 613 ++ .../Source/Charts/Utils/Transformer.swift | 181 + .../Utils/TransformerHorizontalBarChart.swift | 32 + .../Source/Charts/Utils/ViewPortHandler.swift | 553 + Pods/Manifest.lock | 28 +- Pods/Pods.xcodeproj/project.pbxproj | 8900 +++++++++-------- Pods/PromiseKit/README.md | 6 +- Pods/PromiseKit/Sources/Box.swift | 9 +- Pods/PromiseKit/Sources/Catchable.swift | 32 +- Pods/PromiseKit/Sources/Guarantee.swift | 35 +- Pods/PromiseKit/Sources/Thenable.swift | 48 +- Pods/Realm/Realm/RLMMigration.mm | 2 +- Pods/Realm/Realm/RLMRealm.mm | 4 +- Pods/RealmSwift/RealmSwift/Error.swift | 7 +- Pods/RealmSwift/RealmSwift/List.swift | 41 +- Pods/RealmSwift/RealmSwift/Object.swift | 1 - .../RealmSwift/RealmCollection.swift | 78 +- Pods/RealmSwift/RealmSwift/Sync.swift | 2 - Pods/RealmSwift/RealmSwift/Util.swift | 25 - .../Charts/Charts-dummy.m | 5 + .../Charts/Charts-prefix.pch | 12 + .../Charts/Charts-umbrella.h | 16 + .../Charts/Charts.modulemap | 6 + .../Charts/Charts.xcconfig | 9 + Pods/Target Support Files/Charts/Info.plist | 26 + .../Pods-pocloud-acknowledgements.markdown | 206 + .../Pods-pocloud-acknowledgements.plist | 212 + .../Pods-pocloud/Pods-pocloud-frameworks.sh | 2 + .../Pods-pocloud/Pods-pocloud.debug.xcconfig | 6 +- .../Pods-pocloud.release.xcconfig | 6 +- .../PromiseKit/Info.plist | 2 +- Pods/Target Support Files/Realm/Info.plist | 2 +- .../RealmSwift/Info.plist | 2 +- pocloud.xcodeproj/project.pbxproj | 22 + pocloud/Cells/DeviceChannelTableCell.swift | 27 + .../Controller/DeviceListViewController.swift | 17 +- .../Devices/BaseDeviceViewController.swift | 143 + .../MaxWaterSystemViewController.swift | 138 + .../Controller/MapDetailViewController.swift | 14 +- pocloud/Controller/MeshifyFunctions.swift | 32 +- pocloud/Info.plist | 2 +- pocloud/View/Base.lproj/Main.storyboard | 172 +- 177 files changed, 31294 insertions(+), 4255 deletions(-) create mode 100644 Pods/Charts/LICENSE create mode 100644 Pods/Charts/README.md create mode 100644 Pods/Charts/Source/Charts/Animation/Animator.swift create mode 100644 Pods/Charts/Source/Charts/Animation/ChartAnimationEasing.swift create mode 100644 Pods/Charts/Source/Charts/Charts/BarChartView.swift create mode 100644 Pods/Charts/Source/Charts/Charts/BarLineChartViewBase.swift create mode 100644 Pods/Charts/Source/Charts/Charts/BubbleChartView.swift create mode 100644 Pods/Charts/Source/Charts/Charts/CandleStickChartView.swift create mode 100644 Pods/Charts/Source/Charts/Charts/ChartViewBase.swift create mode 100644 Pods/Charts/Source/Charts/Charts/CombinedChartView.swift create mode 100644 Pods/Charts/Source/Charts/Charts/HorizontalBarChartView.swift create mode 100644 Pods/Charts/Source/Charts/Charts/LineChartView.swift create mode 100644 Pods/Charts/Source/Charts/Charts/PieChartView.swift create mode 100755 Pods/Charts/Source/Charts/Charts/PieRadarChartViewBase.swift create mode 100644 Pods/Charts/Source/Charts/Charts/RadarChartView.swift create mode 100644 Pods/Charts/Source/Charts/Charts/ScatterChartView.swift create mode 100644 Pods/Charts/Source/Charts/Components/AxisBase.swift create mode 100644 Pods/Charts/Source/Charts/Components/ChartLimitLine.swift create mode 100644 Pods/Charts/Source/Charts/Components/ComponentBase.swift create mode 100644 Pods/Charts/Source/Charts/Components/Description.swift create mode 100644 Pods/Charts/Source/Charts/Components/IMarker.swift create mode 100644 Pods/Charts/Source/Charts/Components/Legend.swift create mode 100644 Pods/Charts/Source/Charts/Components/LegendEntry.swift create mode 100644 Pods/Charts/Source/Charts/Components/MarkerImage.swift create mode 100644 Pods/Charts/Source/Charts/Components/MarkerView.swift create mode 100644 Pods/Charts/Source/Charts/Components/XAxis.swift create mode 100644 Pods/Charts/Source/Charts/Components/YAxis.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/ChartBaseDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartData.swift create mode 100644 Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/IBarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/ICandleChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/IChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/ILineChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/IPieChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/IRadarChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Data/Interfaces/IScatterChartDataSet.swift create mode 100644 Pods/Charts/Source/Charts/Filters/DataApproximator+N.swift create mode 100644 Pods/Charts/Source/Charts/Filters/DataApproximator.swift create mode 100644 Pods/Charts/Source/Charts/Formatters/DefaultAxisValueFormatter.swift create mode 100644 Pods/Charts/Source/Charts/Formatters/DefaultFillFormatter.swift create mode 100644 Pods/Charts/Source/Charts/Formatters/DefaultValueFormatter.swift create mode 100644 Pods/Charts/Source/Charts/Formatters/IAxisValueFormatter.swift create mode 100644 Pods/Charts/Source/Charts/Formatters/IFillFormatter.swift create mode 100644 Pods/Charts/Source/Charts/Formatters/IValueFormatter.swift create mode 100644 Pods/Charts/Source/Charts/Formatters/IndexAxisValueFormatter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/BarHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/ChartHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/CombinedHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/Highlight.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/HorizontalBarHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/IHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/PieHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/PieRadarHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/RadarHighlighter.swift create mode 100644 Pods/Charts/Source/Charts/Highlight/Range.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/BarChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/BubbleChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/CandleChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/ChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/CombinedChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/LineChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Interfaces/ScatterChartDataProvider.swift create mode 100644 Pods/Charts/Source/Charts/Jobs/AnimatedMoveViewJob.swift create mode 100644 Pods/Charts/Source/Charts/Jobs/AnimatedViewPortJob.swift create mode 100644 Pods/Charts/Source/Charts/Jobs/AnimatedZoomViewJob.swift create mode 100644 Pods/Charts/Source/Charts/Jobs/MoveViewJob.swift create mode 100644 Pods/Charts/Source/Charts/Jobs/ViewPortJob.swift create mode 100644 Pods/Charts/Source/Charts/Jobs/ZoomViewJob.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/AxisRendererBase.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/BarChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/BubbleChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/CandleStickChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/ChartDataRendererBase.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/CombinedChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/HorizontalBarChartRenderer.swift create mode 100755 Pods/Charts/Source/Charts/Renderers/LegendRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/LineChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/LineRadarRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/PieChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/RadarChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Renderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/IShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/Scatter/XShapeRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/ScatterChartRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/XAxisRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/XAxisRendererRadarChart.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/YAxisRenderer.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift create mode 100644 Pods/Charts/Source/Charts/Renderers/YAxisRendererRadarChart.swift create mode 100644 Pods/Charts/Source/Charts/Utils/ChartColorTemplates.swift create mode 100644 Pods/Charts/Source/Charts/Utils/ChartUtils.swift create mode 100644 Pods/Charts/Source/Charts/Utils/Fill.swift create mode 100644 Pods/Charts/Source/Charts/Utils/Platform.swift create mode 100644 Pods/Charts/Source/Charts/Utils/Transformer.swift create mode 100644 Pods/Charts/Source/Charts/Utils/TransformerHorizontalBarChart.swift create mode 100755 Pods/Charts/Source/Charts/Utils/ViewPortHandler.swift create mode 100644 Pods/Target Support Files/Charts/Charts-dummy.m create mode 100644 Pods/Target Support Files/Charts/Charts-prefix.pch create mode 100644 Pods/Target Support Files/Charts/Charts-umbrella.h create mode 100644 Pods/Target Support Files/Charts/Charts.modulemap create mode 100644 Pods/Target Support Files/Charts/Charts.xcconfig create mode 100644 Pods/Target Support Files/Charts/Info.plist create mode 100644 pocloud/Cells/DeviceChannelTableCell.swift create mode 100644 pocloud/Controller/Devices/BaseDeviceViewController.swift create mode 100644 pocloud/Controller/Devices/MaxWaterSystemViewController.swift diff --git a/Podfile b/Podfile index df8ad41..6aedd0c 100644 --- a/Podfile +++ b/Podfile @@ -18,6 +18,7 @@ target 'pocloud' do pod 'Firebase/Database' pod 'Firebase/Auth' pod 'SideMenu' + pod 'Charts' end diff --git a/Podfile.lock b/Podfile.lock index 7a57479..ce0635f 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -3,6 +3,9 @@ PODS: - ChameleonFramework (2.1.0): - ChameleonFramework/Default (= 2.1.0) - ChameleonFramework/Default (2.1.0) + - Charts (3.1.1): + - Charts/Core (= 3.1.1) + - Charts/Core (3.1.1) - Firebase/Auth (5.2.0): - Firebase/CoreOnly - FirebaseAuth (= 5.0.1) @@ -40,15 +43,15 @@ PODS: - nanopb/encode (= 0.3.8) - nanopb/decode (0.3.8) - nanopb/encode (0.3.8) - - PromiseKit/Alamofire (6.2.8): + - PromiseKit/Alamofire (6.3.0): - Alamofire (~> 4.0) - PromiseKit/CorePromise - - PromiseKit/CorePromise (6.2.8) - - Realm (3.7.0): - - Realm/Headers (= 3.7.0) - - Realm/Headers (3.7.0) - - RealmSwift (3.7.0): - - Realm (= 3.7.0) + - PromiseKit/CorePromise (6.3.0) + - Realm (3.7.1): + - Realm/Headers (= 3.7.1) + - Realm/Headers (3.7.1) + - RealmSwift (3.7.1): + - Realm (= 3.7.1) - SideMenu (4.0.0) - SVProgressHUD (2.2.5) - SwiftChart (1.0.1) @@ -57,6 +60,7 @@ PODS: DEPENDENCIES: - Alamofire - ChameleonFramework + - Charts - Firebase/Auth - Firebase/Core - Firebase/Database @@ -72,6 +76,7 @@ SPEC REPOS: https://github.com/cocoapods/specs.git: - Alamofire - ChameleonFramework + - Charts - Firebase - FirebaseAnalytics - FirebaseAuth @@ -94,6 +99,7 @@ SPEC REPOS: SPEC CHECKSUMS: Alamofire: e4fa87002c137ba2d8d634d2c51fabcda0d5c223 ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64 + Charts: 90a4d61da0f6e06684c591e3bcab11940fe61736 Firebase: 25ed0412036d7d008568d1fb4d2e9d81ea8a0a2c FirebaseAnalytics: b3628aea54c50464c32c393fb2ea032566e7ecc2 FirebaseAuth: 463b8ce33bd5d05f706dcd4615499e3212b4132b @@ -105,14 +111,14 @@ SPEC CHECKSUMS: Kingfisher: 976d828df2b24834c6a3f2fc4d82cdbd26552be1 leveldb-library: 08cba283675b7ed2d99629a4bc5fd052cd2bb6a5 nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3 - PromiseKit: 6788ce1a0ed5448b83d4aaf56b9fc49fb7647d32 - Realm: 4998c6ced1ea15b3792f273b18f8e6faaf935b5c - RealmSwift: 7dc2ab780b9742a1fc7469b2e4776b9773e2e825 + PromiseKit: cf84bbb1235a61473b326c5cf0b41f6828f87ba5 + Realm: 906be37d52f17f25484ac01643a7f26a9d3bfbd5 + RealmSwift: 1c2b6bae3dc55bb87e080ffa96537d71442f6dce SideMenu: 70ee5657df63ec3382660ec4ef470bf1cf5db07d SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 SwiftChart: ba767a678d568a5ee22d419e146a0582865e1aff SwiftyJSON: c29297daf073d2aa016295d5809cdd68045c39b3 -PODFILE CHECKSUM: f920b0139378aa95335e4e152b9daa8cfaf65705 +PODFILE CHECKSUM: 36ed7324164643785df43e440238496dcacc4f53 COCOAPODS: 1.5.3 diff --git a/Pods/Charts/LICENSE b/Pods/Charts/LICENSE new file mode 100644 index 0000000..17c2ed4 --- /dev/null +++ b/Pods/Charts/LICENSE @@ -0,0 +1,202 @@ +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 2016 Daniel Cohen Gindi & Philipp Jahoda + + 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. + diff --git a/Pods/Charts/README.md b/Pods/Charts/README.md new file mode 100644 index 0000000..994503f --- /dev/null +++ b/Pods/Charts/README.md @@ -0,0 +1,212 @@ +**Version 3.1.1**, synced to [MPAndroidChart #f6a398b](https://github.com/PhilJay/MPAndroidChart/commit/f6a398b) + +![alt tag](https://raw.github.com/danielgindi/Charts/master/Assets/feature_graphic.png) + ![Supported Platforms](https://img.shields.io/cocoapods/p/Charts.svg) [![Releases](https://img.shields.io/github/release/danielgindi/Charts.svg)](https://github.com/danielgindi/Charts/releases) [![Latest pod release](https://img.shields.io/cocoapods/v/Charts.svg)](http://cocoapods.org/pods/charts) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Build Status](https://travis-ci.org/danielgindi/Charts.svg?branch=master)](https://travis-ci.org/danielgindi/Charts) [![codecov](https://codecov.io/gh/danielgindi/Charts/branch/master/graph/badge.svg)](https://codecov.io/gh/danielgindi/Charts) +[![Join the chat at https://gitter.im/danielgindi/Charts](https://badges.gitter.im/danielgindi/Charts.svg)](https://gitter.im/danielgindi/Charts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +### Just a heads up: Charts 3.0 has some breaking changes. Please read [the release/migration notes](https://github.com/danielgindi/Charts/releases/tag/v3.0.0). +### Another heads up: ChartsRealm is now in a [separate repo](https://github.com/danielgindi/ChartsRealm). Pods is also now `Charts` and `ChartsRealm`, instead of ~`Charts/Core`~ and ~`Charts/Realm`~ + +* Xcode 9.3 / Swift 4.1 +* iOS >= 8.0 (Use as an **Embedded** Framework) +* tvOS >= 9.0 +* macOS >= 10.11 + +Okay so there's this beautiful library called [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart) by [Philipp Jahoda](https://www.linkedin.com/in/philippjahoda) which has become very popular amongst Android developers, and in the meanwhile there's no decent charting solution for iOS. + +I've chosen to write it in `Swift` as it can be highly optimized by the compiler, and can be used in both `Swift` and `ObjC` project. The demo project is written in `ObjC` to demonstrate how it works. + +**An amazing feature** of this library now, for Android, iOS, tvOS and macOS, is the time it saves you when developing for both platforms, as the learning curve is singleton- it happens only once, and the code stays very similar so developers don't have to go around and re-invent the app to produce the same output with a different library. (And that's not even considering the fact that there's not really another good choice out there currently...) + +## Having trouble running the demo? + +* `ChartsDemo/ChartsDemo.xcodeproj` is the demo project for iOS/tvOS +* `ChartsDemo-OSX/ChartsDemo-OSX.xcodeproj` is the demo project for macOS +* Make sure you are running a supported version of Xcode. + * Usually it is specified here a few lines above. + * In most cases it will be the latest Xcode version. +* Make sure that your project supports Swift 3.0 +* Optional: Run `carthage checkout` in the project folder, to fetch dependencies (i.e testing dependencies). + * If you don't have Carthage - you can get it [here](https://github.com/Carthage/Carthage/releases). + + +## Usage + +In order to correctly compile: + +1. Drag the `Charts.xcodeproj` to your project +2. Go to your target's settings, hit the "+" under the "Embedded Binaries" section, and select the Charts.framework +3. `@import Charts` +4. When using Swift in an ObjC project: + - You need to import your Bridging Header. Usually it is "*YourProject-Swift.h*", so in ChartsDemo it's "*ChartsDemo-Swift.h*". Do not try to actually include "*ChartsDemo-Swift.h*" in your project :-) + - (Xcode 8.1 and earlier) Under "Build Options", mark "Embedded Content Contains Swift Code" + - (Xcode 8.2+) Under "Build Options", mark "Always Embed Swift Standard Libraries" +5. When using [Realm.io](https://realm.io/): + - Note that the Realm framework is not linked with Charts - it is only there for *optional* bindings. Which means that you need to have the framework in your project, and in a compatible version to whatever is compiled with Charts. We will do our best to always compile against the latest version. + - You'll need to add `ChartsRealm` as a dependency too. + +## 3rd party tutorials + +* [Using Realm and Charts with Swift 3 in iOS 10 (Sami Korpela)](https://medium.com/@skoli/using-realm-and-charts-with-swift-3-in-ios-10-40c42e3838c0#.2gyymwfh8) +* [Creating a Line Chart in Swift 3 and iOS 10 (Osian Smith)](https://medium.com/@OsianSmith/creating-a-line-chart-in-swift-3-and-ios-10-2f647c95392e) +* [Beginning Set-up and Example Using Charts with Swift 3](https://github.com/annalizhaz/ChartsForSwiftBasic) +* Want your tutorial to show here? Create a PR! + +## Troubleshooting + +#### Can't compile? + +* Please note the difference between installing a compiled framework from CocoaPods or Carthage, and copying the source code. +* Please read the **Usage** section again. +* Search in the issues +* Try to politely ask in the issues section + +#### Other problems / feature requests + +* Search in the issues +* Try to politely ask in the issues section + +## CocoaPods Install + +Add `pod 'Charts'` to your Podfile. "Charts" is the name of the library. +For [Realm](https://realm.io/) support, please add `pod 'ChartsRealm'` too. + +**Note:** ~~`pod 'ios-charts'`~~ is not the correct library, and refers to a different project by someone else. + +## Carthage Install + +Charts now include Carthage prebuilt binaries. + +```carthage +github "danielgindi/Charts" == 3.1.1 +github "danielgindi/Charts" ~> 3.1.1 +``` + +In order to build the binaries for a new release, use `carthage build --no-skip-current && carthage archive Charts`. + +## 3rd party bindings + +Xamarin (by @Flash3001): *iOS* - [GitHub](https://github.com/Flash3001/iOSCharts.Xamarin)/[NuGet](https://www.nuget.org/packages/iOSCharts/). *Android* - [GitHub](https://github.com/Flash3001/MPAndroidChart.Xamarin)/[NuGet](https://www.nuget.org/packages/MPAndroidChart/). + +## Help + +If you like what you see here, and want to support the work being done in this repository, you could: +* Contribute code, issues and pull requests +* Let people know this library exists (:fire: spread the word :fire:) +* [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=68UL6Y8KUPS96) (You can buy me a beer, or you can buy me dinner :-) + +**Note:** The author of [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart) is the reason that this library exists, and is accepting [donations](https://github.com/PhilJay/MPAndroidChart#donations) on his page. He deserves them! + +Questions & Issues +----- + +If you are having questions or problems, you should: + + - Make sure you are using the latest version of the library. Check the [**release-section**](https://github.com/danielgindi/Charts/releases). + - Study the Android version's [**Documentation-Wiki**](https://github.com/PhilJay/MPAndroidChart/wiki) + - Study the (Still incomplete [![Doc-Percent](https://img.shields.io/cocoapods/metrics/doc-percent/Charts.svg)](http://cocoadocs.org/docsets/Charts/)) [**Pod-Documentation**](http://cocoadocs.org/docsets/Charts/) + - Search or open questions on [**stackoverflow**](http://stackoverflow.com/questions/tagged/ios-charts) with the `ios-charts` tag + - Search [**known issues**](https://github.com/danielgindi/Charts/issues) for your problem (open and closed) + - Create new issues (please :fire: **search known issues before** :fire:, do not create duplicate issues) + + +Features +======= + +**Core features:** + - 8 different chart types + - Scaling on both axes (with touch-gesture, axes separately or pinch-zoom) + - Dragging / Panning (with touch-gesture) + - Combined-Charts (line-, bar-, scatter-, candle-stick-, bubble-) + - Dual (separate) Axes + - Customizable Axes (both x- and y-axis) + - Highlighting values (with customizable popup-views) + - Save chart to camera-roll / export to PNG/JPEG + - Predefined color templates + - Legends (generated automatically, customizable) + - Animations (build up animations, on both x- and y-axis) + - Limit lines (providing additional information, maximums, ...) + - Fully customizable (paints, typefaces, legends, colors, background, gestures, dashed lines, ...) + - Plotting data directly from [**Realm.io**](https://realm.io) mobile database ([here](https://github.com/danielgindi/ChartsRealm)) + +**Chart types:** + +*Screenshots are currently taken from the original repository, as they render exactly the same :-)* + + + - **LineChart (with legend, simple design)** +![alt tag](https://raw.github.com/PhilJay/MPChart/master/screenshots/simpledesign_linechart4.png) + - **LineChart (with legend, simple design)** +![alt tag](https://raw.github.com/PhilJay/MPChart/master/screenshots/simpledesign_linechart3.png) + + - **LineChart (cubic lines)** +![alt tag](https://raw.github.com/PhilJay/MPChart/master/screenshots/cubiclinechart.png) + + - **LineChart (gradient fill)** +![alt tag](https://raw.github.com/PhilJay/MPAndroidChart/master/screenshots/line_chart_gradient.png) + + - **Combined-Chart (bar- and linechart in this case)** +![alt tag](https://raw.github.com/PhilJay/MPChart/master/screenshots/combined_chart.png) + + - **BarChart (with legend, simple design)** + +![alt tag](https://raw.github.com/PhilJay/MPChart/master/screenshots/simpledesign_barchart3.png) + + - **BarChart (grouped DataSets)** + +![alt tag](https://raw.github.com/PhilJay/MPChart/master/screenshots/groupedbarchart.png) + + - **Horizontal-BarChart** + +![alt tag](https://raw.github.com/PhilJay/MPChart/master/screenshots/horizontal_barchart.png) + + + - **PieChart (with selection, ...)** + +![alt tag](https://raw.github.com/PhilJay/MPAndroidChart/master/screenshots/simpledesign_piechart1.png) + + - **ScatterChart** (with squares, triangles, circles, ... and more) + +![alt tag](https://raw.github.com/PhilJay/MPAndroidChart/master/screenshots/scatterchart.png) + + - **CandleStickChart** (for financial data) + +![alt tag](https://raw.github.com/PhilJay/MPAndroidChart/master/screenshots/candlestickchart.png) + + - **BubbleChart** (area covered by bubbles indicates the value) + +![alt tag](https://raw.github.com/PhilJay/MPAndroidChart/master/screenshots/bubblechart.png) + + - **RadarChart** (spider web chart) + +![alt tag](https://raw.github.com/PhilJay/MPAndroidChart/master/screenshots/radarchart.png) + + +Documentation +======= +Currently there's no need for documentation for the iOS/tvOS/macOS version, as the API is **95% the same** as on Android. +You can read the official [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart) documentation here: [**Wiki**](https://github.com/PhilJay/MPAndroidChart/wiki) + +Or you can see the [**ChartsDemo**](https://github.com/danielgindi/Charts/tree/master/ChartsDemo) project and learn the how-tos from it. + + +Special Thanks +======= + +Goes to [@liuxuan30](https://github.com/liuxuan30), [@petester42](https://github.com/petester42) and [@AlBirdie](https://github.com/AlBirdie) for new features, bugfixes, and lots and lots of involvement in our open-sourced community! You guys are a huge help to all of those coming here with questions and issues, and I couldn't respond to all of those without you. + +License +======= +Copyright 2016 Daniel Cohen Gindi & Philipp Jahoda + +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. diff --git a/Pods/Charts/Source/Charts/Animation/Animator.swift b/Pods/Charts/Source/Charts/Animation/Animator.swift new file mode 100644 index 0000000..042012b --- /dev/null +++ b/Pods/Charts/Source/Charts/Animation/Animator.swift @@ -0,0 +1,268 @@ +// +// Animator.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartAnimatorDelegate) +public protocol AnimatorDelegate +{ + /// Called when the Animator has stepped. + func animatorUpdated(_ animator: Animator) + + /// Called when the Animator has stopped. + func animatorStopped(_ animator: Animator) +} + +@objc(ChartAnimator) +open class Animator: NSObject +{ + @objc open weak var delegate: AnimatorDelegate? + @objc open var updateBlock: (() -> Void)? + @objc open var stopBlock: (() -> Void)? + + /// the phase that is animated and influences the drawn values on the x-axis + @objc open var phaseX: Double = 1.0 + + /// the phase that is animated and influences the drawn values on the y-axis + @objc open var phaseY: Double = 1.0 + + private var _startTimeX: TimeInterval = 0.0 + private var _startTimeY: TimeInterval = 0.0 + private var _displayLink: NSUIDisplayLink? + + private var _durationX: TimeInterval = 0.0 + private var _durationY: TimeInterval = 0.0 + + private var _endTimeX: TimeInterval = 0.0 + private var _endTimeY: TimeInterval = 0.0 + private var _endTime: TimeInterval = 0.0 + + private var _enabledX: Bool = false + private var _enabledY: Bool = false + + private var _easingX: ChartEasingFunctionBlock? + private var _easingY: ChartEasingFunctionBlock? + + public override init() + { + super.init() + } + + deinit + { + stop() + } + + @objc open func stop() + { + guard _displayLink != nil else { return } + + _displayLink?.remove(from: .main, forMode: .commonModes) + _displayLink = nil + + _enabledX = false + _enabledY = false + + // If we stopped an animation in the middle, we do not want to leave it like this + if phaseX != 1.0 || phaseY != 1.0 + { + phaseX = 1.0 + phaseY = 1.0 + + delegate?.animatorUpdated(self) + updateBlock?() + } + + delegate?.animatorStopped(self) + stopBlock?() + } + + private func updateAnimationPhases(_ currentTime: TimeInterval) + { + if _enabledX + { + let elapsedTime: TimeInterval = currentTime - _startTimeX + let duration: TimeInterval = _durationX + var elapsed: TimeInterval = elapsedTime + if elapsed > duration + { + elapsed = duration + } + + phaseX = _easingX?(elapsed, duration) ?? elapsed / duration + } + + if _enabledY + { + let elapsedTime: TimeInterval = currentTime - _startTimeY + let duration: TimeInterval = _durationY + var elapsed: TimeInterval = elapsedTime + if elapsed > duration + { + elapsed = duration + } + + phaseY = _easingY?(elapsed, duration) ?? elapsed / duration + } + } + + @objc private func animationLoop() + { + let currentTime: TimeInterval = CACurrentMediaTime() + + updateAnimationPhases(currentTime) + + delegate?.animatorUpdated(self) + updateBlock?() + + if currentTime >= _endTime + { + stop() + } + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingX: an easing function for the animation on the x axis + /// - parameter easingY: an easing function for the animation on the y axis + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easingX: ChartEasingFunctionBlock?, easingY: ChartEasingFunctionBlock?) + { + stop() + + _startTimeX = CACurrentMediaTime() + _startTimeY = _startTimeX + _durationX = xAxisDuration + _durationY = yAxisDuration + _endTimeX = _startTimeX + xAxisDuration + _endTimeY = _startTimeY + yAxisDuration + _endTime = _endTimeX > _endTimeY ? _endTimeX : _endTimeY + _enabledX = xAxisDuration > 0.0 + _enabledY = yAxisDuration > 0.0 + + _easingX = easingX + _easingY = easingY + + // Take care of the first frame if rendering is already scheduled... + updateAnimationPhases(_startTimeX) + + if _enabledX || _enabledY + { + _displayLink = NSUIDisplayLink(target: self, selector: #selector(animationLoop)) + _displayLink?.add(to: RunLoop.main, forMode: RunLoopMode.commonModes) + } + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingOptionX: the easing function for the animation on the x axis + /// - parameter easingOptionY: the easing function for the animation on the y axis + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easingOptionX: ChartEasingOption, easingOptionY: ChartEasingOption) + { + animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingX: easingFunctionFromOption(easingOptionX), easingY: easingFunctionFromOption(easingOptionY)) + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easing: an easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easing: ChartEasingFunctionBlock?) + { + animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingX: easing, easingY: easing) + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingOption: the easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easingOption: ChartEasingOption = .easeInOutSine) + { + animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easing: easingFunctionFromOption(easingOption)) + } + + /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter easing: an easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, easing: ChartEasingFunctionBlock?) + { + _startTimeX = CACurrentMediaTime() + _durationX = xAxisDuration + _endTimeX = _startTimeX + xAxisDuration + _endTime = _endTimeX > _endTimeY ? _endTimeX : _endTimeY + _enabledX = xAxisDuration > 0.0 + + _easingX = easing + + // Take care of the first frame if rendering is already scheduled... + updateAnimationPhases(_startTimeX) + + if _enabledX || _enabledY, + _displayLink == nil + { + _displayLink = NSUIDisplayLink(target: self, selector: #selector(animationLoop)) + _displayLink?.add(to: .main, forMode: .commonModes) + } + } + + /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter easingOption: the easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, easingOption: ChartEasingOption = .easeInOutSine) + { + animate(xAxisDuration: xAxisDuration, easing: easingFunctionFromOption(easingOption)) + } + + /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easing: an easing function for the animation + @objc open func animate(yAxisDuration: TimeInterval, easing: ChartEasingFunctionBlock?) + { + _startTimeY = CACurrentMediaTime() + _durationY = yAxisDuration + _endTimeY = _startTimeY + yAxisDuration + _endTime = _endTimeX > _endTimeY ? _endTimeX : _endTimeY + _enabledY = yAxisDuration > 0.0 + + _easingY = easing + + // Take care of the first frame if rendering is already scheduled... + updateAnimationPhases(_startTimeY) + + if _enabledX || _enabledY, + _displayLink == nil + { + _displayLink = NSUIDisplayLink(target: self, selector: #selector(animationLoop)) + _displayLink?.add(to: .main, forMode: .commonModes) + } + } + + /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingOption: the easing function for the animation + @objc open func animate(yAxisDuration: TimeInterval, easingOption: ChartEasingOption = .easeInOutSine) + { + animate(yAxisDuration: yAxisDuration, easing: easingFunctionFromOption(easingOption)) + } +} diff --git a/Pods/Charts/Source/Charts/Animation/ChartAnimationEasing.swift b/Pods/Charts/Source/Charts/Animation/ChartAnimationEasing.swift new file mode 100644 index 0000000..58b0b63 --- /dev/null +++ b/Pods/Charts/Source/Charts/Animation/ChartAnimationEasing.swift @@ -0,0 +1,394 @@ +// +// ChartAnimationUtils.swift +// Charts +// +// 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 + +@objc +public enum ChartEasingOption: Int +{ + case linear + case easeInQuad + case easeOutQuad + case easeInOutQuad + case easeInCubic + case easeOutCubic + case easeInOutCubic + case easeInQuart + case easeOutQuart + case easeInOutQuart + case easeInQuint + case easeOutQuint + case easeInOutQuint + case easeInSine + case easeOutSine + case easeInOutSine + case easeInExpo + case easeOutExpo + case easeInOutExpo + case easeInCirc + case easeOutCirc + case easeInOutCirc + case easeInElastic + case easeOutElastic + case easeInOutElastic + case easeInBack + case easeOutBack + case easeInOutBack + case easeInBounce + case easeOutBounce + case easeInOutBounce +} + +public typealias ChartEasingFunctionBlock = ((_ elapsed: TimeInterval, _ duration: TimeInterval) -> Double) + +internal func easingFunctionFromOption(_ easing: ChartEasingOption) -> ChartEasingFunctionBlock +{ + switch easing + { + case .linear: + return EasingFunctions.Linear + case .easeInQuad: + return EasingFunctions.EaseInQuad + case .easeOutQuad: + return EasingFunctions.EaseOutQuad + case .easeInOutQuad: + return EasingFunctions.EaseInOutQuad + case .easeInCubic: + return EasingFunctions.EaseInCubic + case .easeOutCubic: + return EasingFunctions.EaseOutCubic + case .easeInOutCubic: + return EasingFunctions.EaseInOutCubic + case .easeInQuart: + return EasingFunctions.EaseInQuart + case .easeOutQuart: + return EasingFunctions.EaseOutQuart + case .easeInOutQuart: + return EasingFunctions.EaseInOutQuart + case .easeInQuint: + return EasingFunctions.EaseInQuint + case .easeOutQuint: + return EasingFunctions.EaseOutQuint + case .easeInOutQuint: + return EasingFunctions.EaseInOutQuint + case .easeInSine: + return EasingFunctions.EaseInSine + case .easeOutSine: + return EasingFunctions.EaseOutSine + case .easeInOutSine: + return EasingFunctions.EaseInOutSine + case .easeInExpo: + return EasingFunctions.EaseInExpo + case .easeOutExpo: + return EasingFunctions.EaseOutExpo + case .easeInOutExpo: + return EasingFunctions.EaseInOutExpo + case .easeInCirc: + return EasingFunctions.EaseInCirc + case .easeOutCirc: + return EasingFunctions.EaseOutCirc + case .easeInOutCirc: + return EasingFunctions.EaseInOutCirc + case .easeInElastic: + return EasingFunctions.EaseInElastic + case .easeOutElastic: + return EasingFunctions.EaseOutElastic + case .easeInOutElastic: + return EasingFunctions.EaseInOutElastic + case .easeInBack: + return EasingFunctions.EaseInBack + case .easeOutBack: + return EasingFunctions.EaseOutBack + case .easeInOutBack: + return EasingFunctions.EaseInOutBack + case .easeInBounce: + return EasingFunctions.EaseInBounce + case .easeOutBounce: + return EasingFunctions.EaseOutBounce + case .easeInOutBounce: + return EasingFunctions.EaseInOutBounce + } +} + +internal struct EasingFunctions +{ + internal static let Linear = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in return Double(elapsed / duration) } + + internal static let EaseInQuad = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + return position * position + } + + internal static let EaseOutQuad = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + return -position * (position - 2.0) + } + + internal static let EaseInOutQuad = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / (duration / 2.0)) + if position < 1.0 + { + return 0.5 * position * position + } + + return -0.5 * ((position - 1.0) * (position - 3.0) - 1.0) + } + + internal static let EaseInCubic = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + return position * position * position + } + + internal static let EaseOutCubic = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + position -= 1.0 + return (position * position * position + 1.0) + } + + internal static let EaseInOutCubic = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / (duration / 2.0)) + if position < 1.0 + { + return 0.5 * position * position * position + } + position -= 2.0 + return 0.5 * (position * position * position + 2.0) + } + + internal static let EaseInQuart = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + return position * position * position * position + } + + internal static let EaseOutQuart = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + position -= 1.0 + return -(position * position * position * position - 1.0) + } + + internal static let EaseInOutQuart = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / (duration / 2.0)) + if position < 1.0 + { + return 0.5 * position * position * position * position + } + position -= 2.0 + return -0.5 * (position * position * position * position - 2.0) + } + + internal static let EaseInQuint = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + return position * position * position * position * position + } + + internal static let EaseOutQuint = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + position -= 1.0 + return (position * position * position * position * position + 1.0) + } + + internal static let EaseInOutQuint = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / (duration / 2.0)) + if position < 1.0 + { + return 0.5 * position * position * position * position * position + } + else + { + position -= 2.0 + return 0.5 * (position * position * position * position * position + 2.0) + } + } + + internal static let EaseInSine = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position: TimeInterval = elapsed / duration + return Double( -cos(position * Double.pi / 2) + 1.0 ) + } + + internal static let EaseOutSine = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position: TimeInterval = elapsed / duration + return Double( sin(position * Double.pi / 2) ) + } + + internal static let EaseInOutSine = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position: TimeInterval = elapsed / duration + return Double( -0.5 * (cos(Double.pi * position) - 1.0) ) + } + + internal static let EaseInExpo = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + return (elapsed == 0) ? 0.0 : Double(pow(2.0, 10.0 * (elapsed / duration - 1.0))) + } + + internal static let EaseOutExpo = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + return (elapsed == duration) ? 1.0 : (-Double(pow(2.0, -10.0 * elapsed / duration)) + 1.0) + } + + internal static let EaseInOutExpo = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + if elapsed == 0 + { + return 0.0 + } + if elapsed == duration + { + return 1.0 + } + + var position: TimeInterval = elapsed / (duration / 2.0) + if position < 1.0 + { + return Double( 0.5 * pow(2.0, 10.0 * (position - 1.0)) ) + } + + position = position - 1.0 + return Double( 0.5 * (-pow(2.0, -10.0 * position) + 2.0) ) + } + + internal static let EaseInCirc = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + return -(Double(sqrt(1.0 - position * position)) - 1.0) + } + + internal static let EaseOutCirc = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position = Double(elapsed / duration) + position -= 1.0 + return Double( sqrt(1 - position * position) ) + } + + internal static let EaseInOutCirc = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position: TimeInterval = elapsed / (duration / 2.0) + if position < 1.0 + { + return Double( -0.5 * (sqrt(1.0 - position * position) - 1.0) ) + } + position -= 2.0 + return Double( 0.5 * (sqrt(1.0 - position * position) + 1.0) ) + } + + internal static let EaseInElastic = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + if elapsed == 0.0 + { + return 0.0 + } + + var position: TimeInterval = elapsed / duration + if position == 1.0 + { + return 1.0 + } + + var p = duration * 0.3 + var s = p / (2.0 * Double.pi) * asin(1.0) + position -= 1.0 + return Double( -(pow(2.0, 10.0 * position) * sin((position * duration - s) * (2.0 * Double.pi) / p)) ) + } + + internal static let EaseOutElastic = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + if elapsed == 0.0 + { + return 0.0 + } + + var position: TimeInterval = elapsed / duration + if position == 1.0 + { + return 1.0 + } + + var p = duration * 0.3 + var s = p / (2.0 * Double.pi) * asin(1.0) + return Double( pow(2.0, -10.0 * position) * sin((position * duration - s) * (2.0 * Double.pi) / p) + 1.0 ) + } + + internal static let EaseInOutElastic = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + if elapsed == 0.0 + { + return 0.0 + } + + var position: TimeInterval = elapsed / (duration / 2.0) + if position == 2.0 + { + return 1.0 + } + + var p = duration * (0.3 * 1.5) + var s = p / (2.0 * Double.pi) * asin(1.0) + if position < 1.0 + { + position -= 1.0 + return Double( -0.5 * (pow(2.0, 10.0 * position) * sin((position * duration - s) * (2.0 * Double.pi) / p)) ) + } + position -= 1.0 + return Double( pow(2.0, -10.0 * position) * sin((position * duration - s) * (2.0 * Double.pi) / p) * 0.5 + 1.0 ) + } + + internal static let EaseInBack = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + let s: TimeInterval = 1.70158 + var position: TimeInterval = elapsed / duration + return Double( position * position * ((s + 1.0) * position - s) ) + } + + internal static let EaseOutBack = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + let s: TimeInterval = 1.70158 + var position: TimeInterval = elapsed / duration + position -= 1.0 + return Double( position * position * ((s + 1.0) * position + s) + 1.0 ) + } + + internal static let EaseInOutBack = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var s: TimeInterval = 1.70158 + var position: TimeInterval = elapsed / (duration / 2.0) + if position < 1.0 + { + s *= 1.525 + return Double( 0.5 * (position * position * ((s + 1.0) * position - s)) ) + } + s *= 1.525 + position -= 2.0 + return Double( 0.5 * (position * position * ((s + 1.0) * position + s) + 2.0) ) + } + + internal static let EaseInBounce = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + return 1.0 - EaseOutBounce(duration - elapsed, duration) + } + + internal static let EaseOutBounce = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + var position: TimeInterval = elapsed / duration + if position < (1.0 / 2.75) + { + return Double( 7.5625 * position * position ) + } + else if position < (2.0 / 2.75) + { + position -= (1.5 / 2.75) + return Double( 7.5625 * position * position + 0.75 ) + } + else if position < (2.5 / 2.75) + { + position -= (2.25 / 2.75) + return Double( 7.5625 * position * position + 0.9375 ) + } + else + { + position -= (2.625 / 2.75) + return Double( 7.5625 * position * position + 0.984375 ) + } + } + + internal static let EaseInOutBounce = { (elapsed: TimeInterval, duration: TimeInterval) -> Double in + if elapsed < (duration / 2.0) + { + return EaseInBounce(elapsed * 2.0, duration) * 0.5 + } + return EaseOutBounce(elapsed * 2.0 - duration, duration) * 0.5 + 0.5 + } +} diff --git a/Pods/Charts/Source/Charts/Charts/BarChartView.swift b/Pods/Charts/Source/Charts/Charts/BarChartView.swift new file mode 100644 index 0000000..ec4c019 --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/BarChartView.swift @@ -0,0 +1,183 @@ +// +// BarChartView.swift +// Charts +// +// 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 + +/// Chart that draws bars. +open class BarChartView: BarLineChartViewBase, BarChartDataProvider +{ + /// if set to true, all values are drawn above their bars, instead of below their top + private var _drawValueAboveBarEnabled = true + + /// if set to true, a grey area is drawn behind each bar that indicates the maximum value + private var _drawBarShadowEnabled = false + + internal override func initialize() + { + super.initialize() + + renderer = BarChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) + + self.highlighter = BarHighlighter(chart: self) + + self.xAxis.spaceMin = 0.5 + self.xAxis.spaceMax = 0.5 + } + + internal override func calcMinMax() + { + guard let data = self.data as? BarChartData + else { return } + + if fitBars + { + _xAxis.calculate( + min: data.xMin - data.barWidth / 2.0, + max: data.xMax + data.barWidth / 2.0) + } + else + { + _xAxis.calculate(min: data.xMin, max: data.xMax) + } + + // calculate axis range (min / max) according to provided data + leftAxis.calculate( + min: data.getYMin(axis: .left), + max: data.getYMax(axis: .left)) + rightAxis.calculate( + min: data.getYMin(axis: .right), + max: data.getYMax(axis: .right)) + } + + /// - returns: The Highlight object (contains x-index and DataSet index) of the selected value at the given touch point inside the BarChart. + open override func getHighlightByTouchPoint(_ pt: CGPoint) -> Highlight? + { + if _data === nil + { + Swift.print("Can't select by touch. No data set.") + return nil + } + + guard let h = self.highlighter?.getHighlight(x: pt.x, y: pt.y) + else { return nil } + + if !isHighlightFullBarEnabled { return h } + + // For isHighlightFullBarEnabled, remove stackIndex + return Highlight( + x: h.x, y: h.y, + xPx: h.xPx, yPx: h.yPx, + dataIndex: h.dataIndex, + dataSetIndex: h.dataSetIndex, + stackIndex: -1, + axis: h.axis) + } + + /// - returns: The bounding box of the specified Entry in the specified DataSet. Returns null if the Entry could not be found in the charts data. + @objc open func getBarBounds(entry e: BarChartDataEntry) -> CGRect + { + guard let + data = _data as? BarChartData, + let set = data.getDataSetForEntry(e) as? IBarChartDataSet + else { return CGRect.null } + + let y = e.y + let x = e.x + + let barWidth = data.barWidth + + let left = x - barWidth / 2.0 + let right = x + barWidth / 2.0 + let top = y >= 0.0 ? y : 0.0 + let bottom = y <= 0.0 ? y : 0.0 + + var bounds = CGRect(x: left, y: top, width: right - left, height: bottom - top) + + getTransformer(forAxis: set.axisDependency).rectValueToPixel(&bounds) + + return bounds + } + + /// Groups all BarDataSet objects this data object holds together by modifying the x-value of their entries. + /// Previously set x-values of entries will be overwritten. Leaves space between bars and groups as specified by the parameters. + /// Calls `notifyDataSetChanged()` afterwards. + /// + /// - parameter fromX: the starting point on the x-axis where the grouping should begin + /// - parameter groupSpace: the space between groups of bars in values (not pixels) e.g. 0.8f for bar width 1f + /// - parameter barSpace: the space between individual bars in values (not pixels) e.g. 0.1f for bar width 1f + @objc open func groupBars(fromX: Double, groupSpace: Double, barSpace: Double) + { + guard let barData = self.barData + else + { + Swift.print("You need to set data for the chart before grouping bars.", terminator: "\n") + return + } + + barData.groupBars(fromX: fromX, groupSpace: groupSpace, barSpace: barSpace) + notifyDataSetChanged() + } + + /// Highlights the value at the given x-value in the given DataSet. Provide -1 as the dataSetIndex to undo all highlighting. + /// - parameter x: + /// - parameter dataSetIndex: + /// - parameter stackIndex: the index inside the stack - only relevant for stacked entries + @objc open func highlightValue(x: Double, dataSetIndex: Int, stackIndex: Int) + { + highlightValue(Highlight(x: x, dataSetIndex: dataSetIndex, stackIndex: stackIndex)) + } + + // MARK: Accessors + + /// if set to true, all values are drawn above their bars, instead of below their top + @objc open var drawValueAboveBarEnabled: Bool + { + get { return _drawValueAboveBarEnabled } + set + { + _drawValueAboveBarEnabled = newValue + setNeedsDisplay() + } + } + + /// if set to true, a grey area is drawn behind each bar that indicates the maximum value + @objc open var drawBarShadowEnabled: Bool + { + get { return _drawBarShadowEnabled } + set + { + _drawBarShadowEnabled = newValue + setNeedsDisplay() + } + } + + /// Adds half of the bar width to each side of the x-axis range in order to allow the bars of the barchart to be fully displayed. + /// **default**: false + @objc open var fitBars = false + + /// Set this to `true` to make the highlight operation full-bar oriented, `false` to make it highlight single values (relevant only for stacked). + /// If enabled, highlighting operations will highlight the whole bar, even if only a single stack entry was tapped. + @objc open var highlightFullBarEnabled: Bool = false + + /// - returns: `true` the highlight is be full-bar oriented, `false` ifsingle-value + open var isHighlightFullBarEnabled: Bool { return highlightFullBarEnabled } + + // MARK: - BarChartDataProvider + + open var barData: BarChartData? { return _data as? BarChartData } + + /// - returns: `true` if drawing values above bars is enabled, `false` ifnot + open var isDrawValueAboveBarEnabled: Bool { return drawValueAboveBarEnabled } + + /// - returns: `true` if drawing shadows (maxvalue) for each bar is enabled, `false` ifnot + open var isDrawBarShadowEnabled: Bool { return drawBarShadowEnabled } +} diff --git a/Pods/Charts/Source/Charts/Charts/BarLineChartViewBase.swift b/Pods/Charts/Source/Charts/Charts/BarLineChartViewBase.swift new file mode 100644 index 0000000..43b28c3 --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/BarLineChartViewBase.swift @@ -0,0 +1,1936 @@ +// +// BarLineChartViewBase.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +/// Base-class of LineChart, BarChart, ScatterChart and CandleStickChart. +open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartDataProvider, NSUIGestureRecognizerDelegate +{ + /// the maximum number of entries to which values will be drawn + /// (entry numbers greater than this value will cause value-labels to disappear) + internal var _maxVisibleCount = 100 + + /// flag that indicates if auto scaling on the y axis is enabled + private var _autoScaleMinMaxEnabled = false + + private var _pinchZoomEnabled = false + private var _doubleTapToZoomEnabled = true + private var _dragXEnabled = true + private var _dragYEnabled = true + + private var _scaleXEnabled = true + private var _scaleYEnabled = true + + /// the color for the background of the chart-drawing area (everything behind the grid lines). + @objc open var gridBackgroundColor = NSUIColor(red: 240/255.0, green: 240/255.0, blue: 240/255.0, alpha: 1.0) + + @objc open var borderColor = NSUIColor.black + @objc open var borderLineWidth: CGFloat = 1.0 + + /// flag indicating if the grid background should be drawn or not + @objc open var drawGridBackgroundEnabled = false + + /// When enabled, the borders rectangle will be rendered. + /// If this is enabled, there is no point drawing the axis-lines of x- and y-axis. + @objc open var drawBordersEnabled = false + + /// When enabled, the values will be clipped to contentRect, otherwise they can bleed outside the content rect. + @objc open var clipValuesToContentEnabled: Bool = false + + /// When disabled, the data and/or highlights will not be clipped to contentRect. Disabling this option can + /// be useful, when the data lies fully within the content rect, but is drawn in such a way (such as thick lines) + /// that there is unwanted clipping. + @objc open var clipDataToContentEnabled: Bool = true + + /// Sets the minimum offset (padding) around the chart, defaults to 10 + @objc open var minOffset = CGFloat(10.0) + + /// Sets whether the chart should keep its position (zoom / scroll) after a rotation (orientation change) + /// **default**: false + @objc open var keepPositionOnRotation: Bool = false + + /// The left y-axis object. In the horizontal bar-chart, this is the + /// top axis. + @objc open internal(set) var leftAxis = YAxis(position: .left) + + /// The right y-axis object. In the horizontal bar-chart, this is the + /// bottom axis. + @objc open internal(set) var rightAxis = YAxis(position: .right) + + /// The left Y axis renderer. This is a read-write property so you can set your own custom renderer here. + /// **default**: An instance of YAxisRenderer + @objc open lazy var leftYAxisRenderer = YAxisRenderer(viewPortHandler: _viewPortHandler, yAxis: leftAxis, transformer: _leftAxisTransformer) + + /// The right Y axis renderer. This is a read-write property so you can set your own custom renderer here. + /// **default**: An instance of YAxisRenderer + @objc open lazy var rightYAxisRenderer = YAxisRenderer(viewPortHandler: _viewPortHandler, yAxis: rightAxis, transformer: _rightAxisTransformer) + + internal var _leftAxisTransformer: Transformer! + internal var _rightAxisTransformer: Transformer! + + /// The X axis renderer. This is a read-write property so you can set your own custom renderer here. + /// **default**: An instance of XAxisRenderer + @objc open lazy var xAxisRenderer = XAxisRenderer(viewPortHandler: _viewPortHandler, xAxis: _xAxis, transformer: _leftAxisTransformer) + + internal var _tapGestureRecognizer: NSUITapGestureRecognizer! + internal var _doubleTapGestureRecognizer: NSUITapGestureRecognizer! + #if !os(tvOS) + internal var _pinchGestureRecognizer: NSUIPinchGestureRecognizer! + #endif + internal var _panGestureRecognizer: NSUIPanGestureRecognizer! + + /// flag that indicates if a custom viewport offset has been set + private var _customViewPortEnabled = false + + public override init(frame: CGRect) + { + super.init(frame: frame) + } + + public required init?(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + } + + deinit + { + stopDeceleration() + } + + internal override func initialize() + { + super.initialize() + + _leftAxisTransformer = Transformer(viewPortHandler: _viewPortHandler) + _rightAxisTransformer = Transformer(viewPortHandler: _viewPortHandler) + + self.highlighter = ChartHighlighter(chart: self) + + _tapGestureRecognizer = NSUITapGestureRecognizer(target: self, action: #selector(tapGestureRecognized(_:))) + _doubleTapGestureRecognizer = NSUITapGestureRecognizer(target: self, action: #selector(doubleTapGestureRecognized(_:))) + _doubleTapGestureRecognizer.nsuiNumberOfTapsRequired = 2 + _panGestureRecognizer = NSUIPanGestureRecognizer(target: self, action: #selector(panGestureRecognized(_:))) + + _panGestureRecognizer.delegate = self + + self.addGestureRecognizer(_tapGestureRecognizer) + self.addGestureRecognizer(_doubleTapGestureRecognizer) + self.addGestureRecognizer(_panGestureRecognizer) + + _doubleTapGestureRecognizer.isEnabled = _doubleTapToZoomEnabled + _panGestureRecognizer.isEnabled = _dragXEnabled || _dragYEnabled + + #if !os(tvOS) + _pinchGestureRecognizer = NSUIPinchGestureRecognizer(target: self, action: #selector(BarLineChartViewBase.pinchGestureRecognized(_:))) + _pinchGestureRecognizer.delegate = self + self.addGestureRecognizer(_pinchGestureRecognizer) + _pinchGestureRecognizer.isEnabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled + #endif + } + + open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) + { + // Saving current position of chart. + var oldPoint: CGPoint? + if (keepPositionOnRotation && (keyPath == "frame" || keyPath == "bounds")) + { + oldPoint = viewPortHandler.contentRect.origin + getTransformer(forAxis: .left).pixelToValues(&oldPoint!) + } + + // Superclass transforms chart. + super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) + + // Restoring old position of chart + if var newPoint = oldPoint , keepPositionOnRotation + { + getTransformer(forAxis: .left).pointValueToPixel(&newPoint) + viewPortHandler.centerViewPort(pt: newPoint, chart: self) + } + else + { + viewPortHandler.refresh(newMatrix: viewPortHandler.touchMatrix, chart: self, invalidate: true) + } + } + + open override func draw(_ rect: CGRect) + { + super.draw(rect) + + guard data != nil, let renderer = renderer else { return } + + let optionalContext = NSUIGraphicsGetCurrentContext() + guard let context = optionalContext else { return } + + // execute all drawing commands + drawGridBackground(context: context) + + + if _autoScaleMinMaxEnabled + { + autoScale() + } + + if leftAxis.isEnabled + { + leftYAxisRenderer.computeAxis(min: leftAxis._axisMinimum, max: leftAxis._axisMaximum, inverted: leftAxis.isInverted) + } + + if rightAxis.isEnabled + { + rightYAxisRenderer.computeAxis(min: rightAxis._axisMinimum, max: rightAxis._axisMaximum, inverted: rightAxis.isInverted) + } + + if _xAxis.isEnabled + { + xAxisRenderer.computeAxis(min: _xAxis._axisMinimum, max: _xAxis._axisMaximum, inverted: false) + } + + xAxisRenderer.renderAxisLine(context: context) + leftYAxisRenderer.renderAxisLine(context: context) + rightYAxisRenderer.renderAxisLine(context: context) + + // The renderers are responsible for clipping, to account for line-width center etc. + xAxisRenderer.renderGridLines(context: context) + leftYAxisRenderer.renderGridLines(context: context) + rightYAxisRenderer.renderGridLines(context: context) + + if _xAxis.isEnabled && _xAxis.isDrawLimitLinesBehindDataEnabled + { + xAxisRenderer.renderLimitLines(context: context) + } + + if leftAxis.isEnabled && leftAxis.isDrawLimitLinesBehindDataEnabled + { + leftYAxisRenderer.renderLimitLines(context: context) + } + + if rightAxis.isEnabled && rightAxis.isDrawLimitLinesBehindDataEnabled + { + rightYAxisRenderer.renderLimitLines(context: context) + } + + context.saveGState() + // make sure the data cannot be drawn outside the content-rect + if clipDataToContentEnabled { + context.clip(to: _viewPortHandler.contentRect) + } + renderer.drawData(context: context) + + // if highlighting is enabled + if (valuesToHighlight()) + { + renderer.drawHighlighted(context: context, indices: _indicesToHighlight) + } + + context.restoreGState() + + renderer.drawExtras(context: context) + + if _xAxis.isEnabled && !_xAxis.isDrawLimitLinesBehindDataEnabled + { + xAxisRenderer.renderLimitLines(context: context) + } + + if leftAxis.isEnabled && !leftAxis.isDrawLimitLinesBehindDataEnabled + { + leftYAxisRenderer.renderLimitLines(context: context) + } + + if rightAxis.isEnabled && !rightAxis.isDrawLimitLinesBehindDataEnabled + { + rightYAxisRenderer.renderLimitLines(context: context) + } + + xAxisRenderer.renderAxisLabels(context: context) + leftYAxisRenderer.renderAxisLabels(context: context) + rightYAxisRenderer.renderAxisLabels(context: context) + + if clipValuesToContentEnabled + { + context.saveGState() + context.clip(to: _viewPortHandler.contentRect) + + renderer.drawValues(context: context) + + context.restoreGState() + } + else + { + renderer.drawValues(context: context) + } + + _legendRenderer.renderLegend(context: context) + + drawDescription(context: context) + + drawMarkers(context: context) + } + + private var _autoScaleLastLowestVisibleX: Double? + private var _autoScaleLastHighestVisibleX: Double? + + /// Performs auto scaling of the axis by recalculating the minimum and maximum y-values based on the entries currently in view. + internal func autoScale() + { + guard let data = _data + else { return } + + data.calcMinMaxY(fromX: self.lowestVisibleX, toX: self.highestVisibleX) + + _xAxis.calculate(min: data.xMin, max: data.xMax) + + // calculate axis range (min / max) according to provided data + + if leftAxis.isEnabled + { + leftAxis.calculate(min: data.getYMin(axis: .left), max: data.getYMax(axis: .left)) + } + + if rightAxis.isEnabled + { + rightAxis.calculate(min: data.getYMin(axis: .right), max: data.getYMax(axis: .right)) + } + + calculateOffsets() + } + + internal func prepareValuePxMatrix() + { + _rightAxisTransformer.prepareMatrixValuePx(chartXMin: _xAxis._axisMinimum, deltaX: CGFloat(xAxis.axisRange), deltaY: CGFloat(rightAxis.axisRange), chartYMin: rightAxis._axisMinimum) + _leftAxisTransformer.prepareMatrixValuePx(chartXMin: xAxis._axisMinimum, deltaX: CGFloat(xAxis.axisRange), deltaY: CGFloat(leftAxis.axisRange), chartYMin: leftAxis._axisMinimum) + } + + internal func prepareOffsetMatrix() + { + _rightAxisTransformer.prepareMatrixOffset(inverted: rightAxis.isInverted) + _leftAxisTransformer.prepareMatrixOffset(inverted: leftAxis.isInverted) + } + + open override func notifyDataSetChanged() + { + renderer?.initBuffers() + + calcMinMax() + + leftYAxisRenderer.computeAxis(min: leftAxis._axisMinimum, max: leftAxis._axisMaximum, inverted: leftAxis.isInverted) + rightYAxisRenderer.computeAxis(min: rightAxis._axisMinimum, max: rightAxis._axisMaximum, inverted: rightAxis.isInverted) + + if let data = _data + { + xAxisRenderer.computeAxis( + min: _xAxis._axisMinimum, + max: _xAxis._axisMaximum, + inverted: false) + + if _legend !== nil + { + legendRenderer?.computeLegend(data: data) + } + } + + calculateOffsets() + + setNeedsDisplay() + } + + internal override func calcMinMax() + { + // calculate / set x-axis range + _xAxis.calculate(min: _data?.xMin ?? 0.0, max: _data?.xMax ?? 0.0) + + // calculate axis range (min / max) according to provided data + leftAxis.calculate(min: _data?.getYMin(axis: .left) ?? 0.0, max: _data?.getYMax(axis: .left) ?? 0.0) + rightAxis.calculate(min: _data?.getYMin(axis: .right) ?? 0.0, max: _data?.getYMax(axis: .right) ?? 0.0) + } + + internal func calculateLegendOffsets(offsetLeft: inout CGFloat, offsetTop: inout CGFloat, offsetRight: inout CGFloat, offsetBottom: inout CGFloat) + { + // setup offsets for legend + if _legend !== nil && _legend.isEnabled && !_legend.drawInside + { + switch _legend.orientation + { + case .vertical: + + switch _legend.horizontalAlignment + { + case .left: + offsetLeft += min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) + _legend.xOffset + + case .right: + offsetRight += min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) + _legend.xOffset + + case .center: + + switch _legend.verticalAlignment + { + case .top: + offsetTop += min(_legend.neededHeight, _viewPortHandler.chartHeight * _legend.maxSizePercent) + _legend.yOffset + + case .bottom: + offsetBottom += min(_legend.neededHeight, _viewPortHandler.chartHeight * _legend.maxSizePercent) + _legend.yOffset + + default: + break + } + } + + case .horizontal: + + switch _legend.verticalAlignment + { + case .top: + offsetTop += min(_legend.neededHeight, _viewPortHandler.chartHeight * _legend.maxSizePercent) + _legend.yOffset + if xAxis.isEnabled && xAxis.isDrawLabelsEnabled + { + offsetTop += xAxis.labelRotatedHeight + } + + case .bottom: + offsetBottom += min(_legend.neededHeight, _viewPortHandler.chartHeight * _legend.maxSizePercent) + _legend.yOffset + if xAxis.isEnabled && xAxis.isDrawLabelsEnabled + { + offsetBottom += xAxis.labelRotatedHeight + } + + default: + break + } + } + } + } + + internal override func calculateOffsets() + { + if !_customViewPortEnabled + { + var offsetLeft = CGFloat(0.0) + var offsetRight = CGFloat(0.0) + var offsetTop = CGFloat(0.0) + var offsetBottom = CGFloat(0.0) + + calculateLegendOffsets(offsetLeft: &offsetLeft, + offsetTop: &offsetTop, + offsetRight: &offsetRight, + offsetBottom: &offsetBottom) + + // offsets for y-labels + if leftAxis.needsOffset + { + offsetLeft += leftAxis.requiredSize().width + } + + if rightAxis.needsOffset + { + offsetRight += rightAxis.requiredSize().width + } + + if xAxis.isEnabled && xAxis.isDrawLabelsEnabled + { + let xlabelheight = xAxis.labelRotatedHeight + xAxis.yOffset + + // offsets for x-labels + if xAxis.labelPosition == .bottom + { + offsetBottom += xlabelheight + } + else if xAxis.labelPosition == .top + { + offsetTop += xlabelheight + } + else if xAxis.labelPosition == .bothSided + { + offsetBottom += xlabelheight + offsetTop += xlabelheight + } + } + + offsetTop += self.extraTopOffset + offsetRight += self.extraRightOffset + offsetBottom += self.extraBottomOffset + offsetLeft += self.extraLeftOffset + + _viewPortHandler.restrainViewPort( + offsetLeft: max(self.minOffset, offsetLeft), + offsetTop: max(self.minOffset, offsetTop), + offsetRight: max(self.minOffset, offsetRight), + offsetBottom: max(self.minOffset, offsetBottom)) + } + + prepareOffsetMatrix() + prepareValuePxMatrix() + } + + /// draws the grid background + internal func drawGridBackground(context: CGContext) + { + if drawGridBackgroundEnabled || drawBordersEnabled + { + context.saveGState() + } + + if drawGridBackgroundEnabled + { + // draw the grid background + context.setFillColor(gridBackgroundColor.cgColor) + context.fill(_viewPortHandler.contentRect) + } + + if drawBordersEnabled + { + context.setLineWidth(borderLineWidth) + context.setStrokeColor(borderColor.cgColor) + context.stroke(_viewPortHandler.contentRect) + } + + if drawGridBackgroundEnabled || drawBordersEnabled + { + context.restoreGState() + } + } + + // MARK: - Gestures + + private enum GestureScaleAxis + { + case both + case x + case y + } + + private var _isDragging = false + private var _isScaling = false + private var _gestureScaleAxis = GestureScaleAxis.both + private var _closestDataSetToTouch: IChartDataSet! + private var _panGestureReachedEdge: Bool = false + private weak var _outerScrollView: NSUIScrollView? + + private var _lastPanPoint = CGPoint() /// This is to prevent using setTranslation which resets velocity + + private var _decelerationLastTime: TimeInterval = 0.0 + private var _decelerationDisplayLink: NSUIDisplayLink! + private var _decelerationVelocity = CGPoint() + + @objc private func tapGestureRecognized(_ recognizer: NSUITapGestureRecognizer) + { + if _data === nil + { + return + } + + if recognizer.state == NSUIGestureRecognizerState.ended + { + if !isHighLightPerTapEnabled { return } + + let h = getHighlightByTouchPoint(recognizer.location(in: self)) + + if h === nil || h == self.lastHighlighted + { + lastHighlighted = nil + highlightValue(nil, callDelegate: true) + } + else + { + lastHighlighted = h + highlightValue(h, callDelegate: true) + } + } + } + + @objc private func doubleTapGestureRecognized(_ recognizer: NSUITapGestureRecognizer) + { + if _data === nil + { + return + } + + if recognizer.state == NSUIGestureRecognizerState.ended + { + if _data !== nil && _doubleTapToZoomEnabled && (data?.entryCount ?? 0) > 0 + { + var location = recognizer.location(in: self) + location.x = location.x - _viewPortHandler.offsetLeft + + if isTouchInverted() + { + location.y = -(location.y - _viewPortHandler.offsetTop) + } + else + { + location.y = -(self.bounds.size.height - location.y - _viewPortHandler.offsetBottom) + } + + self.zoom(scaleX: isScaleXEnabled ? 1.4 : 1.0, scaleY: isScaleYEnabled ? 1.4 : 1.0, x: location.x, y: location.y) + } + } + } + + #if !os(tvOS) + @objc private func pinchGestureRecognized(_ recognizer: NSUIPinchGestureRecognizer) + { + if recognizer.state == NSUIGestureRecognizerState.began + { + stopDeceleration() + + if _data !== nil && + (_pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled) + { + _isScaling = true + + if _pinchZoomEnabled + { + _gestureScaleAxis = .both + } + else + { + let x = abs(recognizer.location(in: self).x - recognizer.nsuiLocationOfTouch(1, inView: self).x) + let y = abs(recognizer.location(in: self).y - recognizer.nsuiLocationOfTouch(1, inView: self).y) + + if _scaleXEnabled != _scaleYEnabled + { + _gestureScaleAxis = _scaleXEnabled ? .x : .y + } + else + { + _gestureScaleAxis = x > y ? .x : .y + } + } + } + } + else if recognizer.state == NSUIGestureRecognizerState.ended || + recognizer.state == NSUIGestureRecognizerState.cancelled + { + if _isScaling + { + _isScaling = false + + // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. + calculateOffsets() + setNeedsDisplay() + } + } + else if recognizer.state == NSUIGestureRecognizerState.changed + { + let isZoomingOut = (recognizer.nsuiScale < 1) + var canZoomMoreX = isZoomingOut ? _viewPortHandler.canZoomOutMoreX : _viewPortHandler.canZoomInMoreX + var canZoomMoreY = isZoomingOut ? _viewPortHandler.canZoomOutMoreY : _viewPortHandler.canZoomInMoreY + + if _isScaling + { + canZoomMoreX = canZoomMoreX && _scaleXEnabled && (_gestureScaleAxis == .both || _gestureScaleAxis == .x) + canZoomMoreY = canZoomMoreY && _scaleYEnabled && (_gestureScaleAxis == .both || _gestureScaleAxis == .y) + if canZoomMoreX || canZoomMoreY + { + var location = recognizer.location(in: self) + location.x = location.x - _viewPortHandler.offsetLeft + + if isTouchInverted() + { + location.y = -(location.y - _viewPortHandler.offsetTop) + } + else + { + location.y = -(_viewPortHandler.chartHeight - location.y - _viewPortHandler.offsetBottom) + } + + let scaleX = canZoomMoreX ? recognizer.nsuiScale : 1.0 + let scaleY = canZoomMoreY ? recognizer.nsuiScale : 1.0 + + var matrix = CGAffineTransform(translationX: location.x, y: location.y) + matrix = matrix.scaledBy(x: scaleX, y: scaleY) + matrix = matrix.translatedBy(x: -location.x, y: -location.y) + + matrix = _viewPortHandler.touchMatrix.concatenating(matrix) + + _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: true) + + if delegate !== nil + { + delegate?.chartScaled?(self, scaleX: scaleX, scaleY: scaleY) + } + } + + recognizer.nsuiScale = 1.0 + } + } + } + #endif + + @objc private func panGestureRecognized(_ recognizer: NSUIPanGestureRecognizer) + { + if recognizer.state == NSUIGestureRecognizerState.began && recognizer.nsuiNumberOfTouches() > 0 + { + stopDeceleration() + + if _data === nil || !self.isDragEnabled + { // If we have no data, we have nothing to pan and no data to highlight + return + } + + // If drag is enabled and we are in a position where there's something to drag: + // * If we're zoomed in, then obviously we have something to drag. + // * If we have a drag offset - we always have something to drag + if !self.hasNoDragOffset || !self.isFullyZoomedOut + { + _isDragging = true + + _closestDataSetToTouch = getDataSetByTouchPoint(point: recognizer.nsuiLocationOfTouch(0, inView: self)) + + var translation = recognizer.translation(in: self) + if !self.dragXEnabled + { + translation.x = 0.0 + } + else if !self.dragYEnabled + { + translation.y = 0.0 + } + + let didUserDrag = translation.x != 0.0 || translation.y != 0.0 + + // Check to see if user dragged at all and if so, can the chart be dragged by the given amount + if didUserDrag && !performPanChange(translation: translation) + { + if _outerScrollView !== nil + { + // We can stop dragging right now, and let the scroll view take control + _outerScrollView = nil + _isDragging = false + } + } + else + { + if _outerScrollView !== nil + { + // Prevent the parent scroll view from scrolling + _outerScrollView?.nsuiIsScrollEnabled = false + } + } + + _lastPanPoint = recognizer.translation(in: self) + } + else if self.isHighlightPerDragEnabled + { + // We will only handle highlights on NSUIGestureRecognizerState.Changed + + _isDragging = false + } + } + else if recognizer.state == NSUIGestureRecognizerState.changed + { + if _isDragging + { + let originalTranslation = recognizer.translation(in: self) + var translation = CGPoint(x: originalTranslation.x - _lastPanPoint.x, y: originalTranslation.y - _lastPanPoint.y) + + if !self.dragXEnabled + { + translation.x = 0.0 + } + else if !self.dragYEnabled + { + translation.y = 0.0 + } + + let _ = performPanChange(translation: translation) + + _lastPanPoint = originalTranslation + } + else if isHighlightPerDragEnabled + { + let h = getHighlightByTouchPoint(recognizer.location(in: self)) + + let lastHighlighted = self.lastHighlighted + + if h != lastHighlighted + { + self.lastHighlighted = h + self.highlightValue(h, callDelegate: true) + } + } + } + else if recognizer.state == NSUIGestureRecognizerState.ended || recognizer.state == NSUIGestureRecognizerState.cancelled + { + if _isDragging + { + if recognizer.state == NSUIGestureRecognizerState.ended && isDragDecelerationEnabled + { + stopDeceleration() + + _decelerationLastTime = CACurrentMediaTime() + _decelerationVelocity = recognizer.velocity(in: self) + + _decelerationDisplayLink = NSUIDisplayLink(target: self, selector: #selector(BarLineChartViewBase.decelerationLoop)) + _decelerationDisplayLink.add(to: RunLoop.main, forMode: RunLoopMode.commonModes) + } + + _isDragging = false + } + + if _outerScrollView !== nil + { + _outerScrollView?.nsuiIsScrollEnabled = true + _outerScrollView = nil + } + } + } + + private func performPanChange(translation: CGPoint) -> Bool + { + var translation = translation + + if isTouchInverted() + { + if self is HorizontalBarChartView + { + translation.x = -translation.x + } + else + { + translation.y = -translation.y + } + } + + let originalMatrix = _viewPortHandler.touchMatrix + + var matrix = CGAffineTransform(translationX: translation.x, y: translation.y) + matrix = originalMatrix.concatenating(matrix) + + matrix = _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: true) + + if delegate !== nil + { + delegate?.chartTranslated?(self, dX: translation.x, dY: translation.y) + } + + // Did we managed to actually drag or did we reach the edge? + return matrix.tx != originalMatrix.tx || matrix.ty != originalMatrix.ty + } + + private func isTouchInverted() -> Bool + { + return isAnyAxisInverted && + _closestDataSetToTouch !== nil && + getAxis(_closestDataSetToTouch.axisDependency).isInverted + } + + @objc open func stopDeceleration() + { + if _decelerationDisplayLink !== nil + { + _decelerationDisplayLink.remove(from: RunLoop.main, forMode: RunLoopMode.commonModes) + _decelerationDisplayLink = nil + } + } + + @objc private func decelerationLoop() + { + let currentTime = CACurrentMediaTime() + + _decelerationVelocity.x *= self.dragDecelerationFrictionCoef + _decelerationVelocity.y *= self.dragDecelerationFrictionCoef + + let timeInterval = CGFloat(currentTime - _decelerationLastTime) + + let distance = CGPoint( + x: _decelerationVelocity.x * timeInterval, + y: _decelerationVelocity.y * timeInterval + ) + + if !performPanChange(translation: distance) + { + // We reached the edge, stop + _decelerationVelocity.x = 0.0 + _decelerationVelocity.y = 0.0 + } + + _decelerationLastTime = currentTime + + if abs(_decelerationVelocity.x) < 0.001 && abs(_decelerationVelocity.y) < 0.001 + { + stopDeceleration() + + // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. + calculateOffsets() + setNeedsDisplay() + } + } + + private func nsuiGestureRecognizerShouldBegin(_ gestureRecognizer: NSUIGestureRecognizer) -> Bool + { + if gestureRecognizer == _panGestureRecognizer + { + let velocity = _panGestureRecognizer.velocity(in: self) + if _data === nil || !isDragEnabled || + (self.hasNoDragOffset && self.isFullyZoomedOut && !self.isHighlightPerDragEnabled) || + (!_dragYEnabled && fabs(velocity.y) > fabs(velocity.x)) || + (!_dragXEnabled && fabs(velocity.y) < fabs(velocity.x)) + { + return false + } + } + else + { + #if !os(tvOS) + if gestureRecognizer == _pinchGestureRecognizer + { + if _data === nil || (!_pinchZoomEnabled && !_scaleXEnabled && !_scaleYEnabled) + { + return false + } + } + #endif + } + + return true + } + + #if !os(OSX) + open override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool + { + if !super.gestureRecognizerShouldBegin(gestureRecognizer) + { + return false + } + + return nsuiGestureRecognizerShouldBegin(gestureRecognizer) + } + #endif + + #if os(OSX) + public func gestureRecognizerShouldBegin(gestureRecognizer: NSGestureRecognizer) -> Bool + { + return nsuiGestureRecognizerShouldBegin(gestureRecognizer) + } + #endif + + open func gestureRecognizer(_ gestureRecognizer: NSUIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: NSUIGestureRecognizer) -> Bool + { + #if !os(tvOS) + if ((gestureRecognizer is NSUIPinchGestureRecognizer && otherGestureRecognizer is NSUIPanGestureRecognizer) || + (gestureRecognizer is NSUIPanGestureRecognizer && otherGestureRecognizer is NSUIPinchGestureRecognizer)) + { + return true + } + #endif + + if gestureRecognizer is NSUIPanGestureRecognizer, + otherGestureRecognizer is NSUIPanGestureRecognizer, + gestureRecognizer == _panGestureRecognizer + { + var scrollView = self.superview + while scrollView != nil && !(scrollView is NSUIScrollView) + { + scrollView = scrollView?.superview + } + + // If there is two scrollview together, we pick the superview of the inner scrollview. + // In the case of UITableViewWrepperView, the superview will be UITableView + if let superViewOfScrollView = scrollView?.superview, + superViewOfScrollView is NSUIScrollView + { + scrollView = superViewOfScrollView + } + + var foundScrollView = scrollView as? NSUIScrollView + + if !(foundScrollView?.nsuiIsScrollEnabled ?? true) + { + foundScrollView = nil + } + + let scrollViewPanGestureRecognizer = foundScrollView?.nsuiGestureRecognizers?.first { + $0 is NSUIPanGestureRecognizer + } + + if otherGestureRecognizer === scrollViewPanGestureRecognizer + { + _outerScrollView = foundScrollView + + return true + } + } + + return false + } + + /// MARK: Viewport modifiers + + /// Zooms in by 1.4, into the charts center. + @objc open func zoomIn() + { + let center = _viewPortHandler.contentCenter + + let matrix = _viewPortHandler.zoomIn(x: center.x, y: -center.y) + _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) + + // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. + calculateOffsets() + setNeedsDisplay() + } + + /// Zooms out by 0.7, from the charts center. + @objc open func zoomOut() + { + let center = _viewPortHandler.contentCenter + + let matrix = _viewPortHandler.zoomOut(x: center.x, y: -center.y) + _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) + + // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. + calculateOffsets() + setNeedsDisplay() + } + + /// Zooms out to original size. + @objc open func resetZoom() + { + let matrix = _viewPortHandler.resetZoom() + _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) + + // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. + calculateOffsets() + setNeedsDisplay() + } + + /// Zooms in or out by the given scale factor. x and y are the coordinates + /// (in pixels) of the zoom center. + /// + /// - parameter scaleX: if < 1 --> zoom out, if > 1 --> zoom in + /// - parameter scaleY: if < 1 --> zoom out, if > 1 --> zoom in + /// - parameter x: + /// - parameter y: + @objc open func zoom( + scaleX: CGFloat, + scaleY: CGFloat, + x: CGFloat, + y: CGFloat) + { + let matrix = _viewPortHandler.zoom(scaleX: scaleX, scaleY: scaleY, x: x, y: -y) + _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) + + // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. + calculateOffsets() + setNeedsDisplay() + } + + /// Zooms in or out by the given scale factor. + /// x and y are the values (**not pixels**) of the zoom center. + /// + /// - parameter scaleX: if < 1 --> zoom out, if > 1 --> zoom in + /// - parameter scaleY: if < 1 --> zoom out, if > 1 --> zoom in + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: + @objc open func zoom( + scaleX: CGFloat, + scaleY: CGFloat, + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency) + { + let job = ZoomViewJob( + viewPortHandler: viewPortHandler, + scaleX: scaleX, + scaleY: scaleY, + xValue: xValue, + yValue: yValue, + transformer: getTransformer(forAxis: axis), + axis: axis, + view: self) + addViewportJob(job) + } + + /// Zooms to the center of the chart with the given scale factor. + /// + /// - parameter scaleX: if < 1 --> zoom out, if > 1 --> zoom in + /// - parameter scaleY: if < 1 --> zoom out, if > 1 --> zoom in + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: + @objc open func zoomToCenter( + scaleX: CGFloat, + scaleY: CGFloat) + { + let center = centerOffsets + let matrix = viewPortHandler.zoom( + scaleX: scaleX, + scaleY: scaleY, + x: center.x, + y: -center.y) + viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) + } + + /// Zooms by the specified scale factor to the specified values on the specified axis. + /// + /// - parameter scaleX: + /// - parameter scaleY: + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func zoomAndCenterViewAnimated( + scaleX: CGFloat, + scaleY: CGFloat, + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval, + easing: ChartEasingFunctionBlock?) + { + let origin = valueForTouchPoint( + point: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop), + axis: axis) + + let job = AnimatedZoomViewJob( + viewPortHandler: viewPortHandler, + transformer: getTransformer(forAxis: axis), + view: self, + yAxis: getAxis(axis), + xAxisRange: _xAxis.axisRange, + scaleX: scaleX, + scaleY: scaleY, + xOrigin: viewPortHandler.scaleX, + yOrigin: viewPortHandler.scaleY, + zoomCenterX: CGFloat(xValue), + zoomCenterY: CGFloat(yValue), + zoomOriginX: origin.x, + zoomOriginY: origin.y, + duration: duration, + easing: easing) + + addViewportJob(job) + } + + /// Zooms by the specified scale factor to the specified values on the specified axis. + /// + /// - parameter scaleX: + /// - parameter scaleY: + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func zoomAndCenterViewAnimated( + scaleX: CGFloat, + scaleY: CGFloat, + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval, + easingOption: ChartEasingOption) + { + zoomAndCenterViewAnimated(scaleX: scaleX, scaleY: scaleY, xValue: xValue, yValue: yValue, axis: axis, duration: duration, easing: easingFunctionFromOption(easingOption)) + } + + /// Zooms by the specified scale factor to the specified values on the specified axis. + /// + /// - parameter scaleX: + /// - parameter scaleY: + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func zoomAndCenterViewAnimated( + scaleX: CGFloat, + scaleY: CGFloat, + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval) + { + zoomAndCenterViewAnimated(scaleX: scaleX, scaleY: scaleY, xValue: xValue, yValue: yValue, axis: axis, duration: duration, easingOption: .easeInOutSine) + } + + /// Resets all zooming and dragging and makes the chart fit exactly it's bounds. + @objc open func fitScreen() + { + let matrix = _viewPortHandler.fitScreen() + _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) + + calculateOffsets() + setNeedsDisplay() + } + + /// Sets the minimum scale value to which can be zoomed out. 1 = fitScreen + @objc open func setScaleMinima(_ scaleX: CGFloat, scaleY: CGFloat) + { + _viewPortHandler.setMinimumScaleX(scaleX) + _viewPortHandler.setMinimumScaleY(scaleY) + } + + @objc open var visibleXRange: Double + { + return abs(highestVisibleX - lowestVisibleX) + } + + /// Sets the size of the area (range on the x-axis) that should be maximum visible at once (no further zooming out allowed). + /// + /// If this is e.g. set to 10, no more than a range of 10 values on the x-axis can be viewed at once without scrolling. + /// + /// If you call this method, chart must have data or it has no effect. + @objc open func setVisibleXRangeMaximum(_ maxXRange: Double) + { + let xScale = _xAxis.axisRange / maxXRange + _viewPortHandler.setMinimumScaleX(CGFloat(xScale)) + } + + /// Sets the size of the area (range on the x-axis) that should be minimum visible at once (no further zooming in allowed). + /// + /// If this is e.g. set to 10, no less than a range of 10 values on the x-axis can be viewed at once without scrolling. + /// + /// If you call this method, chart must have data or it has no effect. + @objc open func setVisibleXRangeMinimum(_ minXRange: Double) + { + let xScale = _xAxis.axisRange / minXRange + _viewPortHandler.setMaximumScaleX(CGFloat(xScale)) + } + + /// Limits the maximum and minimum value count that can be visible by pinching and zooming. + /// + /// e.g. minRange=10, maxRange=100 no less than 10 values and no more that 100 values can be viewed + /// at once without scrolling. + /// + /// If you call this method, chart must have data or it has no effect. + @objc open func setVisibleXRange(minXRange: Double, maxXRange: Double) + { + let minScale = _xAxis.axisRange / maxXRange + let maxScale = _xAxis.axisRange / minXRange + _viewPortHandler.setMinMaxScaleX( + minScaleX: CGFloat(minScale), + maxScaleX: CGFloat(maxScale)) + } + + /// Sets the size of the area (range on the y-axis) that should be maximum visible at once. + /// + /// - parameter yRange: + /// - parameter axis: - the axis for which this limit should apply + @objc open func setVisibleYRangeMaximum(_ maxYRange: Double, axis: YAxis.AxisDependency) + { + let yScale = getAxisRange(axis: axis) / maxYRange + _viewPortHandler.setMinimumScaleY(CGFloat(yScale)) + } + + /// Sets the size of the area (range on the y-axis) that should be minimum visible at once, no further zooming in possible. + /// + /// - parameter yRange: + /// - parameter axis: - the axis for which this limit should apply + @objc open func setVisibleYRangeMinimum(_ minYRange: Double, axis: YAxis.AxisDependency) + { + let yScale = getAxisRange(axis: axis) / minYRange + _viewPortHandler.setMaximumScaleY(CGFloat(yScale)) + } + + /// Limits the maximum and minimum y range that can be visible by pinching and zooming. + /// + /// - parameter minYRange: + /// - parameter maxYRange: + /// - parameter axis: + @objc open func setVisibleYRange(minYRange: Double, maxYRange: Double, axis: YAxis.AxisDependency) + { + let minScale = getAxisRange(axis: axis) / minYRange + let maxScale = getAxisRange(axis: axis) / maxYRange + _viewPortHandler.setMinMaxScaleY(minScaleY: CGFloat(minScale), maxScaleY: CGFloat(maxScale)) + } + + /// Moves the left side of the current viewport to the specified x-value. + /// This also refreshes the chart by calling setNeedsDisplay(). + @objc open func moveViewToX(_ xValue: Double) + { + let job = MoveViewJob( + viewPortHandler: viewPortHandler, + xValue: xValue, + yValue: 0.0, + transformer: getTransformer(forAxis: .left), + view: self) + + addViewportJob(job) + } + + /// Centers the viewport to the specified y-value on the y-axis. + /// This also refreshes the chart by calling setNeedsDisplay(). + /// + /// - parameter yValue: + /// - parameter axis: - which axis should be used as a reference for the y-axis + @objc open func moveViewToY(_ yValue: Double, axis: YAxis.AxisDependency) + { + let yInView = getAxisRange(axis: axis) / Double(_viewPortHandler.scaleY) + + let job = MoveViewJob( + viewPortHandler: viewPortHandler, + xValue: 0.0, + yValue: yValue + yInView / 2.0, + transformer: getTransformer(forAxis: axis), + view: self) + + addViewportJob(job) + } + + /// This will move the left side of the current viewport to the specified x-value on the x-axis, and center the viewport to the specified y-value on the y-axis. + /// This also refreshes the chart by calling setNeedsDisplay(). + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: - which axis should be used as a reference for the y-axis + @objc open func moveViewTo(xValue: Double, yValue: Double, axis: YAxis.AxisDependency) + { + let yInView = getAxisRange(axis: axis) / Double(_viewPortHandler.scaleY) + + let job = MoveViewJob( + viewPortHandler: viewPortHandler, + xValue: xValue, + yValue: yValue + yInView / 2.0, + transformer: getTransformer(forAxis: axis), + view: self) + + addViewportJob(job) + } + + /// This will move the left side of the current viewport to the specified x-position and center the viewport to the specified y-position animated. + /// This also refreshes the chart by calling setNeedsDisplay(). + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func moveViewToAnimated( + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval, + easing: ChartEasingFunctionBlock?) + { + let bounds = valueForTouchPoint( + point: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop), + axis: axis) + + let yInView = getAxisRange(axis: axis) / Double(_viewPortHandler.scaleY) + + let job = AnimatedMoveViewJob( + viewPortHandler: viewPortHandler, + xValue: xValue, + yValue: yValue + yInView / 2.0, + transformer: getTransformer(forAxis: axis), + view: self, + xOrigin: bounds.x, + yOrigin: bounds.y, + duration: duration, + easing: easing) + + addViewportJob(job) + } + + /// This will move the left side of the current viewport to the specified x-position and center the viewport to the specified y-position animated. + /// This also refreshes the chart by calling setNeedsDisplay(). + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func moveViewToAnimated( + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval, + easingOption: ChartEasingOption) + { + moveViewToAnimated(xValue: xValue, yValue: yValue, axis: axis, duration: duration, easing: easingFunctionFromOption(easingOption)) + } + + /// This will move the left side of the current viewport to the specified x-position and center the viewport to the specified y-position animated. + /// This also refreshes the chart by calling setNeedsDisplay(). + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func moveViewToAnimated( + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval) + { + moveViewToAnimated(xValue: xValue, yValue: yValue, axis: axis, duration: duration, easingOption: .easeInOutSine) + } + + /// This will move the center of the current viewport to the specified x-value and y-value. + /// This also refreshes the chart by calling setNeedsDisplay(). + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: - which axis should be used as a reference for the y-axis + @objc open func centerViewTo( + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency) + { + let yInView = getAxisRange(axis: axis) / Double(_viewPortHandler.scaleY) + let xInView = xAxis.axisRange / Double(_viewPortHandler.scaleX) + + let job = MoveViewJob( + viewPortHandler: viewPortHandler, + xValue: xValue - xInView / 2.0, + yValue: yValue + yInView / 2.0, + transformer: getTransformer(forAxis: axis), + view: self) + + addViewportJob(job) + } + + /// This will move the center of the current viewport to the specified x-value and y-value animated. + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func centerViewToAnimated( + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval, + easing: ChartEasingFunctionBlock?) + { + let bounds = valueForTouchPoint( + point: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop), + axis: axis) + + let yInView = getAxisRange(axis: axis) / Double(_viewPortHandler.scaleY) + let xInView = xAxis.axisRange / Double(_viewPortHandler.scaleX) + + let job = AnimatedMoveViewJob( + viewPortHandler: viewPortHandler, + xValue: xValue - xInView / 2.0, + yValue: yValue + yInView / 2.0, + transformer: getTransformer(forAxis: axis), + view: self, + xOrigin: bounds.x, + yOrigin: bounds.y, + duration: duration, + easing: easing) + + addViewportJob(job) + } + + /// This will move the center of the current viewport to the specified x-value and y-value animated. + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func centerViewToAnimated( + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval, + easingOption: ChartEasingOption) + { + centerViewToAnimated(xValue: xValue, yValue: yValue, axis: axis, duration: duration, easing: easingFunctionFromOption(easingOption)) + } + + /// This will move the center of the current viewport to the specified x-value and y-value animated. + /// + /// - parameter xValue: + /// - parameter yValue: + /// - parameter axis: which axis should be used as a reference for the y-axis + /// - parameter duration: the duration of the animation in seconds + /// - parameter easing: + @objc open func centerViewToAnimated( + xValue: Double, + yValue: Double, + axis: YAxis.AxisDependency, + duration: TimeInterval) + { + centerViewToAnimated(xValue: xValue, yValue: yValue, axis: axis, duration: duration, easingOption: .easeInOutSine) + } + + /// Sets custom offsets for the current `ChartViewPort` (the offsets on the sides of the actual chart window). Setting this will prevent the chart from automatically calculating it's offsets. Use `resetViewPortOffsets()` to undo this. + /// ONLY USE THIS WHEN YOU KNOW WHAT YOU ARE DOING, else use `setExtraOffsets(...)`. + @objc open func setViewPortOffsets(left: CGFloat, top: CGFloat, right: CGFloat, bottom: CGFloat) + { + _customViewPortEnabled = true + + if Thread.isMainThread + { + self._viewPortHandler.restrainViewPort(offsetLeft: left, offsetTop: top, offsetRight: right, offsetBottom: bottom) + prepareOffsetMatrix() + prepareValuePxMatrix() + } + else + { + DispatchQueue.main.async(execute: { + self.setViewPortOffsets(left: left, top: top, right: right, bottom: bottom) + }) + } + } + + /// Resets all custom offsets set via `setViewPortOffsets(...)` method. Allows the chart to again calculate all offsets automatically. + @objc open func resetViewPortOffsets() + { + _customViewPortEnabled = false + calculateOffsets() + } + + // MARK: - Accessors + + /// - returns: The range of the specified axis. + @objc open func getAxisRange(axis: YAxis.AxisDependency) -> Double + { + if axis == .left + { + return leftAxis.axisRange + } + else + { + return rightAxis.axisRange + } + } + + /// - returns: The position (in pixels) the provided Entry has inside the chart view + @objc open func getPosition(entry e: ChartDataEntry, axis: YAxis.AxisDependency) -> CGPoint + { + var vals = CGPoint(x: CGFloat(e.x), y: CGFloat(e.y)) + + getTransformer(forAxis: axis).pointValueToPixel(&vals) + + return vals + } + + /// is dragging enabled? (moving the chart with the finger) for the chart (this does not affect scaling). + @objc open var dragEnabled: Bool + { + get + { + return _dragXEnabled || _dragYEnabled + } + set + { + _dragYEnabled = newValue + _dragXEnabled = newValue + } + } + + /// is dragging enabled? (moving the chart with the finger) for the chart (this does not affect scaling). + @objc open var isDragEnabled: Bool + { + return dragEnabled + } + + /// is dragging on the X axis enabled? + open var dragXEnabled: Bool + { + get + { + return _dragXEnabled + } + set + { + _dragXEnabled = newValue + } + } + + /// is dragging on the Y axis enabled? + open var dragYEnabled: Bool + { + get + { + return _dragYEnabled + } + set + { + _dragYEnabled = newValue + } + } + + /// is scaling enabled? (zooming in and out by gesture) for the chart (this does not affect dragging). + @objc open func setScaleEnabled(_ enabled: Bool) + { + if _scaleXEnabled != enabled || _scaleYEnabled != enabled + { + _scaleXEnabled = enabled + _scaleYEnabled = enabled + #if !os(tvOS) + _pinchGestureRecognizer.isEnabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled + #endif + } + } + + @objc open var scaleXEnabled: Bool + { + get + { + return _scaleXEnabled + } + set + { + if _scaleXEnabled != newValue + { + _scaleXEnabled = newValue + #if !os(tvOS) + _pinchGestureRecognizer.isEnabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled + #endif + } + } + } + + @objc open var scaleYEnabled: Bool + { + get + { + return _scaleYEnabled + } + set + { + if _scaleYEnabled != newValue + { + _scaleYEnabled = newValue + #if !os(tvOS) + _pinchGestureRecognizer.isEnabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled + #endif + } + } + } + + @objc open var isScaleXEnabled: Bool { return scaleXEnabled } + @objc open var isScaleYEnabled: Bool { return scaleYEnabled } + + /// flag that indicates if double tap zoom is enabled or not + @objc open var doubleTapToZoomEnabled: Bool + { + get + { + return _doubleTapToZoomEnabled + } + set + { + if _doubleTapToZoomEnabled != newValue + { + _doubleTapToZoomEnabled = newValue + _doubleTapGestureRecognizer.isEnabled = _doubleTapToZoomEnabled + } + } + } + + /// **default**: true + /// - returns: `true` if zooming via double-tap is enabled `false` ifnot. + @objc open var isDoubleTapToZoomEnabled: Bool + { + return doubleTapToZoomEnabled + } + + /// flag that indicates if highlighting per dragging over a fully zoomed out chart is enabled + @objc open var highlightPerDragEnabled = true + + /// If set to true, highlighting per dragging over a fully zoomed out chart is enabled + /// You might want to disable this when using inside a `NSUIScrollView` + /// + /// **default**: true + @objc open var isHighlightPerDragEnabled: Bool + { + return highlightPerDragEnabled + } + + /// **default**: true + /// - returns: `true` if drawing the grid background is enabled, `false` ifnot. + @objc open var isDrawGridBackgroundEnabled: Bool + { + return drawGridBackgroundEnabled + } + + /// **default**: false + /// - returns: `true` if drawing the borders rectangle is enabled, `false` ifnot. + @objc open var isDrawBordersEnabled: Bool + { + return drawBordersEnabled + } + + /// - returns: The x and y values in the chart at the given touch point + /// (encapsulated in a `CGPoint`). This method transforms pixel coordinates to + /// coordinates / values in the chart. This is the opposite method to + /// `getPixelsForValues(...)`. + @objc open func valueForTouchPoint(point pt: CGPoint, axis: YAxis.AxisDependency) -> CGPoint + { + return getTransformer(forAxis: axis).valueForTouchPoint(pt) + } + + /// Transforms the given chart values into pixels. This is the opposite + /// method to `valueForTouchPoint(...)`. + @objc open func pixelForValues(x: Double, y: Double, axis: YAxis.AxisDependency) -> CGPoint + { + return getTransformer(forAxis: axis).pixelForValues(x: x, y: y) + } + + /// - returns: The Entry object displayed at the touched position of the chart + @objc open func getEntryByTouchPoint(point pt: CGPoint) -> ChartDataEntry! + { + if let h = getHighlightByTouchPoint(pt) + { + return _data!.entryForHighlight(h) + } + return nil + } + + /// - returns: The DataSet object displayed at the touched position of the chart + @objc open func getDataSetByTouchPoint(point pt: CGPoint) -> IBarLineScatterCandleBubbleChartDataSet? + { + let h = getHighlightByTouchPoint(pt) + if h !== nil + { + return _data?.getDataSetByIndex(h!.dataSetIndex) as? IBarLineScatterCandleBubbleChartDataSet + } + return nil + } + + /// - returns: The current x-scale factor + @objc open var scaleX: CGFloat + { + if _viewPortHandler === nil + { + return 1.0 + } + return _viewPortHandler.scaleX + } + + /// - returns: The current y-scale factor + @objc open var scaleY: CGFloat + { + if _viewPortHandler === nil + { + return 1.0 + } + return _viewPortHandler.scaleY + } + + /// if the chart is fully zoomed out, return true + @objc open var isFullyZoomedOut: Bool { return _viewPortHandler.isFullyZoomedOut } + + /// - returns: The y-axis object to the corresponding AxisDependency. In the + /// horizontal bar-chart, LEFT == top, RIGHT == BOTTOM + @objc open func getAxis(_ axis: YAxis.AxisDependency) -> YAxis + { + if axis == .left + { + return leftAxis + } + else + { + return rightAxis + } + } + + /// flag that indicates if pinch-zoom is enabled. if true, both x and y axis can be scaled simultaneously with 2 fingers, if false, x and y axis can be scaled separately + @objc open var pinchZoomEnabled: Bool + { + get + { + return _pinchZoomEnabled + } + set + { + if _pinchZoomEnabled != newValue + { + _pinchZoomEnabled = newValue + #if !os(tvOS) + _pinchGestureRecognizer.isEnabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled + #endif + } + } + } + + /// **default**: false + /// - returns: `true` if pinch-zoom is enabled, `false` ifnot + @objc open var isPinchZoomEnabled: Bool { return pinchZoomEnabled } + + /// Set an offset in dp that allows the user to drag the chart over it's + /// bounds on the x-axis. + @objc open func setDragOffsetX(_ offset: CGFloat) + { + _viewPortHandler.setDragOffsetX(offset) + } + + /// Set an offset in dp that allows the user to drag the chart over it's + /// bounds on the y-axis. + @objc open func setDragOffsetY(_ offset: CGFloat) + { + _viewPortHandler.setDragOffsetY(offset) + } + + /// - returns: `true` if both drag offsets (x and y) are zero or smaller. + @objc open var hasNoDragOffset: Bool { return _viewPortHandler.hasNoDragOffset } + + open override var chartYMax: Double + { + return max(leftAxis._axisMaximum, rightAxis._axisMaximum) + } + + open override var chartYMin: Double + { + return min(leftAxis._axisMinimum, rightAxis._axisMinimum) + } + + /// - returns: `true` if either the left or the right or both axes are inverted. + @objc open var isAnyAxisInverted: Bool + { + return leftAxis.isInverted || rightAxis.isInverted + } + + /// flag that indicates if auto scaling on the y axis is enabled. + /// if yes, the y axis automatically adjusts to the min and max y values of the current x axis range whenever the viewport changes + @objc open var autoScaleMinMaxEnabled: Bool + { + get { return _autoScaleMinMaxEnabled } + set { _autoScaleMinMaxEnabled = newValue } + } + + /// **default**: false + /// - returns: `true` if auto scaling on the y axis is enabled. + @objc open var isAutoScaleMinMaxEnabled : Bool { return autoScaleMinMaxEnabled } + + /// Sets a minimum width to the specified y axis. + @objc open func setYAxisMinWidth(_ axis: YAxis.AxisDependency, width: CGFloat) + { + if axis == .left + { + leftAxis.minWidth = width + } + else + { + rightAxis.minWidth = width + } + } + + /// **default**: 0.0 + /// - returns: The (custom) minimum width of the specified Y axis. + @objc open func getYAxisMinWidth(_ axis: YAxis.AxisDependency) -> CGFloat + { + if axis == .left + { + return leftAxis.minWidth + } + else + { + return rightAxis.minWidth + } + } + /// Sets a maximum width to the specified y axis. + /// Zero (0.0) means there's no maximum width + @objc open func setYAxisMaxWidth(_ axis: YAxis.AxisDependency, width: CGFloat) + { + if axis == .left + { + leftAxis.maxWidth = width + } + else + { + rightAxis.maxWidth = width + } + } + + /// Zero (0.0) means there's no maximum width + /// + /// **default**: 0.0 (no maximum specified) + /// - returns: The (custom) maximum width of the specified Y axis. + @objc open func getYAxisMaxWidth(_ axis: YAxis.AxisDependency) -> CGFloat + { + if axis == .left + { + return leftAxis.maxWidth + } + else + { + return rightAxis.maxWidth + } + } + + /// - returns the width of the specified y axis. + @objc open func getYAxisWidth(_ axis: YAxis.AxisDependency) -> CGFloat + { + if axis == .left + { + return leftAxis.requiredSize().width + } + else + { + return rightAxis.requiredSize().width + } + } + + // MARK: - BarLineScatterCandleBubbleChartDataProvider + + /// - returns: The Transformer class that contains all matrices and is + /// responsible for transforming values into pixels on the screen and + /// backwards. + open func getTransformer(forAxis axis: YAxis.AxisDependency) -> Transformer + { + if axis == .left + { + return _leftAxisTransformer + } + else + { + return _rightAxisTransformer + } + } + + /// the number of maximum visible drawn values on the chart only active when `drawValuesEnabled` is enabled + open override var maxVisibleCount: Int + { + get + { + return _maxVisibleCount + } + set + { + _maxVisibleCount = newValue + } + } + + open func isInverted(axis: YAxis.AxisDependency) -> Bool + { + return getAxis(axis).isInverted + } + + /// - returns: The lowest x-index (value on the x-axis) that is still visible on he chart. + open var lowestVisibleX: Double + { + var pt = CGPoint( + x: viewPortHandler.contentLeft, + y: viewPortHandler.contentBottom) + + getTransformer(forAxis: .left).pixelToValues(&pt) + + return max(xAxis._axisMinimum, Double(pt.x)) + } + + /// - returns: The highest x-index (value on the x-axis) that is still visible on the chart. + open var highestVisibleX: Double + { + var pt = CGPoint( + x: viewPortHandler.contentRight, + y: viewPortHandler.contentBottom) + + getTransformer(forAxis: .left).pixelToValues(&pt) + + return min(xAxis._axisMaximum, Double(pt.x)) + } +} diff --git a/Pods/Charts/Source/Charts/Charts/BubbleChartView.swift b/Pods/Charts/Source/Charts/Charts/BubbleChartView.swift new file mode 100644 index 0000000..1b13677 --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/BubbleChartView.swift @@ -0,0 +1,27 @@ +// +// BubbleChartView.swift +// Charts +// +// Bubble chart implementation: +// Copyright 2015 Pierre-Marc Airoldi +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// + +import Foundation +import CoreGraphics + +open class BubbleChartView: BarLineChartViewBase, BubbleChartDataProvider +{ + open override func initialize() + { + super.initialize() + + renderer = BubbleChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) + } + + // MARK: - BubbleChartDataProvider + + open var bubbleData: BubbleChartData? { return _data as? BubbleChartData } +} diff --git a/Pods/Charts/Source/Charts/Charts/CandleStickChartView.swift b/Pods/Charts/Source/Charts/Charts/CandleStickChartView.swift new file mode 100644 index 0000000..0366e8b --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/CandleStickChartView.swift @@ -0,0 +1,34 @@ +// +// CandleStickChartView.swift +// Charts +// +// 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 + +/// Financial chart type that draws candle-sticks. +open class CandleStickChartView: BarLineChartViewBase, CandleChartDataProvider +{ + internal override func initialize() + { + super.initialize() + + renderer = CandleStickChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) + + self.xAxis.spaceMin = 0.5 + self.xAxis.spaceMax = 0.5 + } + + // MARK: - CandleChartDataProvider + + open var candleData: CandleChartData? + { + return _data as? CandleChartData + } +} diff --git a/Pods/Charts/Source/Charts/Charts/ChartViewBase.swift b/Pods/Charts/Source/Charts/Charts/ChartViewBase.swift new file mode 100644 index 0000000..e82918f --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/ChartViewBase.swift @@ -0,0 +1,992 @@ +// +// ChartViewBase.swift +// Charts +// +// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda +// A port of MPAndroidChart for iOS +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// +// Based on https://github.com/PhilJay/MPAndroidChart/commit/c42b880 + +import Foundation +import CoreGraphics + +#if !os(OSX) + import UIKit +#endif + +@objc +public protocol ChartViewDelegate +{ + /// Called when a value has been selected inside the chart. + /// - parameter entry: The selected Entry. + /// - parameter highlight: The corresponding highlight object that contains information about the highlighted position such as dataSetIndex etc. + @objc optional func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) + + // Called when nothing has been selected or an "un-select" has been made. + @objc optional func chartValueNothingSelected(_ chartView: ChartViewBase) + + // Callbacks when the chart is scaled / zoomed via pinch zoom gesture. + @objc optional func chartScaled(_ chartView: ChartViewBase, scaleX: CGFloat, scaleY: CGFloat) + + // Callbacks when the chart is moved / translated via drag gesture. + @objc optional func chartTranslated(_ chartView: ChartViewBase, dX: CGFloat, dY: CGFloat) +} + +open class ChartViewBase: NSUIView, ChartDataProvider, AnimatorDelegate +{ + // MARK: - Properties + + /// - returns: The object representing all x-labels, this method can be used to + /// acquire the XAxis object and modify it (e.g. change the position of the + /// labels) + @objc open var xAxis: XAxis + { + return _xAxis + } + + /// The default IValueFormatter that has been determined by the chart considering the provided minimum and maximum values. + internal var _defaultValueFormatter: IValueFormatter? = DefaultValueFormatter(decimals: 0) + + /// object that holds all data that was originally set for the chart, before it was modified or any filtering algorithms had been applied + internal var _data: ChartData? + + /// Flag that indicates if highlighting per tap (touch) is enabled + private var _highlightPerTapEnabled = true + + /// If set to true, chart continues to scroll after touch up + @objc open var dragDecelerationEnabled = true + + /// Deceleration friction coefficient in [0 ; 1] interval, higher values indicate that speed will decrease slowly, for example if it set to 0, it will stop immediately. + /// 1 is an invalid value, and will be converted to 0.999 automatically. + private var _dragDecelerationFrictionCoef: CGFloat = 0.9 + + /// if true, units are drawn next to the values in the chart + internal var _drawUnitInChart = false + + /// The object representing the labels on the x-axis + internal var _xAxis: XAxis! + + /// The `Description` object of the chart. + /// This should have been called just "description", but + @objc open var chartDescription: Description? + + /// The legend object containing all data associated with the legend + internal var _legend: Legend! + + /// delegate to receive chart events + @objc open weak var delegate: ChartViewDelegate? + + /// text that is displayed when the chart is empty + @objc open var noDataText = "No chart data available." + + /// Font to be used for the no data text. + @objc open var noDataFont: NSUIFont! = NSUIFont(name: "HelveticaNeue", size: 12.0) + + /// color of the no data text + @objc open var noDataTextColor: NSUIColor = NSUIColor.black + + /// alignment of the no data text + open var noDataTextAlignment: NSTextAlignment = .left + + internal var _legendRenderer: LegendRenderer! + + /// object responsible for rendering the data + @objc open var renderer: DataRenderer? + + @objc open var highlighter: IHighlighter? + + /// object that manages the bounds and drawing constraints of the chart + internal var _viewPortHandler: ViewPortHandler! + + /// object responsible for animations + internal var _animator: Animator! + + /// flag that indicates if offsets calculation has already been done or not + private var _offsetsCalculated = false + + /// array of Highlight objects that reference the highlighted slices in the chart + internal var _indicesToHighlight = [Highlight]() + + /// `true` if drawing the marker is enabled when tapping on values + /// (use the `marker` property to specify a marker) + @objc open var drawMarkers = true + + /// - returns: `true` if drawing the marker is enabled when tapping on values + /// (use the `marker` property to specify a marker) + @objc open var isDrawMarkersEnabled: Bool { return drawMarkers } + + /// The marker that is displayed when a value is clicked on the chart + @objc open var marker: IMarker? + + private var _interceptTouchEvents = false + + /// An extra offset to be appended to the viewport's top + @objc open var extraTopOffset: CGFloat = 0.0 + + /// An extra offset to be appended to the viewport's right + @objc open var extraRightOffset: CGFloat = 0.0 + + /// An extra offset to be appended to the viewport's bottom + @objc open var extraBottomOffset: CGFloat = 0.0 + + /// An extra offset to be appended to the viewport's left + @objc open var extraLeftOffset: CGFloat = 0.0 + + @objc open func setExtraOffsets(left: CGFloat, top: CGFloat, right: CGFloat, bottom: CGFloat) + { + extraLeftOffset = left + extraTopOffset = top + extraRightOffset = right + extraBottomOffset = bottom + } + + // MARK: - Initializers + + public override init(frame: CGRect) + { + super.init(frame: frame) + initialize() + } + + public required init?(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + initialize() + } + + deinit + { + self.removeObserver(self, forKeyPath: "bounds") + self.removeObserver(self, forKeyPath: "frame") + } + + internal func initialize() + { + #if os(iOS) + self.backgroundColor = NSUIColor.clear + #endif + + _animator = Animator() + _animator.delegate = self + + _viewPortHandler = ViewPortHandler(width: bounds.size.width, height: bounds.size.height) + + chartDescription = Description() + + _legend = Legend() + _legendRenderer = LegendRenderer(viewPortHandler: _viewPortHandler, legend: _legend) + + _xAxis = XAxis() + + self.addObserver(self, forKeyPath: "bounds", options: .new, context: nil) + self.addObserver(self, forKeyPath: "frame", options: .new, context: nil) + } + + // MARK: - ChartViewBase + + /// The data for the chart + open var data: ChartData? + { + get + { + return _data + } + set + { + _data = newValue + _offsetsCalculated = false + + guard let _data = _data else + { + setNeedsDisplay() + return + } + + // calculate how many digits are needed + setupDefaultFormatter(min: _data.getYMin(), max: _data.getYMax()) + + for set in _data.dataSets + { + if set.needsFormatter || set.valueFormatter === _defaultValueFormatter + { + set.valueFormatter = _defaultValueFormatter + } + } + + // let the chart know there is new data + notifyDataSetChanged() + } + } + + /// Clears the chart from all data (sets it to null) and refreshes it (by calling setNeedsDisplay()). + @objc open func clear() + { + _data = nil + _offsetsCalculated = false + _indicesToHighlight.removeAll() + lastHighlighted = nil + + setNeedsDisplay() + } + + /// Removes all DataSets (and thereby Entries) from the chart. Does not set the data object to nil. Also refreshes the chart by calling setNeedsDisplay(). + @objc open func clearValues() + { + _data?.clearValues() + setNeedsDisplay() + } + + /// - returns: `true` if the chart is empty (meaning it's data object is either null or contains no entries). + @objc open func isEmpty() -> Bool + { + guard let data = _data else { return true } + + if data.entryCount <= 0 + { + return true + } + else + { + return false + } + } + + /// Lets the chart know its underlying data has changed and should perform all necessary recalculations. + /// It is crucial that this method is called everytime data is changed dynamically. Not calling this method can lead to crashes or unexpected behaviour. + @objc open func notifyDataSetChanged() + { + fatalError("notifyDataSetChanged() cannot be called on ChartViewBase") + } + + /// Calculates the offsets of the chart to the border depending on the position of an eventual legend or depending on the length of the y-axis and x-axis labels and their position + internal func calculateOffsets() + { + fatalError("calculateOffsets() cannot be called on ChartViewBase") + } + + /// calcualtes the y-min and y-max value and the y-delta and x-delta value + internal func calcMinMax() + { + fatalError("calcMinMax() cannot be called on ChartViewBase") + } + + /// calculates the required number of digits for the values that might be drawn in the chart (if enabled), and creates the default value formatter + internal func setupDefaultFormatter(min: Double, max: Double) + { + // check if a custom formatter is set or not + var reference = Double(0.0) + + if let data = _data , data.entryCount >= 2 + { + reference = fabs(max - min) + } + else + { + let absMin = fabs(min) + let absMax = fabs(max) + reference = absMin > absMax ? absMin : absMax + } + + + if _defaultValueFormatter is DefaultValueFormatter + { + // setup the formatter with a new number of digits + let digits = reference.decimalPlaces + + (_defaultValueFormatter as? DefaultValueFormatter)?.decimals + = digits + } + } + + open override func draw(_ rect: CGRect) + { + let optionalContext = NSUIGraphicsGetCurrentContext() + guard let context = optionalContext else { return } + + let frame = self.bounds + + if _data === nil && noDataText.count > 0 + { + context.saveGState() + defer { context.restoreGState() } + + let paragraphStyle = NSMutableParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle + paragraphStyle.minimumLineHeight = noDataFont.lineHeight + paragraphStyle.lineBreakMode = .byWordWrapping + paragraphStyle.alignment = noDataTextAlignment + + ChartUtils.drawMultilineText( + context: context, + text: noDataText, + point: CGPoint(x: frame.width / 2.0, y: frame.height / 2.0), + attributes: + [.font: noDataFont, + .foregroundColor: noDataTextColor, + .paragraphStyle: paragraphStyle], + constrainedToSize: self.bounds.size, + anchor: CGPoint(x: 0.5, y: 0.5), + angleRadians: 0.0) + + return + } + + if !_offsetsCalculated + { + calculateOffsets() + _offsetsCalculated = true + } + } + + /// Draws the description text in the bottom right corner of the chart (per default) + internal func drawDescription(context: CGContext) + { + // check if description should be drawn + guard + let description = chartDescription, + description.isEnabled, + let descriptionText = description.text, + descriptionText.count > 0 + else { return } + + let position = description.position ?? CGPoint(x: bounds.width - _viewPortHandler.offsetRight - description.xOffset, + y: bounds.height - _viewPortHandler.offsetBottom - description.yOffset - description.font.lineHeight) + + var attrs = [NSAttributedStringKey : Any]() + + attrs[NSAttributedStringKey.font] = description.font + attrs[NSAttributedStringKey.foregroundColor] = description.textColor + + ChartUtils.drawText( + context: context, + text: descriptionText, + point: position, + align: description.textAlign, + attributes: attrs) + } + + // MARK: - Highlighting + + /// - returns: The array of currently highlighted values. This might an empty if nothing is highlighted. + @objc open var highlighted: [Highlight] + { + return _indicesToHighlight + } + + /// Set this to false to prevent values from being highlighted by tap gesture. + /// Values can still be highlighted via drag or programmatically. + /// **default**: true + @objc open var highlightPerTapEnabled: Bool + { + get { return _highlightPerTapEnabled } + set { _highlightPerTapEnabled = newValue } + } + + /// - returns: `true` if values can be highlighted via tap gesture, `false` ifnot. + @objc open var isHighLightPerTapEnabled: Bool + { + return highlightPerTapEnabled + } + + /// Checks if the highlight array is null, has a length of zero or if the first object is null. + /// - returns: `true` if there are values to highlight, `false` ifthere are no values to highlight. + @objc open func valuesToHighlight() -> Bool + { + return _indicesToHighlight.count > 0 + } + + /// Highlights the values at the given indices in the given DataSets. Provide + /// null or an empty array to undo all highlighting. + /// This should be used to programmatically highlight values. + /// This method *will not* call the delegate. + @objc open func highlightValues(_ highs: [Highlight]?) + { + // set the indices to highlight + _indicesToHighlight = highs ?? [Highlight]() + + if _indicesToHighlight.isEmpty + { + self.lastHighlighted = nil + } + else + { + self.lastHighlighted = _indicesToHighlight[0] + } + + // redraw the chart + setNeedsDisplay() + } + + /// Highlights any y-value at the given x-value in the given DataSet. + /// Provide -1 as the dataSetIndex to undo all highlighting. + /// This method will call the delegate. + /// - parameter x: The x-value to highlight + /// - parameter dataSetIndex: The dataset index to search in + /// - parameter dataIndex: The data index to search in (only used in CombinedChartView currently) + @objc open func highlightValue(x: Double, dataSetIndex: Int, dataIndex: Int = -1) + { + highlightValue(x: x, dataSetIndex: dataSetIndex, dataIndex: dataIndex, callDelegate: true) + } + + /// Highlights the value at the given x-value and y-value in the given DataSet. + /// Provide -1 as the dataSetIndex to undo all highlighting. + /// This method will call the delegate. + /// - parameter x: The x-value to highlight + /// - parameter y: The y-value to highlight. Supply `NaN` for "any" + /// - parameter dataSetIndex: The dataset index to search in + /// - parameter dataIndex: The data index to search in (only used in CombinedChartView currently) + @objc open func highlightValue(x: Double, y: Double, dataSetIndex: Int, dataIndex: Int = -1) + { + highlightValue(x: x, y: y, dataSetIndex: dataSetIndex, dataIndex: dataIndex, callDelegate: true) + } + + /// Highlights any y-value at the given x-value in the given DataSet. + /// Provide -1 as the dataSetIndex to undo all highlighting. + /// - parameter x: The x-value to highlight + /// - parameter dataSetIndex: The dataset index to search in + /// - parameter dataIndex: The data index to search in (only used in CombinedChartView currently) + /// - parameter callDelegate: Should the delegate be called for this change + @objc open func highlightValue(x: Double, dataSetIndex: Int, dataIndex: Int = -1, callDelegate: Bool) + { + highlightValue(x: x, y: .nan, dataSetIndex: dataSetIndex, dataIndex: dataIndex, callDelegate: callDelegate) + } + + /// Highlights the value at the given x-value and y-value in the given DataSet. + /// Provide -1 as the dataSetIndex to undo all highlighting. + /// - parameter x: The x-value to highlight + /// - parameter y: The y-value to highlight. Supply `NaN` for "any" + /// - parameter dataSetIndex: The dataset index to search in + /// - parameter dataIndex: The data index to search in (only used in CombinedChartView currently) + /// - parameter callDelegate: Should the delegate be called for this change + @objc open func highlightValue(x: Double, y: Double, dataSetIndex: Int, dataIndex: Int = -1, callDelegate: Bool) + { + guard let data = _data else + { + Swift.print("Value not highlighted because data is nil") + return + } + + if dataSetIndex < 0 || dataSetIndex >= data.dataSetCount + { + highlightValue(nil, callDelegate: callDelegate) + } + else + { + highlightValue(Highlight(x: x, y: y, dataSetIndex: dataSetIndex, dataIndex: dataIndex), callDelegate: callDelegate) + } + } + + /// Highlights the values represented by the provided Highlight object + /// This method *will not* call the delegate. + /// - parameter highlight: contains information about which entry should be highlighted + @objc open func highlightValue(_ highlight: Highlight?) + { + highlightValue(highlight, callDelegate: false) + } + + /// Highlights the value selected by touch gesture. + @objc open func highlightValue(_ highlight: Highlight?, callDelegate: Bool) + { + var entry: ChartDataEntry? + var h = highlight + + if h == nil + { + self.lastHighlighted = nil + _indicesToHighlight.removeAll(keepingCapacity: false) + } + else + { + // set the indices to highlight + entry = _data?.entryForHighlight(h!) + if entry == nil + { + h = nil + _indicesToHighlight.removeAll(keepingCapacity: false) + } + else + { + _indicesToHighlight = [h!] + } + } + + if callDelegate, let delegate = delegate + { + if let h = h + { + // notify the listener + delegate.chartValueSelected?(self, entry: entry!, highlight: h) + } + else + { + delegate.chartValueNothingSelected?(self) + } + } + + // redraw the chart + setNeedsDisplay() + } + + /// - returns: The Highlight object (contains x-index and DataSet index) of the + /// selected value at the given touch point inside the Line-, Scatter-, or + /// CandleStick-Chart. + @objc open func getHighlightByTouchPoint(_ pt: CGPoint) -> Highlight? + { + if _data === nil + { + Swift.print("Can't select by touch. No data set.") + return nil + } + + return self.highlighter?.getHighlight(x: pt.x, y: pt.y) + } + + /// The last value that was highlighted via touch. + @objc open var lastHighlighted: Highlight? + + // MARK: - Markers + + /// draws all MarkerViews on the highlighted positions + internal func drawMarkers(context: CGContext) + { + // if there is no marker view or drawing marker is disabled + guard + let marker = marker + , isDrawMarkersEnabled && + valuesToHighlight() + else { return } + + for i in 0 ..< _indicesToHighlight.count + { + let highlight = _indicesToHighlight[i] + + guard let + set = data?.getDataSetByIndex(highlight.dataSetIndex), + let e = _data?.entryForHighlight(highlight) + else { continue } + + let entryIndex = set.entryIndex(entry: e) + if entryIndex > Int(Double(set.entryCount) * _animator.phaseX) + { + continue + } + + let pos = getMarkerPosition(highlight: highlight) + + // check bounds + if !_viewPortHandler.isInBounds(x: pos.x, y: pos.y) + { + continue + } + + // callbacks to update the content + marker.refreshContent(entry: e, highlight: highlight) + + // draw the marker + marker.draw(context: context, point: pos) + } + } + + /// - returns: The actual position in pixels of the MarkerView for the given Entry in the given DataSet. + @objc open func getMarkerPosition(highlight: Highlight) -> CGPoint + { + return CGPoint(x: highlight.drawX, y: highlight.drawY) + } + + // MARK: - Animation + + /// - returns: The animator responsible for animating chart values. + @objc open var chartAnimator: Animator! + { + return _animator + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingX: an easing function for the animation on the x axis + /// - parameter easingY: an easing function for the animation on the y axis + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easingX: ChartEasingFunctionBlock?, easingY: ChartEasingFunctionBlock?) + { + _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingX: easingX, easingY: easingY) + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingOptionX: the easing function for the animation on the x axis + /// - parameter easingOptionY: the easing function for the animation on the y axis + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easingOptionX: ChartEasingOption, easingOptionY: ChartEasingOption) + { + _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingOptionX: easingOptionX, easingOptionY: easingOptionY) + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easing: an easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easing: ChartEasingFunctionBlock?) + { + _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easing: easing) + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingOption: the easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval, easingOption: ChartEasingOption) + { + _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingOption: easingOption) + } + + /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter yAxisDuration: duration for animating the y axis + @objc open func animate(xAxisDuration: TimeInterval, yAxisDuration: TimeInterval) + { + _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration) + } + + /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter easing: an easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, easing: ChartEasingFunctionBlock?) + { + _animator.animate(xAxisDuration: xAxisDuration, easing: easing) + } + + /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + /// - parameter easingOption: the easing function for the animation + @objc open func animate(xAxisDuration: TimeInterval, easingOption: ChartEasingOption) + { + _animator.animate(xAxisDuration: xAxisDuration, easingOption: easingOption) + } + + /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter xAxisDuration: duration for animating the x axis + @objc open func animate(xAxisDuration: TimeInterval) + { + _animator.animate(xAxisDuration: xAxisDuration) + } + + /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easing: an easing function for the animation + @objc open func animate(yAxisDuration: TimeInterval, easing: ChartEasingFunctionBlock?) + { + _animator.animate(yAxisDuration: yAxisDuration, easing: easing) + } + + /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter yAxisDuration: duration for animating the y axis + /// - parameter easingOption: the easing function for the animation + @objc open func animate(yAxisDuration: TimeInterval, easingOption: ChartEasingOption) + { + _animator.animate(yAxisDuration: yAxisDuration, easingOption: easingOption) + } + + /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. + /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. + /// - parameter yAxisDuration: duration for animating the y axis + @objc open func animate(yAxisDuration: TimeInterval) + { + _animator.animate(yAxisDuration: yAxisDuration) + } + + // MARK: - Accessors + + /// - returns: The current y-max value across all DataSets + open var chartYMax: Double + { + return _data?.yMax ?? 0.0 + } + + /// - returns: The current y-min value across all DataSets + open var chartYMin: Double + { + return _data?.yMin ?? 0.0 + } + + open var chartXMax: Double + { + return _xAxis._axisMaximum + } + + open var chartXMin: Double + { + return _xAxis._axisMinimum + } + + open var xRange: Double + { + return _xAxis.axisRange + } + + /// * + /// - note: (Equivalent of getCenter() in MPAndroidChart, as center is already a standard in iOS that returns the center point relative to superview, and MPAndroidChart returns relative to self)* + /// - returns: The center point of the chart (the whole View) in pixels. + @objc open var midPoint: CGPoint + { + let bounds = self.bounds + return CGPoint(x: bounds.origin.x + bounds.size.width / 2.0, y: bounds.origin.y + bounds.size.height / 2.0) + } + + /// - returns: The center of the chart taking offsets under consideration. (returns the center of the content rectangle) + open var centerOffsets: CGPoint + { + return _viewPortHandler.contentCenter + } + + /// - returns: The Legend object of the chart. This method can be used to get an instance of the legend in order to customize the automatically generated Legend. + @objc open var legend: Legend + { + return _legend + } + + /// - returns: The renderer object responsible for rendering / drawing the Legend. + @objc open var legendRenderer: LegendRenderer! + { + return _legendRenderer + } + + /// - returns: The rectangle that defines the borders of the chart-value surface (into which the actual values are drawn). + @objc open var contentRect: CGRect + { + return _viewPortHandler.contentRect + } + + /// - returns: The ViewPortHandler of the chart that is responsible for the + /// content area of the chart and its offsets and dimensions. + @objc open var viewPortHandler: ViewPortHandler! + { + return _viewPortHandler + } + + /// - returns: The bitmap that represents the chart. + @objc open func getChartImage(transparent: Bool) -> NSUIImage? + { + NSUIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque || !transparent, NSUIMainScreen()?.nsuiScale ?? 1.0) + + guard let context = NSUIGraphicsGetCurrentContext() + else { return nil } + + let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: bounds.size) + + if isOpaque || !transparent + { + // Background color may be partially transparent, we must fill with white if we want to output an opaque image + context.setFillColor(NSUIColor.white.cgColor) + context.fill(rect) + + if let backgroundColor = self.backgroundColor + { + context.setFillColor(backgroundColor.cgColor) + context.fill(rect) + } + } + + nsuiLayer?.render(in: context) + + let image = NSUIGraphicsGetImageFromCurrentImageContext() + + NSUIGraphicsEndImageContext() + + return image + } + + public enum ImageFormat + { + case jpeg + case png + } + + /// Saves the current chart state with the given name to the given path on + /// the sdcard leaving the path empty "" will put the saved file directly on + /// the SD card chart is saved as a PNG image, example: + /// saveToPath("myfilename", "foldername1/foldername2") + /// + /// - parameter to: path to the image to save + /// - parameter format: the format to save + /// - parameter compressionQuality: compression quality for lossless formats (JPEG) + /// + /// - returns: `true` if the image was saved successfully + open func save(to path: String, format: ImageFormat, compressionQuality: Double) -> Bool + { + guard let image = getChartImage(transparent: format != .jpeg) else { return false } + + let imageData: Data? + switch (format) + { + case .png: imageData = NSUIImagePNGRepresentation(image) + case .jpeg: imageData = NSUIImageJPEGRepresentation(image, CGFloat(compressionQuality)) + } + + guard let data = imageData else { return false } + + do + { + try data.write(to: URL(fileURLWithPath: path), options: .atomic) + } + catch + { + return false + } + + return true + } + + internal var _viewportJobs = [ViewPortJob]() + + open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) + { + if keyPath == "bounds" || keyPath == "frame" + { + let bounds = self.bounds + + if (_viewPortHandler !== nil && + (bounds.size.width != _viewPortHandler.chartWidth || + bounds.size.height != _viewPortHandler.chartHeight)) + { + _viewPortHandler.setChartDimens(width: bounds.size.width, height: bounds.size.height) + + // This may cause the chart view to mutate properties affecting the view port -- lets do this + // before we try to run any pending jobs on the view port itself + notifyDataSetChanged() + + // Finish any pending viewport changes + while (!_viewportJobs.isEmpty) + { + let job = _viewportJobs.remove(at: 0) + job.doJob() + } + } + } + } + + @objc open func removeViewportJob(_ job: ViewPortJob) + { + if let index = _viewportJobs.index(where: { $0 === job }) + { + _viewportJobs.remove(at: index) + } + } + + @objc open func clearAllViewportJobs() + { + _viewportJobs.removeAll(keepingCapacity: false) + } + + @objc open func addViewportJob(_ job: ViewPortJob) + { + if _viewPortHandler.hasChartDimens + { + job.doJob() + } + else + { + _viewportJobs.append(job) + } + } + + /// **default**: true + /// - returns: `true` if chart continues to scroll after touch up, `false` ifnot. + @objc open var isDragDecelerationEnabled: Bool + { + return dragDecelerationEnabled + } + + /// Deceleration friction coefficient in [0 ; 1] interval, higher values indicate that speed will decrease slowly, for example if it set to 0, it will stop immediately. + /// 1 is an invalid value, and will be converted to 0.999 automatically. + /// + /// **default**: true + @objc open var dragDecelerationFrictionCoef: CGFloat + { + get + { + return _dragDecelerationFrictionCoef + } + set + { + var val = newValue + if val < 0.0 + { + val = 0.0 + } + if val >= 1.0 + { + val = 0.999 + } + + _dragDecelerationFrictionCoef = val + } + } + + /// The maximum distance in screen pixels away from an entry causing it to highlight. + /// **default**: 500.0 + open var maxHighlightDistance: CGFloat = 500.0 + + /// the number of maximum visible drawn values on the chart only active when `drawValuesEnabled` is enabled + open var maxVisibleCount: Int + { + return Int(INT_MAX) + } + + // MARK: - AnimatorDelegate + + open func animatorUpdated(_ chartAnimator: Animator) + { + setNeedsDisplay() + } + + open func animatorStopped(_ chartAnimator: Animator) + { + + } + + // MARK: - Touches + + open override func nsuiTouchesBegan(_ touches: Set, withEvent event: NSUIEvent?) + { + if !_interceptTouchEvents + { + super.nsuiTouchesBegan(touches, withEvent: event) + } + } + + open override func nsuiTouchesMoved(_ touches: Set, withEvent event: NSUIEvent?) + { + if !_interceptTouchEvents + { + super.nsuiTouchesMoved(touches, withEvent: event) + } + } + + open override func nsuiTouchesEnded(_ touches: Set, withEvent event: NSUIEvent?) + { + if !_interceptTouchEvents + { + super.nsuiTouchesEnded(touches, withEvent: event) + } + } + + open override func nsuiTouchesCancelled(_ touches: Set?, withEvent event: NSUIEvent?) + { + if !_interceptTouchEvents + { + super.nsuiTouchesCancelled(touches, withEvent: event) + } + } +} diff --git a/Pods/Charts/Source/Charts/Charts/CombinedChartView.swift b/Pods/Charts/Source/Charts/Charts/CombinedChartView.swift new file mode 100644 index 0000000..e1b13b4 --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/CombinedChartView.swift @@ -0,0 +1,246 @@ +// +// CombinedChartView.swift +// Charts +// +// 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 + +/// This chart class allows the combination of lines, bars, scatter and candle data all displayed in one chart area. +open class CombinedChartView: BarLineChartViewBase, CombinedChartDataProvider +{ + /// the fill-formatter used for determining the position of the fill-line + internal var _fillFormatter: IFillFormatter! + + /// enum that allows to specify the order in which the different data objects for the combined-chart are drawn + @objc(CombinedChartDrawOrder) + public enum DrawOrder: Int + { + case bar + case bubble + case line + case candle + case scatter + } + + open override func initialize() + { + super.initialize() + + self.highlighter = CombinedHighlighter(chart: self, barDataProvider: self) + + // Old default behaviour + self.highlightFullBarEnabled = true + + _fillFormatter = DefaultFillFormatter() + + renderer = CombinedChartRenderer(chart: self, animator: _animator, viewPortHandler: _viewPortHandler) + } + + open override var data: ChartData? + { + get + { + return super.data + } + set + { + super.data = newValue + + self.highlighter = CombinedHighlighter(chart: self, barDataProvider: self) + + (renderer as? CombinedChartRenderer)?.createRenderers() + renderer?.initBuffers() + } + } + + @objc open var fillFormatter: IFillFormatter + { + get + { + return _fillFormatter + } + set + { + _fillFormatter = newValue + if _fillFormatter == nil + { + _fillFormatter = DefaultFillFormatter() + } + } + } + + /// - returns: The Highlight object (contains x-index and DataSet index) of the selected value at the given touch point inside the CombinedChart. + open override func getHighlightByTouchPoint(_ pt: CGPoint) -> Highlight? + { + if _data === nil + { + Swift.print("Can't select by touch. No data set.") + return nil + } + + guard let h = self.highlighter?.getHighlight(x: pt.x, y: pt.y) + else { return nil } + + if !isHighlightFullBarEnabled { return h } + + // For isHighlightFullBarEnabled, remove stackIndex + return Highlight( + x: h.x, y: h.y, + xPx: h.xPx, yPx: h.yPx, + dataIndex: h.dataIndex, + dataSetIndex: h.dataSetIndex, + stackIndex: -1, + axis: h.axis) + } + + // MARK: - CombinedChartDataProvider + + open var combinedData: CombinedChartData? + { + get + { + return _data as? CombinedChartData + } + } + + // MARK: - LineChartDataProvider + + open var lineData: LineChartData? + { + get + { + return combinedData?.lineData + } + } + + // MARK: - BarChartDataProvider + + open var barData: BarChartData? + { + get + { + return combinedData?.barData + } + } + + // MARK: - ScatterChartDataProvider + + open var scatterData: ScatterChartData? + { + get + { + return combinedData?.scatterData + } + } + + // MARK: - CandleChartDataProvider + + open var candleData: CandleChartData? + { + get + { + return combinedData?.candleData + } + } + + // MARK: - BubbleChartDataProvider + + open var bubbleData: BubbleChartData? + { + get + { + return combinedData?.bubbleData + } + } + + // MARK: - Accessors + + /// if set to true, all values are drawn above their bars, instead of below their top + @objc open var drawValueAboveBarEnabled: Bool + { + get { return (renderer as! CombinedChartRenderer).drawValueAboveBarEnabled } + set { (renderer as! CombinedChartRenderer).drawValueAboveBarEnabled = newValue } + } + + /// if set to true, a grey area is drawn behind each bar that indicates the maximum value + @objc open var drawBarShadowEnabled: Bool + { + get { return (renderer as! CombinedChartRenderer).drawBarShadowEnabled } + set { (renderer as! CombinedChartRenderer).drawBarShadowEnabled = newValue } + } + + /// - returns: `true` if drawing values above bars is enabled, `false` ifnot + open var isDrawValueAboveBarEnabled: Bool { return (renderer as! CombinedChartRenderer).drawValueAboveBarEnabled } + + /// - returns: `true` if drawing shadows (maxvalue) for each bar is enabled, `false` ifnot + open var isDrawBarShadowEnabled: Bool { return (renderer as! CombinedChartRenderer).drawBarShadowEnabled } + + /// the order in which the provided data objects should be drawn. + /// The earlier you place them in the provided array, the further they will be in the background. + /// e.g. if you provide [DrawOrder.Bar, DrawOrder.Line], the bars will be drawn behind the lines. + @objc open var drawOrder: [Int] + { + get + { + return (renderer as! CombinedChartRenderer).drawOrder.map { $0.rawValue } + } + set + { + (renderer as! CombinedChartRenderer).drawOrder = newValue.map { DrawOrder(rawValue: $0)! } + } + } + + /// Set this to `true` to make the highlight operation full-bar oriented, `false` to make it highlight single values + @objc open var highlightFullBarEnabled: Bool = false + + /// - returns: `true` the highlight is be full-bar oriented, `false` ifsingle-value + open var isHighlightFullBarEnabled: Bool { return highlightFullBarEnabled } + + // MARK: - ChartViewBase + + /// draws all MarkerViews on the highlighted positions + override func drawMarkers(context: CGContext) + { + guard + let marker = marker, + isDrawMarkersEnabled && valuesToHighlight() + else { return } + + for i in 0 ..< _indicesToHighlight.count + { + let highlight = _indicesToHighlight[i] + + guard + let set = combinedData?.getDataSetByHighlight(highlight), + let e = _data?.entryForHighlight(highlight) + else { continue } + + let entryIndex = set.entryIndex(entry: e) + if entryIndex > Int(Double(set.entryCount) * _animator.phaseX) + { + continue + } + + let pos = getMarkerPosition(highlight: highlight) + + // check bounds + if !_viewPortHandler.isInBounds(x: pos.x, y: pos.y) + { + continue + } + + // callbacks to update the content + marker.refreshContent(entry: e, highlight: highlight) + + // draw the marker + marker.draw(context: context, point: pos) + } + } +} diff --git a/Pods/Charts/Source/Charts/Charts/HorizontalBarChartView.swift b/Pods/Charts/Source/Charts/Charts/HorizontalBarChartView.swift new file mode 100644 index 0000000..380680d --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/HorizontalBarChartView.swift @@ -0,0 +1,274 @@ +// +// HorizontalBarChartView.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +/// BarChart with horizontal bar orientation. In this implementation, x- and y-axis are switched. +open class HorizontalBarChartView: BarChartView +{ + internal override func initialize() + { + super.initialize() + + _leftAxisTransformer = TransformerHorizontalBarChart(viewPortHandler: _viewPortHandler) + _rightAxisTransformer = TransformerHorizontalBarChart(viewPortHandler: _viewPortHandler) + + renderer = HorizontalBarChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) + leftYAxisRenderer = YAxisRendererHorizontalBarChart(viewPortHandler: _viewPortHandler, yAxis: leftAxis, transformer: _leftAxisTransformer) + rightYAxisRenderer = YAxisRendererHorizontalBarChart(viewPortHandler: _viewPortHandler, yAxis: rightAxis, transformer: _rightAxisTransformer) + xAxisRenderer = XAxisRendererHorizontalBarChart(viewPortHandler: _viewPortHandler, xAxis: _xAxis, transformer: _leftAxisTransformer, chart: self) + + self.highlighter = HorizontalBarHighlighter(chart: self) + } + + internal override func calculateLegendOffsets(offsetLeft: inout CGFloat, offsetTop: inout CGFloat, offsetRight: inout CGFloat, offsetBottom: inout CGFloat) + { + guard + let legend = _legend, + legend.isEnabled, + legend.drawInside + else { return } + + // setup offsets for legend + switch legend.orientation + { + case .vertical: + switch legend.horizontalAlignment + { + case .left: + offsetLeft += min(legend.neededWidth, _viewPortHandler.chartWidth * legend.maxSizePercent) + legend.xOffset + + case .right: + offsetRight += min(legend.neededWidth, _viewPortHandler.chartWidth * legend.maxSizePercent) + legend.xOffset + + case .center: + + switch legend.verticalAlignment + { + case .top: + offsetTop += min(legend.neededHeight, _viewPortHandler.chartHeight * legend.maxSizePercent) + legend.yOffset + + case .bottom: + offsetBottom += min(legend.neededHeight, _viewPortHandler.chartHeight * legend.maxSizePercent) + legend.yOffset + + default: + break + } + } + + case .horizontal: + switch legend.verticalAlignment + { + case .top: + offsetTop += min(legend.neededHeight, _viewPortHandler.chartHeight * legend.maxSizePercent) + legend.yOffset + + // left axis equals the top x-axis in a horizontal chart + if leftAxis.isEnabled && leftAxis.isDrawLabelsEnabled + { + offsetTop += leftAxis.getRequiredHeightSpace() + } + + case .bottom: + offsetBottom += min(legend.neededHeight, _viewPortHandler.chartHeight * legend.maxSizePercent) + legend.yOffset + + // right axis equals the bottom x-axis in a horizontal chart + if rightAxis.isEnabled && rightAxis.isDrawLabelsEnabled + { + offsetBottom += rightAxis.getRequiredHeightSpace() + } + default: + break + } + } + } + + internal override func calculateOffsets() + { + var offsetLeft: CGFloat = 0.0, + offsetRight: CGFloat = 0.0, + offsetTop: CGFloat = 0.0, + offsetBottom: CGFloat = 0.0 + + calculateLegendOffsets(offsetLeft: &offsetLeft, + offsetTop: &offsetTop, + offsetRight: &offsetRight, + offsetBottom: &offsetBottom) + + // offsets for y-labels + if leftAxis.needsOffset + { + offsetTop += leftAxis.getRequiredHeightSpace() + } + + if rightAxis.needsOffset + { + offsetBottom += rightAxis.getRequiredHeightSpace() + } + + let xlabelwidth = _xAxis.labelRotatedWidth + + if _xAxis.isEnabled + { + // offsets for x-labels + if _xAxis.labelPosition == .bottom + { + offsetLeft += xlabelwidth + } + else if _xAxis.labelPosition == .top + { + offsetRight += xlabelwidth + } + else if _xAxis.labelPosition == .bothSided + { + offsetLeft += xlabelwidth + offsetRight += xlabelwidth + } + } + + offsetTop += self.extraTopOffset + offsetRight += self.extraRightOffset + offsetBottom += self.extraBottomOffset + offsetLeft += self.extraLeftOffset + + _viewPortHandler.restrainViewPort( + offsetLeft: max(self.minOffset, offsetLeft), + offsetTop: max(self.minOffset, offsetTop), + offsetRight: max(self.minOffset, offsetRight), + offsetBottom: max(self.minOffset, offsetBottom)) + + prepareOffsetMatrix() + prepareValuePxMatrix() + } + + internal override func prepareValuePxMatrix() + { + _rightAxisTransformer.prepareMatrixValuePx(chartXMin: rightAxis._axisMinimum, deltaX: CGFloat(rightAxis.axisRange), deltaY: CGFloat(_xAxis.axisRange), chartYMin: _xAxis._axisMinimum) + _leftAxisTransformer.prepareMatrixValuePx(chartXMin: leftAxis._axisMinimum, deltaX: CGFloat(leftAxis.axisRange), deltaY: CGFloat(_xAxis.axisRange), chartYMin: _xAxis._axisMinimum) + } + + open override func getMarkerPosition(highlight: Highlight) -> CGPoint + { + return CGPoint(x: highlight.drawY, y: highlight.drawX) + } + + open override func getBarBounds(entry e: BarChartDataEntry) -> CGRect + { + guard + let data = _data as? BarChartData, + let set = data.getDataSetForEntry(e) as? IBarChartDataSet + else { return CGRect.null } + + let y = e.y + let x = e.x + + let barWidth = data.barWidth + + let top = x - 0.5 + barWidth / 2.0 + let bottom = x + 0.5 - barWidth / 2.0 + let left = y >= 0.0 ? y : 0.0 + let right = y <= 0.0 ? y : 0.0 + + var bounds = CGRect(x: left, y: top, width: right - left, height: bottom - top) + + getTransformer(forAxis: set.axisDependency).rectValueToPixel(&bounds) + + return bounds + } + + open override func getPosition(entry e: ChartDataEntry, axis: YAxis.AxisDependency) -> CGPoint + { + var vals = CGPoint(x: CGFloat(e.y), y: CGFloat(e.x)) + + getTransformer(forAxis: axis).pointValueToPixel(&vals) + + return vals + } + + open override func getHighlightByTouchPoint(_ pt: CGPoint) -> Highlight? + { + if _data === nil + { + Swift.print("Can't select by touch. No data set.", terminator: "\n") + return nil + } + + return self.highlighter?.getHighlight(x: pt.y, y: pt.x) + } + + /// - returns: The lowest x-index (value on the x-axis) that is still visible on he chart. + open override var lowestVisibleX: Double + { + var pt = CGPoint( + x: viewPortHandler.contentLeft, + y: viewPortHandler.contentBottom) + + getTransformer(forAxis: .left).pixelToValues(&pt) + + return max(xAxis._axisMinimum, Double(pt.y)) + } + + /// - returns: The highest x-index (value on the x-axis) that is still visible on the chart. + open override var highestVisibleX: Double + { + var pt = CGPoint( + x: viewPortHandler.contentLeft, + y: viewPortHandler.contentTop) + + getTransformer(forAxis: .left).pixelToValues(&pt) + + return min(xAxis._axisMaximum, Double(pt.y)) + } + + // MARK: - Viewport + + open override func setVisibleXRangeMaximum(_ maxXRange: Double) + { + let xScale = xAxis.axisRange / maxXRange + viewPortHandler.setMinimumScaleY(CGFloat(xScale)) + } + + open override func setVisibleXRangeMinimum(_ minXRange: Double) + { + let xScale = xAxis.axisRange / minXRange + viewPortHandler.setMaximumScaleY(CGFloat(xScale)) + } + + open override func setVisibleXRange(minXRange: Double, maxXRange: Double) + { + let minScale = xAxis.axisRange / minXRange + let maxScale = xAxis.axisRange / maxXRange + viewPortHandler.setMinMaxScaleY(minScaleY: CGFloat(minScale), maxScaleY: CGFloat(maxScale)) + } + + open override func setVisibleYRangeMaximum(_ maxYRange: Double, axis: YAxis.AxisDependency) + { + let yScale = getAxisRange(axis: axis) / maxYRange + viewPortHandler.setMinimumScaleX(CGFloat(yScale)) + } + + open override func setVisibleYRangeMinimum(_ minYRange: Double, axis: YAxis.AxisDependency) + { + let yScale = getAxisRange(axis: axis) / minYRange + viewPortHandler.setMaximumScaleX(CGFloat(yScale)) + } + + open override func setVisibleYRange(minYRange: Double, maxYRange: Double, axis: YAxis.AxisDependency) + { + let minScale = getAxisRange(axis: axis) / minYRange + let maxScale = getAxisRange(axis: axis) / maxYRange + viewPortHandler.setMinMaxScaleX(minScaleX: CGFloat(minScale), maxScaleX: CGFloat(maxScale)) + } +} diff --git a/Pods/Charts/Source/Charts/Charts/LineChartView.swift b/Pods/Charts/Source/Charts/Charts/LineChartView.swift new file mode 100644 index 0000000..c5fbecf --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/LineChartView.swift @@ -0,0 +1,28 @@ +// +// LineChartView.swift +// Charts +// +// 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 + +/// Chart that draws lines, surfaces, circles, ... +open class LineChartView: BarLineChartViewBase, LineChartDataProvider +{ + internal override func initialize() + { + super.initialize() + + renderer = LineChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) + } + + // MARK: - LineChartDataProvider + + open var lineData: LineChartData? { return _data as? LineChartData } +} diff --git a/Pods/Charts/Source/Charts/Charts/PieChartView.swift b/Pods/Charts/Source/Charts/Charts/PieChartView.swift new file mode 100644 index 0000000..2c4ea8b --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/PieChartView.swift @@ -0,0 +1,642 @@ +// +// PieChartView.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +/// View that represents a pie chart. Draws cake like slices. +open class PieChartView: PieRadarChartViewBase +{ + /// rect object that represents the bounds of the piechart, needed for drawing the circle + private var _circleBox = CGRect() + + /// flag indicating if entry labels should be drawn or not + private var _drawEntryLabelsEnabled = true + + /// array that holds the width of each pie-slice in degrees + private var _drawAngles = [CGFloat]() + + /// array that holds the absolute angle in degrees of each slice + private var _absoluteAngles = [CGFloat]() + + /// if true, the hole inside the chart will be drawn + private var _drawHoleEnabled = true + + private var _holeColor: NSUIColor? = NSUIColor.white + + /// Sets the color the entry labels are drawn with. + private var _entryLabelColor: NSUIColor? = NSUIColor.white + + /// Sets the font the entry labels are drawn with. + private var _entryLabelFont: NSUIFont? = NSUIFont(name: "HelveticaNeue", size: 13.0) + + /// if true, the hole will see-through to the inner tips of the slices + private var _drawSlicesUnderHoleEnabled = false + + /// if true, the values inside the piechart are drawn as percent values + private var _usePercentValuesEnabled = false + + /// variable for the text that is drawn in the center of the pie-chart + private var _centerAttributedText: NSAttributedString? + + /// the offset on the x- and y-axis the center text has in dp. + private var _centerTextOffset: CGPoint = CGPoint() + + /// indicates the size of the hole in the center of the piechart + /// + /// **default**: `0.5` + private var _holeRadiusPercent = CGFloat(0.5) + + private var _transparentCircleColor: NSUIColor? = NSUIColor(white: 1.0, alpha: 105.0/255.0) + + /// the radius of the transparent circle next to the chart-hole in the center + private var _transparentCircleRadiusPercent = CGFloat(0.55) + + /// if enabled, centertext is drawn + private var _drawCenterTextEnabled = true + + private var _centerTextRadiusPercent: CGFloat = 1.0 + + /// maximum angle for this pie + private var _maxAngle: CGFloat = 360.0 + + public override init(frame: CGRect) + { + super.init(frame: frame) + } + + public required init?(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + } + + internal override func initialize() + { + super.initialize() + + renderer = PieChartRenderer(chart: self, animator: _animator, viewPortHandler: _viewPortHandler) + _xAxis = nil + + self.highlighter = PieHighlighter(chart: self) + } + + open override func draw(_ rect: CGRect) + { + super.draw(rect) + + if _data === nil + { + return + } + + let optionalContext = NSUIGraphicsGetCurrentContext() + guard let context = optionalContext, let renderer = renderer else + { + return + } + + renderer.drawData(context: context) + + if (valuesToHighlight()) + { + renderer.drawHighlighted(context: context, indices: _indicesToHighlight) + } + + renderer.drawExtras(context: context) + + renderer.drawValues(context: context) + + legendRenderer.renderLegend(context: context) + + drawDescription(context: context) + + drawMarkers(context: context) + } + + internal override func calculateOffsets() + { + super.calculateOffsets() + + // prevent nullpointer when no data set + if _data === nil + { + return + } + + let radius = diameter / 2.0 + + let c = self.centerOffsets + + let shift = (data as? PieChartData)?.dataSet?.selectionShift ?? 0.0 + + // create the circle box that will contain the pie-chart (the bounds of the pie-chart) + _circleBox.origin.x = (c.x - radius) + shift + _circleBox.origin.y = (c.y - radius) + shift + _circleBox.size.width = diameter - shift * 2.0 + _circleBox.size.height = diameter - shift * 2.0 + } + + internal override func calcMinMax() + { + calcAngles() + } + + open override func getMarkerPosition(highlight: Highlight) -> CGPoint + { + let center = self.centerCircleBox + var r = self.radius + + var off = r / 10.0 * 3.6 + + if self.isDrawHoleEnabled + { + off = (r - (r * self.holeRadiusPercent)) / 2.0 + } + + r -= off // offset to keep things inside the chart + + let rotationAngle = self.rotationAngle + + let entryIndex = Int(highlight.x) + + // offset needed to center the drawn text in the slice + let offset = drawAngles[entryIndex] / 2.0 + + // calculate the text position + let x: CGFloat = (r * cos(((rotationAngle + absoluteAngles[entryIndex] - offset) * CGFloat(_animator.phaseY)).DEG2RAD) + center.x) + let y: CGFloat = (r * sin(((rotationAngle + absoluteAngles[entryIndex] - offset) * CGFloat(_animator.phaseY)).DEG2RAD) + center.y) + + return CGPoint(x: x, y: y) + } + + /// calculates the needed angles for the chart slices + private func calcAngles() + { + _drawAngles = [CGFloat]() + _absoluteAngles = [CGFloat]() + + guard let data = _data else { return } + + let entryCount = data.entryCount + + _drawAngles.reserveCapacity(entryCount) + _absoluteAngles.reserveCapacity(entryCount) + + let yValueSum = (_data as! PieChartData).yValueSum + + var dataSets = data.dataSets + + var cnt = 0 + + for i in 0 ..< data.dataSetCount + { + let set = dataSets[i] + let entryCount = set.entryCount + + for j in 0 ..< entryCount + { + guard let e = set.entryForIndex(j) else { continue } + + _drawAngles.append(calcAngle(value: abs(e.y), yValueSum: yValueSum)) + + if cnt == 0 + { + _absoluteAngles.append(_drawAngles[cnt]) + } + else + { + _absoluteAngles.append(_absoluteAngles[cnt - 1] + _drawAngles[cnt]) + } + + cnt += 1 + } + } + } + + /// Checks if the given index is set to be highlighted. + @objc open func needsHighlight(index: Int) -> Bool + { + // no highlight + if !valuesToHighlight() + { + return false + } + + for i in 0 ..< _indicesToHighlight.count + { + // check if the xvalue for the given dataset needs highlight + if Int(_indicesToHighlight[i].x) == index + { + return true + } + } + + return false + } + + /// calculates the needed angle for a given value + private func calcAngle(_ value: Double) -> CGFloat + { + return calcAngle(value: value, yValueSum: (_data as! PieChartData).yValueSum) + } + + /// calculates the needed angle for a given value + private func calcAngle(value: Double, yValueSum: Double) -> CGFloat + { + return CGFloat(value) / CGFloat(yValueSum) * _maxAngle + } + + /// This will throw an exception, PieChart has no XAxis object. + open override var xAxis: XAxis + { + fatalError("PieChart has no XAxis") + } + + open override func indexForAngle(_ angle: CGFloat) -> Int + { + // take the current angle of the chart into consideration + let a = (angle - self.rotationAngle).normalizedAngle + for i in 0 ..< _absoluteAngles.count + { + if _absoluteAngles[i] > a + { + return i + } + } + + return -1 // return -1 if no index found + } + + /// - returns: The index of the DataSet this x-index belongs to. + @objc open func dataSetIndexForIndex(_ xValue: Double) -> Int + { + var dataSets = _data?.dataSets ?? [] + + for i in 0 ..< dataSets.count + { + if (dataSets[i].entryForXValue(xValue, closestToY: Double.nan) !== nil) + { + return i + } + } + + return -1 + } + + /// - returns: An integer array of all the different angles the chart slices + /// have the angles in the returned array determine how much space (of 360°) + /// each slice takes + @objc open var drawAngles: [CGFloat] + { + return _drawAngles + } + + /// - returns: The absolute angles of the different chart slices (where the + /// slices end) + @objc open var absoluteAngles: [CGFloat] + { + return _absoluteAngles + } + + /// The color for the hole that is drawn in the center of the PieChart (if enabled). + /// + /// - note: Use holeTransparent with holeColor = nil to make the hole transparent.* + @objc open var holeColor: NSUIColor? + { + get + { + return _holeColor + } + set + { + _holeColor = newValue + setNeedsDisplay() + } + } + + /// if true, the hole will see-through to the inner tips of the slices + /// + /// **default**: `false` + @objc open var drawSlicesUnderHoleEnabled: Bool + { + get + { + return _drawSlicesUnderHoleEnabled + } + set + { + _drawSlicesUnderHoleEnabled = newValue + setNeedsDisplay() + } + } + + /// - returns: `true` if the inner tips of the slices are visible behind the hole, `false` if not. + @objc open var isDrawSlicesUnderHoleEnabled: Bool + { + return drawSlicesUnderHoleEnabled + } + + /// `true` if the hole in the center of the pie-chart is set to be visible, `false` ifnot + @objc open var drawHoleEnabled: Bool + { + get + { + return _drawHoleEnabled + } + set + { + _drawHoleEnabled = newValue + setNeedsDisplay() + } + } + + /// - returns: `true` if the hole in the center of the pie-chart is set to be visible, `false` ifnot + @objc open var isDrawHoleEnabled: Bool + { + get + { + return drawHoleEnabled + } + } + + /// the text that is displayed in the center of the pie-chart + @objc open var centerText: String? + { + get + { + return self.centerAttributedText?.string + } + set + { + var attrString: NSMutableAttributedString? + if newValue == nil + { + attrString = nil + } + else + { + #if os(OSX) + let paragraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle + paragraphStyle.lineBreakMode = NSParagraphStyle.LineBreakMode.byTruncatingTail + #else + let paragraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle + paragraphStyle.lineBreakMode = NSLineBreakMode.byTruncatingTail + #endif + paragraphStyle.alignment = .center + + attrString = NSMutableAttributedString(string: newValue!) + attrString?.setAttributes([ + NSAttributedStringKey.foregroundColor: NSUIColor.black, + NSAttributedStringKey.font: NSUIFont.systemFont(ofSize: 12.0), + NSAttributedStringKey.paragraphStyle: paragraphStyle + ], range: NSMakeRange(0, attrString!.length)) + } + self.centerAttributedText = attrString + } + } + + /// the text that is displayed in the center of the pie-chart + @objc open var centerAttributedText: NSAttributedString? + { + get + { + return _centerAttributedText + } + set + { + _centerAttributedText = newValue + setNeedsDisplay() + } + } + + /// Sets the offset the center text should have from it's original position in dp. Default x = 0, y = 0 + @objc open var centerTextOffset: CGPoint + { + get + { + return _centerTextOffset + } + set + { + _centerTextOffset = newValue + setNeedsDisplay() + } + } + + /// `true` if drawing the center text is enabled + @objc open var drawCenterTextEnabled: Bool + { + get + { + return _drawCenterTextEnabled + } + set + { + _drawCenterTextEnabled = newValue + setNeedsDisplay() + } + } + + /// - returns: `true` if drawing the center text is enabled + @objc open var isDrawCenterTextEnabled: Bool + { + get + { + return drawCenterTextEnabled + } + } + + internal override var requiredLegendOffset: CGFloat + { + return _legend.font.pointSize * 2.0 + } + + internal override var requiredBaseOffset: CGFloat + { + return 0.0 + } + + open override var radius: CGFloat + { + return _circleBox.width / 2.0 + } + + /// - returns: The circlebox, the boundingbox of the pie-chart slices + @objc open var circleBox: CGRect + { + return _circleBox + } + + /// - returns: The center of the circlebox + @objc open var centerCircleBox: CGPoint + { + return CGPoint(x: _circleBox.midX, y: _circleBox.midY) + } + + /// the radius of the hole in the center of the piechart in percent of the maximum radius (max = the radius of the whole chart) + /// + /// **default**: 0.5 (50%) (half the pie) + @objc open var holeRadiusPercent: CGFloat + { + get + { + return _holeRadiusPercent + } + set + { + _holeRadiusPercent = newValue + setNeedsDisplay() + } + } + + /// The color that the transparent-circle should have. + /// + /// **default**: `nil` + @objc open var transparentCircleColor: NSUIColor? + { + get + { + return _transparentCircleColor + } + set + { + _transparentCircleColor = newValue + setNeedsDisplay() + } + } + + /// the radius of the transparent circle that is drawn next to the hole in the piechart in percent of the maximum radius (max = the radius of the whole chart) + /// + /// **default**: 0.55 (55%) -> means 5% larger than the center-hole by default + @objc open var transparentCircleRadiusPercent: CGFloat + { + get + { + return _transparentCircleRadiusPercent + } + set + { + _transparentCircleRadiusPercent = newValue + setNeedsDisplay() + } + } + + /// The color the entry labels are drawn with. + @objc open var entryLabelColor: NSUIColor? + { + get { return _entryLabelColor } + set + { + _entryLabelColor = newValue + setNeedsDisplay() + } + } + + /// The font the entry labels are drawn with. + @objc open var entryLabelFont: NSUIFont? + { + get { return _entryLabelFont } + set + { + _entryLabelFont = newValue + setNeedsDisplay() + } + } + + /// Set this to true to draw the enrty labels into the pie slices + @objc open var drawEntryLabelsEnabled: Bool + { + get + { + return _drawEntryLabelsEnabled + } + set + { + _drawEntryLabelsEnabled = newValue + setNeedsDisplay() + } + } + + /// - returns: `true` if drawing entry labels is enabled, `false` ifnot + @objc open var isDrawEntryLabelsEnabled: Bool + { + get + { + return drawEntryLabelsEnabled + } + } + + /// If this is enabled, values inside the PieChart are drawn in percent and not with their original value. Values provided for the ValueFormatter to format are then provided in percent. + @objc open var usePercentValuesEnabled: Bool + { + get + { + return _usePercentValuesEnabled + } + set + { + _usePercentValuesEnabled = newValue + setNeedsDisplay() + } + } + + /// - returns: `true` if drawing x-values is enabled, `false` ifnot + @objc open var isUsePercentValuesEnabled: Bool + { + get + { + return usePercentValuesEnabled + } + } + + /// the rectangular radius of the bounding box for the center text, as a percentage of the pie hole + @objc open var centerTextRadiusPercent: CGFloat + { + get + { + return _centerTextRadiusPercent + } + set + { + _centerTextRadiusPercent = newValue + setNeedsDisplay() + } + } + + /// The max angle that is used for calculating the pie-circle. + /// 360 means it's a full pie-chart, 180 results in a half-pie-chart. + /// **default**: 360.0 + @objc open var maxAngle: CGFloat + { + get + { + return _maxAngle + } + set + { + _maxAngle = newValue + + if _maxAngle > 360.0 + { + _maxAngle = 360.0 + } + + if _maxAngle < 90.0 + { + _maxAngle = 90.0 + } + } + } +} diff --git a/Pods/Charts/Source/Charts/Charts/PieRadarChartViewBase.swift b/Pods/Charts/Source/Charts/Charts/PieRadarChartViewBase.swift new file mode 100755 index 0000000..a073d47 --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/PieRadarChartViewBase.swift @@ -0,0 +1,866 @@ +// +// PieRadarChartViewBase.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +/// Base class of PieChartView and RadarChartView. +open class PieRadarChartViewBase: ChartViewBase +{ + /// holds the normalized version of the current rotation angle of the chart + private var _rotationAngle = CGFloat(270.0) + + /// holds the raw version of the current rotation angle of the chart + private var _rawRotationAngle = CGFloat(270.0) + + /// flag that indicates if rotation is enabled or not + @objc open var rotationEnabled = true + + /// Sets the minimum offset (padding) around the chart, defaults to 0.0 + @objc open var minOffset = CGFloat(0.0) + + /// iOS && OSX only: Enabled multi-touch rotation using two fingers. + private var _rotationWithTwoFingers = false + + private var _tapGestureRecognizer: NSUITapGestureRecognizer! + #if !os(tvOS) + private var _rotationGestureRecognizer: NSUIRotationGestureRecognizer! + #endif + + public override init(frame: CGRect) + { + super.init(frame: frame) + } + + public required init?(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + } + + deinit + { + stopDeceleration() + } + + internal override func initialize() + { + super.initialize() + + _tapGestureRecognizer = NSUITapGestureRecognizer(target: self, action: #selector(tapGestureRecognized(_:))) + + self.addGestureRecognizer(_tapGestureRecognizer) + + #if !os(tvOS) + _rotationGestureRecognizer = NSUIRotationGestureRecognizer(target: self, action: #selector(rotationGestureRecognized(_:))) + self.addGestureRecognizer(_rotationGestureRecognizer) + _rotationGestureRecognizer.isEnabled = rotationWithTwoFingers + #endif + } + + internal override func calcMinMax() + { + /*_xAxis.axisRange = Double((_data?.xVals.count ?? 0) - 1)*/ + } + + open override var maxVisibleCount: Int + { + get + { + return data?.entryCount ?? 0 + } + } + + open override func notifyDataSetChanged() + { + calcMinMax() + + if let data = _data , _legend !== nil + { + legendRenderer.computeLegend(data: data) + } + + calculateOffsets() + + setNeedsDisplay() + } + + internal override func calculateOffsets() + { + var legendLeft = CGFloat(0.0) + var legendRight = CGFloat(0.0) + var legendBottom = CGFloat(0.0) + var legendTop = CGFloat(0.0) + + if _legend != nil && _legend.enabled && !_legend.drawInside + { + let fullLegendWidth = min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) + + switch _legend.orientation + { + case .vertical: + + var xLegendOffset: CGFloat = 0.0 + + if _legend.horizontalAlignment == .left + || _legend.horizontalAlignment == .right + { + if _legend.verticalAlignment == .center + { + // this is the space between the legend and the chart + let spacing = CGFloat(13.0) + + xLegendOffset = fullLegendWidth + spacing + } + else + { + // this is the space between the legend and the chart + let spacing = CGFloat(8.0) + + let legendWidth = fullLegendWidth + spacing + let legendHeight = _legend.neededHeight + _legend.textHeightMax + + let c = self.midPoint + + let bottomX = _legend.horizontalAlignment == .right + ? self.bounds.width - legendWidth + 15.0 + : legendWidth - 15.0 + let bottomY = legendHeight + 15 + let distLegend = distanceToCenter(x: bottomX, y: bottomY) + + let reference = getPosition(center: c, dist: self.radius, + angle: angleForPoint(x: bottomX, y: bottomY)) + + let distReference = distanceToCenter(x: reference.x, y: reference.y) + let minOffset = CGFloat(5.0) + + if bottomY >= c.y + && self.bounds.height - legendWidth > self.bounds.width + { + xLegendOffset = legendWidth + } + else if distLegend < distReference + { + let diff = distReference - distLegend + xLegendOffset = minOffset + diff + } + } + } + + switch _legend.horizontalAlignment + { + case .left: + legendLeft = xLegendOffset + + case .right: + legendRight = xLegendOffset + + case .center: + + switch _legend.verticalAlignment + { + case .top: + legendTop = min(_legend.neededHeight, _viewPortHandler.chartHeight * _legend.maxSizePercent) + + case .bottom: + legendBottom = min(_legend.neededHeight, _viewPortHandler.chartHeight * _legend.maxSizePercent) + + default: + break + } + } + + case .horizontal: + + var yLegendOffset: CGFloat = 0.0 + + if _legend.verticalAlignment == .top + || _legend.verticalAlignment == .bottom + { + // It's possible that we do not need this offset anymore as it + // is available through the extraOffsets, but changing it can mean + // changing default visibility for existing apps. + let yOffset = self.requiredLegendOffset + + yLegendOffset = min( + _legend.neededHeight + yOffset, + _viewPortHandler.chartHeight * _legend.maxSizePercent) + } + + switch _legend.verticalAlignment + { + case .top: + + legendTop = yLegendOffset + + case .bottom: + + legendBottom = yLegendOffset + + default: + break + } + } + + legendLeft += self.requiredBaseOffset + legendRight += self.requiredBaseOffset + legendTop += self.requiredBaseOffset + legendBottom += self.requiredBaseOffset + } + + legendTop += self.extraTopOffset + legendRight += self.extraRightOffset + legendBottom += self.extraBottomOffset + legendLeft += self.extraLeftOffset + + var minOffset = self.minOffset + + if self is RadarChartView + { + let x = self.xAxis + + if x.isEnabled && x.drawLabelsEnabled + { + minOffset = max(minOffset, x.labelRotatedWidth) + } + } + + let offsetLeft = max(minOffset, legendLeft) + let offsetTop = max(minOffset, legendTop) + let offsetRight = max(minOffset, legendRight) + let offsetBottom = max(minOffset, max(self.requiredBaseOffset, legendBottom)) + + _viewPortHandler.restrainViewPort(offsetLeft: offsetLeft, offsetTop: offsetTop, offsetRight: offsetRight, offsetBottom: offsetBottom) + } + + /// - returns: The angle relative to the chart center for the given point on the chart in degrees. + /// The angle is always between 0 and 360°, 0° is NORTH, 90° is EAST, ... + @objc open func angleForPoint(x: CGFloat, y: CGFloat) -> CGFloat + { + let c = centerOffsets + + let tx = Double(x - c.x) + let ty = Double(y - c.y) + let length = sqrt(tx * tx + ty * ty) + let r = acos(ty / length) + + var angle = r.RAD2DEG + + if x > c.x + { + angle = 360.0 - angle + } + + // add 90° because chart starts EAST + angle = angle + 90.0 + + // neutralize overflow + if angle > 360.0 + { + angle = angle - 360.0 + } + + return CGFloat(angle) + } + + /// Calculates the position around a center point, depending on the distance + /// from the center, and the angle of the position around the center. + @objc open func getPosition(center: CGPoint, dist: CGFloat, angle: CGFloat) -> CGPoint + { + return CGPoint(x: center.x + dist * cos(angle.DEG2RAD), + y: center.y + dist * sin(angle.DEG2RAD)) + } + + /// - returns: The distance of a certain point on the chart to the center of the chart. + @objc open func distanceToCenter(x: CGFloat, y: CGFloat) -> CGFloat + { + let c = self.centerOffsets + + var dist = CGFloat(0.0) + + var xDist = CGFloat(0.0) + var yDist = CGFloat(0.0) + + if x > c.x + { + xDist = x - c.x + } + else + { + xDist = c.x - x + } + + if y > c.y + { + yDist = y - c.y + } + else + { + yDist = c.y - y + } + + // pythagoras + dist = sqrt(pow(xDist, 2.0) + pow(yDist, 2.0)) + + return dist + } + + /// - returns: The xIndex for the given angle around the center of the chart. + /// -1 if not found / outofbounds. + @objc open func indexForAngle(_ angle: CGFloat) -> Int + { + fatalError("indexForAngle() cannot be called on PieRadarChartViewBase") + } + + /// current rotation angle of the pie chart + /// + /// **default**: 270 --> top (NORTH) + /// - returns: Will always return a normalized value, which will be between 0.0 < 360.0 + @objc open var rotationAngle: CGFloat + { + get + { + return _rotationAngle + } + set + { + _rawRotationAngle = newValue + _rotationAngle = newValue.normalizedAngle + setNeedsDisplay() + } + } + + /// gets the raw version of the current rotation angle of the pie chart the returned value could be any value, negative or positive, outside of the 360 degrees. + /// this is used when working with rotation direction, mainly by gestures and animations. + @objc open var rawRotationAngle: CGFloat + { + return _rawRotationAngle + } + + /// - returns: The diameter of the pie- or radar-chart + @objc open var diameter: CGFloat + { + var content = _viewPortHandler.contentRect + content.origin.x += extraLeftOffset + content.origin.y += extraTopOffset + content.size.width -= extraLeftOffset + extraRightOffset + content.size.height -= extraTopOffset + extraBottomOffset + return min(content.width, content.height) + } + + /// - returns: The radius of the chart in pixels. + @objc open var radius: CGFloat + { + fatalError("radius cannot be called on PieRadarChartViewBase") + } + + /// - returns: The required offset for the chart legend. + internal var requiredLegendOffset: CGFloat + { + fatalError("requiredLegendOffset cannot be called on PieRadarChartViewBase") + } + + /// - returns: The base offset needed for the chart without calculating the + /// legend size. + internal var requiredBaseOffset: CGFloat + { + fatalError("requiredBaseOffset cannot be called on PieRadarChartViewBase") + } + + open override var chartYMax: Double + { + return 0.0 + } + + open override var chartYMin: Double + { + return 0.0 + } + + @objc open var isRotationEnabled: Bool { return rotationEnabled } + + /// flag that indicates if rotation is done with two fingers or one. + /// when the chart is inside a scrollview, you need a two-finger rotation because a one-finger rotation eats up all touch events. + /// + /// On iOS this will disable one-finger rotation. + /// On OSX this will keep two-finger multitouch rotation, and one-pointer mouse rotation. + /// + /// **default**: false + @objc open var rotationWithTwoFingers: Bool + { + get + { + return _rotationWithTwoFingers + } + set + { + _rotationWithTwoFingers = newValue + #if !os(tvOS) + _rotationGestureRecognizer.isEnabled = _rotationWithTwoFingers + #endif + } + } + + /// flag that indicates if rotation is done with two fingers or one. + /// when the chart is inside a scrollview, you need a two-finger rotation because a one-finger rotation eats up all touch events. + /// + /// On iOS this will disable one-finger rotation. + /// On OSX this will keep two-finger multitouch rotation, and one-pointer mouse rotation. + /// + /// **default**: false + @objc open var isRotationWithTwoFingers: Bool + { + return _rotationWithTwoFingers + } + + // MARK: - Animation + + private var _spinAnimator: Animator! + + /// Applys a spin animation to the Chart. + @objc open func spin(duration: TimeInterval, fromAngle: CGFloat, toAngle: CGFloat, easing: ChartEasingFunctionBlock?) + { + if _spinAnimator != nil + { + _spinAnimator.stop() + } + + _spinAnimator = Animator() + _spinAnimator.updateBlock = { + self.rotationAngle = (toAngle - fromAngle) * CGFloat(self._spinAnimator.phaseX) + fromAngle + } + _spinAnimator.stopBlock = { self._spinAnimator = nil } + + _spinAnimator.animate(xAxisDuration: duration, easing: easing) + } + + @objc open func spin(duration: TimeInterval, fromAngle: CGFloat, toAngle: CGFloat, easingOption: ChartEasingOption) + { + spin(duration: duration, fromAngle: fromAngle, toAngle: toAngle, easing: easingFunctionFromOption(easingOption)) + } + + @objc open func spin(duration: TimeInterval, fromAngle: CGFloat, toAngle: CGFloat) + { + spin(duration: duration, fromAngle: fromAngle, toAngle: toAngle, easing: nil) + } + + @objc open func stopSpinAnimation() + { + if _spinAnimator != nil + { + _spinAnimator.stop() + } + } + + // MARK: - Gestures + + private var _rotationGestureStartPoint: CGPoint! + private var _isRotating = false + private var _startAngle = CGFloat(0.0) + + private struct AngularVelocitySample + { + var time: TimeInterval + var angle: CGFloat + } + + private var _velocitySamples = [AngularVelocitySample]() + + private var _decelerationLastTime: TimeInterval = 0.0 + private var _decelerationDisplayLink: NSUIDisplayLink! + private var _decelerationAngularVelocity: CGFloat = 0.0 + + internal final func processRotationGestureBegan(location: CGPoint) + { + self.resetVelocity() + + if rotationEnabled + { + self.sampleVelocity(touchLocation: location) + } + + self.setGestureStartAngle(x: location.x, y: location.y) + + _rotationGestureStartPoint = location + } + + internal final func processRotationGestureMoved(location: CGPoint) + { + if isDragDecelerationEnabled + { + sampleVelocity(touchLocation: location) + } + + if !_isRotating && + distance( + eventX: location.x, + startX: _rotationGestureStartPoint.x, + eventY: location.y, + startY: _rotationGestureStartPoint.y) > CGFloat(8.0) + { + _isRotating = true + } + else + { + self.updateGestureRotation(x: location.x, y: location.y) + setNeedsDisplay() + } + } + + internal final func processRotationGestureEnded(location: CGPoint) + { + if isDragDecelerationEnabled + { + stopDeceleration() + + sampleVelocity(touchLocation: location) + + _decelerationAngularVelocity = calculateVelocity() + + if _decelerationAngularVelocity != 0.0 + { + _decelerationLastTime = CACurrentMediaTime() + _decelerationDisplayLink = NSUIDisplayLink(target: self, selector: #selector(PieRadarChartViewBase.decelerationLoop)) + _decelerationDisplayLink.add(to: RunLoop.main, forMode: RunLoopMode.commonModes) + } + } + } + + internal final func processRotationGestureCancelled() + { + if _isRotating + { + _isRotating = false + } + } + + #if !os(OSX) + open override func nsuiTouchesBegan(_ touches: Set, withEvent event: NSUIEvent?) + { + // if rotation by touch is enabled + if rotationEnabled + { + stopDeceleration() + + if !rotationWithTwoFingers, let touchLocation = touches.first?.location(in: self) + { + processRotationGestureBegan(location: touchLocation) + } + } + + if !_isRotating + { + super.nsuiTouchesBegan(touches, withEvent: event) + } + } + + open override func nsuiTouchesMoved(_ touches: Set, withEvent event: NSUIEvent?) + { + if rotationEnabled && !rotationWithTwoFingers, let touch = touches.first + { + let touchLocation = touch.location(in: self) + processRotationGestureMoved(location: touchLocation) + } + + if !_isRotating + { + super.nsuiTouchesMoved(touches, withEvent: event) + } + } + + open override func nsuiTouchesEnded(_ touches: Set, withEvent event: NSUIEvent?) + { + if !_isRotating + { + super.nsuiTouchesEnded(touches, withEvent: event) + } + + if rotationEnabled && !rotationWithTwoFingers, let touch = touches.first + { + let touchLocation = touch.location(in: self) + processRotationGestureEnded(location: touchLocation) + } + + if _isRotating + { + _isRotating = false + } + } + + open override func nsuiTouchesCancelled(_ touches: Set?, withEvent event: NSUIEvent?) + { + super.nsuiTouchesCancelled(touches, withEvent: event) + + processRotationGestureCancelled() + } + #endif + + #if os(OSX) + open override func mouseDown(with theEvent: NSEvent) + { + // if rotation by touch is enabled + if rotationEnabled + { + stopDeceleration() + + let location = self.convert(theEvent.locationInWindow, from: nil) + + processRotationGestureBegan(location: location) + } + + if !_isRotating + { + super.mouseDown(with: theEvent) + } + } + + open override func mouseDragged(with theEvent: NSEvent) + { + if rotationEnabled + { + let location = self.convert(theEvent.locationInWindow, from: nil) + + processRotationGestureMoved(location: location) + } + + if !_isRotating + { + super.mouseDragged(with: theEvent) + } + } + + open override func mouseUp(with theEvent: NSEvent) + { + if !_isRotating + { + super.mouseUp(with: theEvent) + } + + if rotationEnabled + { + let location = self.convert(theEvent.locationInWindow, from: nil) + + processRotationGestureEnded(location: location) + } + + if _isRotating + { + _isRotating = false + } + } + #endif + + private func resetVelocity() + { + _velocitySamples.removeAll(keepingCapacity: false) + } + + private func sampleVelocity(touchLocation: CGPoint) + { + let currentTime = CACurrentMediaTime() + + _velocitySamples.append(AngularVelocitySample(time: currentTime, angle: angleForPoint(x: touchLocation.x, y: touchLocation.y))) + + // Remove samples older than our sample time - 1 seconds + var i = 0, count = _velocitySamples.count + while (i < count - 2) + { + if currentTime - _velocitySamples[i].time > 1.0 + { + _velocitySamples.remove(at: 0) + i -= 1 + count -= 1 + } + else + { + break + } + + i += 1 + } + } + + private func calculateVelocity() -> CGFloat + { + if _velocitySamples.isEmpty + { + return 0.0 + } + + var firstSample = _velocitySamples[0] + var lastSample = _velocitySamples[_velocitySamples.count - 1] + + // Look for a sample that's closest to the latest sample, but not the same, so we can deduce the direction + var beforeLastSample = firstSample + for i in stride(from: (_velocitySamples.count - 1), through: 0, by: -1) + { + beforeLastSample = _velocitySamples[i] + if beforeLastSample.angle != lastSample.angle + { + break + } + } + + // Calculate the sampling time + var timeDelta = lastSample.time - firstSample.time + if timeDelta == 0.0 + { + timeDelta = 0.1 + } + + // Calculate clockwise/ccw by choosing two values that should be closest to each other, + // so if the angles are two far from each other we know they are inverted "for sure" + var clockwise = lastSample.angle >= beforeLastSample.angle + if (abs(lastSample.angle - beforeLastSample.angle) > 270.0) + { + clockwise = !clockwise + } + + // Now if the "gesture" is over a too big of an angle - then we know the angles are inverted, and we need to move them closer to each other from both sides of the 360.0 wrapping point + if lastSample.angle - firstSample.angle > 180.0 + { + firstSample.angle += 360.0 + } + else if firstSample.angle - lastSample.angle > 180.0 + { + lastSample.angle += 360.0 + } + + // The velocity + var velocity = abs((lastSample.angle - firstSample.angle) / CGFloat(timeDelta)) + + // Direction? + if !clockwise + { + velocity = -velocity + } + + return velocity + } + + /// sets the starting angle of the rotation, this is only used by the touch listener, x and y is the touch position + private func setGestureStartAngle(x: CGFloat, y: CGFloat) + { + _startAngle = angleForPoint(x: x, y: y) + + // take the current angle into consideration when starting a new drag + _startAngle -= _rotationAngle + } + + /// updates the view rotation depending on the given touch position, also takes the starting angle into consideration + private func updateGestureRotation(x: CGFloat, y: CGFloat) + { + self.rotationAngle = angleForPoint(x: x, y: y) - _startAngle + } + + @objc open func stopDeceleration() + { + if _decelerationDisplayLink !== nil + { + _decelerationDisplayLink.remove(from: RunLoop.main, forMode: RunLoopMode.commonModes) + _decelerationDisplayLink = nil + } + } + + @objc private func decelerationLoop() + { + let currentTime = CACurrentMediaTime() + + _decelerationAngularVelocity *= self.dragDecelerationFrictionCoef + + let timeInterval = CGFloat(currentTime - _decelerationLastTime) + + self.rotationAngle += _decelerationAngularVelocity * timeInterval + + _decelerationLastTime = currentTime + + if(abs(_decelerationAngularVelocity) < 0.001) + { + stopDeceleration() + } + } + + /// - returns: The distance between two points + private func distance(eventX: CGFloat, startX: CGFloat, eventY: CGFloat, startY: CGFloat) -> CGFloat + { + let dx = eventX - startX + let dy = eventY - startY + return sqrt(dx * dx + dy * dy) + } + + /// - returns: The distance between two points + private func distance(from: CGPoint, to: CGPoint) -> CGFloat + { + let dx = from.x - to.x + let dy = from.y - to.y + return sqrt(dx * dx + dy * dy) + } + + /// reference to the last highlighted object + private var _lastHighlight: Highlight! + + @objc private func tapGestureRecognized(_ recognizer: NSUITapGestureRecognizer) + { + if recognizer.state == NSUIGestureRecognizerState.ended + { + if !self.isHighLightPerTapEnabled { return } + + let location = recognizer.location(in: self) + + let high = self.getHighlightByTouchPoint(location) + self.highlightValue(high, callDelegate: true) + } + } + + #if !os(tvOS) + @objc private func rotationGestureRecognized(_ recognizer: NSUIRotationGestureRecognizer) + { + if recognizer.state == NSUIGestureRecognizerState.began + { + stopDeceleration() + + _startAngle = self.rawRotationAngle + } + + if recognizer.state == NSUIGestureRecognizerState.began || recognizer.state == NSUIGestureRecognizerState.changed + { + let angle = recognizer.nsuiRotation.RAD2DEG + + self.rotationAngle = _startAngle + angle + setNeedsDisplay() + } + else if recognizer.state == NSUIGestureRecognizerState.ended + { + let angle = recognizer.nsuiRotation.RAD2DEG + + self.rotationAngle = _startAngle + angle + setNeedsDisplay() + + if isDragDecelerationEnabled + { + stopDeceleration() + + _decelerationAngularVelocity = recognizer.velocity.RAD2DEG + + if _decelerationAngularVelocity != 0.0 + { + _decelerationLastTime = CACurrentMediaTime() + _decelerationDisplayLink = NSUIDisplayLink(target: self, selector: #selector(PieRadarChartViewBase.decelerationLoop)) + _decelerationDisplayLink.add(to: RunLoop.main, forMode: RunLoopMode.commonModes) + } + } + } + } + #endif +} diff --git a/Pods/Charts/Source/Charts/Charts/RadarChartView.swift b/Pods/Charts/Source/Charts/Charts/RadarChartView.swift new file mode 100644 index 0000000..745c933 --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/RadarChartView.swift @@ -0,0 +1,232 @@ +// +// RadarChartView.swift +// Charts +// +// 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 + + +/// Implementation of the RadarChart, a "spidernet"-like chart. It works best +/// when displaying 5-10 entries per DataSet. +open class RadarChartView: PieRadarChartViewBase +{ + /// width of the web lines that come from the center. + @objc open var webLineWidth = CGFloat(1.5) + + /// width of the web lines that are in between the lines coming from the center + @objc open var innerWebLineWidth = CGFloat(0.75) + + /// color for the web lines that come from the center + @objc open var webColor = NSUIColor(red: 122/255.0, green: 122/255.0, blue: 122.0/255.0, alpha: 1.0) + + /// color for the web lines in between the lines that come from the center. + @objc open var innerWebColor = NSUIColor(red: 122/255.0, green: 122/255.0, blue: 122.0/255.0, alpha: 1.0) + + /// transparency the grid is drawn with (0.0 - 1.0) + @objc open var webAlpha: CGFloat = 150.0 / 255.0 + + /// flag indicating if the web lines should be drawn or not + @objc open var drawWeb = true + + /// modulus that determines how many labels and web-lines are skipped before the next is drawn + private var _skipWebLineCount = 0 + + /// the object reprsenting the y-axis labels + private var _yAxis: YAxis! + + internal var _yAxisRenderer: YAxisRendererRadarChart! + internal var _xAxisRenderer: XAxisRendererRadarChart! + + public override init(frame: CGRect) + { + super.init(frame: frame) + } + + public required init?(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + } + + internal override func initialize() + { + super.initialize() + + _yAxis = YAxis(position: .left) + + renderer = RadarChartRenderer(chart: self, animator: _animator, viewPortHandler: _viewPortHandler) + + _yAxisRenderer = YAxisRendererRadarChart(viewPortHandler: _viewPortHandler, yAxis: _yAxis, chart: self) + _xAxisRenderer = XAxisRendererRadarChart(viewPortHandler: _viewPortHandler, xAxis: _xAxis, chart: self) + + self.highlighter = RadarHighlighter(chart: self) + } + + internal override func calcMinMax() + { + super.calcMinMax() + + guard let data = _data else { return } + + _yAxis.calculate(min: data.getYMin(axis: .left), max: data.getYMax(axis: .left)) + _xAxis.calculate(min: 0.0, max: Double(data.maxEntryCountSet?.entryCount ?? 0)) + } + + open override func notifyDataSetChanged() + { + calcMinMax() + + _yAxisRenderer?.computeAxis(min: _yAxis._axisMinimum, max: _yAxis._axisMaximum, inverted: _yAxis.isInverted) + _xAxisRenderer?.computeAxis(min: _xAxis._axisMinimum, max: _xAxis._axisMaximum, inverted: false) + + if let data = _data, + let legend = _legend, + !legend.isLegendCustom + { + legendRenderer?.computeLegend(data: data) + } + + calculateOffsets() + + setNeedsDisplay() + } + + open override func draw(_ rect: CGRect) + { + super.draw(rect) + + guard data != nil, let renderer = renderer else { return } + + let optionalContext = NSUIGraphicsGetCurrentContext() + guard let context = optionalContext else { return } + + if _xAxis.isEnabled + { + _xAxisRenderer.computeAxis(min: _xAxis._axisMinimum, max: _xAxis._axisMaximum, inverted: false) + } + + _xAxisRenderer?.renderAxisLabels(context: context) + + if drawWeb + { + renderer.drawExtras(context: context) + } + + if _yAxis.isEnabled && _yAxis.isDrawLimitLinesBehindDataEnabled + { + _yAxisRenderer.renderLimitLines(context: context) + } + + renderer.drawData(context: context) + + if valuesToHighlight() + { + renderer.drawHighlighted(context: context, indices: _indicesToHighlight) + } + + if _yAxis.isEnabled && !_yAxis.isDrawLimitLinesBehindDataEnabled + { + _yAxisRenderer.renderLimitLines(context: context) + } + + _yAxisRenderer.renderAxisLabels(context: context) + + renderer.drawValues(context: context) + + legendRenderer.renderLegend(context: context) + + drawDescription(context: context) + + drawMarkers(context: context) + } + + /// - returns: The factor that is needed to transform values into pixels. + @objc open var factor: CGFloat + { + let content = _viewPortHandler.contentRect + return min(content.width / 2.0, content.height / 2.0) + / CGFloat(_yAxis.axisRange) + } + + /// - returns: The angle that each slice in the radar chart occupies. + @objc open var sliceAngle: CGFloat + { + return 360.0 / CGFloat(_data?.maxEntryCountSet?.entryCount ?? 0) + } + + open override func indexForAngle(_ angle: CGFloat) -> Int + { + // take the current angle of the chart into consideration + let a = (angle - self.rotationAngle).normalizedAngle + + let sliceAngle = self.sliceAngle + + let max = _data?.maxEntryCountSet?.entryCount ?? 0 + + var index = 0 + + for i in 0.. a + { + index = i + break + } + } + + return index + } + + /// - returns: The object that represents all y-labels of the RadarChart. + @objc open var yAxis: YAxis + { + return _yAxis + } + + /// Sets the number of web-lines that should be skipped on chart web before the next one is drawn. This targets the lines that come from the center of the RadarChart. + /// if count = 1 -> 1 line is skipped in between + @objc open var skipWebLineCount: Int + { + get + { + return _skipWebLineCount + } + set + { + _skipWebLineCount = max(0, newValue) + } + } + + internal override var requiredLegendOffset: CGFloat + { + return _legend.font.pointSize * 4.0 + } + + internal override var requiredBaseOffset: CGFloat + { + return _xAxis.isEnabled && _xAxis.isDrawLabelsEnabled ? _xAxis.labelRotatedWidth : 10.0 + } + + open override var radius: CGFloat + { + let content = _viewPortHandler.contentRect + return min(content.width / 2.0, content.height / 2.0) + } + + /// - returns: The maximum value this chart can display on it's y-axis. + open override var chartYMax: Double { return _yAxis._axisMaximum } + + /// - returns: The minimum value this chart can display on it's y-axis. + open override var chartYMin: Double { return _yAxis._axisMinimum } + + /// - returns: The range of y-values this chart can display. + @objc open var yRange: Double { return _yAxis.axisRange } +} diff --git a/Pods/Charts/Source/Charts/Charts/ScatterChartView.swift b/Pods/Charts/Source/Charts/Charts/ScatterChartView.swift new file mode 100644 index 0000000..22c710a --- /dev/null +++ b/Pods/Charts/Source/Charts/Charts/ScatterChartView.swift @@ -0,0 +1,31 @@ +// +// ScatterChartView.swift +// Charts +// +// 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 + +/// The ScatterChart. Draws dots, triangles, squares and custom shapes into the chartview. +open class ScatterChartView: BarLineChartViewBase, ScatterChartDataProvider +{ + open override func initialize() + { + super.initialize() + + renderer = ScatterChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) + + xAxis.spaceMin = 0.5 + xAxis.spaceMax = 0.5 + } + + // MARK: - ScatterChartDataProvider + + open var scatterData: ScatterChartData? { return _data as? ScatterChartData } +} diff --git a/Pods/Charts/Source/Charts/Components/AxisBase.swift b/Pods/Charts/Source/Charts/Components/AxisBase.swift new file mode 100644 index 0000000..d9a9e8f --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/AxisBase.swift @@ -0,0 +1,371 @@ +// +// AxisBase.swift +// Charts +// +// 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 + +/// Base class for all axes +@objc(ChartAxisBase) +open class AxisBase: ComponentBase +{ + public override init() + { + super.init() + } + + /// Custom formatter that is used instead of the auto-formatter if set + private var _axisValueFormatter: IAxisValueFormatter? + + @objc open var labelFont = NSUIFont.systemFont(ofSize: 10.0) + @objc open var labelTextColor = NSUIColor.black + + @objc open var axisLineColor = NSUIColor.gray + @objc open var axisLineWidth = CGFloat(0.5) + @objc open var axisLineDashPhase = CGFloat(0.0) + @objc open var axisLineDashLengths: [CGFloat]! + + @objc open var gridColor = NSUIColor.gray.withAlphaComponent(0.9) + @objc open var gridLineWidth = CGFloat(0.5) + @objc open var gridLineDashPhase = CGFloat(0.0) + @objc open var gridLineDashLengths: [CGFloat]! + @objc open var gridLineCap = CGLineCap.butt + + @objc open var drawGridLinesEnabled = true + @objc open var drawAxisLineEnabled = true + + /// flag that indicates of the labels of this axis should be drawn or not + @objc open var drawLabelsEnabled = true + + private var _centerAxisLabelsEnabled = false + + /// Centers the axis labels instead of drawing them at their original position. + /// This is useful especially for grouped BarChart. + @objc open var centerAxisLabelsEnabled: Bool + { + get { return _centerAxisLabelsEnabled && entryCount > 0 } + set { _centerAxisLabelsEnabled = newValue } + } + + @objc open var isCenterAxisLabelsEnabled: Bool + { + get { return centerAxisLabelsEnabled } + } + + /// array of limitlines that can be set for the axis + private var _limitLines = [ChartLimitLine]() + + /// Are the LimitLines drawn behind the data or in front of the data? + /// + /// **default**: false + @objc open var drawLimitLinesBehindDataEnabled = false + + /// the flag can be used to turn off the antialias for grid lines + @objc open var gridAntialiasEnabled = true + + /// the actual array of entries + @objc open var entries = [Double]() + + /// axis label entries only used for centered labels + @objc open var centeredEntries = [Double]() + + /// the number of entries the legend contains + @objc open var entryCount: Int { return entries.count } + + /// the number of label entries the axis should have + /// + /// **default**: 6 + private var _labelCount = Int(6) + + /// the number of decimal digits to use (for the default formatter + @objc open var decimals: Int = 0 + + /// When true, axis labels are controlled by the `granularity` property. + /// When false, axis values could possibly be repeated. + /// This could happen if two adjacent axis values are rounded to same value. + /// If using granularity this could be avoided by having fewer axis values visible. + @objc open var granularityEnabled = false + + private var _granularity = Double(1.0) + + /// The minimum interval between axis values. + /// This can be used to avoid label duplicating when zooming in. + /// + /// **default**: 1.0 + @objc open var granularity: Double + { + get + { + return _granularity + } + set + { + _granularity = newValue + + // set this to `true` if it was disabled, as it makes no sense to set this property with granularity disabled + granularityEnabled = true + } + } + + /// The minimum interval between axis values. + @objc open var isGranularityEnabled: Bool + { + get + { + return granularityEnabled + } + } + + /// if true, the set number of y-labels will be forced + @objc open var forceLabelsEnabled = false + + @objc open func getLongestLabel() -> String + { + var longest = "" + + for i in 0 ..< entries.count + { + let text = getFormattedLabel(i) + + if longest.count < text.count + { + longest = text + } + } + + return longest + } + + /// - returns: The formatted label at the specified index. This will either use the auto-formatter or the custom formatter (if one is set). + @objc open func getFormattedLabel(_ index: Int) -> String + { + if index < 0 || index >= entries.count + { + return "" + } + + return valueFormatter?.stringForValue(entries[index], axis: self) ?? "" + } + + /// Sets the formatter to be used for formatting the axis labels. + /// If no formatter is set, the chart will automatically determine a reasonable formatting (concerning decimals) for all the values that are drawn inside the chart. + /// Use `nil` to use the formatter calculated by the chart. + @objc open var valueFormatter: IAxisValueFormatter? + { + get + { + if _axisValueFormatter == nil || + (_axisValueFormatter is DefaultAxisValueFormatter && + (_axisValueFormatter as! DefaultAxisValueFormatter).hasAutoDecimals && + (_axisValueFormatter as! DefaultAxisValueFormatter).decimals != decimals) + { + _axisValueFormatter = DefaultAxisValueFormatter(decimals: decimals) + } + + return _axisValueFormatter + } + set + { + _axisValueFormatter = newValue ?? DefaultAxisValueFormatter(decimals: decimals) + } + } + + @objc open var isDrawGridLinesEnabled: Bool { return drawGridLinesEnabled } + + @objc open var isDrawAxisLineEnabled: Bool { return drawAxisLineEnabled } + + @objc open var isDrawLabelsEnabled: Bool { return drawLabelsEnabled } + + /// Are the LimitLines drawn behind the data or in front of the data? + /// + /// **default**: false + @objc open var isDrawLimitLinesBehindDataEnabled: Bool { return drawLimitLinesBehindDataEnabled } + + /// Extra spacing for `axisMinimum` to be added to automatically calculated `axisMinimum` + @objc open var spaceMin: Double = 0.0 + + /// Extra spacing for `axisMaximum` to be added to automatically calculated `axisMaximum` + @objc open var spaceMax: Double = 0.0 + + /// Flag indicating that the axis-min value has been customized + internal var _customAxisMin: Bool = false + + /// Flag indicating that the axis-max value has been customized + internal var _customAxisMax: Bool = false + + /// Do not touch this directly, instead, use axisMinimum. + /// This is automatically calculated to represent the real min value, + /// and is used when calculating the effective minimum. + internal var _axisMinimum = Double(0) + + /// Do not touch this directly, instead, use axisMaximum. + /// This is automatically calculated to represent the real max value, + /// and is used when calculating the effective maximum. + internal var _axisMaximum = Double(0) + + /// the total range of values this axis covers + @objc open var axisRange = Double(0) + + /// The minumum number of labels on the axis + @objc open var axisMinLabels = Int(2) { + didSet { axisMinLabels = axisMinLabels > 0 ? axisMinLabels : oldValue } + } + + /// The maximum number of labels on the axis + @objc open var axisMaxLabels = Int(25) { + didSet { axisMinLabels = axisMaxLabels > 0 ? axisMaxLabels : oldValue } + } + + /// the number of label entries the axis should have + /// max = 25, + /// min = 2, + /// default = 6, + /// be aware that this number is not fixed and can only be approximated + @objc open var labelCount: Int + { + get + { + return _labelCount + } + set + { + _labelCount = newValue + + if _labelCount > axisMaxLabels + { + _labelCount = axisMaxLabels + } + if _labelCount < axisMinLabels + { + _labelCount = axisMinLabels + } + + forceLabelsEnabled = false + } + } + + @objc open func setLabelCount(_ count: Int, force: Bool) + { + self.labelCount = count + forceLabelsEnabled = force + } + + /// - returns: `true` if focing the y-label count is enabled. Default: false + @objc open var isForceLabelsEnabled: Bool { return forceLabelsEnabled } + + /// Adds a new ChartLimitLine to this axis. + @objc open func addLimitLine(_ line: ChartLimitLine) + { + _limitLines.append(line) + } + + /// Removes the specified ChartLimitLine from the axis. + @objc open func removeLimitLine(_ line: ChartLimitLine) + { + for i in 0 ..< _limitLines.count + { + if _limitLines[i] === line + { + _limitLines.remove(at: i) + return + } + } + } + + /// Removes all LimitLines from the axis. + @objc open func removeAllLimitLines() + { + _limitLines.removeAll(keepingCapacity: false) + } + + /// - returns: The LimitLines of this axis. + @objc open var limitLines : [ChartLimitLine] + { + return _limitLines + } + + // MARK: Custom axis ranges + + /// By calling this method, any custom minimum value that has been previously set is reseted, and the calculation is done automatically. + @objc open func resetCustomAxisMin() + { + _customAxisMin = false + } + + @objc open var isAxisMinCustom: Bool { return _customAxisMin } + + /// By calling this method, any custom maximum value that has been previously set is reseted, and the calculation is done automatically. + @objc open func resetCustomAxisMax() + { + _customAxisMax = false + } + + @objc open var isAxisMaxCustom: Bool { return _customAxisMax } + + /// The minimum value for this axis. + /// If set, this value will not be calculated automatically depending on the provided data. + /// Use `resetCustomAxisMin()` to undo this. + @objc open var axisMinimum: Double + { + get + { + return _axisMinimum + } + set + { + _customAxisMin = true + _axisMinimum = newValue + axisRange = abs(_axisMaximum - newValue) + } + } + + /// The maximum value for this axis. + /// If set, this value will not be calculated automatically depending on the provided data. + /// Use `resetCustomAxisMax()` to undo this. + @objc open var axisMaximum: Double + { + get + { + return _axisMaximum + } + set + { + _customAxisMax = true + _axisMaximum = newValue + axisRange = abs(newValue - _axisMinimum) + } + } + + /// Calculates the minimum, maximum and range values of the YAxis with the given minimum and maximum values from the chart data. + /// - parameter dataMin: the y-min value according to chart data + /// - parameter dataMax: the y-max value according to chart + @objc open func calculate(min dataMin: Double, max dataMax: Double) + { + // if custom, use value as is, else use data value + var min = _customAxisMin ? _axisMinimum : (dataMin - spaceMin) + var max = _customAxisMax ? _axisMaximum : (dataMax + spaceMax) + + // temporary range (before calculations) + let range = abs(max - min) + + // in case all values are equal + if range == 0.0 + { + max = max + 1.0 + min = min - 1.0 + } + + _axisMinimum = min + _axisMaximum = max + + // actual range + axisRange = abs(max - min) + } +} diff --git a/Pods/Charts/Source/Charts/Components/ChartLimitLine.swift b/Pods/Charts/Source/Charts/Components/ChartLimitLine.swift new file mode 100644 index 0000000..d0d2249 --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/ChartLimitLine.swift @@ -0,0 +1,85 @@ +// +// ChartLimitLine.swift +// Charts +// +// 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 + + +/// The limit line is an additional feature for all Line, Bar and ScatterCharts. +/// It allows the displaying of an additional line in the chart that marks a certain maximum / limit on the specified axis (x- or y-axis). +open class ChartLimitLine: ComponentBase +{ + @objc(ChartLimitLabelPosition) + public enum LabelPosition: Int + { + case leftTop + case leftBottom + case rightTop + case rightBottom + } + + /// limit / maximum (the y-value or xIndex) + @objc open var limit = Double(0.0) + + private var _lineWidth = CGFloat(2.0) + @objc open var lineColor = NSUIColor(red: 237.0/255.0, green: 91.0/255.0, blue: 91.0/255.0, alpha: 1.0) + @objc open var lineDashPhase = CGFloat(0.0) + @objc open var lineDashLengths: [CGFloat]? + + @objc open var valueTextColor = NSUIColor.black + @objc open var valueFont = NSUIFont.systemFont(ofSize: 13.0) + + @objc open var drawLabelEnabled = true + @objc open var label = "" + @objc open var labelPosition = LabelPosition.rightTop + + public override init() + { + super.init() + } + + @objc public init(limit: Double) + { + super.init() + self.limit = limit + } + + @objc public init(limit: Double, label: String) + { + super.init() + self.limit = limit + self.label = label + } + + /// set the line width of the chart (min = 0.2, max = 12); default 2 + @objc open var lineWidth: CGFloat + { + get + { + return _lineWidth + } + set + { + if newValue < 0.2 + { + _lineWidth = 0.2 + } + else if newValue > 12.0 + { + _lineWidth = 12.0 + } + else + { + _lineWidth = newValue + } + } + } +} diff --git a/Pods/Charts/Source/Charts/Components/ComponentBase.swift b/Pods/Charts/Source/Charts/Components/ComponentBase.swift new file mode 100644 index 0000000..6014a17 --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/ComponentBase.swift @@ -0,0 +1,37 @@ +// +// ComponentBase.swift +// Charts +// +// 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 + + +/// This class encapsulates everything both Axis, Legend and LimitLines have in common +@objc(ChartComponentBase) +open class ComponentBase: NSObject +{ + /// flag that indicates if this component is enabled or not + @objc open var enabled = true + + /// The offset this component has on the x-axis + /// **default**: 5.0 + @objc open var xOffset = CGFloat(5.0) + + /// The offset this component has on the x-axis + /// **default**: 5.0 (or 0.0 on ChartYAxis) + @objc open var yOffset = CGFloat(5.0) + + public override init() + { + super.init() + } + + @objc open var isEnabled: Bool { return enabled } +} diff --git a/Pods/Charts/Source/Charts/Components/Description.swift b/Pods/Charts/Source/Charts/Components/Description.swift new file mode 100644 index 0000000..c40577d --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/Description.swift @@ -0,0 +1,50 @@ +// +// Description.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartDescription) +open class Description: ComponentBase +{ + public override init() + { + #if os(tvOS) + // 23 is the smallest recommended font size on the TV + font = NSUIFont.systemFont(ofSize: 23) + #elseif os(OSX) + font = NSUIFont.systemFont(ofSize: NSUIFont.systemFontSize) + #else + font = NSUIFont.systemFont(ofSize: 8.0) + #endif + + super.init() + } + + /// The text to be shown as the description. + @objc open var text: String? = "Description Label" + + /// Custom position for the description text in pixels on the screen. + open var position: CGPoint? = nil + + /// The text alignment of the description text. Default RIGHT. + @objc open var textAlign: NSTextAlignment = NSTextAlignment.right + + /// Font object used for drawing the description text. + @objc open var font: NSUIFont + + /// Text color used for drawing the description text + @objc open var textColor = NSUIColor.black +} diff --git a/Pods/Charts/Source/Charts/Components/IMarker.swift b/Pods/Charts/Source/Charts/Components/IMarker.swift new file mode 100644 index 0000000..59abfad --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/IMarker.swift @@ -0,0 +1,40 @@ +// +// ChartMarker.swift +// Charts +// +// 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 + +@objc(IChartMarker) +public protocol IMarker: class +{ + /// - returns: The desired (general) offset you wish the IMarker to have on the x-axis. + /// + /// By returning x: -(width / 2) you will center the IMarker horizontally. + /// + /// By returning y: -(height / 2) you will center the IMarker vertically. + var offset: CGPoint { get } + + /// - returns: The offset for drawing at the specific `point`. + /// This allows conditional adjusting of the Marker position. + /// If you have no adjustments to make, return self.offset(). + /// + /// - parameter point: This is the point at which the marker wants to be drawn. You can adjust the offset conditionally based on this argument. + func offsetForDrawing(atPoint: CGPoint) -> CGPoint + + /// This method enables a custom IMarker to update it's content every time the IMarker is redrawn according to the data entry it points to. + /// + /// - parameter entry: The Entry the IMarker belongs to. This can also be any subclass of Entry, like BarEntry or CandleEntry, simply cast it at runtime. + /// - parameter highlight: The highlight object contains information about the highlighted value such as it's dataset-index, the selected range or stack-index (only stacked bar entries). + func refreshContent(entry: ChartDataEntry, highlight: Highlight) + + /// Draws the IMarker on the given position on the given context + func draw(context: CGContext, point: CGPoint) +} diff --git a/Pods/Charts/Source/Charts/Components/Legend.swift b/Pods/Charts/Source/Charts/Components/Legend.swift new file mode 100644 index 0000000..53177d0 --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/Legend.swift @@ -0,0 +1,428 @@ +// +// Legend.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartLegend) +open class Legend: ComponentBase +{ + @objc(ChartLegendForm) + public enum Form: Int + { + /// Avoid drawing a form + case none + + /// Do not draw the a form, but leave space for it + case empty + + /// Use default (default dataset's form to the legend's form) + case `default` + + /// Draw a square + case square + + /// Draw a circle + case circle + + /// Draw a horizontal line + case line + } + + @objc(ChartLegendHorizontalAlignment) + public enum HorizontalAlignment: Int + { + case left + case center + case right + } + + @objc(ChartLegendVerticalAlignment) + public enum VerticalAlignment: Int + { + case top + case center + case bottom + } + + @objc(ChartLegendOrientation) + public enum Orientation: Int + { + case horizontal + case vertical + } + + @objc(ChartLegendDirection) + public enum Direction: Int + { + case leftToRight + case rightToLeft + } + + /// The legend entries array + @objc open var entries = [LegendEntry]() + + /// Entries that will be appended to the end of the auto calculated entries after calculating the legend. + /// (if the legend has already been calculated, you will need to call notifyDataSetChanged() to let the changes take effect) + @objc open var extraEntries = [LegendEntry]() + + /// Are the legend labels/colors a custom value or auto calculated? If false, then it's auto, if true, then custom. + /// + /// **default**: false (automatic legend) + private var _isLegendCustom = false + + /// The horizontal alignment of the legend + @objc open var horizontalAlignment: HorizontalAlignment = HorizontalAlignment.left + + /// The vertical alignment of the legend + @objc open var verticalAlignment: VerticalAlignment = VerticalAlignment.bottom + + /// The orientation of the legend + @objc open var orientation: Orientation = Orientation.horizontal + + /// Flag indicating whether the legend will draw inside the chart or outside + @objc open var drawInside: Bool = false + + /// Flag indicating whether the legend will draw inside the chart or outside + @objc open var isDrawInsideEnabled: Bool { return drawInside } + + /// The text direction of the legend + @objc open var direction: Direction = Direction.leftToRight + + @objc open var font: NSUIFont = NSUIFont.systemFont(ofSize: 10.0) + @objc open var textColor = NSUIColor.black + + /// The form/shape of the legend forms + @objc open var form = Form.square + + /// The size of the legend forms + @objc open var formSize = CGFloat(8.0) + + /// The line width for forms that consist of lines + @objc open var formLineWidth = CGFloat(3.0) + + /// Line dash configuration for shapes that consist of lines. + /// + /// This is how much (in pixels) into the dash pattern are we starting from. + @objc open var formLineDashPhase: CGFloat = 0.0 + + /// Line dash configuration for shapes that consist of lines. + /// + /// This is the actual dash pattern. + /// I.e. [2, 3] will paint [-- -- ] + /// [1, 3, 4, 2] will paint [- ---- - ---- ] + @objc open var formLineDashLengths: [CGFloat]? + + @objc open var xEntrySpace = CGFloat(6.0) + @objc open var yEntrySpace = CGFloat(0.0) + @objc open var formToTextSpace = CGFloat(5.0) + @objc open var stackSpace = CGFloat(3.0) + + @objc open var calculatedLabelSizes = [CGSize]() + @objc open var calculatedLabelBreakPoints = [Bool]() + @objc open var calculatedLineSizes = [CGSize]() + + public override init() + { + super.init() + + self.xOffset = 5.0 + self.yOffset = 3.0 + } + + @objc public init(entries: [LegendEntry]) + { + super.init() + + self.entries = entries + } + + @objc open func getMaximumEntrySize(withFont font: NSUIFont) -> CGSize + { + var maxW = CGFloat(0.0) + var maxH = CGFloat(0.0) + + var maxFormSize: CGFloat = 0.0 + + for entry in entries + { + let formSize = entry.formSize.isNaN ? self.formSize : entry.formSize + if formSize > maxFormSize + { + maxFormSize = formSize + } + + guard let label = entry.label + else { continue } + + let size = (label as NSString).size(withAttributes: [.font: font]) + + if size.width > maxW + { + maxW = size.width + } + if size.height > maxH + { + maxH = size.height + } + } + + return CGSize( + width: maxW + maxFormSize + formToTextSpace, + height: maxH + ) + } + + @objc open var neededWidth = CGFloat(0.0) + @objc open var neededHeight = CGFloat(0.0) + @objc open var textWidthMax = CGFloat(0.0) + @objc open var textHeightMax = CGFloat(0.0) + + /// flag that indicates if word wrapping is enabled + /// this is currently supported only for `orientation == Horizontal`. + /// you may want to set maxSizePercent when word wrapping, to set the point where the text wraps. + /// + /// **default**: true + @objc open var wordWrapEnabled = true + + /// if this is set, then word wrapping the legend is enabled. + @objc open var isWordWrapEnabled: Bool { return wordWrapEnabled } + + /// The maximum relative size out of the whole chart view in percent. + /// If the legend is to the right/left of the chart, then this affects the width of the legend. + /// If the legend is to the top/bottom of the chart, then this affects the height of the legend. + /// + /// **default**: 0.95 (95%) + @objc open var maxSizePercent: CGFloat = 0.95 + + @objc open func calculateDimensions(labelFont: NSUIFont, viewPortHandler: ViewPortHandler) + { + let maxEntrySize = getMaximumEntrySize(withFont: labelFont) + let defaultFormSize = self.formSize + let stackSpace = self.stackSpace + let formToTextSpace = self.formToTextSpace + let xEntrySpace = self.xEntrySpace + let yEntrySpace = self.yEntrySpace + let wordWrapEnabled = self.wordWrapEnabled + let entries = self.entries + let entryCount = entries.count + + textWidthMax = maxEntrySize.width + textHeightMax = maxEntrySize.height + + switch orientation + { + case .vertical: + + var maxWidth = CGFloat(0.0) + var width = CGFloat(0.0) + var maxHeight = CGFloat(0.0) + let labelLineHeight = labelFont.lineHeight + + var wasStacked = false + + for i in 0 ..< entryCount + { + let e = entries[i] + let drawingForm = e.form != .none + let formSize = e.formSize.isNaN ? defaultFormSize : e.formSize + let label = e.label + + if !wasStacked + { + width = 0.0 + } + + if drawingForm + { + if wasStacked + { + width += stackSpace + } + width += formSize + } + + if label != nil + { + let size = (label! as NSString).size(withAttributes: [.font: labelFont]) + + if drawingForm && !wasStacked + { + width += formToTextSpace + } + else if wasStacked + { + maxWidth = max(maxWidth, width) + maxHeight += labelLineHeight + yEntrySpace + width = 0.0 + wasStacked = false + } + + width += size.width + + if i < entryCount - 1 + { + maxHeight += labelLineHeight + yEntrySpace + } + } + else + { + wasStacked = true + width += formSize + + if i < entryCount - 1 + { + width += stackSpace + } + } + + maxWidth = max(maxWidth, width) + } + + neededWidth = maxWidth + neededHeight = maxHeight + + case .horizontal: + + let labelLineHeight = labelFont.lineHeight + + let contentWidth: CGFloat = viewPortHandler.contentWidth * maxSizePercent + + // Prepare arrays for calculated layout + if calculatedLabelSizes.count != entryCount + { + calculatedLabelSizes = [CGSize](repeating: CGSize(), count: entryCount) + } + + if calculatedLabelBreakPoints.count != entryCount + { + calculatedLabelBreakPoints = [Bool](repeating: false, count: entryCount) + } + + calculatedLineSizes.removeAll(keepingCapacity: true) + + // Start calculating layout + + let labelAttrs = [NSAttributedStringKey.font: labelFont] + var maxLineWidth: CGFloat = 0.0 + var currentLineWidth: CGFloat = 0.0 + var requiredWidth: CGFloat = 0.0 + var stackedStartIndex: Int = -1 + + for i in 0 ..< entryCount + { + let e = entries[i] + let drawingForm = e.form != .none + let label = e.label + + calculatedLabelBreakPoints[i] = false + + if stackedStartIndex == -1 + { + // we are not stacking, so required width is for this label only + requiredWidth = 0.0 + } + else + { + // add the spacing appropriate for stacked labels/forms + requiredWidth += stackSpace + } + + // grouped forms have null labels + if label != nil + { + calculatedLabelSizes[i] = (label! as NSString).size(withAttributes: labelAttrs) + requiredWidth += drawingForm ? formToTextSpace + formSize : 0.0 + requiredWidth += calculatedLabelSizes[i].width + } + else + { + calculatedLabelSizes[i] = CGSize() + requiredWidth += drawingForm ? formSize : 0.0 + + if stackedStartIndex == -1 + { + // mark this index as we might want to break here later + stackedStartIndex = i + } + } + + if label != nil || i == entryCount - 1 + { + let requiredSpacing = currentLineWidth == 0.0 ? 0.0 : xEntrySpace + + if (!wordWrapEnabled || // No word wrapping, it must fit. + currentLineWidth == 0.0 || // The line is empty, it must fit. + (contentWidth - currentLineWidth >= requiredSpacing + requiredWidth)) // It simply fits + { + // Expand current line + currentLineWidth += requiredSpacing + requiredWidth + } + else + { // It doesn't fit, we need to wrap a line + + // Add current line size to array + calculatedLineSizes.append(CGSize(width: currentLineWidth, height: labelLineHeight)) + maxLineWidth = max(maxLineWidth, currentLineWidth) + + // Start a new line + calculatedLabelBreakPoints[stackedStartIndex > -1 ? stackedStartIndex : i] = true + currentLineWidth = requiredWidth + } + + if i == entryCount - 1 + { // Add last line size to array + calculatedLineSizes.append(CGSize(width: currentLineWidth, height: labelLineHeight)) + maxLineWidth = max(maxLineWidth, currentLineWidth) + } + } + + stackedStartIndex = label != nil ? -1 : stackedStartIndex + } + + neededWidth = maxLineWidth + neededHeight = labelLineHeight * CGFloat(calculatedLineSizes.count) + + yEntrySpace * CGFloat(calculatedLineSizes.count == 0 ? 0 : (calculatedLineSizes.count - 1)) + } + + neededWidth += xOffset + neededHeight += yOffset + } + + /// MARK: - Custom legend + + /// Sets a custom legend's entries array. + /// * A nil label will start a group. + /// This will disable the feature that automatically calculates the legend entries from the datasets. + /// Call `resetCustom(...)` to re-enable automatic calculation (and then `notifyDataSetChanged()` is needed). + @objc open func setCustom(entries: [LegendEntry]) + { + self.entries = entries + _isLegendCustom = true + } + + /// Calling this will disable the custom legend entries (set by `setLegend(...)`). Instead, the entries will again be calculated automatically (after `notifyDataSetChanged()` is called). + @objc open func resetCustom() + { + _isLegendCustom = false + } + + /// **default**: false (automatic legend) + /// - returns: `true` if a custom legend entries has been set + @objc open var isLegendCustom: Bool + { + return _isLegendCustom + } +} diff --git a/Pods/Charts/Source/Charts/Components/LegendEntry.swift b/Pods/Charts/Source/Charts/Components/LegendEntry.swift new file mode 100644 index 0000000..88ed2e1 --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/LegendEntry.swift @@ -0,0 +1,91 @@ +// +// LegendEntry.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartLegendEntry) +open class LegendEntry: NSObject +{ + public override init() + { + super.init() + } + + /// - parameter label: The legend entry text. + /// A `nil` label will start a group. + /// - parameter form: The form to draw for this entry. + /// - parameter formSize: Set to NaN to use the legend's default. + /// - parameter formLineWidth: Set to NaN to use the legend's default. + /// - parameter formLineDashPhase: Line dash configuration. + /// - parameter formLineDashLengths: Line dash configurationas NaN to use the legend's default. + /// - parameter formColor: The color for drawing the form. + @objc public init(label: String?, + form: Legend.Form, + formSize: CGFloat, + formLineWidth: CGFloat, + formLineDashPhase: CGFloat, + formLineDashLengths: [CGFloat]?, + formColor: NSUIColor?) + { + self.label = label + self.form = form + self.formSize = formSize + self.formLineWidth = formLineWidth + self.formLineDashPhase = formLineDashPhase + self.formLineDashLengths = formLineDashLengths + self.formColor = formColor + } + + /// The legend entry text. + /// A `nil` label will start a group. + @objc open var label: String? + + /// The form to draw for this entry. + /// + /// `None` will avoid drawing a form, and any related space. + /// `Empty` will avoid drawing a form, but keep its space. + /// `Default` will use the Legend's default. + @objc open var form: Legend.Form = .default + + /// Form size will be considered except for when .None is used + /// + /// Set as NaN to use the legend's default + @objc open var formSize: CGFloat = CGFloat.nan + + /// Line width used for shapes that consist of lines. + /// + /// Set to NaN to use the legend's default. + @objc open var formLineWidth: CGFloat = CGFloat.nan + + /// Line dash configuration for shapes that consist of lines. + /// + /// This is how much (in pixels) into the dash pattern are we starting from. + /// + /// Set to NaN to use the legend's default. + @objc open var formLineDashPhase: CGFloat = 0.0 + + /// Line dash configuration for shapes that consist of lines. + /// + /// This is the actual dash pattern. + /// I.e. [2, 3] will paint [-- -- ] + /// [1, 3, 4, 2] will paint [- ---- - ---- ] + /// + /// Set to nil to use the legend's default. + @objc open var formLineDashLengths: [CGFloat]? + + /// The color for drawing the form + @objc open var formColor: NSUIColor? +} diff --git a/Pods/Charts/Source/Charts/Components/MarkerImage.swift b/Pods/Charts/Source/Charts/Components/MarkerImage.swift new file mode 100644 index 0000000..14e4dcf --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/MarkerImage.swift @@ -0,0 +1,110 @@ +// +// ChartMarkerImage.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartMarkerImage) +open class MarkerImage: NSObject, IMarker +{ + /// The marker image to render + @objc open var image: NSUIImage? + + open var offset: CGPoint = CGPoint() + + @objc open weak var chartView: ChartViewBase? + + /// As long as size is 0.0/0.0 - it will default to the image's size + @objc open var size: CGSize = CGSize() + + public override init() + { + super.init() + } + + open func offsetForDrawing(atPoint point: CGPoint) -> CGPoint + { + var offset = self.offset + + let chart = self.chartView + + var size = self.size + + if size.width == 0.0 && image != nil + { + size.width = image?.size.width ?? 0.0 + } + if size.height == 0.0 && image != nil + { + size.height = image?.size.height ?? 0.0 + } + + let width = size.width + let height = size.height + + if point.x + offset.x < 0.0 + { + offset.x = -point.x + } + else if chart != nil && point.x + width + offset.x > chart!.bounds.size.width + { + offset.x = chart!.bounds.size.width - point.x - width + } + + if point.y + offset.y < 0 + { + offset.y = -point.y + } + else if chart != nil && point.y + height + offset.y > chart!.bounds.size.height + { + offset.y = chart!.bounds.size.height - point.y - height + } + + return offset + } + + open func refreshContent(entry: ChartDataEntry, highlight: Highlight) + { + // Do nothing here... + } + + open func draw(context: CGContext, point: CGPoint) + { + guard let image = image else { return } + + let offset = offsetForDrawing(atPoint: point) + + var size = self.size + + if size.width == 0.0 + { + size.width = image.size.width + } + if size.height == 0.0 + { + size.height = image.size.height + } + + let rect = CGRect( + x: point.x + offset.x, + y: point.y + offset.y, + width: size.width, + height: size.height) + + NSUIGraphicsPushContext(context) + image.draw(in: rect) + NSUIGraphicsPopContext() + } +} diff --git a/Pods/Charts/Source/Charts/Components/MarkerView.swift b/Pods/Charts/Source/Charts/Components/MarkerView.swift new file mode 100644 index 0000000..094f4e2 --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/MarkerView.swift @@ -0,0 +1,99 @@ +// +// ChartMarkerView.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartMarkerView) +open class MarkerView: NSUIView, IMarker +{ + open var offset: CGPoint = CGPoint() + + @objc open weak var chartView: ChartViewBase? + + open func offsetForDrawing(atPoint point: CGPoint) -> CGPoint + { + guard let chart = chartView else { return self.offset } + + var offset = self.offset + + let width = self.bounds.size.width + let height = self.bounds.size.height + + if point.x + offset.x < 0.0 + { + offset.x = -point.x + } + else if point.x + width + offset.x > chart.bounds.size.width + { + offset.x = chart.bounds.size.width - point.x - width + } + + if point.y + offset.y < 0 + { + offset.y = -point.y + } + else if point.y + height + offset.y > chart.bounds.size.height + { + offset.y = chart.bounds.size.height - point.y - height + } + + return offset + } + + open func refreshContent(entry: ChartDataEntry, highlight: Highlight) + { + // Do nothing here... + } + + open func draw(context: CGContext, point: CGPoint) + { + let offset = self.offsetForDrawing(atPoint: point) + + context.saveGState() + context.translateBy(x: point.x + offset.x, + y: point.y + offset.y) + NSUIGraphicsPushContext(context) + self.nsuiLayer?.render(in: context) + NSUIGraphicsPopContext() + context.restoreGState() + } + + @objc + open class func viewFromXib(in bundle: Bundle = .main) -> MarkerView? + { + #if !os(OSX) + return bundle.loadNibNamed( + String(describing: self), + owner: nil, + options: nil)?[0] as? MarkerView + #else + + var loadedObjects = NSArray() + let loadedObjectsPointer = AutoreleasingUnsafeMutablePointer(&loadedObjects) + + if bundle.loadNibNamed( + NSNib.Name(String(describing: self)), + owner: nil, + topLevelObjects: loadedObjectsPointer) + { + return loadedObjects[0] as? MarkerView + } + + return nil + #endif + } + +} diff --git a/Pods/Charts/Source/Charts/Components/XAxis.swift b/Pods/Charts/Source/Charts/Components/XAxis.swift new file mode 100644 index 0000000..1031bbb --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/XAxis.swift @@ -0,0 +1,75 @@ +// +// XAxis.swift +// Charts +// +// 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 + +@objc(ChartXAxis) +open class XAxis: AxisBase +{ + @objc(XAxisLabelPosition) + public enum LabelPosition: Int + { + case top + case bottom + case bothSided + case topInside + case bottomInside + } + + /// width of the x-axis labels in pixels - this is automatically calculated by the `computeSize()` methods in the renderers + @objc open var labelWidth = CGFloat(1.0) + + /// height of the x-axis labels in pixels - this is automatically calculated by the `computeSize()` methods in the renderers + @objc open var labelHeight = CGFloat(1.0) + + /// width of the (rotated) x-axis labels in pixels - this is automatically calculated by the `computeSize()` methods in the renderers + @objc open var labelRotatedWidth = CGFloat(1.0) + + /// height of the (rotated) x-axis labels in pixels - this is automatically calculated by the `computeSize()` methods in the renderers + @objc open var labelRotatedHeight = CGFloat(1.0) + + /// This is the angle for drawing the X axis labels (in degrees) + @objc open var labelRotationAngle = CGFloat(0.0) + + /// if set to true, the chart will avoid that the first and last label entry in the chart "clip" off the edge of the chart + @objc open var avoidFirstLastClippingEnabled = false + + /// the position of the x-labels relative to the chart + @objc open var labelPosition = LabelPosition.top + + /// if set to true, word wrapping the labels will be enabled. + /// word wrapping is done using `(value width * labelRotatedWidth)` + /// + /// - note: currently supports all charts except pie/radar/horizontal-bar* + @objc open var wordWrapEnabled = false + + /// - returns: `true` if word wrapping the labels is enabled + @objc open var isWordWrapEnabled: Bool { return wordWrapEnabled } + + /// the width for wrapping the labels, as percentage out of one value width. + /// used only when isWordWrapEnabled = true. + /// + /// **default**: 1.0 + @objc open var wordWrapWidthPercent: CGFloat = 1.0 + + public override init() + { + super.init() + + self.yOffset = 4.0 + } + + @objc open var isAvoidFirstLastClippingEnabled: Bool + { + return avoidFirstLastClippingEnabled + } +} diff --git a/Pods/Charts/Source/Charts/Components/YAxis.swift b/Pods/Charts/Source/Charts/Components/YAxis.swift new file mode 100644 index 0000000..cfe5207 --- /dev/null +++ b/Pods/Charts/Source/Charts/Components/YAxis.swift @@ -0,0 +1,179 @@ +// +// YAxis.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + + +/// Class representing the y-axis labels settings and its entries. +/// Be aware that not all features the YLabels class provides are suitable for the RadarChart. +/// Customizations that affect the value range of the axis need to be applied before setting data for the chart. +@objc(ChartYAxis) +open class YAxis: AxisBase +{ + @objc(YAxisLabelPosition) + public enum LabelPosition: Int + { + case outsideChart + case insideChart + } + + /// Enum that specifies the axis a DataSet should be plotted against, either Left or Right. + @objc + public enum AxisDependency: Int + { + case left + case right + } + + /// indicates if the bottom y-label entry is drawn or not + @objc open var drawBottomYLabelEntryEnabled = true + + /// indicates if the top y-label entry is drawn or not + @objc open var drawTopYLabelEntryEnabled = true + + /// flag that indicates if the axis is inverted or not + @objc open var inverted = false + + /// flag that indicates if the zero-line should be drawn regardless of other grid lines + @objc open var drawZeroLineEnabled = false + + /// Color of the zero line + @objc open var zeroLineColor: NSUIColor? = NSUIColor.gray + + /// Width of the zero line + @objc open var zeroLineWidth: CGFloat = 1.0 + + /// This is how much (in pixels) into the dash pattern are we starting from. + @objc open var zeroLineDashPhase = CGFloat(0.0) + + /// This is the actual dash pattern. + /// I.e. [2, 3] will paint [-- -- ] + /// [1, 3, 4, 2] will paint [- ---- - ---- ] + @objc open var zeroLineDashLengths: [CGFloat]? + + /// axis space from the largest value to the top in percent of the total axis range + @objc open var spaceTop = CGFloat(0.1) + + /// axis space from the smallest value to the bottom in percent of the total axis range + @objc open var spaceBottom = CGFloat(0.1) + + /// the position of the y-labels relative to the chart + @objc open var labelPosition = LabelPosition.outsideChart + + /// the side this axis object represents + private var _axisDependency = AxisDependency.left + + /// the minimum width that the axis should take + /// + /// **default**: 0.0 + @objc open var minWidth = CGFloat(0) + + /// the maximum width that the axis can take. + /// use Infinity for disabling the maximum. + /// + /// **default**: CGFloat.infinity + @objc open var maxWidth = CGFloat(CGFloat.infinity) + + public override init() + { + super.init() + + self.yOffset = 0.0 + } + + @objc public init(position: AxisDependency) + { + super.init() + + _axisDependency = position + + self.yOffset = 0.0 + } + + @objc open var axisDependency: AxisDependency + { + return _axisDependency + } + + @objc open func requiredSize() -> CGSize + { + let label = getLongestLabel() as NSString + var size = label.size(withAttributes: [NSAttributedStringKey.font: labelFont]) + size.width += xOffset * 2.0 + size.height += yOffset * 2.0 + size.width = max(minWidth, min(size.width, maxWidth > 0.0 ? maxWidth : size.width)) + return size + } + + @objc open func getRequiredHeightSpace() -> CGFloat + { + return requiredSize().height + } + + /// - returns: `true` if this axis needs horizontal offset, `false` ifno offset is needed. + @objc open var needsOffset: Bool + { + if isEnabled && isDrawLabelsEnabled && labelPosition == .outsideChart + { + return true + } + else + { + return false + } + } + + @objc open var isInverted: Bool { return inverted } + + open override func calculate(min dataMin: Double, max dataMax: Double) + { + // if custom, use value as is, else use data value + var min = _customAxisMin ? _axisMinimum : dataMin + var max = _customAxisMax ? _axisMaximum : dataMax + + // temporary range (before calculations) + let range = abs(max - min) + + // in case all values are equal + if range == 0.0 + { + max = max + 1.0 + min = min - 1.0 + } + + // bottom-space only effects non-custom min + if !_customAxisMin + { + let bottomSpace = range * Double(spaceBottom) + _axisMinimum = (min - bottomSpace) + } + + // top-space only effects non-custom max + if !_customAxisMax + { + let topSpace = range * Double(spaceTop) + _axisMaximum = (max + topSpace) + } + + // calc actual range + axisRange = abs(_axisMaximum - _axisMinimum) + } + + @objc open var isDrawBottomYLabelEntryEnabled: Bool { return drawBottomYLabelEntryEnabled } + + @objc open var isDrawTopYLabelEntryEnabled: Bool { return drawTopYLabelEntryEnabled } + +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/ChartBaseDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/ChartBaseDataSet.swift new file mode 100644 index 0000000..b788676 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/ChartBaseDataSet.swift @@ -0,0 +1,424 @@ +// +// BaseDataSet.swift +// Charts +// +// 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 + + +open class ChartBaseDataSet: NSObject, IChartDataSet +{ + public required override 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)) + valueColors.append(NSUIColor.black) + } + + @objc public 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)) + valueColors.append(NSUIColor.black) + + self.label = label + } + + // MARK: - Data functions and accessors + + /// Use this method to tell the data set that the underlying data has changed + open func notifyDataSetChanged() + { + calcMinMax() + } + + open func calcMinMax() + { + fatalError("calcMinMax is not implemented in ChartBaseDataSet") + } + + open func calcMinMaxY(fromX: Double, toX: Double) + { + fatalError("calcMinMaxY(fromX:, toX:) is not implemented in ChartBaseDataSet") + } + + open var yMin: Double + { + fatalError("yMin is not implemented in ChartBaseDataSet") + } + + open var yMax: Double + { + fatalError("yMax is not implemented in ChartBaseDataSet") + } + + open var xMin: Double + { + fatalError("xMin is not implemented in ChartBaseDataSet") + } + + open var xMax: Double + { + fatalError("xMax is not implemented in ChartBaseDataSet") + } + + open var entryCount: Int + { + fatalError("entryCount is not implemented in ChartBaseDataSet") + } + + open func entryForIndex(_ i: Int) -> ChartDataEntry? + { + fatalError("entryForIndex is not implemented in ChartBaseDataSet") + } + + open func entryForXValue( + _ x: Double, + closestToY y: Double, + rounding: ChartDataSetRounding) -> ChartDataEntry? + { + fatalError("entryForXValue(x, closestToY, rounding) is not implemented in ChartBaseDataSet") + } + + open func entryForXValue( + _ x: Double, + closestToY y: Double) -> ChartDataEntry? + { + fatalError("entryForXValue(x, closestToY) is not implemented in ChartBaseDataSet") + } + + open func entriesForXValue(_ x: Double) -> [ChartDataEntry] + { + fatalError("entriesForXValue is not implemented in ChartBaseDataSet") + } + + open func entryIndex( + x xValue: Double, + closestToY y: Double, + rounding: ChartDataSetRounding) -> Int + { + fatalError("entryIndex(x, closestToY, rounding) is not implemented in ChartBaseDataSet") + } + + open func entryIndex(entry e: ChartDataEntry) -> Int + { + fatalError("entryIndex(entry) is not implemented in ChartBaseDataSet") + } + + open func addEntry(_ e: ChartDataEntry) -> Bool + { + fatalError("addEntry is not implemented in ChartBaseDataSet") + } + + open func addEntryOrdered(_ e: ChartDataEntry) -> Bool + { + fatalError("addEntryOrdered is not implemented in ChartBaseDataSet") + } + + @discardableResult open func removeEntry(_ entry: ChartDataEntry) -> Bool + { + fatalError("removeEntry is not implemented in ChartBaseDataSet") + } + + @discardableResult open func removeEntry(index: Int) -> Bool + { + if let entry = entryForIndex(index) + { + return removeEntry(entry) + } + return false + } + + @discardableResult open func removeEntry(x: Double) -> Bool + { + if let entry = entryForXValue(x, closestToY: Double.nan) + { + return removeEntry(entry) + } + return false + } + + @discardableResult open func removeFirst() -> Bool + { + if entryCount > 0 + { + if let entry = entryForIndex(0) + { + return removeEntry(entry) + } + } + return false + } + + @discardableResult open func removeLast() -> Bool + { + if entryCount > 0 + { + if let entry = entryForIndex(entryCount - 1) + { + return removeEntry(entry) + } + } + return false + } + + open func contains(_ e: ChartDataEntry) -> Bool + { + fatalError("removeEntry is not implemented in ChartBaseDataSet") + } + + open func clear() + { + fatalError("clear is not implemented in ChartBaseDataSet") + } + + // MARK: - Styling functions and accessors + + /// All the colors that are used for this DataSet. + /// Colors are reused as soon as the number of Entries the DataSet represents is higher than the size of the colors array. + open var colors = [NSUIColor]() + + /// List representing all colors that are used for drawing the actual values for this DataSet + open var valueColors = [NSUIColor]() + + /// The label string that describes the DataSet. + open var label: String? = "DataSet" + + /// The axis this DataSet should be plotted against. + open var axisDependency = YAxis.AxisDependency.left + + /// - returns: The color at the given index of the DataSet's color array. + /// This prevents out-of-bounds by performing a modulus on the color index, so colours will repeat themselves. + open func color(atIndex index: Int) -> NSUIColor + { + var index = index + if index < 0 + { + index = 0 + } + return colors[index % colors.count] + } + + /// Resets all colors of this DataSet and recreates the colors array. + open func resetColors() + { + colors.removeAll(keepingCapacity: false) + } + + /// Adds a new color to the colors array of the DataSet. + /// - parameter color: the color to add + open func addColor(_ color: NSUIColor) + { + colors.append(color) + } + + /// Sets the one and **only** color that should be used for this DataSet. + /// Internally, this recreates the colors array and adds the specified color. + /// - parameter color: the color to set + open func setColor(_ color: NSUIColor) + { + colors.removeAll(keepingCapacity: false) + colors.append(color) + } + + /// Sets colors to a single color a specific alpha value. + /// - parameter color: the color to set + /// - parameter alpha: alpha to apply to the set `color` + @objc open func setColor(_ color: NSUIColor, alpha: CGFloat) + { + setColor(color.withAlphaComponent(alpha)) + } + + /// Sets colors with a specific alpha value. + /// - parameter colors: the colors to set + /// - parameter alpha: alpha to apply to the set `colors` + @objc open func setColors(_ colors: [NSUIColor], alpha: CGFloat) + { + var colorsWithAlpha = colors + + for i in 0 ..< colorsWithAlpha.count + { + colorsWithAlpha[i] = colorsWithAlpha[i] .withAlphaComponent(alpha) + } + + self.colors = colorsWithAlpha + } + + /// Sets colors with a specific alpha value. + /// - parameter colors: the colors to set + /// - parameter alpha: alpha to apply to the set `colors` + open func setColors(_ colors: NSUIColor...) + { + self.colors = colors + } + + /// if true, value highlighting is enabled + open var highlightEnabled = true + + /// - returns: `true` if value highlighting is enabled for this dataset + open var isHighlightEnabled: Bool { return highlightEnabled } + + /// Custom formatter that is used instead of the auto-formatter if set + internal var _valueFormatter: IValueFormatter? + + /// Custom formatter that is used instead of the auto-formatter if set + open var valueFormatter: IValueFormatter? + { + get + { + if needsFormatter + { + return ChartUtils.defaultValueFormatter() + } + + return _valueFormatter + } + set + { + if newValue == nil { return } + + _valueFormatter = newValue + } + } + + open var needsFormatter: Bool + { + return _valueFormatter == nil + } + + /// Sets/get a single color for value text. + /// Setting the color clears the colors array and adds a single color. + /// Getting will return the first color in the array. + open var valueTextColor: NSUIColor + { + get + { + return valueColors[0] + } + set + { + valueColors.removeAll(keepingCapacity: false) + valueColors.append(newValue) + } + } + + /// - returns: The color at the specified index that is used for drawing the values inside the chart. Uses modulus internally. + open func valueTextColorAt(_ index: Int) -> NSUIColor + { + var index = index + if index < 0 + { + index = 0 + } + return valueColors[index % valueColors.count] + } + + /// the font for the value-text labels + open var valueFont: NSUIFont = NSUIFont.systemFont(ofSize: 7.0) + + /// The form to draw for this dataset in the legend. + open var form = Legend.Form.default + + /// The form size to draw for this dataset in the legend. + /// + /// Return `NaN` to use the default legend form size. + open var formSize: CGFloat = CGFloat.nan + + /// The line width for drawing the form of this dataset in the legend + /// + /// Return `NaN` to use the default legend form line width. + open var formLineWidth: CGFloat = CGFloat.nan + + /// Line dash configuration for legend shapes that consist of lines. + /// + /// This is how much (in pixels) into the dash pattern are we starting from. + open var formLineDashPhase: CGFloat = 0.0 + + /// Line dash configuration for legend shapes that consist of lines. + /// + /// This is the actual dash pattern. + /// I.e. [2, 3] will paint [-- -- ] + /// [1, 3, 4, 2] will paint [- ---- - ---- ] + open var formLineDashLengths: [CGFloat]? = nil + + /// Set this to true to draw y-values on the chart. + /// + /// - note: For bar and line charts: if `maxVisibleCount` is reached, no values will be drawn even if this is enabled. + open var drawValuesEnabled = true + + /// - returns: `true` if y-value drawing is enabled, `false` ifnot + open var isDrawValuesEnabled: Bool + { + return drawValuesEnabled + } + + /// Set this to true to draw y-icons on the chart. + /// + /// - note: For bar and line charts: if `maxVisibleCount` is reached, no icons will be drawn even if this is enabled. + open var drawIconsEnabled = true + + /// Returns true if y-icon drawing is enabled, false if not + open var isDrawIconsEnabled: Bool + { + return drawIconsEnabled + } + + /// Offset of icons drawn on the chart. + /// + /// For all charts except Pie and Radar it will be ordinary (x offset, y offset). + /// + /// For Pie and Radar chart it will be (y offset, distance from center offset); so if you want icon to be rendered under value, you should increase X component of CGPoint, and if you want icon to be rendered closet to center, you should decrease height component of CGPoint. + open var iconsOffset = CGPoint(x: 0, y: 0) + + /// Set the visibility of this DataSet. If not visible, the DataSet will not be drawn to the chart upon refreshing it. + open var visible = true + + /// - returns: `true` if this DataSet is visible inside the chart, or `false` ifit is currently hidden. + open var isVisible: Bool + { + return visible + } + + // MARK: - NSObject + + open override var description: String + { + return String(format: "%@, label: %@, %i entries", arguments: [NSStringFromClass(type(of: self)), self.label ?? "", self.entryCount]) + } + + open override var debugDescription: String + { + var desc = description + ":" + + for i in 0 ..< self.entryCount + { + desc += "\n" + (self.entryForIndex(i)?.description ?? "") + } + + return desc + } + + // MARK: - NSCopying + + @objc open func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = type(of: self).init() + + copy.colors = colors + copy.valueColors = valueColors + copy.label = label + + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartData.swift new file mode 100644 index 0000000..0317fc8 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartData.swift @@ -0,0 +1,105 @@ +// +// BarChartData.swift +// Charts +// +// 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 + +open class BarChartData: BarLineScatterCandleBubbleChartData +{ + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } + + /// The width of the bars on the x-axis, in values (not pixels) + /// + /// **default**: 0.85 + @objc open var barWidth = Double(0.85) + + /// Groups all BarDataSet objects this data object holds together by modifying the x-value of their entries. + /// Previously set x-values of entries will be overwritten. Leaves space between bars and groups as specified by the parameters. + /// Do not forget to call notifyDataSetChanged() on your BarChart object after calling this method. + /// + /// - parameter the starting point on the x-axis where the grouping should begin + /// - parameter groupSpace: The space between groups of bars in values (not pixels) e.g. 0.8f for bar width 1f + /// - parameter barSpace: The space between individual bars in values (not pixels) e.g. 0.1f for bar width 1f + @objc open func groupBars(fromX: Double, groupSpace: Double, barSpace: Double) + { + let setCount = _dataSets.count + if setCount <= 1 + { + print("BarData needs to hold at least 2 BarDataSets to allow grouping.", terminator: "\n") + return + } + + let max = maxEntryCountSet + let maxEntryCount = max?.entryCount ?? 0 + + let groupSpaceWidthHalf = groupSpace / 2.0 + let barSpaceHalf = barSpace / 2.0 + let barWidthHalf = self.barWidth / 2.0 + + var fromX = fromX + + let interval = groupWidth(groupSpace: groupSpace, barSpace: barSpace) + + for i in stride(from: 0, to: maxEntryCount, by: 1) + { + let start = fromX + fromX += groupSpaceWidthHalf + + (_dataSets as? [IBarChartDataSet])?.forEach { set in + fromX += barSpaceHalf + fromX += barWidthHalf + + if i < set.entryCount + { + if let entry = set.entryForIndex(i) + { + entry.x = fromX + } + } + + fromX += barWidthHalf + fromX += barSpaceHalf + } + + fromX += groupSpaceWidthHalf + let end = fromX + let innerInterval = end - start + let diff = interval - innerInterval + + // correct rounding errors + if diff > 0 || diff < 0 + { + fromX += diff + } + + } + + notifyDataChanged() + } + + /// In case of grouped bars, this method returns the space an individual group of bar needs on the x-axis. + /// + /// - parameter groupSpace: + /// - parameter barSpace: + @objc open func groupWidth(groupSpace: Double, barSpace: Double) -> Double + { + return Double(_dataSets.count) * (self.barWidth + barSpace) + groupSpace + } + +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift new file mode 100644 index 0000000..5c60dab --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift @@ -0,0 +1,247 @@ +// +// BarChartDataEntry.swift +// Charts +// +// 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 + +open class BarChartDataEntry: ChartDataEntry +{ + /// the values the stacked barchart holds + private var _yVals: [Double]? + + /// the ranges for the individual stack values - automatically calculated + private var _ranges: [Range]? + + /// the sum of all negative values this entry (if stacked) contains + private var _negativeSum: Double = 0.0 + + /// the sum of all positive values this entry (if stacked) contains + private var _positiveSum: Double = 0.0 + + public required init() + { + super.init() + } + + /// Constructor for normal bars (not stacked). + public override init(x: Double, y: Double) + { + super.init(x: x, y: y) + } + + /// Constructor for normal bars (not stacked). + public override init(x: Double, y: Double, data: AnyObject?) + { + super.init(x: x, y: y, data: data) + } + + /// Constructor for normal bars (not stacked). + public override init(x: Double, y: Double, icon: NSUIImage?) + { + super.init(x: x, y: y, icon: icon) + } + + /// Constructor for normal bars (not stacked). + public override init(x: Double, y: Double, icon: NSUIImage?, data: AnyObject?) + { + super.init(x: x, y: y, icon: icon, data: data) + } + + /// Constructor for stacked bar entries. + @objc public init(x: Double, yValues: [Double]) + { + super.init(x: x, y: BarChartDataEntry.calcSum(values: yValues)) + self._yVals = yValues + calcPosNegSum() + calcRanges() + } + + /// Constructor for stacked bar entries. One data object for whole stack + @objc public init(x: Double, yValues: [Double], data: AnyObject?) + { + super.init(x: x, y: BarChartDataEntry.calcSum(values: yValues), data: data) + self._yVals = yValues + calcPosNegSum() + calcRanges() + } + + /// Constructor for stacked bar entries. One data object for whole stack + @objc public init(x: Double, yValues: [Double], icon: NSUIImage?, data: AnyObject?) + { + super.init(x: x, y: BarChartDataEntry.calcSum(values: yValues), icon: icon, data: data) + self._yVals = yValues + calcPosNegSum() + calcRanges() + } + + /// Constructor for stacked bar entries. One data object for whole stack + @objc public init(x: Double, yValues: [Double], icon: NSUIImage?) + { + super.init(x: x, y: BarChartDataEntry.calcSum(values: yValues), icon: icon) + self._yVals = yValues + calcPosNegSum() + calcRanges() + } + + @objc open func sumBelow(stackIndex :Int) -> Double + { + guard let yVals = _yVals else + { + return 0 + } + + var remainder: Double = 0.0 + var index = yVals.count - 1 + + while (index > stackIndex && index >= 0) + { + remainder += yVals[index] + index -= 1 + } + + return remainder + } + + /// - returns: The sum of all negative values this entry (if stacked) contains. (this is a positive number) + @objc open var negativeSum: Double + { + return _negativeSum + } + + /// - returns: The sum of all positive values this entry (if stacked) contains. + @objc open var positiveSum: Double + { + return _positiveSum + } + + @objc open func calcPosNegSum() + { + guard let _yVals = _yVals else + { + _positiveSum = 0.0 + _negativeSum = 0.0 + return + } + + var sumNeg: Double = 0.0 + var sumPos: Double = 0.0 + + for f in _yVals + { + if f < 0.0 + { + sumNeg += -f + } + else + { + sumPos += f + } + } + + _negativeSum = sumNeg + _positiveSum = sumPos + } + + /// Splits up the stack-values of the given bar-entry into Range objects. + /// - parameter entry: + /// - returns: + @objc open func calcRanges() + { + let values = yValues + if values?.isEmpty != false + { + return + } + + if _ranges == nil + { + _ranges = [Range]() + } + else + { + _ranges?.removeAll() + } + + _ranges?.reserveCapacity(values!.count) + + var negRemain = -negativeSum + var posRemain: Double = 0.0 + + for i in 0 ..< values!.count + { + let value = values![i] + + if value < 0 + { + _ranges?.append(Range(from: negRemain, to: negRemain - value)) + negRemain -= value + } + else + { + _ranges?.append(Range(from: posRemain, to: posRemain + value)) + posRemain += value + } + } + } + + // MARK: Accessors + + /// the values the stacked barchart holds + @objc open var isStacked: Bool { return _yVals != nil } + + /// the values the stacked barchart holds + @objc open var yValues: [Double]? + { + get { return self._yVals } + set + { + self.y = BarChartDataEntry.calcSum(values: newValue) + self._yVals = newValue + calcPosNegSum() + calcRanges() + } + } + + /// - returns: The ranges of the individual stack-entries. Will return null if this entry is not stacked. + @objc open var ranges: [Range]? + { + return _ranges + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! BarChartDataEntry + copy._yVals = _yVals + copy.y = y + copy._negativeSum = _negativeSum + return copy + } + + /// Calculates the sum across all values of the given stack. + /// + /// - parameter vals: + /// - returns: + private static func calcSum(values: [Double]?) -> Double + { + guard let values = values + else { return 0.0 } + + var sum = 0.0 + + for f in values + { + sum += f + } + + return sum + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift new file mode 100644 index 0000000..27ed7a5 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift @@ -0,0 +1,165 @@ +// +// BarChartDataSet.swift +// Charts +// +// 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 + + +open class BarChartDataSet: BarLineScatterCandleBubbleChartDataSet, IBarChartDataSet +{ + private func initialize() + { + self.highlightColor = NSUIColor.black + + self.calcStackSize(entries: values as! [BarChartDataEntry]) + self.calcEntryCountIncludingStacks(entries: values as! [BarChartDataEntry]) + } + + public required init() + { + super.init() + initialize() + } + + public override init(values: [ChartDataEntry]?, label: String?) + { + super.init(values: values, label: label) + initialize() + } + + // MARK: - Data functions and accessors + + /// 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 + + /// the overall entry count, including counting each stack-value individually + private var _entryCountStacks = 0 + + /// Calculates the total number of entries this DataSet represents, including + /// stacks. All values belonging to a stack are calculated separately. + private func calcEntryCountIncludingStacks(entries: [BarChartDataEntry]) + { + _entryCountStacks = 0 + + for i in 0 ..< entries.count + { + if let vals = entries[i].yValues + { + _entryCountStacks += vals.count + } + else + { + _entryCountStacks += 1 + } + } + } + + /// calculates the maximum stacksize that occurs in the Entries array of this DataSet + private func calcStackSize(entries: [BarChartDataEntry]) + { + for i in 0 ..< entries.count + { + if let vals = entries[i].yValues + { + if vals.count > _stackSize + { + _stackSize = vals.count + } + } + } + } + + open override func calcMinMax(entry e: ChartDataEntry) + { + guard let e = e as? BarChartDataEntry + else { return } + + if !e.y.isNaN + { + if e.yValues == nil + { + if e.y < _yMin + { + _yMin = e.y + } + + if e.y > _yMax + { + _yMax = e.y + } + } + else + { + if -e.negativeSum < _yMin + { + _yMin = -e.negativeSum + } + + if e.positiveSum > _yMax + { + _yMax = e.positiveSum + } + } + + calcMinMaxX(entry: e) + } + } + + /// - returns: The maximum number of bars that can be stacked upon another in this DataSet. + open var stackSize: Int + { + return _stackSize + } + + /// - returns: `true` if this DataSet is stacked (stacksize > 1) or not. + open var isStacked: Bool + { + return _stackSize > 1 ? true : false + } + + /// - returns: The overall entry count, including counting each stack-value individually + @objc open var entryCountStacks: Int + { + return _entryCountStacks + } + + /// array of labels used to describe the different values of the stacked bars + open var stackLabels: [String] = ["Stack"] + + // MARK: - Styling functions and accessors + + /// the color used for drawing the bar-shadows. The bar shadows is a surface behind the bar that indicates the maximum value + open 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. + open var barBorderWidth : CGFloat = 0.0 + + /// the color drawing borders around the bars. + open var barBorderColor = NSUIColor.black + + /// the alpha value (transparency) that is used for drawing the highlight indicator bar. min = 0.0 (fully transparent), max = 1.0 (fully opaque) + open var highlightAlpha = CGFloat(120.0 / 255.0) + + // MARK: - NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! BarChartDataSet + copy._stackSize = _stackSize + copy._entryCountStacks = _entryCountStacks + copy.stackLabels = stackLabels + + copy.barShadowColor = barShadowColor + copy.highlightAlpha = highlightAlpha + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift new file mode 100644 index 0000000..c98bb1d --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift @@ -0,0 +1,25 @@ +// +// BarLineScatterCandleBubbleChartData.swift +// Charts +// +// 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 + +open class BarLineScatterCandleBubbleChartData: ChartData +{ + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift new file mode 100644 index 0000000..02b942f --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift @@ -0,0 +1,38 @@ +// +// BarLineScatterCandleBubbleChartDataSet.swift +// Charts +// +// 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 + + +open class BarLineScatterCandleBubbleChartDataSet: ChartDataSet, IBarLineScatterCandleBubbleChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + open var highlightColor = NSUIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) + open var highlightLineWidth = CGFloat(0.5) + open var highlightLineDashPhase = CGFloat(0.0) + open var highlightLineDashLengths: [CGFloat]? + + // MARK: - NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! BarLineScatterCandleBubbleChartDataSet + copy.highlightColor = highlightColor + copy.highlightLineWidth = highlightLineWidth + copy.highlightLineDashPhase = highlightLineDashPhase + copy.highlightLineDashLengths = highlightLineDashLengths + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartData.swift new file mode 100644 index 0000000..433f384 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartData.swift @@ -0,0 +1,32 @@ +// +// BubbleChartData.swift +// Charts +// +// Bubble chart implementation: +// Copyright 2015 Pierre-Marc Airoldi +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// + +import Foundation +import CoreGraphics + +open class BubbleChartData: BarLineScatterCandleBubbleChartData +{ + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } + + /// Sets the width of the circle that surrounds the bubble when highlighted for all DataSet objects this data object contains + @objc open func setHighlightCircleWidth(_ width: CGFloat) + { + (_dataSets as? [IBubbleChartDataSet])?.forEach { $0.highlightCircleWidth = width } + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift new file mode 100644 index 0000000..7f412d7 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift @@ -0,0 +1,77 @@ +// +// BubbleDataEntry.swift +// Charts +// +// Bubble chart implementation: +// Copyright 2015 Pierre-Marc Airoldi +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// + +import Foundation +import CoreGraphics + +open class BubbleChartDataEntry: ChartDataEntry +{ + /// The size of the bubble. + @objc open var size = CGFloat(0.0) + + public required init() + { + super.init() + } + + /// - parameter x: The index on the x-axis. + /// - parameter y: The value on the y-axis. + /// - parameter size: The size of the bubble. + @objc public init(x: Double, y: Double, size: CGFloat) + { + super.init(x: x, y: y) + + self.size = size + } + + /// - parameter x: The index on the x-axis. + /// - parameter y: The value on the y-axis. + /// - parameter size: The size of the bubble. + /// - parameter data: Spot for additional data this Entry represents. + @objc public init(x: Double, y: Double, size: CGFloat, data: AnyObject?) + { + super.init(x: x, y: y, data: data) + + self.size = size + } + + /// - parameter x: The index on the x-axis. + /// - parameter y: The value on the y-axis. + /// - parameter size: The size of the bubble. + /// - parameter icon: icon image + @objc public init(x: Double, y: Double, size: CGFloat, icon: NSUIImage?) + { + super.init(x: x, y: y, icon: icon) + + self.size = size + } + + /// - parameter x: The index on the x-axis. + /// - parameter y: The value on the y-axis. + /// - parameter size: The size of the bubble. + /// - parameter icon: icon image + /// - parameter data: Spot for additional data this Entry represents. + @objc public init(x: Double, y: Double, size: CGFloat, icon: NSUIImage?, data: AnyObject?) + { + super.init(x: x, y: y, icon: icon, data: data) + + self.size = size + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! BubbleChartDataEntry + copy.size = size + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift new file mode 100644 index 0000000..cdc3567 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift @@ -0,0 +1,57 @@ +// +// BubbleChartDataSet.swift +// Charts +// +// Bubble chart implementation: +// Copyright 2015 Pierre-Marc Airoldi +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// + +import Foundation +import CoreGraphics + + +open class BubbleChartDataSet: BarLineScatterCandleBubbleChartDataSet, IBubbleChartDataSet +{ + // MARK: - Data functions and accessors + + internal var _maxSize = CGFloat(0.0) + + open var maxSize: CGFloat { return _maxSize } + @objc open var normalizeSizeEnabled: Bool = true + open var isNormalizeSizeEnabled: Bool { return normalizeSizeEnabled } + + open override func calcMinMax(entry e: ChartDataEntry) + { + guard let e = e as? BubbleChartDataEntry + else { return } + + super.calcMinMax(entry: e) + + let size = e.size + + if size > _maxSize + { + _maxSize = size + } + } + + // MARK: - Styling functions and accessors + + /// Sets/gets the width of the circle that surrounds the bubble when highlighted + open var highlightCircleWidth: CGFloat = 2.5 + + // MARK: - NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! BubbleChartDataSet + copy._xMin = _xMin + copy._xMax = _xMax + copy._maxSize = _maxSize + copy.highlightCircleWidth = highlightCircleWidth + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartData.swift new file mode 100644 index 0000000..5158668 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartData.swift @@ -0,0 +1,25 @@ +// +// CandleChartData.swift +// Charts +// +// 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 + +open class CandleChartData: BarLineScatterCandleBubbleChartData +{ + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift new file mode 100644 index 0000000..538066a --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift @@ -0,0 +1,109 @@ +// +// CandleChartDataEntry.swift +// Charts +// +// 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 + +open class CandleChartDataEntry: ChartDataEntry +{ + /// shadow-high value + @objc open var high = Double(0.0) + + /// shadow-low value + @objc open var low = Double(0.0) + + /// close value + @objc open var close = Double(0.0) + + /// open value + @objc open var open = Double(0.0) + + public required init() + { + super.init() + } + + @objc public init(x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double) + { + super.init(x: x, y: (shadowH + shadowL) / 2.0) + + self.high = shadowH + self.low = shadowL + self.open = open + self.close = close + } + + @objc public init(x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double, data: AnyObject?) + { + super.init(x: x, y: (shadowH + shadowL) / 2.0, data: data) + + self.high = shadowH + self.low = shadowL + self.open = open + self.close = close + } + + @objc public init(x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double, icon: NSUIImage?) + { + super.init(x: x, y: (shadowH + shadowL) / 2.0, icon: icon) + + self.high = shadowH + self.low = shadowL + self.open = open + self.close = close + } + + @objc public init(x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double, icon: NSUIImage?, data: AnyObject?) + { + super.init(x: x, y: (shadowH + shadowL) / 2.0, icon: icon, data: data) + + self.high = shadowH + self.low = shadowL + self.open = open + self.close = close + } + + /// - returns: The overall range (difference) between shadow-high and shadow-low. + @objc open var shadowRange: Double + { + return abs(high - low) + } + + /// - returns: The body size (difference between open and close). + @objc open var bodyRange: Double + { + return abs(open - close) + } + + /// the center value of the candle. (Middle value between high and low) + open override var y: Double + { + get + { + return super.y + } + set + { + super.y = (high + low) / 2.0 + } + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! CandleChartDataEntry + copy.high = high + copy.low = low + copy.open = open + copy.close = close + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift new file mode 100644 index 0000000..852e65d --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift @@ -0,0 +1,147 @@ +// +// CandleChartDataSet.swift +// Charts +// +// 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 + + +open class CandleChartDataSet: LineScatterCandleRadarChartDataSet, ICandleChartDataSet +{ + + public required init() + { + super.init() + } + + public override init(values: [ChartDataEntry]?, label: String?) + { + super.init(values: values, label: label) + } + + // MARK: - Data functions and accessors + + open override func calcMinMax(entry e: ChartDataEntry) + { + guard let e = e as? CandleChartDataEntry + else { return } + + if e.low < _yMin + { + _yMin = e.low + } + + if e.high > _yMax + { + _yMax = e.high + } + + calcMinMaxX(entry: e) + } + + open override func calcMinMaxY(entry e: ChartDataEntry) + { + guard let e = e as? CandleChartDataEntry + else { return } + + if e.high < _yMin + { + _yMin = e.high + } + if e.high > _yMax + { + _yMax = e.high + } + + if e.low < _yMin + { + _yMin = e.low + } + if e.low > _yMax + { + _yMax = e.low + } + } + + // 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 + open 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 + open var showCandleBar: Bool = true + + /// the width of the candle-shadow-line in pixels. + /// + /// **default**: 1.5 + open var shadowWidth = CGFloat(1.5) + + /// the color of the shadow line + open var shadowColor: NSUIColor? + + /// use candle color for the shadow + open var shadowColorSameAsCandle = false + + /// Is the shadow color same as the candle color? + open var isShadowColorSameAsCandle: Bool { return shadowColorSameAsCandle } + + /// color for open == close + open var neutralColor: NSUIColor? + + /// color for open > close + open var increasingColor: NSUIColor? + + /// color for open < close + open var decreasingColor: NSUIColor? + + /// Are increasing values drawn as filled? + /// increasing candlesticks are traditionally hollow + open var increasingFilled = false + + /// Are increasing values drawn as filled? + open var isIncreasingFilled: Bool { return increasingFilled } + + /// Are decreasing values drawn as filled? + /// descreasing candlesticks are traditionally filled + open var decreasingFilled = true + + /// Are decreasing values drawn as filled? + open var isDecreasingFilled: Bool { return decreasingFilled } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartData.swift new file mode 100644 index 0000000..3b9851a --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartData.swift @@ -0,0 +1,759 @@ +// +// ChartData.swift +// Charts +// +// 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 + +open class ChartData: NSObject +{ + internal var _yMax: Double = -Double.greatestFiniteMagnitude + internal var _yMin: Double = Double.greatestFiniteMagnitude + internal var _xMax: Double = -Double.greatestFiniteMagnitude + internal var _xMin: Double = Double.greatestFiniteMagnitude + internal var _leftAxisMax: Double = -Double.greatestFiniteMagnitude + internal var _leftAxisMin: Double = Double.greatestFiniteMagnitude + internal var _rightAxisMax: Double = -Double.greatestFiniteMagnitude + internal var _rightAxisMin: Double = Double.greatestFiniteMagnitude + + internal var _dataSets = [IChartDataSet]() + + public override init() + { + super.init() + + _dataSets = [IChartDataSet]() + } + + @objc public init(dataSets: [IChartDataSet]?) + { + super.init() + + _dataSets = dataSets ?? [IChartDataSet]() + + self.initialize(dataSets: _dataSets) + } + + @objc public convenience init(dataSet: IChartDataSet?) + { + self.init(dataSets: dataSet === nil ? nil : [dataSet!]) + } + + internal func initialize(dataSets: [IChartDataSet]) + { + notifyDataChanged() + } + + /// Call this method to let the ChartData know that the underlying data has changed. + /// Calling this performs all necessary recalculations needed when the contained data has changed. + @objc open func notifyDataChanged() + { + calcMinMax() + } + + @objc open func calcMinMaxY(fromX: Double, toX: Double) + { + for set in _dataSets + { + set.calcMinMaxY(fromX: fromX, toX: toX) + } + + // apply the new data + calcMinMax() + } + + /// calc minimum and maximum y value over all datasets + @objc open func calcMinMax() + { + _yMax = -Double.greatestFiniteMagnitude + _yMin = Double.greatestFiniteMagnitude + _xMax = -Double.greatestFiniteMagnitude + _xMin = Double.greatestFiniteMagnitude + + for set in _dataSets + { + calcMinMax(dataSet: set) + } + + _leftAxisMax = -Double.greatestFiniteMagnitude + _leftAxisMin = Double.greatestFiniteMagnitude + _rightAxisMax = -Double.greatestFiniteMagnitude + _rightAxisMin = Double.greatestFiniteMagnitude + + // left axis + let firstLeft = getFirstLeft(dataSets: dataSets) + + if firstLeft !== nil + { + _leftAxisMax = firstLeft!.yMax + _leftAxisMin = firstLeft!.yMin + + for dataSet in _dataSets + { + if dataSet.axisDependency == .left + { + if dataSet.yMin < _leftAxisMin + { + _leftAxisMin = dataSet.yMin + } + + if dataSet.yMax > _leftAxisMax + { + _leftAxisMax = dataSet.yMax + } + } + } + } + + // right axis + let firstRight = getFirstRight(dataSets: dataSets) + + if firstRight !== nil + { + _rightAxisMax = firstRight!.yMax + _rightAxisMin = firstRight!.yMin + + for dataSet in _dataSets + { + if dataSet.axisDependency == .right + { + if dataSet.yMin < _rightAxisMin + { + _rightAxisMin = dataSet.yMin + } + + if dataSet.yMax > _rightAxisMax + { + _rightAxisMax = dataSet.yMax + } + } + } + } + } + + /// Adjusts the current minimum and maximum values based on the provided Entry object. + @objc open func calcMinMax(entry e: ChartDataEntry, axis: YAxis.AxisDependency) + { + if _yMax < e.y + { + _yMax = e.y + } + + if _yMin > e.y + { + _yMin = e.y + } + + if _xMax < e.x + { + _xMax = e.x + } + + if _xMin > e.x + { + _xMin = e.x + } + + if axis == .left + { + if _leftAxisMax < e.y + { + _leftAxisMax = e.y + } + + if _leftAxisMin > e.y + { + _leftAxisMin = e.y + } + } + else + { + if _rightAxisMax < e.y + { + _rightAxisMax = e.y + } + + if _rightAxisMin > e.y + { + _rightAxisMin = e.y + } + } + } + + /// Adjusts the minimum and maximum values based on the given DataSet. + @objc open func calcMinMax(dataSet d: IChartDataSet) + { + if _yMax < d.yMax + { + _yMax = d.yMax + } + + if _yMin > d.yMin + { + _yMin = d.yMin + } + + if _xMax < d.xMax + { + _xMax = d.xMax + } + + if _xMin > d.xMin + { + _xMin = d.xMin + } + + if d.axisDependency == .left + { + if _leftAxisMax < d.yMax + { + _leftAxisMax = d.yMax + } + + if _leftAxisMin > d.yMin + { + _leftAxisMin = d.yMin + } + } + else + { + if _rightAxisMax < d.yMax + { + _rightAxisMax = d.yMax + } + + if _rightAxisMin > d.yMin + { + _rightAxisMin = d.yMin + } + } + } + + /// - returns: The number of LineDataSets this object contains + @objc open var dataSetCount: Int + { + return _dataSets.count + } + + /// - returns: The smallest y-value the data object contains. + @objc open var yMin: Double + { + return _yMin + } + + @nonobjc + open func getYMin() -> Double + { + return _yMin + } + + @objc open func getYMin(axis: YAxis.AxisDependency) -> Double + { + if axis == .left + { + if _leftAxisMin == Double.greatestFiniteMagnitude + { + return _rightAxisMin + } + else + { + return _leftAxisMin + } + } + else + { + if _rightAxisMin == Double.greatestFiniteMagnitude + { + return _leftAxisMin + } + else + { + return _rightAxisMin + } + } + } + + /// - returns: The greatest y-value the data object contains. + @objc open var yMax: Double + { + return _yMax + } + + @nonobjc + open func getYMax() -> Double + { + return _yMax + } + + @objc open func getYMax(axis: YAxis.AxisDependency) -> Double + { + if axis == .left + { + if _leftAxisMax == -Double.greatestFiniteMagnitude + { + return _rightAxisMax + } + else + { + return _leftAxisMax + } + } + else + { + if _rightAxisMax == -Double.greatestFiniteMagnitude + { + return _leftAxisMax + } + else + { + return _rightAxisMax + } + } + } + + /// - returns: The minimum x-value the data object contains. + @objc open var xMin: Double + { + return _xMin + } + /// - returns: The maximum x-value the data object contains. + @objc open var xMax: Double + { + return _xMax + } + + /// - returns: All DataSet objects this ChartData object holds. + @objc open var dataSets: [IChartDataSet] + { + get + { + return _dataSets + } + set + { + _dataSets = newValue + notifyDataChanged() + } + } + + /// Retrieve the index of a ChartDataSet with a specific label from the ChartData. Search can be case sensitive or not. + /// + /// **IMPORTANT: This method does calculations at runtime, do not over-use in performance critical situations.** + /// + /// - parameter dataSets: the DataSet array to search + /// - parameter type: + /// - parameter ignorecase: if true, the search is not case-sensitive + /// - returns: The index of the DataSet Object with the given label. Sensitive or not. + internal func getDataSetIndexByLabel(_ label: String, ignorecase: Bool) -> Int + { + if ignorecase + { + for i in 0 ..< dataSets.count + { + if dataSets[i].label == nil + { + continue + } + if (label.caseInsensitiveCompare(dataSets[i].label!) == ComparisonResult.orderedSame) + { + return i + } + } + } + else + { + for i in 0 ..< dataSets.count + { + if label == dataSets[i].label + { + return i + } + } + } + + return -1 + } + + /// - returns: The labels of all DataSets as a string array. + internal func dataSetLabels() -> [String] + { + var types = [String]() + + for i in 0 ..< _dataSets.count + { + if dataSets[i].label == nil + { + continue + } + + types[i] = _dataSets[i].label! + } + + return types + } + + /// Get the Entry for a corresponding highlight object + /// + /// - parameter highlight: + /// - returns: The entry that is highlighted + @objc open func entryForHighlight(_ highlight: Highlight) -> ChartDataEntry? + { + if highlight.dataSetIndex >= dataSets.count + { + return nil + } + else + { + return dataSets[highlight.dataSetIndex].entryForXValue(highlight.x, closestToY: highlight.y) + } + } + + /// **IMPORTANT: This method does calculations at runtime. Use with care in performance critical situations.** + /// + /// - parameter label: + /// - parameter ignorecase: + /// - returns: The DataSet Object with the given label. Sensitive or not. + @objc open func getDataSetByLabel(_ label: String, ignorecase: Bool) -> IChartDataSet? + { + let index = getDataSetIndexByLabel(label, ignorecase: ignorecase) + + if index < 0 || index >= _dataSets.count + { + return nil + } + else + { + return _dataSets[index] + } + } + + @objc open func getDataSetByIndex(_ index: Int) -> IChartDataSet! + { + if index < 0 || index >= _dataSets.count + { + return nil + } + + return _dataSets[index] + } + + @objc open func addDataSet(_ dataSet: IChartDataSet!) + { + calcMinMax(dataSet: dataSet) + + _dataSets.append(dataSet) + } + + /// Removes the given DataSet from this data object. + /// Also recalculates all minimum and maximum values. + /// + /// - returns: `true` if a DataSet was removed, `false` ifno DataSet could be removed. + @objc @discardableResult open func removeDataSet(_ dataSet: IChartDataSet!) -> Bool + { + if dataSet === nil + { + return false + } + + for i in 0 ..< _dataSets.count + { + if _dataSets[i] === dataSet + { + return removeDataSetByIndex(i) + } + } + + return false + } + + /// Removes the DataSet at the given index in the DataSet array from the data object. + /// Also recalculates all minimum and maximum values. + /// + /// - returns: `true` if a DataSet was removed, `false` ifno DataSet could be removed. + @objc @discardableResult open func removeDataSetByIndex(_ index: Int) -> Bool + { + if index >= _dataSets.count || index < 0 + { + return false + } + + _dataSets.remove(at: index) + + calcMinMax() + + return true + } + + /// Adds an Entry to the DataSet at the specified index. Entries are added to the end of the list. + @objc open func addEntry(_ e: ChartDataEntry, dataSetIndex: Int) + { + if _dataSets.count > dataSetIndex && dataSetIndex >= 0 + { + let set = _dataSets[dataSetIndex] + + if !set.addEntry(e) { return } + + calcMinMax(entry: e, axis: set.axisDependency) + } + else + { + print("ChartData.addEntry() - Cannot add Entry because dataSetIndex too high or too low.", terminator: "\n") + } + } + + /// Removes the given Entry object from the DataSet at the specified index. + @objc @discardableResult open func removeEntry(_ entry: ChartDataEntry, dataSetIndex: Int) -> Bool + { + // entry outofbounds + if dataSetIndex >= _dataSets.count + { + return false + } + + // remove the entry from the dataset + let removed = _dataSets[dataSetIndex].removeEntry(entry) + + if removed + { + calcMinMax() + } + + return removed + } + + /// Removes the Entry object closest to the given xIndex from the ChartDataSet at the + /// specified index. + /// - returns: `true` if an entry was removed, `false` ifno Entry was found that meets the specified requirements. + @objc @discardableResult open func removeEntry(xValue: Double, dataSetIndex: Int) -> Bool + { + if dataSetIndex >= _dataSets.count + { + return false + } + + if let entry = _dataSets[dataSetIndex].entryForXValue(xValue, closestToY: Double.nan) + { + return removeEntry(entry, dataSetIndex: dataSetIndex) + } + + return false + } + + /// - returns: The DataSet that contains the provided Entry, or null, if no DataSet contains this entry. + @objc open func getDataSetForEntry(_ e: ChartDataEntry!) -> IChartDataSet? + { + if e == nil + { + return nil + } + + for i in 0 ..< _dataSets.count + { + let set = _dataSets[i] + + if e === set.entryForXValue(e.x, closestToY: e.y) + { + return set + } + } + + return nil + } + + /// - returns: The index of the provided DataSet in the DataSet array of this data object, or -1 if it does not exist. + @objc open func indexOfDataSet(_ dataSet: IChartDataSet) -> Int + { + for i in 0 ..< _dataSets.count + { + if _dataSets[i] === dataSet + { + return i + } + } + + return -1 + } + + /// - returns: The first DataSet from the datasets-array that has it's dependency on the left axis. Returns null if no DataSet with left dependency could be found. + @objc open func getFirstLeft(dataSets: [IChartDataSet]) -> IChartDataSet? + { + for dataSet in dataSets + { + if dataSet.axisDependency == .left + { + return dataSet + } + } + + return nil + } + + /// - returns: The first DataSet from the datasets-array that has it's dependency on the right axis. Returns null if no DataSet with right dependency could be found. + @objc open func getFirstRight(dataSets: [IChartDataSet]) -> IChartDataSet? + { + for dataSet in _dataSets + { + if dataSet.axisDependency == .right + { + return dataSet + } + } + + return nil + } + + /// - returns: All colors used across all DataSet objects this object represents. + @objc open func getColors() -> [NSUIColor]? + { + var clrcnt = 0 + + for i in 0 ..< _dataSets.count + { + clrcnt += _dataSets[i].colors.count + } + + var colors = [NSUIColor]() + + for i in 0 ..< _dataSets.count + { + let clrs = _dataSets[i].colors + + for clr in clrs + { + colors.append(clr) + } + } + + return colors + } + + /// Sets a custom IValueFormatter for all DataSets this data object contains. + @objc open func setValueFormatter(_ formatter: IValueFormatter?) + { + guard let formatter = formatter + else { return } + + for set in dataSets + { + set.valueFormatter = formatter + } + } + + /// Sets the color of the value-text (color in which the value-labels are drawn) for all DataSets this data object contains. + @objc open func setValueTextColor(_ color: NSUIColor!) + { + for set in dataSets + { + set.valueTextColor = color ?? set.valueTextColor + } + } + + /// Sets the font for all value-labels for all DataSets this data object contains. + @objc open func setValueFont(_ font: NSUIFont!) + { + for set in dataSets + { + set.valueFont = font ?? set.valueFont + } + } + + /// Enables / disables drawing values (value-text) for all DataSets this data object contains. + @objc open func setDrawValues(_ enabled: Bool) + { + for set in dataSets + { + set.drawValuesEnabled = enabled + } + } + + /// Enables / disables highlighting values for all DataSets this data object contains. + /// If set to true, this means that values can be highlighted programmatically or by touch gesture. + @objc open var highlightEnabled: Bool + { + get + { + for set in dataSets + { + if !set.highlightEnabled + { + return false + } + } + + return true + } + set + { + for set in dataSets + { + set.highlightEnabled = newValue + } + } + } + + /// if true, value highlightning is enabled + @objc open var isHighlightEnabled: Bool { return highlightEnabled } + + /// Clears this data object from all DataSets and removes all Entries. + /// Don't forget to invalidate the chart after this. + @objc open func clearValues() + { + dataSets.removeAll(keepingCapacity: false) + notifyDataChanged() + } + + /// Checks if this data object contains the specified DataSet. + /// - returns: `true` if so, `false` ifnot. + @objc open func contains(dataSet: IChartDataSet) -> Bool + { + for set in dataSets + { + if set === dataSet + { + return true + } + } + + return false + } + + /// - returns: The total entry count across all DataSet objects this data object contains. + @objc open var entryCount: Int + { + var count = 0 + + for set in _dataSets + { + count += set.entryCount + } + + return count + } + + /// - returns: The DataSet object with the maximum number of entries or null if there are no DataSets. + @objc open var maxEntryCountSet: IChartDataSet? + { + if _dataSets.count == 0 + { + return nil + } + + var max = _dataSets[0] + + for set in _dataSets + { + if set.entryCount > max.entryCount + { + max = set + } + } + + return max + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift new file mode 100644 index 0000000..9021c56 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift @@ -0,0 +1,108 @@ +// +// ChartDataEntry.swift +// Charts +// +// 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 + +open class ChartDataEntry: ChartDataEntryBase +{ + /// the x value + @objc open var x = Double(0.0) + + public required init() + { + super.init() + } + + /// An Entry represents one single entry in the chart. + /// - parameter x: the x value + /// - parameter y: the y value (the actual value of the entry) + @objc public init(x: Double, y: Double) + { + super.init(y: y) + + self.x = x + } + + /// An Entry represents one single entry in the chart. + /// - parameter x: the x value + /// - parameter y: the y value (the actual value of the entry) + /// - parameter data: Space for additional data this Entry represents. + + @objc public init(x: Double, y: Double, data: AnyObject?) + { + super.init(y: y) + + self.x = x + + self.data = data + } + + /// An Entry represents one single entry in the chart. + /// - parameter x: the x value + /// - parameter y: the y value (the actual value of the entry) + /// - parameter icon: icon image + + @objc public init(x: Double, y: Double, icon: NSUIImage?) + { + super.init(y: y, icon: icon) + + self.x = x + } + + /// An Entry represents one single entry in the chart. + /// - parameter x: the x value + /// - parameter y: the y value (the actual value of the entry) + /// - parameter icon: icon image + /// - parameter data: Space for additional data this Entry represents. + + @objc public init(x: Double, y: Double, icon: NSUIImage?, data: AnyObject?) + { + super.init(y: y, icon: icon, data: data) + + self.x = x + } + + // MARK: NSObject + + open override var description: String + { + return "ChartDataEntry, x: \(x), y \(y)" + } + + // MARK: NSCopying + + @objc open func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = type(of: self).init() + + copy.x = x + copy.y = y + copy.data = data + + return copy + } +} + +// MARK: Equatable +extension ChartDataEntry/*: Equatable*/ { + open override func isEqual(_ object: Any?) -> Bool { + guard let object = object as? ChartDataEntry else { return false } + + if self === object + { + return true + } + + return ((data == nil && object.data == nil) || (data?.isEqual(object.data) ?? false)) + && y == object.y + && x == object.x + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift new file mode 100644 index 0000000..0dcb1c7 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift @@ -0,0 +1,95 @@ +// +// ChartDataEntryBase.swift +// Charts +// +// 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 + +open class ChartDataEntryBase: NSObject +{ + /// the y value + @objc open var y = Double(0.0) + + /// optional spot for additional data this Entry represents + @objc open var data: AnyObject? + + /// optional icon image + @objc open var icon: NSUIImage? + + public override required init() + { + super.init() + } + + /// An Entry represents one single entry in the chart. + /// - parameter y: the y value (the actual value of the entry) + @objc public init(y: Double) + { + super.init() + + self.y = y + } + + /// - parameter y: the y value (the actual value of the entry) + /// - parameter data: Space for additional data this Entry represents. + + @objc public init(y: Double, data: AnyObject?) + { + super.init() + + self.y = y + self.data = data + } + + /// - parameter y: the y value (the actual value of the entry) + /// - parameter icon: icon image + + @objc public init(y: Double, icon: NSUIImage?) + { + super.init() + + self.y = y + self.icon = icon + } + + /// - parameter y: the y value (the actual value of the entry) + /// - parameter icon: icon image + /// - parameter data: Space for additional data this Entry represents. + + @objc public init(y: Double, icon: NSUIImage?, data: AnyObject?) + { + super.init() + + self.y = y + self.icon = icon + self.data = data + } + + // MARK: NSObject + + open override var description: String + { + return "ChartDataEntryBase, y \(y)" + } +} + +// MARK: Equatable +extension ChartDataEntryBase/*: Equatable*/ { + open override func isEqual(_ object: Any?) -> Bool { + guard let object = object as? ChartDataEntryBase else { return false } + + if self === object + { + return true + } + + return ((data == nil && object.data == nil) || (data?.isEqual(object.data) ?? false)) + && y == object.y + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift new file mode 100644 index 0000000..fa21e6b --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift @@ -0,0 +1,508 @@ +// +// ChartDataSet.swift +// Charts +// +// 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 + +/// Determines how to round DataSet index values for `ChartDataSet.entryIndex(x, rounding)` when an exact x-value is not found. +@objc +public enum ChartDataSetRounding: Int +{ + case up = 0 + case down = 1 + case closest = 2 +} + +/// The DataSet class represents one group or type of entries (Entry) in the Chart that belong together. +/// It is designed to logically separate different groups of values inside the Chart (e.g. the values for a specific line in the LineChart, or the values of a specific group of bars in the BarChart). +open class ChartDataSet: ChartBaseDataSet +{ + public required init() + { + values = [] + + super.init() + } + + public override init(label: String?) + { + values = [] + + super.init(label: label) + } + + @objc public init(values: [ChartDataEntry]?, label: String?) + { + self.values = values ?? [] + + super.init(label: label) + + self.calcMinMax() + } + + @objc public convenience init(values: [ChartDataEntry]?) + { + self.init(values: values, label: "DataSet") + } + + // MARK: - Data functions and accessors + + /// * + /// - note: Calls `notifyDataSetChanged()` after setting a new value. + /// - returns: The array of y-values that this DataSet represents. + /// the entries that this dataset represents / holds together + @objc open var values: [ChartDataEntry] + { + didSet + { + if isIndirectValuesCall { + isIndirectValuesCall = false + return + } + notifyDataSetChanged() + } + } + // TODO: Temporary fix for performance. Will be removed in 4.0 + private var isIndirectValuesCall = false + + /// maximum y-value in the value array + internal var _yMax: Double = -Double.greatestFiniteMagnitude + + /// minimum y-value in the value array + internal var _yMin: Double = Double.greatestFiniteMagnitude + + /// maximum x-value in the value array + internal var _xMax: Double = -Double.greatestFiniteMagnitude + + /// minimum x-value in the value array + internal var _xMin: Double = Double.greatestFiniteMagnitude + + open override func calcMinMax() + { + _yMax = -Double.greatestFiniteMagnitude + _yMin = Double.greatestFiniteMagnitude + _xMax = -Double.greatestFiniteMagnitude + _xMin = Double.greatestFiniteMagnitude + + guard !values.isEmpty else { return } + + values.forEach { calcMinMax(entry: $0) } + } + + open override func calcMinMaxY(fromX: Double, toX: Double) + { + _yMax = -Double.greatestFiniteMagnitude + _yMin = Double.greatestFiniteMagnitude + + guard !values.isEmpty else { return } + + let indexFrom = entryIndex(x: fromX, closestToY: Double.nan, rounding: .down) + let indexTo = entryIndex(x: toX, closestToY: Double.nan, rounding: .up) + + guard !(indexTo < indexFrom) else { return } + + (indexFrom...indexTo).forEach { + // only recalculate y + calcMinMaxY(entry: values[$0]) + } + } + + @objc open func calcMinMaxX(entry e: ChartDataEntry) + { + if e.x < _xMin + { + _xMin = e.x + } + if e.x > _xMax + { + _xMax = e.x + } + } + + @objc open func calcMinMaxY(entry e: ChartDataEntry) + { + if e.y < _yMin + { + _yMin = e.y + } + if e.y > _yMax + { + _yMax = e.y + } + } + + /// Updates the min and max x and y value of this DataSet based on the given Entry. + /// + /// - parameter e: + internal func calcMinMax(entry e: ChartDataEntry) + { + calcMinMaxX(entry: e) + calcMinMaxY(entry: e) + } + + /// - returns: The minimum y-value this DataSet holds + open override var yMin: Double { return _yMin } + + /// - returns: The maximum y-value this DataSet holds + open override var yMax: Double { return _yMax } + + /// - returns: The minimum x-value this DataSet holds + open override var xMin: Double { return _xMin } + + /// - returns: The maximum x-value this DataSet holds + open override var xMax: Double { return _xMax } + + /// - returns: The number of y-values this DataSet represents + open override var entryCount: Int { return values.count } + + /// - returns: The entry object found at the given index (not x-value!) + /// - throws: out of bounds + /// if `i` is out of bounds, it may throw an out-of-bounds exception + open override func entryForIndex(_ i: Int) -> ChartDataEntry? + { + guard i >= values.startIndex, i < values.endIndex else { + return nil + } + return values[i] + } + + /// - returns: The first Entry object found at the given x-value with binary search. + /// If the no Entry at the specified x-value is found, this method returns the Entry at the closest x-value according to the rounding. + /// nil if no Entry object at that x-value. + /// - parameter xValue: the x-value + /// - parameter closestToY: If there are multiple y-values for the specified x-value, + /// - parameter rounding: determine whether to round up/down/closest if there is no Entry matching the provided x-value + open override func entryForXValue( + _ xValue: Double, + closestToY yValue: Double, + rounding: ChartDataSetRounding) -> ChartDataEntry? + { + let index = entryIndex(x: xValue, closestToY: yValue, rounding: rounding) + if index > -1 + { + return values[index] + } + return nil + } + + /// - returns: The first Entry object found at the given x-value with binary search. + /// If the no Entry at the specified x-value is found, this method returns the Entry at the closest x-value. + /// nil if no Entry object at that x-value. + /// - parameter xValue: the x-value + /// - parameter closestToY: If there are multiple y-values for the specified x-value, + open override func entryForXValue( + _ xValue: Double, + closestToY yValue: Double) -> ChartDataEntry? + { + return entryForXValue(xValue, closestToY: yValue, rounding: .closest) + } + + /// - returns: All Entry objects found at the given xIndex with binary search. + /// An empty array if no Entry object at that index. + open override func entriesForXValue(_ xValue: Double) -> [ChartDataEntry] + { + var entries = [ChartDataEntry]() + + var low = values.startIndex + var high = values.endIndex - 1 + + while low <= high + { + var m = (high + low) / 2 + var entry = values[m] + + // if we have a match + if xValue == entry.x + { + while m > 0 && values[m - 1].x == xValue + { + m -= 1 + } + + high = values.endIndex + + // loop over all "equal" entries + while m < high + { + entry = values[m] + if entry.x == xValue + { + entries.append(entry) + } + else + { + break + } + + m += 1 + } + + break + } + else + { + if xValue > entry.x + { + low = m + 1 + } + else + { + high = m - 1 + } + } + } + + return entries + } + + /// - returns: The array-index of the specified entry. + /// If the no Entry at the specified x-value is found, this method returns the index of the Entry at the closest x-value according to the rounding. + /// + /// - parameter xValue: x-value of the entry to search for + /// - parameter closestToY: If there are multiple y-values for the specified x-value, + /// - parameter rounding: Rounding method if exact value was not found + open override func entryIndex( + x xValue: Double, + closestToY yValue: Double, + rounding: ChartDataSetRounding) -> Int + { + var low = values.startIndex + var high = values.endIndex - 1 + var closest = high + + while low < high + { + let m = (low + high) / 2 + + let d1 = values[m].x - xValue + let d2 = values[m + 1].x - xValue + let ad1 = abs(d1), ad2 = abs(d2) + + if ad2 < ad1 + { + // [m + 1] is closer to xValue + // Search in an higher place + low = m + 1 + } + else if ad1 < ad2 + { + // [m] is closer to xValue + // Search in a lower place + high = m + } + else + { + // We have multiple sequential x-value with same distance + + if d1 >= 0.0 + { + // Search in a lower place + high = m + } + else if d1 < 0.0 + { + // Search in an higher place + low = m + 1 + } + } + + closest = high + } + + if closest != -1 + { + let closestXValue = values[closest].x + + if rounding == .up + { + // If rounding up, and found x-value is lower than specified x, and we can go upper... + if closestXValue < xValue && closest < values.endIndex - 1 + { + closest += 1 + } + } + else if rounding == .down + { + // If rounding down, and found x-value is upper than specified x, and we can go lower... + if closestXValue > xValue && closest > 0 + { + closest -= 1 + } + } + + // Search by closest to y-value + if !yValue.isNaN + { + while closest > 0 && values[closest - 1].x == closestXValue + { + closest -= 1 + } + + var closestYValue = values[closest].y + var closestYIndex = closest + + while true + { + closest += 1 + if closest >= values.endIndex { break } + + let value = values[closest] + + if value.x != closestXValue { break } + if abs(value.y - yValue) < abs(closestYValue - yValue) + { + closestYValue = yValue + closestYIndex = closest + } + } + + closest = closestYIndex + } + } + + return closest + } + + /// - returns: The array-index of the specified entry + /// + /// - parameter e: the entry to search for + open override func entryIndex(entry e: ChartDataEntry) -> Int + { + for i in 0 ..< values.count + { + if values[i] === e + { + return i + } + } + + return -1 + } + + /// Adds an Entry to the DataSet dynamically. + /// Entries are added to the end of the list. + /// This will also recalculate the current minimum and maximum values of the DataSet and the value-sum. + /// - parameter e: the entry to add + /// - returns: True + open override func addEntry(_ e: ChartDataEntry) -> Bool + { + calcMinMax(entry: e) + + isIndirectValuesCall = true + values.append(e) + + return true + } + + /// Adds an Entry to the DataSet dynamically. + /// Entries are added to their appropriate index respective to it's x-index. + /// This will also recalculate the current minimum and maximum values of the DataSet and the value-sum. + /// - parameter e: the entry to add + /// - returns: True + open override func addEntryOrdered(_ e: ChartDataEntry) -> Bool + { + calcMinMax(entry: e) + + isIndirectValuesCall = true + if values.count > 0 && values.last!.x > e.x + { + var closestIndex = entryIndex(x: e.x, closestToY: e.y, rounding: .up) + while values[closestIndex].x < e.x + { + closestIndex += 1 + } + values.insert(e, at: closestIndex) + } + else + { + values.append(e) + } + + return true + } + + /// Removes an Entry from the DataSet dynamically. + /// This will also recalculate the current minimum and maximum values of the DataSet and the value-sum. + /// - parameter entry: the entry to remove + /// - returns: `true` if the entry was removed successfully, else if the entry does not exist + open override func removeEntry(_ entry: ChartDataEntry) -> Bool + { + var removed = false + isIndirectValuesCall = true + + for i in 0 ..< values.count + { + if values[i] === entry + { + values.remove(at: i) + removed = true + break + } + } + + notifyDataSetChanged() + + return removed + } + + /// Removes the first Entry (at index 0) of this DataSet from the entries array. + /// + /// - returns: `true` if successful, `false` if not. + open override func removeFirst() -> Bool + { + let entry: ChartDataEntry? = values.isEmpty ? nil : values.removeFirst() + return entry != nil + } + + /// Removes the last Entry (at index size-1) of this DataSet from the entries array. + /// + /// - returns: `true` if successful, `false` if not. + open override func removeLast() -> Bool + { + let entry: ChartDataEntry? = values.isEmpty ? nil : values.removeLast() + return entry != nil + } + + /// Checks if this DataSet contains the specified Entry. + /// - returns: `true` if contains the entry, `false` if not. + open override func contains(_ e: ChartDataEntry) -> Bool + { + for entry in values + { + if entry == e + { + return true + } + } + + return false + } + + /// Removes all values from this DataSet and recalculates min and max value. + open override func clear() + { + values.removeAll(keepingCapacity: true) + } + + // MARK: - Data functions and accessors + + // MARK: - NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! ChartDataSet + + copy.values = values + copy._yMax = _yMax + copy._yMin = _yMin + + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift new file mode 100644 index 0000000..8d269ed --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift @@ -0,0 +1,320 @@ +// +// CombinedChartData.swift +// Charts +// +// 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 + +open class CombinedChartData: BarLineScatterCandleBubbleChartData +{ + private var _lineData: LineChartData! + private var _barData: BarChartData! + private var _scatterData: ScatterChartData! + private var _candleData: CandleChartData! + private var _bubbleData: BubbleChartData! + + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } + + @objc open var lineData: LineChartData! + { + get + { + return _lineData + } + set + { + _lineData = newValue + notifyDataChanged() + } + } + + @objc open var barData: BarChartData! + { + get + { + return _barData + } + set + { + _barData = newValue + notifyDataChanged() + } + } + + @objc open var scatterData: ScatterChartData! + { + get + { + return _scatterData + } + set + { + _scatterData = newValue + notifyDataChanged() + } + } + + @objc open var candleData: CandleChartData! + { + get + { + return _candleData + } + set + { + _candleData = newValue + notifyDataChanged() + } + } + + @objc open var bubbleData: BubbleChartData! + { + get + { + return _bubbleData + } + set + { + _bubbleData = newValue + notifyDataChanged() + } + } + + open override func calcMinMax() + { + _dataSets.removeAll() + + _yMax = -Double.greatestFiniteMagnitude + _yMin = Double.greatestFiniteMagnitude + _xMax = -Double.greatestFiniteMagnitude + _xMin = Double.greatestFiniteMagnitude + + _leftAxisMax = -Double.greatestFiniteMagnitude + _leftAxisMin = Double.greatestFiniteMagnitude + _rightAxisMax = -Double.greatestFiniteMagnitude + _rightAxisMin = Double.greatestFiniteMagnitude + + let allData = self.allData + + for data in allData + { + data.calcMinMax() + + let sets = data.dataSets + _dataSets.append(contentsOf: sets) + + if data.yMax > _yMax + { + _yMax = data.yMax + } + + if data.yMin < _yMin + { + _yMin = data.yMin + } + + if data.xMax > _xMax + { + _xMax = data.xMax + } + + if data.xMin < _xMin + { + _xMin = data.xMin + } + + for dataset in sets + { + if dataset.axisDependency == .left + { + if dataset.yMax > _leftAxisMax + { + _leftAxisMax = dataset.yMax + } + if dataset.yMin < _leftAxisMin + { + _leftAxisMin = dataset.yMin + } + } + else + { + if dataset.yMax > _rightAxisMax + { + _rightAxisMax = dataset.yMax + } + if dataset.yMin < _rightAxisMin + { + _rightAxisMin = dataset.yMin + } + } + } + } + } + + /// - returns: All data objects in row: line-bar-scatter-candle-bubble if not null. + @objc open var allData: [ChartData] + { + var data = [ChartData]() + + if lineData !== nil + { + data.append(lineData) + } + if barData !== nil + { + data.append(barData) + } + if scatterData !== nil + { + data.append(scatterData) + } + if candleData !== nil + { + data.append(candleData) + } + if bubbleData !== nil + { + data.append(bubbleData) + } + + return data + } + + @objc open func dataByIndex(_ index: Int) -> ChartData + { + return allData[index] + } + + open func dataIndex(_ data: ChartData) -> Int? + { + return allData.index(of: data) + } + + open override func removeDataSet(_ dataSet: IChartDataSet!) -> Bool + { + let datas = allData + + var success = false + + for data in datas + { + success = data.removeDataSet(dataSet) + + if success + { + break + } + } + + return success + } + + open override func removeDataSetByIndex(_ index: Int) -> Bool + { + print("removeDataSet(index) not supported for CombinedData", terminator: "\n") + return false + } + + open override func removeEntry(_ entry: ChartDataEntry, dataSetIndex: Int) -> Bool + { + print("removeEntry(entry, dataSetIndex) not supported for CombinedData", terminator: "\n") + return false + } + + open override func removeEntry(xValue: Double, dataSetIndex: Int) -> Bool + { + print("removeEntry(xValue, dataSetIndex) not supported for CombinedData", terminator: "\n") + return false + } + + open override func notifyDataChanged() + { + if _lineData !== nil + { + _lineData.notifyDataChanged() + } + if _barData !== nil + { + _barData.notifyDataChanged() + } + if _scatterData !== nil + { + _scatterData.notifyDataChanged() + } + if _candleData !== nil + { + _candleData.notifyDataChanged() + } + if _bubbleData !== nil + { + _bubbleData.notifyDataChanged() + } + + super.notifyDataChanged() // recalculate everything + } + + /// Get the Entry for a corresponding highlight object + /// + /// - parameter highlight: + /// - returns: The entry that is highlighted + open override func entryForHighlight(_ highlight: Highlight) -> ChartDataEntry? + { + if highlight.dataIndex >= allData.count + { + return nil + } + + let data = dataByIndex(highlight.dataIndex) + + if highlight.dataSetIndex >= data.dataSetCount + { + return nil + } + + // The value of the highlighted entry could be NaN - if we are not interested in highlighting a specific value. + let entries = data.getDataSetByIndex(highlight.dataSetIndex).entriesForXValue(highlight.x) + for e in entries + { + if e.y == highlight.y || highlight.y.isNaN + { + return e + } + } + return nil + } + + /// Get dataset for highlight + /// + /// - Parameter highlight: current highlight + /// - Returns: dataset related to highlight + @objc open func getDataSetByHighlight(_ highlight: Highlight) -> IChartDataSet! + { + if highlight.dataIndex >= allData.count + { + return nil + } + + let data = dataByIndex(highlight.dataIndex) + + if highlight.dataSetIndex >= data.dataSetCount + { + return nil + } + + return data.dataSets[highlight.dataSetIndex] + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartData.swift new file mode 100644 index 0000000..2ebd6b4 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartData.swift @@ -0,0 +1,26 @@ +// +// LineChartData.swift +// Charts +// +// 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 + +/// Data object that encapsulates all data associated with a LineChart. +open class LineChartData: ChartData +{ + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift new file mode 100644 index 0000000..c41dd6a --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift @@ -0,0 +1,178 @@ +// +// LineChartDataSet.swift +// Charts +// +// 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 + + +open class LineChartDataSet: LineRadarChartDataSet, ILineChartDataSet +{ + @objc(LineChartMode) + public enum Mode: Int + { + case linear + case stepped + case cubicBezier + case horizontalBezier + } + + private func initialize() + { + // default color + circleColors.append(NSUIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) + } + + public required init() + { + super.init() + initialize() + } + + public override init(values: [ChartDataEntry]?, label: String?) + { + super.init(values: values, label: label) + initialize() + } + + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// The drawing mode for this line dataset + /// + /// **default**: Linear + open var mode: Mode = Mode.linear + + private var _cubicIntensity = CGFloat(0.2) + + /// Intensity for cubic lines (min = 0.05, max = 1) + /// + /// **default**: 0.2 + open var cubicIntensity: CGFloat + { + get + { + return _cubicIntensity + } + set + { + _cubicIntensity = newValue + if _cubicIntensity > 1.0 + { + _cubicIntensity = 1.0 + } + if _cubicIntensity < 0.05 + { + _cubicIntensity = 0.05 + } + } + } + + /// The radius of the drawn circles. + open var circleRadius = CGFloat(8.0) + + /// The hole radius of the drawn circles + open var circleHoleRadius = CGFloat(4.0) + + open var circleColors = [NSUIColor]() + + /// - returns: The color at the given index of the DataSet's circle-color array. + /// Performs a IndexOutOfBounds check by modulus. + open func getCircleColor(atIndex 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. + open func setCircleColor(_ color: NSUIColor) + { + circleColors.removeAll(keepingCapacity: false) + circleColors.append(color) + } + + open func setCircleColors(_ colors: NSUIColor...) + { + circleColors.removeAll(keepingCapacity: false) + circleColors.append(contentsOf: colors) + } + + /// Resets the circle-colors array and creates a new one + open func resetCircleColors(_ index: Int) + { + circleColors.removeAll(keepingCapacity: false) + } + + /// If true, drawing circles is enabled + open var drawCirclesEnabled = true + + /// - returns: `true` if drawing circles for this DataSet is enabled, `false` ifnot + open var isDrawCirclesEnabled: Bool { return drawCirclesEnabled } + + /// The color of the inner circle (the circle-hole). + open var circleHoleColor: NSUIColor? = NSUIColor.white + + /// `true` if drawing circles for this DataSet is enabled, `false` ifnot + open var drawCircleHoleEnabled = true + + /// - returns: `true` if drawing the circle-holes is enabled, `false` ifnot. + open var isDrawCircleHoleEnabled: Bool { return drawCircleHoleEnabled } + + /// This is how much (in pixels) into the dash pattern are we starting from. + open var lineDashPhase = CGFloat(0.0) + + /// This is the actual dash pattern. + /// I.e. [2, 3] will paint [-- -- ] + /// [1, 3, 4, 2] will paint [- ---- - ---- ] + open var lineDashLengths: [CGFloat]? + + /// Line cap type, default is CGLineCap.Butt + open var lineCapType = CGLineCap.butt + + /// formatter for customizing the position of the fill-line + private var _fillFormatter: IFillFormatter = DefaultFillFormatter() + + /// Sets a custom IFillFormatter to the chart that handles the position of the filled-line for each DataSet. Set this to null to use the default logic. + open var fillFormatter: IFillFormatter? + { + get + { + return _fillFormatter + } + set + { + _fillFormatter = newValue ?? DefaultFillFormatter() + } + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! LineChartDataSet + 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/Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift new file mode 100644 index 0000000..be93425 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift @@ -0,0 +1,94 @@ +// +// LineRadarChartDataSet.swift +// Charts +// +// 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 + + +open class LineRadarChartDataSet: LineScatterCandleRadarChartDataSet, 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. + open 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 + open var fill: Fill? + + /// The alpha value that is used for filling the line surface, + /// **default**: 0.33 + open var fillAlpha = CGFloat(0.33) + + private var _lineWidth = CGFloat(1.0) + + /// line width of the chart (min = 0.0, max = 10) + /// + /// **default**: 1 + open var lineWidth: CGFloat + { + get + { + return _lineWidth + } + set + { + if newValue < 0.0 + { + _lineWidth = 0.0 + } + else if newValue > 10.0 + { + _lineWidth = 10.0 + } + else + { + _lineWidth = newValue + } + } + } + + /// Set to `true` if the DataSet should be drawn filled (surface), and not just as a line. + /// Disabling this will give great performance boost. + /// Please note that this method uses the path clipping for drawing the filled area (with images, gradients and layers). + open var drawFilledEnabled = false + + /// - returns: `true` if filled drawing is enabled, `false` ifnot + open var isDrawFilledEnabled: Bool + { + return drawFilledEnabled + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! LineRadarChartDataSet + copy.fillColor = fillColor + copy._lineWidth = _lineWidth + copy.drawFilledEnabled = drawFilledEnabled + return copy + } + +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift new file mode 100644 index 0000000..b21868a --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift @@ -0,0 +1,51 @@ +// +// LineScatterCandleRadarChartDataSet.swift +// Charts +// +// 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 + + +open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDataSet, ILineScatterCandleRadarChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// Enables / disables the horizontal highlight-indicator. If disabled, the indicator is not drawn. + open var drawHorizontalHighlightIndicatorEnabled = true + + /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. + open var drawVerticalHighlightIndicatorEnabled = true + + /// - returns: `true` if horizontal highlight indicator lines are enabled (drawn) + open var isHorizontalHighlightIndicatorEnabled: Bool { return drawHorizontalHighlightIndicatorEnabled } + + /// - returns: `true` if vertical highlight indicator lines are enabled (drawn) + open var isVerticalHighlightIndicatorEnabled: Bool { return drawVerticalHighlightIndicatorEnabled } + + /// Enables / disables both vertical and horizontal highlight-indicators. + /// :param: enabled + open func setDrawHighlightIndicators(_ enabled: Bool) + { + drawHorizontalHighlightIndicatorEnabled = enabled + drawVerticalHighlightIndicatorEnabled = enabled + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! LineScatterCandleRadarChartDataSet + copy.drawHorizontalHighlightIndicatorEnabled = drawHorizontalHighlightIndicatorEnabled + copy.drawVerticalHighlightIndicatorEnabled = drawVerticalHighlightIndicatorEnabled + return copy + } + +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartData.swift new file mode 100644 index 0000000..b847649 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartData.swift @@ -0,0 +1,130 @@ +// +// PieData.swift +// Charts +// +// 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 + +open class PieChartData: ChartData +{ + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } + + /// - returns: All DataSet objects this ChartData object holds. + @objc open override var dataSets: [IChartDataSet] + { + get + { + assert(super.dataSets.count <= 1, "Found multiple data sets while pie chart only allows one") + return super.dataSets + } + set + { + super.dataSets = newValue + } + } + + @objc var dataSet: IPieChartDataSet? + { + get + { + return dataSets.count > 0 ? dataSets[0] as? IPieChartDataSet : nil + } + set + { + if let newValue = newValue + { + dataSets = [newValue] + } + else + { + dataSets = [] + } + } + } + + open override func getDataSetByIndex(_ index: Int) -> IChartDataSet? + { + if index != 0 + { + return nil + } + return super.getDataSetByIndex(index) + } + + open override func getDataSetByLabel(_ label: String, ignorecase: Bool) -> IChartDataSet? + { + if dataSets.count == 0 || dataSets[0].label == nil + { + return nil + } + + if ignorecase + { + if let label = dataSets[0].label, label.caseInsensitiveCompare(label) == .orderedSame + { + return dataSets[0] + } + } + else + { + if label == dataSets[0].label + { + return dataSets[0] + } + } + return nil + } + + open override func entryForHighlight(_ highlight: Highlight) -> ChartDataEntry? + { + return dataSet?.entryForIndex(Int(highlight.x)) + } + + open override func addDataSet(_ d: IChartDataSet!) + { + super.addDataSet(d) + } + + /// Removes the DataSet at the given index in the DataSet array from the data object. + /// Also recalculates all minimum and maximum values. + /// + /// - returns: `true` if a DataSet was removed, `false` ifno DataSet could be removed. + open override func removeDataSetByIndex(_ index: Int) -> Bool + { + if index >= _dataSets.count || index < 0 + { + return false + } + + return false + } + + /// - returns: The total y-value sum across all DataSet objects the this object represents. + @objc open var yValueSum: Double + { + guard let dataSet = dataSet else { return 0.0 } + + var yValueSum: Double = 0.0 + + for i in 0.. AnyObject + { + let copy = super.copyWithZone(zone) as! PieChartDataEntry + copy.label = label + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift new file mode 100644 index 0000000..af4aa61 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift @@ -0,0 +1,121 @@ +// +// PieChartDataSet.swift +// Charts +// +// 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 + +open class PieChartDataSet: ChartDataSet, IPieChartDataSet +{ + @objc(PieChartValuePosition) + public enum ValuePosition: Int + { + case insideSlice + case outsideSlice + } + + private func initialize() + { + self.valueTextColor = NSUIColor.white + self.valueFont = NSUIFont.systemFont(ofSize: 13.0) + } + + public required init() + { + super.init() + initialize() + } + + public override init(values: [ChartDataEntry]?, label: String?) + { + super.init(values: values, label: label) + initialize() + } + + internal override func calcMinMax(entry e: ChartDataEntry) + { + calcMinMaxY(entry: e) + } + + // MARK: - Styling functions and accessors + + private var _sliceSpace = CGFloat(0.0) + + /// the space in pixels between the pie-slices + /// **default**: 0 + /// **maximum**: 20 + open 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 + } + } + + /// When enabled, slice spacing will be 0.0 when the smallest value is going to be smaller than the slice spacing itself. + open var automaticallyDisableSliceSpacing: Bool = false + + /// indicates the selection distance of a pie slice + open var selectionShift = CGFloat(18.0) + + open var xValuePosition: ValuePosition = .insideSlice + open var yValuePosition: ValuePosition = .insideSlice + + /// When valuePosition is OutsideSlice, indicates line color + open var valueLineColor: NSUIColor? = NSUIColor.black + + /// When valuePosition is OutsideSlice, indicates line width + open var valueLineWidth: CGFloat = 1.0 + + /// When valuePosition is OutsideSlice, indicates offset as percentage out of the slice size + open var valueLinePart1OffsetPercentage: CGFloat = 0.75 + + /// When valuePosition is OutsideSlice, indicates length of first half of the line + open var valueLinePart1Length: CGFloat = 0.3 + + /// When valuePosition is OutsideSlice, indicates length of second half of the line + open var valueLinePart2Length: CGFloat = 0.4 + + /// When valuePosition is OutsideSlice, this allows variable line length + open var valueLineVariableLength: Bool = true + + /// the font for the slice-text labels + open var entryLabelFont: NSUIFont? = nil + + /// the color for the slice-text labels + open var entryLabelColor: NSUIColor? = nil + + /// the color for the highlighted sector + open var highlightColor: NSUIColor? = nil + + // MARK: - NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! PieChartDataSet + copy._sliceSpace = _sliceSpace + copy.selectionShift = selectionShift + copy.highlightColor = highlightColor + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartData.swift new file mode 100644 index 0000000..31fd7d2 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartData.swift @@ -0,0 +1,46 @@ +// +// RadarChartData.swift +// Charts +// +// 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 + + +open class RadarChartData: ChartData +{ + @objc open var highlightColor = NSUIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) + @objc open var highlightLineWidth = CGFloat(1.0) + @objc open var highlightLineDashPhase = CGFloat(0.0) + @objc open var highlightLineDashLengths: [CGFloat]? + + /// Sets labels that should be drawn around the RadarChart at the end of each web line. + @objc open var labels = [String]() + + /// Sets the labels that should be drawn around the RadarChart at the end of each web line. + open func setLabels(_ labels: String...) + { + self.labels = labels + } + + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } + + open override func entryForHighlight(_ highlight: Highlight) -> ChartDataEntry? + { + return getDataSetByIndex(highlight.dataSetIndex)?.entryForIndex(Int(highlight.x)) + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift new file mode 100644 index 0000000..4cf7189 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift @@ -0,0 +1,51 @@ +// +// RadarChartDataEntry.swift +// Charts +// +// 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 + +open class RadarChartDataEntry: ChartDataEntry +{ + public required init() + { + super.init() + } + + /// - parameter value: The value on the y-axis. + /// - parameter data: Spot for additional data this Entry represents. + @objc public init(value: Double, data: AnyObject?) + { + super.init(x: 0.0, y: value, data: data) + } + + /// - parameter value: The value on the y-axis. + @objc public convenience init(value: Double) + { + self.init(value: value, data: nil) + } + + // MARK: Data property accessors + + @objc open var value: Double + { + get { return y } + set { y = value } + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! RadarChartDataEntry + + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift new file mode 100644 index 0000000..67b4730 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift @@ -0,0 +1,59 @@ +// +// RadarChartDataSet.swift +// Charts +// +// 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 + + +open class RadarChartDataSet: LineRadarChartDataSet, IRadarChartDataSet +{ + private func initialize() + { + self.valueFont = NSUIFont.systemFont(ofSize: 13.0) + } + + public required init() + { + super.init() + initialize() + } + + public required override init(values: [ChartDataEntry]?, label: String?) + { + super.init(values: values, label: label) + initialize() + } + + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// flag indicating whether highlight circle should be drawn or not + /// **default**: false + open var drawHighlightCircleEnabled: Bool = false + + /// - returns: `true` if highlight circle should be drawn, `false` ifnot + open var isDrawHighlightCircleEnabled: Bool { return drawHighlightCircleEnabled } + + open var highlightCircleFillColor: NSUIColor? = NSUIColor.white + + /// The stroke color for highlight circle. + /// If `nil`, the color of the dataset is taken. + open var highlightCircleStrokeColor: NSUIColor? + + open var highlightCircleStrokeAlpha: CGFloat = 0.3 + + open var highlightCircleInnerRadius: CGFloat = 3.0 + + open var highlightCircleOuterRadius: CGFloat = 4.0 + + open var highlightCircleStrokeWidth: CGFloat = 2.0 +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartData.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartData.swift new file mode 100644 index 0000000..ff8ccaf --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartData.swift @@ -0,0 +1,48 @@ +// +// ScatterChartData.swift +// Charts +// +// 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 + +open class ScatterChartData: BarLineScatterCandleBubbleChartData +{ + public override init() + { + super.init() + } + + public override init(dataSets: [IChartDataSet]?) + { + super.init(dataSets: dataSets) + } + + /// - returns: The maximum shape-size across all DataSets. + @objc open func getGreatestShapeSize() -> CGFloat + { + var max = CGFloat(0.0) + + for set in _dataSets + { + let scatterDataSet = set as? IScatterChartDataSet + + if scatterDataSet == nil + { + print("ScatterChartData: Found a DataSet which is not a ScatterChartDataSet", terminator: "\n") + } + else if let size = scatterDataSet?.scatterShapeSize, size > max + { + max = size + } + } + + return max + } +} diff --git a/Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift new file mode 100644 index 0000000..8aee713 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift @@ -0,0 +1,78 @@ +// +// ScatterChartDataSet.swift +// Charts +// +// 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 + +open class ScatterChartDataSet: LineScatterCandleRadarChartDataSet, IScatterChartDataSet +{ + + @objc(ScatterShape) + public enum Shape: Int + { + case square + case circle + case triangle + case cross + case x + case chevronUp + case chevronDown + } + + /// The size the scatter shape will have + open var scatterShapeSize = CGFloat(10.0) + + /// The radius of the hole in the shape (applies to Square, Circle and Triangle) + /// **default**: 0.0 + open var scatterShapeHoleRadius: CGFloat = 0.0 + + /// Color for the hole in the shape. Setting to `nil` will behave as transparent. + /// **default**: nil + open var scatterShapeHoleColor: NSUIColor? = nil + + /// Sets the ScatterShape this DataSet should be drawn with. + /// This will search for an available IShapeRenderer and set this renderer for the DataSet + @objc open func setScatterShape(_ shape: Shape) + { + self.shapeRenderer = ScatterChartDataSet.renderer(forShape: shape) + } + + /// The IShapeRenderer responsible for rendering this DataSet. + /// This can also be used to set a custom IShapeRenderer aside from the default ones. + /// **default**: `SquareShapeRenderer` + open var shapeRenderer: IShapeRenderer? = SquareShapeRenderer() + + @objc open class func renderer(forShape shape: Shape) -> IShapeRenderer + { + switch shape + { + case .square: return SquareShapeRenderer() + case .circle: return CircleShapeRenderer() + case .triangle: return TriangleShapeRenderer() + case .cross: return CrossShapeRenderer() + case .x: return XShapeRenderer() + case .chevronUp: return ChevronUpShapeRenderer() + case .chevronDown: return ChevronDownShapeRenderer() + } + } + + // MARK: NSCopying + + open override func copyWithZone(_ zone: NSZone?) -> AnyObject + { + let copy = super.copyWithZone(zone) as! ScatterChartDataSet + copy.scatterShapeSize = scatterShapeSize + copy.scatterShapeHoleRadius = scatterShapeHoleRadius + copy.scatterShapeHoleColor = scatterShapeHoleColor + copy.shapeRenderer = shapeRenderer + return copy + } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/IBarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/IBarChartDataSet.swift new file mode 100644 index 0000000..6f5cad0 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/IBarChartDataSet.swift @@ -0,0 +1,42 @@ +// +// IBarChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol IBarChartDataSet: IBarLineScatterCandleBubbleChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// - returns: `true` if this DataSet is stacked (stacksize > 1) or not. + var isStacked: Bool { get } + + /// - returns: The maximum number of bars that can be stacked upon another in this DataSet. + var stackSize: Int { get } + + /// the color used for drawing the bar-shadows. The bar shadows is a surface behind the bar that indicates the maximum value + var barShadowColor: NSUIColor { get set } + + /// the width used for drawing borders around the bars. If borderWidth == 0, no border will be drawn. + var barBorderWidth : CGFloat { get set } + + /// the color drawing borders around the bars. + var barBorderColor: NSUIColor { get set } + + /// the alpha value (transparency) that is used for drawing the highlight indicator bar. min = 0.0 (fully transparent), max = 1.0 (fully opaque) + var highlightAlpha: CGFloat { get set } + + /// array of labels used to describe the different values of the stacked bars + var stackLabels: [String] { get set } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift new file mode 100644 index 0000000..8af47ff --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift @@ -0,0 +1,26 @@ +// +// IBarLineScatterCandleBubbleChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol IBarLineScatterCandleBubbleChartDataSet: IChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + var highlightColor: NSUIColor { get set } + var highlightLineWidth: CGFloat { get set } + var highlightLineDashPhase: CGFloat { get set } + var highlightLineDashLengths: [CGFloat]? { get set } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift new file mode 100644 index 0000000..10c5d9e --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift @@ -0,0 +1,27 @@ +// +// IBubbleChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol IBubbleChartDataSet: IBarLineScatterCandleBubbleChartDataSet +{ + // MARK: - Data functions and accessors + + var maxSize: CGFloat { get } + var isNormalizeSizeEnabled: Bool { get } + + // MARK: - Styling functions and accessors + + /// Sets/gets the width of the circle that surrounds the bubble when highlighted + var highlightCircleWidth: CGFloat { get set } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/ICandleChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/ICandleChartDataSet.swift new file mode 100644 index 0000000..fac88d3 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/ICandleChartDataSet.swift @@ -0,0 +1,66 @@ +// +// ICandleChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol ICandleChartDataSet: ILineScatterCandleRadarChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// 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 + var barSpace: CGFloat { get set } + + /// should the candle bars show? + /// when false, only "ticks" will show + /// + /// **default**: true + var showCandleBar: Bool { get set } + + /// the width of the candle-shadow-line in pixels. + /// + /// **default**: 3.0 + var shadowWidth: CGFloat { get set } + + /// the color of the shadow line + var shadowColor: NSUIColor? { get set } + + /// use candle color for the shadow + var shadowColorSameAsCandle: Bool { get set } + + /// Is the shadow color same as the candle color? + var isShadowColorSameAsCandle: Bool { get } + + /// color for open == close + var neutralColor: NSUIColor? { get set } + + /// color for open > close + var increasingColor: NSUIColor? { get set } + + /// color for open < close + var decreasingColor: NSUIColor? { get set } + + /// Are increasing values drawn as filled? + var increasingFilled: Bool { get set } + + /// Are increasing values drawn as filled? + var isIncreasingFilled: Bool { get } + + /// Are decreasing values drawn as filled? + var decreasingFilled: Bool { get set } + + /// Are decreasing values drawn as filled? + var isDecreasingFilled: Bool { get } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/IChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/IChartDataSet.swift new file mode 100644 index 0000000..293db39 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/IChartDataSet.swift @@ -0,0 +1,261 @@ +// +// IChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol IChartDataSet +{ + // MARK: - Data functions and accessors + + /// Use this method to tell the data set that the underlying data has changed + func notifyDataSetChanged() + + /// Calculates the minimum and maximum x and y values (_xMin, _xMax, _yMin, _yMax). + func calcMinMax() + + /// Calculates the min and max y-values from the Entry closest to the given fromX to the Entry closest to the given toX value. + /// This is only needed for the autoScaleMinMax feature. + func calcMinMaxY(fromX: Double, toX: Double) + + /// - returns: The minimum y-value this DataSet holds + var yMin: Double { get } + + /// - returns: The maximum y-value this DataSet holds + var yMax: Double { get } + + /// - returns: The minimum x-value this DataSet holds + var xMin: Double { get } + + /// - returns: The maximum x-value this DataSet holds + var xMax: Double { get } + + /// - returns: The number of y-values this DataSet represents + var entryCount: Int { get } + + /// - returns: The entry object found at the given index (not x-value!) + /// - throws: out of bounds + /// if `i` is out of bounds, it may throw an out-of-bounds exception + func entryForIndex(_ i: Int) -> ChartDataEntry? + + /// - returns: The first Entry object found at the given x-value with binary search. + /// If the no Entry at the specified x-value is found, this method returns the Entry at the closest x-value according to the rounding. + /// nil if no Entry object at that x-value. + /// - parameter xValue: the x-value + /// - parameter closestToY: If there are multiple y-values for the specified x-value, + /// - parameter rounding: determine whether to round up/down/closest if there is no Entry matching the provided x-value + func entryForXValue( + _ xValue: Double, + closestToY yValue: Double, + rounding: ChartDataSetRounding) -> ChartDataEntry? + + /// - returns: The first Entry object found at the given x-value with binary search. + /// If the no Entry at the specified x-value is found, this method returns the Entry at the closest x-value. + /// nil if no Entry object at that x-value. + /// - parameter xValue: the x-value + /// - parameter closestToY: If there are multiple y-values for the specified x-value, + func entryForXValue( + _ xValue: Double, + closestToY yValue: Double) -> ChartDataEntry? + + /// - returns: All Entry objects found at the given x-value with binary search. + /// An empty array if no Entry object at that x-value. + func entriesForXValue(_ xValue: Double) -> [ChartDataEntry] + + /// - returns: The array-index of the specified entry. + /// If the no Entry at the specified x-value is found, this method returns the index of the Entry at the closest x-value according to the rounding. + /// + /// - parameter xValue: x-value of the entry to search for + /// - parameter closestToY: If there are multiple y-values for the specified x-value, + /// - parameter rounding: Rounding method if exact value was not found + func entryIndex( + x xValue: Double, + closestToY yValue: Double, + rounding: ChartDataSetRounding) -> Int + + /// - returns: The array-index of the specified entry + /// + /// - parameter e: the entry to search for + func entryIndex(entry e: ChartDataEntry) -> Int + + /// Adds an Entry to the DataSet dynamically. + /// + /// *optional feature, can return `false` ifnot implemented* + /// + /// Entries are added to the end of the list. + /// - parameter e: the entry to add + /// - returns: `true` if the entry was added successfully, `false` ifthis feature is not supported + func addEntry(_ e: ChartDataEntry) -> Bool + + /// Adds an Entry to the DataSet dynamically. + /// Entries are added to their appropriate index in the values array respective to their x-position. + /// This will also recalculate the current minimum and maximum values of the DataSet and the value-sum. + /// + /// *optional feature, can return `false` ifnot implemented* + /// + /// Entries are added to the end of the list. + /// - parameter e: the entry to add + /// - returns: `true` if the entry was added successfully, `false` ifthis feature is not supported + func addEntryOrdered(_ e: ChartDataEntry) -> Bool + + /// Removes an Entry from the DataSet dynamically. + /// + /// *optional feature, can return `false` ifnot implemented* + /// + /// - parameter entry: the entry to remove + /// - returns: `true` if the entry was removed successfully, `false` ifthe entry does not exist or if this feature is not supported + func removeEntry(_ entry: ChartDataEntry) -> Bool + + /// Removes the Entry object at the given index in the values array from the DataSet. + /// + /// *optional feature, can return `false` ifnot implemented* + /// + /// - parameter index: the index of the entry to remove + /// - returns: `true` if the entry was removed successfully, `false` ifthe entry does not exist or if this feature is not supported + func removeEntry(index: Int) -> Bool + + /// Removes the Entry object closest to the given x-value from the DataSet. + /// + /// *optional feature, can return `false` ifnot implemented* + /// + /// - parameter x: the x-value to remove + /// - returns: `true` if the entry was removed successfully, `false` ifthe entry does not exist or if this feature is not supported + func removeEntry(x: Double) -> Bool + + /// Removes the first Entry (at index 0) of this DataSet from the entries array. + /// + /// *optional feature, can return `false` ifnot implemented* + /// + /// - returns: `true` if the entry was removed successfully, `false` ifthe entry does not exist or if this feature is not supported + func removeFirst() -> Bool + + /// Removes the last Entry (at index 0) of this DataSet from the entries array. + /// + /// *optional feature, can return `false` ifnot implemented* + /// + /// - returns: `true` if the entry was removed successfully, `false` ifthe entry does not exist or if this feature is not supported + func removeLast() -> Bool + + /// Checks if this DataSet contains the specified Entry. + /// + /// - returns: `true` if contains the entry, `false` ifnot. + func contains(_ e: ChartDataEntry) -> Bool + + /// Removes all values from this DataSet and does all necessary recalculations. + /// + /// *optional feature, could throw if not implemented* + func clear() + + // MARK: - Styling functions and accessors + + /// The label string that describes the DataSet. + var label: String? { get } + + /// The axis this DataSet should be plotted against. + var axisDependency: YAxis.AxisDependency { get } + + /// List representing all colors that are used for drawing the actual values for this DataSet + var valueColors: [NSUIColor] { get } + + /// All the colors that are used for this DataSet. + /// Colors are reused as soon as the number of Entries the DataSet represents is higher than the size of the colors array. + var colors: [NSUIColor] { get } + + /// - returns: The color at the given index of the DataSet's color array. + /// This prevents out-of-bounds by performing a modulus on the color index, so colours will repeat themselves. + func color(atIndex: Int) -> NSUIColor + + func resetColors() + + func addColor(_ color: NSUIColor) + + func setColor(_ color: NSUIColor) + + /// if true, value highlighting is enabled + var highlightEnabled: Bool { get set } + + /// - returns: `true` if value highlighting is enabled for this dataset + var isHighlightEnabled: Bool { get } + + /// Custom formatter that is used instead of the auto-formatter if set + var valueFormatter: IValueFormatter? { get set } + + /// - returns: `true` if the valueFormatter object of this DataSet is null. + var needsFormatter: Bool { get } + + /// Sets/get a single color for value text. + /// Setting the color clears the colors array and adds a single color. + /// Getting will return the first color in the array. + var valueTextColor: NSUIColor { get set } + + /// - returns: The color at the specified index that is used for drawing the values inside the chart. Uses modulus internally. + func valueTextColorAt(_ index: Int) -> NSUIColor + + /// the font for the value-text labels + var valueFont: NSUIFont { get set } + + /// The form to draw for this dataset in the legend. + /// + /// Return `.Default` to use the default legend form. + var form: Legend.Form { get } + + /// The form size to draw for this dataset in the legend. + /// + /// Return `NaN` to use the default legend form size. + var formSize: CGFloat { get } + + /// The line width for drawing the form of this dataset in the legend + /// + /// Return `NaN` to use the default legend form line width. + var formLineWidth: CGFloat { get } + + /// Line dash configuration for legend shapes that consist of lines. + /// + /// This is how much (in pixels) into the dash pattern are we starting from. + var formLineDashPhase: CGFloat { get } + + /// Line dash configuration for legend shapes that consist of lines. + /// + /// This is the actual dash pattern. + /// I.e. [2, 3] will paint [-- -- ] + /// [1, 3, 4, 2] will paint [- ---- - ---- ] + var formLineDashLengths: [CGFloat]? { get } + + /// Set this to true to draw y-values on the chart. + /// + /// - note: For bar and line charts: if `maxVisibleCount` is reached, no values will be drawn even if this is enabled. + var drawValuesEnabled: Bool { get set } + + /// - returns: `true` if y-value drawing is enabled, `false` ifnot + var isDrawValuesEnabled: Bool { get } + + /// Set this to true to draw y-icons on the chart + /// + /// - note: For bar and line charts: if `maxVisibleCount` is reached, no icons will be drawn even if this is enabled. + var drawIconsEnabled: Bool { get set } + + /// Returns true if y-icon drawing is enabled, false if not + var isDrawIconsEnabled: Bool { get } + + /// Offset of icons drawn on the chart. + /// + /// For all charts except Pie and Radar it will be ordinary (x offset, y offset). + /// + /// For Pie and Radar chart it will be (y offset, distance from center offset); so if you want icon to be rendered under value, you should increase X component of CGPoint, and if you want icon to be rendered closet to center, you should decrease height component of CGPoint. + var iconsOffset: CGPoint { get set } + + /// Set the visibility of this DataSet. If not visible, the DataSet will not be drawn to the chart upon refreshing it. + var visible: Bool { get set } + + /// - returns: `true` if this DataSet is visible inside the chart, or `false` ifit is currently hidden. + var isVisible: Bool { get } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/ILineChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/ILineChartDataSet.swift new file mode 100644 index 0000000..bc9e484 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/ILineChartDataSet.swift @@ -0,0 +1,80 @@ +// +// ILineChartDataSet.swift +// Charts +// +// 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 + + +@objc +public protocol ILineChartDataSet: ILineRadarChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// The drawing mode for this line dataset + /// + /// **default**: Linear + var mode: LineChartDataSet.Mode { get set } + + /// Intensity for cubic lines (min = 0.05, max = 1) + /// + /// **default**: 0.2 + var cubicIntensity: CGFloat { get set } + + /// The radius of the drawn circles. + var circleRadius: CGFloat { get set } + + /// The hole radius of the drawn circles. + var circleHoleRadius: CGFloat { get set } + + var circleColors: [NSUIColor] { get set } + + /// - returns: The color at the given index of the DataSet's circle-color array. + /// Performs a IndexOutOfBounds check by modulus. + func getCircleColor(atIndex: Int) -> NSUIColor? + + /// Sets the one and ONLY color that should be used for this DataSet. + /// Internally, this recreates the colors array and adds the specified color. + func setCircleColor(_ color: NSUIColor) + + /// Resets the circle-colors array and creates a new one + func resetCircleColors(_ index: Int) + + /// If true, drawing circles is enabled + var drawCirclesEnabled: Bool { get set } + + /// - returns: `true` if drawing circles for this DataSet is enabled, `false` ifnot + var isDrawCirclesEnabled: Bool { get } + + /// The color of the inner circle (the circle-hole). + var circleHoleColor: NSUIColor? { get set } + + /// `true` if drawing circles for this DataSet is enabled, `false` ifnot + var drawCircleHoleEnabled: Bool { get set } + + /// - returns: `true` if drawing the circle-holes is enabled, `false` ifnot. + var isDrawCircleHoleEnabled: Bool { get } + + /// This is how much (in pixels) into the dash pattern are we starting from. + var lineDashPhase: CGFloat { get } + + /// This is the actual dash pattern. + /// I.e. [2, 3] will paint [-- -- ] + /// [1, 3, 4, 2] will paint [- ---- - ---- ] + var lineDashLengths: [CGFloat]? { get set } + + /// Line cap type, default is CGLineCap.Butt + var lineCapType: CGLineCap { get set } + + /// Sets a custom IFillFormatter to the chart that handles the position of the filled-line for each DataSet. Set this to null to use the default logic. + var fillFormatter: IFillFormatter? { get set } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift new file mode 100644 index 0000000..b53a533 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift @@ -0,0 +1,45 @@ +// +// ILineRadarChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol ILineRadarChartDataSet: ILineScatterCandleRadarChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// The color that is used for filling the line surface area. + var fillColor: NSUIColor { get set } + + /// - returns: The object that is used for filling the area below the line. + /// **default**: nil + var fill: Fill? { get set } + + /// The alpha value that is used for filling the line surface. + /// **default**: 0.33 + var fillAlpha: CGFloat { get set } + + /// line width of the chart (min = 0.0, max = 10) + /// + /// **default**: 1 + var lineWidth: CGFloat { get set } + + /// Set to `true` if the DataSet should be drawn filled (surface), and not just as a line. + /// Disabling this will give great performance boost. + /// Please note that this method uses the path clipping for drawing the filled area (with images, gradients and layers). + var drawFilledEnabled: Bool { get set } + + /// - returns: `true` if filled drawing is enabled, `false` if not + var isDrawFilledEnabled: Bool { get } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift new file mode 100644 index 0000000..cf646a1 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift @@ -0,0 +1,36 @@ +// +// ILineScatterCandleRadarChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol ILineScatterCandleRadarChartDataSet: IBarLineScatterCandleBubbleChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// Enables / disables the horizontal highlight-indicator. If disabled, the indicator is not drawn. + var drawHorizontalHighlightIndicatorEnabled: Bool { get set } + + /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. + var drawVerticalHighlightIndicatorEnabled: Bool { get set } + + /// - returns: `true` if horizontal highlight indicator lines are enabled (drawn) + var isHorizontalHighlightIndicatorEnabled: Bool { get } + + /// - returns: `true` if vertical highlight indicator lines are enabled (drawn) + var isVerticalHighlightIndicatorEnabled: Bool { get } + + /// Enables / disables both vertical and horizontal highlight-indicators. + /// :param: enabled + func setDrawHighlightIndicators(_ enabled: Bool) +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/IPieChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/IPieChartDataSet.swift new file mode 100644 index 0000000..1e027be --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/IPieChartDataSet.swift @@ -0,0 +1,64 @@ +// +// IPieChartDataSet.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc +public protocol IPieChartDataSet: IChartDataSet +{ + // MARK: - Styling functions and accessors + + /// the space in pixels between the pie-slices + /// **default**: 0 + /// **maximum**: 20 + var sliceSpace: CGFloat { get set } + + /// When enabled, slice spacing will be 0.0 when the smallest value is going to be smaller than the slice spacing itself. + var automaticallyDisableSliceSpacing: Bool { get set } + + /// indicates the selection distance of a pie slice + var selectionShift: CGFloat { get set } + + var xValuePosition: PieChartDataSet.ValuePosition { get set } + var yValuePosition: PieChartDataSet.ValuePosition { get set } + + /// When valuePosition is OutsideSlice, indicates line color + var valueLineColor: NSUIColor? { get set } + + /// When valuePosition is OutsideSlice, indicates line width + var valueLineWidth: CGFloat { get set } + + /// When valuePosition is OutsideSlice, indicates offset as percentage out of the slice size + var valueLinePart1OffsetPercentage: CGFloat { get set } + + /// When valuePosition is OutsideSlice, indicates length of first half of the line + var valueLinePart1Length: CGFloat { get set } + + /// When valuePosition is OutsideSlice, indicates length of second half of the line + var valueLinePart2Length: CGFloat { get set } + + /// When valuePosition is OutsideSlice, this allows variable line length + var valueLineVariableLength: Bool { get set } + + /// the font for the slice-text labels + var entryLabelFont: NSUIFont? { get set } + + /// the color for the slice-text labels + var entryLabelColor: NSUIColor? { get set } + + /// get/sets the color for the highlighted sector + var highlightColor: NSUIColor? { get set } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/IRadarChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/IRadarChartDataSet.swift new file mode 100644 index 0000000..2e37b4f --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/IRadarChartDataSet.swift @@ -0,0 +1,40 @@ +// +// IRadarChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol IRadarChartDataSet: ILineRadarChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// flag indicating whether highlight circle should be drawn or not + var drawHighlightCircleEnabled: Bool { get set } + + var isDrawHighlightCircleEnabled: Bool { get } + + var highlightCircleFillColor: NSUIColor? { get set } + + /// The stroke color for highlight circle. + /// If `nil`, the color of the dataset is taken. + var highlightCircleStrokeColor: NSUIColor? { get set } + + var highlightCircleStrokeAlpha: CGFloat { get set } + + var highlightCircleInnerRadius: CGFloat { get set } + + var highlightCircleOuterRadius: CGFloat { get set } + + var highlightCircleStrokeWidth: CGFloat { get set } +} diff --git a/Pods/Charts/Source/Charts/Data/Interfaces/IScatterChartDataSet.swift b/Pods/Charts/Source/Charts/Data/Interfaces/IScatterChartDataSet.swift new file mode 100644 index 0000000..5703f07 --- /dev/null +++ b/Pods/Charts/Source/Charts/Data/Interfaces/IScatterChartDataSet.swift @@ -0,0 +1,36 @@ +// +// IScatterChartDataSet.swift +// Charts +// +// 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 + +@objc +public protocol IScatterChartDataSet: ILineScatterCandleRadarChartDataSet +{ + // MARK: - Data functions and accessors + + // MARK: - Styling functions and accessors + + /// - returns: The size the scatter shape will have + var scatterShapeSize: CGFloat { get } + + /// - returns: The radius of the hole in the shape (applies to Square, Circle and Triangle) + /// Set this to <= 0 to remove holes. + /// **default**: 0.0 + var scatterShapeHoleRadius: CGFloat { get } + + /// - returns: Color for the hole in the shape. Setting to `nil` will behave as transparent. + /// **default**: nil + var scatterShapeHoleColor: NSUIColor? { get } + + /// - returns: The IShapeRenderer responsible for rendering this DataSet. + var shapeRenderer: IShapeRenderer? { get } +} diff --git a/Pods/Charts/Source/Charts/Filters/DataApproximator+N.swift b/Pods/Charts/Source/Charts/Filters/DataApproximator+N.swift new file mode 100644 index 0000000..32a7784 --- /dev/null +++ b/Pods/Charts/Source/Charts/Filters/DataApproximator+N.swift @@ -0,0 +1,152 @@ +// +// DataApproximator+N.swift +// Charts +// +// Created by M Ivaniushchenko on 9/6/17. +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// + +import Foundation + +extension CGPoint { + fileprivate func distanceToLine(from linePoint1: CGPoint, to linePoint2: CGPoint) -> CGFloat { + let dx = linePoint2.x - linePoint1.x + let dy = linePoint2.y - linePoint1.y + + let dividend = fabs(dy * self.x - dx * self.y - linePoint1.x * linePoint2.y + linePoint2.x * linePoint1.y) + let divisor = sqrt(dx * dx + dy * dy) + + return dividend / divisor + } +} + +private struct LineAlt { + let start: Int + let end: Int + + var distance: CGFloat = 0 + var index: Int = 0 + + init(start: Int, end: Int, points: [CGPoint]) { + self.start = start + self.end = end + + let startPoint = points[start] + let endPoint = points[end] + + guard (end > start + 1) else { + return + } + + for i in start + 1 ..< end { + let currentPoint = points[i] + + let distance = currentPoint.distanceToLine(from: startPoint, to: endPoint) + + if distance > self.distance { + self.index = i + self.distance = distance + } + } + } +} + +extension LineAlt: Comparable { + static func ==(lhs: LineAlt, rhs: LineAlt) -> Bool { + return (lhs.start == rhs.start) && (lhs.end == rhs.end) && (lhs.index == rhs.index) + } + + static func <(lhs: LineAlt, rhs: LineAlt) -> Bool { + return lhs.distance < rhs.distance + } +} + + +extension DataApproximator { + /// uses the douglas peuker algorithm to reduce the given arraylist of entries to given number of points + /// More algorithm details here - http://psimpl.sourceforge.net/douglas-peucker.html + @objc open class func reduceWithDouglasPeukerN(_ points: [CGPoint], resultCount: Int) -> [CGPoint] + { + // if a shape has 2 or less points it cannot be reduced + if resultCount <= 2 || resultCount >= points.count + { + return points + } + var keep = [Bool](repeating: false, count: points.count) + + // first and last always stay + keep[0] = true + keep[points.count - 1] = true + var currentStoredPoints = 2 + + var queue = [LineAlt]() + let line = LineAlt(start: 0, end: points.count - 1, points: points) + queue.append(line) + + repeat { + let line = queue.popLast()! + + // store the key + keep[line.index] = true + + // check point count tolerance + currentStoredPoints += 1 + + if (currentStoredPoints == resultCount) { + break; + } + + // split the polyline at the key and recurse + let left = LineAlt(start: line.start, end: line.index, points: points) + if (left.index > 0) { + self.insertLine(left, into: &queue) + } + + let right = LineAlt(start: line.index, end: line.end, points: points) + if (right.index > 0) { + self.insertLine(right, into: &queue) + } + + } while !queue.isEmpty + + // create a new array with series, only take the kept ones + let reducedEntries = points.enumerated().compactMap { (index: Int, point: CGPoint) -> CGPoint? in + return keep[index] ? point : nil + } + + return reducedEntries + } + + // Keeps array sorted + private static func insertLine(_ line: LineAlt, into array: inout [LineAlt]) { + let insertionIndex = self.insertionIndex(for: line, into: &array) + array.insert(line, at: insertionIndex) + } + + private static func insertionIndex(for line: LineAlt, into array: inout [LineAlt]) -> Int { + var indices = array.indices + + while !indices.isEmpty { + let midIndex = indices.lowerBound.advanced(by: indices.count / 2) + let midLine = array[midIndex] + + if midLine == line { + return midIndex + } + else if (line < midLine) { + // perform search in left half + indices = indices.lowerBound.. [CGPoint] + { + // if a shape has 2 or less points it cannot be reduced + if tolerance <= 0 || points.count < 3 + { + return points + } + + var keep = [Bool](repeating: false, count: points.count) + + // first and last always stay + keep[0] = true + keep[points.count - 1] = true + + // first and last entry are entry point to recursion + reduceWithDouglasPeuker(points: points, + tolerance: tolerance, + start: 0, + end: points.count - 1, + keep: &keep) + + // create a new array with series, only take the kept ones + var reducedEntries = [CGPoint]() + for i in 0 ..< points.count + { + if keep[i] + { + reducedEntries.append(points[i]) + } + } + + return reducedEntries + } + + /// apply the Douglas-Peucker-Reduction to an array of `CGPoint`s with a given tolerance + /// + /// - parameter points: + /// - parameter tolerance: + /// - parameter start: + /// - parameter end: + open class func reduceWithDouglasPeuker( + points: [CGPoint], + tolerance: CGFloat, + start: Int, + end: Int, + keep: inout [Bool]) + { + if end <= start + 1 + { + // recursion finished + return + } + + var greatestIndex = Int(0) + var greatestDistance = CGFloat(0.0) + + let line = Line(pt1: points[start], pt2: points[end]) + + for i in start + 1 ..< end + { + let distance = line.distance(toPoint: points[i]) + + if distance > greatestDistance + { + greatestDistance = distance + greatestIndex = i + } + } + + if greatestDistance > tolerance + { + // keep max dist point + keep[greatestIndex] = true + + // recursive call + reduceWithDouglasPeuker(points: points, tolerance: tolerance, start: start, end: greatestIndex, keep: &keep) + reduceWithDouglasPeuker(points: points, tolerance: tolerance, start: greatestIndex, end: end, keep: &keep) + } // else don't keep the point... + } + + private class Line + { + var sxey: CGFloat + var exsy: CGFloat + + var dx: CGFloat + var dy: CGFloat + + var length: CGFloat + + init(pt1: CGPoint, pt2: CGPoint) + { + dx = pt1.x - pt2.x + dy = pt1.y - pt2.y + sxey = pt1.x * pt2.y + exsy = pt2.x * pt1.y + length = sqrt(dx * dx + dy * dy) + } + + func distance(toPoint pt: CGPoint) -> CGFloat + { + return abs(dy * pt.x - dx * pt.y + sxey - exsy) / length + } + } +} diff --git a/Pods/Charts/Source/Charts/Formatters/DefaultAxisValueFormatter.swift b/Pods/Charts/Source/Charts/Formatters/DefaultAxisValueFormatter.swift new file mode 100644 index 0000000..85193d0 --- /dev/null +++ b/Pods/Charts/Source/Charts/Formatters/DefaultAxisValueFormatter.swift @@ -0,0 +1,100 @@ +// +// DefaultAxisValueFormatter.swift +// Charts +// +// 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 + +@objc(ChartDefaultAxisValueFormatter) +open class DefaultAxisValueFormatter: NSObject, IAxisValueFormatter +{ + public typealias Block = ( + _ value: Double, + _ axis: AxisBase?) -> String + + @objc open var block: Block? + + @objc open var hasAutoDecimals: Bool = false + + private var _formatter: NumberFormatter? + @objc open var formatter: NumberFormatter? + { + get { return _formatter } + set + { + hasAutoDecimals = false + _formatter = newValue + } + } + + // TODO: Documentation. Especially the nil case + private var _decimals: Int? + open var decimals: Int? + { + get { return _decimals } + set + { + _decimals = newValue + + if let digits = newValue + { + self.formatter?.minimumFractionDigits = digits + self.formatter?.maximumFractionDigits = digits + self.formatter?.usesGroupingSeparator = true + } + } + } + + public override init() + { + super.init() + + self.formatter = NumberFormatter() + hasAutoDecimals = true + } + + @objc public init(formatter: NumberFormatter) + { + super.init() + + self.formatter = formatter + } + + @objc public init(decimals: Int) + { + super.init() + + self.formatter = NumberFormatter() + self.formatter?.usesGroupingSeparator = true + self.decimals = decimals + hasAutoDecimals = true + } + + @objc public init(block: @escaping Block) + { + super.init() + + self.block = block + } + + @objc public static func with(block: @escaping Block) -> DefaultAxisValueFormatter? + { + return DefaultAxisValueFormatter(block: block) + } + + open func stringForValue(_ value: Double, + axis: AxisBase?) -> String + { + if let block = block { + return block(value, axis) + } else { + return formatter?.string(from: NSNumber(floatLiteral: value)) ?? "" + } + } +} diff --git a/Pods/Charts/Source/Charts/Formatters/DefaultFillFormatter.swift b/Pods/Charts/Source/Charts/Formatters/DefaultFillFormatter.swift new file mode 100644 index 0000000..ea9c2a7 --- /dev/null +++ b/Pods/Charts/Source/Charts/Formatters/DefaultFillFormatter.swift @@ -0,0 +1,62 @@ +// +// DefaultFillFormatter.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +/// Default formatter that calculates the position of the filled line. +@objc(ChartDefaultFillFormatter) +open class DefaultFillFormatter: NSObject, IFillFormatter +{ + public typealias Block = ( + _ dataSet: ILineChartDataSet, + _ dataProvider: LineChartDataProvider) -> CGFloat + + @objc open var block: Block? + + public override init() { } + + @objc public init(block: @escaping Block) + { + self.block = block + } + + @objc public static func with(block: @escaping Block) -> DefaultFillFormatter? + { + return DefaultFillFormatter(block: block) + } + + open func getFillLinePosition( + dataSet: ILineChartDataSet, + dataProvider: LineChartDataProvider) -> CGFloat + { + guard block == nil else { return block!(dataSet, dataProvider) } + var fillMin: CGFloat = 0.0 + + if dataSet.yMax > 0.0 && dataSet.yMin < 0.0 + { + fillMin = 0.0 + } + else if let data = dataProvider.data + { + let max = data.yMax > 0.0 ? 0.0 : dataProvider.chartYMax + let min = data.yMin < 0.0 ? 0.0 : dataProvider.chartYMin + + fillMin = CGFloat(dataSet.yMin >= 0.0 ? min : max) + } + + return fillMin + } +} diff --git a/Pods/Charts/Source/Charts/Formatters/DefaultValueFormatter.swift b/Pods/Charts/Source/Charts/Formatters/DefaultValueFormatter.swift new file mode 100644 index 0000000..b3fff70 --- /dev/null +++ b/Pods/Charts/Source/Charts/Formatters/DefaultValueFormatter.swift @@ -0,0 +1,103 @@ +// +// DefaultValueFormatter.swift +// Charts +// +// 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 + +@objc(ChartDefaultValueFormatter) +open class DefaultValueFormatter: NSObject, IValueFormatter +{ + public typealias Block = ( + _ value: Double, + _ entry: ChartDataEntry, + _ dataSetIndex: Int, + _ viewPortHandler: ViewPortHandler?) -> String + + @objc open var block: Block? + + @objc open var hasAutoDecimals: Bool = false + + private var _formatter: NumberFormatter? + @objc open var formatter: NumberFormatter? + { + get { return _formatter } + set + { + hasAutoDecimals = false + _formatter = newValue + } + } + + private var _decimals: Int? + open var decimals: Int? + { + get { return _decimals } + set + { + _decimals = newValue + + if let digits = newValue + { + self.formatter?.minimumFractionDigits = digits + self.formatter?.maximumFractionDigits = digits + self.formatter?.usesGroupingSeparator = true + } + } + } + + public override init() + { + super.init() + + self.formatter = NumberFormatter() + hasAutoDecimals = true + } + + @objc public init(formatter: NumberFormatter) + { + super.init() + + self.formatter = formatter + } + + @objc public init(decimals: Int) + { + super.init() + + self.formatter = NumberFormatter() + self.formatter?.usesGroupingSeparator = true + self.decimals = decimals + hasAutoDecimals = true + } + + @objc public init(block: @escaping Block) + { + super.init() + + self.block = block + } + + @objc public static func with(block: @escaping Block) -> DefaultValueFormatter? + { + return DefaultValueFormatter(block: block) + } + + open func stringForValue(_ value: Double, + entry: ChartDataEntry, + dataSetIndex: Int, + viewPortHandler: ViewPortHandler?) -> String + { + if let block = block { + return block(value, entry, dataSetIndex, viewPortHandler) + } else { + return formatter?.string(from: NSNumber(floatLiteral: value)) ?? "" + } + } +} diff --git a/Pods/Charts/Source/Charts/Formatters/IAxisValueFormatter.swift b/Pods/Charts/Source/Charts/Formatters/IAxisValueFormatter.swift new file mode 100644 index 0000000..9634334 --- /dev/null +++ b/Pods/Charts/Source/Charts/Formatters/IAxisValueFormatter.swift @@ -0,0 +1,30 @@ +// +// IAxisValueFormatter.swift +// Charts +// +// 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 + +/// An interface for providing custom axis Strings. +@objc(IChartAxisValueFormatter) +public protocol IAxisValueFormatter: class +{ + + /// Called when a value from an axis is formatted before being drawn. + /// + /// For performance reasons, avoid excessive calculations and memory allocations inside this method. + /// + /// - returns: The customized label that is drawn on the x-axis. + /// - parameter value: the value that is currently being drawn + /// - parameter axis: the axis that the value belongs to + /// + func stringForValue(_ value: Double, + axis: AxisBase?) -> String + +} diff --git a/Pods/Charts/Source/Charts/Formatters/IFillFormatter.swift b/Pods/Charts/Source/Charts/Formatters/IFillFormatter.swift new file mode 100644 index 0000000..8a88500 --- /dev/null +++ b/Pods/Charts/Source/Charts/Formatters/IFillFormatter.swift @@ -0,0 +1,21 @@ +// +// IFillFormatter.swift +// Charts +// +// 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 + +/// Protocol for providing a custom logic to where the filling line of a LineDataSet should end. This of course only works if setFillEnabled(...) is set to true. +@objc(IChartFillFormatter) +public protocol IFillFormatter +{ + /// - returns: The vertical (y-axis) position where the filled-line of the LineDataSet should end. + func getFillLinePosition(dataSet: ILineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat +} diff --git a/Pods/Charts/Source/Charts/Formatters/IValueFormatter.swift b/Pods/Charts/Source/Charts/Formatters/IValueFormatter.swift new file mode 100644 index 0000000..bd7c0c9 --- /dev/null +++ b/Pods/Charts/Source/Charts/Formatters/IValueFormatter.swift @@ -0,0 +1,41 @@ +// +// IValueFormatter.swift +// Charts +// +// 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 + +/// Interface that allows custom formatting of all values inside the chart before they are being drawn to the screen. +/// +/// Simply create your own formatting class and let it implement ValueFormatter. +/// +/// Then override the getFormattedValue(...) method and return whatever you want. +@objc(IChartValueFormatter) +public protocol IValueFormatter: class +{ + + /// Called when a value (from labels inside the chart) is formatted before being drawn. + /// + /// For performance reasons, avoid excessive calculations and memory allocations inside this method. + /// + /// - returns: The formatted label ready for being drawn + /// + /// - parameter value: The value to be formatted + /// + /// - parameter axis: The entry the value belongs to - in e.g. BarChart, this is of class BarEntry + /// + /// - parameter dataSetIndex: The index of the DataSet the entry in focus belongs to + /// + /// - parameter viewPortHandler: provides information about the current chart state (scale, translation, ...) + /// + func stringForValue(_ value: Double, + entry: ChartDataEntry, + dataSetIndex: Int, + viewPortHandler: ViewPortHandler?) -> String +} diff --git a/Pods/Charts/Source/Charts/Formatters/IndexAxisValueFormatter.swift b/Pods/Charts/Source/Charts/Formatters/IndexAxisValueFormatter.swift new file mode 100644 index 0000000..ae86509 --- /dev/null +++ b/Pods/Charts/Source/Charts/Formatters/IndexAxisValueFormatter.swift @@ -0,0 +1,59 @@ +// +// IndexAxisValueFormatter.swift +// Charts +// +// 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 + +/// This formatter is used for passing an array of x-axis labels, on whole x steps. +@objc(ChartIndexAxisValueFormatter) +open class IndexAxisValueFormatter: NSObject, IAxisValueFormatter +{ + private var _values: [String] = [String]() + private var _valueCount: Int = 0 + + @objc public var values: [String] + { + get + { + return _values + } + set + { + _values = newValue + _valueCount = _values.count + } + } + + public override init() + { + super.init() + + } + + @objc public init(values: [String]) + { + super.init() + + self.values = values + } + + @objc public static func with(values: [String]) -> IndexAxisValueFormatter? + { + return IndexAxisValueFormatter(values: values) + } + + open func stringForValue(_ value: Double, + axis: AxisBase?) -> String + { + let index = Int(value.rounded()) + guard values.indices.contains(index), index == Int(value) else { return "" } + return _values[index] + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/BarHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/BarHighlighter.swift new file mode 100644 index 0000000..2bb81a2 --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/BarHighlighter.swift @@ -0,0 +1,118 @@ +// +// BarHighlighter.swift +// Charts +// +// 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 + +@objc(BarChartHighlighter) +open class BarHighlighter: ChartHighlighter +{ + open override func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? + { + guard + let barData = (self.chart as? BarChartDataProvider)?.barData, + let high = super.getHighlight(x: x, y: y) + else { return nil } + + let pos = getValsForTouch(x: x, y: y) + + if let set = barData.getDataSetByIndex(high.dataSetIndex) as? IBarChartDataSet, + set.isStacked + { + return getStackedHighlight(high: high, + set: set, + xValue: Double(pos.x), + yValue: Double(pos.y)) + } + else + { + return high + } + } + + internal override func getDistance(x1: CGFloat, y1: CGFloat, x2: CGFloat, y2: CGFloat) -> CGFloat + { + return abs(x1 - x2) + } + + internal override var data: ChartData? + { + return (chart as? BarChartDataProvider)?.barData + } + + /// This method creates the Highlight object that also indicates which value of a stacked BarEntry has been selected. + /// - parameter high: the Highlight to work with looking for stacked values + /// - parameter set: + /// - parameter xIndex: + /// - parameter yValue: + /// - returns: + @objc open func getStackedHighlight(high: Highlight, + set: IBarChartDataSet, + xValue: Double, + yValue: Double) -> Highlight? + { + guard + let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider, + let entry = set.entryForXValue(xValue, closestToY: yValue) as? BarChartDataEntry + else { return nil } + + // Not stacked + if entry.yValues == nil + { + return high + } + + guard + let ranges = entry.ranges, + ranges.count > 0 + else { return nil } + + let stackIndex = getClosestStackIndex(ranges: ranges, value: yValue) + let pixel = chart + .getTransformer(forAxis: set.axisDependency) + .pixelForValues(x: high.x, y: ranges[stackIndex].to) + + return Highlight(x: entry.x, + y: entry.y, + xPx: pixel.x, + yPx: pixel.y, + dataSetIndex: high.dataSetIndex, + stackIndex: stackIndex, + axis: high.axis) + } + + /// - returns: The index of the closest value inside the values array / ranges (stacked barchart) to the value given as a parameter. + /// - parameter entry: + /// - parameter value: + /// - returns: + @objc open func getClosestStackIndex(ranges: [Range]?, value: Double) -> Int + { + guard let ranges = ranges else { return 0 } + + var stackIndex = 0 + + for range in ranges + { + if range.contains(value) + { + return stackIndex + } + else + { + stackIndex += 1 + } + } + + let length = max(ranges.count - 1, 0) + + return (value > ranges[length].to) ? length : 0 + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/ChartHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/ChartHighlighter.swift new file mode 100644 index 0000000..3fe679f --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/ChartHighlighter.swift @@ -0,0 +1,188 @@ +// +// ChartHighlighter.swift +// Charts +// +// 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 + +open class ChartHighlighter : NSObject, IHighlighter +{ + /// instance of the data-provider + @objc open weak var chart: ChartDataProvider? + + @objc public init(chart: ChartDataProvider) + { + self.chart = chart + } + + open func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? + { + let xVal = Double(getValsForTouch(x: x, y: y).x) + return getHighlight(xValue: xVal, x: x, y: y) + } + + /// - returns: The corresponding x-pos for a given touch-position in pixels. + /// - parameter x: + /// - returns: + @objc open func getValsForTouch(x: CGFloat, y: CGFloat) -> CGPoint + { + guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider else { return .zero } + + // take any transformer to determine the values + return chart.getTransformer(forAxis: .left).valueForTouchPoint(x: x, y: y) + } + + /// - returns: The corresponding ChartHighlight for a given x-value and xy-touch position in pixels. + /// - parameter xValue: + /// - parameter x: + /// - parameter y: + /// - returns: + @objc open func getHighlight(xValue xVal: Double, x: CGFloat, y: CGFloat) -> Highlight? + { + guard let chart = chart else { return nil } + + let closestValues = getHighlights(xValue: xVal, x: x, y: y) + guard !closestValues.isEmpty else { return nil } + + let leftAxisMinDist = getMinimumDistance(closestValues: closestValues, y: y, axis: .left) + let rightAxisMinDist = getMinimumDistance(closestValues: closestValues, y: y, axis: .right) + + let axis: YAxis.AxisDependency = leftAxisMinDist < rightAxisMinDist ? .left : .right + + let detail = closestSelectionDetailByPixel(closestValues: closestValues, x: x, y: y, axis: axis, minSelectionDistance: chart.maxHighlightDistance) + + return detail + } + + /// - returns: A list of Highlight objects representing the entries closest to the given xVal. + /// The returned list contains two objects per DataSet (closest rounding up, closest rounding down). + /// - parameter xValue: the transformed x-value of the x-touch position + /// - parameter x: touch position + /// - parameter y: touch position + /// - returns: + @objc open func getHighlights(xValue: Double, x: CGFloat, y: CGFloat) -> [Highlight] + { + var vals = [Highlight]() + + guard let data = self.data else { return vals } + + for i in 0 ..< data.dataSetCount + { + guard + let dataSet = data.getDataSetByIndex(i), + dataSet.isHighlightEnabled // don't include datasets that cannot be highlighted + else { continue } + + + // extract all y-values from all DataSets at the given x-value. + // some datasets (i.e bubble charts) make sense to have multiple values for an x-value. We'll have to find a way to handle that later on. It's more complicated now when x-indices are floating point. + vals.append(contentsOf: buildHighlights(dataSet: dataSet, dataSetIndex: i, xValue: xValue, rounding: .closest)) + } + + return vals + } + + /// - returns: An array of `Highlight` objects corresponding to the selected xValue and dataSetIndex. + internal func buildHighlights( + dataSet set: IChartDataSet, + dataSetIndex: Int, + xValue: Double, + rounding: ChartDataSetRounding) -> [Highlight] + { + var highlights = [Highlight]() + + guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider else { return highlights } + + var entries = set.entriesForXValue(xValue) + if entries.count == 0, let closest = set.entryForXValue(xValue, closestToY: .nan, rounding: rounding) + { + // Try to find closest x-value and take all entries for that x-value + entries = set.entriesForXValue(closest.x) + } + + for e in entries + { + let px = chart.getTransformer(forAxis: set.axisDependency).pixelForValues(x: e.x, y: e.y) + + let highlight = Highlight(x: e.x, y: e.y, xPx: px.x, yPx: px.y, dataSetIndex: dataSetIndex, axis: set.axisDependency) + highlights.append(highlight) + } + + return highlights + } + + // - MARK: - Utilities + + /// - returns: The `ChartHighlight` of the closest value on the x-y cartesian axes + internal func closestSelectionDetailByPixel( + closestValues: [Highlight], + x: CGFloat, + y: CGFloat, + axis: YAxis.AxisDependency?, + minSelectionDistance: CGFloat) -> Highlight? + { + var distance = minSelectionDistance + var closest: Highlight? + + for high in closestValues + { + if axis == nil || high.axis == axis + { + let cDistance = getDistance(x1: x, y1: y, x2: high.xPx, y2: high.yPx) + + if cDistance < distance + { + closest = high + distance = cDistance + } + } + } + + return closest + } + + /// - returns: The minimum distance from a touch-y-value (in pixels) to the closest y-value (in pixels) that is displayed in the chart. + internal func getMinimumDistance( + closestValues: [Highlight], + y: CGFloat, + axis: YAxis.AxisDependency) -> CGFloat + { + var distance = CGFloat.greatestFiniteMagnitude + + for high in closestValues + { + if high.axis == axis + { + let tempDistance = abs(getHighlightPos(high: high) - y) + if tempDistance < distance + { + distance = tempDistance + } + } + } + + return distance + } + + internal func getHighlightPos(high: Highlight) -> CGFloat + { + return high.yPx + } + + internal func getDistance(x1: CGFloat, y1: CGFloat, x2: CGFloat, y2: CGFloat) -> CGFloat + { + return hypot(x1 - x2, y1 - y2) + } + + internal var data: ChartData? + { + return chart?.data + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/CombinedHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/CombinedHighlighter.swift new file mode 100644 index 0000000..7053df0 --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/CombinedHighlighter.swift @@ -0,0 +1,70 @@ +// +// CombinedHighlighter.swift +// Charts +// +// 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 + +@objc(CombinedChartHighlighter) +open class CombinedHighlighter: ChartHighlighter +{ + /// bar highlighter for supporting stacked highlighting + private var barHighlighter: BarHighlighter? + + @objc public init(chart: CombinedChartDataProvider, barDataProvider: BarChartDataProvider) + { + super.init(chart: chart) + + // if there is BarData, create a BarHighlighter + self.barHighlighter = barDataProvider.barData == nil ? nil : BarHighlighter(chart: barDataProvider) + } + + open override func getHighlights(xValue: Double, x: CGFloat, y: CGFloat) -> [Highlight] + { + var vals = [Highlight]() + + guard + let chart = self.chart as? CombinedChartDataProvider, + let dataObjects = chart.combinedData?.allData + else { return vals } + + for i in 0..= 0 } + + /// Sets the x- and y-position (pixels) where this highlight was last drawn. + @objc open func setDraw(x: CGFloat, y: CGFloat) + { + self.drawX = x + self.drawY = y + } + + /// Sets the x- and y-position (pixels) where this highlight was last drawn. + @objc open func setDraw(pt: CGPoint) + { + self.drawX = pt.x + self.drawY = pt.y + } + + // MARK: NSObject + + open override var description: String + { + return "Highlight, x: \(_x), y: \(_y), dataIndex (combined charts): \(dataIndex), dataSetIndex: \(_dataSetIndex), stackIndex (only stacked barentry): \(_stackIndex)" + } +} + + +// MARK: Equatable +extension Highlight /*: Equatable*/ { + open override func isEqual(_ object: Any?) -> Bool { + guard let object = object as? Highlight else { return false } + + if self === object + { + return true + } + + return _x == object._x + && _y == object._y + && dataIndex == object.dataIndex + && _dataSetIndex == object._dataSetIndex + && _stackIndex == object._stackIndex + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/HorizontalBarHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/HorizontalBarHighlighter.swift new file mode 100644 index 0000000..c3b6e28 --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/HorizontalBarHighlighter.swift @@ -0,0 +1,68 @@ +// +// HorizontalBarHighlighter.swift +// Charts +// +// 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 + +@objc(HorizontalBarChartHighlighter) +open class HorizontalBarHighlighter: BarHighlighter +{ + open override func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? + { + guard let barData = self.chart?.data as? BarChartData else { return nil } + + let pos = getValsForTouch(x: y, y: x) + guard let high = getHighlight(xValue: Double(pos.y), x: y, y: x) else { return nil } + + if let set = barData.getDataSetByIndex(high.dataSetIndex) as? IBarChartDataSet, + set.isStacked + { + return getStackedHighlight(high: high, + set: set, + xValue: Double(pos.y), + yValue: Double(pos.x)) + } + + return high + } + + internal override func buildHighlights( + dataSet set: IChartDataSet, + dataSetIndex: Int, + xValue: Double, + rounding: ChartDataSetRounding) -> [Highlight] + { + var highlights = [Highlight]() + + guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider else { return highlights } + + var entries = set.entriesForXValue(xValue) + if entries.count == 0, let closest = set.entryForXValue(xValue, closestToY: .nan, rounding: rounding) + { + // Try to find closest x-value and take all entries for that x-value + entries = set.entriesForXValue(closest.x) + } + + for e in entries + { + let px = chart.getTransformer(forAxis: set.axisDependency).pixelForValues(x: e.y, y: e.x) + + highlights.append(Highlight(x: e.x, y: e.y, xPx: px.x, yPx: px.y, dataSetIndex: dataSetIndex, axis: set.axisDependency)) + } + + return highlights + } + + internal override func getDistance(x1: CGFloat, y1: CGFloat, x2: CGFloat, y2: CGFloat) -> CGFloat + { + return abs(y1 - y2) + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/IHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/IHighlighter.swift new file mode 100644 index 0000000..56acfcc --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/IHighlighter.swift @@ -0,0 +1,23 @@ +// +// IHighlighter.swift +// Charts +// +// 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 + +@objc(IChartHighlighter) +public protocol IHighlighter: class +{ + /// - returns: A Highlight object corresponding to the given x- and y- touch positions in pixels. + /// - parameter x: + /// - parameter y: + /// - returns: + func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? +} diff --git a/Pods/Charts/Source/Charts/Highlight/PieHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/PieHighlighter.swift new file mode 100644 index 0000000..54bb3d7 --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/PieHighlighter.swift @@ -0,0 +1,27 @@ +// +// PieHighlighter.swift +// Charts +// +// 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 + +@objc(PieChartHighlighter) +open class PieHighlighter: PieRadarHighlighter +{ + open override func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight? + { + guard + let set = chart?.data?.dataSets[0], + let entry = set.entryForIndex(index) + else { return nil } + + return Highlight(x: Double(index), y: entry.y, xPx: x, yPx: y, dataSetIndex: 0, axis: set.axisDependency) + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/PieRadarHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/PieRadarHighlighter.swift new file mode 100644 index 0000000..ec77e72 --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/PieRadarHighlighter.swift @@ -0,0 +1,60 @@ +// +// PieRadarHighlighter.swift +// Charts +// +// 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 + +@objc(PieRadarChartHighlighter) +open class PieRadarHighlighter: ChartHighlighter +{ + open override func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? + { + guard let chart = self.chart as? PieRadarChartViewBase else { return nil } + + let touchDistanceToCenter = chart.distanceToCenter(x: x, y: y) + + // check if a slice was touched + guard touchDistanceToCenter <= chart.radius else + { + // if no slice was touched, highlight nothing + return nil + } + + var angle = chart.angleForPoint(x: x ,y: y) + + if chart is PieChartView + { + angle /= CGFloat(chart.chartAnimator.phaseY) + } + + let index = chart.indexForAngle(angle) + + // check if the index could be found + if index < 0 || index >= chart.data?.maxEntryCountSet?.entryCount ?? 0 + { + return nil + } + else + { + return closestHighlight(index: index, x: x, y: y) + } + + } + + /// - returns: The closest Highlight object of the given objects based on the touch position inside the chart. + /// - parameter index: + /// - parameter x: + /// - parameter y: + @objc open func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight? + { + fatalError("closestHighlight(index, x, y) cannot be called on PieRadarChartHighlighter") + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/RadarHighlighter.swift b/Pods/Charts/Source/Charts/Highlight/RadarHighlighter.swift new file mode 100644 index 0000000..d54193c --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/RadarHighlighter.swift @@ -0,0 +1,78 @@ +// +// RadarHighlighter.swift +// Charts +// +// 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 + +@objc(RadarChartHighlighter) +open class RadarHighlighter: PieRadarHighlighter +{ + open override func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight? + { + guard let chart = self.chart as? RadarChartView else { return nil } + + let highlights = getHighlights(forIndex: index) + + let distanceToCenter = Double(chart.distanceToCenter(x: x, y: y) / chart.factor) + + var closest: Highlight? + var distance = Double.greatestFiniteMagnitude + + for high in highlights + { + let cdistance = abs(high.y - distanceToCenter) + if cdistance < distance + { + closest = high + distance = cdistance + } + } + + return closest + } + + /// - returns: An array of Highlight objects for the given index. + /// The Highlight objects give information about the value at the selected index and DataSet it belongs to. + /// + /// - parameter index: + internal func getHighlights(forIndex index: Int) -> [Highlight] + { + var vals = [Highlight]() + + guard + let chart = self.chart as? RadarChartView, + let chartData = chart.data + else { return vals } + + let phaseX = chart.chartAnimator.phaseX + let phaseY = chart.chartAnimator.phaseY + let sliceangle = chart.sliceAngle + let factor = chart.factor + + for i in chartData.dataSets.indices + { + guard + let dataSet = chartData.getDataSetByIndex(i), + let entry = dataSet.entryForIndex(index) + else { continue } + + let y = (entry.y - chart.chartYMin) + + let p = chart.centerOffsets.moving(distance: CGFloat(y) * factor * CGFloat(phaseY), + atAngle: sliceangle * CGFloat(index) * CGFloat(phaseX) + chart.rotationAngle) + + let highlight = Highlight(x: Double(index), y: entry.y, xPx: p.x, yPx: p.y, dataSetIndex: i, axis: dataSet.axisDependency) + vals.append(highlight) + } + + return vals + } +} diff --git a/Pods/Charts/Source/Charts/Highlight/Range.swift b/Pods/Charts/Source/Charts/Highlight/Range.swift new file mode 100644 index 0000000..1585869 --- /dev/null +++ b/Pods/Charts/Source/Charts/Highlight/Range.swift @@ -0,0 +1,51 @@ +// +// Range.swift +// Charts +// +// 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 + +@objc(ChartRange) +open class Range: NSObject +{ + @objc open var from: Double + @objc open var to: Double + + @objc public init(from: Double, to: Double) + { + self.from = from + self.to = to + + super.init() + } + + /// - returns: `true` if this range contains (if the value is in between) the given value, `false` ifnot. + /// - parameter value: + @objc open func contains(_ value: Double) -> Bool + { + if value > from && value <= to + { + return true + } + else + { + return false + } + } + + @objc open func isLarger(_ value: Double) -> Bool + { + return value > to + } + + @objc open func isSmaller(_ value: Double) -> Bool + { + return value < from + } +} diff --git a/Pods/Charts/Source/Charts/Interfaces/BarChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/BarChartDataProvider.swift new file mode 100644 index 0000000..e1d0a8d --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/BarChartDataProvider.swift @@ -0,0 +1,23 @@ +// +// BarChartDataProvider.swift +// Charts +// +// 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 + +@objc +public protocol BarChartDataProvider: BarLineScatterCandleBubbleChartDataProvider +{ + var barData: BarChartData? { get } + + var isDrawBarShadowEnabled: Bool { get } + var isDrawValueAboveBarEnabled: Bool { get } + var isHighlightFullBarEnabled: Bool { get } +} \ No newline at end of file diff --git a/Pods/Charts/Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift new file mode 100644 index 0000000..fd5c065 --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift @@ -0,0 +1,23 @@ +// +// BarLineScatterCandleBubbleChartDataProvider.swift +// Charts +// +// 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 + +@objc +public protocol BarLineScatterCandleBubbleChartDataProvider: ChartDataProvider +{ + func getTransformer(forAxis: YAxis.AxisDependency) -> Transformer + func isInverted(axis: YAxis.AxisDependency) -> Bool + + var lowestVisibleX: Double { get } + var highestVisibleX: Double { get } +} diff --git a/Pods/Charts/Source/Charts/Interfaces/BubbleChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/BubbleChartDataProvider.swift new file mode 100644 index 0000000..d9fc9e8 --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/BubbleChartDataProvider.swift @@ -0,0 +1,19 @@ +// +// BubbleChartDataProvider.swift +// Charts +// +// 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 + +@objc +public protocol BubbleChartDataProvider: BarLineScatterCandleBubbleChartDataProvider +{ + var bubbleData: BubbleChartData? { get } +} \ No newline at end of file diff --git a/Pods/Charts/Source/Charts/Interfaces/CandleChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/CandleChartDataProvider.swift new file mode 100644 index 0000000..6e729ff --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/CandleChartDataProvider.swift @@ -0,0 +1,19 @@ +// +// CandleChartDataProvider.swift +// Charts +// +// 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 + +@objc +public protocol CandleChartDataProvider: BarLineScatterCandleBubbleChartDataProvider +{ + var candleData: CandleChartData? { get } +} \ No newline at end of file diff --git a/Pods/Charts/Source/Charts/Interfaces/ChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/ChartDataProvider.swift new file mode 100644 index 0000000..9961933 --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/ChartDataProvider.swift @@ -0,0 +1,39 @@ +// +// ChartDataProvider.swift +// Charts +// +// 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 + +@objc +public protocol ChartDataProvider +{ + /// - returns: The minimum x-value of the chart, regardless of zoom or translation. + var chartXMin: Double { get } + + /// - returns: The maximum x-value of the chart, regardless of zoom or translation. + var chartXMax: Double { get } + + /// - returns: The minimum y-value of the chart, regardless of zoom or translation. + var chartYMin: Double { get } + + /// - returns: The maximum y-value of the chart, regardless of zoom or translation. + var chartYMax: Double { get } + + var maxHighlightDistance: CGFloat { get } + + var xRange: Double { get } + + var centerOffsets: CGPoint { get } + + var data: ChartData? { get } + + var maxVisibleCount: Int { get } +} \ No newline at end of file diff --git a/Pods/Charts/Source/Charts/Interfaces/CombinedChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/CombinedChartDataProvider.swift new file mode 100644 index 0000000..e360eed --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/CombinedChartDataProvider.swift @@ -0,0 +1,19 @@ +// +// CombinedChartDataProvider.swoft +// Charts +// +// 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 + +@objc +public protocol CombinedChartDataProvider: LineChartDataProvider, BarChartDataProvider, BubbleChartDataProvider, CandleChartDataProvider, ScatterChartDataProvider +{ + var combinedData: CombinedChartData? { get } +} \ No newline at end of file diff --git a/Pods/Charts/Source/Charts/Interfaces/LineChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/LineChartDataProvider.swift new file mode 100644 index 0000000..e635482 --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/LineChartDataProvider.swift @@ -0,0 +1,21 @@ +// +// LineChartDataProvider.swift +// Charts +// +// 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 + +@objc +public protocol LineChartDataProvider: BarLineScatterCandleBubbleChartDataProvider +{ + var lineData: LineChartData? { get } + + func getAxis(_ axis: YAxis.AxisDependency) -> YAxis +} diff --git a/Pods/Charts/Source/Charts/Interfaces/ScatterChartDataProvider.swift b/Pods/Charts/Source/Charts/Interfaces/ScatterChartDataProvider.swift new file mode 100644 index 0000000..050bde7 --- /dev/null +++ b/Pods/Charts/Source/Charts/Interfaces/ScatterChartDataProvider.swift @@ -0,0 +1,19 @@ +// +// ScatterChartDataProvider.swift +// Charts +// +// 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 + +@objc +public protocol ScatterChartDataProvider: BarLineScatterCandleBubbleChartDataProvider +{ + var scatterData: ScatterChartData? { get } +} \ No newline at end of file diff --git a/Pods/Charts/Source/Charts/Jobs/AnimatedMoveViewJob.swift b/Pods/Charts/Source/Charts/Jobs/AnimatedMoveViewJob.swift new file mode 100644 index 0000000..b6ea8c2 --- /dev/null +++ b/Pods/Charts/Source/Charts/Jobs/AnimatedMoveViewJob.swift @@ -0,0 +1,37 @@ +// +// AnimatedMoveViewJob.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +open class AnimatedMoveViewJob: AnimatedViewPortJob +{ + internal override func animationUpdate() + { + guard + let viewPortHandler = viewPortHandler, + let transformer = transformer, + let view = view + else { return } + + var pt = CGPoint( + x: xOrigin + (CGFloat(xValue) - xOrigin) * phase, + y: yOrigin + (CGFloat(yValue) - yOrigin) * phase + ) + + transformer.pointValueToPixel(&pt) + viewPortHandler.centerViewPort(pt: pt, chart: view) + } +} diff --git a/Pods/Charts/Source/Charts/Jobs/AnimatedViewPortJob.swift b/Pods/Charts/Source/Charts/Jobs/AnimatedViewPortJob.swift new file mode 100644 index 0000000..985358e --- /dev/null +++ b/Pods/Charts/Source/Charts/Jobs/AnimatedViewPortJob.swift @@ -0,0 +1,130 @@ +// +// AnimatedViewPortJob.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +open class AnimatedViewPortJob: ViewPortJob +{ + internal var phase: CGFloat = 1.0 + internal var xOrigin: CGFloat = 0.0 + internal var yOrigin: CGFloat = 0.0 + + private var _startTime: TimeInterval = 0.0 + private var _displayLink: NSUIDisplayLink! + private var _duration: TimeInterval = 0.0 + private var _endTime: TimeInterval = 0.0 + + private var _easing: ChartEasingFunctionBlock? + + @objc public init( + viewPortHandler: ViewPortHandler, + xValue: Double, + yValue: Double, + transformer: Transformer, + view: ChartViewBase, + xOrigin: CGFloat, + yOrigin: CGFloat, + duration: TimeInterval, + easing: ChartEasingFunctionBlock?) + { + super.init(viewPortHandler: viewPortHandler, + xValue: xValue, + yValue: yValue, + transformer: transformer, + view: view) + + self.xOrigin = xOrigin + self.yOrigin = yOrigin + self._duration = duration + self._easing = easing + } + + deinit + { + stop(finish: false) + } + + open override func doJob() + { + start() + } + + @objc open func start() + { + _startTime = CACurrentMediaTime() + _endTime = _startTime + _duration + _endTime = _endTime > _endTime ? _endTime : _endTime + + updateAnimationPhase(_startTime) + + _displayLink = NSUIDisplayLink(target: self, selector: #selector(animationLoop)) + _displayLink.add(to: .main, forMode: .commonModes) + } + + @objc open func stop(finish: Bool) + { + guard _displayLink != nil else { return } + + _displayLink.remove(from: .main, forMode: .commonModes) + _displayLink = nil + + if finish + { + if phase != 1.0 + { + phase = 1.0 + animationUpdate() + } + + animationEnd() + } + } + + private func updateAnimationPhase(_ currentTime: TimeInterval) + { + let elapsedTime = currentTime - _startTime + let duration = _duration + var elapsed = elapsedTime + + elapsed = min(elapsed, duration) + + phase = CGFloat(_easing?(elapsed, duration) ?? elapsed / duration) + } + + @objc private func animationLoop() + { + let currentTime: TimeInterval = CACurrentMediaTime() + + updateAnimationPhase(currentTime) + + animationUpdate() + + if currentTime >= _endTime + { + stop(finish: true) + } + } + + internal func animationUpdate() + { + // Override this + } + + internal func animationEnd() + { + // Override this + } +} diff --git a/Pods/Charts/Source/Charts/Jobs/AnimatedZoomViewJob.swift b/Pods/Charts/Source/Charts/Jobs/AnimatedZoomViewJob.swift new file mode 100644 index 0000000..4e9d5fd --- /dev/null +++ b/Pods/Charts/Source/Charts/Jobs/AnimatedZoomViewJob.swift @@ -0,0 +1,96 @@ +// +// AnimatedZoomViewJob.swift +// Charts +// +// 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 + +open class AnimatedZoomViewJob: AnimatedViewPortJob +{ + internal var yAxis: YAxis? + internal var xAxisRange: Double = 0.0 + internal var scaleX: CGFloat = 0.0 + internal var scaleY: CGFloat = 0.0 + internal var zoomOriginX: CGFloat = 0.0 + internal var zoomOriginY: CGFloat = 0.0 + internal var zoomCenterX: CGFloat = 0.0 + internal var zoomCenterY: CGFloat = 0.0 + + @objc public init( + viewPortHandler: ViewPortHandler, + transformer: Transformer, + view: ChartViewBase, + yAxis: YAxis, + xAxisRange: Double, + scaleX: CGFloat, + scaleY: CGFloat, + xOrigin: CGFloat, + yOrigin: CGFloat, + zoomCenterX: CGFloat, + zoomCenterY: CGFloat, + zoomOriginX: CGFloat, + zoomOriginY: CGFloat, + duration: TimeInterval, + easing: ChartEasingFunctionBlock?) + { + super.init(viewPortHandler: viewPortHandler, + xValue: 0.0, + yValue: 0.0, + transformer: transformer, + view: view, + xOrigin: xOrigin, + yOrigin: yOrigin, + duration: duration, + easing: easing) + + self.yAxis = yAxis + self.xAxisRange = xAxisRange + self.scaleX = scaleX + self.scaleY = scaleY + self.zoomCenterX = zoomCenterX + self.zoomCenterY = zoomCenterY + self.zoomOriginX = zoomOriginX + self.zoomOriginY = zoomOriginY + } + + internal override func animationUpdate() + { + guard + let viewPortHandler = viewPortHandler, + let transformer = transformer, + let view = view + else { return } + + let scaleX = xOrigin + (self.scaleX - xOrigin) * phase + let scaleY = yOrigin + (self.scaleY - yOrigin) * phase + + var matrix = viewPortHandler.setZoom(scaleX: scaleX, scaleY: scaleY) + viewPortHandler.refresh(newMatrix: matrix, chart: view, invalidate: false) + + let valsInView = CGFloat(yAxis?.axisRange ?? 0.0) / viewPortHandler.scaleY + let xsInView = CGFloat(xAxisRange) / viewPortHandler.scaleX + + var pt = CGPoint( + x: zoomOriginX + ((zoomCenterX - xsInView / 2.0) - zoomOriginX) * phase, + y: zoomOriginY + ((zoomCenterY + valsInView / 2.0) - zoomOriginY) * phase + ) + + transformer.pointValueToPixel(&pt) + + matrix = viewPortHandler.translate(pt: pt) + viewPortHandler.refresh(newMatrix: matrix, chart: view, invalidate: true) + } + + internal override func animationEnd() + { + (view as? BarLineChartViewBase)?.calculateOffsets() + view?.setNeedsDisplay() + } +} diff --git a/Pods/Charts/Source/Charts/Jobs/MoveViewJob.swift b/Pods/Charts/Source/Charts/Jobs/MoveViewJob.swift new file mode 100644 index 0000000..acc8165 --- /dev/null +++ b/Pods/Charts/Source/Charts/Jobs/MoveViewJob.swift @@ -0,0 +1,38 @@ +// +// MoveViewJob.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(MoveChartViewJob) +open class MoveViewJob: ViewPortJob +{ + open override func doJob() + { + guard + let viewPortHandler = viewPortHandler, + let transformer = transformer, + let view = view + else { return } + + var pt = CGPoint( + x: xValue, + y: yValue + ) + + transformer.pointValueToPixel(&pt) + viewPortHandler.centerViewPort(pt: pt, chart: view) + } +} diff --git a/Pods/Charts/Source/Charts/Jobs/ViewPortJob.swift b/Pods/Charts/Source/Charts/Jobs/ViewPortJob.swift new file mode 100644 index 0000000..c52562e --- /dev/null +++ b/Pods/Charts/Source/Charts/Jobs/ViewPortJob.swift @@ -0,0 +1,46 @@ +// +// ViewPortJob.swift +// Charts +// +// 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 + +// This defines a viewport modification job, used for delaying or animating viewport changes +@objc(ChartViewPortJob) +open class ViewPortJob: NSObject +{ + internal var point: CGPoint = CGPoint() + internal weak var viewPortHandler: ViewPortHandler? + internal var xValue: Double = 0.0 + internal var yValue: Double = 0.0 + internal weak var transformer: Transformer? + internal weak var view: ChartViewBase? + + @objc public init( + viewPortHandler: ViewPortHandler, + xValue: Double, + yValue: Double, + transformer: Transformer, + view: ChartViewBase) + { + super.init() + + self.viewPortHandler = viewPortHandler + self.xValue = xValue + self.yValue = yValue + self.transformer = transformer + self.view = view + } + + @objc open func doJob() + { + fatalError("`doJob()` must be overridden by subclasses") + } +} diff --git a/Pods/Charts/Source/Charts/Jobs/ZoomViewJob.swift b/Pods/Charts/Source/Charts/Jobs/ZoomViewJob.swift new file mode 100644 index 0000000..bdc7e32 --- /dev/null +++ b/Pods/Charts/Source/Charts/Jobs/ZoomViewJob.swift @@ -0,0 +1,75 @@ +// +// ZoomViewJob.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ZoomChartViewJob) +open class ZoomViewJob: ViewPortJob +{ + internal var scaleX: CGFloat = 0.0 + internal var scaleY: CGFloat = 0.0 + internal var axisDependency: YAxis.AxisDependency = .left + + @objc public init( + viewPortHandler: ViewPortHandler, + scaleX: CGFloat, + scaleY: CGFloat, + xValue: Double, + yValue: Double, + transformer: Transformer, + axis: YAxis.AxisDependency, + view: ChartViewBase) + { + super.init( + viewPortHandler: viewPortHandler, + xValue: xValue, + yValue: yValue, + transformer: transformer, + view: view) + + self.scaleX = scaleX + self.scaleY = scaleY + self.axisDependency = axis + } + + open override func doJob() + { + guard + let viewPortHandler = viewPortHandler, + let transformer = transformer, + let view = view + else { return } + + var matrix = viewPortHandler.setZoom(scaleX: scaleX, scaleY: scaleY) + viewPortHandler.refresh(newMatrix: matrix, chart: view, invalidate: false) + + let yValsInView = (view as! BarLineChartViewBase).getAxis(axisDependency).axisRange / Double(viewPortHandler.scaleY) + let xValsInView = (view as! BarLineChartViewBase).xAxis.axisRange / Double(viewPortHandler.scaleX) + + var pt = CGPoint( + x: CGFloat(xValue - xValsInView / 2.0), + y: CGFloat(yValue + yValsInView / 2.0) + ) + + transformer.pointValueToPixel(&pt) + + matrix = viewPortHandler.translate(pt: pt) + viewPortHandler.refresh(newMatrix: matrix, chart: view, invalidate: false) + + (view as! BarLineChartViewBase).calculateOffsets() + view.setNeedsDisplay() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/AxisRendererBase.swift b/Pods/Charts/Source/Charts/Renderers/AxisRendererBase.swift new file mode 100644 index 0000000..15a9206 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/AxisRendererBase.swift @@ -0,0 +1,216 @@ +// +// AxisRendererBase.swift +// Charts +// +// 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 + +@objc(ChartAxisRendererBase) +open class AxisRendererBase: Renderer +{ + /// base axis this axis renderer works with + @objc open var axis: AxisBase? + + /// transformer to transform values to screen pixels and return + @objc open var transformer: Transformer? + + @objc public init(viewPortHandler: ViewPortHandler, transformer: Transformer?, axis: AxisBase?) + { + super.init(viewPortHandler: viewPortHandler) + + self.transformer = transformer + self.axis = axis + } + + /// Draws the axis labels on the specified context + @objc open func renderAxisLabels(context: CGContext) + { + fatalError("renderAxisLabels() cannot be called on AxisRendererBase") + } + + /// Draws the grid lines belonging to the axis. + @objc open func renderGridLines(context: CGContext) + { + fatalError("renderGridLines() cannot be called on AxisRendererBase") + } + + /// Draws the line that goes alongside the axis. + @objc open func renderAxisLine(context: CGContext) + { + fatalError("renderAxisLine() cannot be called on AxisRendererBase") + } + + /// Draws the LimitLines associated with this axis to the screen. + @objc open func renderLimitLines(context: CGContext) + { + fatalError("renderLimitLines() cannot be called on AxisRendererBase") + } + + /// Computes the axis values. + /// - parameter min: the minimum value in the data object for this axis + /// - parameter max: the maximum value in the data object for this axis + @objc open func computeAxis(min: Double, max: Double, inverted: Bool) + { + var min = min, max = max + + if let transformer = self.transformer + { + // calculate the starting and entry point of the y-labels (depending on zoom / contentrect bounds) + if viewPortHandler.contentWidth > 10.0 && !viewPortHandler.isFullyZoomedOutY + { + let p1 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) + let p2 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentBottom)) + + if !inverted + { + min = Double(p2.y) + max = Double(p1.y) + } + else + { + min = Double(p1.y) + max = Double(p2.y) + } + } + } + + computeAxisValues(min: min, max: max) + } + + /// Sets up the axis values. Computes the desired number of labels between the two given extremes. + @objc open func computeAxisValues(min: Double, max: Double) + { + guard let axis = self.axis else { return } + + let yMin = min + let yMax = max + + let labelCount = axis.labelCount + let range = abs(yMax - yMin) + + if labelCount == 0 || range <= 0 || range.isInfinite + { + axis.entries = [Double]() + axis.centeredEntries = [Double]() + return + } + + // Find out how much spacing (in y value space) between axis values + let rawInterval = range / Double(labelCount) + var interval = rawInterval.roundedToNextSignficant() + + // If granularity is enabled, then do not allow the interval to go below specified granularity. + // This is used to avoid repeated values when rounding values for display. + if axis.granularityEnabled + { + interval = interval < axis.granularity ? axis.granularity : interval + } + + // Normalize interval + let intervalMagnitude = pow(10.0, Double(Int(log10(interval)))).roundedToNextSignficant() + let intervalSigDigit = Int(interval / intervalMagnitude) + if intervalSigDigit > 5 + { + // Use one order of magnitude higher, to avoid intervals like 0.9 or 90 + // if it's 0.0 after floor(), we use the old value + interval = floor(10.0 * intervalMagnitude) == 0.0 ? interval : floor(10.0 * intervalMagnitude) + } + + var n = axis.centerAxisLabelsEnabled ? 1 : 0 + + // force label count + if axis.isForceLabelsEnabled + { + interval = Double(range) / Double(labelCount - 1) + + // Ensure stops contains at least n elements. + axis.entries.removeAll(keepingCapacity: true) + axis.entries.reserveCapacity(labelCount) + + var v = yMin + + for _ in 0 ..< labelCount + { + axis.entries.append(v) + v += interval + } + + n = labelCount + } + else + { + // no forced count + + var first = interval == 0.0 ? 0.0 : ceil(yMin / interval) * interval + + if axis.centerAxisLabelsEnabled + { + first -= interval + } + + let last = interval == 0.0 ? 0.0 : (floor(yMax / interval) * interval).nextUp + + if interval != 0.0 && last != first + { + for _ in stride(from: first, through: last, by: interval) + { + n += 1 + } + } + else if last == first && n == 0 + { + n = 1 + } + + // Ensure stops contains at least n elements. + axis.entries.removeAll(keepingCapacity: true) + axis.entries.reserveCapacity(labelCount) + + var f = first + var i = 0 + while i < n + { + if f == 0.0 + { + // Fix for IEEE negative zero case (Where value == -0.0, and 0.0 == -0.0) + f = 0.0 + } + + axis.entries.append(Double(f)) + + f += interval + i += 1 + } + } + + // set decimals + if interval < 1 + { + axis.decimals = Int(ceil(-log10(interval))) + } + else + { + axis.decimals = 0 + } + + if axis.centerAxisLabelsEnabled + { + axis.centeredEntries.reserveCapacity(n) + axis.centeredEntries.removeAll() + + let offset: Double = interval / 2.0 + + for i in 0 ..< n + { + axis.centeredEntries.append(axis.entries[i] + offset) + } + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/BarChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/BarChartRenderer.swift new file mode 100644 index 0000000..3621ddb --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/BarChartRenderer.swift @@ -0,0 +1,691 @@ +// +// BarChartRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +open class BarChartRenderer: BarLineScatterCandleBubbleRenderer +{ + private class Buffer + { + var rects = [CGRect]() + } + + @objc open weak var dataProvider: BarChartDataProvider? + + @objc public init(dataProvider: BarChartDataProvider, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + + self.dataProvider = dataProvider + } + + // [CGRect] per dataset + private var _buffers = [Buffer]() + + open override func initBuffers() + { + if let barData = dataProvider?.barData + { + // Matche buffers count to dataset count + if _buffers.count != barData.dataSetCount + { + while _buffers.count < barData.dataSetCount + { + _buffers.append(Buffer()) + } + while _buffers.count > barData.dataSetCount + { + _buffers.removeLast() + } + } + + for i in stride(from: 0, to: barData.dataSetCount, by: 1) + { + let set = barData.dataSets[i] as! IBarChartDataSet + let size = set.entryCount * (set.isStacked ? set.stackSize : 1) + if _buffers[i].rects.count != size + { + _buffers[i].rects = [CGRect](repeating: CGRect(), count: size) + } + } + } + else + { + _buffers.removeAll() + } + } + + private func prepareBuffer(dataSet: IBarChartDataSet, index: Int) + { + guard + let dataProvider = dataProvider, + let barData = dataProvider.barData + else { return } + + let barWidthHalf = barData.barWidth / 2.0 + + let buffer = _buffers[index] + var bufferIndex = 0 + let containsStacks = dataSet.isStacked + + let isInverted = dataProvider.isInverted(axis: dataSet.axisDependency) + let phaseY = animator.phaseY + var barRect = CGRect() + var x: Double + var y: Double + + for i in stride(from: 0, to: min(Int(ceil(Double(dataSet.entryCount) * animator.phaseX)), dataSet.entryCount), by: 1) + { + guard let e = dataSet.entryForIndex(i) as? BarChartDataEntry else { continue } + + let vals = e.yValues + + x = e.x + y = e.y + + if !containsStacks || vals == nil + { + let left = CGFloat(x - barWidthHalf) + let right = CGFloat(x + barWidthHalf) + var top = isInverted + ? (y <= 0.0 ? CGFloat(y) : 0) + : (y >= 0.0 ? CGFloat(y) : 0) + var bottom = isInverted + ? (y >= 0.0 ? CGFloat(y) : 0) + : (y <= 0.0 ? CGFloat(y) : 0) + + // multiply the height of the rect with the phase + if top > 0 + { + top *= CGFloat(phaseY) + } + else + { + bottom *= CGFloat(phaseY) + } + + barRect.origin.x = left + barRect.size.width = right - left + barRect.origin.y = top + barRect.size.height = bottom - top + + buffer.rects[bufferIndex] = barRect + bufferIndex += 1 + } + else + { + var posY = 0.0 + var negY = -e.negativeSum + var yStart = 0.0 + + // fill the stack + for k in 0 ..< vals!.count + { + let value = vals![k] + + if value == 0.0 && (posY == 0.0 || negY == 0.0) + { + // Take care of the situation of a 0.0 value, which overlaps a non-zero bar + y = value + yStart = y + } + else if value >= 0.0 + { + y = posY + yStart = posY + value + posY = yStart + } + else + { + y = negY + yStart = negY + abs(value) + negY += abs(value) + } + + let left = CGFloat(x - barWidthHalf) + let right = CGFloat(x + barWidthHalf) + var top = isInverted + ? (y <= yStart ? CGFloat(y) : CGFloat(yStart)) + : (y >= yStart ? CGFloat(y) : CGFloat(yStart)) + var bottom = isInverted + ? (y >= yStart ? CGFloat(y) : CGFloat(yStart)) + : (y <= yStart ? CGFloat(y) : CGFloat(yStart)) + + // multiply the height of the rect with the phase + top *= CGFloat(phaseY) + bottom *= CGFloat(phaseY) + + barRect.origin.x = left + barRect.size.width = right - left + barRect.origin.y = top + barRect.size.height = bottom - top + + buffer.rects[bufferIndex] = barRect + bufferIndex += 1 + } + } + } + } + + open override func drawData(context: CGContext) + { + guard + let dataProvider = dataProvider, + let barData = dataProvider.barData + else { return } + + for i in 0 ..< barData.dataSetCount + { + guard let set = barData.getDataSetByIndex(i) else { continue } + + if set.isVisible + { + if !(set is IBarChartDataSet) + { + fatalError("Datasets for BarChartRenderer must conform to IBarChartDataset") + } + + drawDataSet(context: context, dataSet: set as! IBarChartDataSet, index: i) + } + } + } + + private var _barShadowRectBuffer: CGRect = CGRect() + + @objc open func drawDataSet(context: CGContext, dataSet: IBarChartDataSet, index: Int) + { + guard let dataProvider = dataProvider else { return } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + prepareBuffer(dataSet: dataSet, index: index) + trans.rectValuesToPixel(&_buffers[index].rects) + + let borderWidth = dataSet.barBorderWidth + let borderColor = dataSet.barBorderColor + let drawBorder = borderWidth > 0.0 + + context.saveGState() + + // draw the bar shadow before the values + if dataProvider.isDrawBarShadowEnabled + { + guard let barData = dataProvider.barData else { return } + + let barWidth = barData.barWidth + let barWidthHalf = barWidth / 2.0 + var x: Double = 0.0 + + for i in stride(from: 0, to: min(Int(ceil(Double(dataSet.entryCount) * animator.phaseX)), dataSet.entryCount), by: 1) + { + guard let e = dataSet.entryForIndex(i) as? BarChartDataEntry else { continue } + + x = e.x + + _barShadowRectBuffer.origin.x = CGFloat(x - barWidthHalf) + _barShadowRectBuffer.size.width = CGFloat(barWidth) + + trans.rectValueToPixel(&_barShadowRectBuffer) + + if !viewPortHandler.isInBoundsLeft(_barShadowRectBuffer.origin.x + _barShadowRectBuffer.size.width) + { + continue + } + + if !viewPortHandler.isInBoundsRight(_barShadowRectBuffer.origin.x) + { + break + } + + _barShadowRectBuffer.origin.y = viewPortHandler.contentTop + _barShadowRectBuffer.size.height = viewPortHandler.contentHeight + + context.setFillColor(dataSet.barShadowColor.cgColor) + context.fill(_barShadowRectBuffer) + } + } + + let buffer = _buffers[index] + + // draw the bar shadow before the values + if dataProvider.isDrawBarShadowEnabled + { + for j in stride(from: 0, to: buffer.rects.count, by: 1) + { + let barRect = buffer.rects[j] + + if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width)) + { + continue + } + + if (!viewPortHandler.isInBoundsRight(barRect.origin.x)) + { + break + } + + context.setFillColor(dataSet.barShadowColor.cgColor) + context.fill(barRect) + } + } + + let isSingleColor = dataSet.colors.count == 1 + + if isSingleColor + { + context.setFillColor(dataSet.color(atIndex: 0).cgColor) + } + + for j in stride(from: 0, to: buffer.rects.count, by: 1) + { + let barRect = buffer.rects[j] + + if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width)) + { + continue + } + + if (!viewPortHandler.isInBoundsRight(barRect.origin.x)) + { + break + } + + if !isSingleColor + { + // Set the color for the currently drawn value. If the index is out of bounds, reuse colors. + context.setFillColor(dataSet.color(atIndex: j).cgColor) + } + + context.fill(barRect) + + if drawBorder + { + context.setStrokeColor(borderColor.cgColor) + context.setLineWidth(borderWidth) + context.stroke(barRect) + } + } + + context.restoreGState() + } + + open func prepareBarHighlight( + x: Double, + y1: Double, + y2: Double, + barWidthHalf: Double, + trans: Transformer, + rect: inout CGRect) + { + let left = x - barWidthHalf + let right = x + barWidthHalf + let top = y1 + let bottom = y2 + + rect.origin.x = CGFloat(left) + rect.origin.y = CGFloat(top) + rect.size.width = CGFloat(right - left) + rect.size.height = CGFloat(bottom - top) + + trans.rectValueToPixel(&rect, phaseY: animator.phaseY ) + } + + open override func drawValues(context: CGContext) + { + // if values are drawn + if isDrawingValuesAllowed(dataProvider: dataProvider) + { + guard + let dataProvider = dataProvider, + let barData = dataProvider.barData + else { return } + + var dataSets = barData.dataSets + + let valueOffsetPlus: CGFloat = 4.5 + var posOffset: CGFloat + var negOffset: CGFloat + let drawValueAboveBar = dataProvider.isDrawValueAboveBarEnabled + + for dataSetIndex in 0 ..< barData.dataSetCount + { + guard let dataSet = dataSets[dataSetIndex] as? IBarChartDataSet else { continue } + + if !shouldDrawValues(forDataSet: dataSet) + { + continue + } + + let isInverted = dataProvider.isInverted(axis: dataSet.axisDependency) + + // calculate the correct offset depending on the draw position of the value + let valueFont = dataSet.valueFont + let valueTextHeight = valueFont.lineHeight + posOffset = (drawValueAboveBar ? -(valueTextHeight + valueOffsetPlus) : valueOffsetPlus) + negOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextHeight + valueOffsetPlus)) + + if isInverted + { + posOffset = -posOffset - valueTextHeight + negOffset = -negOffset - valueTextHeight + } + + let buffer = _buffers[dataSetIndex] + + guard let formatter = dataSet.valueFormatter else { continue } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + let phaseY = animator.phaseY + + let iconsOffset = dataSet.iconsOffset + + // if only single values are drawn (sum) + if !dataSet.isStacked + { + for j in 0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX)) + { + guard let e = dataSet.entryForIndex(j) as? BarChartDataEntry else { continue } + + let rect = buffer.rects[j] + + let x = rect.origin.x + rect.size.width / 2.0 + + if !viewPortHandler.isInBoundsRight(x) + { + break + } + + if !viewPortHandler.isInBoundsY(rect.origin.y) + || !viewPortHandler.isInBoundsLeft(x) + { + continue + } + + let val = e.y + + if dataSet.isDrawValuesEnabled + { + drawValue( + context: context, + value: formatter.stringForValue( + val, + entry: e, + dataSetIndex: dataSetIndex, + viewPortHandler: viewPortHandler), + xPos: x, + yPos: val >= 0.0 + ? (rect.origin.y + posOffset) + : (rect.origin.y + rect.size.height + negOffset), + font: valueFont, + align: .center, + color: dataSet.valueTextColorAt(j)) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + var px = x + var py = val >= 0.0 + ? (rect.origin.y + posOffset) + : (rect.origin.y + rect.size.height + negOffset) + + px += iconsOffset.x + py += iconsOffset.y + + ChartUtils.drawImage( + context: context, + image: icon, + x: px, + y: py, + size: icon.size) + } + } + } + else + { + // if we have stacks + + var bufferIndex = 0 + + for index in 0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX)) + { + guard let e = dataSet.entryForIndex(index) as? BarChartDataEntry else { continue } + + let vals = e.yValues + + let rect = buffer.rects[bufferIndex] + + let x = rect.origin.x + rect.size.width / 2.0 + + // we still draw stacked bars, but there is one non-stacked in between + if vals == nil + { + if !viewPortHandler.isInBoundsRight(x) + { + break + } + + if !viewPortHandler.isInBoundsY(rect.origin.y) + || !viewPortHandler.isInBoundsLeft(x) + { + continue + } + + if dataSet.isDrawValuesEnabled + { + drawValue( + context: context, + value: formatter.stringForValue( + e.y, + entry: e, + dataSetIndex: dataSetIndex, + viewPortHandler: viewPortHandler), + xPos: x, + yPos: rect.origin.y + + (e.y >= 0 ? posOffset : negOffset), + font: valueFont, + align: .center, + color: dataSet.valueTextColorAt(index)) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + var px = x + var py = rect.origin.y + + (e.y >= 0 ? posOffset : negOffset) + + px += iconsOffset.x + py += iconsOffset.y + + ChartUtils.drawImage( + context: context, + image: icon, + x: px, + y: py, + size: icon.size) + } + } + else + { + // draw stack values + + let vals = vals! + var transformed = [CGPoint]() + + var posY = 0.0 + var negY = -e.negativeSum + + for k in 0 ..< vals.count + { + let value = vals[k] + var y: Double + + if value == 0.0 && (posY == 0.0 || negY == 0.0) + { + // Take care of the situation of a 0.0 value, which overlaps a non-zero bar + y = value + } + else if value >= 0.0 + { + posY += value + y = posY + } + else + { + y = negY + negY -= value + } + + transformed.append(CGPoint(x: 0.0, y: CGFloat(y * phaseY))) + } + + trans.pointValuesToPixel(&transformed) + + for k in 0 ..< transformed.count + { + let val = vals[k] + let drawBelow = (val == 0.0 && negY == 0.0 && posY > 0.0) || val < 0.0 + let y = transformed[k].y + (drawBelow ? negOffset : posOffset) + + if !viewPortHandler.isInBoundsRight(x) + { + break + } + + if !viewPortHandler.isInBoundsY(y) || !viewPortHandler.isInBoundsLeft(x) + { + continue + } + + if dataSet.isDrawValuesEnabled + { + drawValue( + context: context, + value: formatter.stringForValue( + vals[k], + entry: e, + dataSetIndex: dataSetIndex, + viewPortHandler: viewPortHandler), + xPos: x, + yPos: y, + font: valueFont, + align: .center, + color: dataSet.valueTextColorAt(index)) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + ChartUtils.drawImage( + context: context, + image: icon, + x: x + iconsOffset.x, + y: y + iconsOffset.y, + size: icon.size) + } + } + } + + bufferIndex = vals == nil ? (bufferIndex + 1) : (bufferIndex + vals!.count) + } + } + } + } + } + + /// Draws a value at the specified x and y position. + @objc open func drawValue(context: CGContext, value: String, xPos: CGFloat, yPos: CGFloat, font: NSUIFont, align: NSTextAlignment, color: NSUIColor) + { + ChartUtils.drawText(context: context, text: value, point: CGPoint(x: xPos, y: yPos), align: align, attributes: [NSAttributedStringKey.font: font, NSAttributedStringKey.foregroundColor: color]) + } + + open override func drawExtras(context: CGContext) + { + + } + + open override func drawHighlighted(context: CGContext, indices: [Highlight]) + { + guard + let dataProvider = dataProvider, + let barData = dataProvider.barData + else { return } + + context.saveGState() + + var barRect = CGRect() + + for high in indices + { + guard + let set = barData.getDataSetByIndex(high.dataSetIndex) as? IBarChartDataSet, + set.isHighlightEnabled + else { continue } + + if let e = set.entryForXValue(high.x, closestToY: high.y) as? BarChartDataEntry + { + if !isInBoundsX(entry: e, dataSet: set) + { + continue + } + + let trans = dataProvider.getTransformer(forAxis: set.axisDependency) + + context.setFillColor(set.highlightColor.cgColor) + context.setAlpha(set.highlightAlpha) + + let isStack = high.stackIndex >= 0 && e.isStacked + + let y1: Double + let y2: Double + + if isStack + { + if dataProvider.isHighlightFullBarEnabled + { + y1 = e.positiveSum + y2 = -e.negativeSum + } + else + { + let range = e.ranges?[high.stackIndex] + + y1 = range?.from ?? 0.0 + y2 = range?.to ?? 0.0 + } + } + else + { + y1 = e.y + y2 = 0.0 + } + + prepareBarHighlight(x: e.x, y1: y1, y2: y2, barWidthHalf: barData.barWidth / 2.0, trans: trans, rect: &barRect) + + setHighlightDrawPos(highlight: high, barRect: barRect) + + context.fill(barRect) + } + } + + context.restoreGState() + } + + /// Sets the drawing position of the highlight object based on the riven bar-rect. + internal func setHighlightDrawPos(highlight high: Highlight, barRect: CGRect) + { + high.setDraw(x: barRect.midX, y: barRect.origin.y) + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift b/Pods/Charts/Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift new file mode 100644 index 0000000..4ba1b5f --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift @@ -0,0 +1,89 @@ +// +// BarLineScatterCandleBubbleRenderer.swift +// Charts +// +// 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 + +@objc(BarLineScatterCandleBubbleChartRenderer) +open class BarLineScatterCandleBubbleRenderer: DataRenderer +{ + internal var _xBounds = XBounds() // Reusable XBounds object + + public override init(animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + } + + /// Checks if the provided entry object is in bounds for drawing considering the current animation phase. + internal func isInBoundsX(entry e: ChartDataEntry, dataSet: IBarLineScatterCandleBubbleChartDataSet) -> Bool + { + let entryIndex = dataSet.entryIndex(entry: e) + return Double(entryIndex) < Double(dataSet.entryCount) * animator.phaseX + } + + /// Calculates and returns the x-bounds for the given DataSet in terms of index in their values array. + /// This includes minimum and maximum visible x, as well as range. + internal func xBounds(chart: BarLineScatterCandleBubbleChartDataProvider, + dataSet: IBarLineScatterCandleBubbleChartDataSet, + animator: Animator?) -> XBounds + { + return XBounds(chart: chart, dataSet: dataSet, animator: animator) + } + + /// - returns: `true` if the DataSet values should be drawn, `false` if not. + internal func shouldDrawValues(forDataSet set: IChartDataSet) -> Bool + { + return set.isVisible && (set.isDrawValuesEnabled || set.isDrawIconsEnabled) + } + + /// Class representing the bounds of the current viewport in terms of indices in the values array of a DataSet. + open class XBounds + { + /// minimum visible entry index + open var min: Int = 0 + + /// maximum visible entry index + open var max: Int = 0 + + /// range of visible entry indices + open var range: Int = 0 + + public init() + { + + } + + public init(chart: BarLineScatterCandleBubbleChartDataProvider, + dataSet: IBarLineScatterCandleBubbleChartDataSet, + animator: Animator?) + { + self.set(chart: chart, dataSet: dataSet, animator: animator) + } + + /// Calculates the minimum and maximum x values as well as the range between them. + open func set(chart: BarLineScatterCandleBubbleChartDataProvider, + dataSet: IBarLineScatterCandleBubbleChartDataSet, + animator: Animator?) + { + let phaseX = Swift.max(0.0, Swift.min(1.0, animator?.phaseX ?? 1.0)) + + let low = chart.lowestVisibleX + let high = chart.highestVisibleX + + let entryFrom = dataSet.entryForXValue(low, closestToY: Double.nan, rounding: ChartDataSetRounding.down) + let entryTo = dataSet.entryForXValue(high, closestToY: Double.nan, rounding: ChartDataSetRounding.up) + + self.min = entryFrom == nil ? 0 : dataSet.entryIndex(entry: entryFrom!) + self.max = entryTo == nil ? 0 : dataSet.entryIndex(entry: entryTo!) + range = Int(Double(self.max - self.min) * phaseX) + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/BubbleChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/BubbleChartRenderer.swift new file mode 100644 index 0000000..51e937e --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/BubbleChartRenderer.swift @@ -0,0 +1,285 @@ +// +// BubbleChartRenderer.swift +// Charts +// +// Bubble chart implementation: +// Copyright 2015 Pierre-Marc Airoldi +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// + +import Foundation +import CoreGraphics + +#if !os(OSX) + import UIKit +#endif + + +open class BubbleChartRenderer: BarLineScatterCandleBubbleRenderer +{ + @objc open weak var dataProvider: BubbleChartDataProvider? + + @objc public init(dataProvider: BubbleChartDataProvider, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + + self.dataProvider = dataProvider + } + + open override func drawData(context: CGContext) + { + guard + let dataProvider = dataProvider, + let bubbleData = dataProvider.bubbleData + else { return } + + for set in bubbleData.dataSets as! [IBubbleChartDataSet] where set.isVisible + { + drawDataSet(context: context, dataSet: set) + } + } + + private func getShapeSize( + entrySize: CGFloat, + maxSize: CGFloat, + reference: CGFloat, + normalizeSize: Bool) -> CGFloat + { + let factor: CGFloat = normalizeSize + ? ((maxSize == 0.0) ? 1.0 : sqrt(entrySize / maxSize)) + : entrySize + let shapeSize: CGFloat = reference * factor + return shapeSize + } + + private var _pointBuffer = CGPoint() + private var _sizeBuffer = [CGPoint](repeating: CGPoint(), count: 2) + + @objc open func drawDataSet(context: CGContext, dataSet: IBubbleChartDataSet) + { + guard let dataProvider = dataProvider else { return } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + let phaseY = animator.phaseY + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + let valueToPixelMatrix = trans.valueToPixelMatrix + + _sizeBuffer[0].x = 0.0 + _sizeBuffer[0].y = 0.0 + _sizeBuffer[1].x = 1.0 + _sizeBuffer[1].y = 0.0 + + trans.pointValuesToPixel(&_sizeBuffer) + + context.saveGState() + defer { context.restoreGState() } + + let normalizeSize = dataSet.isNormalizeSizeEnabled + + // calcualte the full width of 1 step on the x-axis + let maxBubbleWidth: CGFloat = abs(_sizeBuffer[1].x - _sizeBuffer[0].x) + let maxBubbleHeight: CGFloat = abs(viewPortHandler.contentBottom - viewPortHandler.contentTop) + let referenceSize: CGFloat = min(maxBubbleHeight, maxBubbleWidth) + + for j in stride(from: _xBounds.min, through: _xBounds.range + _xBounds.min, by: 1) + { + guard let entry = dataSet.entryForIndex(j) as? BubbleChartDataEntry else { continue } + + _pointBuffer.x = CGFloat(entry.x) + _pointBuffer.y = CGFloat(entry.y * phaseY) + _pointBuffer = _pointBuffer.applying(valueToPixelMatrix) + + let shapeSize = getShapeSize(entrySize: entry.size, maxSize: dataSet.maxSize, reference: referenceSize, normalizeSize: normalizeSize) + let shapeHalf = shapeSize / 2.0 + + guard + viewPortHandler.isInBoundsTop(_pointBuffer.y + shapeHalf), + viewPortHandler.isInBoundsBottom(_pointBuffer.y - shapeHalf), + viewPortHandler.isInBoundsLeft(_pointBuffer.x + shapeHalf) + else { continue } + + guard viewPortHandler.isInBoundsRight(_pointBuffer.x - shapeHalf) else { break } + + let color = dataSet.color(atIndex: j) + + let rect = CGRect( + x: _pointBuffer.x - shapeHalf, + y: _pointBuffer.y - shapeHalf, + width: shapeSize, + height: shapeSize + ) + + context.setFillColor(color.cgColor) + context.fillEllipse(in: rect) + } + } + + open override func drawValues(context: CGContext) + { + guard let + dataProvider = dataProvider, + let bubbleData = dataProvider.bubbleData, + isDrawingValuesAllowed(dataProvider: dataProvider), + let dataSets = bubbleData.dataSets as? [IBubbleChartDataSet] + else { return } + + let phaseX = max(0.0, min(1.0, animator.phaseX)) + let phaseY = animator.phaseY + + var pt = CGPoint() + + for i in 0.. close + { + _shadowPoints[0].y = CGFloat(high * phaseY) + _shadowPoints[1].y = CGFloat(open * phaseY) + _shadowPoints[2].y = CGFloat(low * phaseY) + _shadowPoints[3].y = CGFloat(close * phaseY) + } + else if open < close + { + _shadowPoints[0].y = CGFloat(high * phaseY) + _shadowPoints[1].y = CGFloat(close * phaseY) + _shadowPoints[2].y = CGFloat(low * phaseY) + _shadowPoints[3].y = CGFloat(open * phaseY) + } + else + { + _shadowPoints[0].y = CGFloat(high * phaseY) + _shadowPoints[1].y = CGFloat(open * phaseY) + _shadowPoints[2].y = CGFloat(low * phaseY) + _shadowPoints[3].y = _shadowPoints[1].y + } + + trans.pointValuesToPixel(&_shadowPoints) + + // draw the shadows + + var shadowColor: NSUIColor! = nil + if dataSet.shadowColorSameAsCandle + { + if open > close + { + shadowColor = dataSet.decreasingColor ?? dataSet.color(atIndex: j) + } + else if open < close + { + shadowColor = dataSet.increasingColor ?? dataSet.color(atIndex: j) + } + else + { + shadowColor = dataSet.neutralColor ?? dataSet.color(atIndex: j) + } + } + + if shadowColor === nil + { + shadowColor = dataSet.shadowColor ?? dataSet.color(atIndex: j) + } + + context.setStrokeColor(shadowColor.cgColor) + context.strokeLineSegments(between: _shadowPoints) + + // calculate the body + + _bodyRect.origin.x = CGFloat(xPos) - 0.5 + barSpace + _bodyRect.origin.y = CGFloat(close * phaseY) + _bodyRect.size.width = (CGFloat(xPos) + 0.5 - barSpace) - _bodyRect.origin.x + _bodyRect.size.height = CGFloat(open * phaseY) - _bodyRect.origin.y + + trans.rectValueToPixel(&_bodyRect) + + // draw body differently for increasing and decreasing entry + + if open > close + { + let color = dataSet.decreasingColor ?? dataSet.color(atIndex: j) + + if dataSet.isDecreasingFilled + { + context.setFillColor(color.cgColor) + context.fill(_bodyRect) + } + else + { + context.setStrokeColor(color.cgColor) + context.stroke(_bodyRect) + } + } + else if open < close + { + let color = dataSet.increasingColor ?? dataSet.color(atIndex: j) + + if dataSet.isIncreasingFilled + { + context.setFillColor(color.cgColor) + context.fill(_bodyRect) + } + else + { + context.setStrokeColor(color.cgColor) + context.stroke(_bodyRect) + } + } + else + { + let color = dataSet.neutralColor ?? dataSet.color(atIndex: j) + + context.setStrokeColor(color.cgColor) + context.stroke(_bodyRect) + } + } + else + { + _rangePoints[0].x = CGFloat(xPos) + _rangePoints[0].y = CGFloat(high * phaseY) + _rangePoints[1].x = CGFloat(xPos) + _rangePoints[1].y = CGFloat(low * phaseY) + + _openPoints[0].x = CGFloat(xPos) - 0.5 + barSpace + _openPoints[0].y = CGFloat(open * phaseY) + _openPoints[1].x = CGFloat(xPos) + _openPoints[1].y = CGFloat(open * phaseY) + + _closePoints[0].x = CGFloat(xPos) + 0.5 - barSpace + _closePoints[0].y = CGFloat(close * phaseY) + _closePoints[1].x = CGFloat(xPos) + _closePoints[1].y = CGFloat(close * phaseY) + + trans.pointValuesToPixel(&_rangePoints) + trans.pointValuesToPixel(&_openPoints) + trans.pointValuesToPixel(&_closePoints) + + // draw the ranges + var barColor: NSUIColor! = nil + + if open > close + { + barColor = dataSet.decreasingColor ?? dataSet.color(atIndex: j) + } + else if open < close + { + barColor = dataSet.increasingColor ?? dataSet.color(atIndex: j) + } + else + { + barColor = dataSet.neutralColor ?? dataSet.color(atIndex: j) + } + + context.setStrokeColor(barColor.cgColor) + context.strokeLineSegments(between: _rangePoints) + context.strokeLineSegments(between: _openPoints) + context.strokeLineSegments(between: _closePoints) + } + } + + context.restoreGState() + } + + open override func drawValues(context: CGContext) + { + guard + let dataProvider = dataProvider, + let candleData = dataProvider.candleData + else { return } + + // if values are drawn + if isDrawingValuesAllowed(dataProvider: dataProvider) + { + var dataSets = candleData.dataSets + + let phaseY = animator.phaseY + + var pt = CGPoint() + + for i in 0 ..< dataSets.count + { + guard let dataSet = dataSets[i] as? IBarLineScatterCandleBubbleChartDataSet + else { continue } + + if !shouldDrawValues(forDataSet: dataSet) + { + continue + } + + let valueFont = dataSet.valueFont + + guard let formatter = dataSet.valueFormatter else { continue } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + let valueToPixelMatrix = trans.valueToPixelMatrix + + let iconsOffset = dataSet.iconsOffset + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + let lineHeight = valueFont.lineHeight + let yOffset: CGFloat = lineHeight + 5.0 + + for j in stride(from: _xBounds.min, through: _xBounds.range + _xBounds.min, by: 1) + { + guard let e = dataSet.entryForIndex(j) as? CandleChartDataEntry else { break } + + pt.x = CGFloat(e.x) + pt.y = CGFloat(e.high * phaseY) + pt = pt.applying(valueToPixelMatrix) + + if (!viewPortHandler.isInBoundsRight(pt.x)) + { + break + } + + if (!viewPortHandler.isInBoundsLeft(pt.x) || !viewPortHandler.isInBoundsY(pt.y)) + { + continue + } + + if dataSet.isDrawValuesEnabled + { + ChartUtils.drawText( + context: context, + text: formatter.stringForValue( + e.high, + entry: e, + dataSetIndex: i, + viewPortHandler: viewPortHandler), + point: CGPoint( + x: pt.x, + y: pt.y - yOffset), + align: .center, + attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: dataSet.valueTextColorAt(j)]) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + ChartUtils.drawImage(context: context, + image: icon, + x: pt.x + iconsOffset.x, + y: pt.y + iconsOffset.y, + size: icon.size) + } + } + } + } + } + + open override func drawExtras(context: CGContext) + { + } + + open override func drawHighlighted(context: CGContext, indices: [Highlight]) + { + guard + let dataProvider = dataProvider, + let candleData = dataProvider.candleData + else { return } + + context.saveGState() + + for high in indices + { + guard + let set = candleData.getDataSetByIndex(high.dataSetIndex) as? ICandleChartDataSet, + set.isHighlightEnabled + else { continue } + + guard let e = set.entryForXValue(high.x, closestToY: high.y) as? CandleChartDataEntry else { continue } + + if !isInBoundsX(entry: e, dataSet: set) + { + continue + } + + let trans = dataProvider.getTransformer(forAxis: set.axisDependency) + + context.setStrokeColor(set.highlightColor.cgColor) + context.setLineWidth(set.highlightLineWidth) + + if set.highlightLineDashLengths != nil + { + context.setLineDash(phase: set.highlightLineDashPhase, lengths: set.highlightLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + let lowValue = e.low * Double(animator.phaseY) + let highValue = e.high * Double(animator.phaseY) + let y = (lowValue + highValue) / 2.0 + + let pt = trans.pixelForValues(x: e.x, y: y) + + high.setDraw(pt: pt) + + // draw the lines + drawHighlightLines(context: context, point: pt, set: set) + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/ChartDataRendererBase.swift b/Pods/Charts/Source/Charts/Renderers/ChartDataRendererBase.swift new file mode 100644 index 0000000..024516a --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/ChartDataRendererBase.swift @@ -0,0 +1,59 @@ +// +// DataRenderer.swift +// Charts +// +// 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 + +@objc(ChartDataRendererBase) +open class DataRenderer: Renderer +{ + @objc open let animator: Animator + + @objc public init(animator: Animator, viewPortHandler: ViewPortHandler) + { + self.animator = animator + + super.init(viewPortHandler: viewPortHandler) + } + + @objc open func drawData(context: CGContext) + { + fatalError("drawData() cannot be called on DataRenderer") + } + + @objc open func drawValues(context: CGContext) + { + fatalError("drawValues() cannot be called on DataRenderer") + } + + @objc open func drawExtras(context: CGContext) + { + fatalError("drawExtras() cannot be called on DataRenderer") + } + + /// Draws all highlight indicators for the values that are currently highlighted. + /// + /// - parameter indices: the highlighted values + @objc open func drawHighlighted(context: CGContext, indices: [Highlight]) + { + fatalError("drawHighlighted() cannot be called on DataRenderer") + } + + /// An opportunity for initializing internal buffers used for rendering with a new size. + /// Since this might do memory allocations, it should only be called if necessary. + @objc open func initBuffers() { } + + @objc open func isDrawingValuesAllowed(dataProvider: ChartDataProvider?) -> Bool + { + guard let data = dataProvider?.data else { return false } + return data.entryCount < Int(CGFloat(dataProvider?.maxVisibleCount ?? 0) * viewPortHandler.scaleX) + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/CombinedChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/CombinedChartRenderer.swift new file mode 100644 index 0000000..d38ccb5 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/CombinedChartRenderer.swift @@ -0,0 +1,200 @@ +// +// CombinedChartRenderer.swift +// Charts +// +// 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 + +open class CombinedChartRenderer: DataRenderer +{ + @objc open weak var chart: CombinedChartView? + + /// if set to true, all values are drawn above their bars, instead of below their top + @objc open var drawValueAboveBarEnabled = true + + /// if set to true, a grey area is drawn behind each bar that indicates the maximum value + @objc open var drawBarShadowEnabled = false + + internal var _renderers = [DataRenderer]() + + internal var _drawOrder: [CombinedChartView.DrawOrder] = [.bar, .bubble, .line, .candle, .scatter] + + @objc public init(chart: CombinedChartView, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + + self.chart = chart + + createRenderers() + } + + /// Creates the renderers needed for this combined-renderer in the required order. Also takes the DrawOrder into consideration. + internal func createRenderers() + { + _renderers = [DataRenderer]() + + guard let chart = chart else { return } + + for order in drawOrder + { + switch (order) + { + case .bar: + if chart.barData !== nil + { + _renderers.append(BarChartRenderer(dataProvider: chart, animator: animator, viewPortHandler: viewPortHandler)) + } + break + + case .line: + if chart.lineData !== nil + { + _renderers.append(LineChartRenderer(dataProvider: chart, animator: animator, viewPortHandler: viewPortHandler)) + } + break + + case .candle: + if chart.candleData !== nil + { + _renderers.append(CandleStickChartRenderer(dataProvider: chart, animator: animator, viewPortHandler: viewPortHandler)) + } + break + + case .scatter: + if chart.scatterData !== nil + { + _renderers.append(ScatterChartRenderer(dataProvider: chart, animator: animator, viewPortHandler: viewPortHandler)) + } + break + + case .bubble: + if chart.bubbleData !== nil + { + _renderers.append(BubbleChartRenderer(dataProvider: chart, animator: animator, viewPortHandler: viewPortHandler)) + } + break + } + } + + } + + open override func initBuffers() + { + for renderer in _renderers + { + renderer.initBuffers() + } + } + + open override func drawData(context: CGContext) + { + for renderer in _renderers + { + renderer.drawData(context: context) + } + } + + open override func drawValues(context: CGContext) + { + for renderer in _renderers + { + renderer.drawValues(context: context) + } + } + + open override func drawExtras(context: CGContext) + { + for renderer in _renderers + { + renderer.drawExtras(context: context) + } + } + + open override func drawHighlighted(context: CGContext, indices: [Highlight]) + { + for renderer in _renderers + { + var data: ChartData? + + if renderer is BarChartRenderer + { + data = (renderer as! BarChartRenderer).dataProvider?.barData + } + else if renderer is LineChartRenderer + { + data = (renderer as! LineChartRenderer).dataProvider?.lineData + } + else if renderer is CandleStickChartRenderer + { + data = (renderer as! CandleStickChartRenderer).dataProvider?.candleData + } + else if renderer is ScatterChartRenderer + { + data = (renderer as! ScatterChartRenderer).dataProvider?.scatterData + } + else if renderer is BubbleChartRenderer + { + data = (renderer as! BubbleChartRenderer).dataProvider?.bubbleData + } + + let dataIndex = data == nil ? nil : (chart?.data as? CombinedChartData)?.allData.index(of: data!) + + let dataIndices = indices.filter{ $0.dataIndex == dataIndex || $0.dataIndex == -1 } + + renderer.drawHighlighted(context: context, indices: dataIndices) + } + } + + /// - returns: The sub-renderer object at the specified index. + @objc open func getSubRenderer(index: Int) -> DataRenderer? + { + if index >= _renderers.count || index < 0 + { + return nil + } + else + { + return _renderers[index] + } + } + + /// - returns: All sub-renderers. + @objc open var subRenderers: [DataRenderer] + { + get { return _renderers } + set { _renderers = newValue } + } + + // MARK: Accessors + + /// - returns: `true` if drawing values above bars is enabled, `false` ifnot + @objc open var isDrawValueAboveBarEnabled: Bool { return drawValueAboveBarEnabled } + + /// - returns: `true` if drawing shadows (maxvalue) for each bar is enabled, `false` ifnot + @objc open var isDrawBarShadowEnabled: Bool { return drawBarShadowEnabled } + + /// the order in which the provided data objects should be drawn. + /// The earlier you place them in the provided array, the further they will be in the background. + /// e.g. if you provide [DrawOrder.Bar, DrawOrder.Line], the bars will be drawn behind the lines. + open var drawOrder: [CombinedChartView.DrawOrder] + { + get + { + return _drawOrder + } + set + { + if newValue.count > 0 + { + _drawOrder = newValue + } + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/HorizontalBarChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/HorizontalBarChartRenderer.swift new file mode 100644 index 0000000..23925c4 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/HorizontalBarChartRenderer.swift @@ -0,0 +1,612 @@ +// +// HorizontalBarChartRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + + +open class HorizontalBarChartRenderer: BarChartRenderer +{ + private class Buffer + { + var rects = [CGRect]() + } + + public override init(dataProvider: BarChartDataProvider, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(dataProvider: dataProvider, animator: animator, viewPortHandler: viewPortHandler) + } + + // [CGRect] per dataset + private var _buffers = [Buffer]() + + open override func initBuffers() + { + if let barData = dataProvider?.barData + { + // Matche buffers count to dataset count + if _buffers.count != barData.dataSetCount + { + while _buffers.count < barData.dataSetCount + { + _buffers.append(Buffer()) + } + while _buffers.count > barData.dataSetCount + { + _buffers.removeLast() + } + } + + for i in stride(from: 0, to: barData.dataSetCount, by: 1) + { + let set = barData.dataSets[i] as! IBarChartDataSet + let size = set.entryCount * (set.isStacked ? set.stackSize : 1) + if _buffers[i].rects.count != size + { + _buffers[i].rects = [CGRect](repeating: CGRect(), count: size) + } + } + } + else + { + _buffers.removeAll() + } + } + + private func prepareBuffer(dataSet: IBarChartDataSet, index: Int) + { + guard let + dataProvider = dataProvider, + let barData = dataProvider.barData + else { return } + + let barWidthHalf = barData.barWidth / 2.0 + + let buffer = _buffers[index] + var bufferIndex = 0 + let containsStacks = dataSet.isStacked + + let isInverted = dataProvider.isInverted(axis: dataSet.axisDependency) + let phaseY = animator.phaseY + var barRect = CGRect() + var x: Double + var y: Double + + for i in stride(from: 0, to: min(Int(ceil(Double(dataSet.entryCount) * animator.phaseX)), dataSet.entryCount), by: 1) + { + guard let e = dataSet.entryForIndex(i) as? BarChartDataEntry else { continue } + + let vals = e.yValues + + x = e.x + y = e.y + + if !containsStacks || vals == nil + { + let bottom = CGFloat(x - barWidthHalf) + let top = CGFloat(x + barWidthHalf) + var right = isInverted + ? (y <= 0.0 ? CGFloat(y) : 0) + : (y >= 0.0 ? CGFloat(y) : 0) + var left = isInverted + ? (y >= 0.0 ? CGFloat(y) : 0) + : (y <= 0.0 ? CGFloat(y) : 0) + + // multiply the height of the rect with the phase + if right > 0 + { + right *= CGFloat(phaseY) + } + else + { + left *= CGFloat(phaseY) + } + + barRect.origin.x = left + barRect.size.width = right - left + barRect.origin.y = top + barRect.size.height = bottom - top + + buffer.rects[bufferIndex] = barRect + bufferIndex += 1 + } + else + { + var posY = 0.0 + var negY = -e.negativeSum + var yStart = 0.0 + + // fill the stack + for k in 0 ..< vals!.count + { + let value = vals![k] + + if value == 0.0 && (posY == 0.0 || negY == 0.0) + { + // Take care of the situation of a 0.0 value, which overlaps a non-zero bar + y = value + yStart = y + } + else if value >= 0.0 + { + y = posY + yStart = posY + value + posY = yStart + } + else + { + y = negY + yStart = negY + abs(value) + negY += abs(value) + } + + let bottom = CGFloat(x - barWidthHalf) + let top = CGFloat(x + barWidthHalf) + var right = isInverted + ? (y <= yStart ? CGFloat(y) : CGFloat(yStart)) + : (y >= yStart ? CGFloat(y) : CGFloat(yStart)) + var left = isInverted + ? (y >= yStart ? CGFloat(y) : CGFloat(yStart)) + : (y <= yStart ? CGFloat(y) : CGFloat(yStart)) + + // multiply the height of the rect with the phase + right *= CGFloat(phaseY) + left *= CGFloat(phaseY) + + barRect.origin.x = left + barRect.size.width = right - left + barRect.origin.y = top + barRect.size.height = bottom - top + + buffer.rects[bufferIndex] = barRect + bufferIndex += 1 + } + } + } + } + + private var _barShadowRectBuffer: CGRect = CGRect() + + open override func drawDataSet(context: CGContext, dataSet: IBarChartDataSet, index: Int) + { + guard let dataProvider = dataProvider else { return } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + prepareBuffer(dataSet: dataSet, index: index) + trans.rectValuesToPixel(&_buffers[index].rects) + + let borderWidth = dataSet.barBorderWidth + let borderColor = dataSet.barBorderColor + let drawBorder = borderWidth > 0.0 + + context.saveGState() + + // draw the bar shadow before the values + if dataProvider.isDrawBarShadowEnabled + { + guard let barData = dataProvider.barData else { return } + + let barWidth = barData.barWidth + let barWidthHalf = barWidth / 2.0 + var x: Double = 0.0 + + for i in stride(from: 0, to: min(Int(ceil(Double(dataSet.entryCount) * animator.phaseX)), dataSet.entryCount), by: 1) + { + guard let e = dataSet.entryForIndex(i) as? BarChartDataEntry else { continue } + + x = e.x + + _barShadowRectBuffer.origin.y = CGFloat(x - barWidthHalf) + _barShadowRectBuffer.size.height = CGFloat(barWidth) + + trans.rectValueToPixel(&_barShadowRectBuffer) + + if !viewPortHandler.isInBoundsTop(_barShadowRectBuffer.origin.y + _barShadowRectBuffer.size.height) + { + break + } + + if !viewPortHandler.isInBoundsBottom(_barShadowRectBuffer.origin.y) + { + continue + } + + _barShadowRectBuffer.origin.x = viewPortHandler.contentLeft + _barShadowRectBuffer.size.width = viewPortHandler.contentWidth + + context.setFillColor(dataSet.barShadowColor.cgColor) + context.fill(_barShadowRectBuffer) + } + } + + let buffer = _buffers[index] + + let isSingleColor = dataSet.colors.count == 1 + + if isSingleColor + { + context.setFillColor(dataSet.color(atIndex: 0).cgColor) + } + + for j in stride(from: 0, to: buffer.rects.count, by: 1) + { + let barRect = buffer.rects[j] + + if (!viewPortHandler.isInBoundsTop(barRect.origin.y + barRect.size.height)) + { + break + } + + if (!viewPortHandler.isInBoundsBottom(barRect.origin.y)) + { + continue + } + + if !isSingleColor + { + // Set the color for the currently drawn value. If the index is out of bounds, reuse colors. + context.setFillColor(dataSet.color(atIndex: j).cgColor) + } + + context.fill(barRect) + + if drawBorder + { + context.setStrokeColor(borderColor.cgColor) + context.setLineWidth(borderWidth) + context.stroke(barRect) + } + } + + context.restoreGState() + } + + open override func prepareBarHighlight( + x: Double, + y1: Double, + y2: Double, + barWidthHalf: Double, + trans: Transformer, + rect: inout CGRect) + { + let top = x - barWidthHalf + let bottom = x + barWidthHalf + let left = y1 + let right = y2 + + rect.origin.x = CGFloat(left) + rect.origin.y = CGFloat(top) + rect.size.width = CGFloat(right - left) + rect.size.height = CGFloat(bottom - top) + + trans.rectValueToPixelHorizontal(&rect, phaseY: animator.phaseY) + } + + open override func drawValues(context: CGContext) + { + // if values are drawn + if isDrawingValuesAllowed(dataProvider: dataProvider) + { + guard + let dataProvider = dataProvider, + let barData = dataProvider.barData + else { return } + + var dataSets = barData.dataSets + + let textAlign = NSTextAlignment.left + + let valueOffsetPlus: CGFloat = 5.0 + var posOffset: CGFloat + var negOffset: CGFloat + let drawValueAboveBar = dataProvider.isDrawValueAboveBarEnabled + + for dataSetIndex in 0 ..< barData.dataSetCount + { + guard let dataSet = dataSets[dataSetIndex] as? IBarChartDataSet else { continue } + + if !shouldDrawValues(forDataSet: dataSet) || !(dataSet.isDrawIconsEnabled && dataSet.isVisible) + { + continue + } + + let isInverted = dataProvider.isInverted(axis: dataSet.axisDependency) + + let valueFont = dataSet.valueFont + let yOffset = -valueFont.lineHeight / 2.0 + + guard let formatter = dataSet.valueFormatter else { continue } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + let phaseY = animator.phaseY + + let iconsOffset = dataSet.iconsOffset + + let buffer = _buffers[dataSetIndex] + + // if only single values are drawn (sum) + if !dataSet.isStacked + { + for j in 0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX)) + { + guard let e = dataSet.entryForIndex(j) as? BarChartDataEntry else { continue } + + let rect = buffer.rects[j] + + let y = rect.origin.y + rect.size.height / 2.0 + + if !viewPortHandler.isInBoundsTop(rect.origin.y) + { + break + } + + if !viewPortHandler.isInBoundsX(rect.origin.x) + { + continue + } + + if !viewPortHandler.isInBoundsBottom(rect.origin.y) + { + continue + } + + let val = e.y + let valueText = formatter.stringForValue( + val, + entry: e, + dataSetIndex: dataSetIndex, + viewPortHandler: viewPortHandler) + + // calculate the correct offset depending on the draw position of the value + let valueTextWidth = valueText.size(withAttributes: [NSAttributedStringKey.font: valueFont]).width + posOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus)) + negOffset = (drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus) + + if isInverted + { + posOffset = -posOffset - valueTextWidth + negOffset = -negOffset - valueTextWidth + } + + if dataSet.isDrawValuesEnabled + { + drawValue( + context: context, + value: valueText, + xPos: (rect.origin.x + rect.size.width) + + (val >= 0.0 ? posOffset : negOffset), + yPos: y + yOffset, + font: valueFont, + align: textAlign, + color: dataSet.valueTextColorAt(j)) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + var px = (rect.origin.x + rect.size.width) + + (val >= 0.0 ? posOffset : negOffset) + var py = y + + px += iconsOffset.x + py += iconsOffset.y + + ChartUtils.drawImage( + context: context, + image: icon, + x: px, + y: py, + size: icon.size) + } + } + } + else + { + // if each value of a potential stack should be drawn + + var bufferIndex = 0 + + for index in 0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX)) + { + guard let e = dataSet.entryForIndex(index) as? BarChartDataEntry else { continue } + + let rect = buffer.rects[bufferIndex] + + let vals = e.yValues + + // we still draw stacked bars, but there is one non-stacked in between + if vals == nil + { + if !viewPortHandler.isInBoundsTop(rect.origin.y) + { + break + } + + if !viewPortHandler.isInBoundsX(rect.origin.x) + { + continue + } + + if !viewPortHandler.isInBoundsBottom(rect.origin.y) + { + continue + } + + let val = e.y + let valueText = formatter.stringForValue( + val, + entry: e, + dataSetIndex: dataSetIndex, + viewPortHandler: viewPortHandler) + + // calculate the correct offset depending on the draw position of the value + let valueTextWidth = valueText.size(withAttributes: [NSAttributedStringKey.font: valueFont]).width + posOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus)) + negOffset = (drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus) + + if isInverted + { + posOffset = -posOffset - valueTextWidth + negOffset = -negOffset - valueTextWidth + } + + if dataSet.isDrawValuesEnabled + { + drawValue( + context: context, + value: valueText, + xPos: (rect.origin.x + rect.size.width) + + (val >= 0.0 ? posOffset : negOffset), + yPos: rect.origin.y + yOffset, + font: valueFont, + align: textAlign, + color: dataSet.valueTextColorAt(index)) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + var px = (rect.origin.x + rect.size.width) + + (val >= 0.0 ? posOffset : negOffset) + var py = rect.origin.y + + px += iconsOffset.x + py += iconsOffset.y + + ChartUtils.drawImage( + context: context, + image: icon, + x: px, + y: py, + size: icon.size) + } + } + else + { + let vals = vals! + var transformed = [CGPoint]() + + var posY = 0.0 + var negY = -e.negativeSum + + for k in 0 ..< vals.count + { + let value = vals[k] + var y: Double + + if value == 0.0 && (posY == 0.0 || negY == 0.0) + { + // Take care of the situation of a 0.0 value, which overlaps a non-zero bar + y = value + } + else if value >= 0.0 + { + posY += value + y = posY + } + else + { + y = negY + negY -= value + } + + transformed.append(CGPoint(x: CGFloat(y * phaseY), y: 0.0)) + } + + trans.pointValuesToPixel(&transformed) + + for k in 0 ..< transformed.count + { + let val = vals[k] + let valueText = formatter.stringForValue( + val, + entry: e, + dataSetIndex: dataSetIndex, + viewPortHandler: viewPortHandler) + + // calculate the correct offset depending on the draw position of the value + let valueTextWidth = valueText.size(withAttributes: [NSAttributedStringKey.font: valueFont]).width + posOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus)) + negOffset = (drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus) + + if isInverted + { + posOffset = -posOffset - valueTextWidth + negOffset = -negOffset - valueTextWidth + } + + let drawBelow = (val == 0.0 && negY == 0.0 && posY > 0.0) || val < 0.0 + + let x = transformed[k].x + (drawBelow ? negOffset : posOffset) + let y = rect.origin.y + rect.size.height / 2.0 + + if (!viewPortHandler.isInBoundsTop(y)) + { + break + } + + if (!viewPortHandler.isInBoundsX(x)) + { + continue + } + + if (!viewPortHandler.isInBoundsBottom(y)) + { + continue + } + + if dataSet.isDrawValuesEnabled + { + drawValue(context: context, + value: valueText, + xPos: x, + yPos: y + yOffset, + font: valueFont, + align: textAlign, + color: dataSet.valueTextColorAt(index)) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + ChartUtils.drawImage( + context: context, + image: icon, + x: x + iconsOffset.x, + y: y + iconsOffset.y, + size: icon.size) + } + } + } + + bufferIndex = vals == nil ? (bufferIndex + 1) : (bufferIndex + vals!.count) + } + } + } + } + } + + open override func isDrawingValuesAllowed(dataProvider: ChartDataProvider?) -> Bool + { + guard let data = dataProvider?.data + else { return false } + return data.entryCount < Int(CGFloat(dataProvider?.maxVisibleCount ?? 0) * self.viewPortHandler.scaleY) + } + + /// Sets the drawing position of the highlight object based on the riven bar-rect. + internal override func setHighlightDrawPos(highlight high: Highlight, barRect: CGRect) + { + high.setDraw(x: barRect.midY, y: barRect.origin.x + barRect.size.width) + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/LegendRenderer.swift b/Pods/Charts/Source/Charts/Renderers/LegendRenderer.swift new file mode 100755 index 0000000..08100e3 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/LegendRenderer.swift @@ -0,0 +1,570 @@ +// +// LegendRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartLegendRenderer) +open class LegendRenderer: Renderer +{ + /// the legend object this renderer renders + @objc open var legend: Legend? + + @objc public init(viewPortHandler: ViewPortHandler, legend: Legend?) + { + super.init(viewPortHandler: viewPortHandler) + + self.legend = legend + } + + /// Prepares the legend and calculates all needed forms, labels and colors. + @objc open func computeLegend(data: ChartData) + { + guard let legend = legend else { return } + + if !legend.isLegendCustom + { + var entries: [LegendEntry] = [] + + // loop for building up the colors and labels used in the legend + for i in 0.. 0 + { + context.setLineDash(phase: formLineDashPhase, lengths: formLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.setStrokeColor(formColor.cgColor) + + _formLineSegmentsBuffer[0].x = x + _formLineSegmentsBuffer[0].y = y + _formLineSegmentsBuffer[1].x = x + formSize + _formLineSegmentsBuffer[1].y = y + context.strokeLineSegments(between: _formLineSegmentsBuffer) + } + } + + /// Draws the provided label at the given position. + @objc open func drawLabel(context: CGContext, x: CGFloat, y: CGFloat, label: String, font: NSUIFont, textColor: NSUIColor) + { + ChartUtils.drawText(context: context, text: label, point: CGPoint(x: x, y: y), align: .left, attributes: [NSAttributedStringKey.font: font, NSAttributedStringKey.foregroundColor: textColor]) + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/LineChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/LineChartRenderer.swift new file mode 100644 index 0000000..24c5fdf --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/LineChartRenderer.swift @@ -0,0 +1,754 @@ +// +// LineChartRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + + +open class LineChartRenderer: LineRadarRenderer +{ + @objc open weak var dataProvider: LineChartDataProvider? + + @objc public init(dataProvider: LineChartDataProvider, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + + self.dataProvider = dataProvider + } + + open override func drawData(context: CGContext) + { + guard let lineData = dataProvider?.lineData else { return } + + for i in 0 ..< lineData.dataSetCount + { + guard let set = lineData.getDataSetByIndex(i) else { continue } + + if set.isVisible + { + if !(set is ILineChartDataSet) + { + fatalError("Datasets for LineChartRenderer must conform to ILineChartDataSet") + } + + drawDataSet(context: context, dataSet: set as! ILineChartDataSet) + } + } + } + + @objc open func drawDataSet(context: CGContext, dataSet: ILineChartDataSet) + { + if dataSet.entryCount < 1 + { + return + } + + context.saveGState() + + context.setLineWidth(dataSet.lineWidth) + if dataSet.lineDashLengths != nil + { + context.setLineDash(phase: dataSet.lineDashPhase, lengths: dataSet.lineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + // if drawing cubic lines is enabled + switch dataSet.mode + { + case .linear: fallthrough + case .stepped: + drawLinear(context: context, dataSet: dataSet) + + case .cubicBezier: + drawCubicBezier(context: context, dataSet: dataSet) + + case .horizontalBezier: + drawHorizontalBezier(context: context, dataSet: dataSet) + } + + context.restoreGState() + } + + @objc open func drawCubicBezier(context: CGContext, dataSet: ILineChartDataSet) + { + guard let dataProvider = dataProvider else { return } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + let phaseY = animator.phaseY + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + // get the color that is specified for this position from the DataSet + let drawingColor = dataSet.colors.first! + + let intensity = dataSet.cubicIntensity + + // the path for the cubic-spline + let cubicPath = CGMutablePath() + + let valueToPixelMatrix = trans.valueToPixelMatrix + + if _xBounds.range >= 1 + { + var prevDx: CGFloat = 0.0 + var prevDy: CGFloat = 0.0 + var curDx: CGFloat = 0.0 + var curDy: CGFloat = 0.0 + + // Take an extra point from the left, and an extra from the right. + // That's because we need 4 points for a cubic bezier (cubic=4), otherwise we get lines moving and doing weird stuff on the edges of the chart. + // So in the starting `prev` and `cur`, go -2, -1 + // And in the `lastIndex`, add +1 + + let firstIndex = _xBounds.min + 1 + let lastIndex = _xBounds.min + _xBounds.range + + var prevPrev: ChartDataEntry! = nil + var prev: ChartDataEntry! = dataSet.entryForIndex(max(firstIndex - 2, 0)) + var cur: ChartDataEntry! = dataSet.entryForIndex(max(firstIndex - 1, 0)) + var next: ChartDataEntry! = cur + var nextIndex: Int = -1 + + if cur == nil { return } + + // let the spline start + cubicPath.move(to: CGPoint(x: CGFloat(cur.x), y: CGFloat(cur.y * phaseY)), transform: valueToPixelMatrix) + + for j in stride(from: firstIndex, through: lastIndex, by: 1) + { + prevPrev = prev + prev = cur + cur = nextIndex == j ? next : dataSet.entryForIndex(j) + + nextIndex = j + 1 < dataSet.entryCount ? j + 1 : j + next = dataSet.entryForIndex(nextIndex) + + if next == nil { break } + + prevDx = CGFloat(cur.x - prevPrev.x) * intensity + prevDy = CGFloat(cur.y - prevPrev.y) * intensity + curDx = CGFloat(next.x - prev.x) * intensity + curDy = CGFloat(next.y - prev.y) * intensity + + cubicPath.addCurve( + to: CGPoint( + x: CGFloat(cur.x), + y: CGFloat(cur.y) * CGFloat(phaseY)), + control1: CGPoint( + x: CGFloat(prev.x) + prevDx, + y: (CGFloat(prev.y) + prevDy) * CGFloat(phaseY)), + control2: CGPoint( + x: CGFloat(cur.x) - curDx, + y: (CGFloat(cur.y) - curDy) * CGFloat(phaseY)), + transform: valueToPixelMatrix) + } + } + + context.saveGState() + + if dataSet.isDrawFilledEnabled + { + // Copy this path because we make changes to it + let fillPath = cubicPath.mutableCopy() + + drawCubicFill(context: context, dataSet: dataSet, spline: fillPath!, matrix: valueToPixelMatrix, bounds: _xBounds) + } + + context.beginPath() + context.addPath(cubicPath) + context.setStrokeColor(drawingColor.cgColor) + context.strokePath() + + context.restoreGState() + } + + @objc open func drawHorizontalBezier(context: CGContext, dataSet: ILineChartDataSet) + { + guard let dataProvider = dataProvider else { return } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + let phaseY = animator.phaseY + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + // get the color that is specified for this position from the DataSet + let drawingColor = dataSet.colors.first! + + // the path for the cubic-spline + let cubicPath = CGMutablePath() + + let valueToPixelMatrix = trans.valueToPixelMatrix + + if _xBounds.range >= 1 + { + var prev: ChartDataEntry! = dataSet.entryForIndex(_xBounds.min) + var cur: ChartDataEntry! = prev + + if cur == nil { return } + + // let the spline start + cubicPath.move(to: CGPoint(x: CGFloat(cur.x), y: CGFloat(cur.y * phaseY)), transform: valueToPixelMatrix) + + for j in stride(from: (_xBounds.min + 1), through: _xBounds.range + _xBounds.min, by: 1) + { + prev = cur + cur = dataSet.entryForIndex(j) + + let cpx = CGFloat(prev.x + (cur.x - prev.x) / 2.0) + + cubicPath.addCurve( + to: CGPoint( + x: CGFloat(cur.x), + y: CGFloat(cur.y * phaseY)), + control1: CGPoint( + x: cpx, + y: CGFloat(prev.y * phaseY)), + control2: CGPoint( + x: cpx, + y: CGFloat(cur.y * phaseY)), + transform: valueToPixelMatrix) + } + } + + context.saveGState() + + if dataSet.isDrawFilledEnabled + { + // Copy this path because we make changes to it + let fillPath = cubicPath.mutableCopy() + + drawCubicFill(context: context, dataSet: dataSet, spline: fillPath!, matrix: valueToPixelMatrix, bounds: _xBounds) + } + + context.beginPath() + context.addPath(cubicPath) + context.setStrokeColor(drawingColor.cgColor) + context.strokePath() + + context.restoreGState() + } + + open func drawCubicFill( + context: CGContext, + dataSet: ILineChartDataSet, + spline: CGMutablePath, + matrix: CGAffineTransform, + bounds: XBounds) + { + guard + let dataProvider = dataProvider + else { return } + + if bounds.range <= 0 + { + return + } + + let fillMin = dataSet.fillFormatter?.getFillLinePosition(dataSet: dataSet, dataProvider: dataProvider) ?? 0.0 + + var pt1 = CGPoint(x: CGFloat(dataSet.entryForIndex(bounds.min + bounds.range)?.x ?? 0.0), y: fillMin) + var pt2 = CGPoint(x: CGFloat(dataSet.entryForIndex(bounds.min)?.x ?? 0.0), y: fillMin) + pt1 = pt1.applying(matrix) + pt2 = pt2.applying(matrix) + + spline.addLine(to: pt1) + spline.addLine(to: pt2) + spline.closeSubpath() + + if dataSet.fill != nil + { + drawFilledPath(context: context, path: spline, fill: dataSet.fill!, fillAlpha: dataSet.fillAlpha) + } + else + { + drawFilledPath(context: context, path: spline, fillColor: dataSet.fillColor, fillAlpha: dataSet.fillAlpha) + } + } + + private var _lineSegments = [CGPoint](repeating: CGPoint(), count: 2) + + @objc open func drawLinear(context: CGContext, dataSet: ILineChartDataSet) + { + guard let dataProvider = dataProvider else { return } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + let valueToPixelMatrix = trans.valueToPixelMatrix + + let entryCount = dataSet.entryCount + let isDrawSteppedEnabled = dataSet.mode == .stepped + let pointsPerEntryPair = isDrawSteppedEnabled ? 4 : 2 + + let phaseY = animator.phaseY + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + // if drawing filled is enabled + if dataSet.isDrawFilledEnabled && entryCount > 0 + { + drawLinearFill(context: context, dataSet: dataSet, trans: trans, bounds: _xBounds) + } + + context.saveGState() + + context.setLineCap(dataSet.lineCapType) + + // more than 1 color + if dataSet.colors.count > 1 + { + if _lineSegments.count != pointsPerEntryPair + { + // Allocate once in correct size + _lineSegments = [CGPoint](repeating: CGPoint(), count: pointsPerEntryPair) + } + + for j in stride(from: _xBounds.min, through: _xBounds.range + _xBounds.min, by: 1) + { + var e: ChartDataEntry! = dataSet.entryForIndex(j) + + if e == nil { continue } + + _lineSegments[0].x = CGFloat(e.x) + _lineSegments[0].y = CGFloat(e.y * phaseY) + + if j < _xBounds.max + { + e = dataSet.entryForIndex(j + 1) + + if e == nil { break } + + if isDrawSteppedEnabled + { + _lineSegments[1] = CGPoint(x: CGFloat(e.x), y: _lineSegments[0].y) + _lineSegments[2] = _lineSegments[1] + _lineSegments[3] = CGPoint(x: CGFloat(e.x), y: CGFloat(e.y * phaseY)) + } + else + { + _lineSegments[1] = CGPoint(x: CGFloat(e.x), y: CGFloat(e.y * phaseY)) + } + } + else + { + _lineSegments[1] = _lineSegments[0] + } + + for i in 0..<_lineSegments.count + { + _lineSegments[i] = _lineSegments[i].applying(valueToPixelMatrix) + } + + if (!viewPortHandler.isInBoundsRight(_lineSegments[0].x)) + { + break + } + + // make sure the lines don't do shitty things outside bounds + if !viewPortHandler.isInBoundsLeft(_lineSegments[1].x) + || (!viewPortHandler.isInBoundsTop(_lineSegments[0].y) && !viewPortHandler.isInBoundsBottom(_lineSegments[1].y)) + { + continue + } + + // get the color that is set for this line-segment + context.setStrokeColor(dataSet.color(atIndex: j).cgColor) + context.strokeLineSegments(between: _lineSegments) + } + } + else + { // only one color per dataset + + var e1: ChartDataEntry! + var e2: ChartDataEntry! + + e1 = dataSet.entryForIndex(_xBounds.min) + + if e1 != nil + { + context.beginPath() + var firstPoint = true + + for x in stride(from: _xBounds.min, through: _xBounds.range + _xBounds.min, by: 1) + { + e1 = dataSet.entryForIndex(x == 0 ? 0 : (x - 1)) + e2 = dataSet.entryForIndex(x) + + if e1 == nil || e2 == nil { continue } + + let pt = CGPoint( + x: CGFloat(e1.x), + y: CGFloat(e1.y * phaseY) + ).applying(valueToPixelMatrix) + + if firstPoint + { + context.move(to: pt) + firstPoint = false + } + else + { + context.addLine(to: pt) + } + + if isDrawSteppedEnabled + { + context.addLine(to: CGPoint( + x: CGFloat(e2.x), + y: CGFloat(e1.y * phaseY) + ).applying(valueToPixelMatrix)) + } + + context.addLine(to: CGPoint( + x: CGFloat(e2.x), + y: CGFloat(e2.y * phaseY) + ).applying(valueToPixelMatrix)) + } + + if !firstPoint + { + context.setStrokeColor(dataSet.color(atIndex: 0).cgColor) + context.strokePath() + } + } + } + + context.restoreGState() + } + + open func drawLinearFill(context: CGContext, dataSet: ILineChartDataSet, trans: Transformer, bounds: XBounds) + { + guard let dataProvider = dataProvider else { return } + + let filled = generateFilledPath( + dataSet: dataSet, + fillMin: dataSet.fillFormatter?.getFillLinePosition(dataSet: dataSet, dataProvider: dataProvider) ?? 0.0, + bounds: bounds, + matrix: trans.valueToPixelMatrix) + + if dataSet.fill != nil + { + drawFilledPath(context: context, path: filled, fill: dataSet.fill!, fillAlpha: dataSet.fillAlpha) + } + else + { + drawFilledPath(context: context, path: filled, fillColor: dataSet.fillColor, fillAlpha: dataSet.fillAlpha) + } + } + + /// Generates the path that is used for filled drawing. + private func generateFilledPath(dataSet: ILineChartDataSet, fillMin: CGFloat, bounds: XBounds, matrix: CGAffineTransform) -> CGPath + { + let phaseY = animator.phaseY + let isDrawSteppedEnabled = dataSet.mode == .stepped + let matrix = matrix + + var e: ChartDataEntry! + + let filled = CGMutablePath() + + e = dataSet.entryForIndex(bounds.min) + if e != nil + { + filled.move(to: CGPoint(x: CGFloat(e.x), y: fillMin), transform: matrix) + filled.addLine(to: CGPoint(x: CGFloat(e.x), y: CGFloat(e.y * phaseY)), transform: matrix) + } + + // create a new path + for x in stride(from: (bounds.min + 1), through: bounds.range + bounds.min, by: 1) + { + guard let e = dataSet.entryForIndex(x) else { continue } + + if isDrawSteppedEnabled + { + guard let ePrev = dataSet.entryForIndex(x-1) else { continue } + filled.addLine(to: CGPoint(x: CGFloat(e.x), y: CGFloat(ePrev.y * phaseY)), transform: matrix) + } + + filled.addLine(to: CGPoint(x: CGFloat(e.x), y: CGFloat(e.y * phaseY)), transform: matrix) + } + + // close up + e = dataSet.entryForIndex(bounds.range + bounds.min) + if e != nil + { + filled.addLine(to: CGPoint(x: CGFloat(e.x), y: fillMin), transform: matrix) + } + filled.closeSubpath() + + return filled + } + + open override func drawValues(context: CGContext) + { + guard + let dataProvider = dataProvider, + let lineData = dataProvider.lineData + else { return } + + if isDrawingValuesAllowed(dataProvider: dataProvider) + { + var dataSets = lineData.dataSets + + let phaseY = animator.phaseY + + var pt = CGPoint() + + for i in 0 ..< dataSets.count + { + guard let dataSet = dataSets[i] as? ILineChartDataSet else { continue } + + if !shouldDrawValues(forDataSet: dataSet) + { + continue + } + + let valueFont = dataSet.valueFont + + guard let formatter = dataSet.valueFormatter else { continue } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + let valueToPixelMatrix = trans.valueToPixelMatrix + + let iconsOffset = dataSet.iconsOffset + + // make sure the values do not interfear with the circles + var valOffset = Int(dataSet.circleRadius * 1.75) + + if !dataSet.isDrawCirclesEnabled + { + valOffset = valOffset / 2 + } + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + for j in stride(from: _xBounds.min, through: min(_xBounds.min + _xBounds.range, _xBounds.max), by: 1) + { + guard let e = dataSet.entryForIndex(j) else { break } + + pt.x = CGFloat(e.x) + pt.y = CGFloat(e.y * phaseY) + pt = pt.applying(valueToPixelMatrix) + + if (!viewPortHandler.isInBoundsRight(pt.x)) + { + break + } + + if (!viewPortHandler.isInBoundsLeft(pt.x) || !viewPortHandler.isInBoundsY(pt.y)) + { + continue + } + + if dataSet.isDrawValuesEnabled { + ChartUtils.drawText( + context: context, + text: formatter.stringForValue( + e.y, + entry: e, + dataSetIndex: i, + viewPortHandler: viewPortHandler), + point: CGPoint( + x: pt.x, + y: pt.y - CGFloat(valOffset) - valueFont.lineHeight), + align: .center, + attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: dataSet.valueTextColorAt(j)]) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + ChartUtils.drawImage(context: context, + image: icon, + x: pt.x + iconsOffset.x, + y: pt.y + iconsOffset.y, + size: icon.size) + } + } + } + } + } + + open override func drawExtras(context: CGContext) + { + drawCircles(context: context) + } + + private func drawCircles(context: CGContext) + { + guard + let dataProvider = dataProvider, + let lineData = dataProvider.lineData + else { return } + + let phaseY = animator.phaseY + + let dataSets = lineData.dataSets + + var pt = CGPoint() + var rect = CGRect() + + context.saveGState() + + for i in 0 ..< dataSets.count + { + guard let dataSet = lineData.getDataSetByIndex(i) as? ILineChartDataSet else { continue } + + if !dataSet.isVisible || !dataSet.isDrawCirclesEnabled || dataSet.entryCount == 0 + { + continue + } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + let valueToPixelMatrix = trans.valueToPixelMatrix + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + let circleRadius = dataSet.circleRadius + let circleDiameter = circleRadius * 2.0 + let circleHoleRadius = dataSet.circleHoleRadius + let circleHoleDiameter = circleHoleRadius * 2.0 + + let drawCircleHole = dataSet.isDrawCircleHoleEnabled && + circleHoleRadius < circleRadius && + circleHoleRadius > 0.0 + let drawTransparentCircleHole = drawCircleHole && + (dataSet.circleHoleColor == nil || + dataSet.circleHoleColor == NSUIColor.clear) + + for j in stride(from: _xBounds.min, through: _xBounds.range + _xBounds.min, by: 1) + { + guard let e = dataSet.entryForIndex(j) else { break } + + pt.x = CGFloat(e.x) + pt.y = CGFloat(e.y * phaseY) + pt = pt.applying(valueToPixelMatrix) + + if (!viewPortHandler.isInBoundsRight(pt.x)) + { + break + } + + // make sure the circles don't do shitty things outside bounds + if (!viewPortHandler.isInBoundsLeft(pt.x) || !viewPortHandler.isInBoundsY(pt.y)) + { + continue + } + + context.setFillColor(dataSet.getCircleColor(atIndex: j)!.cgColor) + + rect.origin.x = pt.x - circleRadius + rect.origin.y = pt.y - circleRadius + rect.size.width = circleDiameter + rect.size.height = circleDiameter + + if drawTransparentCircleHole + { + // Begin path for circle with hole + context.beginPath() + context.addEllipse(in: rect) + + // Cut hole in path + rect.origin.x = pt.x - circleHoleRadius + rect.origin.y = pt.y - circleHoleRadius + rect.size.width = circleHoleDiameter + rect.size.height = circleHoleDiameter + context.addEllipse(in: rect) + + // Fill in-between + context.fillPath(using: .evenOdd) + } + else + { + context.fillEllipse(in: rect) + + if drawCircleHole + { + context.setFillColor(dataSet.circleHoleColor!.cgColor) + + // The hole rect + rect.origin.x = pt.x - circleHoleRadius + rect.origin.y = pt.y - circleHoleRadius + rect.size.width = circleHoleDiameter + rect.size.height = circleHoleDiameter + + context.fillEllipse(in: rect) + } + } + } + } + + context.restoreGState() + } + + open override func drawHighlighted(context: CGContext, indices: [Highlight]) + { + guard + let dataProvider = dataProvider, + let lineData = dataProvider.lineData + else { return } + + let chartXMax = dataProvider.chartXMax + + context.saveGState() + + for high in indices + { + guard let set = lineData.getDataSetByIndex(high.dataSetIndex) as? ILineChartDataSet + , set.isHighlightEnabled + else { continue } + + guard let e = set.entryForXValue(high.x, closestToY: high.y) else { continue } + + if !isInBoundsX(entry: e, dataSet: set) + { + continue + } + + context.setStrokeColor(set.highlightColor.cgColor) + context.setLineWidth(set.highlightLineWidth) + if set.highlightLineDashLengths != nil + { + context.setLineDash(phase: set.highlightLineDashPhase, lengths: set.highlightLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + let x = high.x // get the x-position + let y = high.y * Double(animator.phaseY) + + if x > chartXMax * animator.phaseX + { + continue + } + + let trans = dataProvider.getTransformer(forAxis: set.axisDependency) + + let pt = trans.pixelForValues(x: x, y: y) + + high.setDraw(pt: pt) + + // draw the lines + drawHighlightLines(context: context, point: pt, set: set) + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/LineRadarRenderer.swift b/Pods/Charts/Source/Charts/Renderers/LineRadarRenderer.swift new file mode 100644 index 0000000..6b02825 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/LineRadarRenderer.swift @@ -0,0 +1,54 @@ +// +// LineRadarRenderer.swift +// Charts +// +// 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 + +@objc(LineRadarChartRenderer) +open class LineRadarRenderer: LineScatterCandleRadarRenderer +{ + public override init(animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + } + + /// Draws the provided path in filled mode with the provided drawable. + @objc open func drawFilledPath(context: CGContext, path: CGPath, fill: Fill, fillAlpha: CGFloat) + { + + context.saveGState() + context.beginPath() + context.addPath(path) + + // filled is usually drawn with less alpha + context.setAlpha(fillAlpha) + + fill.fillPath(context: context, rect: viewPortHandler.contentRect) + + context.restoreGState() + } + + /// Draws the provided path in filled mode with the provided color and alpha. + @objc open func drawFilledPath(context: CGContext, path: CGPath, fillColor: NSUIColor, fillAlpha: CGFloat) + { + context.saveGState() + context.beginPath() + context.addPath(path) + + // filled is usually drawn with less alpha + context.setAlpha(fillAlpha) + + context.setFillColor(fillColor.cgColor) + context.fillPath() + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift b/Pods/Charts/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift new file mode 100644 index 0000000..05203ca --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift @@ -0,0 +1,49 @@ +// +// LineScatterCandleRadarRenderer.swift +// Charts +// +// 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 + +@objc(LineScatterCandleRadarChartRenderer) +open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer +{ + public override init(animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + } + + /// Draws vertical & horizontal highlight-lines if enabled. + /// :param: context + /// :param: points + /// :param: horizontal + /// :param: vertical + @objc open func drawHighlightLines(context: CGContext, point: CGPoint, set: ILineScatterCandleRadarChartDataSet) + { + + // draw vertical highlight lines + if set.isVerticalHighlightIndicatorEnabled + { + context.beginPath() + context.move(to: CGPoint(x: point.x, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: point.x, y: viewPortHandler.contentBottom)) + context.strokePath() + } + + // draw horizontal highlight lines + if set.isHorizontalHighlightIndicatorEnabled + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: point.y)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: point.y)) + context.strokePath() + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/PieChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/PieChartRenderer.swift new file mode 100644 index 0000000..a363da2 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/PieChartRenderer.swift @@ -0,0 +1,834 @@ +// +// PieChartRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + + +open class PieChartRenderer: DataRenderer +{ + @objc open weak var chart: PieChartView? + + @objc public init(chart: PieChartView, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + + self.chart = chart + } + + open override func drawData(context: CGContext) + { + guard let chart = chart else { return } + + let pieData = chart.data + + if pieData != nil + { + for set in pieData!.dataSets as! [IPieChartDataSet] + { + if set.isVisible && set.entryCount > 0 + { + drawDataSet(context: context, dataSet: set) + } + } + } + } + + @objc open func calculateMinimumRadiusForSpacedSlice( + center: CGPoint, + radius: CGFloat, + angle: CGFloat, + arcStartPointX: CGFloat, + arcStartPointY: CGFloat, + startAngle: CGFloat, + sweepAngle: CGFloat) -> CGFloat + { + let angleMiddle = startAngle + sweepAngle / 2.0 + + // Other point of the arc + let arcEndPointX = center.x + radius * cos((startAngle + sweepAngle).DEG2RAD) + let arcEndPointY = center.y + radius * sin((startAngle + sweepAngle).DEG2RAD) + + // Middle point on the arc + let arcMidPointX = center.x + radius * cos(angleMiddle.DEG2RAD) + let arcMidPointY = center.y + radius * sin(angleMiddle.DEG2RAD) + + // This is the base of the contained triangle + let basePointsDistance = sqrt( + pow(arcEndPointX - arcStartPointX, 2) + + pow(arcEndPointY - arcStartPointY, 2)) + + // After reducing space from both sides of the "slice", + // the angle of the contained triangle should stay the same. + // So let's find out the height of that triangle. + let containedTriangleHeight = (basePointsDistance / 2.0 * + tan((180.0 - angle).DEG2RAD / 2.0)) + + // Now we subtract that from the radius + var spacedRadius = radius - containedTriangleHeight + + // And now subtract the height of the arc that's between the triangle and the outer circle + spacedRadius -= sqrt( + pow(arcMidPointX - (arcEndPointX + arcStartPointX) / 2.0, 2) + + pow(arcMidPointY - (arcEndPointY + arcStartPointY) / 2.0, 2)) + + return spacedRadius + } + + /// Calculates the sliceSpace to use based on visible values and their size compared to the set sliceSpace. + @objc open func getSliceSpace(dataSet: IPieChartDataSet) -> CGFloat + { + guard + dataSet.automaticallyDisableSliceSpacing, + let data = chart?.data as? PieChartData + else { return dataSet.sliceSpace } + + let spaceSizeRatio = dataSet.sliceSpace / min(viewPortHandler.contentWidth, viewPortHandler.contentHeight) + let minValueRatio = dataSet.yMin / data.yValueSum * 2.0 + + let sliceSpace = spaceSizeRatio > CGFloat(minValueRatio) + ? 0.0 + : dataSet.sliceSpace + + return sliceSpace + } + + @objc open func drawDataSet(context: CGContext, dataSet: IPieChartDataSet) + { + guard let chart = chart else {return } + + var angle: CGFloat = 0.0 + let rotationAngle = chart.rotationAngle + + let phaseX = animator.phaseX + let phaseY = animator.phaseY + + let entryCount = dataSet.entryCount + var drawAngles = chart.drawAngles + let center = chart.centerCircleBox + let radius = chart.radius + let drawInnerArc = chart.drawHoleEnabled && !chart.drawSlicesUnderHoleEnabled + let userInnerRadius = drawInnerArc ? radius * chart.holeRadiusPercent : 0.0 + + var visibleAngleCount = 0 + for j in 0 ..< entryCount + { + guard let e = dataSet.entryForIndex(j) else { continue } + if ((abs(e.y) > Double.ulpOfOne)) + { + visibleAngleCount += 1 + } + } + + let sliceSpace = visibleAngleCount <= 1 ? 0.0 : getSliceSpace(dataSet: dataSet) + + context.saveGState() + + for j in 0 ..< entryCount + { + let sliceAngle = drawAngles[j] + var innerRadius = userInnerRadius + + guard let e = dataSet.entryForIndex(j) else { continue } + + // draw only if the value is greater than zero + if (abs(e.y) > Double.ulpOfOne) + { + if !chart.needsHighlight(index: j) + { + let accountForSliceSpacing = sliceSpace > 0.0 && sliceAngle <= 180.0 + + context.setFillColor(dataSet.color(atIndex: j).cgColor) + + let sliceSpaceAngleOuter = visibleAngleCount == 1 ? + 0.0 : + sliceSpace / radius.DEG2RAD + let startAngleOuter = rotationAngle + (angle + sliceSpaceAngleOuter / 2.0) * CGFloat(phaseY) + var sweepAngleOuter = (sliceAngle - sliceSpaceAngleOuter) * CGFloat(phaseY) + if sweepAngleOuter < 0.0 + { + sweepAngleOuter = 0.0 + } + + let arcStartPointX = center.x + radius * cos(startAngleOuter.DEG2RAD) + let arcStartPointY = center.y + radius * sin(startAngleOuter.DEG2RAD) + + let path = CGMutablePath() + + path.move(to: CGPoint(x: arcStartPointX, + y: arcStartPointY)) + + path.addRelativeArc(center: center, radius: radius, startAngle: startAngleOuter.DEG2RAD, delta: sweepAngleOuter.DEG2RAD) + + if drawInnerArc && + (innerRadius > 0.0 || accountForSliceSpacing) + { + if accountForSliceSpacing + { + var minSpacedRadius = calculateMinimumRadiusForSpacedSlice( + center: center, + radius: radius, + angle: sliceAngle * CGFloat(phaseY), + arcStartPointX: arcStartPointX, + arcStartPointY: arcStartPointY, + startAngle: startAngleOuter, + sweepAngle: sweepAngleOuter) + if minSpacedRadius < 0.0 + { + minSpacedRadius = -minSpacedRadius + } + innerRadius = min(max(innerRadius, minSpacedRadius), radius) + } + + let sliceSpaceAngleInner = visibleAngleCount == 1 || innerRadius == 0.0 ? + 0.0 : + sliceSpace / innerRadius.DEG2RAD + let startAngleInner = rotationAngle + (angle + sliceSpaceAngleInner / 2.0) * CGFloat(phaseY) + var sweepAngleInner = (sliceAngle - sliceSpaceAngleInner) * CGFloat(phaseY) + if sweepAngleInner < 0.0 + { + sweepAngleInner = 0.0 + } + let endAngleInner = startAngleInner + sweepAngleInner + + path.addLine( + to: CGPoint( + x: center.x + innerRadius * cos(endAngleInner.DEG2RAD), + y: center.y + innerRadius * sin(endAngleInner.DEG2RAD))) + + path.addRelativeArc(center: center, radius: innerRadius, startAngle: endAngleInner.DEG2RAD, delta: -sweepAngleInner.DEG2RAD) + } + else + { + if accountForSliceSpacing + { + let angleMiddle = startAngleOuter + sweepAngleOuter / 2.0 + + let sliceSpaceOffset = + calculateMinimumRadiusForSpacedSlice( + center: center, + radius: radius, + angle: sliceAngle * CGFloat(phaseY), + arcStartPointX: arcStartPointX, + arcStartPointY: arcStartPointY, + startAngle: startAngleOuter, + sweepAngle: sweepAngleOuter) + + let arcEndPointX = center.x + sliceSpaceOffset * cos(angleMiddle.DEG2RAD) + let arcEndPointY = center.y + sliceSpaceOffset * sin(angleMiddle.DEG2RAD) + + path.addLine( + to: CGPoint( + x: arcEndPointX, + y: arcEndPointY)) + } + else + { + path.addLine(to: center) + } + } + + path.closeSubpath() + + context.beginPath() + context.addPath(path) + context.fillPath(using: .evenOdd) + } + } + + angle += sliceAngle * CGFloat(phaseX) + } + + context.restoreGState() + } + + open override func drawValues(context: CGContext) + { + guard + let chart = chart, + let data = chart.data + else { return } + + let center = chart.centerCircleBox + + // get whole the radius + let radius = chart.radius + let rotationAngle = chart.rotationAngle + var drawAngles = chart.drawAngles + var absoluteAngles = chart.absoluteAngles + + let phaseX = animator.phaseX + let phaseY = animator.phaseY + + var labelRadiusOffset = radius / 10.0 * 3.0 + + if chart.drawHoleEnabled + { + labelRadiusOffset = (radius - (radius * chart.holeRadiusPercent)) / 2.0 + } + + let labelRadius = radius - labelRadiusOffset + + var dataSets = data.dataSets + + let yValueSum = (data as! PieChartData).yValueSum + + let drawEntryLabels = chart.isDrawEntryLabelsEnabled + let usePercentValuesEnabled = chart.usePercentValuesEnabled + let entryLabelColor = chart.entryLabelColor + let entryLabelFont = chart.entryLabelFont + + var angle: CGFloat = 0.0 + var xIndex = 0 + + context.saveGState() + defer { context.restoreGState() } + + for i in 0 ..< dataSets.count + { + guard let dataSet = dataSets[i] as? IPieChartDataSet else { continue } + + let drawValues = dataSet.isDrawValuesEnabled + + if !drawValues && !drawEntryLabels && !dataSet.isDrawIconsEnabled + { + continue + } + + let iconsOffset = dataSet.iconsOffset + + let xValuePosition = dataSet.xValuePosition + let yValuePosition = dataSet.yValuePosition + + let valueFont = dataSet.valueFont + let entryLabelFont = dataSet.entryLabelFont + let lineHeight = valueFont.lineHeight + + guard let formatter = dataSet.valueFormatter else { continue } + + for j in 0 ..< dataSet.entryCount + { + guard let e = dataSet.entryForIndex(j) else { continue } + let pe = e as? PieChartDataEntry + + if xIndex == 0 + { + angle = 0.0 + } + else + { + angle = absoluteAngles[xIndex - 1] * CGFloat(phaseX) + } + + let sliceAngle = drawAngles[xIndex] + let sliceSpace = getSliceSpace(dataSet: dataSet) + let sliceSpaceMiddleAngle = sliceSpace / labelRadius.DEG2RAD + + // offset needed to center the drawn text in the slice + let angleOffset = (sliceAngle - sliceSpaceMiddleAngle / 2.0) / 2.0 + + angle = angle + angleOffset + + let transformedAngle = rotationAngle + angle * CGFloat(phaseY) + + let value = usePercentValuesEnabled ? e.y / yValueSum * 100.0 : e.y + let valueText = formatter.stringForValue( + value, + entry: e, + dataSetIndex: i, + viewPortHandler: viewPortHandler) + + let sliceXBase = cos(transformedAngle.DEG2RAD) + let sliceYBase = sin(transformedAngle.DEG2RAD) + + let drawXOutside = drawEntryLabels && xValuePosition == .outsideSlice + let drawYOutside = drawValues && yValuePosition == .outsideSlice + let drawXInside = drawEntryLabels && xValuePosition == .insideSlice + let drawYInside = drawValues && yValuePosition == .insideSlice + + let valueTextColor = dataSet.valueTextColorAt(j) + let entryLabelColor = dataSet.entryLabelColor + + if drawXOutside || drawYOutside + { + let valueLineLength1 = dataSet.valueLinePart1Length + let valueLineLength2 = dataSet.valueLinePart2Length + let valueLinePart1OffsetPercentage = dataSet.valueLinePart1OffsetPercentage + + var pt2: CGPoint + var labelPoint: CGPoint + var align: NSTextAlignment + + var line1Radius: CGFloat + + if chart.drawHoleEnabled + { + line1Radius = (radius - (radius * chart.holeRadiusPercent)) * valueLinePart1OffsetPercentage + (radius * chart.holeRadiusPercent) + } + else + { + line1Radius = radius * valueLinePart1OffsetPercentage + } + + let polyline2Length = dataSet.valueLineVariableLength + ? labelRadius * valueLineLength2 * abs(sin(transformedAngle.DEG2RAD)) + : labelRadius * valueLineLength2 + + let pt0 = CGPoint( + x: line1Radius * sliceXBase + center.x, + y: line1Radius * sliceYBase + center.y) + + let pt1 = CGPoint( + x: labelRadius * (1 + valueLineLength1) * sliceXBase + center.x, + y: labelRadius * (1 + valueLineLength1) * sliceYBase + center.y) + + if transformedAngle.truncatingRemainder(dividingBy: 360.0) >= 90.0 && transformedAngle.truncatingRemainder(dividingBy: 360.0) <= 270.0 + { + pt2 = CGPoint(x: pt1.x - polyline2Length, y: pt1.y) + align = .right + labelPoint = CGPoint(x: pt2.x - 5, y: pt2.y - lineHeight) + } + else + { + pt2 = CGPoint(x: pt1.x + polyline2Length, y: pt1.y) + align = .left + labelPoint = CGPoint(x: pt2.x + 5, y: pt2.y - lineHeight) + } + + if dataSet.valueLineColor != nil + { + context.setStrokeColor(dataSet.valueLineColor!.cgColor) + context.setLineWidth(dataSet.valueLineWidth) + + context.move(to: CGPoint(x: pt0.x, y: pt0.y)) + context.addLine(to: CGPoint(x: pt1.x, y: pt1.y)) + context.addLine(to: CGPoint(x: pt2.x, y: pt2.y)) + + context.drawPath(using: CGPathDrawingMode.stroke) + } + + if drawXOutside && drawYOutside + { + ChartUtils.drawText( + context: context, + text: valueText, + point: labelPoint, + align: align, + attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: valueTextColor] + ) + + if j < data.entryCount && pe?.label != nil + { + ChartUtils.drawText( + context: context, + text: pe!.label!, + point: CGPoint(x: labelPoint.x, y: labelPoint.y + lineHeight), + align: align, + attributes: [ + NSAttributedStringKey.font: entryLabelFont ?? valueFont, + NSAttributedStringKey.foregroundColor: entryLabelColor ?? valueTextColor] + ) + } + } + else if drawXOutside + { + if j < data.entryCount && pe?.label != nil + { + ChartUtils.drawText( + context: context, + text: pe!.label!, + point: CGPoint(x: labelPoint.x, y: labelPoint.y + lineHeight / 2.0), + align: align, + attributes: [ + NSAttributedStringKey.font: entryLabelFont ?? valueFont, + NSAttributedStringKey.foregroundColor: entryLabelColor ?? valueTextColor] + ) + } + } + else if drawYOutside + { + ChartUtils.drawText( + context: context, + text: valueText, + point: CGPoint(x: labelPoint.x, y: labelPoint.y + lineHeight / 2.0), + align: align, + attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: valueTextColor] + ) + } + } + + if drawXInside || drawYInside + { + // calculate the text position + let x = labelRadius * sliceXBase + center.x + let y = labelRadius * sliceYBase + center.y - lineHeight + + if drawXInside && drawYInside + { + ChartUtils.drawText( + context: context, + text: valueText, + point: CGPoint(x: x, y: y), + align: .center, + attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: valueTextColor] + ) + + if j < data.entryCount && pe?.label != nil + { + ChartUtils.drawText( + context: context, + text: pe!.label!, + point: CGPoint(x: x, y: y + lineHeight), + align: .center, + attributes: [ + NSAttributedStringKey.font: entryLabelFont ?? valueFont, + NSAttributedStringKey.foregroundColor: entryLabelColor ?? valueTextColor] + ) + } + } + else if drawXInside + { + if j < data.entryCount && pe?.label != nil + { + ChartUtils.drawText( + context: context, + text: pe!.label!, + point: CGPoint(x: x, y: y + lineHeight / 2.0), + align: .center, + attributes: [ + NSAttributedStringKey.font: entryLabelFont ?? valueFont, + NSAttributedStringKey.foregroundColor: entryLabelColor ?? valueTextColor] + ) + } + } + else if drawYInside + { + ChartUtils.drawText( + context: context, + text: valueText, + point: CGPoint(x: x, y: y + lineHeight / 2.0), + align: .center, + attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: valueTextColor] + ) + } + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + // calculate the icon's position + + let x = (labelRadius + iconsOffset.y) * sliceXBase + center.x + var y = (labelRadius + iconsOffset.y) * sliceYBase + center.y + y += iconsOffset.x + + ChartUtils.drawImage(context: context, + image: icon, + x: x, + y: y, + size: icon.size) + } + + xIndex += 1 + } + } + } + + open override func drawExtras(context: CGContext) + { + drawHole(context: context) + drawCenterText(context: context) + } + + /// draws the hole in the center of the chart and the transparent circle / hole + private func drawHole(context: CGContext) + { + guard let chart = chart else { return } + + if chart.drawHoleEnabled + { + context.saveGState() + + let radius = chart.radius + let holeRadius = radius * chart.holeRadiusPercent + let center = chart.centerCircleBox + + if let holeColor = chart.holeColor + { + if holeColor != NSUIColor.clear + { + // draw the hole-circle + context.setFillColor(chart.holeColor!.cgColor) + context.fillEllipse(in: CGRect(x: center.x - holeRadius, y: center.y - holeRadius, width: holeRadius * 2.0, height: holeRadius * 2.0)) + } + } + + // only draw the circle if it can be seen (not covered by the hole) + if let transparentCircleColor = chart.transparentCircleColor + { + if transparentCircleColor != NSUIColor.clear && + chart.transparentCircleRadiusPercent > chart.holeRadiusPercent + { + let alpha = animator.phaseX * animator.phaseY + let secondHoleRadius = radius * chart.transparentCircleRadiusPercent + + // make transparent + context.setAlpha(CGFloat(alpha)) + context.setFillColor(transparentCircleColor.cgColor) + + // draw the transparent-circle + context.beginPath() + context.addEllipse(in: CGRect( + x: center.x - secondHoleRadius, + y: center.y - secondHoleRadius, + width: secondHoleRadius * 2.0, + height: secondHoleRadius * 2.0)) + context.addEllipse(in: CGRect( + x: center.x - holeRadius, + y: center.y - holeRadius, + width: holeRadius * 2.0, + height: holeRadius * 2.0)) + context.fillPath(using: .evenOdd) + } + } + + context.restoreGState() + } + } + + /// draws the description text in the center of the pie chart makes most sense when center-hole is enabled + private func drawCenterText(context: CGContext) + { + guard + let chart = chart, + let centerAttributedText = chart.centerAttributedText + else { return } + + if chart.drawCenterTextEnabled && centerAttributedText.length > 0 + { + let center = chart.centerCircleBox + let offset = chart.centerTextOffset + let innerRadius = chart.drawHoleEnabled && !chart.drawSlicesUnderHoleEnabled ? chart.radius * chart.holeRadiusPercent : chart.radius + + let x = center.x + offset.x + let y = center.y + offset.y + + let holeRect = CGRect( + x: x - innerRadius, + y: y - innerRadius, + width: innerRadius * 2.0, + height: innerRadius * 2.0) + var boundingRect = holeRect + + if chart.centerTextRadiusPercent > 0.0 + { + boundingRect = boundingRect.insetBy(dx: (boundingRect.width - boundingRect.width * chart.centerTextRadiusPercent) / 2.0, dy: (boundingRect.height - boundingRect.height * chart.centerTextRadiusPercent) / 2.0) + } + + let textBounds = centerAttributedText.boundingRect(with: boundingRect.size, options: [.usesLineFragmentOrigin, .usesFontLeading, .truncatesLastVisibleLine], context: nil) + + var drawingRect = boundingRect + drawingRect.origin.x += (boundingRect.size.width - textBounds.size.width) / 2.0 + drawingRect.origin.y += (boundingRect.size.height - textBounds.size.height) / 2.0 + drawingRect.size = textBounds.size + + context.saveGState() + + let clippingPath = CGPath(ellipseIn: holeRect, transform: nil) + context.beginPath() + context.addPath(clippingPath) + context.clip() + + centerAttributedText.draw(with: drawingRect, options: [.usesLineFragmentOrigin, .usesFontLeading, .truncatesLastVisibleLine], context: nil) + + context.restoreGState() + } + } + + open override func drawHighlighted(context: CGContext, indices: [Highlight]) + { + guard + let chart = chart, + let data = chart.data + else { return } + + context.saveGState() + + let phaseX = animator.phaseX + let phaseY = animator.phaseY + + var angle: CGFloat = 0.0 + let rotationAngle = chart.rotationAngle + + var drawAngles = chart.drawAngles + var absoluteAngles = chart.absoluteAngles + let center = chart.centerCircleBox + let radius = chart.radius + let drawInnerArc = chart.drawHoleEnabled && !chart.drawSlicesUnderHoleEnabled + let userInnerRadius = drawInnerArc ? radius * chart.holeRadiusPercent : 0.0 + + for i in 0 ..< indices.count + { + // get the index to highlight + let index = Int(indices[i].x) + if index >= drawAngles.count + { + continue + } + + guard let set = data.getDataSetByIndex(indices[i].dataSetIndex) as? IPieChartDataSet else { continue } + + if !set.isHighlightEnabled + { + continue + } + + let entryCount = set.entryCount + var visibleAngleCount = 0 + for j in 0 ..< entryCount + { + guard let e = set.entryForIndex(j) else { continue } + if ((abs(e.y) > Double.ulpOfOne)) + { + visibleAngleCount += 1 + } + } + + if index == 0 + { + angle = 0.0 + } + else + { + angle = absoluteAngles[index - 1] * CGFloat(phaseX) + } + + let sliceSpace = visibleAngleCount <= 1 ? 0.0 : set.sliceSpace + + let sliceAngle = drawAngles[index] + var innerRadius = userInnerRadius + + let shift = set.selectionShift + let highlightedRadius = radius + shift + + let accountForSliceSpacing = sliceSpace > 0.0 && sliceAngle <= 180.0 + + context.setFillColor(set.highlightColor?.cgColor ?? set.color(atIndex: index).cgColor) + + let sliceSpaceAngleOuter = visibleAngleCount == 1 ? + 0.0 : + sliceSpace / radius.DEG2RAD + + let sliceSpaceAngleShifted = visibleAngleCount == 1 ? + 0.0 : + sliceSpace / highlightedRadius.DEG2RAD + + let startAngleOuter = rotationAngle + (angle + sliceSpaceAngleOuter / 2.0) * CGFloat(phaseY) + var sweepAngleOuter = (sliceAngle - sliceSpaceAngleOuter) * CGFloat(phaseY) + if sweepAngleOuter < 0.0 + { + sweepAngleOuter = 0.0 + } + + let startAngleShifted = rotationAngle + (angle + sliceSpaceAngleShifted / 2.0) * CGFloat(phaseY) + var sweepAngleShifted = (sliceAngle - sliceSpaceAngleShifted) * CGFloat(phaseY) + if sweepAngleShifted < 0.0 + { + sweepAngleShifted = 0.0 + } + + let path = CGMutablePath() + + path.move(to: CGPoint(x: center.x + highlightedRadius * cos(startAngleShifted.DEG2RAD), + y: center.y + highlightedRadius * sin(startAngleShifted.DEG2RAD))) + + path.addRelativeArc(center: center, radius: highlightedRadius, startAngle: startAngleShifted.DEG2RAD, + delta: sweepAngleShifted.DEG2RAD) + + var sliceSpaceRadius: CGFloat = 0.0 + if accountForSliceSpacing + { + sliceSpaceRadius = calculateMinimumRadiusForSpacedSlice( + center: center, + radius: radius, + angle: sliceAngle * CGFloat(phaseY), + arcStartPointX: center.x + radius * cos(startAngleOuter.DEG2RAD), + arcStartPointY: center.y + radius * sin(startAngleOuter.DEG2RAD), + startAngle: startAngleOuter, + sweepAngle: sweepAngleOuter) + } + + if drawInnerArc && + (innerRadius > 0.0 || accountForSliceSpacing) + { + if accountForSliceSpacing + { + var minSpacedRadius = sliceSpaceRadius + if minSpacedRadius < 0.0 + { + minSpacedRadius = -minSpacedRadius + } + innerRadius = min(max(innerRadius, minSpacedRadius), radius) + } + + let sliceSpaceAngleInner = visibleAngleCount == 1 || innerRadius == 0.0 ? + 0.0 : + sliceSpace / innerRadius.DEG2RAD + let startAngleInner = rotationAngle + (angle + sliceSpaceAngleInner / 2.0) * CGFloat(phaseY) + var sweepAngleInner = (sliceAngle - sliceSpaceAngleInner) * CGFloat(phaseY) + if sweepAngleInner < 0.0 + { + sweepAngleInner = 0.0 + } + let endAngleInner = startAngleInner + sweepAngleInner + + path.addLine( + to: CGPoint( + x: center.x + innerRadius * cos(endAngleInner.DEG2RAD), + y: center.y + innerRadius * sin(endAngleInner.DEG2RAD))) + + path.addRelativeArc(center: center, radius: innerRadius, + startAngle: endAngleInner.DEG2RAD, + delta: -sweepAngleInner.DEG2RAD) + } + else + { + if accountForSliceSpacing + { + let angleMiddle = startAngleOuter + sweepAngleOuter / 2.0 + + let arcEndPointX = center.x + sliceSpaceRadius * cos(angleMiddle.DEG2RAD) + let arcEndPointY = center.y + sliceSpaceRadius * sin(angleMiddle.DEG2RAD) + + path.addLine( + to: CGPoint( + x: arcEndPointX, + y: arcEndPointY)) + } + else + { + path.addLine(to: center) + } + } + + path.closeSubpath() + + context.beginPath() + context.addPath(path) + context.fillPath(using: .evenOdd) + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/RadarChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/RadarChartRenderer.swift new file mode 100644 index 0000000..3b9b87f --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/RadarChartRenderer.swift @@ -0,0 +1,403 @@ +// +// RadarChartRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + + +open class RadarChartRenderer: LineRadarRenderer +{ + @objc open weak var chart: RadarChartView? + + @objc public init(chart: RadarChartView, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + + self.chart = chart + } + + open override func drawData(context: CGContext) + { + guard let chart = chart else { return } + + let radarData = chart.data + + if radarData != nil + { + let mostEntries = radarData?.maxEntryCountSet?.entryCount ?? 0 + + for set in radarData!.dataSets as! [IRadarChartDataSet] + { + if set.isVisible + { + drawDataSet(context: context, dataSet: set, mostEntries: mostEntries) + } + } + } + } + + /// Draws the RadarDataSet + /// + /// - parameter context: + /// - parameter dataSet: + /// - parameter mostEntries: the entry count of the dataset with the most entries + internal func drawDataSet(context: CGContext, dataSet: IRadarChartDataSet, mostEntries: Int) + { + guard let chart = chart else { return } + + context.saveGState() + + let phaseX = animator.phaseX + let phaseY = animator.phaseY + + let sliceangle = chart.sliceAngle + + // calculate the factor that is needed for transforming the value to pixels + let factor = chart.factor + + let center = chart.centerOffsets + let entryCount = dataSet.entryCount + let path = CGMutablePath() + var hasMovedToPoint = false + + for j in 0 ..< entryCount + { + guard let e = dataSet.entryForIndex(j) else { continue } + + let p = center.moving(distance: CGFloat((e.y - chart.chartYMin) * Double(factor) * phaseY), + atAngle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) + + if p.x.isNaN + { + continue + } + + if !hasMovedToPoint + { + path.move(to: p) + hasMovedToPoint = true + } + else + { + path.addLine(to: p) + } + } + + // if this is the largest set, close it + if dataSet.entryCount < mostEntries + { + // if this is not the largest set, draw a line to the center before closing + path.addLine(to: center) + } + + path.closeSubpath() + + // draw filled + if dataSet.isDrawFilledEnabled + { + if dataSet.fill != nil + { + drawFilledPath(context: context, path: path, fill: dataSet.fill!, fillAlpha: dataSet.fillAlpha) + } + else + { + drawFilledPath(context: context, path: path, fillColor: dataSet.fillColor, fillAlpha: dataSet.fillAlpha) + } + } + + // draw the line (only if filled is disabled or alpha is below 255) + if !dataSet.isDrawFilledEnabled || dataSet.fillAlpha < 1.0 + { + context.setStrokeColor(dataSet.color(atIndex: 0).cgColor) + context.setLineWidth(dataSet.lineWidth) + context.setAlpha(1.0) + + context.beginPath() + context.addPath(path) + context.strokePath() + } + + context.restoreGState() + } + + open override func drawValues(context: CGContext) + { + guard + let chart = chart, + let data = chart.data + else { return } + + let phaseX = animator.phaseX + let phaseY = animator.phaseY + + let sliceangle = chart.sliceAngle + + // calculate the factor that is needed for transforming the value to pixels + let factor = chart.factor + + let center = chart.centerOffsets + + let yoffset = CGFloat(5.0) + + for i in 0 ..< data.dataSetCount + { + let dataSet = data.getDataSetByIndex(i) as! IRadarChartDataSet + + if !shouldDrawValues(forDataSet: dataSet) + { + continue + } + + let entryCount = dataSet.entryCount + + let iconsOffset = dataSet.iconsOffset + + for j in 0 ..< entryCount + { + guard let e = dataSet.entryForIndex(j) else { continue } + + let p = center.moving(distance: CGFloat(e.y - chart.chartYMin) * factor * CGFloat(phaseY), + atAngle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) + + let valueFont = dataSet.valueFont + + guard let formatter = dataSet.valueFormatter else { continue } + + if dataSet.isDrawValuesEnabled + { + ChartUtils.drawText( + context: context, + text: formatter.stringForValue( + e.y, + entry: e, + dataSetIndex: i, + viewPortHandler: viewPortHandler), + point: CGPoint(x: p.x, y: p.y - yoffset - valueFont.lineHeight), + align: .center, + attributes: [NSAttributedStringKey.font: valueFont, + NSAttributedStringKey.foregroundColor: dataSet.valueTextColorAt(j)] + ) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + var pIcon = center.moving(distance: CGFloat(e.y) * factor * CGFloat(phaseY) + iconsOffset.y, + atAngle: sliceangle * CGFloat(j) * CGFloat(phaseX) + chart.rotationAngle) + pIcon.y += iconsOffset.x + + ChartUtils.drawImage(context: context, + image: icon, + x: pIcon.x, + y: pIcon.y, + size: icon.size) + } + } + } + } + + open override func drawExtras(context: CGContext) + { + drawWeb(context: context) + } + + private var _webLineSegmentsBuffer = [CGPoint](repeating: CGPoint(), count: 2) + + @objc open func drawWeb(context: CGContext) + { + guard + let chart = chart, + let data = chart.data + else { return } + + let sliceangle = chart.sliceAngle + + context.saveGState() + + // calculate the factor that is needed for transforming the value to + // pixels + let factor = chart.factor + let rotationangle = chart.rotationAngle + + let center = chart.centerOffsets + + // draw the web lines that come from the center + context.setLineWidth(chart.webLineWidth) + context.setStrokeColor(chart.webColor.cgColor) + context.setAlpha(chart.webAlpha) + + let xIncrements = 1 + chart.skipWebLineCount + let maxEntryCount = chart.data?.maxEntryCountSet?.entryCount ?? 0 + + for i in stride(from: 0, to: maxEntryCount, by: xIncrements) + { + let p = center.moving(distance: CGFloat(chart.yRange) * factor, + atAngle: sliceangle * CGFloat(i) + rotationangle) + + _webLineSegmentsBuffer[0].x = center.x + _webLineSegmentsBuffer[0].y = center.y + _webLineSegmentsBuffer[1].x = p.x + _webLineSegmentsBuffer[1].y = p.y + + context.strokeLineSegments(between: _webLineSegmentsBuffer) + } + + // draw the inner-web + context.setLineWidth(chart.innerWebLineWidth) + context.setStrokeColor(chart.innerWebColor.cgColor) + context.setAlpha(chart.webAlpha) + + let labelCount = chart.yAxis.entryCount + + for j in 0 ..< labelCount + { + for i in 0 ..< data.entryCount + { + let r = CGFloat(chart.yAxis.entries[j] - chart.chartYMin) * factor + + let p1 = center.moving(distance: r, atAngle: sliceangle * CGFloat(i) + rotationangle) + let p2 = center.moving(distance: r, atAngle: sliceangle * CGFloat(i + 1) + rotationangle) + + _webLineSegmentsBuffer[0].x = p1.x + _webLineSegmentsBuffer[0].y = p1.y + _webLineSegmentsBuffer[1].x = p2.x + _webLineSegmentsBuffer[1].y = p2.y + + context.strokeLineSegments(between: _webLineSegmentsBuffer) + } + } + + context.restoreGState() + } + + private var _highlightPointBuffer = CGPoint() + + open override func drawHighlighted(context: CGContext, indices: [Highlight]) + { + guard + let chart = chart, + let radarData = chart.data as? RadarChartData + else { return } + + context.saveGState() + + let sliceangle = chart.sliceAngle + + // calculate the factor that is needed for transforming the value pixels + let factor = chart.factor + + let center = chart.centerOffsets + + for high in indices + { + guard + let set = chart.data?.getDataSetByIndex(high.dataSetIndex) as? IRadarChartDataSet, + set.isHighlightEnabled + else { continue } + + guard let e = set.entryForIndex(Int(high.x)) as? RadarChartDataEntry + else { continue } + + if !isInBoundsX(entry: e, dataSet: set) + { + continue + } + + context.setLineWidth(radarData.highlightLineWidth) + if radarData.highlightLineDashLengths != nil + { + context.setLineDash(phase: radarData.highlightLineDashPhase, lengths: radarData.highlightLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.setStrokeColor(set.highlightColor.cgColor) + + let y = e.y - chart.chartYMin + + _highlightPointBuffer = center.moving(distance: CGFloat(y) * factor * CGFloat(animator.phaseY), + atAngle: sliceangle * CGFloat(high.x) * CGFloat(animator.phaseX) + chart.rotationAngle) + + high.setDraw(pt: _highlightPointBuffer) + + // draw the lines + drawHighlightLines(context: context, point: _highlightPointBuffer, set: set) + + if set.isDrawHighlightCircleEnabled + { + if !_highlightPointBuffer.x.isNaN && !_highlightPointBuffer.y.isNaN + { + var strokeColor = set.highlightCircleStrokeColor + if strokeColor == nil + { + strokeColor = set.color(atIndex: 0) + } + if set.highlightCircleStrokeAlpha < 1.0 + { + strokeColor = strokeColor?.withAlphaComponent(set.highlightCircleStrokeAlpha) + } + + drawHighlightCircle( + context: context, + atPoint: _highlightPointBuffer, + innerRadius: set.highlightCircleInnerRadius, + outerRadius: set.highlightCircleOuterRadius, + fillColor: set.highlightCircleFillColor, + strokeColor: strokeColor, + strokeWidth: set.highlightCircleStrokeWidth) + } + } + } + + context.restoreGState() + } + + internal func drawHighlightCircle( + context: CGContext, + atPoint point: CGPoint, + innerRadius: CGFloat, + outerRadius: CGFloat, + fillColor: NSUIColor?, + strokeColor: NSUIColor?, + strokeWidth: CGFloat) + { + context.saveGState() + + if let fillColor = fillColor + { + context.beginPath() + context.addEllipse(in: CGRect(x: point.x - outerRadius, y: point.y - outerRadius, width: outerRadius * 2.0, height: outerRadius * 2.0)) + if innerRadius > 0.0 + { + context.addEllipse(in: CGRect(x: point.x - innerRadius, y: point.y - innerRadius, width: innerRadius * 2.0, height: innerRadius * 2.0)) + } + + context.setFillColor(fillColor.cgColor) + context.fillPath(using: .evenOdd) + } + + if let strokeColor = strokeColor + { + context.beginPath() + context.addEllipse(in: CGRect(x: point.x - outerRadius, y: point.y - outerRadius, width: outerRadius * 2.0, height: outerRadius * 2.0)) + context.setStrokeColor(strokeColor.cgColor) + context.setLineWidth(strokeWidth) + context.strokePath() + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Renderer.swift b/Pods/Charts/Source/Charts/Renderers/Renderer.swift new file mode 100644 index 0000000..5c929f2 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Renderer.swift @@ -0,0 +1,26 @@ +// +// Renderer.swift +// Charts +// +// 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 + +@objc(ChartRenderer) +open class Renderer: NSObject +{ + /// the component that handles the drawing area of the chart and it's offsets + @objc open let viewPortHandler: ViewPortHandler + + @objc public init(viewPortHandler: ViewPortHandler) + { + self.viewPortHandler = viewPortHandler + super.init() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift new file mode 100644 index 0000000..2d035bf --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift @@ -0,0 +1,36 @@ +// +// ChevronDownShapeRenderer.swift +// Charts +// +// 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 + +open class ChevronDownShapeRenderer : NSObject, IShapeRenderer +{ + open func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) + { + let shapeSize = dataSet.scatterShapeSize + let shapeHalf = shapeSize / 2.0 + + context.setLineWidth(1.0) + context.setStrokeColor(color.cgColor) + + context.beginPath() + context.move(to: CGPoint(x: point.x, y: point.y + 2 * shapeHalf)) + context.addLine(to: CGPoint(x: point.x + 2 * shapeHalf, y: point.y)) + context.move(to: CGPoint(x: point.x, y: point.y + 2 * shapeHalf)) + context.addLine(to: CGPoint(x: point.x - 2 * shapeHalf, y: point.y)) + context.strokePath() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift new file mode 100644 index 0000000..725533e --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift @@ -0,0 +1,36 @@ +// +// ChevronUpShapeRenderer.swift +// Charts +// +// 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 + +open class ChevronUpShapeRenderer : NSObject, IShapeRenderer +{ + open func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) + { + let shapeSize = dataSet.scatterShapeSize + let shapeHalf = shapeSize / 2.0 + + context.setLineWidth(1.0) + context.setStrokeColor(color.cgColor) + + context.beginPath() + context.move(to: CGPoint(x: point.x, y: point.y - 2 * shapeHalf)) + context.addLine(to: CGPoint(x: point.x + 2 * shapeHalf, y: point.y)) + context.move(to: CGPoint(x: point.x, y: point.y - 2 * shapeHalf)) + context.addLine(to: CGPoint(x: point.x - 2 * shapeHalf, y: point.y)) + context.strokePath() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift new file mode 100644 index 0000000..b94a511 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift @@ -0,0 +1,63 @@ +// +// CircleShapeRenderer.swift +// Charts +// +// 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 + +open class CircleShapeRenderer : NSObject, IShapeRenderer +{ + open func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) + { + let shapeSize = dataSet.scatterShapeSize + let shapeHalf = shapeSize / 2.0 + let shapeHoleSizeHalf = dataSet.scatterShapeHoleRadius + let shapeHoleSize = shapeHoleSizeHalf * 2.0 + let shapeHoleColor = dataSet.scatterShapeHoleColor + let shapeStrokeSize = (shapeSize - shapeHoleSize) / 2.0 + let shapeStrokeSizeHalf = shapeStrokeSize / 2.0 + + if shapeHoleSize > 0.0 + { + context.setStrokeColor(color.cgColor) + context.setLineWidth(shapeStrokeSize) + var rect = CGRect() + rect.origin.x = point.x - shapeHoleSizeHalf - shapeStrokeSizeHalf + rect.origin.y = point.y - shapeHoleSizeHalf - shapeStrokeSizeHalf + rect.size.width = shapeHoleSize + shapeStrokeSize + rect.size.height = shapeHoleSize + shapeStrokeSize + context.strokeEllipse(in: rect) + + if let shapeHoleColor = shapeHoleColor + { + context.setFillColor(shapeHoleColor.cgColor) + rect.origin.x = point.x - shapeHoleSizeHalf + rect.origin.y = point.y - shapeHoleSizeHalf + rect.size.width = shapeHoleSize + rect.size.height = shapeHoleSize + context.fillEllipse(in: rect) + } + } + else + { + context.setFillColor(color.cgColor) + var rect = CGRect() + rect.origin.x = point.x - shapeHalf + rect.origin.y = point.y - shapeHalf + rect.size.width = shapeSize + rect.size.height = shapeSize + context.fillEllipse(in: rect) + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift new file mode 100644 index 0000000..18785d3 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift @@ -0,0 +1,36 @@ +// +// CrossShapeRenderer.swift +// Charts +// +// 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 + +open class CrossShapeRenderer : NSObject, IShapeRenderer +{ + open func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) + { + let shapeSize = dataSet.scatterShapeSize + let shapeHalf = shapeSize / 2.0 + + context.setLineWidth(1.0) + context.setStrokeColor(color.cgColor) + + context.beginPath() + context.move(to: CGPoint(x: point.x - shapeHalf, y: point.y)) + context.addLine(to: CGPoint(x: point.x + shapeHalf, y: point.y)) + context.move(to: CGPoint(x: point.x, y: point.y - shapeHalf)) + context.addLine(to: CGPoint(x: point.x, y: point.y + shapeHalf)) + context.strokePath() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/IShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/IShapeRenderer.swift new file mode 100644 index 0000000..bb12d98 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/IShapeRenderer.swift @@ -0,0 +1,31 @@ +// +// IShapeRenderer.swift +// Charts +// +// 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 + +@objc +public protocol IShapeRenderer: class +{ + /// Renders the provided ScatterDataSet with a shape. + /// + /// - parameter context: CGContext for drawing on + /// - parameter dataSet: The DataSet to be drawn + /// - parameter viewPortHandler: Contains information about the current state of the view + /// - parameter point: Position to draw the shape at + /// - parameter color: Color to draw the shape + func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift new file mode 100644 index 0000000..ea692e3 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift @@ -0,0 +1,63 @@ +// +// SquareShapeRenderer.swift +// Charts +// +// 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 + +open class SquareShapeRenderer : NSObject, IShapeRenderer +{ + open func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) + { + let shapeSize = dataSet.scatterShapeSize + let shapeHalf = shapeSize / 2.0 + let shapeHoleSizeHalf = dataSet.scatterShapeHoleRadius + let shapeHoleSize = shapeHoleSizeHalf * 2.0 + let shapeHoleColor = dataSet.scatterShapeHoleColor + let shapeStrokeSize = (shapeSize - shapeHoleSize) / 2.0 + let shapeStrokeSizeHalf = shapeStrokeSize / 2.0 + + if shapeHoleSize > 0.0 + { + context.setStrokeColor(color.cgColor) + context.setLineWidth(shapeStrokeSize) + var rect = CGRect() + rect.origin.x = point.x - shapeHoleSizeHalf - shapeStrokeSizeHalf + rect.origin.y = point.y - shapeHoleSizeHalf - shapeStrokeSizeHalf + rect.size.width = shapeHoleSize + shapeStrokeSize + rect.size.height = shapeHoleSize + shapeStrokeSize + context.stroke(rect) + + if let shapeHoleColor = shapeHoleColor + { + context.setFillColor(shapeHoleColor.cgColor) + rect.origin.x = point.x - shapeHoleSizeHalf + rect.origin.y = point.y - shapeHoleSizeHalf + rect.size.width = shapeHoleSize + rect.size.height = shapeHoleSize + context.fill(rect) + } + } + else + { + context.setFillColor(color.cgColor) + var rect = CGRect() + rect.origin.x = point.x - shapeHalf + rect.origin.y = point.y - shapeHalf + rect.size.width = shapeSize + rect.size.height = shapeSize + context.fill(rect) + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift new file mode 100644 index 0000000..fa313b7 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift @@ -0,0 +1,66 @@ +// +// TriangleShapeRenderer.swift +// Charts +// +// 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 + +open class TriangleShapeRenderer : NSObject, IShapeRenderer +{ + open func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) + { + let shapeSize = dataSet.scatterShapeSize + let shapeHalf = shapeSize / 2.0 + let shapeHoleSizeHalf = dataSet.scatterShapeHoleRadius + let shapeHoleSize = shapeHoleSizeHalf * 2.0 + let shapeHoleColor = dataSet.scatterShapeHoleColor + let shapeStrokeSize = (shapeSize - shapeHoleSize) / 2.0 + + context.setFillColor(color.cgColor) + + // create a triangle path + context.beginPath() + context.move(to: CGPoint(x: point.x, y: point.y - shapeHalf)) + context.addLine(to: CGPoint(x: point.x + shapeHalf, y: point.y + shapeHalf)) + context.addLine(to: CGPoint(x: point.x - shapeHalf, y: point.y + shapeHalf)) + + if shapeHoleSize > 0.0 + { + context.addLine(to: CGPoint(x: point.x, y: point.y - shapeHalf)) + + context.move(to: CGPoint(x: point.x - shapeHalf + shapeStrokeSize, y: point.y + shapeHalf - shapeStrokeSize)) + context.addLine(to: CGPoint(x: point.x + shapeHalf - shapeStrokeSize, y: point.y + shapeHalf - shapeStrokeSize)) + context.addLine(to: CGPoint(x: point.x, y: point.y - shapeHalf + shapeStrokeSize)) + context.addLine(to: CGPoint(x: point.x - shapeHalf + shapeStrokeSize, y: point.y + shapeHalf - shapeStrokeSize)) + } + + context.closePath() + + context.fillPath() + + if shapeHoleSize > 0.0 && shapeHoleColor != nil + { + context.setFillColor(shapeHoleColor!.cgColor) + + // create a triangle path + context.beginPath() + context.move(to: CGPoint(x: point.x, y: point.y - shapeHalf + shapeStrokeSize)) + context.addLine(to: CGPoint(x: point.x + shapeHalf - shapeStrokeSize, y: point.y + shapeHalf - shapeStrokeSize)) + context.addLine(to: CGPoint(x: point.x - shapeHalf + shapeStrokeSize, y: point.y + shapeHalf - shapeStrokeSize)) + context.closePath() + + context.fillPath() + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/Scatter/XShapeRenderer.swift b/Pods/Charts/Source/Charts/Renderers/Scatter/XShapeRenderer.swift new file mode 100644 index 0000000..8a546c5 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/Scatter/XShapeRenderer.swift @@ -0,0 +1,36 @@ +// +// XShapeRenderer.swift +// Charts +// +// 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 + +open class XShapeRenderer : NSObject, IShapeRenderer +{ + open func renderShape( + context: CGContext, + dataSet: IScatterChartDataSet, + viewPortHandler: ViewPortHandler, + point: CGPoint, + color: NSUIColor) + { + let shapeSize = dataSet.scatterShapeSize + let shapeHalf = shapeSize / 2.0 + + context.setLineWidth(1.0) + context.setStrokeColor(color.cgColor) + + context.beginPath() + context.move(to: CGPoint(x: point.x - shapeHalf, y: point.y - shapeHalf)) + context.addLine(to: CGPoint(x: point.x + shapeHalf, y: point.y + shapeHalf)) + context.move(to: CGPoint(x: point.x + shapeHalf, y: point.y - shapeHalf)) + context.addLine(to: CGPoint(x: point.x - shapeHalf, y: point.y + shapeHalf)) + context.strokePath() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/ScatterChartRenderer.swift b/Pods/Charts/Source/Charts/Renderers/ScatterChartRenderer.swift new file mode 100644 index 0000000..010ca16 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/ScatterChartRenderer.swift @@ -0,0 +1,243 @@ +// +// ScatterChartRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + + +open class ScatterChartRenderer: LineScatterCandleRadarRenderer +{ + @objc open weak var dataProvider: ScatterChartDataProvider? + + @objc public init(dataProvider: ScatterChartDataProvider, animator: Animator, viewPortHandler: ViewPortHandler) + { + super.init(animator: animator, viewPortHandler: viewPortHandler) + + self.dataProvider = dataProvider + } + + open override func drawData(context: CGContext) + { + guard let scatterData = dataProvider?.scatterData else { return } + + for i in 0 ..< scatterData.dataSetCount + { + guard let set = scatterData.getDataSetByIndex(i) else { continue } + + if set.isVisible + { + if !(set is IScatterChartDataSet) + { + fatalError("Datasets for ScatterChartRenderer must conform to IScatterChartDataSet") + } + + drawDataSet(context: context, dataSet: set as! IScatterChartDataSet) + } + } + } + + private var _lineSegments = [CGPoint](repeating: CGPoint(), count: 2) + + @objc open func drawDataSet(context: CGContext, dataSet: IScatterChartDataSet) + { + guard let dataProvider = dataProvider else { return } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + + let phaseY = animator.phaseY + + let entryCount = dataSet.entryCount + + var point = CGPoint() + + let valueToPixelMatrix = trans.valueToPixelMatrix + + if let renderer = dataSet.shapeRenderer + { + context.saveGState() + + for j in 0 ..< Int(min(ceil(Double(entryCount) * animator.phaseX), Double(entryCount))) + { + guard let e = dataSet.entryForIndex(j) else { continue } + + point.x = CGFloat(e.x) + point.y = CGFloat(e.y * phaseY) + point = point.applying(valueToPixelMatrix) + + if !viewPortHandler.isInBoundsRight(point.x) + { + break + } + + if !viewPortHandler.isInBoundsLeft(point.x) || + !viewPortHandler.isInBoundsY(point.y) + { + continue + } + + renderer.renderShape(context: context, dataSet: dataSet, viewPortHandler: viewPortHandler, point: point, color: dataSet.color(atIndex: j)) + } + + context.restoreGState() + } + else + { + print("There's no IShapeRenderer specified for ScatterDataSet", terminator: "\n") + } + } + + open override func drawValues(context: CGContext) + { + guard + let dataProvider = dataProvider, + let scatterData = dataProvider.scatterData + else { return } + + // if values are drawn + if isDrawingValuesAllowed(dataProvider: dataProvider) + { + guard let dataSets = scatterData.dataSets as? [IScatterChartDataSet] else { return } + + let phaseY = animator.phaseY + + var pt = CGPoint() + + for i in 0 ..< scatterData.dataSetCount + { + let dataSet = dataSets[i] + + if !shouldDrawValues(forDataSet: dataSet) + { + continue + } + + let valueFont = dataSet.valueFont + + guard let formatter = dataSet.valueFormatter else { continue } + + let trans = dataProvider.getTransformer(forAxis: dataSet.axisDependency) + let valueToPixelMatrix = trans.valueToPixelMatrix + + let iconsOffset = dataSet.iconsOffset + + let shapeSize = dataSet.scatterShapeSize + let lineHeight = valueFont.lineHeight + + _xBounds.set(chart: dataProvider, dataSet: dataSet, animator: animator) + + for j in stride(from: _xBounds.min, through: _xBounds.range + _xBounds.min, by: 1) + { + guard let e = dataSet.entryForIndex(j) else { break } + + pt.x = CGFloat(e.x) + pt.y = CGFloat(e.y * phaseY) + pt = pt.applying(valueToPixelMatrix) + + if (!viewPortHandler.isInBoundsRight(pt.x)) + { + break + } + + // make sure the lines don't do shitty things outside bounds + if (!viewPortHandler.isInBoundsLeft(pt.x) + || !viewPortHandler.isInBoundsY(pt.y)) + { + continue + } + + let text = formatter.stringForValue( + e.y, + entry: e, + dataSetIndex: i, + viewPortHandler: viewPortHandler) + + if dataSet.isDrawValuesEnabled + { + ChartUtils.drawText( + context: context, + text: text, + point: CGPoint( + x: pt.x, + y: pt.y - shapeSize - lineHeight), + align: .center, + attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: dataSet.valueTextColorAt(j)] + ) + } + + if let icon = e.icon, dataSet.isDrawIconsEnabled + { + ChartUtils.drawImage(context: context, + image: icon, + x: pt.x + iconsOffset.x, + y: pt.y + iconsOffset.y, + size: icon.size) + } + } + } + } + } + + open override func drawExtras(context: CGContext) + { + + } + + open override func drawHighlighted(context: CGContext, indices: [Highlight]) + { + guard + let dataProvider = dataProvider, + let scatterData = dataProvider.scatterData + else { return } + + context.saveGState() + + for high in indices + { + guard + let set = scatterData.getDataSetByIndex(high.dataSetIndex) as? IScatterChartDataSet, + set.isHighlightEnabled + else { continue } + + guard let entry = set.entryForXValue(high.x, closestToY: high.y) else { continue } + + if !isInBoundsX(entry: entry, dataSet: set) { continue } + + context.setStrokeColor(set.highlightColor.cgColor) + context.setLineWidth(set.highlightLineWidth) + if set.highlightLineDashLengths != nil + { + context.setLineDash(phase: set.highlightLineDashPhase, lengths: set.highlightLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + let x = entry.x // get the x-position + let y = entry.y * Double(animator.phaseY) + + let trans = dataProvider.getTransformer(forAxis: set.axisDependency) + + let pt = trans.pixelForValues(x: x, y: y) + + high.setDraw(pt: pt) + + // draw the lines + drawHighlightLines(context: context, point: pt, set: set) + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/XAxisRenderer.swift b/Pods/Charts/Source/Charts/Renderers/XAxisRenderer.swift new file mode 100644 index 0000000..534e606 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/XAxisRenderer.swift @@ -0,0 +1,461 @@ +// +// XAxisRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartXAxisRenderer) +open class XAxisRenderer: AxisRendererBase +{ + @objc public init(viewPortHandler: ViewPortHandler, xAxis: XAxis?, transformer: Transformer?) + { + super.init(viewPortHandler: viewPortHandler, transformer: transformer, axis: xAxis) + } + + open override func computeAxis(min: Double, max: Double, inverted: Bool) + { + var min = min, max = max + + if let transformer = self.transformer + { + // calculate the starting and entry point of the y-labels (depending on + // zoom / contentrect bounds) + if viewPortHandler.contentWidth > 10 && !viewPortHandler.isFullyZoomedOutX + { + let p1 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) + let p2 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentTop)) + + if inverted + { + min = Double(p2.x) + max = Double(p1.x) + } + else + { + min = Double(p1.x) + max = Double(p2.x) + } + } + } + + computeAxisValues(min: min, max: max) + } + + open override func computeAxisValues(min: Double, max: Double) + { + super.computeAxisValues(min: min, max: max) + + computeSize() + } + + @objc open func computeSize() + { + guard let + xAxis = self.axis as? XAxis + else { return } + + let longest = xAxis.getLongestLabel() + + let labelSize = longest.size(withAttributes: [NSAttributedStringKey.font: xAxis.labelFont]) + + let labelWidth = labelSize.width + let labelHeight = labelSize.height + + let labelRotatedSize = labelSize.rotatedBy(degrees: xAxis.labelRotationAngle) + + xAxis.labelWidth = labelWidth + xAxis.labelHeight = labelHeight + xAxis.labelRotatedWidth = labelRotatedSize.width + xAxis.labelRotatedHeight = labelRotatedSize.height + } + + open override func renderAxisLabels(context: CGContext) + { + guard let xAxis = self.axis as? XAxis else { return } + + if !xAxis.isEnabled || !xAxis.isDrawLabelsEnabled + { + return + } + + let yOffset = xAxis.yOffset + + if xAxis.labelPosition == .top + { + drawLabels(context: context, pos: viewPortHandler.contentTop - yOffset, anchor: CGPoint(x: 0.5, y: 1.0)) + } + else if xAxis.labelPosition == .topInside + { + drawLabels(context: context, pos: viewPortHandler.contentTop + yOffset + xAxis.labelRotatedHeight, anchor: CGPoint(x: 0.5, y: 1.0)) + } + else if xAxis.labelPosition == .bottom + { + drawLabels(context: context, pos: viewPortHandler.contentBottom + yOffset, anchor: CGPoint(x: 0.5, y: 0.0)) + } + else if xAxis.labelPosition == .bottomInside + { + drawLabels(context: context, pos: viewPortHandler.contentBottom - yOffset - xAxis.labelRotatedHeight, anchor: CGPoint(x: 0.5, y: 0.0)) + } + else + { // BOTH SIDED + drawLabels(context: context, pos: viewPortHandler.contentTop - yOffset, anchor: CGPoint(x: 0.5, y: 1.0)) + drawLabels(context: context, pos: viewPortHandler.contentBottom + yOffset, anchor: CGPoint(x: 0.5, y: 0.0)) + } + } + + private var _axisLineSegmentsBuffer = [CGPoint](repeating: CGPoint(), count: 2) + + open override func renderAxisLine(context: CGContext) + { + guard let xAxis = self.axis as? XAxis else { return } + + if !xAxis.isEnabled || !xAxis.isDrawAxisLineEnabled + { + return + } + + context.saveGState() + + context.setStrokeColor(xAxis.axisLineColor.cgColor) + context.setLineWidth(xAxis.axisLineWidth) + if xAxis.axisLineDashLengths != nil + { + context.setLineDash(phase: xAxis.axisLineDashPhase, lengths: xAxis.axisLineDashLengths) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + if xAxis.labelPosition == .top + || xAxis.labelPosition == .topInside + || xAxis.labelPosition == .bothSided + { + _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft + _axisLineSegmentsBuffer[0].y = viewPortHandler.contentTop + _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight + _axisLineSegmentsBuffer[1].y = viewPortHandler.contentTop + context.strokeLineSegments(between: _axisLineSegmentsBuffer) + } + + if xAxis.labelPosition == .bottom + || xAxis.labelPosition == .bottomInside + || xAxis.labelPosition == .bothSided + { + _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft + _axisLineSegmentsBuffer[0].y = viewPortHandler.contentBottom + _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight + _axisLineSegmentsBuffer[1].y = viewPortHandler.contentBottom + context.strokeLineSegments(between: _axisLineSegmentsBuffer) + } + + context.restoreGState() + } + + /// draws the x-labels on the specified y-position + @objc open func drawLabels(context: CGContext, pos: CGFloat, anchor: CGPoint) + { + guard + let xAxis = self.axis as? XAxis, + let transformer = self.transformer + else { return } + + #if os(OSX) + let paraStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle + #else + let paraStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle + #endif + paraStyle.alignment = .center + + let labelAttrs: [NSAttributedStringKey : Any] = [NSAttributedStringKey.font: xAxis.labelFont, + NSAttributedStringKey.foregroundColor: xAxis.labelTextColor, + NSAttributedStringKey.paragraphStyle: paraStyle] + let labelRotationAngleRadians = xAxis.labelRotationAngle.DEG2RAD + + let centeringEnabled = xAxis.isCenterAxisLabelsEnabled + + let valueToPixelMatrix = transformer.valueToPixelMatrix + + var position = CGPoint(x: 0.0, y: 0.0) + + var labelMaxSize = CGSize() + + if xAxis.isWordWrapEnabled + { + labelMaxSize.width = xAxis.wordWrapWidthPercent * valueToPixelMatrix.a + } + + let entries = xAxis.entries + + for i in stride(from: 0, to: entries.count, by: 1) + { + if centeringEnabled + { + position.x = CGFloat(xAxis.centeredEntries[i]) + } + else + { + position.x = CGFloat(entries[i]) + } + + position.y = 0.0 + position = position.applying(valueToPixelMatrix) + + if viewPortHandler.isInBoundsX(position.x) + { + let label = xAxis.valueFormatter?.stringForValue(xAxis.entries[i], axis: xAxis) ?? "" + + let labelns = label as NSString + + if xAxis.isAvoidFirstLastClippingEnabled + { + // avoid clipping of the last + if i == xAxis.entryCount - 1 && xAxis.entryCount > 1 + { + let width = labelns.boundingRect(with: labelMaxSize, options: .usesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width + + if width > viewPortHandler.offsetRight * 2.0 + && position.x + width > viewPortHandler.chartWidth + { + position.x -= width / 2.0 + } + } + else if i == 0 + { // avoid clipping of the first + let width = labelns.boundingRect(with: labelMaxSize, options: .usesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width + position.x += width / 2.0 + } + } + + drawLabel(context: context, + formattedLabel: label, + x: position.x, + y: pos, + attributes: labelAttrs, + constrainedToSize: labelMaxSize, + anchor: anchor, + angleRadians: labelRotationAngleRadians) + } + } + } + + @objc open func drawLabel( + context: CGContext, + formattedLabel: String, + x: CGFloat, + y: CGFloat, + attributes: [NSAttributedStringKey : Any], + constrainedToSize: CGSize, + anchor: CGPoint, + angleRadians: CGFloat) + { + ChartUtils.drawMultilineText( + context: context, + text: formattedLabel, + point: CGPoint(x: x, y: y), + attributes: attributes, + constrainedToSize: constrainedToSize, + anchor: anchor, + angleRadians: angleRadians) + } + + open override func renderGridLines(context: CGContext) + { + guard + let xAxis = self.axis as? XAxis, + let transformer = self.transformer + else { return } + + if !xAxis.isDrawGridLinesEnabled || !xAxis.isEnabled + { + return + } + + context.saveGState() + defer { context.restoreGState() } + context.clip(to: self.gridClippingRect) + + context.setShouldAntialias(xAxis.gridAntialiasEnabled) + context.setStrokeColor(xAxis.gridColor.cgColor) + context.setLineWidth(xAxis.gridLineWidth) + context.setLineCap(xAxis.gridLineCap) + + if xAxis.gridLineDashLengths != nil + { + context.setLineDash(phase: xAxis.gridLineDashPhase, lengths: xAxis.gridLineDashLengths) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + let valueToPixelMatrix = transformer.valueToPixelMatrix + + var position = CGPoint(x: 0.0, y: 0.0) + + let entries = xAxis.entries + + for i in stride(from: 0, to: entries.count, by: 1) + { + position.x = CGFloat(entries[i]) + position.y = position.x + position = position.applying(valueToPixelMatrix) + + drawGridLine(context: context, x: position.x, y: position.y) + } + } + + @objc open var gridClippingRect: CGRect + { + var contentRect = viewPortHandler.contentRect + let dx = self.axis?.gridLineWidth ?? 0.0 + contentRect.origin.x -= dx / 2.0 + contentRect.size.width += dx + return contentRect + } + + @objc open func drawGridLine(context: CGContext, x: CGFloat, y: CGFloat) + { + if x >= viewPortHandler.offsetLeft + && x <= viewPortHandler.chartWidth + { + context.beginPath() + context.move(to: CGPoint(x: x, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: x, y: viewPortHandler.contentBottom)) + context.strokePath() + } + } + + open override func renderLimitLines(context: CGContext) + { + guard + let xAxis = self.axis as? XAxis, + let transformer = self.transformer + else { return } + + var limitLines = xAxis.limitLines + + if limitLines.count == 0 + { + return + } + + let trans = transformer.valueToPixelMatrix + + var position = CGPoint(x: 0.0, y: 0.0) + + for i in 0 ..< limitLines.count + { + let l = limitLines[i] + + if !l.isEnabled + { + continue + } + + context.saveGState() + defer { context.restoreGState() } + + var clippingRect = viewPortHandler.contentRect + clippingRect.origin.x -= l.lineWidth / 2.0 + clippingRect.size.width += l.lineWidth + context.clip(to: clippingRect) + + position.x = CGFloat(l.limit) + position.y = 0.0 + position = position.applying(trans) + + renderLimitLineLine(context: context, limitLine: l, position: position) + renderLimitLineLabel(context: context, limitLine: l, position: position, yOffset: 2.0 + l.yOffset) + } + } + + @objc open func renderLimitLineLine(context: CGContext, limitLine: ChartLimitLine, position: CGPoint) + { + + context.beginPath() + context.move(to: CGPoint(x: position.x, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: position.x, y: viewPortHandler.contentBottom)) + + context.setStrokeColor(limitLine.lineColor.cgColor) + context.setLineWidth(limitLine.lineWidth) + if limitLine.lineDashLengths != nil + { + context.setLineDash(phase: limitLine.lineDashPhase, lengths: limitLine.lineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.strokePath() + } + + @objc open func renderLimitLineLabel(context: CGContext, limitLine: ChartLimitLine, position: CGPoint, yOffset: CGFloat) + { + + let label = limitLine.label + + // if drawing the limit-value label is enabled + if limitLine.drawLabelEnabled && label.count > 0 + { + let labelLineHeight = limitLine.valueFont.lineHeight + + let xOffset: CGFloat = limitLine.lineWidth + limitLine.xOffset + + if limitLine.labelPosition == .rightTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x + xOffset, + y: viewPortHandler.contentTop + yOffset), + align: .left, + attributes: [NSAttributedStringKey.font: limitLine.valueFont, NSAttributedStringKey.foregroundColor: limitLine.valueTextColor]) + } + else if limitLine.labelPosition == .rightBottom + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x + xOffset, + y: viewPortHandler.contentBottom - labelLineHeight - yOffset), + align: .left, + attributes: [NSAttributedStringKey.font: limitLine.valueFont, NSAttributedStringKey.foregroundColor: limitLine.valueTextColor]) + } + else if limitLine.labelPosition == .leftTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x - xOffset, + y: viewPortHandler.contentTop + yOffset), + align: .right, + attributes: [NSAttributedStringKey.font: limitLine.valueFont, NSAttributedStringKey.foregroundColor: limitLine.valueTextColor]) + } + else + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x - xOffset, + y: viewPortHandler.contentBottom - labelLineHeight - yOffset), + align: .right, + attributes: [NSAttributedStringKey.font: limitLine.valueFont, NSAttributedStringKey.foregroundColor: limitLine.valueTextColor]) + } + } + } + +} diff --git a/Pods/Charts/Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift b/Pods/Charts/Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift new file mode 100644 index 0000000..fef05d7 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift @@ -0,0 +1,360 @@ +// +// XAxisRendererHorizontalBarChart.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +open class XAxisRendererHorizontalBarChart: XAxisRenderer +{ + internal weak var chart: BarChartView? + + @objc public init(viewPortHandler: ViewPortHandler, xAxis: XAxis?, transformer: Transformer?, chart: BarChartView) + { + super.init(viewPortHandler: viewPortHandler, xAxis: xAxis, transformer: transformer) + + self.chart = chart + } + + open override func computeAxis(min: Double, max: Double, inverted: Bool) + { + var min = min, max = max + + if let transformer = self.transformer + { + // calculate the starting and entry point of the y-labels (depending on + // zoom / contentrect bounds) + if viewPortHandler.contentWidth > 10 && !viewPortHandler.isFullyZoomedOutY + { + let p1 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentBottom)) + let p2 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) + + if inverted + { + min = Double(p2.y) + max = Double(p1.y) + } + else + { + min = Double(p1.y) + max = Double(p2.y) + } + } + } + + computeAxisValues(min: min, max: max) + } + + open override func computeSize() + { + guard let + xAxis = self.axis as? XAxis + else { return } + + let longest = xAxis.getLongestLabel() as NSString + + let labelSize = longest.size(withAttributes: [NSAttributedStringKey.font: xAxis.labelFont]) + + let labelWidth = floor(labelSize.width + xAxis.xOffset * 3.5) + let labelHeight = labelSize.height + let labelRotatedSize = CGSize(width: labelSize.width, height: labelHeight).rotatedBy(degrees: xAxis.labelRotationAngle) + + xAxis.labelWidth = labelWidth + xAxis.labelHeight = labelHeight + xAxis.labelRotatedWidth = round(labelRotatedSize.width + xAxis.xOffset * 3.5) + xAxis.labelRotatedHeight = round(labelRotatedSize.height) + } + + open override func renderAxisLabels(context: CGContext) + { + guard + let xAxis = self.axis as? XAxis + else { return } + + if !xAxis.isEnabled || !xAxis.isDrawLabelsEnabled || chart?.data === nil + { + return + } + + let xoffset = xAxis.xOffset + + if xAxis.labelPosition == .top + { + drawLabels(context: context, pos: viewPortHandler.contentRight + xoffset, anchor: CGPoint(x: 0.0, y: 0.5)) + } + else if xAxis.labelPosition == .topInside + { + drawLabels(context: context, pos: viewPortHandler.contentRight - xoffset, anchor: CGPoint(x: 1.0, y: 0.5)) + } + else if xAxis.labelPosition == .bottom + { + drawLabels(context: context, pos: viewPortHandler.contentLeft - xoffset, anchor: CGPoint(x: 1.0, y: 0.5)) + } + else if xAxis.labelPosition == .bottomInside + { + drawLabels(context: context, pos: viewPortHandler.contentLeft + xoffset, anchor: CGPoint(x: 0.0, y: 0.5)) + } + else + { // BOTH SIDED + drawLabels(context: context, pos: viewPortHandler.contentRight + xoffset, anchor: CGPoint(x: 0.0, y: 0.5)) + drawLabels(context: context, pos: viewPortHandler.contentLeft - xoffset, anchor: CGPoint(x: 1.0, y: 0.5)) + } + } + + /// draws the x-labels on the specified y-position + open override func drawLabels(context: CGContext, pos: CGFloat, anchor: CGPoint) + { + guard + let xAxis = self.axis as? XAxis, + let transformer = self.transformer + else { return } + + let labelFont = xAxis.labelFont + let labelTextColor = xAxis.labelTextColor + let labelRotationAngleRadians = xAxis.labelRotationAngle.DEG2RAD + + let centeringEnabled = xAxis.isCenterAxisLabelsEnabled + + // pre allocate to save performance (dont allocate in loop) + var position = CGPoint(x: 0.0, y: 0.0) + + for i in stride(from: 0, to: xAxis.entryCount, by: 1) + { + // only fill x values + + position.x = 0.0 + + if centeringEnabled + { + position.y = CGFloat(xAxis.centeredEntries[i]) + } + else + { + position.y = CGFloat(xAxis.entries[i]) + } + + transformer.pointValueToPixel(&position) + + if viewPortHandler.isInBoundsY(position.y) + { + if let label = xAxis.valueFormatter?.stringForValue(xAxis.entries[i], axis: xAxis) + { + drawLabel( + context: context, + formattedLabel: label, + x: pos, + y: position.y, + attributes: [NSAttributedStringKey.font: labelFont, NSAttributedStringKey.foregroundColor: labelTextColor], + anchor: anchor, + angleRadians: labelRotationAngleRadians) + } + } + } + } + + @objc open func drawLabel( + context: CGContext, + formattedLabel: String, + x: CGFloat, + y: CGFloat, + attributes: [NSAttributedStringKey : Any], + anchor: CGPoint, + angleRadians: CGFloat) + { + ChartUtils.drawText( + context: context, + text: formattedLabel, + point: CGPoint(x: x, y: y), + attributes: attributes, + anchor: anchor, + angleRadians: angleRadians) + } + + open override var gridClippingRect: CGRect + { + var contentRect = viewPortHandler.contentRect + let dy = self.axis?.gridLineWidth ?? 0.0 + contentRect.origin.y -= dy / 2.0 + contentRect.size.height += dy + return contentRect + } + + private var _gridLineSegmentsBuffer = [CGPoint](repeating: CGPoint(), count: 2) + + open override func drawGridLine(context: CGContext, x: CGFloat, y: CGFloat) + { + if viewPortHandler.isInBoundsY(y) + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: y)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: y)) + context.strokePath() + } + } + + open override func renderAxisLine(context: CGContext) + { + guard let xAxis = self.axis as? XAxis else { return } + + if !xAxis.isEnabled || !xAxis.isDrawAxisLineEnabled + { + return + } + + context.saveGState() + + context.setStrokeColor(xAxis.axisLineColor.cgColor) + context.setLineWidth(xAxis.axisLineWidth) + if xAxis.axisLineDashLengths != nil + { + context.setLineDash(phase: xAxis.axisLineDashPhase, lengths: xAxis.axisLineDashLengths) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + if xAxis.labelPosition == .top || + xAxis.labelPosition == .topInside || + xAxis.labelPosition == .bothSided + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentBottom)) + context.strokePath() + } + + if xAxis.labelPosition == .bottom || + xAxis.labelPosition == .bottomInside || + xAxis.labelPosition == .bothSided + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentBottom)) + context.strokePath() + } + + context.restoreGState() + } + + open override func renderLimitLines(context: CGContext) + { + guard + let xAxis = self.axis as? XAxis, + let transformer = self.transformer + else { return } + + var limitLines = xAxis.limitLines + + if limitLines.count == 0 + { + return + } + + let trans = transformer.valueToPixelMatrix + + var position = CGPoint(x: 0.0, y: 0.0) + + for i in 0 ..< limitLines.count + { + let l = limitLines[i] + + if !l.isEnabled + { + continue + } + + context.saveGState() + defer { context.restoreGState() } + + var clippingRect = viewPortHandler.contentRect + clippingRect.origin.y -= l.lineWidth / 2.0 + clippingRect.size.height += l.lineWidth + context.clip(to: clippingRect) + + position.x = 0.0 + position.y = CGFloat(l.limit) + position = position.applying(trans) + + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: position.y)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: position.y)) + + context.setStrokeColor(l.lineColor.cgColor) + context.setLineWidth(l.lineWidth) + if l.lineDashLengths != nil + { + context.setLineDash(phase: l.lineDashPhase, lengths: l.lineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.strokePath() + + let label = l.label + + // if drawing the limit-value label is enabled + if l.drawLabelEnabled && label.count > 0 + { + let labelLineHeight = l.valueFont.lineHeight + + let xOffset: CGFloat = 4.0 + l.xOffset + let yOffset: CGFloat = l.lineWidth + labelLineHeight + l.yOffset + + if l.labelPosition == .rightTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentRight - xOffset, + y: position.y - yOffset), + align: .right, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else if l.labelPosition == .rightBottom + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentRight - xOffset, + y: position.y + yOffset - labelLineHeight), + align: .right, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else if l.labelPosition == .leftTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentLeft + xOffset, + y: position.y - yOffset), + align: .left, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentLeft + xOffset, + y: position.y + yOffset - labelLineHeight), + align: .left, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + } + } + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/XAxisRendererRadarChart.swift b/Pods/Charts/Source/Charts/Renderers/XAxisRendererRadarChart.swift new file mode 100644 index 0000000..85aeecb --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/XAxisRendererRadarChart.swift @@ -0,0 +1,95 @@ +// +// XAxisRendererRadarChart.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +open class XAxisRendererRadarChart: XAxisRenderer +{ + @objc open weak var chart: RadarChartView? + + @objc public init(viewPortHandler: ViewPortHandler, xAxis: XAxis?, chart: RadarChartView) + { + super.init(viewPortHandler: viewPortHandler, xAxis: xAxis, transformer: nil) + + self.chart = chart + } + + open override func renderAxisLabels(context: CGContext) + { + guard let + xAxis = axis as? XAxis, + let chart = chart + else { return } + + if !xAxis.isEnabled || !xAxis.isDrawLabelsEnabled + { + return + } + + let labelFont = xAxis.labelFont + let labelTextColor = xAxis.labelTextColor + let labelRotationAngleRadians = xAxis.labelRotationAngle.RAD2DEG + let drawLabelAnchor = CGPoint(x: 0.5, y: 0.25) + + let sliceangle = chart.sliceAngle + + // calculate the factor that is needed for transforming the value to pixels + let factor = chart.factor + + let center = chart.centerOffsets + + for i in stride(from: 0, to: chart.data?.maxEntryCountSet?.entryCount ?? 0, by: 1) + { + + let label = xAxis.valueFormatter?.stringForValue(Double(i), axis: xAxis) ?? "" + + let angle = (sliceangle * CGFloat(i) + chart.rotationAngle).truncatingRemainder(dividingBy: 360.0) + + let p = center.moving(distance: CGFloat(chart.yRange) * factor + xAxis.labelRotatedWidth / 2.0, atAngle: angle) + + drawLabel(context: context, + formattedLabel: label, + x: p.x, + y: p.y - xAxis.labelRotatedHeight / 2.0, + attributes: [NSAttributedStringKey.font: labelFont, NSAttributedStringKey.foregroundColor: labelTextColor], + anchor: drawLabelAnchor, + angleRadians: labelRotationAngleRadians) + } + } + + @objc open func drawLabel( + context: CGContext, + formattedLabel: String, + x: CGFloat, + y: CGFloat, + attributes: [NSAttributedStringKey : Any], + anchor: CGPoint, + angleRadians: CGFloat) + { + ChartUtils.drawText( + context: context, + text: formattedLabel, + point: CGPoint(x: x, y: y), + attributes: attributes, + anchor: anchor, + angleRadians: angleRadians) + } + + open override func renderLimitLines(context: CGContext) + { + /// XAxis LimitLines on RadarChart not yet supported. + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/YAxisRenderer.swift b/Pods/Charts/Source/Charts/Renderers/YAxisRenderer.swift new file mode 100644 index 0000000..e5b0802 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/YAxisRenderer.swift @@ -0,0 +1,392 @@ +// +// YAxisRenderer.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +@objc(ChartYAxisRenderer) +open class YAxisRenderer: AxisRendererBase +{ + @objc public init(viewPortHandler: ViewPortHandler, yAxis: YAxis?, transformer: Transformer?) + { + super.init(viewPortHandler: viewPortHandler, transformer: transformer, axis: yAxis) + } + + /// draws the y-axis labels to the screen + open override func renderAxisLabels(context: CGContext) + { + guard let yAxis = self.axis as? YAxis else { return } + + if !yAxis.isEnabled || !yAxis.isDrawLabelsEnabled + { + return + } + + let xoffset = yAxis.xOffset + let yoffset = yAxis.labelFont.lineHeight / 2.5 + yAxis.yOffset + + let dependency = yAxis.axisDependency + let labelPosition = yAxis.labelPosition + + var xPos = CGFloat(0.0) + + var textAlign: NSTextAlignment + + if dependency == .left + { + if labelPosition == .outsideChart + { + textAlign = .right + xPos = viewPortHandler.offsetLeft - xoffset + } + else + { + textAlign = .left + xPos = viewPortHandler.offsetLeft + xoffset + } + + } + else + { + if labelPosition == .outsideChart + { + textAlign = .left + xPos = viewPortHandler.contentRight + xoffset + } + else + { + textAlign = .right + xPos = viewPortHandler.contentRight - xoffset + } + } + + drawYLabels( + context: context, + fixedPosition: xPos, + positions: transformedPositions(), + offset: yoffset - yAxis.labelFont.lineHeight, + textAlign: textAlign) + } + + open override func renderAxisLine(context: CGContext) + { + guard let yAxis = self.axis as? YAxis else { return } + + if !yAxis.isEnabled || !yAxis.drawAxisLineEnabled + { + return + } + + context.saveGState() + + context.setStrokeColor(yAxis.axisLineColor.cgColor) + context.setLineWidth(yAxis.axisLineWidth) + if yAxis.axisLineDashLengths != nil + { + context.setLineDash(phase: yAxis.axisLineDashPhase, lengths: yAxis.axisLineDashLengths) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + if yAxis.axisDependency == .left + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentBottom)) + context.strokePath() + } + else + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentBottom)) + context.strokePath() + } + + context.restoreGState() + } + + /// draws the y-labels on the specified x-position + internal func drawYLabels( + context: CGContext, + fixedPosition: CGFloat, + positions: [CGPoint], + offset: CGFloat, + textAlign: NSTextAlignment) + { + guard + let yAxis = self.axis as? YAxis + else { return } + + let labelFont = yAxis.labelFont + let labelTextColor = yAxis.labelTextColor + + let from = yAxis.isDrawBottomYLabelEntryEnabled ? 0 : 1 + let to = yAxis.isDrawTopYLabelEntryEnabled ? yAxis.entryCount : (yAxis.entryCount - 1) + + for i in stride(from: from, to: to, by: 1) + { + let text = yAxis.getFormattedLabel(i) + + ChartUtils.drawText( + context: context, + text: text, + point: CGPoint(x: fixedPosition, y: positions[i].y + offset), + align: textAlign, + attributes: [NSAttributedStringKey.font: labelFont, NSAttributedStringKey.foregroundColor: labelTextColor]) + } + } + + open override func renderGridLines(context: CGContext) + { + guard let + yAxis = self.axis as? YAxis + else { return } + + if !yAxis.isEnabled + { + return + } + + if yAxis.drawGridLinesEnabled + { + let positions = transformedPositions() + + context.saveGState() + defer { context.restoreGState() } + context.clip(to: self.gridClippingRect) + + context.setShouldAntialias(yAxis.gridAntialiasEnabled) + context.setStrokeColor(yAxis.gridColor.cgColor) + context.setLineWidth(yAxis.gridLineWidth) + context.setLineCap(yAxis.gridLineCap) + + if yAxis.gridLineDashLengths != nil + { + context.setLineDash(phase: yAxis.gridLineDashPhase, lengths: yAxis.gridLineDashLengths) + + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + // draw the grid + for i in 0 ..< positions.count + { + drawGridLine(context: context, position: positions[i]) + } + } + + if yAxis.drawZeroLineEnabled + { + // draw zero line + drawZeroLine(context: context) + } + } + + @objc open var gridClippingRect: CGRect + { + var contentRect = viewPortHandler.contentRect + let dy = self.axis?.gridLineWidth ?? 0.0 + contentRect.origin.y -= dy / 2.0 + contentRect.size.height += dy + return contentRect + } + + @objc open func drawGridLine( + context: CGContext, + position: CGPoint) + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: position.y)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: position.y)) + context.strokePath() + } + + @objc open func transformedPositions() -> [CGPoint] + { + guard + let yAxis = self.axis as? YAxis, + let transformer = self.transformer + else { return [CGPoint]() } + + var positions = [CGPoint]() + positions.reserveCapacity(yAxis.entryCount) + + let entries = yAxis.entries + + for i in stride(from: 0, to: yAxis.entryCount, by: 1) + { + positions.append(CGPoint(x: 0.0, y: entries[i])) + } + + transformer.pointValuesToPixel(&positions) + + return positions + } + + /// Draws the zero line at the specified position. + @objc open func drawZeroLine(context: CGContext) + { + guard + let yAxis = self.axis as? YAxis, + let transformer = self.transformer, + let zeroLineColor = yAxis.zeroLineColor + else { return } + + context.saveGState() + defer { context.restoreGState() } + + var clippingRect = viewPortHandler.contentRect + clippingRect.origin.y -= yAxis.zeroLineWidth / 2.0 + clippingRect.size.height += yAxis.zeroLineWidth + context.clip(to: clippingRect) + + context.setStrokeColor(zeroLineColor.cgColor) + context.setLineWidth(yAxis.zeroLineWidth) + + let pos = transformer.pixelForValues(x: 0.0, y: 0.0) + + if yAxis.zeroLineDashLengths != nil + { + context.setLineDash(phase: yAxis.zeroLineDashPhase, lengths: yAxis.zeroLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: pos.y)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: pos.y)) + context.drawPath(using: CGPathDrawingMode.stroke) + } + + open override func renderLimitLines(context: CGContext) + { + guard + let yAxis = self.axis as? YAxis, + let transformer = self.transformer + else { return } + + var limitLines = yAxis.limitLines + + if limitLines.count == 0 + { + return + } + + context.saveGState() + + let trans = transformer.valueToPixelMatrix + + var position = CGPoint(x: 0.0, y: 0.0) + + for i in 0 ..< limitLines.count + { + let l = limitLines[i] + + if !l.isEnabled + { + continue + } + + context.saveGState() + defer { context.restoreGState() } + + var clippingRect = viewPortHandler.contentRect + clippingRect.origin.y -= l.lineWidth / 2.0 + clippingRect.size.height += l.lineWidth + context.clip(to: clippingRect) + + position.x = 0.0 + position.y = CGFloat(l.limit) + position = position.applying(trans) + + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: position.y)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: position.y)) + + context.setStrokeColor(l.lineColor.cgColor) + context.setLineWidth(l.lineWidth) + if l.lineDashLengths != nil + { + context.setLineDash(phase: l.lineDashPhase, lengths: l.lineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.strokePath() + + let label = l.label + + // if drawing the limit-value label is enabled + if l.drawLabelEnabled && label.count > 0 + { + let labelLineHeight = l.valueFont.lineHeight + + let xOffset: CGFloat = 4.0 + l.xOffset + let yOffset: CGFloat = l.lineWidth + labelLineHeight + l.yOffset + + if l.labelPosition == .rightTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentRight - xOffset, + y: position.y - yOffset), + align: .right, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else if l.labelPosition == .rightBottom + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentRight - xOffset, + y: position.y + yOffset - labelLineHeight), + align: .right, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else if l.labelPosition == .leftTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentLeft + xOffset, + y: position.y - yOffset), + align: .left, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: viewPortHandler.contentLeft + xOffset, + y: position.y + yOffset - labelLineHeight), + align: .left, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + } + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift b/Pods/Charts/Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift new file mode 100644 index 0000000..ba7c51f --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift @@ -0,0 +1,367 @@ +// +// YAxisRendererHorizontalBarChart.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +open class YAxisRendererHorizontalBarChart: YAxisRenderer +{ + public override init(viewPortHandler: ViewPortHandler, yAxis: YAxis?, transformer: Transformer?) + { + super.init(viewPortHandler: viewPortHandler, yAxis: yAxis, transformer: transformer) + } + + /// Computes the axis values. + open override func computeAxis(min: Double, max: Double, inverted: Bool) + { + guard let transformer = self.transformer else { return } + + var min = min, max = max + + // calculate the starting and entry point of the y-labels (depending on zoom / contentrect bounds) + if viewPortHandler.contentHeight > 10.0 && !viewPortHandler.isFullyZoomedOutX + { + let p1 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) + let p2 = transformer.valueForTouchPoint(CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentTop)) + + if !inverted + { + min = Double(p1.x) + max = Double(p2.x) + } + else + { + min = Double(p2.x) + max = Double(p1.x) + } + } + + computeAxisValues(min: min, max: max) + } + + /// draws the y-axis labels to the screen + open override func renderAxisLabels(context: CGContext) + { + guard let yAxis = axis as? YAxis else { return } + + if !yAxis.isEnabled || !yAxis.isDrawLabelsEnabled + { + return + } + + let lineHeight = yAxis.labelFont.lineHeight + let baseYOffset: CGFloat = 2.5 + + let dependency = yAxis.axisDependency + let labelPosition = yAxis.labelPosition + + var yPos: CGFloat = 0.0 + + if dependency == .left + { + if labelPosition == .outsideChart + { + yPos = viewPortHandler.contentTop - baseYOffset + } + else + { + yPos = viewPortHandler.contentTop - baseYOffset + } + } + else + { + if labelPosition == .outsideChart + { + yPos = viewPortHandler.contentBottom + lineHeight + baseYOffset + } + else + { + yPos = viewPortHandler.contentBottom + lineHeight + baseYOffset + } + } + + // For compatibility with Android code, we keep above calculation the same, + // And here we pull the line back up + yPos -= lineHeight + + drawYLabels( + context: context, + fixedPosition: yPos, + positions: transformedPositions(), + offset: yAxis.yOffset) + } + + open override func renderAxisLine(context: CGContext) + { + guard let yAxis = axis as? YAxis else { return } + + if !yAxis.isEnabled || !yAxis.drawAxisLineEnabled + { + return + } + + context.saveGState() + + context.setStrokeColor(yAxis.axisLineColor.cgColor) + context.setLineWidth(yAxis.axisLineWidth) + if yAxis.axisLineDashLengths != nil + { + context.setLineDash(phase: yAxis.axisLineDashPhase, lengths: yAxis.axisLineDashLengths) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + if yAxis.axisDependency == .left + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentTop)) + context.strokePath() + } + else + { + context.beginPath() + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentBottom)) + context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentBottom)) + context.strokePath() } + + context.restoreGState() + } + + /// draws the y-labels on the specified x-position + @objc open func drawYLabels( + context: CGContext, + fixedPosition: CGFloat, + positions: [CGPoint], + offset: CGFloat) + { + guard let + yAxis = axis as? YAxis + else { return } + + let labelFont = yAxis.labelFont + let labelTextColor = yAxis.labelTextColor + + let from = yAxis.isDrawBottomYLabelEntryEnabled ? 0 : 1 + let to = yAxis.isDrawTopYLabelEntryEnabled ? yAxis.entryCount : (yAxis.entryCount - 1) + + for i in stride(from: from, to: to, by: 1) + { + let text = yAxis.getFormattedLabel(i) + + ChartUtils.drawText( + context: context, + text: text, + point: CGPoint(x: positions[i].x, y: fixedPosition - offset), + align: .center, + attributes: [NSAttributedStringKey.font: labelFont, NSAttributedStringKey.foregroundColor: labelTextColor]) + } + } + + open override var gridClippingRect: CGRect + { + var contentRect = viewPortHandler.contentRect + let dx = self.axis?.gridLineWidth ?? 0.0 + contentRect.origin.x -= dx / 2.0 + contentRect.size.width += dx + return contentRect + } + + open override func drawGridLine( + context: CGContext, + position: CGPoint) + { + context.beginPath() + context.move(to: CGPoint(x: position.x, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: position.x, y: viewPortHandler.contentBottom)) + context.strokePath() + } + + open override func transformedPositions() -> [CGPoint] + { + guard + let yAxis = self.axis as? YAxis, + let transformer = self.transformer + else { return [CGPoint]() } + + var positions = [CGPoint]() + positions.reserveCapacity(yAxis.entryCount) + + let entries = yAxis.entries + + for i in stride(from: 0, to: yAxis.entryCount, by: 1) + { + positions.append(CGPoint(x: entries[i], y: 0.0)) + } + + transformer.pointValuesToPixel(&positions) + + return positions + } + + /// Draws the zero line at the specified position. + open override func drawZeroLine(context: CGContext) + { + guard + let yAxis = self.axis as? YAxis, + let transformer = self.transformer, + let zeroLineColor = yAxis.zeroLineColor + else { return } + + context.saveGState() + defer { context.restoreGState() } + + var clippingRect = viewPortHandler.contentRect + clippingRect.origin.x -= yAxis.zeroLineWidth / 2.0 + clippingRect.size.width += yAxis.zeroLineWidth + context.clip(to: clippingRect) + + context.setStrokeColor(zeroLineColor.cgColor) + context.setLineWidth(yAxis.zeroLineWidth) + + let pos = transformer.pixelForValues(x: 0.0, y: 0.0) + + if yAxis.zeroLineDashLengths != nil + { + context.setLineDash(phase: yAxis.zeroLineDashPhase, lengths: yAxis.zeroLineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.move(to: CGPoint(x: pos.x - 1.0, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: pos.x - 1.0, y: viewPortHandler.contentBottom)) + context.drawPath(using: CGPathDrawingMode.stroke) + } + + private var _limitLineSegmentsBuffer = [CGPoint](repeating: CGPoint(), count: 2) + + open override func renderLimitLines(context: CGContext) + { + guard + let yAxis = axis as? YAxis, + let transformer = self.transformer + else { return } + + var limitLines = yAxis.limitLines + + if limitLines.count <= 0 + { + return + } + + context.saveGState() + + let trans = transformer.valueToPixelMatrix + + var position = CGPoint(x: 0.0, y: 0.0) + + for i in 0 ..< limitLines.count + { + let l = limitLines[i] + + if !l.isEnabled + { + continue + } + + context.saveGState() + defer { context.restoreGState() } + + var clippingRect = viewPortHandler.contentRect + clippingRect.origin.x -= l.lineWidth / 2.0 + clippingRect.size.width += l.lineWidth + context.clip(to: clippingRect) + + position.x = CGFloat(l.limit) + position.y = 0.0 + position = position.applying(trans) + + context.beginPath() + context.move(to: CGPoint(x: position.x, y: viewPortHandler.contentTop)) + context.addLine(to: CGPoint(x: position.x, y: viewPortHandler.contentBottom)) + + context.setStrokeColor(l.lineColor.cgColor) + context.setLineWidth(l.lineWidth) + if l.lineDashLengths != nil + { + context.setLineDash(phase: l.lineDashPhase, lengths: l.lineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + context.strokePath() + + let label = l.label + + // if drawing the limit-value label is enabled + if l.drawLabelEnabled && label.count > 0 + { + let labelLineHeight = l.valueFont.lineHeight + + let xOffset: CGFloat = l.lineWidth + l.xOffset + let yOffset: CGFloat = 2.0 + l.yOffset + + if l.labelPosition == .rightTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x + xOffset, + y: viewPortHandler.contentTop + yOffset), + align: .left, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else if l.labelPosition == .rightBottom + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x + xOffset, + y: viewPortHandler.contentBottom - labelLineHeight - yOffset), + align: .left, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else if l.labelPosition == .leftTop + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x - xOffset, + y: viewPortHandler.contentTop + yOffset), + align: .right, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + else + { + ChartUtils.drawText(context: context, + text: label, + point: CGPoint( + x: position.x - xOffset, + y: viewPortHandler.contentBottom - labelLineHeight - yOffset), + align: .right, + attributes: [NSAttributedStringKey.font: l.valueFont, NSAttributedStringKey.foregroundColor: l.valueTextColor]) + } + } + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Renderers/YAxisRendererRadarChart.swift b/Pods/Charts/Source/Charts/Renderers/YAxisRendererRadarChart.swift new file mode 100644 index 0000000..8388ce9 --- /dev/null +++ b/Pods/Charts/Source/Charts/Renderers/YAxisRendererRadarChart.swift @@ -0,0 +1,274 @@ +// +// YAxisRendererRadarChart.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + +open class YAxisRendererRadarChart: YAxisRenderer +{ + private weak var chart: RadarChartView? + + @objc public init(viewPortHandler: ViewPortHandler, yAxis: YAxis?, chart: RadarChartView) + { + super.init(viewPortHandler: viewPortHandler, yAxis: yAxis, transformer: nil) + + self.chart = chart + } + + open override func computeAxisValues(min yMin: Double, max yMax: Double) + { + guard let + axis = axis as? YAxis + else { return } + + let labelCount = axis.labelCount + let range = abs(yMax - yMin) + + if labelCount == 0 || range <= 0 || range.isInfinite + { + axis.entries = [Double]() + axis.centeredEntries = [Double]() + return + } + + // Find out how much spacing (in yValue space) between axis values + let rawInterval = range / Double(labelCount) + var interval = rawInterval.roundedToNextSignficant() + + // If granularity is enabled, then do not allow the interval to go below specified granularity. + // This is used to avoid repeated values when rounding values for display. + if axis.isGranularityEnabled + { + interval = interval < axis.granularity ? axis.granularity : interval + } + + // Normalize interval + let intervalMagnitude = pow(10.0, floor(log10(interval))).roundedToNextSignficant() + let intervalSigDigit = Int(interval / intervalMagnitude) + + if intervalSigDigit > 5 + { + // Use one order of magnitude higher, to avoid intervals like 0.9 or 90 + // if it's 0.0 after floor(), we use the old value + interval = floor(10.0 * intervalMagnitude) == 0.0 ? interval : floor(10.0 * intervalMagnitude) + } + + let centeringEnabled = axis.isCenterAxisLabelsEnabled + var n = centeringEnabled ? 1 : 0 + + // force label count + if axis.isForceLabelsEnabled + { + let step = Double(range) / Double(labelCount - 1) + + // Ensure stops contains at least n elements. + axis.entries.removeAll(keepingCapacity: true) + axis.entries.reserveCapacity(labelCount) + + var v = yMin + + for _ in 0 ..< labelCount + { + axis.entries.append(v) + v += step + } + + n = labelCount + } + else + { + // no forced count + + var first = interval == 0.0 ? 0.0 : ceil(yMin / interval) * interval + + if centeringEnabled + { + first -= interval + } + + let last = interval == 0.0 ? 0.0 : (floor(yMax / interval) * interval).nextUp + + if interval != 0.0 + { + for _ in stride(from: first, through: last, by: interval) + { + n += 1 + } + } + + n += 1 + + // Ensure stops contains at least n elements. + axis.entries.removeAll(keepingCapacity: true) + axis.entries.reserveCapacity(labelCount) + + var f = first + var i = 0 + while i < n + { + if f == 0.0 + { + // Fix for IEEE negative zero case (Where value == -0.0, and 0.0 == -0.0) + f = 0.0 + } + + axis.entries.append(Double(f)) + + f += interval + i += 1 + } + } + + // set decimals + if interval < 1 + { + axis.decimals = Int(ceil(-log10(interval))) + } + else + { + axis.decimals = 0 + } + + if centeringEnabled + { + axis.centeredEntries.reserveCapacity(n) + axis.centeredEntries.removeAll() + + let offset = (axis.entries[1] - axis.entries[0]) / 2.0 + + for i in 0 ..< n + { + axis.centeredEntries.append(axis.entries[i] + offset) + } + } + + axis._axisMinimum = axis.entries[0] + axis._axisMaximum = axis.entries[n-1] + axis.axisRange = abs(axis._axisMaximum - axis._axisMinimum) + } + + open override func renderAxisLabels(context: CGContext) + { + guard let + yAxis = axis as? YAxis, + let chart = chart + else { return } + + if !yAxis.isEnabled || !yAxis.isDrawLabelsEnabled + { + return + } + + let labelFont = yAxis.labelFont + let labelTextColor = yAxis.labelTextColor + + let center = chart.centerOffsets + let factor = chart.factor + + let labelLineHeight = yAxis.labelFont.lineHeight + + let from = yAxis.isDrawBottomYLabelEntryEnabled ? 0 : 1 + let to = yAxis.isDrawTopYLabelEntryEnabled ? yAxis.entryCount : (yAxis.entryCount - 1) + + for j in stride(from: from, to: to, by: 1) + { + let r = CGFloat(yAxis.entries[j] - yAxis._axisMinimum) * factor + + let p = center.moving(distance: r, atAngle: chart.rotationAngle) + + let label = yAxis.getFormattedLabel(j) + + ChartUtils.drawText( + context: context, + text: label, + point: CGPoint(x: p.x + 10.0, y: p.y - labelLineHeight), + align: .left, + attributes: [ + NSAttributedStringKey.font: labelFont, + NSAttributedStringKey.foregroundColor: labelTextColor + ]) + } + } + + open override func renderLimitLines(context: CGContext) + { + guard + let yAxis = axis as? YAxis, + let chart = chart, + let data = chart.data + else { return } + + var limitLines = yAxis.limitLines + + if limitLines.count == 0 + { + return + } + + context.saveGState() + + let sliceangle = chart.sliceAngle + + // calculate the factor that is needed for transforming the value to pixels + let factor = chart.factor + + let center = chart.centerOffsets + + for i in 0 ..< limitLines.count + { + let l = limitLines[i] + + if !l.isEnabled + { + continue + } + + context.setStrokeColor(l.lineColor.cgColor) + context.setLineWidth(l.lineWidth) + if l.lineDashLengths != nil + { + context.setLineDash(phase: l.lineDashPhase, lengths: l.lineDashLengths!) + } + else + { + context.setLineDash(phase: 0.0, lengths: []) + } + + let r = CGFloat(l.limit - chart.chartYMin) * factor + + context.beginPath() + + for j in 0 ..< (data.maxEntryCountSet?.entryCount ?? 0) + { + let p = center.moving(distance: r, atAngle: sliceangle * CGFloat(j) + chart.rotationAngle) + + if j == 0 + { + context.move(to: CGPoint(x: p.x, y: p.y)) + } + else + { + context.addLine(to: CGPoint(x: p.x, y: p.y)) + } + } + + context.closePath() + + context.strokePath() + } + + context.restoreGState() + } +} diff --git a/Pods/Charts/Source/Charts/Utils/ChartColorTemplates.swift b/Pods/Charts/Source/Charts/Utils/ChartColorTemplates.swift new file mode 100644 index 0000000..461ef8a --- /dev/null +++ b/Pods/Charts/Source/Charts/Utils/ChartColorTemplates.swift @@ -0,0 +1,203 @@ +// +// ChartColorTemplates.swift +// Charts +// +// 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 + +#if !os(OSX) + import UIKit +#endif + + +open class ChartColorTemplates: NSObject +{ + @objc open class func liberty () -> [NSUIColor] + { + return [ + NSUIColor(red: 207/255.0, green: 248/255.0, blue: 246/255.0, alpha: 1.0), + NSUIColor(red: 148/255.0, green: 212/255.0, blue: 212/255.0, alpha: 1.0), + NSUIColor(red: 136/255.0, green: 180/255.0, blue: 187/255.0, alpha: 1.0), + NSUIColor(red: 118/255.0, green: 174/255.0, blue: 175/255.0, alpha: 1.0), + NSUIColor(red: 42/255.0, green: 109/255.0, blue: 130/255.0, alpha: 1.0) + ] + } + + @objc open class func joyful () -> [NSUIColor] + { + return [ + NSUIColor(red: 217/255.0, green: 80/255.0, blue: 138/255.0, alpha: 1.0), + NSUIColor(red: 254/255.0, green: 149/255.0, blue: 7/255.0, alpha: 1.0), + NSUIColor(red: 254/255.0, green: 247/255.0, blue: 120/255.0, alpha: 1.0), + NSUIColor(red: 106/255.0, green: 167/255.0, blue: 134/255.0, alpha: 1.0), + NSUIColor(red: 53/255.0, green: 194/255.0, blue: 209/255.0, alpha: 1.0) + ] + } + + @objc open class func pastel () -> [NSUIColor] + { + return [ + NSUIColor(red: 64/255.0, green: 89/255.0, blue: 128/255.0, alpha: 1.0), + NSUIColor(red: 149/255.0, green: 165/255.0, blue: 124/255.0, alpha: 1.0), + NSUIColor(red: 217/255.0, green: 184/255.0, blue: 162/255.0, alpha: 1.0), + NSUIColor(red: 191/255.0, green: 134/255.0, blue: 134/255.0, alpha: 1.0), + NSUIColor(red: 179/255.0, green: 48/255.0, blue: 80/255.0, alpha: 1.0) + ] + } + + @objc open class func colorful () -> [NSUIColor] + { + return [ + NSUIColor(red: 193/255.0, green: 37/255.0, blue: 82/255.0, alpha: 1.0), + NSUIColor(red: 255/255.0, green: 102/255.0, blue: 0/255.0, alpha: 1.0), + NSUIColor(red: 245/255.0, green: 199/255.0, blue: 0/255.0, alpha: 1.0), + NSUIColor(red: 106/255.0, green: 150/255.0, blue: 31/255.0, alpha: 1.0), + NSUIColor(red: 179/255.0, green: 100/255.0, blue: 53/255.0, alpha: 1.0) + ] + } + + @objc open class func vordiplom () -> [NSUIColor] + { + return [ + NSUIColor(red: 192/255.0, green: 255/255.0, blue: 140/255.0, alpha: 1.0), + NSUIColor(red: 255/255.0, green: 247/255.0, blue: 140/255.0, alpha: 1.0), + NSUIColor(red: 255/255.0, green: 208/255.0, blue: 140/255.0, alpha: 1.0), + NSUIColor(red: 140/255.0, green: 234/255.0, blue: 255/255.0, alpha: 1.0), + NSUIColor(red: 255/255.0, green: 140/255.0, blue: 157/255.0, alpha: 1.0) + ] + } + + @objc open class func material () -> [NSUIColor] + { + return [ + NSUIColor(red: 46/255.0, green: 204/255.0, blue: 113/255.0, alpha: 1.0), + NSUIColor(red: 241/255.0, green: 196/255.0, blue: 15/255.0, alpha: 1.0), + NSUIColor(red: 231/255.0, green: 76/255.0, blue: 60/255.0, alpha: 1.0), + NSUIColor(red: 52/255.0, green: 152/255.0, blue: 219/255.0, alpha: 1.0) + ] + } + + @objc open class func colorFromString(_ colorString: String) -> NSUIColor + { + let leftParenCharset: CharacterSet = CharacterSet(charactersIn: "( ") + let commaCharset: CharacterSet = CharacterSet(charactersIn: ", ") + + let colorString = colorString.lowercased() + + if colorString.hasPrefix("#") + { + var argb: [UInt] = [255, 0, 0, 0] + let colorString = colorString.unicodeScalars + var length = colorString.count + var index = colorString.startIndex + let endIndex = colorString.endIndex + + index = colorString.index(after: index) + length = length - 1 + + if length == 3 || length == 6 || length == 8 + { + var i = length == 8 ? 0 : 1 + while index < endIndex + { + var c = colorString[index] + index = colorString.index(after: index) + + var val = (c.value >= 0x61 && c.value <= 0x66) ? (c.value - 0x61 + 10) : c.value - 0x30 + argb[i] = UInt(val) * 16 + if length == 3 + { + argb[i] = argb[i] + UInt(val) + } + else + { + c = colorString[index] + index = colorString.index(after: index) + + val = (c.value >= 0x61 && c.value <= 0x66) ? (c.value - 0x61 + 10) : c.value - 0x30 + argb[i] = argb[i] + UInt(val) + } + + i += 1 + } + } + + return NSUIColor(red: CGFloat(argb[1]) / 255.0, green: CGFloat(argb[2]) / 255.0, blue: CGFloat(argb[3]) / 255.0, alpha: CGFloat(argb[0]) / 255.0) + } + else if colorString.hasPrefix("rgba") + { + var a: Float = 1.0 + var r: Int32 = 0 + var g: Int32 = 0 + var b: Int32 = 0 + let scanner: Scanner = Scanner(string: colorString) + scanner.scanString("rgba", into: nil) + scanner.scanCharacters(from: leftParenCharset, into: nil) + scanner.scanInt32(&r) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanInt32(&g) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanInt32(&b) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanFloat(&a) + return NSUIColor( + red: CGFloat(r) / 255.0, + green: CGFloat(g) / 255.0, + blue: CGFloat(b) / 255.0, + alpha: CGFloat(a) + ) + } + else if colorString.hasPrefix("argb") + { + var a: Float = 1.0 + var r: Int32 = 0 + var g: Int32 = 0 + var b: Int32 = 0 + let scanner: Scanner = Scanner(string: colorString) + scanner.scanString("argb", into: nil) + scanner.scanCharacters(from: leftParenCharset, into: nil) + scanner.scanFloat(&a) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanInt32(&r) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanInt32(&g) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanInt32(&b) + return NSUIColor( + red: CGFloat(r) / 255.0, + green: CGFloat(g) / 255.0, + blue: CGFloat(b) / 255.0, + alpha: CGFloat(a) + ) + } + else if colorString.hasPrefix("rgb") + { + var r: Int32 = 0 + var g: Int32 = 0 + var b: Int32 = 0 + let scanner: Scanner = Scanner(string: colorString) + scanner.scanString("rgb", into: nil) + scanner.scanCharacters(from: leftParenCharset, into: nil) + scanner.scanInt32(&r) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanInt32(&g) + scanner.scanCharacters(from: commaCharset, into: nil) + scanner.scanInt32(&b) + return NSUIColor( + red: CGFloat(r) / 255.0, + green: CGFloat(g) / 255.0, + blue: CGFloat(b) / 255.0, + alpha: 1.0 + ) + } + + return NSUIColor.clear + } +} diff --git a/Pods/Charts/Source/Charts/Utils/ChartUtils.swift b/Pods/Charts/Source/Charts/Utils/ChartUtils.swift new file mode 100644 index 0000000..9f73270 --- /dev/null +++ b/Pods/Charts/Source/Charts/Utils/ChartUtils.swift @@ -0,0 +1,284 @@ +// +// Utils.swift +// Charts +// +// 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 + +extension FloatingPoint +{ + var DEG2RAD: Self + { + return self * .pi / 180 + } + + var RAD2DEG: Self + { + return self * 180 / .pi + } + + /// - returns: An angle between 0.0 < 360.0 (not less than zero, less than 360) + /// NOTE: Value must be in degrees + var normalizedAngle: Self + { + let angle = truncatingRemainder(dividingBy: 360) + return (sign == .minus) ? angle + 360 : angle + } +} + +extension CGSize +{ + func rotatedBy(degrees: CGFloat) -> CGSize + { + let radians = degrees.DEG2RAD + return rotatedBy(radians: radians) + } + + func rotatedBy(radians: CGFloat) -> CGSize + { + return CGSize( + width: abs(width * cos(radians)) + abs(height * sin(radians)), + height: abs(width * sin(radians)) + abs(height * cos(radians)) + ) + } +} + +extension Double +{ + /// Rounds the number to the nearest multiple of it's order of magnitude, rounding away from zero if halfway. + func roundedToNextSignficant() -> Double + { + guard + !isInfinite, + !isNaN, + self != 0 + else { return self } + + let d = ceil(log10(self < 0 ? -self : self)) + let pw = 1 - Int(d) + let magnitude = pow(10.0, Double(pw)) + let shifted = (self * magnitude).rounded() + return shifted / magnitude + } + + var decimalPlaces: Int + { + guard + !isNaN, + !isInfinite, + self != 0.0 + else { return 0 } + + let i = self.roundedToNextSignficant() + + guard + !i.isInfinite, + !i.isNaN + else { return 0 } + + return Int(ceil(-log10(i))) + 2 + } +} + +extension CGPoint +{ + /// Calculates the position around a center point, depending on the distance from the center, and the angle of the position around the center. + func moving(distance: CGFloat, atAngle angle: CGFloat) -> CGPoint + { + return CGPoint(x: x + distance * cos(angle.DEG2RAD), + y: y + distance * sin(angle.DEG2RAD)) + } +} + +open class ChartUtils +{ + private static var _defaultValueFormatter: IValueFormatter = ChartUtils.generateDefaultValueFormatter() + + open class func drawImage( + context: CGContext, + image: NSUIImage, + x: CGFloat, + y: CGFloat, + size: CGSize) + { + var drawOffset = CGPoint() + drawOffset.x = x - (size.width / 2) + drawOffset.y = y - (size.height / 2) + + NSUIGraphicsPushContext(context) + + if image.size.width != size.width && image.size.height != size.height + { + let key = "resized_\(size.width)_\(size.height)" + + // Try to take scaled image from cache of this image + var scaledImage = objc_getAssociatedObject(image, key) as? NSUIImage + if scaledImage == nil + { + // Scale the image + NSUIGraphicsBeginImageContextWithOptions(size, false, 0.0) + + image.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: size)) + + scaledImage = NSUIGraphicsGetImageFromCurrentImageContext() + NSUIGraphicsEndImageContext() + + // Put the scaled image in a cache owned by the original image + objc_setAssociatedObject(image, key, scaledImage, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + + scaledImage?.draw(in: CGRect(origin: drawOffset, size: size)) + } + else + { + image.draw(in: CGRect(origin: drawOffset, size: size)) + } + + NSUIGraphicsPopContext() + } + + open class func drawText(context: CGContext, text: String, point: CGPoint, align: NSTextAlignment, attributes: [NSAttributedStringKey : Any]?) + { + var point = point + + if align == .center + { + point.x -= text.size(withAttributes: attributes).width / 2.0 + } + else if align == .right + { + point.x -= text.size(withAttributes: attributes).width + } + + NSUIGraphicsPushContext(context) + + (text as NSString).draw(at: point, withAttributes: attributes) + + NSUIGraphicsPopContext() + } + + open class func drawText(context: CGContext, text: String, point: CGPoint, attributes: [NSAttributedStringKey : Any]?, anchor: CGPoint, angleRadians: CGFloat) + { + var drawOffset = CGPoint() + + NSUIGraphicsPushContext(context) + + if angleRadians != 0.0 + { + let size = text.size(withAttributes: attributes) + + // Move the text drawing rect in a way that it always rotates around its center + drawOffset.x = -size.width * 0.5 + drawOffset.y = -size.height * 0.5 + + var translate = point + + // Move the "outer" rect relative to the anchor, assuming its centered + if anchor.x != 0.5 || anchor.y != 0.5 + { + let rotatedSize = size.rotatedBy(radians: angleRadians) + + translate.x -= rotatedSize.width * (anchor.x - 0.5) + translate.y -= rotatedSize.height * (anchor.y - 0.5) + } + + context.saveGState() + context.translateBy(x: translate.x, y: translate.y) + context.rotate(by: angleRadians) + + (text as NSString).draw(at: drawOffset, withAttributes: attributes) + + context.restoreGState() + } + else + { + if anchor.x != 0.0 || anchor.y != 0.0 + { + let size = text.size(withAttributes: attributes) + + drawOffset.x = -size.width * anchor.x + drawOffset.y = -size.height * anchor.y + } + + drawOffset.x += point.x + drawOffset.y += point.y + + (text as NSString).draw(at: drawOffset, withAttributes: attributes) + } + + NSUIGraphicsPopContext() + } + + internal class func drawMultilineText(context: CGContext, text: String, knownTextSize: CGSize, point: CGPoint, attributes: [NSAttributedStringKey : Any]?, constrainedToSize: CGSize, anchor: CGPoint, angleRadians: CGFloat) + { + var rect = CGRect(origin: CGPoint(), size: knownTextSize) + + NSUIGraphicsPushContext(context) + + if angleRadians != 0.0 + { + // Move the text drawing rect in a way that it always rotates around its center + rect.origin.x = -knownTextSize.width * 0.5 + rect.origin.y = -knownTextSize.height * 0.5 + + var translate = point + + // Move the "outer" rect relative to the anchor, assuming its centered + if anchor.x != 0.5 || anchor.y != 0.5 + { + let rotatedSize = knownTextSize.rotatedBy(radians: angleRadians) + + translate.x -= rotatedSize.width * (anchor.x - 0.5) + translate.y -= rotatedSize.height * (anchor.y - 0.5) + } + + context.saveGState() + context.translateBy(x: translate.x, y: translate.y) + context.rotate(by: angleRadians) + + (text as NSString).draw(with: rect, options: .usesLineFragmentOrigin, attributes: attributes, context: nil) + + context.restoreGState() + } + else + { + if anchor.x != 0.0 || anchor.y != 0.0 + { + rect.origin.x = -knownTextSize.width * anchor.x + rect.origin.y = -knownTextSize.height * anchor.y + } + + rect.origin.x += point.x + rect.origin.y += point.y + + (text as NSString).draw(with: rect, options: .usesLineFragmentOrigin, attributes: attributes, context: nil) + } + + NSUIGraphicsPopContext() + } + + internal class func drawMultilineText(context: CGContext, text: String, point: CGPoint, attributes: [NSAttributedStringKey : Any]?, constrainedToSize: CGSize, anchor: CGPoint, angleRadians: CGFloat) + { + let rect = text.boundingRect(with: constrainedToSize, options: .usesLineFragmentOrigin, attributes: attributes, context: nil) + drawMultilineText(context: context, text: text, knownTextSize: rect.size, point: point, attributes: attributes, constrainedToSize: constrainedToSize, anchor: anchor, angleRadians: angleRadians) + } + + private class func generateDefaultValueFormatter() -> IValueFormatter + { + let formatter = DefaultValueFormatter(decimals: 1) + return formatter + } + + /// - returns: The default value formatter used for all chart components that needs a default + open class func defaultValueFormatter() -> IValueFormatter + { + return _defaultValueFormatter + } +} diff --git a/Pods/Charts/Source/Charts/Utils/Fill.swift b/Pods/Charts/Source/Charts/Utils/Fill.swift new file mode 100644 index 0000000..1294b3e --- /dev/null +++ b/Pods/Charts/Source/Charts/Utils/Fill.swift @@ -0,0 +1,323 @@ +// +// Fill.swift +// Charts +// +// 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 + +@objc(ChartFillType) +public enum FillType: Int +{ + case empty + case color + case linearGradient + case radialGradient + case image + case tiledImage + case layer +} + +@objc(ChartFill) +open class Fill: NSObject +{ + private var _type: FillType = FillType.empty + private var _color: CGColor? + private var _gradient: CGGradient? + private var _gradientAngle: CGFloat = 0.0 + private var _gradientStartOffsetPercent: CGPoint = CGPoint() + private var _gradientStartRadiusPercent: CGFloat = 0.0 + private var _gradientEndOffsetPercent: CGPoint = CGPoint() + private var _gradientEndRadiusPercent: CGFloat = 0.0 + private var _image: CGImage? + private var _layer: CGLayer? + + // MARK: Properties + + @objc open var type: FillType + { + return _type + } + + @objc open var color: CGColor? + { + return _color + } + + @objc open var gradient: CGGradient? + { + return _gradient + } + + @objc open var gradientAngle: CGFloat + { + return _gradientAngle + } + + @objc open var gradientStartOffsetPercent: CGPoint + { + return _gradientStartOffsetPercent + } + + @objc open var gradientStartRadiusPercent: CGFloat + { + return _gradientStartRadiusPercent + } + + @objc open var gradientEndOffsetPercent: CGPoint + { + return _gradientEndOffsetPercent + } + + @objc open var gradientEndRadiusPercent: CGFloat + { + return _gradientEndRadiusPercent + } + + @objc open var image: CGImage? + { + return _image + } + + @objc open var layer: CGLayer? + { + return _layer + } + + // MARK: Constructors + + public override init() + { + } + + @objc public init(CGColor: CGColor) + { + _type = .color + _color = CGColor + } + + @objc public convenience init(color: NSUIColor) + { + self.init(CGColor: color.cgColor) + } + + @objc public init(linearGradient: CGGradient, angle: CGFloat) + { + _type = .linearGradient + _gradient = linearGradient + _gradientAngle = angle + } + + @objc public init( + radialGradient: CGGradient, + startOffsetPercent: CGPoint, + startRadiusPercent: CGFloat, + endOffsetPercent: CGPoint, + endRadiusPercent: CGFloat + ) + { + _type = .radialGradient + _gradient = radialGradient + _gradientStartOffsetPercent = startOffsetPercent + _gradientStartRadiusPercent = startRadiusPercent + _gradientEndOffsetPercent = endOffsetPercent + _gradientEndRadiusPercent = endRadiusPercent + } + + @objc public convenience init(radialGradient: CGGradient) + { + self.init( + radialGradient: radialGradient, + startOffsetPercent: CGPoint(x: 0.0, y: 0.0), + startRadiusPercent: 0.0, + endOffsetPercent: CGPoint(x: 0.0, y: 0.0), + endRadiusPercent: 1.0 + ) + } + + @objc public init(CGImage: CGImage, tiled: Bool) + { + _type = tiled ? .tiledImage : .image + _image = CGImage + } + + @objc public convenience init(image: NSUIImage, tiled: Bool) + { + self.init(CGImage: image.cgImage!, tiled: tiled) + } + + @objc public convenience init(CGImage: CGImage) + { + self.init(CGImage: CGImage, tiled: false) + } + + @objc public convenience init(image: NSUIImage) + { + self.init(image: image, tiled: false) + } + + @objc public init(CGLayer: CGLayer) + { + _type = .layer + _layer = CGLayer + } + + // MARK: Constructors + + @objc open class func fillWithCGColor(_ CGColor: CGColor) -> Fill + { + return Fill(CGColor: CGColor) + } + + @objc open class func fillWithColor(_ color: NSUIColor) -> Fill + { + return Fill(color: color) + } + + @objc open class func fillWithLinearGradient( + _ linearGradient: CGGradient, + angle: CGFloat) -> Fill + { + return Fill(linearGradient: linearGradient, angle: angle) + } + + @objc open class func fillWithRadialGradient( + _ radialGradient: CGGradient, + startOffsetPercent: CGPoint, + startRadiusPercent: CGFloat, + endOffsetPercent: CGPoint, + endRadiusPercent: CGFloat + ) -> Fill + { + return Fill( + radialGradient: radialGradient, + startOffsetPercent: startOffsetPercent, + startRadiusPercent: startRadiusPercent, + endOffsetPercent: endOffsetPercent, + endRadiusPercent: endRadiusPercent + ) + } + + @objc open class func fillWithRadialGradient(_ radialGradient: CGGradient) -> Fill + { + return Fill(radialGradient: radialGradient) + } + + @objc open class func fillWithCGImage(_ CGImage: CGImage, tiled: Bool) -> Fill + { + return Fill(CGImage: CGImage, tiled: tiled) + } + + @objc open class func fillWithImage(_ image: NSUIImage, tiled: Bool) -> Fill + { + return Fill(image: image, tiled: tiled) + } + + @objc open class func fillWithCGImage(_ CGImage: CGImage) -> Fill + { + return Fill(CGImage: CGImage) + } + + @objc open class func fillWithImage(_ image: NSUIImage) -> Fill + { + return Fill(image: image) + } + + @objc open class func fillWithCGLayer(_ CGLayer: CGLayer) -> Fill + { + return Fill(CGLayer: CGLayer) + } + + // MARK: Drawing code + + /// Draws the provided path in filled mode with the provided area + @objc open func fillPath( + context: CGContext, + rect: CGRect) + { + let fillType = _type + if fillType == .empty + { + return + } + + context.saveGState() + + switch fillType + { + case .color: + + context.setFillColor(_color!) + context.fillPath() + + case .image: + + context.clip() + context.draw(_image!, in: rect) + + case .tiledImage: + + context.clip() + context.draw(_image!, in: rect, byTiling: true) + + case .layer: + + context.clip() + context.draw(_layer!, in: rect) + + case .linearGradient: + + let radians = (360.0 - _gradientAngle).DEG2RAD + let centerPoint = CGPoint(x: rect.midX, y: rect.midY) + let xAngleDelta = cos(radians) * rect.width / 2.0 + let yAngleDelta = sin(radians) * rect.height / 2.0 + let startPoint = CGPoint( + x: centerPoint.x - xAngleDelta, + y: centerPoint.y - yAngleDelta + ) + let endPoint = CGPoint( + x: centerPoint.x + xAngleDelta, + y: centerPoint.y + yAngleDelta + ) + + context.clip() + context.drawLinearGradient(_gradient!, + start: startPoint, + end: endPoint, + options: [.drawsAfterEndLocation, .drawsBeforeStartLocation] + ) + + case .radialGradient: + + let centerPoint = CGPoint(x: rect.midX, y: rect.midY) + let radius = max(rect.width, rect.height) / 2.0 + + context.clip() + context.drawRadialGradient(_gradient!, + startCenter: CGPoint( + x: centerPoint.x + rect.width * _gradientStartOffsetPercent.x, + y: centerPoint.y + rect.height * _gradientStartOffsetPercent.y + ), + startRadius: radius * _gradientStartRadiusPercent, + endCenter: CGPoint( + x: centerPoint.x + rect.width * _gradientEndOffsetPercent.x, + y: centerPoint.y + rect.height * _gradientEndOffsetPercent.y + ), + endRadius: radius * _gradientEndRadiusPercent, + options: [.drawsAfterEndLocation, .drawsBeforeStartLocation] + ) + + case .empty: + break + } + + context.restoreGState() + } + +} diff --git a/Pods/Charts/Source/Charts/Utils/Platform.swift b/Pods/Charts/Source/Charts/Utils/Platform.swift new file mode 100644 index 0000000..ae17c10 --- /dev/null +++ b/Pods/Charts/Source/Charts/Utils/Platform.swift @@ -0,0 +1,613 @@ +import Foundation + +/** This file provides a thin abstraction layer atop of UIKit (iOS, tvOS) and Cocoa (OS X). The two APIs are very much +alike, and for the chart library's usage of the APIs it is often sufficient to typealias one to the other. The NSUI* +types are aliased to either their UI* implementation (on iOS) or their NS* implementation (on OS X). */ +#if os(iOS) || os(tvOS) + import UIKit + + public typealias NSUIFont = UIFont + public typealias NSUIColor = UIColor + public typealias NSUIEvent = UIEvent + public typealias NSUITouch = UITouch + public typealias NSUIImage = UIImage + public typealias NSUIScrollView = UIScrollView + public typealias NSUIGestureRecognizer = UIGestureRecognizer + public typealias NSUIGestureRecognizerState = UIGestureRecognizerState + public typealias NSUIGestureRecognizerDelegate = UIGestureRecognizerDelegate + public typealias NSUITapGestureRecognizer = UITapGestureRecognizer + public typealias NSUIPanGestureRecognizer = UIPanGestureRecognizer +#if !os(tvOS) + public typealias NSUIPinchGestureRecognizer = UIPinchGestureRecognizer + public typealias NSUIRotationGestureRecognizer = UIRotationGestureRecognizer +#endif + public typealias NSUIScreen = UIScreen + + public typealias NSUIDisplayLink = CADisplayLink + + extension NSUITapGestureRecognizer + { + @objc final func nsuiNumberOfTouches() -> Int + { + return numberOfTouches + } + + @objc final var nsuiNumberOfTapsRequired: Int + { + get + { + return self.numberOfTapsRequired + } + set + { + self.numberOfTapsRequired = newValue + } + } + } + + extension NSUIPanGestureRecognizer + { + @objc final func nsuiNumberOfTouches() -> Int + { + return numberOfTouches + } + + @objc final func nsuiLocationOfTouch(_ touch: Int, inView: UIView?) -> CGPoint + { + return super.location(ofTouch: touch, in: inView) + } + } + +#if !os(tvOS) + extension NSUIRotationGestureRecognizer + { + @objc final var nsuiRotation: CGFloat + { + get { return rotation } + set { rotation = newValue } + } + } +#endif + +#if !os(tvOS) + extension NSUIPinchGestureRecognizer + { + @objc final var nsuiScale: CGFloat + { + get + { + return scale + } + set + { + scale = newValue + } + } + + @objc final func nsuiLocationOfTouch(_ touch: Int, inView: UIView?) -> CGPoint + { + return super.location(ofTouch: touch, in: inView) + } + } +#endif + + open class NSUIView: UIView + { + public final override func touchesBegan(_ touches: Set, with event: NSUIEvent?) + { + self.nsuiTouchesBegan(touches, withEvent: event) + } + + public final override func touchesMoved(_ touches: Set, with event: NSUIEvent?) + { + self.nsuiTouchesMoved(touches, withEvent: event) + } + + public final override func touchesEnded(_ touches: Set, with event: NSUIEvent?) + { + self.nsuiTouchesEnded(touches, withEvent: event) + } + + public final override func touchesCancelled(_ touches: Set, with event: NSUIEvent?) + { + self.nsuiTouchesCancelled(touches, withEvent: event) + } + + @objc open func nsuiTouchesBegan(_ touches: Set, withEvent event: NSUIEvent?) + { + super.touchesBegan(touches, with: event!) + } + + @objc open func nsuiTouchesMoved(_ touches: Set, withEvent event: NSUIEvent?) + { + super.touchesMoved(touches, with: event!) + } + + @objc open func nsuiTouchesEnded(_ touches: Set, withEvent event: NSUIEvent?) + { + super.touchesEnded(touches, with: event!) + } + + @objc open func nsuiTouchesCancelled(_ touches: Set?, withEvent event: NSUIEvent?) + { + super.touchesCancelled(touches!, with: event!) + } + + @objc var nsuiLayer: CALayer? + { + return self.layer + } + } + + extension UIView + { + @objc final var nsuiGestureRecognizers: [NSUIGestureRecognizer]? + { + return self.gestureRecognizers + } + } + + extension UIScrollView + { + @objc var nsuiIsScrollEnabled: Bool + { + get { return isScrollEnabled } + set { isScrollEnabled = newValue } + } + } + + extension UIScreen + { + @objc final var nsuiScale: CGFloat + { + return self.scale + } + } + + func NSUIGraphicsGetCurrentContext() -> CGContext? + { + return UIGraphicsGetCurrentContext() + } + + func NSUIGraphicsGetImageFromCurrentImageContext() -> NSUIImage! + { + return UIGraphicsGetImageFromCurrentImageContext() + } + + func NSUIGraphicsPushContext(_ context: CGContext) + { + UIGraphicsPushContext(context) + } + + func NSUIGraphicsPopContext() + { + UIGraphicsPopContext() + } + + func NSUIGraphicsEndImageContext() + { + UIGraphicsEndImageContext() + } + + func NSUIImagePNGRepresentation(_ image: NSUIImage) -> Data? + { + return UIImagePNGRepresentation(image) + } + + func NSUIImageJPEGRepresentation(_ image: NSUIImage, _ quality: CGFloat = 0.8) -> Data? + { + return UIImageJPEGRepresentation(image, quality) + } + + func NSUIMainScreen() -> NSUIScreen? + { + return NSUIScreen.main + } + + func NSUIGraphicsBeginImageContextWithOptions(_ size: CGSize, _ opaque: Bool, _ scale: CGFloat) + { + UIGraphicsBeginImageContextWithOptions(size, opaque, scale) + } + +#endif + +#if os(OSX) + import Cocoa + import Quartz + + public typealias NSUIFont = NSFont + public typealias NSUIColor = NSColor + public typealias NSUIEvent = NSEvent + public typealias NSUITouch = NSTouch + public typealias NSUIImage = NSImage + public typealias NSUIScrollView = NSScrollView + public typealias NSUIGestureRecognizer = NSGestureRecognizer + public typealias NSUIGestureRecognizerState = NSGestureRecognizer.State + public typealias NSUIGestureRecognizerDelegate = NSGestureRecognizerDelegate + public typealias NSUITapGestureRecognizer = NSClickGestureRecognizer + public typealias NSUIPanGestureRecognizer = NSPanGestureRecognizer + public typealias NSUIPinchGestureRecognizer = NSMagnificationGestureRecognizer + public typealias NSUIRotationGestureRecognizer = NSRotationGestureRecognizer + public typealias NSUIScreen = NSScreen + + /** On OS X there is no CADisplayLink. Use a 60 fps timer to render the animations. */ + public class NSUIDisplayLink + { + private var timer: Timer? + private var displayLink: CVDisplayLink? + private var _timestamp: CFTimeInterval = 0.0 + + private weak var _target: AnyObject? + private var _selector: Selector + + public var timestamp: CFTimeInterval + { + return _timestamp + } + + init(target: AnyObject, selector: Selector) + { + _target = target + _selector = selector + + if CVDisplayLinkCreateWithActiveCGDisplays(&displayLink) == kCVReturnSuccess + { + + CVDisplayLinkSetOutputCallback(displayLink!, { (displayLink, inNow, inOutputTime, flagsIn, flagsOut, userData) -> CVReturn in + + let _self = unsafeBitCast(userData, to: NSUIDisplayLink.self) + + _self._timestamp = CFAbsoluteTimeGetCurrent() + _self._target?.performSelector(onMainThread: _self._selector, with: _self, waitUntilDone: false) + + return kCVReturnSuccess + }, Unmanaged.passUnretained(self).toOpaque()) + } + else + { + timer = Timer(timeInterval: 1.0 / 60.0, target: target, selector: selector, userInfo: nil, repeats: true) + } + } + + deinit + { + stop() + } + + open func add(to runloop: RunLoop, forMode mode: RunLoopMode) + { + if displayLink != nil + { + CVDisplayLinkStart(displayLink!) + } + else if timer != nil + { + runloop.add(timer!, forMode: mode) + } + } + + open func remove(from: RunLoop, forMode: RunLoopMode) + { + stop() + } + + private func stop() + { + if displayLink != nil + { + CVDisplayLinkStop(displayLink!) + } + if timer != nil + { + timer?.invalidate() + } + } + } + + /** The 'tap' gesture is mapped to clicks. */ + extension NSUITapGestureRecognizer + { + final func nsuiNumberOfTouches() -> Int + { + return 1 + } + + final var nsuiNumberOfTapsRequired: Int + { + get + { + return self.numberOfClicksRequired + } + set + { + self.numberOfClicksRequired = newValue + } + } + } + + extension NSUIPanGestureRecognizer + { + final func nsuiNumberOfTouches() -> Int + { + return 1 + } + + /// FIXME: Currently there are no more than 1 touch in OSX gestures, and not way to create custom touch gestures. + final func nsuiLocationOfTouch(_ touch: Int, inView: NSView?) -> NSPoint + { + return super.location(in: inView) + } + } + + extension NSUIRotationGestureRecognizer + { + /// FIXME: Currently there are no velocities in OSX gestures, and not way to create custom touch gestures. + final var velocity: CGFloat + { + return 0.1 + } + + final var nsuiRotation: CGFloat + { + get { return -rotation } + set { rotation = -newValue } + } + } + + extension NSUIPinchGestureRecognizer + { + final var nsuiScale: CGFloat + { + get + { + return magnification + 1.0 + } + set + { + magnification = newValue - 1.0 + } + } + + /// FIXME: Currently there are no more than 1 touch in OSX gestures, and not way to create custom touch gestures. + final func nsuiLocationOfTouch(_ touch: Int, inView view: NSView?) -> NSPoint + { + return super.location(in: view) + } + } + + extension NSView + { + final var nsuiGestureRecognizers: [NSGestureRecognizer]? + { + return self.gestureRecognizers + } + } + + extension NSScrollView + { + var nsuiIsScrollEnabled: Bool + { + get { return scrollEnabled } + set { scrollEnabled = newValue } + } + } + + open class NSUIView: NSView + { + public final override var isFlipped: Bool + { + return true + } + + func setNeedsDisplay() + { + self.setNeedsDisplay(self.bounds) + } + + + public final override func touchesBegan(with event: NSEvent) + { + self.nsuiTouchesBegan(event.touches(matching: .any, in: self), withEvent: event) + } + + public final override func touchesEnded(with event: NSEvent) + { + self.nsuiTouchesEnded(event.touches(matching: .any, in: self), withEvent: event) + } + + public final override func touchesMoved(with event: NSEvent) + { + self.nsuiTouchesMoved(event.touches(matching: .any, in: self), withEvent: event) + } + + open override func touchesCancelled(with event: NSEvent) + { + self.nsuiTouchesCancelled(event.touches(matching: .any, in: self), withEvent: event) + } + + open func nsuiTouchesBegan(_ touches: Set, withEvent event: NSUIEvent?) + { + super.touchesBegan(with: event!) + } + + open func nsuiTouchesMoved(_ touches: Set, withEvent event: NSUIEvent?) + { + super.touchesMoved(with: event!) + } + + open func nsuiTouchesEnded(_ touches: Set, withEvent event: NSUIEvent?) + { + super.touchesEnded(with: event!) + } + + open func nsuiTouchesCancelled(_ touches: Set?, withEvent event: NSUIEvent?) + { + super.touchesCancelled(with: event!) + } + + open var backgroundColor: NSUIColor? + { + get + { + return self.layer?.backgroundColor == nil + ? nil + : NSColor(cgColor: self.layer!.backgroundColor!) + } + set + { + self.wantsLayer = true + self.layer?.backgroundColor = newValue == nil ? nil : newValue!.cgColor + } + } + + final var nsuiLayer: CALayer? + { + return self.layer + } + } + + extension NSFont + { + var lineHeight: CGFloat + { + // Not sure if this is right, but it looks okay + return self.boundingRectForFont.size.height + } + } + + extension NSScreen + { + final var nsuiScale: CGFloat + { + return self.backingScaleFactor + } + } + + extension NSImage + { + var cgImage: CGImage? + { + return self.cgImage(forProposedRect: nil, context: nil, hints: nil) + } + } + + extension NSTouch + { + /** Touch locations on OS X are relative to the trackpad, whereas on iOS they are actually *on* the view. */ + func locationInView(view: NSView) -> NSPoint + { + let n = self.normalizedPosition + let b = view.bounds + return NSPoint(x: b.origin.x + b.size.width * n.x, y: b.origin.y + b.size.height * n.y) + } + } + + extension NSScrollView + { + var scrollEnabled: Bool + { + get + { + return true + } + set + { + // FIXME: We can't disable scrolling it on OSX + } + } + } + + func NSUIGraphicsGetCurrentContext() -> CGContext? + { + return NSGraphicsContext.current?.cgContext + } + + func NSUIGraphicsPushContext(_ context: CGContext) + { + let cx = NSGraphicsContext(cgContext: context, flipped: true) + NSGraphicsContext.saveGraphicsState() + NSGraphicsContext.current = cx + } + + func NSUIGraphicsPopContext() + { + NSGraphicsContext.restoreGraphicsState() + } + + func NSUIImagePNGRepresentation(_ image: NSUIImage) -> Data? + { + image.lockFocus() + let rep = NSBitmapImageRep(focusedViewRect: NSMakeRect(0, 0, image.size.width, image.size.height)) + image.unlockFocus() + return rep?.representation(using: .png, properties: [:]) + } + + func NSUIImageJPEGRepresentation(_ image: NSUIImage, _ quality: CGFloat = 0.9) -> Data? + { + image.lockFocus() + let rep = NSBitmapImageRep(focusedViewRect: NSMakeRect(0, 0, image.size.width, image.size.height)) + image.unlockFocus() + return rep?.representation(using: .jpeg, properties: [NSBitmapImageRep.PropertyKey.compressionFactor: quality]) + } + + private var imageContextStack: [CGFloat] = [] + + func NSUIGraphicsBeginImageContextWithOptions(_ size: CGSize, _ opaque: Bool, _ scale: CGFloat) + { + var scale = scale + if scale == 0.0 + { + scale = NSScreen.main?.backingScaleFactor ?? 1.0 + } + + let width = Int(size.width * scale) + let height = Int(size.height * scale) + + if width > 0 && height > 0 + { + imageContextStack.append(scale) + + let colorSpace = CGColorSpaceCreateDeviceRGB() + + guard let ctx = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 4*width, space: colorSpace, bitmapInfo: (opaque ? CGImageAlphaInfo.noneSkipFirst.rawValue : CGImageAlphaInfo.premultipliedFirst.rawValue)) + else { return } + + ctx.concatenate(CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: CGFloat(height))) + ctx.scaleBy(x: scale, y: scale) + NSUIGraphicsPushContext(ctx) + } + } + + func NSUIGraphicsGetImageFromCurrentImageContext() -> NSUIImage? + { + if !imageContextStack.isEmpty + { + guard let ctx = NSUIGraphicsGetCurrentContext() + else { return nil } + + let scale = imageContextStack.last! + if let theCGImage = ctx.makeImage() + { + let size = CGSize(width: CGFloat(ctx.width) / scale, height: CGFloat(ctx.height) / scale) + let image = NSImage(cgImage: theCGImage, size: size) + return image + } + } + return nil + } + + func NSUIGraphicsEndImageContext() + { + if imageContextStack.last != nil + { + imageContextStack.removeLast() + NSUIGraphicsPopContext() + } + } + + func NSUIMainScreen() -> NSUIScreen? + { + return NSUIScreen.main + } + +#endif diff --git a/Pods/Charts/Source/Charts/Utils/Transformer.swift b/Pods/Charts/Source/Charts/Utils/Transformer.swift new file mode 100644 index 0000000..ca99fb2 --- /dev/null +++ b/Pods/Charts/Source/Charts/Utils/Transformer.swift @@ -0,0 +1,181 @@ +// +// Transformer.swift +// Charts +// +// 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 + +/// Transformer class that contains all matrices and is responsible for transforming values into pixels on the screen and backwards. +@objc(ChartTransformer) +open class Transformer: NSObject +{ + /// matrix to map the values to the screen pixels + internal var _matrixValueToPx = CGAffineTransform.identity + + /// matrix for handling the different offsets of the chart + internal var _matrixOffset = CGAffineTransform.identity + + internal var _viewPortHandler: ViewPortHandler + + @objc public init(viewPortHandler: ViewPortHandler) + { + _viewPortHandler = viewPortHandler + } + + /// Prepares the matrix that transforms values to pixels. Calculates the scale factors from the charts size and offsets. + @objc open func prepareMatrixValuePx(chartXMin: Double, deltaX: CGFloat, deltaY: CGFloat, chartYMin: Double) + { + var scaleX = (_viewPortHandler.contentWidth / deltaX) + var scaleY = (_viewPortHandler.contentHeight / deltaY) + + if CGFloat.infinity == scaleX + { + scaleX = 0.0 + } + if CGFloat.infinity == scaleY + { + scaleY = 0.0 + } + + // setup all matrices + _matrixValueToPx = CGAffineTransform.identity + _matrixValueToPx = _matrixValueToPx.scaledBy(x: scaleX, y: -scaleY) + _matrixValueToPx = _matrixValueToPx.translatedBy(x: CGFloat(-chartXMin), y: CGFloat(-chartYMin)) + } + + /// Prepares the matrix that contains all offsets. + @objc open func prepareMatrixOffset(inverted: Bool) + { + if !inverted + { + _matrixOffset = CGAffineTransform(translationX: _viewPortHandler.offsetLeft, y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) + } + else + { + _matrixOffset = CGAffineTransform(scaleX: 1.0, y: -1.0) + _matrixOffset = _matrixOffset.translatedBy(x: _viewPortHandler.offsetLeft, y: -_viewPortHandler.offsetTop) + } + } + + /// Transform an array of points with all matrices. + // VERY IMPORTANT: Keep matrix order "value-touch-offset" when transforming. + open func pointValuesToPixel(_ points: inout [CGPoint]) + { + let trans = valueToPixelMatrix + for i in 0 ..< points.count + { + points[i] = points[i].applying(trans) + } + } + + open func pointValueToPixel(_ point: inout CGPoint) + { + point = point.applying(valueToPixelMatrix) + } + + @objc open func pixelForValues(x: Double, y: Double) -> CGPoint + { + return CGPoint(x: x, y: y).applying(valueToPixelMatrix) + } + + /// Transform a rectangle with all matrices. + open func rectValueToPixel(_ r: inout CGRect) + { + r = r.applying(valueToPixelMatrix) + } + + /// Transform a rectangle with all matrices with potential animation phases. + open func rectValueToPixel(_ r: inout CGRect, phaseY: Double) + { + // multiply the height of the rect with the phase + var bottom = r.origin.y + r.size.height + bottom *= CGFloat(phaseY) + let top = r.origin.y * CGFloat(phaseY) + r.size.height = bottom - top + r.origin.y = top + + r = r.applying(valueToPixelMatrix) + } + + /// Transform a rectangle with all matrices. + open func rectValueToPixelHorizontal(_ r: inout CGRect) + { + r = r.applying(valueToPixelMatrix) + } + + /// Transform a rectangle with all matrices with potential animation phases. + open func rectValueToPixelHorizontal(_ r: inout CGRect, phaseY: Double) + { + // multiply the height of the rect with the phase + let left = r.origin.x * CGFloat(phaseY) + let right = (r.origin.x + r.size.width) * CGFloat(phaseY) + r.size.width = right - left + r.origin.x = left + + r = r.applying(valueToPixelMatrix) + } + + /// transforms multiple rects with all matrices + open func rectValuesToPixel(_ rects: inout [CGRect]) + { + let trans = valueToPixelMatrix + + for i in 0 ..< rects.count + { + rects[i] = rects[i].applying(trans) + } + } + + /// Transforms the given array of touch points (pixels) into values on the chart. + open func pixelsToValues(_ pixels: inout [CGPoint]) + { + let trans = pixelToValueMatrix + + for i in 0 ..< pixels.count + { + pixels[i] = pixels[i].applying(trans) + } + } + + /// Transforms the given touch point (pixels) into a value on the chart. + open func pixelToValues(_ pixel: inout CGPoint) + { + pixel = pixel.applying(pixelToValueMatrix) + } + + /// - returns: The x and y values in the chart at the given touch point + /// (encapsulated in a CGPoint). This method transforms pixel coordinates to + /// coordinates / values in the chart. + @objc open func valueForTouchPoint(_ point: CGPoint) -> CGPoint + { + return point.applying(pixelToValueMatrix) + } + + /// - returns: The x and y values in the chart at the given touch point + /// (x/y). This method transforms pixel coordinates to + /// coordinates / values in the chart. + @objc open func valueForTouchPoint(x: CGFloat, y: CGFloat) -> CGPoint + { + return CGPoint(x: x, y: y).applying(pixelToValueMatrix) + } + + @objc open var valueToPixelMatrix: CGAffineTransform + { + return + _matrixValueToPx.concatenating(_viewPortHandler.touchMatrix + ).concatenating(_matrixOffset + ) + } + + @objc open var pixelToValueMatrix: CGAffineTransform + { + return valueToPixelMatrix.inverted() + } +} diff --git a/Pods/Charts/Source/Charts/Utils/TransformerHorizontalBarChart.swift b/Pods/Charts/Source/Charts/Utils/TransformerHorizontalBarChart.swift new file mode 100644 index 0000000..d7e657b --- /dev/null +++ b/Pods/Charts/Source/Charts/Utils/TransformerHorizontalBarChart.swift @@ -0,0 +1,32 @@ +// +// TransformerHorizontalBarChart.swift +// Charts +// +// 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 + +@objc(ChartTransformerHorizontalBarChart) +open class TransformerHorizontalBarChart: Transformer +{ + /// Prepares the matrix that contains all offsets. + open override func prepareMatrixOffset(inverted: Bool) + { + if !inverted + { + _matrixOffset = CGAffineTransform(translationX: _viewPortHandler.offsetLeft, y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) + } + else + { + _matrixOffset = CGAffineTransform(scaleX: -1.0, y: 1.0) + _matrixOffset = _matrixOffset.translatedBy(x: -(_viewPortHandler.chartWidth - _viewPortHandler.offsetRight), + y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) + } + } +} diff --git a/Pods/Charts/Source/Charts/Utils/ViewPortHandler.swift b/Pods/Charts/Source/Charts/Utils/ViewPortHandler.swift new file mode 100755 index 0000000..4fde6ec --- /dev/null +++ b/Pods/Charts/Source/Charts/Utils/ViewPortHandler.swift @@ -0,0 +1,553 @@ +// +// ViewPortHandler.swift +// Charts +// +// 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 + +/// Class that contains information about the charts current viewport settings, including offsets, scale & translation levels, ... +@objc(ChartViewPortHandler) +open class ViewPortHandler: NSObject +{ + /// matrix used for touch events + private var _touchMatrix = CGAffineTransform.identity + + /// this rectangle defines the area in which graph values can be drawn + private var _contentRect = CGRect() + + private var _chartWidth = CGFloat(0.0) + private var _chartHeight = CGFloat(0.0) + + /// minimum scale value on the y-axis + private var _minScaleY = CGFloat(1.0) + + /// maximum scale value on the y-axis + private var _maxScaleY = CGFloat.greatestFiniteMagnitude + + /// minimum scale value on the x-axis + private var _minScaleX = CGFloat(1.0) + + /// maximum scale value on the x-axis + private var _maxScaleX = CGFloat.greatestFiniteMagnitude + + /// contains the current scale factor of the x-axis + private var _scaleX = CGFloat(1.0) + + /// contains the current scale factor of the y-axis + private var _scaleY = CGFloat(1.0) + + /// current translation (drag distance) on the x-axis + private var _transX = CGFloat(0.0) + + /// current translation (drag distance) on the y-axis + private var _transY = CGFloat(0.0) + + /// offset that allows the chart to be dragged over its bounds on the x-axis + private var _transOffsetX = CGFloat(0.0) + + /// offset that allows the chart to be dragged over its bounds on the x-axis + private var _transOffsetY = CGFloat(0.0) + + /// Constructor - don't forget calling setChartDimens(...) + @objc public init(width: CGFloat, height: CGFloat) + { + super.init() + + setChartDimens(width: width, height: height) + } + + @objc open func setChartDimens(width: CGFloat, height: CGFloat) + { + let offsetLeft = self.offsetLeft + let offsetTop = self.offsetTop + let offsetRight = self.offsetRight + let offsetBottom = self.offsetBottom + + _chartHeight = height + _chartWidth = width + + restrainViewPort(offsetLeft: offsetLeft, offsetTop: offsetTop, offsetRight: offsetRight, offsetBottom: offsetBottom) + } + + @objc open var hasChartDimens: Bool + { + if _chartHeight > 0.0 && _chartWidth > 0.0 + { + return true + } + else + { + return false + } + } + + @objc open func restrainViewPort(offsetLeft: CGFloat, offsetTop: CGFloat, offsetRight: CGFloat, offsetBottom: CGFloat) + { + _contentRect.origin.x = offsetLeft + _contentRect.origin.y = offsetTop + _contentRect.size.width = _chartWidth - offsetLeft - offsetRight + _contentRect.size.height = _chartHeight - offsetBottom - offsetTop + } + + @objc open var offsetLeft: CGFloat + { + return _contentRect.origin.x + } + + @objc open var offsetRight: CGFloat + { + return _chartWidth - _contentRect.size.width - _contentRect.origin.x + } + + @objc open var offsetTop: CGFloat + { + return _contentRect.origin.y + } + + @objc open var offsetBottom: CGFloat + { + return _chartHeight - _contentRect.size.height - _contentRect.origin.y + } + + @objc open var contentTop: CGFloat + { + return _contentRect.origin.y + } + + @objc open var contentLeft: CGFloat + { + return _contentRect.origin.x + } + + @objc open var contentRight: CGFloat + { + return _contentRect.origin.x + _contentRect.size.width + } + + @objc open var contentBottom: CGFloat + { + return _contentRect.origin.y + _contentRect.size.height + } + + @objc open var contentWidth: CGFloat + { + return _contentRect.size.width + } + + @objc open var contentHeight: CGFloat + { + return _contentRect.size.height + } + + @objc open var contentRect: CGRect + { + return _contentRect + } + + @objc open var contentCenter: CGPoint + { + return CGPoint(x: _contentRect.origin.x + _contentRect.size.width / 2.0, y: _contentRect.origin.y + _contentRect.size.height / 2.0) + } + + @objc open var chartHeight: CGFloat + { + return _chartHeight + } + + @objc open var chartWidth: CGFloat + { + return _chartWidth + } + + // MARK: - Scaling/Panning etc. + + /// Zooms by the specified zoom factors. + @objc open func zoom(scaleX: CGFloat, scaleY: CGFloat) -> CGAffineTransform + { + return _touchMatrix.scaledBy(x: scaleX, y: scaleY) + } + + /// Zooms around the specified center + @objc open func zoom(scaleX: CGFloat, scaleY: CGFloat, x: CGFloat, y: CGFloat) -> CGAffineTransform + { + var matrix = _touchMatrix.translatedBy(x: x, y: y) + matrix = matrix.scaledBy(x: scaleX, y: scaleY) + matrix = matrix.translatedBy(x: -x, y: -y) + return matrix + } + + /// Zooms in by 1.4, x and y are the coordinates (in pixels) of the zoom center. + @objc open func zoomIn(x: CGFloat, y: CGFloat) -> CGAffineTransform + { + return zoom(scaleX: 1.4, scaleY: 1.4, x: x, y: y) + } + + /// Zooms out by 0.7, x and y are the coordinates (in pixels) of the zoom center. + @objc open func zoomOut(x: CGFloat, y: CGFloat) -> CGAffineTransform + { + return zoom(scaleX: 0.7, scaleY: 0.7, x: x, y: y) + } + + /// Zooms out to original size. + @objc open func resetZoom() -> CGAffineTransform + { + return zoom(scaleX: 1.0, scaleY: 1.0, x: 0.0, y: 0.0) + } + + /// Sets the scale factor to the specified values. + @objc open func setZoom(scaleX: CGFloat, scaleY: CGFloat) -> CGAffineTransform + { + var matrix = _touchMatrix + matrix.a = scaleX + matrix.d = scaleY + return matrix + } + + /// Sets the scale factor to the specified values. x and y is pivot. + @objc open func setZoom(scaleX: CGFloat, scaleY: CGFloat, x: CGFloat, y: CGFloat) -> CGAffineTransform + { + var matrix = _touchMatrix + matrix.a = 1.0 + matrix.d = 1.0 + matrix = matrix.translatedBy(x: x, y: y) + matrix = matrix.scaledBy(x: scaleX, y: scaleY) + matrix = matrix.translatedBy(x: -x, y: -y) + return matrix + } + + /// Resets all zooming and dragging and makes the chart fit exactly it's bounds. + @objc open func fitScreen() -> CGAffineTransform + { + _minScaleX = 1.0 + _minScaleY = 1.0 + + return CGAffineTransform.identity + } + + /// Translates to the specified point. + @objc open func translate(pt: CGPoint) -> CGAffineTransform + { + let translateX = pt.x - offsetLeft + let translateY = pt.y - offsetTop + + let matrix = _touchMatrix.concatenating(CGAffineTransform(translationX: -translateX, y: -translateY)) + + return matrix + } + + /// Centers the viewport around the specified position (x-index and y-value) in the chart. + /// Centering the viewport outside the bounds of the chart is not possible. + /// Makes most sense in combination with the setScaleMinima(...) method. + @objc open func centerViewPort(pt: CGPoint, chart: ChartViewBase) + { + let translateX = pt.x - offsetLeft + let translateY = pt.y - offsetTop + + let matrix = _touchMatrix.concatenating(CGAffineTransform(translationX: -translateX, y: -translateY)) + refresh(newMatrix: matrix, chart: chart, invalidate: true) + } + + /// call this method to refresh the graph with a given matrix + @objc @discardableResult open func refresh(newMatrix: CGAffineTransform, chart: ChartViewBase, invalidate: Bool) -> CGAffineTransform + { + _touchMatrix = newMatrix + + // make sure scale and translation are within their bounds + limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) + + chart.setNeedsDisplay() + + return _touchMatrix + } + + /// limits the maximum scale and X translation of the given matrix + private func limitTransAndScale(matrix: inout CGAffineTransform, content: CGRect?) + { + // min scale-x is 1 + _scaleX = min(max(_minScaleX, matrix.a), _maxScaleX) + + // min scale-y is 1 + _scaleY = min(max(_minScaleY, matrix.d), _maxScaleY) + + + var width: CGFloat = 0.0 + var height: CGFloat = 0.0 + + if content != nil + { + width = content!.width + height = content!.height + } + + let maxTransX = -width * (_scaleX - 1.0) + _transX = min(max(matrix.tx, maxTransX - _transOffsetX), _transOffsetX) + + let maxTransY = height * (_scaleY - 1.0) + _transY = max(min(matrix.ty, maxTransY + _transOffsetY), -_transOffsetY) + + matrix.tx = _transX + matrix.a = _scaleX + matrix.ty = _transY + matrix.d = _scaleY + } + + /// Sets the minimum scale factor for the x-axis + @objc open func setMinimumScaleX(_ xScale: CGFloat) + { + var newValue = xScale + + if newValue < 1.0 + { + newValue = 1.0 + } + + _minScaleX = newValue + + limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) + } + + /// Sets the maximum scale factor for the x-axis + @objc open func setMaximumScaleX(_ xScale: CGFloat) + { + var newValue = xScale + + if newValue == 0.0 + { + newValue = CGFloat.greatestFiniteMagnitude + } + + _maxScaleX = newValue + + limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) + } + + /// Sets the minimum and maximum scale factors for the x-axis + @objc open func setMinMaxScaleX(minScaleX: CGFloat, maxScaleX: CGFloat) + { + var newMin = minScaleX + var newMax = maxScaleX + + if newMin < 1.0 + { + newMin = 1.0 + } + if newMax == 0.0 + { + newMax = CGFloat.greatestFiniteMagnitude + } + + _minScaleX = newMin + _maxScaleX = maxScaleX + + limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) + } + + /// Sets the minimum scale factor for the y-axis + @objc open func setMinimumScaleY(_ yScale: CGFloat) + { + var newValue = yScale + + if newValue < 1.0 + { + newValue = 1.0 + } + + _minScaleY = newValue + + limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) + } + + /// Sets the maximum scale factor for the y-axis + @objc open func setMaximumScaleY(_ yScale: CGFloat) + { + var newValue = yScale + + if newValue == 0.0 + { + newValue = CGFloat.greatestFiniteMagnitude + } + + _maxScaleY = newValue + + limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) + } + + @objc open func setMinMaxScaleY(minScaleY: CGFloat, maxScaleY: CGFloat) + { + var minScaleY = minScaleY, maxScaleY = maxScaleY + + if minScaleY < 1.0 + { + minScaleY = 1.0 + } + + if maxScaleY == 0.0 + { + maxScaleY = CGFloat.greatestFiniteMagnitude + } + + _minScaleY = minScaleY + _maxScaleY = maxScaleY + + limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) + } + + @objc open var touchMatrix: CGAffineTransform + { + return _touchMatrix + } + + // MARK: - Boundaries Check + + @objc open func isInBoundsX(_ x: CGFloat) -> Bool + { + return isInBoundsLeft(x) && isInBoundsRight(x) + } + + @objc open func isInBoundsY(_ y: CGFloat) -> Bool + { + return isInBoundsTop(y) && isInBoundsBottom(y) + } + + @objc open func isInBounds(x: CGFloat, y: CGFloat) -> Bool + { + return isInBoundsX(x) && isInBoundsY(y) + } + + @objc open func isInBoundsLeft(_ x: CGFloat) -> Bool + { + return _contentRect.origin.x <= x + 1.0 + } + + @objc open func isInBoundsRight(_ x: CGFloat) -> Bool + { + let x = floor(x * 100.0) / 100.0 + return (_contentRect.origin.x + _contentRect.size.width) >= x - 1.0 + } + + @objc open func isInBoundsTop(_ y: CGFloat) -> Bool + { + return _contentRect.origin.y <= y + } + + @objc open func isInBoundsBottom(_ y: CGFloat) -> Bool + { + let normalizedY = floor(y * 100.0) / 100.0 + return (_contentRect.origin.y + _contentRect.size.height) >= normalizedY + } + + /// - returns: The current x-scale factor + @objc open var scaleX: CGFloat + { + return _scaleX + } + + /// - returns: The current y-scale factor + @objc open var scaleY: CGFloat + { + return _scaleY + } + + /// - returns: The minimum x-scale factor + @objc open var minScaleX: CGFloat + { + return _minScaleX + } + + /// - returns: The minimum y-scale factor + @objc open var minScaleY: CGFloat + { + return _minScaleY + } + + /// - returns: The minimum x-scale factor + @objc open var maxScaleX: CGFloat + { + return _maxScaleX + } + + /// - returns: The minimum y-scale factor + @objc open var maxScaleY: CGFloat + { + return _maxScaleY + } + + /// - returns: The translation (drag / pan) distance on the x-axis + @objc open var transX: CGFloat + { + return _transX + } + + /// - returns: The translation (drag / pan) distance on the y-axis + @objc open var transY: CGFloat + { + return _transY + } + + /// if the chart is fully zoomed out, return true + @objc open var isFullyZoomedOut: Bool + { + return isFullyZoomedOutX && isFullyZoomedOutY + } + + /// - returns: `true` if the chart is fully zoomed out on it's y-axis (vertical). + @objc open var isFullyZoomedOutY: Bool + { + return !(_scaleY > _minScaleY || _minScaleY > 1.0) + } + + /// - returns: `true` if the chart is fully zoomed out on it's x-axis (horizontal). + @objc open var isFullyZoomedOutX: Bool + { + return !(_scaleX > _minScaleX || _minScaleX > 1.0) + } + + /// Set an offset in pixels that allows the user to drag the chart over it's bounds on the x-axis. + @objc open func setDragOffsetX(_ offset: CGFloat) + { + _transOffsetX = offset + } + + /// Set an offset in pixels that allows the user to drag the chart over it's bounds on the y-axis. + @objc open func setDragOffsetY(_ offset: CGFloat) + { + _transOffsetY = offset + } + + /// - returns: `true` if both drag offsets (x and y) are zero or smaller. + @objc open var hasNoDragOffset: Bool + { + return _transOffsetX <= 0.0 && _transOffsetY <= 0.0 + } + + /// - returns: `true` if the chart is not yet fully zoomed out on the x-axis + @objc open var canZoomOutMoreX: Bool + { + return _scaleX > _minScaleX + } + + /// - returns: `true` if the chart is not yet fully zoomed in on the x-axis + @objc open var canZoomInMoreX: Bool + { + return _scaleX < _maxScaleX + } + + /// - returns: `true` if the chart is not yet fully zoomed out on the y-axis + @objc open var canZoomOutMoreY: Bool + { + return _scaleY > _minScaleY + } + + /// - returns: `true` if the chart is not yet fully zoomed in on the y-axis + @objc open var canZoomInMoreY: Bool + { + return _scaleY < _maxScaleY + } +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 7a57479..ce0635f 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -3,6 +3,9 @@ PODS: - ChameleonFramework (2.1.0): - ChameleonFramework/Default (= 2.1.0) - ChameleonFramework/Default (2.1.0) + - Charts (3.1.1): + - Charts/Core (= 3.1.1) + - Charts/Core (3.1.1) - Firebase/Auth (5.2.0): - Firebase/CoreOnly - FirebaseAuth (= 5.0.1) @@ -40,15 +43,15 @@ PODS: - nanopb/encode (= 0.3.8) - nanopb/decode (0.3.8) - nanopb/encode (0.3.8) - - PromiseKit/Alamofire (6.2.8): + - PromiseKit/Alamofire (6.3.0): - Alamofire (~> 4.0) - PromiseKit/CorePromise - - PromiseKit/CorePromise (6.2.8) - - Realm (3.7.0): - - Realm/Headers (= 3.7.0) - - Realm/Headers (3.7.0) - - RealmSwift (3.7.0): - - Realm (= 3.7.0) + - PromiseKit/CorePromise (6.3.0) + - Realm (3.7.1): + - Realm/Headers (= 3.7.1) + - Realm/Headers (3.7.1) + - RealmSwift (3.7.1): + - Realm (= 3.7.1) - SideMenu (4.0.0) - SVProgressHUD (2.2.5) - SwiftChart (1.0.1) @@ -57,6 +60,7 @@ PODS: DEPENDENCIES: - Alamofire - ChameleonFramework + - Charts - Firebase/Auth - Firebase/Core - Firebase/Database @@ -72,6 +76,7 @@ SPEC REPOS: https://github.com/cocoapods/specs.git: - Alamofire - ChameleonFramework + - Charts - Firebase - FirebaseAnalytics - FirebaseAuth @@ -94,6 +99,7 @@ SPEC REPOS: SPEC CHECKSUMS: Alamofire: e4fa87002c137ba2d8d634d2c51fabcda0d5c223 ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64 + Charts: 90a4d61da0f6e06684c591e3bcab11940fe61736 Firebase: 25ed0412036d7d008568d1fb4d2e9d81ea8a0a2c FirebaseAnalytics: b3628aea54c50464c32c393fb2ea032566e7ecc2 FirebaseAuth: 463b8ce33bd5d05f706dcd4615499e3212b4132b @@ -105,14 +111,14 @@ SPEC CHECKSUMS: Kingfisher: 976d828df2b24834c6a3f2fc4d82cdbd26552be1 leveldb-library: 08cba283675b7ed2d99629a4bc5fd052cd2bb6a5 nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3 - PromiseKit: 6788ce1a0ed5448b83d4aaf56b9fc49fb7647d32 - Realm: 4998c6ced1ea15b3792f273b18f8e6faaf935b5c - RealmSwift: 7dc2ab780b9742a1fc7469b2e4776b9773e2e825 + PromiseKit: cf84bbb1235a61473b326c5cf0b41f6828f87ba5 + Realm: 906be37d52f17f25484ac01643a7f26a9d3bfbd5 + RealmSwift: 1c2b6bae3dc55bb87e080ffa96537d71442f6dce SideMenu: 70ee5657df63ec3382660ec4ef470bf1cf5db07d SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 SwiftChart: ba767a678d568a5ee22d419e146a0582865e1aff SwiftyJSON: c29297daf073d2aa016295d5809cdd68045c39b3 -PODFILE CHECKSUM: f920b0139378aa95335e4e152b9daa8cfaf65705 +PODFILE CHECKSUM: 36ed7324164643785df43e440238496dcacc4f53 COCOAPODS: 1.5.3 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index e9ff8b4..de6f87a 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -8,983 +8,1107 @@ /* Begin PBXBuildFile section */ 000928836FB1FB0C389F35F7A51AD590 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBAA5BACA9745702C885EB1AF32FA673 /* Security.framework */; }; - 00371406F42E69744071C443A4B5BABE /* FOverwrite.m in Sources */ = {isa = PBXBuildFile; fileRef = F464260936E9C53C8EEE939385034569 /* FOverwrite.m */; }; - 006EC02261DDCEC16F742C5FA3B77FC2 /* FPathIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 811E448B021B0518BB2802E83B759A48 /* FPathIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0096C6816AC3D92834AB65C49518C177 /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DD6C39190CCBFB2CC1FC01CA4F58CEA /* ImageView+Kingfisher.swift */; }; - 014358520CA85C42F9314B1D1885F6C0 /* FIRAuthExceptionUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 45900142225A457954B103E20C8837B1 /* FIRAuthExceptionUtils.m */; }; - 0170E7BADC92F540E2F2C8D454263332 /* memtable.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B51BC483E61688364E86FD7AC9706CD /* memtable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02D34DB1F8CC131912C5D96F614F3209 /* FIRVerifyPasswordResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = E1EAE2D6A9FA32C97243022C45926B2A /* FIRVerifyPasswordResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02E63FEE2EC84965D9F74A810C9806BC /* FTreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 09AA5AA89D97D1BF16F36C62FDD2AD5F /* FTreeNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0336C81C40377ACD4433BE6A67F4F3E0 /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = EA22307FBAF5F149F33DD2803ACF53C4 /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 033B6B31DDA7EC12A698D84D1BBA0132 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = C15D16D620E6F6BDBB420CAF601AA89C /* UIView+ChameleonPrivate.m */; }; - 038E56E49D9A8389DABB332D312D6A74 /* FIndexedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E96D78B8853458DE35BFBB8305779746 /* FIndexedNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 03A25B64C399E9BE518D84FAE02B29D5 /* FLLRBEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = F237BFE530F87F9D29EB20B41D6E7EA7 /* FLLRBEmptyNode.m */; }; - 03E0A134F1DDF33EA16F004F1A230CA1 /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1645A9E9EEE934729E23AB96051EB3AD /* FormatIndicatedCacheSerializer.swift */; }; - 041746D643F39F55E400B3349BC3CD8B /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 60A19E52AC2DF8B18AA847F2F20E2D2F /* logging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0558C2AA0B7038469C8D4FD9CE634E28 /* FIRPhoneAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D4BB2F4FF61EF66313B797DD844EFF0 /* FIRPhoneAuthCredential.m */; }; - 0560E400A9CE378F6377B1875434E6EC /* FTupleTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 5913FC3CB687FC271619277DCC1F2737 /* FTupleTransaction.m */; }; + 00371406F42E69744071C443A4B5BABE /* FOverwrite.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B1D1A30BE87C5658205E09FF83A7CB9 /* FOverwrite.m */; }; + 006EC02261DDCEC16F742C5FA3B77FC2 /* FPathIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 033FC3396ADB83FC83AA7513D3D464A1 /* FPathIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0096C6816AC3D92834AB65C49518C177 /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8638B90F982D4A1D791C02A4DC43FE0D /* ImageView+Kingfisher.swift */; }; + 00D7C6B81EE7790B2484C56D8AD2DBDD /* RLMArray.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D7333BA6FC2F09AF434AABBB50A768A3 /* RLMArray.h */; }; + 00F47E1BF1D75C714428D0E2F530E48F /* when.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A0B7E87F87386642B81876C540525A /* when.swift */; }; + 014358520CA85C42F9314B1D1885F6C0 /* FIRAuthExceptionUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F85F70CAC842B677AAF9438E29482998 /* FIRAuthExceptionUtils.m */; }; + 0170E7BADC92F540E2F2C8D454263332 /* memtable.h in Headers */ = {isa = PBXBuildFile; fileRef = 4047F4A05311DF2B78751ADBE1AC74BD /* memtable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02CBF074B0141697596E981D224380F8 /* PromiseKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F71A9417DEDCA49A548C42921E4DBCAD /* PromiseKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02D34DB1F8CC131912C5D96F614F3209 /* FIRVerifyPasswordResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 96851780AF6A88D586AAC94BFF34D705 /* FIRVerifyPasswordResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02E1DA68C0A62892BB5ECBE3041954BD /* RLMObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = 932C05AC017722E6D90C5B9DEC225894 /* RLMObject.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 02E63FEE2EC84965D9F74A810C9806BC /* FTreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2457D6701A727AD6979D51B5D4CA8B77 /* FTreeNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02F884A5BF39328B21CC5CEA3AE8904C /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E74BF9B3F916FD5E44DD1C0F035D0E8 /* TriangleShapeRenderer.swift */; }; + 03340225FEDF44302C7DB088D91C17D4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + 0336C81C40377ACD4433BE6A67F4F3E0 /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A2F2C82A25177D08A28BB5459B84C0A /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 033B6B31DDA7EC12A698D84D1BBA0132 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = BD6FBB26D133F3B1F2C9FD3DFF79D3D5 /* UIView+ChameleonPrivate.m */; }; + 035D72BDA1849FC0F1DF59E78FAF8F99 /* RLMQueryUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7CF0301A467BA1C7EF4C001F2C36F460 /* RLMQueryUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 038E56E49D9A8389DABB332D312D6A74 /* FIndexedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F5F203A63679CF16684B77792FF7F9A /* FIndexedNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 03A25B64C399E9BE518D84FAE02B29D5 /* FLLRBEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = C7873C4FCCE3800FCA330A84DA3846DE /* FLLRBEmptyNode.m */; }; + 03E0A134F1DDF33EA16F004F1A230CA1 /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944F8C52012913D714492B1F2774F94B /* FormatIndicatedCacheSerializer.swift */; }; + 041746D643F39F55E400B3349BC3CD8B /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F1839B46A9B719413A9DC3FB78066A /* logging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04DBDF6FFE93B305F87FE4B551E0B027 /* race.m in Sources */ = {isa = PBXBuildFile; fileRef = 990623AED0F8E420338425030236989B /* race.m */; }; + 0558C2AA0B7038469C8D4FD9CE634E28 /* FIRPhoneAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C59A83B471A80E86C01C72ADDBC60A2 /* FIRPhoneAuthCredential.m */; }; + 0560E400A9CE378F6377B1875434E6EC /* FTupleTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EA08ED63DF6DAB479975D9F92E22AEC /* FTupleTransaction.m */; }; 05B1F02560378D28FEBD4E8F6D293216 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 05DC6BC69BDF2B589FE7842D7FC1C324 /* block.cc in Sources */ = {isa = PBXBuildFile; fileRef = FFCE7CA270F7F0DFB617B70FD87B18EB /* block.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 062E9940895C0E47431AA73738AB7C14 /* FTrackedQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 28275241D6047A1620E7671A606A284B /* FTrackedQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 064FDD771AFFCBD25091CF39EF7E6644 /* RLMResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9FE7AEF7CA541FD67F39933A4390948B /* RLMResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 070A8AB3F5B298FE2319584B48E430DE /* FIRVerifyAssertionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F47CC06334DD7C078969F817BC4E3238 /* FIRVerifyAssertionResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0731DB9D1A3DDFC73757353A5553CE7A /* FNamedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 022E927034BF829787B7C39142FAEA7F /* FNamedNode.m */; }; - 0821C899DF347F483F5690BEEBDBB608 /* RLMObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33CD335E9D0AEF1131817DF3B362D6A4 /* RLMObject.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 083B6A57E973A56C7C900A1480DF5078 /* RLMCollection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2EBF93A215B2032494BF204BA394E419 /* RLMCollection.h */; }; - 085056BBC01021952A94753E1F391938 /* FIRUserInfoImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 466FEFCBFC76BDE5BC10B8EC12AD813E /* FIRUserInfoImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 086BAF807381DF1BE27CA110671A28E9 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = A68C55C04B542FE304E7B417B1BD6D00 /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0874436CD4E3BBBBA79F2FA74BDF8126 /* when.swift in Sources */ = {isa = PBXBuildFile; fileRef = 764C857A9B00BB35B14D1BB6C4B4745F /* when.swift */; }; - 08E1454A5F6F16777FD50E681EB5B70B /* FSnapshotHolder.m in Sources */ = {isa = PBXBuildFile; fileRef = C1E8E706E03B1B21D1CB82874B6BC5C4 /* FSnapshotHolder.m */; }; + 05DC6BC69BDF2B589FE7842D7FC1C324 /* block.cc in Sources */ = {isa = PBXBuildFile; fileRef = E0DCCF885A83486AD672608650AB8A39 /* block.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 062E9940895C0E47431AA73738AB7C14 /* FTrackedQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = B3644AF3A4DE98E81CC7A4444853BF87 /* FTrackedQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 06DE75C7EBC24C0F4DADA742C1F918C8 /* RLMRealm+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 49083177C89E42C5AFCAAE6801E470C3 /* RLMRealm+Sync.h */; }; + 070A8AB3F5B298FE2319584B48E430DE /* FIRVerifyAssertionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B6AB976E1A4D392FBA7CCF6357945B /* FIRVerifyAssertionResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0731DB9D1A3DDFC73757353A5553CE7A /* FNamedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 684BCEEF0473DF6E9AD890F510F8F754 /* FNamedNode.m */; }; + 07791CBB2F51E5BA87C08D4BC1F7C070 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92084CC78383927905E5D5449826ABE1 /* RadarChartDataSet.swift */; }; + 0779E9756899A25CA332C9E3AE8B924C /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA0AC69818903B4ECE5D8079A0F5CEFA /* ScatterChartDataSet.swift */; }; + 079E02F3637CA44EB3E6DCA1802D3E92 /* RLMRealmConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 403605E683C012ED28DE82C12480818B /* RLMRealmConfiguration_Private.h */; }; + 085056BBC01021952A94753E1F391938 /* FIRUserInfoImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 64955AB134B400739094B4DE34FE2674 /* FIRUserInfoImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 086BAF807381DF1BE27CA110671A28E9 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 45BC269B6F04B95CD1E4A0A1EA849352 /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08B298D9DA09D7AE42609DCEB437104F /* RLMJSONModels.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F42BF843090DB9B2984C9E346B5F5F /* RLMJSONModels.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 08E1454A5F6F16777FD50E681EB5B70B /* FSnapshotHolder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A3844CA270A7CED9BA4790A5AC267BF /* FSnapshotHolder.m */; }; 090E8FAE5CF5D1A4B82019A85F8A7AC3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBAA5BACA9745702C885EB1AF32FA673 /* Security.framework */; }; - 09B60E27E2212ADE93662910C10F3048 /* FKeepSyncedEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 57C45DAA68B153310BC786B46C0A2B7B /* FKeepSyncedEventRegistration.m */; }; - 0A53C89C8E100B2ECE08C55ECD459C1A /* FIRDataSnapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = C05C63EB66F2F185D359CF8BFADAF89D /* FIRDataSnapshot.m */; }; - 0A61472768C589EBA8445C4B4A39CA9D /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C72747189B551B974043E9183C55F8 /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A665232AD79623042B394DE00FDE273 /* FDataEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EC2388019816A657DA80E56F3C271AC /* FDataEvent.m */; }; - 0A79729F68147321095996A4541E9317 /* table_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 21BA4F344F529178CDFB1ABA0D06908B /* table_builder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AAC14E10C620CAE87A46225F028B2D4 /* FIRAuthRPCRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C0166981D977D45B84F88D65A9AC3BE /* FIRAuthRPCRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0ACCF958380BA964367E4D6324B12704 /* FIRAuthURLPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8836D06E2AC67B606D19835C0351C275 /* FIRAuthURLPresenter.m */; }; - 0B3406885244014CC760ACE038EC84E0 /* object_store.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CA2D7CBCBB66F21DDA384433B6F45CDE /* object_store.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 0B7EFA323E0D63E78B803F0A34C1FD40 /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 4351F9D1008713ABC051703842527BD1 /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B916B7D5A78D907E23E760C62C564F5 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE853070D0387E8AC5441618DC1DF9B /* Configuration.swift */; }; - 0CEE168C1850E859F79931CCDF51452A /* FTupleObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = A0531D91E7CFF1C4DF621C3246321F3E /* FTupleObjects.m */; }; - 0D34670655A8C04C6E5B06EEBEB10404 /* RLMProperty_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AC29CD8C22A2463B88B3F529DD41B08 /* RLMProperty_Private.h */; }; - 0D3C851619493E588B15999257678E42 /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = C721E75AB963F4557DA58C17AA05083A /* GTMSessionFetcherLogging.m */; }; - 0DC5EA55DBA03FCF723077FDF1FCE074 /* env_posix_test_helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5062AFA7A17C69061B025939D60DBD22 /* env_posix_test_helper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0DF650D6DCDBA610B18DFB9D6B134426 /* FSnapshotHolder.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D5A4E05152C08B2026704262E08F82 /* FSnapshotHolder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E345887C2458F446393A8E03280E158 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F2A5B73006D792A2363C64C06E8316A /* Box.swift */; }; - 0EA175867A93CAC7A08DF860C971722E /* FRepoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B4F6E28284FF624BFF2C716DC39024F /* FRepoManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F116389F3A4F25BD4D75A3FDA307612 /* FIRUser_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A4076E806FD4F791424B8134D10112 /* FIRUser_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F35CD94AB53C7C6F709F16B1492BAC4 /* FIRResetPasswordResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BB01A195A8A6F9F055491CE90A3B105C /* FIRResetPasswordResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F5506D3748C3B08A4A8E3497499D985 /* FSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1B226B9F61815FD59B1A67E1CC7684 /* FSRWebSocket.m */; }; - 0F6DA24F5DE57DB6468780577AB9BC50 /* FQueryParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 53C820A895299ACA19C3562A5C0607B1 /* FQueryParams.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 103228D906B112AA75562E8B17179127 /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB354B2F7FC0718FC09C1C020E00D73F /* Indicator.swift */; }; - 10444E74B25D40E35BF32CEC852A6C7E /* FTupleFirebase.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B3B6D04CD804A2DCFD0CA0DA33A568D /* FTupleFirebase.m */; }; - 104DD5043CAC75A2AF2646572F4A1A54 /* FChildEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F08FD72CF6D655250483F0381E1C04 /* FChildEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 106125E7E166F639F404CE8BF5B1AFC4 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B0D1914961561F09DC97036317B8DB /* Promise.swift */; }; - 10AB092C162774E474EDFD3269A91693 /* FPersistenceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FE6B8AF94F6B9320B35BA9AEF571956C /* FPersistenceManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 10EB23E9ECC4B33E16933BB1EA560B6A /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3419E8890B5ECC68471FF7152A9D3867 /* Timeline.swift */; }; - 1135E0A1EF05352E7A0EC7D4A43E7B17 /* RLMManagedArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = F22E954A2ECB868FD5E02FAAE1878B8B /* RLMManagedArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 114397DE4A2DC0204868A79F4BE13769 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 101E7D7A3849AF8379E44C24618B8570 /* Filter.swift */; }; - 117815AED37BF627E9F9899E4A99D6C0 /* GTMNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 08811D88CEC4702543555843C810657D /* GTMNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 121D46DB1C0B4762865E5FF00592D60F /* RLMSyncUtil.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A944252BCA5D3D9744756FB9821C97B2 /* RLMSyncUtil.h */; }; - 124E3AE79ED51C220D840E450228922A /* FIRGetAccountInfoResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C0CAAE3463D64322750A5AFF47E55937 /* FIRGetAccountInfoResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 128342EEC3260AE34F8C7AD0E0882FB6 /* APLevelDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D41543E190795417F7DAE9117C49FD7 /* APLevelDB.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12A7FF246A539FCDC6439097C26666B9 /* FNode.h in Headers */ = {isa = PBXBuildFile; fileRef = FD13A003F07E3F8B8323B787BEBC85E1 /* FNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12AA2ABE99BDE5FCDF7806336A63FFA7 /* FTreeSortedDictionaryEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F2BFDBF37C6024A37B98BF959ED74E8 /* FTreeSortedDictionaryEnumerator.m */; }; - 12B1CA56FE4F178AC77C4E315B772EC5 /* builder.h in Headers */ = {isa = PBXBuildFile; fileRef = BE5F6CB39824A2A5A61EF738AC42BD80 /* builder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12C07060F918C0579528F64B15B6BDF9 /* testharness.cc in Sources */ = {isa = PBXBuildFile; fileRef = 02496D195F2F0DDB1BBB92482BD1C8E9 /* testharness.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 12C5EE54FD92F320441A50ED378FFF89 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E4512E7B81A64FFC9B8E3208E8596CB /* GTMDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12DF4A5B24E587CB26728FCFDC943F36 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 1327E268E070CDC8A435A204B313D220 /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = B11E28DD6F22A848433322EE62C82A0D /* FIRLogger.m */; }; - 1386DF5CDB28FCE01E3016B7D4FFBCDA /* FIRNetworkURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EEFEA8CE983E6EE050FBF782D98B79D /* FIRNetworkURLSession.m */; }; - 13EB08239D7611C2B40D1C1D38578CFB /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = E8BDECA7A6A364067A1B158BCC1F7F6E /* UIButton+Chameleon.m */; }; - 13FA5DE4954CBA05D60B7FAB0F4EF24C /* FTuplePathValue.h in Headers */ = {isa = PBXBuildFile; fileRef = D223F15198F481B2D52CC3F9CE6CB2C3 /* FTuplePathValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14054DC3A3D7DFFBA317D33199C717DF /* UIAppearance+Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = 5511F623379139758DEC24633092CE01 /* UIAppearance+Swift.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14142048FBB16F9D90F5CD5C28940FDA /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4FC47F1C6CE579B1454BCD296B49E1 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1423CA8639D97C1BCD4CE736D9E9BC61 /* FIRGitHubAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4C758E3B163A2972EC9E0647EADF33 /* FIRGitHubAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1477B56537334A1A96ABF4A902E23452 /* FIRMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = CCDBD9A006F118C43699D882889419C6 /* FIRMutableDictionary.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 153C406E06E51943C7D8934581AED187 /* FTupleStringNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D06036A48C38D7D57ADCEF3C5127F96 /* FTupleStringNode.m */; }; - 15AAC18237FAD7DE3A5A074F7A93DADB /* FIRAdditionalUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 655E1781A3BA59C3F210EA07B5C20FC0 /* FIRAdditionalUserInfo.m */; }; - 15B52CC8AB1AE163B4F1D24B7EE8ABAB /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2B3E601205A45E5D22D3132B15576A4E /* RLMRealmConfiguration+Sync.h */; }; - 15C53A851BA128EB328652FCB7EC3BE5 /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = C5C8DE301EA1ECCB1AFA937EC8509470 /* UIColor+ChameleonPrivate.m */; }; - 1608369270603B0A8AEA9922DB61E991 /* RLMObjectBase_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8B7DB1E54F31774781F5E7EA96A0E365 /* RLMObjectBase_Private.h */; }; - 1675642FEEE3747BD7849FDB41DE12B2 /* FWriteRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D53D27ED4378B60C2784666ECEEFD5F /* FWriteRecord.m */; }; - 169B6E96857F44ACF2AC747BAC08A128 /* FIndexedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7A1A72AF59BE923FA3943B224D2BBD /* FIndexedNode.m */; }; + 09B60E27E2212ADE93662910C10F3048 /* FKeepSyncedEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 98C6C1DC67FE6FB631EB13328618D290 /* FKeepSyncedEventRegistration.m */; }; + 09C587A0B751E9C844D37AE4031A20E4 /* RLMClassInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6C3ED2922BA38B9AAC4C0E77FED314E2 /* RLMClassInfo.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 0A14C975AE6102593F2C0C01C42612AB /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53AC62A4426FB3F7D7A52A39F3E43BB /* IShapeRenderer.swift */; }; + 0A53C89C8E100B2ECE08C55ECD459C1A /* FIRDataSnapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 375FDBDD269DC8FE8E87898CECCB23F5 /* FIRDataSnapshot.m */; }; + 0A61472768C589EBA8445C4B4A39CA9D /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8DC1AD0A1549B5FCE77C179422B91F /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0A665232AD79623042B394DE00FDE273 /* FDataEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A54F9668EA14903A17AB13D39065456 /* FDataEvent.m */; }; + 0A79729F68147321095996A4541E9317 /* table_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = F853571EA379A1769F50F8736439903A /* table_builder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AAC14E10C620CAE87A46225F028B2D4 /* FIRAuthRPCRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C3CD574BDBFFF20187F6184C3385022 /* FIRAuthRPCRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0ACCF958380BA964367E4D6324B12704 /* FIRAuthURLPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = F0AE07EBBCFC01AED0B1CF71CB706B04 /* FIRAuthURLPresenter.m */; }; + 0B7EFA323E0D63E78B803F0A34C1FD40 /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7310AB3328F510339EEB587BD873B4E9 /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0CD0D5C0C7BB0E6FD384403228245BC8 /* RLMSyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = CC0FE1D3D6B8E4106E4B413EC52CC098 /* RLMSyncSession.h */; }; + 0CEE168C1850E859F79931CCDF51452A /* FTupleObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BD7F7AFEACB911C1E58BD20E01E6603 /* FTupleObjects.m */; }; + 0CFFC8A4F8CB53582A8CDD3D760DC552 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA2DFC999CB0C1035B5FEC76CDF46AC3 /* ChartDataEntry.swift */; }; + 0D3C851619493E588B15999257678E42 /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 538DC7A94F0B68D36E8845C2A33B017C /* GTMSessionFetcherLogging.m */; }; + 0DBCD6C0B88CE3CA4E32C7C1B59FDC5C /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 626902AF1130D9E133F590F00D2E7464 /* ChartHighlighter.swift */; }; + 0DC5EA55DBA03FCF723077FDF1FCE074 /* env_posix_test_helper.h in Headers */ = {isa = PBXBuildFile; fileRef = CF0D45E9039B6B1EE0097D804950FC26 /* env_posix_test_helper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DF650D6DCDBA610B18DFB9D6B134426 /* FSnapshotHolder.h in Headers */ = {isa = PBXBuildFile; fileRef = D09C66AEBEC0BBBE11336D46DA3ABCD5 /* FSnapshotHolder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0EA175867A93CAC7A08DF860C971722E /* FRepoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6575B78732C20726AA220886A00AF875 /* FRepoManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0EAD243F1F26194FF94131E8072AF5C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + 0EB00BFDDF749FB31540233CFA696558 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = E09FF85ADC2F5EE2DCBEB81D81DF56C3 /* ChartColorTemplates.swift */; }; + 0F116389F3A4F25BD4D75A3FDA307612 /* FIRUser_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5376D625D5EAF1217D51053AD6880341 /* FIRUser_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F35CD94AB53C7C6F709F16B1492BAC4 /* FIRResetPasswordResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D3F38B2341DD1DD8C826AA01D21774D /* FIRResetPasswordResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F5506D3748C3B08A4A8E3497499D985 /* FSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 7206FA132C6B17F949B7C576BC623641 /* FSRWebSocket.m */; }; + 0F6DA24F5DE57DB6468780577AB9BC50 /* FQueryParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 87D9AC6D54D56176799916C939C2B1A0 /* FQueryParams.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 103228D906B112AA75562E8B17179127 /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9E21EC28E44F065DD4BEF037693AD1 /* Indicator.swift */; }; + 10444E74B25D40E35BF32CEC852A6C7E /* FTupleFirebase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F8B616291715F87BC1C364C4DB58E8C /* FTupleFirebase.m */; }; + 104DD5043CAC75A2AF2646572F4A1A54 /* FChildEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = C60CF237B58C0BA996D6C0CB5B651F18 /* FChildEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 107B2BEC263D45D8A7D927F98CA08EF8 /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E9B744D802678233D63BACD6A1D4DA /* BarHighlighter.swift */; }; + 10AB092C162774E474EDFD3269A91693 /* FPersistenceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5662A1B421C5649BAE47116C8FE0CDBC /* FPersistenceManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 10EB23E9ECC4B33E16933BB1EA560B6A /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517CBAED413747971B1F17E29597B51B /* Timeline.swift */; }; + 114397DE4A2DC0204868A79F4BE13769 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78CDC724482462A38883D58A5C254258 /* Filter.swift */; }; + 117815AED37BF627E9F9899E4A99D6C0 /* GTMNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC87E8DFFF489B5DD3DC02CD07847AA /* GTMNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11AEDA4837332CB1BC8A51C312A29C55 /* RLMCollection_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 5707705EF37EA2D9FFABFF95DD250125 /* RLMCollection_Private.h */; }; + 121E3CFD495BA608A6C85E9835F39FDB /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB559CD2A63769030727E0102F5F520 /* BubbleChartRenderer.swift */; }; + 124E3AE79ED51C220D840E450228922A /* FIRGetAccountInfoResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FD19106F235A77D1493BDD4EFDF93BA2 /* FIRGetAccountInfoResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1277D45E7B686F4945D7EE575884A69F /* RLMRealm+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 49083177C89E42C5AFCAAE6801E470C3 /* RLMRealm+Sync.h */; }; + 128342EEC3260AE34F8C7AD0E0882FB6 /* APLevelDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE4B04A2D8F3845CB79A83621AA60EC /* APLevelDB.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12A7FF246A539FCDC6439097C26666B9 /* FNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E2ACEFF5E7DE1A21254CD3E5D774B7C7 /* FNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12AA2ABE99BDE5FCDF7806336A63FFA7 /* FTreeSortedDictionaryEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D3E71A2A0680457DF6E0D979CAAE9FF /* FTreeSortedDictionaryEnumerator.m */; }; + 12B1CA56FE4F178AC77C4E315B772EC5 /* builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43FF6AFC778669992AB4360DC956E128 /* builder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12C07060F918C0579528F64B15B6BDF9 /* testharness.cc in Sources */ = {isa = PBXBuildFile; fileRef = 0C281F9BACB91ABB9C02E7DD425B029A /* testharness.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 12C5EE54FD92F320441A50ED378FFF89 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = E299160C17BB38B076A0CD608FF29635 /* GTMDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 13138040C1441CFA3E307F16C6F91E0B /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FAAC7B65E59E536B765908EDE0F3535 /* HorizontalBarChartRenderer.swift */; }; + 1327E268E070CDC8A435A204B313D220 /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = B32723CBF83BA8B7D0661055F4B33508 /* FIRLogger.m */; }; + 1386DF5CDB28FCE01E3016B7D4FFBCDA /* FIRNetworkURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 7637902B4668DDDC67B520644310F065 /* FIRNetworkURLSession.m */; }; + 13B76EA5C7C68C77AA7FE00DAD612528 /* RLMRealm.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B2C3EACECBB4D5A059E18B27FC65F01 /* RLMRealm.h */; }; + 13EB08239D7611C2B40D1C1D38578CFB /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F3AFDE6C4F8D8F3DE8DAEC14E749E5D /* UIButton+Chameleon.m */; }; + 13FA5DE4954CBA05D60B7FAB0F4EF24C /* FTuplePathValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BADF01B11E8540276DC1212EC4CEDAAE /* FTuplePathValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13FDE320DCC710A70A2E4217214AB4C8 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7C3CCD25881233655EC34CC8FC36927A /* RLMObjectBase_Dynamic.h */; }; + 14054DC3A3D7DFFBA317D33199C717DF /* UIAppearance+Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = 65CE7E43891F975C07CDC076D7026F2B /* UIAppearance+Swift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14142048FBB16F9D90F5CD5C28940FDA /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D07BF809C7C90AE82EEAE6E6E4CD3A99 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1423CA8639D97C1BCD4CE736D9E9BC61 /* FIRGitHubAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = A71163FC03CB1420F2FB3DBF6FD8D423 /* FIRGitHubAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1477B56537334A1A96ABF4A902E23452 /* FIRMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D17E8D85E502FFD67032AFA2B25F29 /* FIRMutableDictionary.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 153C406E06E51943C7D8934581AED187 /* FTupleStringNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DA43129CDEA8715DA7CA75C41476122 /* FTupleStringNode.m */; }; + 15AAC18237FAD7DE3A5A074F7A93DADB /* FIRAdditionalUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EF133089DEADC3804D963EC6215DC092 /* FIRAdditionalUserInfo.m */; }; + 15C53A851BA128EB328652FCB7EC3BE5 /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = BE7EC5FF42BACE35E713CEBA3D81268E /* UIColor+ChameleonPrivate.m */; }; + 15E5B6E3920FE127098A77BC57BB544F /* RLMSyncPermission.mm in Sources */ = {isa = PBXBuildFile; fileRef = 28CD9EDF9D1D1A4EE362482970394330 /* RLMSyncPermission.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 1675642FEEE3747BD7849FDB41DE12B2 /* FWriteRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ECF6930DF18520ED0FB7F63A838701A /* FWriteRecord.m */; }; + 169B6E96857F44ACF2AC747BAC08A128 /* FIndexedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 58BECD9DFE76D092DFF483F95F776051 /* FIndexedNode.m */; }; 16A3AFD27DAA6F7D31E4B3D09DE8A539 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 16A78725D44758FF83011916518BCFB5 /* FIRAuthRPCResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 45A2BF0065145556D3A453FA0506E67F /* FIRAuthRPCResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 16A78725D44758FF83011916518BCFB5 /* FIRAuthRPCResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 747AF76A17AFE5EB9C6EDB83F4D0F850 /* FIRAuthRPCResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; 16EE5C06E752577CE8F678180494E75B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B56D2583344249C1A8E402CDDFA31CD /* QuartzCore.framework */; }; - 17007C5361B11B0E9CAE13DDA68A7232 /* FIRResetPasswordRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F12DE8D1F2C8DA2A503F28F6011764 /* FIRResetPasswordRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 171498D48B73537A68A04E79698109F0 /* FWriteTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F439BD97DD694938706D323C613AE6B4 /* FWriteTree.m */; }; + 17007C5361B11B0E9CAE13DDA68A7232 /* FIRResetPasswordRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CEDBBF2C0E11C616DA2E6CB791BE47A7 /* FIRResetPasswordRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 171498D48B73537A68A04E79698109F0 /* FWriteTree.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE2786A74C94370C5D7FDD890A55478 /* FWriteTree.m */; }; 17290FF7745C51A30621392752C9C1AF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 177DAAFD25087005D91667570A77CA61 /* dumpfile.cc in Sources */ = {isa = PBXBuildFile; fileRef = B91BFACE8211274ACF860C0D633441BE /* dumpfile.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 177E0F5184490AC9335F0F50CCDAB6A5 /* filter_block.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D642261B2D226636A09E4CBA0215C9 /* filter_block.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1796A5C4B66F7B9067CB54CB7629321E /* merger.h in Headers */ = {isa = PBXBuildFile; fileRef = 48E989AA5700F2285C547EB9FFEA04CE /* merger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 180459A0350285C55BC9FBF9FABFA795 /* join.m in Sources */ = {isa = PBXBuildFile; fileRef = DF090133E74CB6A388026C980D12397F /* join.m */; }; - 18110CBAA89F8A5EF32D0B9699E1CCFF /* RLMSyncSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D40162192EB7E105E483C7882AEA80 /* RLMSyncSubscription.h */; }; - 1823F56AC8FC905ECD3E1BF9FAE59870 /* RLMArray_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA052F164EA2AE7C43E2FC163568E70 /* RLMArray_Private.h */; }; - 18677A97A311289CEC57F957F4E294E4 /* FIRDeleteAccountRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 67F24943D62E8185F12071A5C28EFE21 /* FIRDeleteAccountRequest.m */; }; - 18BE3B774957340473915D4C94E69DDD /* FIRDatabaseReference.m in Sources */ = {isa = PBXBuildFile; fileRef = E743659391969DFFC825982CE5CC241C /* FIRDatabaseReference.m */; }; - 190658D67B3438B72DCDEA1E401FD03B /* AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = D487D7F1D8837144619205D9B32042A6 /* AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 19104DDA0FB63E6FF860748C2D25B811 /* dbformat.cc in Sources */ = {isa = PBXBuildFile; fileRef = C0C4473C03F31586B5E1C684CB5E37AD /* dbformat.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 19285209F09F9E84BF70B010BDD558AE /* FRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C7310AD32194E0C9E8955706B4FD9A7 /* FRepo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19537FCB406DFD7E137C6A6BAB8D8B94 /* FIRGetAccountInfoRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B461A3C236049243EE3D07036E86F /* FIRGetAccountInfoRequest.m */; }; - 1955B0EAC38454ABD343A2875407E86D /* FCacheNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E69E13C1098551E7FF04ABB2FFF1375B /* FCacheNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1962E256F35FB20BDB818053D0EC6131 /* FIRPhoneAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D9A4FAEC71E0B218A0C531F0D4D4D1B /* FIRPhoneAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 19A7DD59F5BBCF1E0ACF6F911DCB1EC2 /* FIRAuthTokenResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8B5C694769C60E21013C8EA0EF9ED2 /* FIRAuthTokenResult.m */; }; - 1A20D68A4FF282B85B6A2BB03F4E9060 /* FIRAuthUserDefaultsStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BA4A4DAFD5B40883118575B98D908C3 /* FIRAuthUserDefaultsStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A2FF7E45AC4616073975DBD62994EB1 /* Results.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DBF4BDB35A5BDEAF68D7BE7C5FCF8F9 /* Results.swift */; }; - 1A55000305651036CCD447756B99C889 /* FTrackedQueryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EC4F14E0A0F67A117B21CDC7A23AE25A /* FTrackedQueryManager.m */; }; - 1A58D37AAF7B1DBB9FAD6F113B28008A /* sync_user.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15B72D95F92B0B512C075618A1B39BC2 /* sync_user.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 1A730E27B60A026BBF8C28B9C2248CD0 /* ChartColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28F25EDE292C4A862214B20B6307CE2E /* ChartColors.swift */; }; - 1B69488F684F7787D5DB34D3D5DD6ED3 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = F27DDA2A4FA5B93C3D2BC4D07C85F94D /* hash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B709F112E771C50EB18B85F058AE0EE /* FLimitedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = D13BD7A9F2B272B66AB3A5E408D37ED2 /* FLimitedFilter.m */; }; - 1B9EDEDC964E6B08F78920B4F4B9DB84 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A1980B3459A5D49DC21B3401F74CA7D3 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C25DCC15F2CB00235734AAE919FC1A7 /* FCompoundHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 094DA8FED8C56F8C41DBB3327BF9A850 /* FCompoundHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C45F67979AC5B5D6BE44A827EE3942E /* FParsedUrl.h in Headers */ = {isa = PBXBuildFile; fileRef = 61C74BF8C42C637EE978632922266FC3 /* FParsedUrl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C62D4203FA08661A1B6BA1C645EF637 /* FKeyIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F1BEA718FC558295361DE96283D7161 /* FKeyIndex.m */; }; - 1C9293353BDE4499C5F30D46E9B3D852 /* db.h in Headers */ = {isa = PBXBuildFile; fileRef = 3194D3992438F30D90F545F8B6BB8776 /* db.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1CA1E563F7760E846BB4CD1AE64498E6 /* sync_metadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EC682AFA59C8C7BD40AB4B9B6D110FF2 /* sync_metadata.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 1CA86BF08C6EDD463D560BADBF198928 /* FIRReachabilityChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = A2A07B142B800725A2FF3BFD9BE0E748 /* FIRReachabilityChecker.m */; }; - 1CAA751C644D3DD6A6DC3290E8B4E829 /* slice.h in Headers */ = {isa = PBXBuildFile; fileRef = 50984D13FF239651C85D127D4A9B36C3 /* slice.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1CB2372F38D6D551AC3FA5C690AC83AA /* FIRAuthNotificationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6E158F81B0430F1C5FE2146F947E38 /* FIRAuthNotificationManager.m */; }; - 1CE00AB5BE897A1DDAEA7390E3E75B38 /* RLMCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 544EDF7CD4D8CAD91E9B56A6A5D08873 /* RLMCollection_Private.h */; }; - 1DAF623741A8EBF893E48CC3BA488C36 /* FCompoundHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 7232466B5111FDB327581672AD2D7C4D /* FCompoundHash.m */; }; - 1DD94A3F6F21B27AB9A15165DD66D3DB /* RLMResults_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 24AAE30D6056FD7D084FEF595C799173 /* RLMResults_Private.h */; }; - 1E8B7FCF340911A42EF2B52A1753FF1E /* Chart.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3B22BEBA9E65F27C2C2380B9C96931F /* Chart.swift */; }; - 1E8EFA5A596129AE737A7E20F68A0ABD /* FSnapshotUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B11683BA485E0F316EAB89F61689FE2D /* FSnapshotUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1EB8001DDF39881FB22C0ECE20B11DE4 /* FIRAuthDefaultUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E43B7E1F2579EF844CD943505C28416 /* FIRAuthDefaultUIDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1EB8A97123015765EAD193E9CDB53534 /* FIRPhoneAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 9603113FBB4115B156F91010FA140D23 /* FIRPhoneAuthProvider.m */; }; - 1F0BB471859F98053379ABD68A51B969 /* FEventRaiser.m in Sources */ = {isa = PBXBuildFile; fileRef = 768468E80F9FE8B320DC7C1828DB5588 /* FEventRaiser.m */; }; - 1F3F48B44903D68AF3F6AE9293B6B07D /* FListenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A195887BF4B4B1470BE0FCE132D15 /* FListenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F4AA0E8AAC9520C063952E44374D5A4 /* ObjectSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BA23BD9B339BBC6480ADF054F0EA91 /* ObjectSchema.swift */; }; - 1F923F447C051CA2677E89415612FBDF /* FIRAuthGlobalWorkQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 26CD5B1D919107654A24937186DBB3E7 /* FIRAuthGlobalWorkQueue.m */; }; - 1FADDE01C41B7AA31D328CA0FB8C99CA /* FValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = CB66D88F0B7187CA3B3E9DA35265EAF0 /* FValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1FBC378B5456547DDB88006579BB3808 /* realm_coordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C7453FB7160AE5853595FE731623E47B /* realm_coordinator.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 205790B0034545C1E59B740603516491 /* RealmCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 602F700222EE4CD2DFDC8A6A71B94FC5 /* RealmCollection.swift */; }; - 2090329005D632CA0AA38AF0F66F1466 /* FViewProcessorResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B096381505DCD71416779CC51D5D90 /* FViewProcessorResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 216742903ABA0FD4AC13F02A27E16785 /* random.h in Headers */ = {isa = PBXBuildFile; fileRef = AB37E493E6EDED38AA6799D9F5AA50B3 /* random.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 226418809F03A9B3040B8FFF3A15C126 /* FValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = BBA9C16DE4FB1E3BFFBFB4CBB00ACC0F /* FValidation.m */; }; - 226865D83B216EAFA2E2AEC92BD8EC8B /* FIRSetAccountInfoRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = C5DC03FBC0723304975A16A3CEC0A2A1 /* FIRSetAccountInfoRequest.m */; }; - 2283375C0C99789CF47EEDA0CE9D3D80 /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0EF2088DBAD9A780E518DC022003A /* ImageProcessor.swift */; }; - 22A339DD4C3B157385293F1E96D39A76 /* RealmConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4702AFD645801109ACC320CB48D0E3 /* RealmConfiguration.swift */; }; - 22C3C7804D8B82AB1246D806D0672E17 /* FIRMutableData_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A3EB5FB28AE338E2D015F272B8007E4E /* FIRMutableData_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 23217DE9BE695AE4D4B92152B953A2F7 /* table_cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = F2018E3AE5464446EA4FD27F6BF756A0 /* table_cache.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 236EF26141B3DC4FA525687B13A78F15 /* FIRVerifyPhoneNumberRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = AB14DA082BF29AB88A322357A56BFD5E /* FIRVerifyPhoneNumberRequest.m */; }; - 2440224821E5F6977619D00B7DB703B5 /* FIRSetAccountInfoRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 52C514872DADF3C31F8DE496790DDF8D /* FIRSetAccountInfoRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 24B418B6BC098192B5F321422671B8CB /* UIAppearance+Swift.m in Sources */ = {isa = PBXBuildFile; fileRef = 69D3713C5AEBC1522AC899FB6A0C1343 /* UIAppearance+Swift.m */; }; - 2549459E879E52E29BB7AAE498B309C3 /* FIRAuthRequestConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 217D04B0EB91FC4454C1F2756B666845 /* FIRAuthRequestConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2561415E5186A45792EB3CAAB2685360 /* FCompoundWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D830AFCC6A73DD371F88A84E69A22C /* FCompoundWrite.m */; }; - 256D4559E7D381A28E379F6D58842405 /* RLMObject_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 3183AF069AE0091159320866D444ACD6 /* RLMObject_Private.h */; }; - 257605C03257F0456ACBEB1603388030 /* filename.h in Headers */ = {isa = PBXBuildFile; fileRef = 98F855CE72F3685AF9024F0DF90F3AED /* filename.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25EFE48AB17CD9A37B22619C5D0C573F /* FStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 11784773888188D10E9F4201373A8E05 /* FStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 261ABF6B768E2AFCC0B9D792A5A000C8 /* RLMOptionalBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 31237C6D89A7D53CAA2C360547EBB637 /* RLMOptionalBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 262530A53A123A13D2B3F5719612042B /* FIRFacebookAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 981B0AE384FEBF7B3CA6F32DC513A6D7 /* FIRFacebookAuthProvider.m */; }; - 26727FD614DDF2000D979FB368CA56F0 /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A01C9CB5DD2D1ED389DF3BC6DFD7F8 /* SwiftVersion.swift */; }; - 27773B415F4330BE65E74C5826A37346 /* crc32c.cc in Sources */ = {isa = PBXBuildFile; fileRef = 7F8B89BBE9BEFAC7A8E97AF53F8C835D /* crc32c.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 2799E7839D546E1D435EDFE4D2BE8CA8 /* bloom.cc in Sources */ = {isa = PBXBuildFile; fileRef = D7C07886487C9B20E65BD7AD53E112B5 /* bloom.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 27C545F4A93984E4A310CF8A0A0A8AEA /* FAckUserWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = 9298A68A6B543B408DC9E5FE996F903E /* FAckUserWrite.m */; }; - 2820BE18908D12423CA3906D3D8329B9 /* testharness.h in Headers */ = {isa = PBXBuildFile; fileRef = B687AAB9C24C10BFBD7EE58C5778AEBB /* testharness.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2841B0E637B0F4F5DC4845FD770652DC /* FIRAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 127740F1F2DB220B999CC652BA862045 /* FIRAuthCredential.m */; }; - 2879F1A3125D15CD8D3F0E526F2588BD /* FSnapshotUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A403A0080BA699A51F583B8F60C8F4F1 /* FSnapshotUtilities.m */; }; - 28A41A6D34FF661D9E494929560F1CE0 /* RLMSyncUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DF43ED484210512CEC7842239F5345D /* RLMSyncUser.h */; }; - 28FF5271CA3B86A704355743B1BC1116 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC23F68D7DCD34CD236A1B5998B12AD6 /* Alamofire.framework */; }; - 2963C2FB9DF72BAA4EA43709219C80D3 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 26B2AF4FE85BC2B05F422DD7CFCECEAE /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2971E58FB5C1FBEF54C4223D720F33F9 /* FValueIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 96F68DEE8EDCECE1EA450424EB19AAEE /* FValueIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 29B3DB810FDEA91C1D4CCDF3A109FCC5 /* FIRGitHubAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C8C5C0126C82AA5F08F73690A1D9A7D /* FIRGitHubAuthCredential.m */; }; - 29BD750C2CDE597BC4ED8EA024C15153 /* FIRRetryHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B3D166294CFCAD78EC81C76B158B1A6E /* FIRRetryHelper.m */; }; - 29FEADDF2086FDEA7D5BA87DD23B08C6 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = DBE37874EE39B79BF0AFEDCEDAA3159B /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2ABC53F76C7729D60D3CDE7B19D8743F /* FIRSendVerificationCodeResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 58218552544AB7AF9534B2E2095A553A /* FIRSendVerificationCodeResponse.m */; }; - 2ABE0F8940C00BD429E33ED7F7C9EA1D /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC7B9007790C3A994D2A077B2A10C42 /* KingfisherOptionsInfo.swift */; }; - 2AF15D2AB5C577921C288E98FA27C0A8 /* FEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = ACACB1A8134E147173F966F899CBB9ED /* FEventEmitter.m */; }; - 2AF934ED88F83BA968595BDC7FF1D36D /* FRangeMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D0384586ACEA88566F47AAE1CC4143B /* FRangeMerge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B30B3EFA40D3E28CF9D03402A85A4EE /* FIROAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E904356BBD7A751A2C39DFF6784C13D /* FIROAuthCredential.m */; }; - 2BB3C75A494D236B8DE9314FD4A7399A /* FIRFacebookAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1F6AA86DAF33BFE79ACA8DD4251DCC /* FIRFacebookAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CBB417265596F128F7CB144AB2E092C /* RLMRealm+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = D41733250C51AB27A9EDB633243356FB /* RLMRealm+Sync.h */; }; - 2D3F26770EB1B57D2F470DF195251AE4 /* FChildEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DAF9D56085B88A440BDF99226C3C5EC /* FChildEventRegistration.m */; }; - 2D830E49AA6433245E907876EECAA826 /* FValueIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F05BBCB1F615E470A220DB8DEC9140D /* FValueIndex.m */; }; - 2DC9756229ED1DB15CE8F378C017C74D /* FIRFacebookAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C9964FDC6F093FA81BF0A7EF0A1334 /* FIRFacebookAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2DDC6239B9189C8EE6970FA3E9FC335F /* RLMConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 59DC491546C84C6254B8D0965B77C866 /* RLMConstants.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 2DEF2214A2D9F343AAF8675EE740BDAF /* skiplist.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F759D8E1D8B844B0E78E9AD43486080 /* skiplist.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EB5D016C5DF131C93F93081C206E667 /* FIRErrorCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6253B6F08C1C7483ACD03327448E082F /* FIRErrorCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2F5819A1B5C7E13DE4798FBE8C763F6E /* FLLRBNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 136586EF70918CE2645599936BDA2CBD /* FLLRBNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F9397DEFF57401E2F49F4AC9C882CD7 /* RLMObjectBase_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 833FFA65380BC592A5DA4FEE614B246D /* RLMObjectBase_Dynamic.h */; }; - 2FC4FA54D129BBF475879A4ED4B4B6D6 /* FIRSendVerificationCodeRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FF11FA13FFFDA7E56941C07B0E9328C /* FIRSendVerificationCodeRequest.m */; }; - 3004D41A895E63D2E11DE2B6D002EA2C /* FIRCreateAuthURIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = EC0EF9BA3D9183E315DD637B783F44C1 /* FIRCreateAuthURIRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30164E1305AFC12298C8ECAFD258342E /* RLMListBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C1E95524242BB7CF0FD435BCEE0A5D56 /* RLMListBase.h */; }; - 305346EB3F4B728C0011E5A9A84A7C8F /* FCompoundWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 012C9CCA072C9B01CA92A4C0577B282A /* FCompoundWrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 317F0845AA8D4D2CD72002C4502F268F /* FIRAuthUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F93951C862B1D6F50DD9F2F2D1C76D /* FIRAuthUIDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3180E7F5B8CFC3D06ADD21197A033697 /* FView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74335A52733B4DEC7F2D9349FFA9DAC9 /* FView.m */; }; - 31ABE67DF75C99E20A9B85D5611CD71F /* SVProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = DF4053AEB373E8A6B19592D9C08284DF /* SVProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 331FC2AD7464F80A4612321FABF7A3AA /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = D5588A38A55AD18D6C3C1BE58C6BC3DF /* cache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3464228E4F1F63DBCA803CC848A6A8C0 /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2C92932D029D32CCE07BD577973029 /* Resource.swift */; }; - 347709C273A444AE76953B46D16ED8B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 34C36103FE81957A565B1E8DB8B768D9 /* FIRAuthWebUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B11C60C247367717B5A05C03B30BF3A2 /* FIRAuthWebUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34CEBD8C30685C46B3F850F275E8BE1F /* FEventGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = F79840018A94A2754D04EAD026634EA9 /* FEventGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 352770AA397316E5FD1EBE664A8B89E7 /* APLevelDB.mm in Sources */ = {isa = PBXBuildFile; fileRef = 79DFB4F96F2ADED65E9DFD60E2139A87 /* APLevelDB.mm */; }; + 177DAAFD25087005D91667570A77CA61 /* dumpfile.cc in Sources */ = {isa = PBXBuildFile; fileRef = 31486ABB90DDFF1BFB652E279892932E /* dumpfile.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 177E0F5184490AC9335F0F50CCDAB6A5 /* filter_block.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F5643D368B34AD9E31027EE15B9464B /* filter_block.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1796A5C4B66F7B9067CB54CB7629321E /* merger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3848A12626CAE2A525C49A334A9E72A9 /* merger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18677A97A311289CEC57F957F4E294E4 /* FIRDeleteAccountRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 70196E133C023E4DC04F43B36826E256 /* FIRDeleteAccountRequest.m */; }; + 18BE3B774957340473915D4C94E69DDD /* FIRDatabaseReference.m in Sources */ = {isa = PBXBuildFile; fileRef = 48911F3D7CC70E74BC850BF429644753 /* FIRDatabaseReference.m */; }; + 19104DDA0FB63E6FF860748C2D25B811 /* dbformat.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2A321494C32F7A4E6CF1410A4936CD62 /* dbformat.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 19285209F09F9E84BF70B010BDD558AE /* FRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FB073AF368B2BF119966220911E6F33 /* FRepo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19518C44C6586761D72BACB4F78F1ED2 /* RLMSyncManager.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F5761ABBE7D34859F6873ED5001D20F2 /* RLMSyncManager.h */; }; + 19537FCB406DFD7E137C6A6BAB8D8B94 /* FIRGetAccountInfoRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F2379F4B86E1AE74BC7236E7083C3D0E /* FIRGetAccountInfoRequest.m */; }; + 1955B0EAC38454ABD343A2875407E86D /* FCacheNode.h in Headers */ = {isa = PBXBuildFile; fileRef = CA5127DB94209D260A1EAF579CAB7D80 /* FCacheNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1962E256F35FB20BDB818053D0EC6131 /* FIRPhoneAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F6EF89D9ABE8102ED8D2D9BE619EE7A0 /* FIRPhoneAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1966299DF244FA60F3D6F4000584C573 /* RLMRealm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0B2C3EACECBB4D5A059E18B27FC65F01 /* RLMRealm.h */; }; + 19A7DD59F5BBCF1E0ACF6F911DCB1EC2 /* FIRAuthTokenResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AC5A48327A8EEFFA935389CA55EC15 /* FIRAuthTokenResult.m */; }; + 1A20D68A4FF282B85B6A2BB03F4E9060 /* FIRAuthUserDefaultsStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF93A3326AE273FEA46726801C04976 /* FIRAuthUserDefaultsStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A55000305651036CCD447756B99C889 /* FTrackedQueryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8129D1783B9F8B482F0A3F1333A79EDC /* FTrackedQueryManager.m */; }; + 1B015614AE2EA2F9730119786D4D3513 /* object_store.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BB8AA9739245BF6F13BF252929EB855 /* object_store.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 1B113CB9C36746050ADC93F2D5AA40B2 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56004FB2FD2A8850B62F9D65CD69A05B /* BarLineScatterCandleBubbleChartDataSet.swift */; }; + 1B3891E96953B02DDACDFBDD0031A7DB /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 951CC80F9BAF5CFF9FF40B6834B47C6C /* Migration.swift */; }; + 1B69488F684F7787D5DB34D3D5DD6ED3 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DED48C2A2C2DA2C90329CF44BCE5B18 /* hash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B709F112E771C50EB18B85F058AE0EE /* FLimitedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = C128C65B7BD192BC8DC373D234DE137C /* FLimitedFilter.m */; }; + 1B9EDEDC964E6B08F78920B4F4B9DB84 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 531CC9C9E4B5A7BAC1389D1101788CBC /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1BE9C29AB45E39D5D303F9C89C4F7398 /* RLMSyncSubscription.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AA99CE8E6673012F7549400C8B2E9419 /* RLMSyncSubscription.h */; }; + 1C25DCC15F2CB00235734AAE919FC1A7 /* FCompoundHash.h in Headers */ = {isa = PBXBuildFile; fileRef = D5E98DABA67CCEBAFCBD865D76427C4A /* FCompoundHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C45F67979AC5B5D6BE44A827EE3942E /* FParsedUrl.h in Headers */ = {isa = PBXBuildFile; fileRef = 02B38DCB18E5386EA2F64B0DA37AEF11 /* FParsedUrl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C62D4203FA08661A1B6BA1C645EF637 /* FKeyIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = 7352B886668E86A68A4EFA8A6C97CB54 /* FKeyIndex.m */; }; + 1C8523A5106C0B25E352FF5BD860E6F9 /* RLMSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 57003CACD3FF47250D640C28A4EE994D /* RLMSchema.h */; }; + 1C9293353BDE4499C5F30D46E9B3D852 /* db.h in Headers */ = {isa = PBXBuildFile; fileRef = C200881D4442C52FBD3D5420540068E3 /* db.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1CA86BF08C6EDD463D560BADBF198928 /* FIRReachabilityChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C78ED0F3B75405F0CD990B1AF93037 /* FIRReachabilityChecker.m */; }; + 1CAA751C644D3DD6A6DC3290E8B4E829 /* slice.h in Headers */ = {isa = PBXBuildFile; fileRef = 8616C6866E01247A6B293A8931181F1E /* slice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1CB2372F38D6D551AC3FA5C690AC83AA /* FIRAuthNotificationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EFBD716230C2EA6B4130C57E76B191D6 /* FIRAuthNotificationManager.m */; }; + 1D79A9063DAB2BFC9185316E9697C954 /* sync_metadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F67A0D5B25DEB08B734DFE8804DAFB9F /* sync_metadata.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 1DAF623741A8EBF893E48CC3BA488C36 /* FCompoundHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 504474BF763B534B5FF9F5704D2CFE10 /* FCompoundHash.m */; }; + 1DD06AA60216738835B5091C5E122AB0 /* dispatch_promise.m in Sources */ = {isa = PBXBuildFile; fileRef = 17E7718BC15B2B522A1B2F3670E50CBC /* dispatch_promise.m */; }; + 1E8EFA5A596129AE737A7E20F68A0ABD /* FSnapshotUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EB0772386D05F7BDACEB6EFC92E434D /* FSnapshotUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EB8001DDF39881FB22C0ECE20B11DE4 /* FIRAuthDefaultUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F81F03B310B1DEA33721EC3FF34F95D /* FIRAuthDefaultUIDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EB8A97123015765EAD193E9CDB53534 /* FIRPhoneAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 6632F78F916FBAC8538290E6A8E2D94A /* FIRPhoneAuthProvider.m */; }; + 1ECCA54832CF29434C190CCD88C81411 /* RLMObservation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B795D6B69559419018E87951D38F352 /* RLMObservation.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 1F0BB471859F98053379ABD68A51B969 /* FEventRaiser.m in Sources */ = {isa = PBXBuildFile; fileRef = 544F7AC0331A63D207A551A46D75D0C6 /* FEventRaiser.m */; }; + 1F3F48B44903D68AF3F6AE9293B6B07D /* FListenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D4904E5E343C601FAD9F45EC07DD8E9 /* FListenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F923F447C051CA2677E89415612FBDF /* FIRAuthGlobalWorkQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 69EF71DAE265624AF7BE3E8DA3E31173 /* FIRAuthGlobalWorkQueue.m */; }; + 1FADDE01C41B7AA31D328CA0FB8C99CA /* FValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A543BED31EFA916E944D41E476D6920 /* FValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2090329005D632CA0AA38AF0F66F1466 /* FViewProcessorResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A0ED8A6481F4E1DD088861668AA47F9 /* FViewProcessorResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 20F5A490EF7E4CCDB94EFB87572B8178 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF40BB7B5C5B67467D6BA7907483FFF0 /* ChartUtils.swift */; }; + 214439A729C375B16BC5A20BCC201DE3 /* RLMProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A562F06B8609FC8463FB76916809389 /* RLMProperty.h */; }; + 216742903ABA0FD4AC13F02A27E16785 /* random.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E1762A795F0CCB2D4BEC91CE676509C /* random.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 226418809F03A9B3040B8FFF3A15C126 /* FValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EA181D43D337C3F302053D11C402B08 /* FValidation.m */; }; + 226865D83B216EAFA2E2AEC92BD8EC8B /* FIRSetAccountInfoRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 15F13C1322382339F6E043BF937E60AE /* FIRSetAccountInfoRequest.m */; }; + 2283375C0C99789CF47EEDA0CE9D3D80 /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 627A43A2A4F286438FC5CED41A414DF6 /* ImageProcessor.swift */; }; + 22C3C7804D8B82AB1246D806D0672E17 /* FIRMutableData_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B7A09D32E5044BB16ADC8E7EF9B0DC /* FIRMutableData_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22C79DF4949D58696FBCD17DE758FC92 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF5A66027CF4B280351EDD3536824E83 /* ChevronDownShapeRenderer.swift */; }; + 22D6AC3454B14D7C3CC108C16838657D /* RLMThreadSafeReference.mm in Sources */ = {isa = PBXBuildFile; fileRef = DFD4F06C9C5C846C7E48A6BEB252C275 /* RLMThreadSafeReference.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 23217DE9BE695AE4D4B92152B953A2F7 /* table_cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = B7E545C520678CE97801F9E1E9AA9122 /* table_cache.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 2361551BB51CAF8596525C84FA20278F /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FF2AAEEC380825664B6FA356F39907 /* IndexAxisValueFormatter.swift */; }; + 236EF26141B3DC4FA525687B13A78F15 /* FIRVerifyPhoneNumberRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A506D5A254369BC7F2340AFB1810AC4 /* FIRVerifyPhoneNumberRequest.m */; }; + 23B7D49BE763D3AD84B3FF4D6D1E9C4E /* ObjectSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384BF7ADE20F623BB87B6771A9E0159E /* ObjectSchema.swift */; }; + 23F54A8305DE182045306A01333D9A52 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DEB23A6639EA6ED44783EA745FFFDA4 /* Schema.swift */; }; + 2440224821E5F6977619D00B7DB703B5 /* FIRSetAccountInfoRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 56B0D236FE09400520ECD2E02A58554B /* FIRSetAccountInfoRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2462B2F4E41EA388F8CE2600BEFB03D7 /* Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EE91D7B97587454F8A81B6DCE1D0914 /* Sync.swift */; }; + 24B418B6BC098192B5F321422671B8CB /* UIAppearance+Swift.m in Sources */ = {isa = PBXBuildFile; fileRef = 947BAA0F775DD173FC7FBC52F19324A0 /* UIAppearance+Swift.m */; }; + 24DB250E2553A2584317D1AE38AA0B28 /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BAEAFEC92571D92EF4484705568BA63 /* BarChartDataEntry.swift */; }; + 25341A055ACCAAE63F479800DEEBFE1A /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDB0E2D288E288C87065342830A7102 /* ChartViewBase.swift */; }; + 2549459E879E52E29BB7AAE498B309C3 /* FIRAuthRequestConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = F1346DACDB39018988E6C5D8D2D5E306 /* FIRAuthRequestConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2561415E5186A45792EB3CAAB2685360 /* FCompoundWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = CE149580214F854CBC53C049ED237ED0 /* FCompoundWrite.m */; }; + 257605C03257F0456ACBEB1603388030 /* filename.h in Headers */ = {isa = PBXBuildFile; fileRef = B5B8A3F87536EA66ED63CA2EF2078363 /* filename.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25EFE48AB17CD9A37B22619C5D0C573F /* FStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = D153B781C672130B02475F9561391256 /* FStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 262530A53A123A13D2B3F5719612042B /* FIRFacebookAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5900366582EB15C7A4D6E21EEF0578B7 /* FIRFacebookAuthProvider.m */; }; + 26E6A619C6EE68508416929515A0CD42 /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C222A911FE8BB7A4667EA03E62A0A10 /* Fill.swift */; }; + 27773B415F4330BE65E74C5826A37346 /* crc32c.cc in Sources */ = {isa = PBXBuildFile; fileRef = CC79495350FAB6A11B16150D0DFCFCCB /* crc32c.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 2799E7839D546E1D435EDFE4D2BE8CA8 /* bloom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5285F62FDA5CB3B7DA97B2BA794C69E7 /* bloom.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 27C545F4A93984E4A310CF8A0A0A8AEA /* FAckUserWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3645ECCA826261E84A744D29DC5C0D /* FAckUserWrite.m */; }; + 27CFB28382586DAA7335F21D81F3BBA4 /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0114AC1580DC8D7B871714A7AE3A2000 /* LineScatterCandleRadarRenderer.swift */; }; + 2820BE18908D12423CA3906D3D8329B9 /* testharness.h in Headers */ = {isa = PBXBuildFile; fileRef = 7914027ECA70A7FBBE9D4102042A86B8 /* testharness.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2841B0E637B0F4F5DC4845FD770652DC /* FIRAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = B7072CC50B6BA667903E6C6241CD2447 /* FIRAuthCredential.m */; }; + 2879F1A3125D15CD8D3F0E526F2588BD /* FSnapshotUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B01C85D6CAC5BA84135DB99162DA5918 /* FSnapshotUtilities.m */; }; + 288252B93043FF0E2B6EE603E50F82AA /* Deprecations.swift in Sources */ = {isa = PBXBuildFile; fileRef = A233330DD411599D9A08537F900AE794 /* Deprecations.swift */; }; + 2886AB5EEBEB31E87420ABCCEC2B1762 /* Charts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8787C588B6C7837C4E9688C8C999C84C /* Charts-dummy.m */; }; + 293DE9664BDB913929D9729108CF3FE8 /* RLMRealmConfiguration+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1E939A429E0075D9CBD198F9A137CDEB /* RLMRealmConfiguration+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 2963C2FB9DF72BAA4EA43709219C80D3 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = A6CF6EC6C1A60DC71099387172A452D3 /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2971E58FB5C1FBEF54C4223D720F33F9 /* FValueIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = C2D11DACDD4299304B76DD8E9ED95E50 /* FValueIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29B3DB810FDEA91C1D4CCDF3A109FCC5 /* FIRGitHubAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD7186A4B4F9CE3B057BE9851875C5D /* FIRGitHubAuthCredential.m */; }; + 29BD750C2CDE597BC4ED8EA024C15153 /* FIRRetryHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D9A2CB8DF34EA0B8B63FACCB0C172276 /* FIRRetryHelper.m */; }; + 29FEADDF2086FDEA7D5BA87DD23B08C6 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C7A8524355BA95D055AD0C1BE8A739B /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2ABC53F76C7729D60D3CDE7B19D8743F /* FIRSendVerificationCodeResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A5331EE51849C6FB50B6B85A90BDCAC4 /* FIRSendVerificationCodeResponse.m */; }; + 2ABE0F8940C00BD429E33ED7F7C9EA1D /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5D8F67F9944E0DB70382FA5CF599627 /* KingfisherOptionsInfo.swift */; }; + 2AF15D2AB5C577921C288E98FA27C0A8 /* FEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 65EE173CD6482270A5F2AA2127830541 /* FEventEmitter.m */; }; + 2AF934ED88F83BA968595BDC7FF1D36D /* FRangeMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D318FEDC73AF9331208167D90056B21 /* FRangeMerge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B30B3EFA40D3E28CF9D03402A85A4EE /* FIROAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 79582042D43A0EA1E68F34A15FECF6E6 /* FIROAuthCredential.m */; }; + 2BB3C75A494D236B8DE9314FD4A7399A /* FIRFacebookAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CC21EC03C278563E2F64C67D7085F0C /* FIRFacebookAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C00EEEB878E3AFF833FB4265139E751 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D8A82480667587B7F33CE189E5EC2A /* CandleChartDataEntry.swift */; }; + 2D3F26770EB1B57D2F470DF195251AE4 /* FChildEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE2AFC2422A907E0C9C94A2DFF53710 /* FChildEventRegistration.m */; }; + 2D830E49AA6433245E907876EECAA826 /* FValueIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = DF3D1388C3208FB5654AEA752DF494DA /* FValueIndex.m */; }; + 2DC9756229ED1DB15CE8F378C017C74D /* FIRFacebookAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 1924511D23F11022AD69827F9E169983 /* FIRFacebookAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2DEF2214A2D9F343AAF8675EE740BDAF /* skiplist.h in Headers */ = {isa = PBXBuildFile; fileRef = B785F57DA9D767989762DB2ACAEC6117 /* skiplist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E77D12FF73D2CDC3FC900187D365C66 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2DD02A7971DA12F534892F246CA0602 /* PieChartData.swift */; }; + 2E7ECAB13CC0719333C4E1EE26FB7284 /* shared_realm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E2EECF1DA495C882A42965802744F8A1 /* shared_realm.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 2EB5D016C5DF131C93F93081C206E667 /* FIRErrorCode.h in Headers */ = {isa = PBXBuildFile; fileRef = C13B0234C9DC94C32C728C1AB5EAA99E /* FIRErrorCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2ED4D7DC8C6BBB2E420D8E6C8CEBEEC2 /* hang.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFC2C32F983659FFE3698E948C6334D /* hang.m */; }; + 2F5819A1B5C7E13DE4798FBE8C763F6E /* FLLRBNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0657F248C972537EE50A6586504ECB94 /* FLLRBNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2FC4FA54D129BBF475879A4ED4B4B6D6 /* FIRSendVerificationCodeRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 235F1DC8E299757F7CD88AE7BC4C870C /* FIRSendVerificationCodeRequest.m */; }; + 3004D41A895E63D2E11DE2B6D002EA2C /* FIRCreateAuthURIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 94DC926EFD5E35AE0EA727D999BAD26F /* FIRCreateAuthURIRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 305346EB3F4B728C0011E5A9A84A7C8F /* FCompoundWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C0DAF1ECF2F7FFA6FA81DB69E752441 /* FCompoundWrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 313007FEC74BCDA7C4A2E3EE4FE3DD95 /* RLMOptionalBase.h in Headers */ = {isa = PBXBuildFile; fileRef = EEEB3C3C89CD691258C71D9861F0EAE4 /* RLMOptionalBase.h */; }; + 317F0845AA8D4D2CD72002C4502F268F /* FIRAuthUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 55931FFEA5DF0153C27CB1AEC567A192 /* FIRAuthUIDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3180E7F5B8CFC3D06ADD21197A033697 /* FView.m in Sources */ = {isa = PBXBuildFile; fileRef = D01EFBF5EAA358999E6632C5A27533B2 /* FView.m */; }; + 31BA42C80A0B1F7A09A93D2473CE5EE2 /* uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2257C36FAF75A4FB0D99C1241C6E16B9 /* uuid.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 31F0D5BC7B463EFE9735CE9C992B146E /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05A43BADBAE486962B7CF5BB0C747F81 /* Animator.swift */; }; + 331FC2AD7464F80A4612321FABF7A3AA /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 33030D2F5C687747F75E642267737AE1 /* cache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 334B19BE6F150C629E49D3E2291D4117 /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFFFB3A31E762262CFC54B391DBD931 /* DefaultFillFormatter.swift */; }; + 335C2CB1271F53CF91DE85C73CF37306 /* RLMSyncManager_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 3C11DC37BFB910086B7157B9D7594F06 /* RLMSyncManager_Private.h */; }; + 33DBD98E7F314E882859B5B00A2EAD74 /* SVProgressAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 52DF3DE6ADA39756D7BBA44919ECD7DB /* SVProgressAnimatedView.m */; }; + 3464228E4F1F63DBCA803CC848A6A8C0 /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A8C9A11E822DE5E8791CC26F950EEB /* Resource.swift */; }; + 34C36103FE81957A565B1E8DB8B768D9 /* FIRAuthWebUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 68333EDF46E6D08169077669539DD854 /* FIRAuthWebUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34CEBD8C30685C46B3F850F275E8BE1F /* FEventGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 78B38305A403CF3D484D33D89933A4F9 /* FEventGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 352770AA397316E5FD1EBE664A8B89E7 /* APLevelDB.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D984D136EC467110E22895C4CAD8800 /* APLevelDB.mm */; }; + 358768F88E772F4647ABC89090218A1F /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAADCDBD533E680F27169B11D334626 /* CombinedChartData.swift */; }; + 35B521DB8C10D18B4900047A32156B6C /* RLMArray_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = EC22A226FA6EEDA3165563461A0902AD /* RLMArray_Private.h */; }; + 35D16C195D2FE72AFE8E158A51312FC0 /* RLMCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A97DA2E87AF4AF800CFD58F98F4B30E /* RLMCollection.h */; }; 35F9C44445E9A411F63880FCF5088441 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CFD9C5B4E24099B87D18EF99B785C958 /* UIKit.framework */; }; - 3626B94094672CB1C9DEA32B9F9502E1 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EA0E86840087A2F988191982AEF7BE4 /* TaskDelegate.swift */; }; - 3630D9858DFFFB03099F529A9F6BE1A5 /* RLMArray.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 78F4770F3AA732271439C1E944CBB123 /* RLMArray.h */; }; - 364DB3F46FAEB14540098B0AC15CC6B9 /* FAtomicNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C224A282F04F2A209F24E12FD6A485F /* FAtomicNumber.m */; }; - 36DA7ABDF6EAF0559F68F76FB43A07A6 /* RLMSyncConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C2764F649066BFC811831F350C07134 /* RLMSyncConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 362189E78F4C581115BC898E290F23BE /* SVProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F0994DB24D3819F0A16FC1E9B6989EC /* SVProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3626B94094672CB1C9DEA32B9F9502E1 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87E34926B63745C66A41DC9374384B5 /* TaskDelegate.swift */; }; + 364DB3F46FAEB14540098B0AC15CC6B9 /* FAtomicNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = B60D24A57A4B635AE47AD479076959BB /* FAtomicNumber.m */; }; + 36767BFA83A42F60FB15CDB2FF33280A /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2DE07E5E476F4FBD06195DDF23EC03E /* SwiftyJSON.swift */; }; + 36FB477816CAD11896C74839F670C978 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6D19710C58514EBABFB43CD9AB95BAC /* BarChartData.swift */; }; + 37287DDF85833B8A72202DA8575B67FC /* RLMSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2434D6C0B6C4E024F00F8DEF27C2ADA6 /* RLMSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; 37808356C77D1DF1286F1F17B82DC457 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 3841B01BBAACA78623BFFF29E617D96A /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DC957A7E9E4767AD118CFEC226B886 /* FIRAppAssociationRegistration.m */; }; - 3891F0042ACAB86B96740144A8D0A12F /* FIRDatabaseConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5A3E50584A73D4B2C399B7302BB3F5 /* FIRDatabaseConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38A094BAD14BE15A85A2DCDA246202B3 /* FIRNetworkConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = AB093E52CEE6389EE9A0049CB4AB92D0 /* FIRNetworkConstants.m */; }; - 38F03103D8E36ED6C41615B5C233AF9B /* RLMListBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB1730835DB6F8AB2073DEF0ED68A9A0 /* RLMListBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 392F2CF142BAA751AC1BB61D8B757D98 /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 829D2B9470AC0635766764B8176BD052 /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39615CBE4DDB205A8EF63B8DA83E345D /* port_posix_sse.cc in Sources */ = {isa = PBXBuildFile; fileRef = 122F0EC51FF8523F396566F6A3084F4B /* port_posix_sse.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 3970EAB4A4862FD38D24B32700DD16FF /* FSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DF64CC029A59D164C673992AD3C8037 /* FSRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39828E7C2658680F1313EE495297C1B1 /* write_batch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 904A85DCC0C31F485625F9429B5A0288 /* write_batch.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 399BFDA5B1B0810AAE4335C65B34005F /* RLMObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = E103EDF631ABD695B0DEC4E9432FF54E /* RLMObjectBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 3A50F5C8ECED9627F2EBD97F61BD376D /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 912431AAC7A4A16F390214EA93DA877F /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; }; - 3A8A8146F05B521D8851EB803EE4A12D /* FIRDeleteAccountRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B4F1819FC5E0AD0A7DE0DB9A77E2F1A3 /* FIRDeleteAccountRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A8BA471F2181FF519448221941B6C34 /* schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A601ACA3853459C0F40EBB0EE5E3D6DC /* schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 3A95EA86B539BD78C8F1C924CC84743F /* RLMThreadSafeReference.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1FA79A6B3CCD3B720B78C2EABF4922F5 /* RLMThreadSafeReference.h */; }; - 3A96B895BAA5983FEB9FEC604986B783 /* shared_realm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56CC2A6A09A80F6AF6217E7CD1519A0F /* shared_realm.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 3A9EBE6259AABD5E8C9D29024C890100 /* race.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FCB6A8F99C4899F7414D370D4A77A3F /* race.swift */; }; - 3AA528A6C74ACB87BC3C01E5A1FD3AFE /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = D48805F906562E74DE449E16534E7A59 /* UIColor+Chameleon.m */; }; - 3AB142E626E038F53D47F81030F6EC3C /* RLMResults.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = DE156E186646316B964B7775D53851FA /* RLMResults.h */; }; - 3AB8C81B75405F6E44760DC99221CAE3 /* FIRAuthExceptionUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 003BEE696E52AC5C0543F4C821DC9451 /* FIRAuthExceptionUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3B7A1545E4EB0DB3F5AE10620A1C1DBC /* FIROAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC5C7A6F37609623B65E1BB735638A5 /* FIROAuthProvider.m */; }; - 3BF229262126198B764A60D36A705C61 /* RLMRealm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4AD1430AEFB88002077F297A1D31604D /* RLMRealm.h */; }; - 3C059938A4BBAD0424376B4B48403E05 /* FAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = FFB8A6D618A3C03D20469FFA5E164E9B /* FAuthTokenProvider.m */; }; - 3C1A7460FC8CA2298DA7F9CD0C63470F /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = F85E685C88F5CB8F7BCA127284A9E509 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C23566862444A9D303BDF3E1B981CE4 /* block_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = ECD17D826CB656882BDB7CF28C25FC53 /* block_builder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C4C96E11DD8EEDC0F05455F05029EB0 /* FWriteTreeRef.h in Headers */ = {isa = PBXBuildFile; fileRef = AEFD7E280A0837578CD031AA70BCCF6E /* FWriteTreeRef.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C6E002CAFD3F9C6AA4BBD516F424515 /* FRepoInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FD496277CE7CD6A22335D4267183D1 /* FRepoInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3D7DE7F20826C867BA02135A0A796A54 /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CD0E05902763B9243D41CA67C83696E1 /* FirebaseCore-dummy.m */; }; - 3DC0D698C839EA285501266685CC0379 /* FIRAuthErrorUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 75BD0946CE5246864866AA4AC0F912C1 /* FIRAuthErrorUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E083F23737BC2771B16F318CD6EDE33 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761F5D38A926E73917FA881566026AEB /* Error.swift */; }; - 3E3A768A8F1B9D2A8F061C709ED133AB /* FIRVerifyPhoneNumberRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 189A223201EBFFEBE5AB937C2B736211 /* FIRVerifyPhoneNumberRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E43EC30689C9BAF9A786F9B001A27DD /* FEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = B537910B3FBFF83F11E3EF416591530D /* FEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F2AA3BA08A6E76C0F505770B8EB58B5 /* FPath.h in Headers */ = {isa = PBXBuildFile; fileRef = CD8A171098CC2FB6667109F3D914190E /* FPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FDB38F6164FE77929DD8D9C77AEBAD5 /* RLMSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E415DFAAD524C6807AF22864550F23CF /* RLMSchema_Private.h */; }; - 3FEF808194F3652A160164894CEBF133 /* GoogleToolboxForMac-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 486A22C0B0F79526DA6C0AD53C26AB4C /* GoogleToolboxForMac-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 400BE18C45AC3C50560C2E5B27B73299 /* options.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A1DE1315A11CD023158786D3187DF8C /* options.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37877D4EB487DB81F244130A76A2F49F /* RLMSyncUtil_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8888DC66E10879CC9EDB6F60DD99AF13 /* RLMSyncUtil_Private.h */; }; + 37C86C6EA85215102C748A965D086BDC /* after.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9315BCEE77E17FC2A4B79EACFF40998A /* after.swift */; }; + 3841B01BBAACA78623BFFF29E617D96A /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = B42B4A68852510BA4C384A5AF6D0B894 /* FIRAppAssociationRegistration.m */; }; + 3891F0042ACAB86B96740144A8D0A12F /* FIRDatabaseConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 7410C99F41C1D0EF8889CDB35AB1D7D2 /* FIRDatabaseConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38A094BAD14BE15A85A2DCDA246202B3 /* FIRNetworkConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A6B4ACFDFB716762D7A770A34CD986 /* FIRNetworkConstants.m */; }; + 38AD3ED521873A58EBB3E8F9474A2E19 /* RLMSyncConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FBAEF6A37B78525066DB01BBEC072B7 /* RLMSyncConfiguration.h */; }; + 392F2CF142BAA751AC1BB61D8B757D98 /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 63C90892838E596442C01C439B319CB3 /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 394D1F99288AEA2D80645BE108867645 /* binding_callback_thread_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DD80A04952275F00220C6174A8ED422 /* binding_callback_thread_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 39615CBE4DDB205A8EF63B8DA83E345D /* port_posix_sse.cc in Sources */ = {isa = PBXBuildFile; fileRef = 06A8B6CE8E50420450544145B479DC04 /* port_posix_sse.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 3970EAB4A4862FD38D24B32700DD16FF /* FSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = B67762DF6B2CCF756D001FAB91FB7181 /* FSRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39828E7C2658680F1313EE495297C1B1 /* write_batch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9703CBEF20334B7462F73334C5B156FF /* write_batch.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 3A50F5C8ECED9627F2EBD97F61BD376D /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 9248A90B24912C0222CB8033CA987645 /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; }; + 3A8A8146F05B521D8851EB803EE4A12D /* FIRDeleteAccountRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B19ECCE4BEA2A0A53D17243036E9ABB /* FIRDeleteAccountRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3AA528A6C74ACB87BC3C01E5A1FD3AFE /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 54030AD9A4B116C4E5FA0A75606E68A4 /* UIColor+Chameleon.m */; }; + 3AB8C81B75405F6E44760DC99221CAE3 /* FIRAuthExceptionUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 622796B1E0C22A2BC786C351F242C965 /* FIRAuthExceptionUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3ABF8EDE834FD7A79BF0D118C88B5883 /* RLMObjectSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 041186F74B1C4AEC7DE643D8D7F780F8 /* RLMObjectSchema.h */; }; + 3AC1624E17DACAC3AEA1D9543E58ED55 /* DataApproximator+N.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B3498DBB737BA19207FE404C0C6647 /* DataApproximator+N.swift */; }; + 3AC9A6193ACBB2022412D554C807ECA4 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 038FC2F39E49914CC7AC3FF9A6AAE199 /* BarChartDataProvider.swift */; }; + 3AF16F62C64B49F32E71211A47C1967F /* RLMRealm_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 224372ECAFA42A4C308C2D50769DC77D /* RLMRealm_Dynamic.h */; }; + 3B1FDC5E55797BDBA08A695342570994 /* Realm.h in Headers */ = {isa = PBXBuildFile; fileRef = 7612B8886297ECA57B9853F437A7F196 /* Realm.h */; }; + 3B7A1545E4EB0DB3F5AE10620A1C1DBC /* FIROAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 487094C994310B27F08E297BFD93E02A /* FIROAuthProvider.m */; }; + 3C059938A4BBAD0424376B4B48403E05 /* FAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = C625C91DCDD9D09FA9160B1C6DBBB357 /* FAuthTokenProvider.m */; }; + 3C08FD7959BD8AB4EEFE90F812CE0331 /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE2A0BA98F28B03B880E89F1DA0DEF4 /* ZoomViewJob.swift */; }; + 3C1A7460FC8CA2298DA7F9CD0C63470F /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = 331C5BE3EBECEF6AE93C09CD0EDD6D68 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C23566862444A9D303BDF3E1B981CE4 /* block_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9339F53FE10BE090D1004CE9755EC055 /* block_builder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C4C96E11DD8EEDC0F05455F05029EB0 /* FWriteTreeRef.h in Headers */ = {isa = PBXBuildFile; fileRef = C887CAF83F9F233C66FE18F3B3CB5556 /* FWriteTreeRef.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C6E002CAFD3F9C6AA4BBD516F424515 /* FRepoInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 165CDD1930D875689EAF18ADF9ADE087 /* FRepoInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C93FB4B67CCE624CDB59AB77B0D93E7 /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B4D3FD0F91CA23485218BEAEE8762E7 /* ICandleChartDataSet.swift */; }; + 3CCDAF71A141437EC1D6E4096C1E0F92 /* SideMenu-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B09EA49F16E2D3D6352F64FFFD1F3EE /* SideMenu-dummy.m */; }; + 3D3AC8D12A23595327C1B09C5729FF56 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774C4A3357F416FF4ABBC5D20E381FAC /* YAxis.swift */; }; + 3D5768C2ABD4E97A261A67A37B74694D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + 3D7DE7F20826C867BA02135A0A796A54 /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 21A74F61C5F4B30CF6861EE4EB5132E2 /* FirebaseCore-dummy.m */; }; + 3DC0D698C839EA285501266685CC0379 /* FIRAuthErrorUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D000FE4E703132CF7C1BE92990CC8A8 /* FIRAuthErrorUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E2FA3D0FE09B85E081CC9BDA92C299E /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F5BE1BD9030E21522E465FE0E909980 /* SVIndefiniteAnimatedView.m */; }; + 3E3A768A8F1B9D2A8F061C709ED133AB /* FIRVerifyPhoneNumberRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E390C1462F6EED57261052298904E6 /* FIRVerifyPhoneNumberRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E43EC30689C9BAF9A786F9B001A27DD /* FEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F6D122CADF2A18DDCE41FB31FE5F56 /* FEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F2AA3BA08A6E76C0F505770B8EB58B5 /* FPath.h in Headers */ = {isa = PBXBuildFile; fileRef = D4D40227F5A0D254B43A099C8CE79364 /* FPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F683D868E4CD041C73777BA74E672DE /* RLMObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B6B81212097CABC380F5F7C605BD02 /* RLMObjectStore.h */; }; + 3F83D566545862E1009627E70FB796BE /* RLMSyncUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 79354ADC42B200C248C8124D60CB81E6 /* RLMSyncUtil.h */; }; + 3FEF808194F3652A160164894CEBF133 /* GoogleToolboxForMac-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F0C0144FC237834DEEA404A9A57B64F /* GoogleToolboxForMac-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40088B3E7230D95BFCB3AFB56CC851F0 /* RLMRealm_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 9520F4E98820B6F558926064876F5AC8 /* RLMRealm_Private.h */; }; + 400BE18C45AC3C50560C2E5B27B73299 /* options.h in Headers */ = {isa = PBXBuildFile; fileRef = 88C62B868B2BEFA0EABA6C50EB778159 /* options.h */; settings = {ATTRIBUTES = (Public, ); }; }; 403E3E170DCF269D5CBA1C530ECA901B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 4074AA6F2557EF7970DEDE67B04433B6 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC505C9440C7D4BEAA2918C701E0D1E0 /* AnimatedImageView.swift */; }; - 410648CB86017572E60C09CA520CA6D3 /* fbase64.c in Sources */ = {isa = PBXBuildFile; fileRef = 9324BF7B815CE592B1B98F5DA6A82328 /* fbase64.c */; }; - 41410A8B270F2C16B9405B442C2D2BC2 /* two_level_iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5B87D1659FE9B26E6CCB17A4949B8CE8 /* two_level_iterator.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 4173E89335FDF28450C43EF8FF76FAB7 /* FIRAuthCredential_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F136DFF42C239BB88A3F429C6CDA4D16 /* FIRAuthCredential_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 419CCE94441F2E82F6FDB3902BC79CFB /* FIRNetworkConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CF285C720B7E99C27DE9EE39CF64F0C /* FIRNetworkConstants.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 42103068D6A85AE95E9463539D41699C /* FIRGoogleAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C5F1BDBD937E21E2A932593664BC2E4 /* FIRGoogleAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4220326BC5E7881CF3F6140803A1FBDD /* FRepoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 324F54FD594D01AFB378373F9C8932B6 /* FRepoManager.m */; }; - 424D2584DF6DFA622674DD14BD12279D /* SVProgressAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 581F88DD3FFB5C907CC453A1F6B2D690 /* SVProgressAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 425F51AAF70C7D8417D57D1B19C88B13 /* primitive_list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D25B3E3B6981BC07B4A23CFB6C0C24FA /* primitive_list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 42634C5534ACB418B2A13897DEE4C361 /* atomic_pointer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E5E5A2031B2F2B7760AC0A33A47EF55 /* atomic_pointer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 427A0E2994FCDF7983EA54011BE1496C /* log_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = C58D534444744028E8F2BE35D2A31AAC /* log_reader.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 42F6289D66D8921AD20CA107DA1F60C6 /* FIRAuthURLPresenter.h in Headers */ = {isa = PBXBuildFile; fileRef = B245149225ADBB6B6CB178D8F021E352 /* FIRAuthURLPresenter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 433C9C7D70ACDC7721ECDEFA41B4F0D1 /* RLMSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = B95F64448624F99D96C4102CA1890978 /* RLMSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4354E2DF5EE4D6FD602D9BA92D62D385 /* FTypedefs_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EC2A4FE3CF03DBEF8339CA2564CF346C /* FTypedefs_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 435999D32C443ADABB5E3A8EAD9ED8E4 /* object_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA496CD547DFB293FF3FE7B78A33A15A /* object_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 43624EF43605D462BAED57193E677436 /* FPriorityIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 77E5295317BF8E35A4774EDB9696C913 /* FPriorityIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4409FBFDFF1BA31FD658A2D8D30DEE8F /* RLMArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B1E5B3FD413F33EB83E2906392EB292 /* RLMArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 440A1B4B6EEBA46AC63F6947321863CF /* FCompleteChildSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 9621451D235008B6528F52230A6894E9 /* FCompleteChildSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4414F571C95D4DA5879D21B8DE240C7F /* FIRAuthAppCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3A63432CA5505962BAB132A7847305 /* FIRAuthAppCredential.m */; }; - 444696F708FB0CE560866823A7ADA811 /* FOverwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = BB7C81EA1D6BB6AEB7FC78A6B766921F /* FOverwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 450DF41F173DA551D3267F90654AA249 /* hang.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65C88EE0FD6E4593C528C854C2430593 /* hang.swift */; }; - 4532825CFEB89216C05BD319BD9E9864 /* FIRAuthWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BA03F2D46A4EBDF1B8BD831A98384534 /* FIRAuthWebViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 455AA9E3F75E2D22FC0630FE1D3A38E7 /* FLeafNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F0A0BAB79736410A6D7CC877ED9A4F /* FLeafNode.m */; }; - 455C312BB29EF7AB3F980E7EF4B4ED37 /* FNodeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = CFCBD1049707A9F58E0E65E23821926E /* FNodeFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45A17F934CF51569BD4F248ACEFE005D /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = FA137177B101DF12EEE9B8A2FC68BC56 /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4648BA9616288D53B2B5DB31C4D6222C /* UISideMenuNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91616CCF5C4E910975ED0143C9C9FA25 /* UISideMenuNavigationController.swift */; }; - 468DFD90B6C4DA2F7CFA0C1C89F1B615 /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F2EE7DDBF136DD05C0E02ED154059FE /* nanopb-dummy.m */; }; - 46FFEBB3A33AAAAE800781E02CD80EB6 /* FTupleNodePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 476E8E54604E4CD6B03F317728CC19F1 /* FTupleNodePath.m */; }; - 47360E79F6A777934FA2C18198E447CB /* RLMAnalytics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7675A21D9CF25DEBE0C17AB10A2B06F0 /* RLMAnalytics.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 47656E4D3981F8FCB5033EC9E13915FD /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 318F1A2D4EC60AC43046D5DA67C51D47 /* GTMSessionFetcherService.m */; }; - 47D4B618FC55B31C7D92B6ACC8B7CF9A /* RLMObjectSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A9B83582E104AC09BA078311C252D8F4 /* RLMObjectSchema.h */; }; - 47D55F00F3EE8A4D1C20C1A729D5E12E /* FIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = B62365D273DD45764036DFF87AFC2E3A /* FIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47ED06E40455204FC3A6AC6EB9F1A105 /* leveldb-library-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D545BE1C689816A8345AC0B5691A94 /* leveldb-library-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47F678371D1F9954A1AFBC42F875C3C4 /* two_level_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = BE2357C0B1A5BD4EC81436E3CDC3BE3D /* two_level_iterator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 484A0DB6BD53D6803DC36BCAC3B8698F /* firstly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96DDC705EBD3CE46C26E4DFDC7B1AB86 /* firstly.swift */; }; - 486DB82FAFC527FF8DA49964A7B22305 /* FTupleObjectNode.h in Headers */ = {isa = PBXBuildFile; fileRef = C1A8F0D90BCCB517218BE7784558247B /* FTupleObjectNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 48C1A63CAD2ED81462EF201A641DDE1A /* histogram.h in Headers */ = {isa = PBXBuildFile; fileRef = 544C412E1BFF5BA8C01C7DA3EA8CD2A3 /* histogram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 48F1470AB6BBF124094CA124D6310677 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 378C81AC447EC1755C6AE069A0AA329F /* UINavigationController+Chameleon.m */; }; - 48FF6E579E7F64D81A7D638D12BA15DC /* system_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B39D3D8B35335FA45948869AE8CC032 /* system_configuration.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 493F116D2ACFF2D947E6F334FE73C1BC /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 65FC2AD306FFBF80D008C8310A3DA2D6 /* UILabel+Chameleon.m */; }; - 49433F5BF1CDBEE4B750FC1F7FA0E31F /* RLMAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = C12E8A8D7D505477165899FC9D764847 /* RLMAccessor.h */; }; - 4945C0CDE46AABECBAA146239ECE29C7 /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09193CF269C262BBE8A20C9A22C1D22C /* List.swift */; }; - 4959495C7F1283AA5DFBAD578C6FB776 /* after.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10F9EA5391B3EA21581C23210B839467 /* after.swift */; }; - 498DC29155467AC093701C1AF5EE3807 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDCA84FD49BEBABF9E067C2827A9E33D /* Placeholder.swift */; }; - 49B39C06E9A82762BD6E3C113FBB0E5F /* RLMObjectSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B564B0B062EB8F11B60E93E83E8FFF7 /* RLMObjectSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 49BD0A719C61893E79267E6FCA661C3B /* RLMResults_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 24AAE30D6056FD7D084FEF595C799173 /* RLMResults_Private.h */; }; - 4A0827FD3570B3316C37ED07DCB5E76B /* RLMPredicateUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B8C53A7F6723A3EAFCBB1801C1CDC42 /* RLMPredicateUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4A09B90C992548B3B76199F8162917D4 /* FQuerySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 26E5F18ACD873FD6A13EE7F4475650BE /* FQuerySpec.m */; }; - 4AD0818276F1C0C54F358E4AA77EB41C /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 61DE8708D7E957E3C14D958C3924525E /* SwiftyJSON-dummy.m */; }; - 4B891FCED5762B1BF7172440593024A5 /* Pods-pocloud-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A8A5C31425BBA75A7B674379EC000AA8 /* Pods-pocloud-dummy.m */; }; - 4B9FFDCD46F8924501BA37F68744B480 /* FIRDatabaseReference_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 99BB089F5CF6B601E331E971470C012A /* FIRDatabaseReference_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4BB7D1059F3B2F87D223F9189C4DE5A0 /* FIRUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A88B654376481EF3246A8AA3E83B5B /* FIRUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C7A2A49C930463E736B7D4B334AA563 /* FIRUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 193C6C22EAE9A101142E050A6C97E5D2 /* FIRUser.m */; }; - 4CA47DA355F9B3E4A3917388D70B9250 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 31E90C01CF879F35869F5A24A5B7E614 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4CAD8FE0F1582C102C00F91A1A62A1ED /* RLMMigration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 5D29BE28AB8262B8B505B9098E19E55E /* RLMMigration_Private.h */; }; - 4D3A39B59624C3C544119F3957BCF255 /* RLMSyncPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = C1FBAEFB116E74CBCBF1A67240EC1E49 /* RLMSyncPermission.h */; }; - 4D67DCBF99A5372382DFC3DCEF692132 /* FIRAuthSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 9075980E4D0116EE5A04C9D0DB658EB7 /* FIRAuthSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E07EEA4D05FD6E2A66F638E805A1B5E /* FOperationSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C7E0F93D9D136C44D487B7C3B938091 /* FOperationSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E1BD0DB6636B8B5EC45B5359B79F410 /* FTupleCallbackStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 51DF135B95C2C63E71D97168F8ED319A /* FTupleCallbackStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E1FA16D371FA2636C1E14BC94B58989 /* FSparseSnapshotTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 982417A3B308786B28B3E55A210AC1FD /* FSparseSnapshotTree.m */; }; - 4E1FC5A266C9B38F6AD0BEB051CAFD59 /* FIRAuthDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 88EA2512216314AF93669CDC3C0BCC8B /* FIRAuthDispatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E27F2292740DCDC63080D90BD7F7163 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B7472A2B767877174E2DF15ADC3E8D2 /* Chameleon_.m */; }; - 4EB5633910B9930E2F7719D8DA835A80 /* FIRDataSnapshot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B224F4BDCAFCCEEC67565AEA22B5F5E2 /* FIRDataSnapshot_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4ED160046DDA065161D118430D338C89 /* FIRActionCodeSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 9876E90F3950A1B691CE092868255CD8 /* FIRActionCodeSettings.m */; }; - 4F654F94BA01B069E92DACA085A46975 /* RLMSyncSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 22095030353ECE1534E0D2F078683231 /* RLMSyncSession.h */; }; - 4F82A824649A004B0D4A3F0CD21578F8 /* RLMSyncManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 96880D71BB718EC563DB546D8AC09B02 /* RLMSyncManager.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 4F8D10D1E11532433156C9EEE71054D4 /* RLMRealm_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = DF15C92D0E7C68B041093A95CAB8EB6F /* RLMRealm_Dynamic.h */; }; - 502F3F61CDF8A47AAB03A2DFF07550E5 /* RLMSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = E415DFAAD524C6807AF22864550F23CF /* RLMSchema_Private.h */; }; - 5042ADD2D096C04B949D32507BE9FD54 /* FCacheNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AEB804462BD0EC775A3A28A6CA369C0 /* FCacheNode.m */; }; - 505ED2112E6CA37727E8B624B92D7FBD /* FIROAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F76D46FDE19DBAEBCBE30A226A0E30DE /* FIROAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 509A5621DAB44B06929B30ACCA7CA598 /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 061FDDD238820A8A858B697D584DB04E /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50DD971FAFA29D59E89EBD4B386CBEB5 /* log_writer.h in Headers */ = {isa = PBXBuildFile; fileRef = 88736793BE9E25AAB9A2ADE921569424 /* log_writer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50E3DB1032B98282167E0757B01B4157 /* comparator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4887B8B0CF7F087448CFB1B1B9B8C687 /* comparator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5145E0F78D02E14C4966514339300AF2 /* Thenable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CFB44E7986909688AA67ACB7477AFDB /* Thenable.swift */; }; - 518DEB113A71CE3879776A6652B430E3 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DEA2ECAD7B0C441945F043E8A185698 /* iterator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51B41DAACA1257F626E94B1631F1822E /* FIRTwitterAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 211FCA1FFC4C77EA93B530870B20B073 /* FIRTwitterAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4074AA6F2557EF7970DEDE67B04433B6 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A94085869362C1259D5B71A3909042F /* AnimatedImageView.swift */; }; + 40B98EAE903725671DDD49C09B110ECF /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8445119CC11E5FC26985FC948F5A57 /* AnimatedZoomViewJob.swift */; }; + 410648CB86017572E60C09CA520CA6D3 /* fbase64.c in Sources */ = {isa = PBXBuildFile; fileRef = E0211EBEE4C7A49C7AB45756E6F92459 /* fbase64.c */; }; + 411D6578ECE50346770395D74A902DCC /* RLMRealmConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2A132F01DDE0C5955D7C9BBBA204B3F3 /* RLMRealmConfiguration.h */; }; + 41410A8B270F2C16B9405B442C2D2BC2 /* two_level_iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = E55D99BE0F6247BC1B1AB551C188D909 /* two_level_iterator.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 416214FA92743FF11B78120FC4734B28 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEEA8469FAA42075F634AC4B22E81818 /* CrossShapeRenderer.swift */; }; + 4173E89335FDF28450C43EF8FF76FAB7 /* FIRAuthCredential_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C240F176E3878598E61FC0A7003130E9 /* FIRAuthCredential_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 419CCE94441F2E82F6FDB3902BC79CFB /* FIRNetworkConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = CC418A1C526E702061BF276A2065F2FF /* FIRNetworkConstants.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 42103068D6A85AE95E9463539D41699C /* FIRGoogleAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E59227236440A499B7F293942D7D5FA /* FIRGoogleAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4220326BC5E7881CF3F6140803A1FBDD /* FRepoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F9E15F476463A05F8A46ADFF9C3DF892 /* FRepoManager.m */; }; + 42607FB38CB0125A4350B051514AD79B /* RLMAccessor.mm in Sources */ = {isa = PBXBuildFile; fileRef = A30E60B721D759C4C218B11222B2EA7F /* RLMAccessor.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 42634C5534ACB418B2A13897DEE4C361 /* atomic_pointer.h in Headers */ = {isa = PBXBuildFile; fileRef = BD866A6602939852AD5141FE03BCBFF5 /* atomic_pointer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 427A0E2994FCDF7983EA54011BE1496C /* log_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = E33AA5AFBCAD9B41CB718793866A994E /* log_reader.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 429F18D5A4135B9DDE015E390C9E2091 /* RLMMigration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51FD4CC1F7669D2D7B4777BED9085ED3 /* RLMMigration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 42AED9C6D8C9E42E85DC69E979944D39 /* RLMOptionalBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4140CE4FD05BC15BB6B384192DF8E87C /* RLMOptionalBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 42F6289D66D8921AD20CA107DA1F60C6 /* FIRAuthURLPresenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F4823FC39667A5B8492225E3E4614C1 /* FIRAuthURLPresenter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4354E2DF5EE4D6FD602D9BA92D62D385 /* FTypedefs_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E5397D3D838C93324D363E3C9F189C47 /* FTypedefs_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 435F4C4ABBA3555525E12FB7D784E9C4 /* RLMObjectSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 591D1D76F93D97B88ABD56DA3759FF47 /* RLMObjectSchema_Private.h */; }; + 43624EF43605D462BAED57193E677436 /* FPriorityIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = CD07664D2740A69675520BA0C3A1E032 /* FPriorityIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43D39889A2A4D9B161B8E8B36D10ADFC /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF68C799DE10F35FA51248AE1BE962AF /* XShapeRenderer.swift */; }; + 43EE250C0F409FCAB4282401E61AAE91 /* RLMConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 74B094E3EC51E25F052BA9E2382D7605 /* RLMConstants.h */; }; + 43FC64E18EC4C25E122DB7458F3FA4E5 /* RLMRealm_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 224372ECAFA42A4C308C2D50769DC77D /* RLMRealm_Dynamic.h */; }; + 4405A6A5344DDD391720FDD1C5C9BD2A /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA78FBBDAA361F1432A063AFD1509F4 /* XAxisRendererHorizontalBarChart.swift */; }; + 440A1B4B6EEBA46AC63F6947321863CF /* FCompleteChildSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D9A17D3F1B383B2D2D7B66C7DB622F /* FCompleteChildSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4414F571C95D4DA5879D21B8DE240C7F /* FIRAuthAppCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 21E80C1DA37DB6B3201C7AA374EF11A5 /* FIRAuthAppCredential.m */; }; + 444696F708FB0CE560866823A7ADA811 /* FOverwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 07093C7D6DA5E12EE853618511C3670F /* FOverwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4532825CFEB89216C05BD319BD9E9864 /* FIRAuthWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 87FC2984C9D99C99747A87A025913B44 /* FIRAuthWebViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 455AA9E3F75E2D22FC0630FE1D3A38E7 /* FLeafNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 429E85852D2E482D63FA507AC1AE51C5 /* FLeafNode.m */; }; + 455C312BB29EF7AB3F980E7EF4B4ED37 /* FNodeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = F71A6D520394229A328EE1222F948243 /* FNodeFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45A17F934CF51569BD4F248ACEFE005D /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = B9738F72A8A19560EBD290A4D37C8634 /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45E1D7A51B9B03431DEE490674BFC0A9 /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5351D32E1AB468685EAAE5EB133BF95F /* MarkerView.swift */; }; + 45FFD26DA4724F422AF6CA0693A317B8 /* CustomStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99FF0EF905832C028A18D2964EE95D82 /* CustomStringConvertible.swift */; }; + 468DFD90B6C4DA2F7CFA0C1C89F1B615 /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA6E1E53E3A26C9A84E82C9866A8CD1B /* nanopb-dummy.m */; }; + 469F31F57BBF45D5418A447CD02E799E /* RLMSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 57003CACD3FF47250D640C28A4EE994D /* RLMSchema.h */; }; + 46BEE5F68FE3C89EA565CC6A159A27A0 /* object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C9AF27BE97B3A9642D563A4E370337B /* object.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 46FFEBB3A33AAAAE800781E02CD80EB6 /* FTupleNodePath.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C9941C01EE06DEF4871CA17AAB434D /* FTupleNodePath.m */; }; + 47656E4D3981F8FCB5033EC9E13915FD /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = EFA9A0C3EE5566683404437CECD445BC /* GTMSessionFetcherService.m */; }; + 47A398B18A8CE6D23F5BB2E001A83FF7 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390993B058394CBF562C99D0708C2B78 /* PieChartDataSet.swift */; }; + 47D55F00F3EE8A4D1C20C1A729D5E12E /* FIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA49FE548704E67BF70796D86854682 /* FIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47ED06E40455204FC3A6AC6EB9F1A105 /* leveldb-library-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 67E8667240251D060ACE1B6810C0F9F4 /* leveldb-library-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47F678371D1F9954A1AFBC42F875C3C4 /* two_level_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 49C424A7023DC591070581A5D6B10560 /* two_level_iterator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4821BBF62546D1ADB504C5E5CEB17EE3 /* RLMCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5707705EF37EA2D9FFABFF95DD250125 /* RLMCollection_Private.h */; }; + 486DB82FAFC527FF8DA49964A7B22305 /* FTupleObjectNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 64F9F741EB513F18E517C47B3C5ED061 /* FTupleObjectNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48C1A63CAD2ED81462EF201A641DDE1A /* histogram.h in Headers */ = {isa = PBXBuildFile; fileRef = C426EB1EE80428CC1FBE266760F8C5F2 /* histogram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48F1470AB6BBF124094CA124D6310677 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E65BBDA82D1111FFEC7A68DCA3500B2 /* UINavigationController+Chameleon.m */; }; + 493F116D2ACFF2D947E6F334FE73C1BC /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F119668FF12921B1FEC53A13230593 /* UILabel+Chameleon.m */; }; + 498DC29155467AC093701C1AF5EE3807 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D087A754F0DA0746FDBCD5EEA0D7309 /* Placeholder.swift */; }; + 4A09B90C992548B3B76199F8162917D4 /* FQuerySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2C2720C0CA75A68F8506D31EB8D003 /* FQuerySpec.m */; }; + 4A1C47F3A607BB4FE2FEBA0E5E6D1F50 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8266BF952135223BA206F6CED75BBB03 /* HorizontalBarHighlighter.swift */; }; + 4B9FFDCD46F8924501BA37F68744B480 /* FIRDatabaseReference_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EBDA8379067C22D8BB9A65D2C095F6B /* FIRDatabaseReference_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BACAA53D0EC568832CEDD59ABA1CE06 /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BEE5354F319A46335D471652FD9FC51 /* CandleStickChartView.swift */; }; + 4BB7D1059F3B2F87D223F9189C4DE5A0 /* FIRUser.h in Headers */ = {isa = PBXBuildFile; fileRef = AE17264CB8229EBA8EFE7D2818563856 /* FIRUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4BE216A9543B0A37845E3129E2D1B3E8 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83F5A22F9B9DB04DAAC56E6048565ECA /* PieRadarHighlighter.swift */; }; + 4C7A2A49C930463E736B7D4B334AA563 /* FIRUser.m in Sources */ = {isa = PBXBuildFile; fileRef = B4E657BC55EA18198B25835E1B55D359 /* FIRUser.m */; }; + 4CA47DA355F9B3E4A3917388D70B9250 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A5AAF9218927014A049769DDDDE7833 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D16399E42DACB783BD832909B66F673 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A50F221F900E02D2064844A565AB7A /* CandleChartData.swift */; }; + 4D67DCBF99A5372382DFC3DCEF692132 /* FIRAuthSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AAD93E1BFA39EFDECA5FCB3AA0ECB8F /* FIRAuthSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D7D2B439AEBBE3F7FD80DE63769F269 /* RLMProperty.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4A562F06B8609FC8463FB76916809389 /* RLMProperty.h */; }; + 4E07EEA4D05FD6E2A66F638E805A1B5E /* FOperationSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E2D986345FEC7FFDEB3BB552A17AAC /* FOperationSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E1BD0DB6636B8B5EC45B5359B79F410 /* FTupleCallbackStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = CEBE5412165070041286682011D66E6D /* FTupleCallbackStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E1FA16D371FA2636C1E14BC94B58989 /* FSparseSnapshotTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E46FB0ECD07C21DBD630231B1BA7AF /* FSparseSnapshotTree.m */; }; + 4E1FC5A266C9B38F6AD0BEB051CAFD59 /* FIRAuthDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 091CBB58F14812C3DB81BBFB1947E6C1 /* FIRAuthDispatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E27F2292740DCDC63080D90BD7F7163 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = D1E697278816E8FEA395A13FF44BC435 /* Chameleon_.m */; }; + 4EB5633910B9930E2F7719D8DA835A80 /* FIRDataSnapshot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3BC82ED552CDE2F0B6AE44580EE2C9 /* FIRDataSnapshot_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4ED160046DDA065161D118430D338C89 /* FIRActionCodeSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C74B70411DB52E5DDD3045889C223C /* FIRActionCodeSettings.m */; }; + 4FE88B13DC674D2ED72B8E5DDBEE28A1 /* Pods-pocloud-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 39805068056EB58D370D71A27CD2F678 /* Pods-pocloud-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FF9A49B1FB1899C286AEF2BB07FA72D /* RLMSyncPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = 37266CD26FD5C3B0080BAB63BC24AFE7 /* RLMSyncPermission.h */; }; + 5042ADD2D096C04B949D32507BE9FD54 /* FCacheNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CC52069FAC7F19666FD143219161E54D /* FCacheNode.m */; }; + 505ED2112E6CA37727E8B624B92D7FBD /* FIROAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 519A49CE2EE30097D0276208C8FEAB99 /* FIROAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 509A5621DAB44B06929B30ACCA7CA598 /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E13BF49B439761787CC6DDCE1798F5 /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50DD971FAFA29D59E89EBD4B386CBEB5 /* log_writer.h in Headers */ = {isa = PBXBuildFile; fileRef = F5208118EAF286A10D95C99ACC06543F /* log_writer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50E3DB1032B98282167E0757B01B4157 /* comparator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B62EA01CFB05E93047777CCA1BFD294 /* comparator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 510E4C97F40677A248DF595EF41D1013 /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6BA37B57B834AB7486ADAA49713CD6 /* IMarker.swift */; }; + 511BF09915EFAF31E2D8F5D2BE018084 /* RealmCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = B030844EAC021F2346F11D17295771C6 /* RealmCollection.swift */; }; + 518DEB113A71CE3879776A6652B430E3 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = FDB9ED0C21ED4219B0208A70B359A0DA /* iterator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51A4FE5FE31FE516A4DA68F5277531F3 /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3319C402AAC42193BCF9797D4E79044F /* Property.swift */; }; + 51B41DAACA1257F626E94B1631F1822E /* FIRTwitterAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FF9AE944BC1704278BBE02A0AC2733C /* FIRTwitterAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; 51BF91AE859AB530E465910DC24C6481 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 51F81A72AF2C504944FDADC926B10ADD /* merger.cc in Sources */ = {isa = PBXBuildFile; fileRef = D395886C18262575291F9C963CB4F203 /* merger.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 5298578C6ED17ED21F7DEE409C9A8046 /* FTupleOnDisconnect.m in Sources */ = {isa = PBXBuildFile; fileRef = C924626DBF358408C0979CBA0AD1ED96 /* FTupleOnDisconnect.m */; }; - 52B2C61070DDC6FE99270E6BBB639925 /* FIRNetworkMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C88860B94B8599BDF9BE6D8FF30EC7 /* FIRNetworkMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 52EF2C7CE707010D53C475ABBF786628 /* list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FFCE27F142F0288671E419BA079D09F5 /* list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5387216E723A3C68E851CA15573CDD71 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6287EE2E2EBB2F65A34E83E0ED37A309 /* Request.swift */; }; - 5394DCCA526184F919D2416E58E43089 /* SwiftChart-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C8BF63BAB94A488687EF57BA50A2301 /* SwiftChart-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 544FDC91B4E21711475AB28C1D6F8979 /* RLMOptionalBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 072CC0EFA6553B40B3C6AD14AD95CDF5 /* RLMOptionalBase.h */; }; - 54A01D272C9352012F9FF6492D3B06E1 /* FIRCreateAuthURIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E600ACAE0B9220663CE65B77A1CC4B26 /* FIRCreateAuthURIRequest.m */; }; - 54A3CCB3F39CA70BA269BA03A1D8B8DF /* RLMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F431C8240104B5D4C9A11E38AB50DDBE /* RLMObject.h */; }; - 54F00EED638C35E4AA74BBA452C0FFD3 /* RLMResults.h in Headers */ = {isa = PBXBuildFile; fileRef = DE156E186646316B964B7775D53851FA /* RLMResults.h */; }; - 54F580BF4588159D6A61F21D15591805 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 80CCE5EF196537E4E1F1C22EB8F190BC /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - 5533ACC87CC583984578DE1BFCB1B82D /* LinkingObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AA0EB452A4908B2C18F2E3091E17C2 /* LinkingObjects.swift */; }; - 5576A08E4E5D0F44A39C74B3E685DAD3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 557815D7DCE9C01BB38EAA3A6F1E6484 /* FIRIdentityToolkitRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7524CFCF31C48861F456C88473538A4A /* FIRIdentityToolkitRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 559CF5036B8CC6593DF32FFD6014D480 /* FIRFacebookAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CEF3BA59ED9C27B0B1653ECD59C3AA5 /* FIRFacebookAuthCredential.m */; }; - 559D6A1DC482561D6872921A329AE48F /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 52B5019F9BF77445DFE298C506B80C28 /* GTMSessionFetcher-dummy.m */; }; - 55D8D5D912CFD2F3584E4553C2EAD734 /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = DC8998C2DD50C1167C9C926E3E4D672B /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - 576442174185E84DB817C3AE7DFF252F /* sync_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E819A65E8B105C06E39112892043DEC /* sync_manager.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 578289AD8005663CCA5DB316F4068389 /* SVProgressHUD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 67E3FFD687235B98417AECB81E391CA7 /* SVProgressHUD.bundle */; }; - 57B80E82B5C69BBC20F67D99D94641D5 /* version_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E0CE12FC42A620B6C0D721C835CC2C /* version_set.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57F954E5B8ED604165A7522B0BA96C02 /* FIRSecureTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 87E1BC974D69E0F783517F2A463676DD /* FIRSecureTokenRequest.m */; }; - 587A7DF9E86F1FED83F56C164870D90D /* FQuerySpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CE420DA1558F78911A3B350A9A11A79 /* FQuerySpec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 588602AC1BFA61E16A4DC0FD6E0781B3 /* RLMSyncPermission.mm in Sources */ = {isa = PBXBuildFile; fileRef = 813907820EE8D08F4E51858C8DF63508 /* RLMSyncPermission.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 58CBF20A1F56789FAEAA7DC13B8EFF6E /* NSError+RLMSync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2EE089B6DFD2B2508B0CB8D72C7E3C2B /* NSError+RLMSync.h */; }; - 59353E2457A4A550E91D12EE950FA034 /* FConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 23CA50BB5CC5430225B3A92952BB37AA /* FConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59F1C57594CC6425F75E3A0E32016BED /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBAA5BACA9745702C885EB1AF32FA673 /* Security.framework */; }; - 5A07C8CA75094253576057ABE15D119C /* FIRAdditionalUserInfo_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CA5424BB0A8A8591873A237C693AD88B /* FIRAdditionalUserInfo_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A4D7EA1033D8F2708B04767898629E4 /* fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A472B808EDB6A83459DD76A79343A48 /* fwd.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BB2ECA20F9E4BD0B75D1F1E6EC081A4 /* FIREmailPasswordAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = F55B226D0D00EFA040C976DF49045D23 /* FIREmailPasswordAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5BE10C5A182E7495F8076720DE73399F /* RLMAccessor.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C12E8A8D7D505477165899FC9D764847 /* RLMAccessor.h */; }; - 5C3FAB6582357180D3BC4A1EFC952BF6 /* arena.cc in Sources */ = {isa = PBXBuildFile; fileRef = F95DDBFD616330F5F6A67C5AED7689FE /* arena.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 5C50CF388C81ABE0F63D1E0423D2BA2E /* log_format.h in Headers */ = {isa = PBXBuildFile; fileRef = A625EB10C75C7FE7267B14C0AE89A3DB /* log_format.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CADD0254C8442F94E51AA85E4310D25 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = B9B5D98A29C93523516AD5AE0C1C96BE /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CCCBB0455397C38AF3F045AACCA5D83 /* FKeyIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 228D5C9C186B55465CBBD86B5E03FCC4 /* FKeyIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CF65A69A3ADB9FA9FB1F714D69E10DF /* RLMObject.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F431C8240104B5D4C9A11E38AB50DDBE /* RLMObject.h */; }; - 5D11C839BE86A43C242A5084E5EEBB19 /* FTupleFirebase.h in Headers */ = {isa = PBXBuildFile; fileRef = 727D09BAF5CCA8E230F101E228BFEB81 /* FTupleFirebase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D2D1C6DBE842385173F083F0A8CE4D8 /* FIRAdditionalUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F587118FCAFF6DA5E474BA0F9AABE6D6 /* FIRAdditionalUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5D55D7BB0B6E97CC8A55CAAF3D36BCD0 /* FRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDEC11E8A3A5A39A44BAA92E7B9CB80 /* FRepo.m */; }; - 5DCD38C17864574D9782E3E89FCE7403 /* FIRAuthAppCredentialManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BECC6E463ED9B84E1B747216E15C7707 /* FIRAuthAppCredentialManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E9E59C245E267AF031A25889C2B5BB3 /* FTupleTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D3EC63088647E496A1109035BAA3FAA5 /* FTupleTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5ED15DE93E0D61137AD67AEE7030A845 /* FListenComplete.h in Headers */ = {isa = PBXBuildFile; fileRef = E14EA890AFFB0CE667D86C0A69FFB986 /* FListenComplete.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F62D4BF53EE793742DA3CB460BAC9BA /* FIRUserMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E67C6A3497AB7667575DD1278AEC1BD /* FIRUserMetadata.m */; }; - 5F7203B3E3A13C8DFA1BB6A3D38B12EF /* transact_log_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E31678C76540C57F6A5E6F5B097EAB69 /* transact_log_handler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 5FB2E07F9547D78BE7031440404DC938 /* FViewProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = A3988973AE5C02333414D4A17044A957 /* FViewProcessor.m */; }; - 60114CF758A0FD7E04182B2434023670 /* RLMObject_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3183AF069AE0091159320866D444ACD6 /* RLMObject_Private.h */; }; - 60447CE0515AD55FFF99E2F966C67D83 /* table.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5EB2568CD43E1E978DA697D64C2E0CAE /* table.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 609A9DBF93FBDE3190C209F057C17119 /* port_example.h in Headers */ = {isa = PBXBuildFile; fileRef = 97556BF680D73BEE50BC370237CE2ED1 /* port_example.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 60BCACD5DF6380864584EFC1143499F6 /* RLMSyncSubscription.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 98D40162192EB7E105E483C7882AEA80 /* RLMSyncSubscription.h */; }; - 60F3C415F09D0C663A5A2A1D994460F1 /* cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5E3D6102C57EEF32AC91519BC2D70655 /* cache.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 61200D01A1855D7920CEF835C8BE00B0 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDFA25CA7B170D7E62F384298B2DA9C /* DispatchQueue+Alamofire.swift */; }; - 6163542FEA0446D63830BFFE4E3A6C8E /* RLMRealm+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7DBCC3ED273043DA153C2CB9A8D5B1D6 /* RLMRealm+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 61811049EF9DB96C6092507062774A05 /* RLMRealmConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 337BAD4B73E2EB61F0439C9EED57D9F8 /* RLMRealmConfiguration.h */; }; - 61AB8125234DA0505F61F21D8A4854E1 /* RLMSyncSessionRefreshHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7AB4EFC7D664CE1E573015CF430E9ABE /* RLMSyncSessionRefreshHandle.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 61B710AFDED32EC8BB6D8B5B3690D296 /* FConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7825758BA28D7B159C70BBC305286DEF /* FConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62E874A16C2A4062460E34245D003468 /* SVRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 82121DFC73E36F57610A2EA7B5BB32A1 /* SVRadialGradientLayer.m */; }; - 62F65AD8DC4F0F9610F4B8B4738EC094 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D8BA7FAB9088209FF49CF19669B6A8D /* ServerTrustPolicy.swift */; }; - 62F71D64F91549B7ED5E7842481C5C11 /* RLMSyncConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 39C3B310CEE800AC9572C07D5EE7954D /* RLMSyncConfiguration.h */; }; - 6317BB61D9B4A9D977156A6D0E8E8560 /* FIRAuthAppDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EC13AE3E7408848C1905A3C3DE6D75B /* FIRAuthAppDelegateProxy.m */; }; - 634B825E8EE66D790B327A918137732D /* FLevelDBStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = FEBE6C6CC4D11E5379DA07B40C9B46D1 /* FLevelDBStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63D2AE5A4724160215EA776E2943AC0E /* FIREmailAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2DA7600F0669E802B1DCAC3D7C2D8D /* FIREmailAuthProvider.m */; }; - 642B039A54F8DD39B0830022A960CF25 /* RLMSyncUser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 964BC0A02DE65A55B384856AD9CAC6B8 /* RLMSyncUser.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 6436CC7F16C142719C29EAF95E019660 /* FIRAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 5678876753C0D72CCD71DE8D71ABE2D7 /* FIRAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6486781D756A9D71FE5C6E56CC9A343F /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D23F10C68371CC69CFDF6EDFEE2FC50 /* ImageCache.swift */; }; - 64DC09353634B71B2EB822DB2445E20E /* SideMenuManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25ABAE281B9B85515231C787D50B50C8 /* SideMenuManager.swift */; }; - 65CFC8401439ED200531A9C8BA093380 /* UITableViewVibrantCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0D50CD1AFF150D598303B5E53DD1E5 /* UITableViewVibrantCell.swift */; }; - 65DBBF871124634290B37233C5CB3C22 /* RLMRealmConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34173751FD882FD988CB7527BF3F51F0 /* RLMRealmConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 65F9A2273F15E6C1EF47856161D08D8A /* FIRNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 60CE8BE9D8110D3D1BD11AF01584255F /* FIRNetwork.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 66130FDE8FEDDD3AE44E9CB237EC19DD /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 12C54A50907C72C5231FE064E0FD5EB4 /* ChameleonConstants.m */; }; - 663A9A45CAF621C5C4620E5055213511 /* FIRAuthAppDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0443E9ED4AFAB4239674A2E3FB46F5C2 /* FIRAuthAppDelegateProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 666BD1254E2A443691332CBDE6827677 /* FPersistenceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F1951617C35D1A46317044DEFCFBEA /* FPersistenceManager.m */; }; - 6682B3A00CFB28FE5CC024CC9628C5F0 /* FIRAuthAPNSTokenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DADF51336A5F9C36ADC982EC9D1648C9 /* FIRAuthAPNSTokenManager.m */; }; - 668ACC75094C06911E5973489F06EDE0 /* leveldb-library-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B2CE9529795C2488347FB5015888DB6 /* leveldb-library-dummy.m */; }; - 6696EB45A4D8070589AFBBDE0AC4C71A /* filter_policy.h in Headers */ = {isa = PBXBuildFile; fileRef = 316EC660ACCEC0B560483E4DD14BA386 /* filter_policy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66AF70C24AB8687E72D88BB969A2BF71 /* FMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 79C6FE77B99E2E6E5FD2CF6ED248C543 /* FMerge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51EFF7414BE559B77F1484CA3A375A02 /* RLMProperty_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = E59A62C06B2C9F2B6C1B0236FA1B0750 /* RLMProperty_Private.h */; }; + 51F81A72AF2C504944FDADC926B10ADD /* merger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 073A9335EC36C2F8B51D4B164257ED28 /* merger.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 5298578C6ED17ED21F7DEE409C9A8046 /* FTupleOnDisconnect.m in Sources */ = {isa = PBXBuildFile; fileRef = 95950109422E3F22FAD616FDD4DBC116 /* FTupleOnDisconnect.m */; }; + 52B2C61070DDC6FE99270E6BBB639925 /* FIRNetworkMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 175B6161C1230906A04A8615122B8041 /* FIRNetworkMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 5387216E723A3C68E851CA15573CDD71 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9CDD61CD5457BBA5EE0274AA530BF0A /* Request.swift */; }; + 5395E80F63A0F3C2F2CBD4ED375F6A68 /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64E114839F523B12414E98D6DAD4E252 /* Resolver.swift */; }; + 541ACC8E434F35204868338AED4A3E18 /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031086F2CEE1F3707ED06FED89720174 /* BarLineChartViewBase.swift */; }; + 5438A7BFE0B22BF23D49AF0D592F915A /* RLMSyncSubscription.mm in Sources */ = {isa = PBXBuildFile; fileRef = 82F2D45183A0F738F0A97A50B934F10A /* RLMSyncSubscription.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 5485ADF94A92CF163F3FF10BD92B946B /* SideMenuTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4551C926FA2A7BC7D0743024BB5070EF /* SideMenuTransition.swift */; }; + 54A01D272C9352012F9FF6492D3B06E1 /* FIRCreateAuthURIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD8DE89032093185844C9ECAE60C7D9 /* FIRCreateAuthURIRequest.m */; }; + 54F580BF4588159D6A61F21D15591805 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = EB15FCB45BA90AB127CACB1192603374 /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; + 55424BCED863886F63862E88144BA88C /* sync_session.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D62F6F9721FAA23A77D7278A9B6E70C0 /* sync_session.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 55430EEFD7E29A71CA560F9942C2A76A /* RLMAnalytics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71DC5EFBE1F1E241E8B79E9B04CF1148 /* RLMAnalytics.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 55499034EDA765EA78EDAFADB5BAF9AF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + 557815D7DCE9C01BB38EAA3A6F1E6484 /* FIRIdentityToolkitRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = AB352C018761A50FDA6E6A42F12E7E68 /* FIRIdentityToolkitRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 559CF5036B8CC6593DF32FFD6014D480 /* FIRFacebookAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A77A063313D4220856407B8BD56CF59 /* FIRFacebookAuthCredential.m */; }; + 559D6A1DC482561D6872921A329AE48F /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BFE788C6F697346F9CD4654D4BFB68B5 /* GTMSessionFetcher-dummy.m */; }; + 55D8D5D912CFD2F3584E4553C2EAD734 /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 88061D9A026D1728AF0FEC00E1BEA2BA /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; + 560C8F3AD5B3809D0148B2BB80C987F5 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B42F50EF177DECC23EBEEFD624F39A /* ScatterChartDataProvider.swift */; }; + 56E9ED6714E4BCC33A5E4375247737CF /* Realm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C371F5521B2BCF67AC0D24836A6CC7 /* Realm.swift */; }; + 57007C54BFFFB47A9A2F149BDD693C83 /* RLMSyncPermissionResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = B7DB66706D8B56DB5564786815B99060 /* RLMSyncPermissionResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 575EDB8DA96849B05B2D90CBBC6E7F37 /* Charts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 55528499E664DADC6B16CAE2401E1A47 /* Charts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 57B80E82B5C69BBC20F67D99D94641D5 /* version_set.h in Headers */ = {isa = PBXBuildFile; fileRef = B9D3E57FCB0E49389632295408450BB0 /* version_set.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57BD56667F38045F3D1DC5559D3E60E1 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DA0CA71CD6ED19EB97B27C1B3504ED /* Box.swift */; }; + 57F954E5B8ED604165A7522B0BA96C02 /* FIRSecureTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD6C9F3DA49AF649D92BF0AAB18AF8C /* FIRSecureTokenRequest.m */; }; + 5857B07B67A8752924C22368C45E436C /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF137FA4ABCDBD0A212686359A421D38 /* Renderer.swift */; }; + 587A7DF9E86F1FED83F56C164870D90D /* FQuerySpec.h in Headers */ = {isa = PBXBuildFile; fileRef = BFC65C3D6DB1260D4CC718E3EEC5EA65 /* FQuerySpec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59353E2457A4A550E91D12EE950FA034 /* FConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = AF5CA06FB9690D72D6F56294BC5BE968 /* FConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A07C8CA75094253576057ABE15D119C /* FIRAdditionalUserInfo_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D6EAE3288DF54A1F96CDB9B2AD0F452 /* FIRAdditionalUserInfo_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B9B5A9F3DB9CFC805BA81F027C1D4A2 /* RLMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F68EED2313969991AF9FC6F620CECC42 /* RLMObject.h */; }; + 5BB2ECA20F9E4BD0B75D1F1E6EC081A4 /* FIREmailPasswordAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 5774C49C36EBEC452C489EB8A9A2FAB1 /* FIREmailPasswordAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C3FAB6582357180D3BC4A1EFC952BF6 /* arena.cc in Sources */ = {isa = PBXBuildFile; fileRef = DCEA32A7685F8B3A7A5F3C12D0FE0D9C /* arena.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 5C50CF388C81ABE0F63D1E0423D2BA2E /* log_format.h in Headers */ = {isa = PBXBuildFile; fileRef = 60125B3AB84AC0074335BEAC4412D766 /* log_format.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C66D4BED1B4572FB65745EE045961DA /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5669EE883F97BC9A23D1C8D871DC0D1 /* CircleShapeRenderer.swift */; }; + 5CADD0254C8442F94E51AA85E4310D25 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 034F186DEC5C318DAB5AA49B019811DD /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CCCBB0455397C38AF3F045AACCA5D83 /* FKeyIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 5312F1C9F18FC20E19E99A8D8A2EA64F /* FKeyIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CF666D94A00EB9897A2A75EBA0A1A77 /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D565CD2B0DFFDD2B1B8C8CA7661E18E4 /* LineScatterCandleRadarChartDataSet.swift */; }; + 5D11C839BE86A43C242A5084E5EEBB19 /* FTupleFirebase.h in Headers */ = {isa = PBXBuildFile; fileRef = F79C9D57EEFE9D5B9E388EBB1F039327 /* FTupleFirebase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D1756710EA899736AEA98FB3721E7A0 /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E743D76084C3E5FA7FE6A15E223A6913 /* IFillFormatter.swift */; }; + 5D2D1C6DBE842385173F083F0A8CE4D8 /* FIRAdditionalUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D256F6F8A03BF50F154099A007F61AE0 /* FIRAdditionalUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D55D7BB0B6E97CC8A55CAAF3D36BCD0 /* FRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = E8806A8174D13CD9754D866166DD0562 /* FRepo.m */; }; + 5D808BD6FE6760A9D943AB7E86C3A071 /* RLMSyncUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4350D3A1A82200DFEAEE25B15273EDBF /* RLMSyncUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 5DA8D93BC3AF5A5691076C0A5B4D2412 /* keychain_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB9D30BE47311997F8AD8FECD1125ACD /* keychain_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 5DCD38C17864574D9782E3E89FCE7403 /* FIRAuthAppCredentialManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD4FA8427B1312C45262C5BDE296F5F /* FIRAuthAppCredentialManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E25BD5C5721C0698AB67ED6ED3E2202 /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F54A971A6A51EBC2671C255AC65D53A5 /* ILineRadarChartDataSet.swift */; }; + 5E9E59C245E267AF031A25889C2B5BB3 /* FTupleTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D8D52701CFDD59510B13C2F46E3F311 /* FTupleTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5EBC299D308103979F873C085EF99470 /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A7722D16D60668CF76D4702AF57DC0F /* IHighlighter.swift */; }; + 5ED15DE93E0D61137AD67AEE7030A845 /* FListenComplete.h in Headers */ = {isa = PBXBuildFile; fileRef = DC0CBB71E6642D5995887E7E83013BCF /* FListenComplete.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F04B501E1FAFBB8F29C4BED4101032E /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 190D77825220692FFEDBABDA8396830D /* AnimatedViewPortJob.swift */; }; + 5F62D4BF53EE793742DA3CB460BAC9BA /* FIRUserMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = BCECB44D476CCEA5269C305C1864837A /* FIRUserMetadata.m */; }; + 5FB2E07F9547D78BE7031440404DC938 /* FViewProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 58FDFAE9DE75D7A060E752669192391B /* FViewProcessor.m */; }; + 5FEDAC5E86BF81C3243CED51CD53CC35 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81225CCEF8D97A19F315501E94968B16 /* BubbleChartDataSet.swift */; }; + 60447CE0515AD55FFF99E2F966C67D83 /* table.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5743AE5D75D2DEBC04AC83DC72970D1E /* table.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 604A1EE9890CA91333944CF312ACDCFD /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A3086E264490FCF97634AAED0EF2E7D3 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 609A9DBF93FBDE3190C209F057C17119 /* port_example.h in Headers */ = {isa = PBXBuildFile; fileRef = AD7097625B04E283AECB7A5BB9EE8586 /* port_example.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 60F3C415F09D0C663A5A2A1D994460F1 /* cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8414C4672D0F3D823B58F0C614D520B6 /* cache.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 61032DBD7C50644EA9FA6F4D1857CF8D /* RLMSyncSessionRefreshHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = EB8C9AC5CE38F7A87DF1D2D68F290A1C /* RLMSyncSessionRefreshHandle.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 61200D01A1855D7920CEF835C8BE00B0 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793159F9E53F784B20AE7D666C7E7C9B /* DispatchQueue+Alamofire.swift */; }; + 61B710AFDED32EC8BB6D8B5B3690D296 /* FConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A0C8331B4F3C196AC4C39F581B4062 /* FConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61C2FAA7275B3E85B28BD47AF12CBB61 /* RLMOptionalBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = EEEB3C3C89CD691258C71D9861F0EAE4 /* RLMOptionalBase.h */; }; + 61F0161B602A936BCC2AE9E481CA118C /* RLMObject_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3980B565D719CE507DDDD42C78FB99F3 /* RLMObject_Private.h */; }; + 6287C456EF61332DC742AF12E6051809 /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A71481572CA991F801E3AE699F86B /* Legend.swift */; }; + 62F65AD8DC4F0F9610F4B8B4738EC094 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6597DB55CCA248AB8A0F90E19357517E /* ServerTrustPolicy.swift */; }; + 6317BB61D9B4A9D977156A6D0E8E8560 /* FIRAuthAppDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A09A5CF2FDEA43DBE46F1C4FBFEC0A /* FIRAuthAppDelegateProxy.m */; }; + 634B825E8EE66D790B327A918137732D /* FLevelDBStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E6E79E4292D1C39541705A2F37D9CFA /* FLevelDBStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63922405A29253FB51A816740135CE4D /* RLMSyncManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C11DC37BFB910086B7157B9D7594F06 /* RLMSyncManager_Private.h */; }; + 63D2AE5A4724160215EA776E2943AC0E /* FIREmailAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 465ED0591EB38D21C157E29A477E471A /* FIREmailAuthProvider.m */; }; + 640B1792326A610FA508B88007E12704 /* RLMObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = C2961ACE175CE79C87253E003567A2B3 /* RLMObjectBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 6436CC7F16C142719C29EAF95E019660 /* FIRAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F2E2300B20A23D7A9E2E7C1B904D16A7 /* FIRAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 6486781D756A9D71FE5C6E56CC9A343F /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3313571CA472F1E1F41820EFF50D417 /* ImageCache.swift */; }; + 64DCC3B2E7A0680230CB1FC513B3E463 /* RLMSyncCredentials.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E5BEE289ED2023AFE06214DE18BBDE /* RLMSyncCredentials.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 656D24B598864391F4AAD997DA78A973 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9A0356185EA8D5579C06A6B2854E8BE /* Highlight.swift */; }; + 65F9A2273F15E6C1EF47856161D08D8A /* FIRNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = D9BE2E14C68AFD8462FAD35B1CD83C11 /* FIRNetwork.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 65FC2E5A28A19C710FD91022548C0BDE /* race.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14B538A92666A26E2B3A1C7304517568 /* race.swift */; }; + 66130FDE8FEDDD3AE44E9CB237EC19DD /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 78A8250090CA6E2D3ACEE645413821C9 /* ChameleonConstants.m */; }; + 663A9A45CAF621C5C4620E5055213511 /* FIRAuthAppDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 72073D119E282E7203065BAC884532A2 /* FIRAuthAppDelegateProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 666BD1254E2A443691332CBDE6827677 /* FPersistenceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E91666D8D4E7C8B71DC998D1FE5619E9 /* FPersistenceManager.m */; }; + 6682B3A00CFB28FE5CC024CC9628C5F0 /* FIRAuthAPNSTokenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EF22D2D1A6662A828AF985AF5DB51F4 /* FIRAuthAPNSTokenManager.m */; }; + 668ACC75094C06911E5973489F06EDE0 /* leveldb-library-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F3609E7CE825F9255D0A5143BE6861 /* leveldb-library-dummy.m */; }; + 6696EB45A4D8070589AFBBDE0AC4C71A /* filter_policy.h in Headers */ = {isa = PBXBuildFile; fileRef = EF0A1D6C66E18A45BDA2381E61A5CD67 /* filter_policy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 66AF70C24AB8687E72D88BB969A2BF71 /* FMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB0848330CEF5107A832A155104D6B0 /* FMerge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66E7265532304E90A9D5E6DBFABD4517 /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34653C25E996950D43F4FD9ACEC18968 /* LegendEntry.swift */; }; 6776B02427FEC96645531DDF42910FF3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD652DFA7B9433714A03ACD1A3893F8A /* SystemConfiguration.framework */; }; - 67E04AE58975D6C1C5B38050A2733FED /* RLMSyncManager.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2049C5CA639316DB171CAA0B09E0676B /* RLMSyncManager.h */; }; - 67FB274BF84E310A775731821106C0B0 /* RLMListBase.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E95524242BB7CF0FD435BCEE0A5D56 /* RLMListBase.h */; }; - 682AEDD570085C7116241AC91FBF326C /* FIRAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = B06A012AB01EF015C4C683E29EB9B428 /* FIRAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 68C3D57B4628397434A8008F2FDE9302 /* RLMCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EBF93A215B2032494BF204BA394E419 /* RLMCollection.h */; }; - 690495549B97290E4A4C7370FFADEA5D /* FIRGetOOBConfirmationCodeRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 50921741ADBAE90702DAABF59E4FEE15 /* FIRGetOOBConfirmationCodeRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 69386978F07A1B98C68BFED78BDD9882 /* FIRMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 36BAB10C547C609FD6ADE9F03AB68684 /* FIRMutableDictionary.m */; }; - 6A1331338D376322D3540CB2488CDC63 /* ChartSeries.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF6C9B912DEAEBADD2AB183CF74BCB39 /* ChartSeries.swift */; }; - 6A5CC35B0F7F3C926D6B4DF00082A589 /* FIRDatabaseQuery_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F66493B50DF62BCB1A084C7D275B89C /* FIRDatabaseQuery_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A8D8946733D74B8E80F95FAEF06AFFB /* FIRAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DF6C1FC347D897F3D7EB7580EDDD44C /* FIRAuthCredential.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6AB9AB7E200E11886EE9FB2110AA1AF4 /* FIRVerifyPasswordRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CE44C726A617D98DE6F406C09C971EB4 /* FIRVerifyPasswordRequest.m */; }; - 6AF2A29491D25A0C84E9AADFA1FE485C /* RLMRealmConfiguration+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = B7AD9E3604CA8CD8FEC7FC575E261FF7 /* RLMRealmConfiguration+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 6B0193AF37FE77996EDF3A1C62380E06 /* FIREmailPasswordAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 146469777BFD805C29A1047E56F16C6C /* FIREmailPasswordAuthCredential.m */; }; - 6C2AAB3197D3B65ED2CE73EAAF589B14 /* FIRAuthDefaultUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B66D8D3A8424D1CFCB9075D328170260 /* FIRAuthDefaultUIDelegate.m */; }; - 6C811E25B7CA473969811C8204BA44AA /* FViewCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 88DC3C4F9C544BC4E4297988708ECE37 /* FViewCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6C82814432AA99952F4B99962D4A5D9A /* FIRAnalyticsConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F8F6F94C2E3D8C837B8CC9E7DDF471CF /* FIRAnalyticsConfiguration+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6D57600397E7FEF2FE198B2A94ACA1A7 /* RLMJSONModels.m in Sources */ = {isa = PBXBuildFile; fileRef = A542FB257B069D3A4C632378CC4C7D37 /* RLMJSONModels.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 6DA74BD0045499F7C4DFFA3910B8EC72 /* FIRAuthAPNSTokenType.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A1BAE0B8B6A6A7EA5E524A5029F574 /* FIRAuthAPNSTokenType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6DBE872343E78F3B86292E608288DB6E /* FIRGetOOBConfirmationCodeResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7031C9AC62B88E64CD05DDAFD88DAB98 /* FIRGetOOBConfirmationCodeResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6DDA9FDD4DDAF5F671563AEFF429CACD /* FIRAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EC37ABFB101C5CFFD17423D93AB7C6F /* FIRAppEnvironmentUtil.m */; }; - 6EE0FD7882A213AEE683064420FF9BD0 /* RLMSyncUtil_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC8CF1BB201AB7E004BDC7D1A04BC88 /* RLMSyncUtil_Private.h */; }; - 6F235EDBADABEA4A01AA4DF0D0A76851 /* FIRAuthKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EC9D72DA4D993BA4FA7462F788E808F /* FIRAuthKeychain.m */; }; - 6F773D3E94F3E4E91F0B9106CD69566C /* RLMRealm_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8F6DFBD150A3B56A826609F05027EBF2 /* RLMRealm_Private.h */; }; - 6F88B7FBE811504C10126E6FB5ACD140 /* RLMOptionalBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 072CC0EFA6553B40B3C6AD14AD95CDF5 /* RLMOptionalBase.h */; }; - 6FB4CA5D8EEC008B63176482EFB51BE0 /* FTupleStringNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ED40CA21C81D183487E2AA1EE13C818 /* FTupleStringNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70297ABF69F651EAF8E5F968E3811211 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FA418B7D73C04C4A8B1F901C0BB3B9DA /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7043AC74BA3B12C7D4FF872F793E0F02 /* hash.cc in Sources */ = {isa = PBXBuildFile; fileRef = DAD8F2B2547F7377B3C959D31F89455D /* hash.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 708EC817254E303A4B19EB92ADF9DF49 /* repair.cc in Sources */ = {isa = PBXBuildFile; fileRef = AA81185FC0AAD55BC670D2D4C5069EF9 /* repair.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 719D9A075FE59855E3E8EE95D516FCB2 /* ThreadSafeReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DD911CD20C74127970E24F1205AA100 /* ThreadSafeReference.swift */; }; - 71BC60E2FFF0BEF3977451C3DABD165F /* Realm.swift in Sources */ = {isa = PBXBuildFile; fileRef = B31E0966D3CF9D0CEDD9C866DE57075C /* Realm.swift */; }; - 71C5F7EE96B6CCFCC322948BA840C615 /* FChildrenNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 404A99971E2E296714F6D9264DE6AEB5 /* FChildrenNode.m */; }; + 679A922E58AD36EA0CD2FF1F194A49F8 /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 697968197D178CA84FCBA4556B32F54D /* ChartDataProvider.swift */; }; + 681B0EA16666D544C5646F0F555F6A5C /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = DCAD53AB4741FAAE1601FCB66AABA196 /* RLMRealmConfiguration+Sync.h */; }; + 6825F987487EDF06F4D24299C38983E4 /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C091FCC6D46C49F295A935225FACBA6 /* Transformer.swift */; }; + 682AEDD570085C7116241AC91FBF326C /* FIRAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = C9D39A1EEC24B6BC57508EAEEF38180A /* FIRAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68B7AC4CB334D5707C38E5DB5C35C605 /* PromiseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D00AF8213700D98D74DCF2FD59D8640 /* PromiseKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 690495549B97290E4A4C7370FFADEA5D /* FIRGetOOBConfirmationCodeRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = E73E5706123B04485CDA9404C32A422E /* FIRGetOOBConfirmationCodeRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6921688A5C00F59AF92F1D8C36211BE7 /* SVIndefiniteAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = D4680D838192AB88753FF63D6B6557C0 /* SVIndefiniteAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69386978F07A1B98C68BFED78BDD9882 /* FIRMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = E133445AED330F1E9A9FA6CD3B486CF8 /* FIRMutableDictionary.m */; }; + 69DC95A92CB145398EFDB36570BA731B /* RLMSyncPermission.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 37266CD26FD5C3B0080BAB63BC24AFE7 /* RLMSyncPermission.h */; }; + 69E81189486A414318D77B812FE5BD11 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 549D09B5023CA10D9B85E67234DF61C2 /* DefaultAxisValueFormatter.swift */; }; + 6A5CC35B0F7F3C926D6B4DF00082A589 /* FIRDatabaseQuery_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 823F49DE7F0D55893A775A770C6FEF80 /* FIRDatabaseQuery_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A8D8946733D74B8E80F95FAEF06AFFB /* FIRAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = DE01A44B82EF619D9670F6D0AACC459C /* FIRAuthCredential.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6AB9AB7E200E11886EE9FB2110AA1AF4 /* FIRVerifyPasswordRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF6103C808D57B1FAE6BE6252BB54BB /* FIRVerifyPasswordRequest.m */; }; + 6ACAE95C2BAAC89E66A9327C1315C204 /* LinkingObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFDE506A4C3B1F7E3D9E24E858881233 /* LinkingObjects.swift */; }; + 6AF5EEF89EA9DB25DD5FB94089A7A412 /* RLMArray_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EC22A226FA6EEDA3165563461A0902AD /* RLMArray_Private.h */; }; + 6B0193AF37FE77996EDF3A1C62380E06 /* FIREmailPasswordAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 7741D2B908706A014865AF7DAB2BA4AF /* FIREmailPasswordAuthCredential.m */; }; + 6C2AAB3197D3B65ED2CE73EAAF589B14 /* FIRAuthDefaultUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 372B7BB1862C377115782F21A6331990 /* FIRAuthDefaultUIDelegate.m */; }; + 6C4253A1AD1D4232F19C0D68A0A868B2 /* RLMNetworkClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C25A9EF70B4577F076EEC542286CC29 /* RLMNetworkClient.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 6C679C3A31EDFD86CA769C0213F0266D /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF46231B3B896419947E59C97E8AAFE0 /* XAxisRenderer.swift */; }; + 6C811E25B7CA473969811C8204BA44AA /* FViewCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD42C77588C659E16D289B88F0BBFB0 /* FViewCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C82814432AA99952F4B99962D4A5D9A /* FIRAnalyticsConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CE34D58150B0A8EB66F7B68E8A4B10 /* FIRAnalyticsConfiguration+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 6CFAF1739C87435ABB52C0011EE5CC2E /* RLMSyncConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 87AF62BD026597BFB6BEDA8E02DF8189 /* RLMSyncConfiguration_Private.h */; }; + 6CFBCAF693BBBD990C8DA4B8C60450FD /* RLMPredicateUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B9B0512F2CB7AAE3AD87FFEC44F34F4 /* RLMPredicateUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 6D137A30C834F01F3538671DF58C5DE7 /* ChartSeries.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4474A30653C16E60D67CFCDEF15E064 /* ChartSeries.swift */; }; + 6DA74BD0045499F7C4DFFA3910B8EC72 /* FIRAuthAPNSTokenType.h in Headers */ = {isa = PBXBuildFile; fileRef = 134506D9971BFA731A5652FB6C7C1384 /* FIRAuthAPNSTokenType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6DBE872343E78F3B86292E608288DB6E /* FIRGetOOBConfirmationCodeResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A34D3F39FEB7F56A29186833EC296F9 /* FIRGetOOBConfirmationCodeResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6DDA9FDD4DDAF5F671563AEFF429CACD /* FIRAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = E010A4DB5333A49B51011AD79DF7AC63 /* FIRAppEnvironmentUtil.m */; }; + 6E9EF814FBE59A6723C320E20A8B3481 /* RLMSyncConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 87AF62BD026597BFB6BEDA8E02DF8189 /* RLMSyncConfiguration_Private.h */; }; + 6F235EDBADABEA4A01AA4DF0D0A76851 /* FIRAuthKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = E7B0803FD1D9AB1AFC06B666EDE9F3B0 /* FIRAuthKeychain.m */; }; + 6FB4CA5D8EEC008B63176482EFB51BE0 /* FTupleStringNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 953E0852E01C51509E02B37E17E93C5E /* FTupleStringNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6FB85ECF42034629EC7884FCFCDE16E8 /* RLMResults_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 4E0D263DD44FCE700E4F3FA23FAF0594 /* RLMResults_Private.h */; }; + 6FC5B0E0F56612457D2A08E5372B2265 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = EED7927D2D435154DAF3FC7631FBB480 /* BarLineScatterCandleBubbleChartData.swift */; }; + 7010E45A7DDF5570F72DF282D440DAE1 /* RLMCollection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4A97DA2E87AF4AF800CFD58F98F4B30E /* RLMCollection.h */; }; + 70297ABF69F651EAF8E5F968E3811211 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C691596B6D5A6A93740E4B320582B9 /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7043AC74BA3B12C7D4FF872F793E0F02 /* hash.cc in Sources */ = {isa = PBXBuildFile; fileRef = C2EF2D15655E4664B9B3160D581BD99D /* hash.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 708EC817254E303A4B19EB92ADF9DF49 /* repair.cc in Sources */ = {isa = PBXBuildFile; fileRef = 525CE13E0C9F9A241DB69307E7B99825 /* repair.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 71124DB5566FEC567DC863292D76B65D /* RealmConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EAF6868DDC7C08B7D20512D22244A9B /* RealmConfiguration.swift */; }; + 71C5F7EE96B6CCFCC322948BA840C615 /* FChildrenNode.m in Sources */ = {isa = PBXBuildFile; fileRef = BE145A8B33A90F0E9B80C0BAEDD6449F /* FChildrenNode.m */; }; 71DE9B54112E28E80660A05C6CCF48F6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 71E206C326354BD637851A45E46BA039 /* RLMNetworkClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = EEB765BA5A012453CAA0814A8B7C68AD /* RLMNetworkClient.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 7230498DCC8F6020F23E7595E2F1E792 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5678B70F3E291B18297F8C9FAEADD654 /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72D27BA78FB1D52CCDF3080D528DF73E /* FPendingPut.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D0567DE7174EB9965E6B3CE1BFFE735 /* FPendingPut.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72D3021CCE7450995B401C89122AD6F3 /* FServerValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A4C1C5AC30DE4A55E5B813F80CAB464 /* FServerValues.m */; }; - 7309A7E7F6E27EC5DF197EE099E17424 /* FTreeSortedDictionaryEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = A48997DDACC81455ECBA8ED3769582EF /* FTreeSortedDictionaryEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 730F9DB4D49513693ED2224F006BB907 /* FImmutableTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 8107EE21C879AF93E93DC6E232BDF7E3 /* FImmutableTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7361820694C4F923BEE201543224223E /* FIRVerifyPasswordResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 534B4638DFA317572A39BB56A983EA7E /* FIRVerifyPasswordResponse.m */; }; - 73644CD54B63FD6C4FFFC692CD7C6BB6 /* FIRPhoneAuthCredential_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DB49A3919E5A65C4E6547F44C30A163 /* FIRPhoneAuthCredential_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 736CF37051D550C1FBACA07C91ECA662 /* RLMArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 78F4770F3AA732271439C1E944CBB123 /* RLMArray.h */; }; - 73854C83209BB68C0502B1314DB0A55E /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = B241A34EB7306BCF77878A8D266F416C /* FIRConfiguration.m */; }; + 7230498DCC8F6020F23E7595E2F1E792 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9627FD8F36F34032F218B1271FC536A7 /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7266DEDA85346EA9E01DD661C1C1AA17 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15DBAC1E19A43D6D54BD8C81A55585E8 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; + 72D27BA78FB1D52CCDF3080D528DF73E /* FPendingPut.h in Headers */ = {isa = PBXBuildFile; fileRef = 66883986B03E5507A4645CD60569DB85 /* FPendingPut.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72D3021CCE7450995B401C89122AD6F3 /* FServerValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C33712F92C7752493A4300C441EC30F /* FServerValues.m */; }; + 7309A7E7F6E27EC5DF197EE099E17424 /* FTreeSortedDictionaryEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = D874D0F99068C8E8D48F8B1E84D050F3 /* FTreeSortedDictionaryEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 730F9DB4D49513693ED2224F006BB907 /* FImmutableTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B16B973E6095AC39F1A58423A4B794D /* FImmutableTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7361820694C4F923BEE201543224223E /* FIRVerifyPasswordResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A6F1869A63AA02A98D9F933C1D06D6A8 /* FIRVerifyPasswordResponse.m */; }; + 73644CD54B63FD6C4FFFC692CD7C6BB6 /* FIRPhoneAuthCredential_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0176A640860C22CA590917E949EA896D /* FIRPhoneAuthCredential_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 736EF63B2F314148AB46F2AE5D935C59 /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FF1EA91EB07C651A380A1E0ECAAA4BE /* AxisRendererBase.swift */; }; + 7384A31634E8E31EE02AC1FF415BDB0D /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06E1FA1B42CA05778101C2712761FE8A /* XAxis.swift */; }; + 73854C83209BB68C0502B1314DB0A55E /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = A7ADD3B3EECC1182856B26198D193415 /* FIRConfiguration.m */; }; 73B9C996AED49ED7CF8EC2A6F1738059 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 73E5226F6EE72780F22D06B70F9EF338 /* write_batch_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2535470B099987084D42AD7FC9199290 /* write_batch_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74253B9C76C525105629A9FCF5C738D1 /* FArraySortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E2C48448E1B625868FB98BB8BBEEE7F /* FArraySortedDictionary.m */; }; - 747F460A923A15A8AF1868066226DC44 /* FTupleObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 34FB0AC26A184602B86A7C9B582D0D62 /* FTupleObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 750249BF8067E642EC68888452197FED /* dumpfile.h in Headers */ = {isa = PBXBuildFile; fileRef = F78803667E6C83A5A8660CA29D277FAA /* dumpfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 752A07769F58084F9718574DDCA49B46 /* builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = C7B99F8FA3F243BC1099392A1B205536 /* builder.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 77E1BE646BDCCBF26C5471FF315CCE77 /* RLMArray_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = BFA052F164EA2AE7C43E2FC163568E70 /* RLMArray_Private.h */; }; - 7975C45187C08307C8C8F77A77FD7771 /* FIRVerifyClientResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A797C8494029C82BB050553DAF5EBE63 /* FIRVerifyClientResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79822EAE0CA5D70ABAEFB595A3E08602 /* PromiseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CD4E6B1ED7B301D58E21CE221CDB01 /* PromiseKit-dummy.m */; }; - 79990437F8B6803014C9CBDDFCE16247 /* FListenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = F350F4F42491E713EF27C4029334B448 /* FListenProvider.m */; }; - 79B06DF5D7BB5A1052B8C2795811ECD4 /* FIRVerifyCustomTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 079163C3758BB988A92C22F1BC465BD3 /* FIRVerifyCustomTokenRequest.m */; }; - 79F569D6D209F6B965AD4DB4CE05E37D /* FImmutableTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 3301F78BD509C4ED05D8305AEE34B15A /* FImmutableTree.m */; }; - 79FD4896228A3996A684389996D51AAE /* FIRVerifyAssertionRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CAB71AB91FBC9374550D0311AA8CADB /* FIRVerifyAssertionRequest.m */; }; - 7A514A1B4B0F61DB54FCE400AF2418E5 /* GoogleToolboxForMac-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 36D1265351704DD5A9610C3579CD18B6 /* GoogleToolboxForMac-dummy.m */; }; - 7A6BAE3384BA91C76188852C78A84E37 /* FirebaseDatabase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EE1EB5EDB6D0386D244460AD468670 /* FirebaseDatabase-dummy.m */; }; - 7ACBD275F7DCAC8120F3D0F4959FDA33 /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 07448843721411D105BC77181ED246C6 /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B14082B6F045530C4A920313F41D0A2 /* FIRGetAccountInfoResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 06DF0317E615FE43980DDE8915C60FBB /* FIRGetAccountInfoResponse.m */; }; - 7B2A61E55C43E9B12E5B7DD852456AEE /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BFDFA14359B1B0BEE2CA0ABDC4C58B3 /* ImageTransition.swift */; }; - 7B41DF119A531BCDC988548A9FB86CBC /* FTrackedQueryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 397B9F7253E8B343B730257BB2F433C1 /* FTrackedQueryManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B5FE28C7EA4122B0598738E54DBEBD8 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE5C428F3A3B7B6D673F2A48706658C7 /* SessionDelegate.swift */; }; - 7BC7D601502B273670A5D4FB888E9CBE /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FB889A3B7E33CA3EB8FF5CA1CCE7EC /* Property.swift */; }; - 7BE2625411AE3FF93BE70A973CABFD84 /* NSData+SRB64Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3015660C97A402971AD6C28366206CA9 /* NSData+SRB64Additions.m */; }; - 7C05228AB410B7E458DB789C1C5ECD1B /* RLMRealmConfiguration+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B3E601205A45E5D22D3132B15576A4E /* RLMRealmConfiguration+Sync.h */; }; - 7C3D609C3C600BEA110437A812A7FAC7 /* RLMMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC0174932E57EAE6EC19633AAEB7EA6 /* RLMMigration.h */; }; - 7C83D7E1120E49B44EA977F8A6FAA3CA /* results_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19267BA0CAEC6EFEDC034F76FF896C5F /* results_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 7C90DC12BFC833644C8F0E6DB00488A8 /* FIRTransactionResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FBBED2A541EF26AD99B96CAEFFA4172B /* FIRTransactionResult_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CB834BD4149F7C9C1BA697E837AC0E1 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 3433F65AF7DBB7D1F226BB0FFD59F40B /* GTMSessionFetcher.m */; }; - 7CFB8E353C8EA8BEC26486824A648953 /* RLMRealmConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D367DE8AFEB78091122B8580DF71E51F /* RLMRealmConfiguration_Private.h */; }; - 7CFEA12DF14696B8EBAEA0854C993082 /* RLMSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 199A54868C68F439FBCCECBD84D0AA94 /* RLMSchema.h */; }; - 7D8CC01E8C9EFFF9F4D65406CDE0AB66 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85BEE294468499CAB9D040C75CFB6879 /* Result.swift */; }; - 7D9A2C4BA83190E7F2CBFB5B74F41FE3 /* RLMCollection_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 544EDF7CD4D8CAD91E9B56A6A5D08873 /* RLMCollection_Private.h */; }; - 7DFC7FDE104842F827087A69F8678C51 /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F00A4739FD34EB513E15CC0292A858B0 /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E285948EE0EFA784336840960FB72CF /* FIRAuthErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = B95A96E274C3BEF90BDDC1050D4B8846 /* FIRAuthErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E7B9E2F4D5A646D27195613E28AAA36 /* FIndexedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D3A15DF47EC881BB44A0A944834E4BB /* FIndexedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E8A6B35C1A049B6BDE3174B78C2FBB8 /* FIRNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B61F0E6347F886A15B6123340937E6D /* FIRNetwork.m */; }; - 7EF34A00DA1459CCF3A774CE3AE8E8A7 /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 44EF79207E2E34DFCC5AF186C2A10740 /* SVProgressHUD.m */; }; - 7F6643A34889FE323DAA8C750FB48DF0 /* FIRAuthAPNSTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD959D32405E363EE956AD0EE9B40D2 /* FIRAuthAPNSTokenManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F66DCFD3CB7A36B5EE025E9EA2FA86C /* FIRGitHubAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE630FD8A52F7623FB9F430DFE83D2F /* FIRGitHubAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FA272840823D7B6AFD692BC696AEDA0 /* NSError+RLMSync.m in Sources */ = {isa = PBXBuildFile; fileRef = 60DA73827B471EA78A83D59EA2F88A3A /* NSError+RLMSync.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 806BAA4E00218D70995697C4400BE7A0 /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 024FC59778A7D3BF25C444C6DA477757 /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 807D58F0C95D20FB5299E3282F3E2500 /* coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 84421758A9D8BDF43864192E4D0CE548 /* coding.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 808816BF42B240191330A4F736AB84A9 /* work_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4F2EB422F562B28D5B39ECF7560BF14 /* work_queue.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 80A77204407C14B9F56B0E49B21D38F5 /* FirebaseAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC813ED15635B220F63454D8006E073 /* FirebaseAuth-dummy.m */; }; - 80E436DC724CA658D0B28262BDB8FFFA /* FTypedefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB5FBC45585C1A361662B4CD7EE76C5 /* FTypedefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81139734D8EDBB4E901EB8D16BDCE96D /* RLMProperty.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0692A131C2E9F640FF4B64BF63320706 /* RLMProperty.h */; }; - 8127717ABC83E9CD6D893AACC78437D4 /* RLMProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1563BB065BDFC76F0AD80345FF226A8 /* RLMProperty.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 81669D41BF551F21776C64292512FDFC /* FTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A062A239385A4D191C871589DED362E /* FTree.m */; }; - 82483B9137C5BEADEB10FC8BF0DA835D /* FRepoInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 01B65001CC680852B87526799EBC5A19 /* FRepoInfo.m */; }; - 830FC47F91BB2479069B013903FB0464 /* RLMSyncPermissionResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0CB0FCCB05A3B341DB72C6184E5C97A /* RLMSyncPermissionResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 8327B9D7936FCA6736EE567153083421 /* RLMMigration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9BC0174932E57EAE6EC19633AAEB7EA6 /* RLMMigration.h */; }; - 8423A8B0E36A96CE7A931BA4D4B537B1 /* FIRAuthInternalErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 308234130A4AF00BC7A2DE4461215CB0 /* FIRAuthInternalErrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8495065E38B2EAE9DA645D45DAE2AA5C /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869C5AF859D170BC4B0887A66A7D532A /* Schema.swift */; }; - 84A7DADC4B2D45D4A23E8B259D14A4A5 /* dbformat.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B5B683844392A4519974BDECD2FE0F /* dbformat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 73D8B4618F9B5B178F8414D30F6FF7D4 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8EE02BFED580BD90EE81C76494401DE /* CandleChartDataSet.swift */; }; + 73E5226F6EE72780F22D06B70F9EF338 /* write_batch_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 095146E5B0C4DB68AEBF9EEC59FB7BF5 /* write_batch_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74253B9C76C525105629A9FCF5C738D1 /* FArraySortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = ACB8C72CD0383F34B37DC2CD7DA6BACA /* FArraySortedDictionary.m */; }; + 747F460A923A15A8AF1868066226DC44 /* FTupleObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = D1BC0D33088688FFC769F42FDF6369C0 /* FTupleObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7485FDF311361494561EFD1A3E866F53 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26AE500AF9F1DBA7221343754C918896 /* LineChartData.swift */; }; + 74F7BFC1A12CF621F696F66E0CBDBFDE /* RLMManagedArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B5F34983595EA471A6DB036B836CF83 /* RLMManagedArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 750249BF8067E642EC68888452197FED /* dumpfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FD63606AEEA7A6C586C0E31B2E7D453 /* dumpfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 751C726677C9300274CADE580317C0AA /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 069B3B1A4ED4F2ED02EBD7CB6BBCCC4A /* XAxisRendererRadarChart.swift */; }; + 752A07769F58084F9718574DDCA49B46 /* builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3FF058BE3163AA9D893471E25897DB99 /* builder.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 7542D705B7B04A2DA07060CD7836EE82 /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = B011795B453294FE3F74A08803B22534 /* CandleChartDataProvider.swift */; }; + 7548ACB434594E231EFE5D75A5D96CCF /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0C79C32176E0055A39112880C7E862C /* LineChartDataSet.swift */; }; + 755769D3387214328FABFAD50B693E30 /* join.m in Sources */ = {isa = PBXBuildFile; fileRef = 00EFEEE85CB95D18DC489063B2FD374B /* join.m */; }; + 7596C4EC49FA537B84FB3C63F3890188 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECAD789542E5E5E38B16F9291EEE31 /* LineRadarRenderer.swift */; }; + 75B7EF3BFFD311AE732C8204F1643E78 /* RLMSyncUser.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C3D389BB45620221D213E040D3CF144A /* RLMSyncUser.h */; }; + 76ADBA8B2522FC8D5C1FDBDFA2C88B85 /* RealmSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 42F0F570ACE3A2878722AD7FDA8285EB /* RealmSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 77C2AB86A99E1A05DBEFE62937922E1A /* RLMSyncCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = D8EDB52C8867702B3E27FE68547CC43D /* RLMSyncCredentials.h */; }; + 78E9166215F02F3FA8A5E2923C86E2E8 /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5278205885FF01F26929F8BE769AB72 /* ChartBaseDataSet.swift */; }; + 7938F54522516077BC7706B218BF4B26 /* RLMSwiftSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = F80FA5272DE2CE2206791655D881D7B3 /* RLMSwiftSupport.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 7975C45187C08307C8C8F77A77FD7771 /* FIRVerifyClientResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D2C002F22FD48F47361D4F0C71CAE5 /* FIRVerifyClientResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79990437F8B6803014C9CBDDFCE16247 /* FListenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD47D2199FB043E90797A0EED88DE5E /* FListenProvider.m */; }; + 79B06DF5D7BB5A1052B8C2795811ECD4 /* FIRVerifyCustomTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = EA903D437D2BFF7048A4ADB4D94F173F /* FIRVerifyCustomTokenRequest.m */; }; + 79D0731B67F283B00440552750028543 /* RLMObjectSchema.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3363F7773DA62E15F8134331A08DF665 /* RLMObjectSchema.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 79F569D6D209F6B965AD4DB4CE05E37D /* FImmutableTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 6446432053311D524A460ECC7D73DAD8 /* FImmutableTree.m */; }; + 79FD4896228A3996A684389996D51AAE /* FIRVerifyAssertionRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CAE9C3B5FF74E02017987C2F7196F819 /* FIRVerifyAssertionRequest.m */; }; + 7A15B0C3312E202092741AA8DDBACCB1 /* RLMSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = AA3706862871A33BD813A2356BC006C3 /* RLMSchema_Private.h */; }; + 7A514A1B4B0F61DB54FCE400AF2418E5 /* GoogleToolboxForMac-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 137C3277D8A84ABAB176985061E001E1 /* GoogleToolboxForMac-dummy.m */; }; + 7A6BAE3384BA91C76188852C78A84E37 /* FirebaseDatabase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E926D7245C29DA55996AC57E252BE4A /* FirebaseDatabase-dummy.m */; }; + 7ACBD275F7DCAC8120F3D0F4959FDA33 /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = AD28420C97D32F634C3366A2227C32DF /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B0FF41A39B7540CFD19F0F0653DE9FA /* firstly.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF74632840B548DF965BA2E95E91C74E /* firstly.swift */; }; + 7B14082B6F045530C4A920313F41D0A2 /* FIRGetAccountInfoResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 49D92DE2FD620C4089B7A1BDE68051D6 /* FIRGetAccountInfoResponse.m */; }; + 7B2A61E55C43E9B12E5B7DD852456AEE /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D92BFB258F6CCC8691015A7777951A8A /* ImageTransition.swift */; }; + 7B41DF119A531BCDC988548A9FB86CBC /* FTrackedQueryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A5531FDC81208AA04006520EA2E7185 /* FTrackedQueryManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B5FE28C7EA4122B0598738E54DBEBD8 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3762AB6CDCABD4BA24DD01E8F6717177 /* SessionDelegate.swift */; }; + 7BE2625411AE3FF93BE70A973CABFD84 /* NSData+SRB64Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = BB20EFD39D833EF805180DC6142C00DC /* NSData+SRB64Additions.m */; }; + 7C3F0312557F1066EF19FE62795B0D56 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 201A7B45C4CCEE36C1DB90B0119E7F7D /* Object.swift */; }; + 7C90DC12BFC833644C8F0E6DB00488A8 /* FIRTransactionResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D6069901D3C9E63450F8E563A49E6399 /* FIRTransactionResult_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CB834BD4149F7C9C1BA697E837AC0E1 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E85E168B41DFBBC9158E86075D7F92E6 /* GTMSessionFetcher.m */; }; + 7CD47F45578131D5202840A6EFF99C90 /* RLMSyncUser.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD2A1A5865A20D1F79C122E36B2F82C4 /* RLMSyncUser.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 7D1136B66C6BC40D03189960BD425B45 /* SVProgressHUD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BBB3EED3CD4E1A63496DBC24426DC400 /* SVProgressHUD.bundle */; }; + 7D8CC01E8C9EFFF9F4D65406CDE0AB66 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8E6759063728026000C0CA072665FF2 /* Result.swift */; }; + 7DFC7FDE104842F827087A69F8678C51 /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D155E6A282321B1570EDD16ED9A3FA96 /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E285948EE0EFA784336840960FB72CF /* FIRAuthErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 0130B2AC51BDBB44098750C3DBFB1889 /* FIRAuthErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E4271876298C299BE9C94B0620F4D18 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491CFD164F40E413FFC753B87C65668E /* BubbleChartDataProvider.swift */; }; + 7E6EF2E4A9BC02CF1614BE09DCE1BE91 /* collection_notifications.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74ABDC36D249A915106B24F9FC749188 /* collection_notifications.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 7E7B9E2F4D5A646D27195613E28AAA36 /* FIndexedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E76B46C555DF849442BFFA9754C7BC6 /* FIndexedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E8A6B35C1A049B6BDE3174B78C2FBB8 /* FIRNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D62835BE74C0C592738DB2D9320ABD8 /* FIRNetwork.m */; }; + 7EA26BF6E579DDBD953B2CB3903E8066 /* NSError+RLMSync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C73FEFAA3CDDDEC0013655E4316A9DFC /* NSError+RLMSync.h */; }; + 7F6643A34889FE323DAA8C750FB48DF0 /* FIRAuthAPNSTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA0A0D04B604DBA164EB23CBB4645CB /* FIRAuthAPNSTokenManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F66DCFD3CB7A36B5EE025E9EA2FA86C /* FIRGitHubAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = CBA1ECE0D217C6F569C8F8A99D81FEC2 /* FIRGitHubAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80194706017AFDA377F52F0F1541C2BC /* RLMObjectStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 17A44D77220B02A8E4ABBDB177CA1A44 /* RLMObjectStore.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 805C26328E942629D7243E5059372CF5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + 806564C05DA4E1954384AE79FFDAFAE6 /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 874D039FE167C6DD4D6D90A63EF7DD7B /* RadarHighlighter.swift */; }; + 806BAA4E00218D70995697C4400BE7A0 /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 676D729DBBEB993269FF14363C11A550 /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 807D58F0C95D20FB5299E3282F3E2500 /* coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A9D603EB01334C4C336592D90FB0A1C /* coding.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80A77204407C14B9F56B0E49B21D38F5 /* FirebaseAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0496DEE60F52D897ACBCC688A9373F16 /* FirebaseAuth-dummy.m */; }; + 80E436DC724CA658D0B28262BDB8FFFA /* FTypedefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 785704FC5AE23C778C28851BB9F66712 /* FTypedefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 81669D41BF551F21776C64292512FDFC /* FTree.m in Sources */ = {isa = PBXBuildFile; fileRef = E476D088653EE4F6345064D9D149BA42 /* FTree.m */; }; + 82483B9137C5BEADEB10FC8BF0DA835D /* FRepoInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 19179E5A68C85D49ECAECC019BDB8A33 /* FRepoInfo.m */; }; + 838D9D79F5C3D7C0458CAF32137A08B4 /* RLMRealmConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A132F01DDE0C5955D7C9BBBA204B3F3 /* RLMRealmConfiguration.h */; }; + 840099BED9E8A6002D64D2F894585985 /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86133D9C0631D471E52329FBA4050FF /* SwiftVersion.swift */; }; + 8423A8B0E36A96CE7A931BA4D4B537B1 /* FIRAuthInternalErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A02A3DCA7DC56236E85CE3F23C59E90 /* FIRAuthInternalErrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 84A7DADC4B2D45D4A23E8B259D14A4A5 /* dbformat.h in Headers */ = {isa = PBXBuildFile; fileRef = E81850BB41F1CAD9F4102474A6FB2830 /* dbformat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 84CF440A4E3CCDEE93FA2475748A9934 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E50769454BAB05FFAFD0F3A91B0476 /* CFNetwork.framework */; }; - 85224A019E1C1A806F0C4A884B5913DD /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B7665DC8B7B4D3701725E3EC7BA80E /* Util.swift */; }; - 8596E56F78BFEDB605B83B4F3FC8E10D /* FTuplePathValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 527A58C2B84D5E74BBA75B24F2F2093C /* FTuplePathValue.m */; }; - 8627B0CAA7A0D52AE9839E5AC0B23424 /* FIRVerifyCustomTokenResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 2476127FCECFE8BAF92977DBA8A2A261 /* FIRVerifyCustomTokenResponse.m */; }; - 863545C2E5E9427EDAD30BC5BC8BA4AD /* FIRVerifyPasswordRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B176FCF2140A3B4F0B5A6F74F3E6FABD /* FIRVerifyPasswordRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 870AFE1534B3B16BEF8CF2D3328D5BDC /* PromiseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 44C39CC8C63A8007E41CB05DB0BFB08A /* PromiseKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87218279BD6EB6F67461F4C59A2F52AF /* RLMObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = FE08BA04FFD4D05E87FF20CA580F01B7 /* RLMObjectBase.h */; }; - 87968B46E87DE9E867F468A1CDD57A27 /* FIRGoogleAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 34E21A819095A6B738F359A7AED31A05 /* FIRGoogleAuthProvider.m */; }; - 885C3197EAA041C8202423EA8DB8CDD4 /* FValueEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 950BEE25475AF8AB9882D8903CBF417C /* FValueEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88C16E132E58AF7B34F6D755DE59EDD4 /* SVProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F37AA9A32DD9CCBC3CDCFF34D0CDDBCC /* SVProgressHUD-dummy.m */; }; - 88CB2C03CCC9A1AF21D9D5671A55F67B /* RLMProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 0692A131C2E9F640FF4B64BF63320706 /* RLMProperty.h */; }; - 89BA1CB8522D3DE03BE61E4EA591FD2F /* RLMRealmConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 337BAD4B73E2EB61F0439C9EED57D9F8 /* RLMRealmConfiguration.h */; }; - 8A6197B9C6EBCAEB1FF64641B630DA74 /* FTupleTSN.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B85AAB94D405DD45E2B4D1A1F6EA8FF /* FTupleTSN.m */; }; - 8A73C84DC2105E1AAFEB700DD985DB98 /* FIRAuthSerialTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3615F35A23B930ABFA9ED2322FE545A9 /* FIRAuthSerialTaskQueue.m */; }; - 8AD6A09454F77F394EB0C6C5639B8D5D /* FStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C419006F9EBDF2CE1572087941841CD /* FStringUtilities.m */; }; - 8B1FBD4F6B3B70EC5B6AF31E7BD3EABC /* FWriteTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A2E1CE2DC70E49CCB32378842FD5680 /* FWriteTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B7858E23D7C90AEB072D6BC8673731C /* status.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3F1E3D0F84BB635CD5899B141258779C /* status.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 8C2E86D5239157BCC92D640C22B1D67D /* RLMListBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C1E95524242BB7CF0FD435BCEE0A5D56 /* RLMListBase.h */; }; - 8C783050F3226AFD18382624623DB229 /* SortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44410CE7FD1EFF628F5BDD09B35F2422 /* SortDescriptor.swift */; }; - 8E4A5F3195447CCDD218B132D1626304 /* FIRNetworkLoggerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = E0FE3457ECF74D7276A964351CDB65C4 /* FIRNetworkLoggerProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8E9983D05F8D5E5950FB415FA0E779F7 /* RLMSyncSession.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 22095030353ECE1534E0D2F078683231 /* RLMSyncSession.h */; }; + 850F41A30C6DF969C9116AB8D85B7724 /* RLMObjectSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 591D1D76F93D97B88ABD56DA3759FF47 /* RLMObjectSchema_Private.h */; }; + 857CEC48533847E28980ADCDC08D9841 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + 8596E56F78BFEDB605B83B4F3FC8E10D /* FTuplePathValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D742D25253933AB27B72CF95E8CA25C /* FTuplePathValue.m */; }; + 8627B0CAA7A0D52AE9839E5AC0B23424 /* FIRVerifyCustomTokenResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D2C8704A62E407D434E266CAD07518A /* FIRVerifyCustomTokenResponse.m */; }; + 863545C2E5E9427EDAD30BC5BC8BA4AD /* FIRVerifyPasswordRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 14DDBFC7D42AC773D5956EFCA98074EA /* FIRVerifyPasswordRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86492D003584407BF5EA438D0A5F489C /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7685EA497D4AE8E21984076298B032AE /* ViewPortJob.swift */; }; + 86AA000156CB8798218FEB463F78B9B8 /* AnyPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16244595C10AC1B8927F780CCE468E60 /* AnyPromise.swift */; }; + 86B18EB4F5199A340F29478A4FAA6164 /* ChartColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71B19337EB68C20755AB91BD17229C5 /* ChartColors.swift */; }; + 87968B46E87DE9E867F468A1CDD57A27 /* FIRGoogleAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = EEA879E68A4329D71FC0206FA63DDE3E /* FIRGoogleAuthProvider.m */; }; + 87BABC6CB05EFAB1BF299CE58F3E37B7 /* RLMSyncSession.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = CC0FE1D3D6B8E4106E4B413EC52CC098 /* RLMSyncSession.h */; }; + 885C3197EAA041C8202423EA8DB8CDD4 /* FValueEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFA5F7AB7496B736FAE82BE675BFB48 /* FValueEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8992239AF1272804CEE86F780052CF62 /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32A41D9C686AD397B8031F0A4A3E8684 /* DataApproximator.swift */; }; + 8A04561E86C4815684364676E820BE5A /* ObjectiveCSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = C23566CAE8356539B30B85A61B0F729D /* ObjectiveCSupport.swift */; }; + 8A6197B9C6EBCAEB1FF64641B630DA74 /* FTupleTSN.m in Sources */ = {isa = PBXBuildFile; fileRef = DC6D6429E9291910AD6517A3BEEFC5BE /* FTupleTSN.m */; }; + 8A73C84DC2105E1AAFEB700DD985DB98 /* FIRAuthSerialTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = E5C4CBD5C53DB24398B5E050FFFE4C96 /* FIRAuthSerialTaskQueue.m */; }; + 8AD6A09454F77F394EB0C6C5639B8D5D /* FStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A28DAF2A160B5D1689521057BC9E3498 /* FStringUtilities.m */; }; + 8B1FBD4F6B3B70EC5B6AF31E7BD3EABC /* FWriteTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 46AE7A77ABF323FBAFEBAE18712E206E /* FWriteTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B7858E23D7C90AEB072D6BC8673731C /* status.cc in Sources */ = {isa = PBXBuildFile; fileRef = E44660104793B22126F515F4E14D3885 /* status.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 8C2B148EEFDCF32020883BFD4603B636 /* RLMCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3852929DA5FB50C214BFD56D757A1C62 /* RLMCollection.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 8C31E7EB56D5BD35C933B649B15FE56C /* RLMRealmUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0520170A0F4165130ED1587C24B15F56 /* RLMRealmUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 8C8FB298E817329B3775E7E12BE7CC92 /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30AFAA378425E249D5029B3DE664BA39 /* IValueFormatter.swift */; }; + 8CCF2AA7F01C1E9B3BE93FF1ABE22879 /* sync_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FFEF00FA05F4DCCD71930549CA0FD9B /* sync_manager.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 8D4DDB21B8B72A5104CFF24DA8590CAA /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78EE50CA26577BF7F9B37539DC34362 /* ILineScatterCandleRadarChartDataSet.swift */; }; + 8D4F37D8AAA69302CE2ACA9BA1010A8E /* SVProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 00780D4D04882C948E1B9336A2C69E9E /* SVProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DA49D8910554FE461C20C9D75937CC7 /* RLMSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3706862871A33BD813A2356BC006C3 /* RLMSchema_Private.h */; }; + 8E4A5F3195447CCDD218B132D1626304 /* FIRNetworkLoggerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3429DADBDACA9E36CC4E3ACD319C05E4 /* FIRNetworkLoggerProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8F33F0B3C2A785E52DA211D10C59EFEE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72AF7766300EF09E371BAE0853760A92 /* CoreGraphics.framework */; }; - 8F45469FC0750B930C2EE7FAC32405D2 /* NSError+RLMSync.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE089B6DFD2B2508B0CB8D72C7E3C2B /* NSError+RLMSync.h */; }; - 8F472814B92879DD6EB38B9A38BD6AE7 /* FPriorityIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = E2B8505FFB9E28E64596357FF3330F17 /* FPriorityIndex.m */; }; - 8F6AB8BAE3884560E926B5026255E788 /* RLMSyncCredentials.m in Sources */ = {isa = PBXBuildFile; fileRef = 1447015D7EE4CA9757DB258EDFEC618A /* RLMSyncCredentials.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 8F7D63B453A6010150DE1D6F4C648561 /* FRangedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = D7F61CFEA9E82A3FE8BC9B336BB62F11 /* FRangedFilter.m */; }; - 90A9BA2B290C3F004400886256EC596A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B56D2583344249C1A8E402CDDFA31CD /* QuartzCore.framework */; }; - 910614ABC433839EEB2D016A04609FA4 /* FIRDatabaseReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E1A3A71989A118385B2374EB5E79BB8 /* FIRDatabaseReference.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 910E35C49EC8FE29381F288A75BA9CAD /* sync_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED502BFD549FB181F163263B093CAF0 /* sync_config.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 912165AA28D971FC52B755C8EC6470DE /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 133E1CBCA9D4227BA0693421D24078B5 /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9169C67C53C656297CAF9AFF5D104308 /* FIRPhoneAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 261DFEBC7EA69BAF5CC8E2FEA7E3F02E /* FIRPhoneAuthCredential.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 919AEB12FCA5A2605B21A137F31D43B8 /* memtable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 7628D1777E7034B427095448AFF65A1C /* memtable.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 91FBA9A173AE56BAE99FFBC4FF7CDE3A /* FIRErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = AA84C0312A0FE59EE3266F53E20785E9 /* FIRErrors.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9216FA77B8ECDA7543FA6D743BF5276E /* FTupleRemovedQueriesEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 770AF2E17CD58BDCA0D918158D01E602 /* FTupleRemovedQueriesEvents.m */; }; - 9220382537C41E7EDEBE51FFD33E7106 /* FIRCreateAuthURIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F89EF5E84A25EFCAD7E480D899271 /* FIRCreateAuthURIResponse.m */; }; - 92D427A926849C320A8AB9A4A6C5CA16 /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 570D4872F753E82842DDD66B6A81DB10 /* FIROptions.m */; }; - 932AE36436E9271E375CAD3BC4F7A9A8 /* FIRServerValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A7A1C13C4245A09439D1DBC7E5C75F2 /* FIRServerValue.m */; }; - 936CD02BC613B3DE0853F1A4C2BA4D4D /* FIRVerifyAssertionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BFC99100C7B07A11CD15F4740CD7102 /* FIRVerifyAssertionRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93916E7ACD4A21796DCF53670B85E8A0 /* FIRAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FAABD62DEB63315D1257B7D6CFEE2F8 /* FIRAuth.m */; }; - 93F3CF0BFFA1223543F611BAAA88A636 /* FEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AE871854B59BD765240668386C1DC4D /* FEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 942EA9182162FFCF485CDBE322987857 /* FIRSignUpNewUserRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B6B274BA55924A32D1099D55AE060EC /* FIRSignUpNewUserRequest.m */; }; - 94B919E5E37E5F2A3328C01092D64B06 /* FOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E03EEB0FF50B1253DE3D15D06B52F5 /* FOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94DEBF8DF425A97C09B152A9E3508A37 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - 94DFCA33D9DA10EACE60D098B2361DE2 /* FTransformedEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = A90046E26AA851A035D7A9111C1941E8 /* FTransformedEnumerator.m */; }; - 95156987028D309F91AC55FBDFE01643 /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 854719D9A0CF8C52152DC541E1D3EF66 /* Kingfisher-dummy.m */; }; - 953C109E107142C97B281784866B5ED5 /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D7473FEC7E4B09268EA7A1117ABA72 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 95BA971B3A3B79BA3EFBF446FBA7D0B4 /* FViewProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF64F45123D8FB8AFD81C22B85D89A5 /* FViewProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95E860EF913B4BF065B2FDF42B008022 /* FIRReachabilityChecker+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CED8D21E7C53ED13858B3B607897C0C /* FIRReachabilityChecker+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 96D9B3E43696E717758336813A2659FE /* FCachePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = DF1F2A07D2308D209D0DB7A524B6B4AA /* FCachePolicy.m */; }; - 97133E8F3B5BFCD61BE11B33382D5383 /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 429CCB87B4917463265B13D18456A99E /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9726B65A1F97CF0EFB91F193D025C8B0 /* FIRDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F7A60E8391C0103B242BB64C3E046EF /* FIRDatabase.m */; }; - 9727FC6F0458718EFBC13F55CEF2C9B1 /* FCancelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 65D54BF75DDC3FA231AA356BD5B8F3CC /* FCancelEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9732DE875C50D5085ED9AAC2ED14AA26 /* FSyncTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 65BDC2DF79ECB93585E1BEF395A43E4C /* FSyncTree.m */; }; - 9783BFF70715D5C496E6A6367463F68C /* RLMObservation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE8F91FA9DBD119018F550096370C5E /* RLMObservation.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 97A5AB43F7CAC0CA3E126CDBA1794F8C /* sync_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37BD44BE580F43C7D3714FD1B0663CC1 /* sync_file.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 981FF4558A18381B5939ED8C9C920BFF /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AED3E930C42795FCFAA5FF2243A3039 /* GTMNSData+zlib.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9840CB2A95F650C2ED4BD38CC432A36A /* RLMPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 8128B85FFE0C0D700431543AA97F0F38 /* RLMPlatform.h */; }; - 986908EC6AD3E31E5729D3262A925066 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B47CEC728C7969B0515AFA0224C3BAD /* SwiftyJSON.swift */; }; - 98D12D646831DCFAFE0D921DC8FC4198 /* FSparseSnapshotTree.h in Headers */ = {isa = PBXBuildFile; fileRef = F524232F2B533892102DB1982763255E /* FSparseSnapshotTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99CBC4F3BF25131FA908330CEB960CBE /* FIRNoopAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F568E2FB0AF2F675B252CA373C69672 /* FIRNoopAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99DCB5B35A0EBBBD61D3DABF2733E6F3 /* FTupleSetIdPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 393E34A6743DCFE11EA0EB1A258748E5 /* FTupleSetIdPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A088833DEB9D7B0EE55B90B27112B18 /* FListenComplete.m in Sources */ = {isa = PBXBuildFile; fileRef = A1ED358F43ABF0E139113AFA038BC50C /* FListenComplete.m */; }; - 9A2A48479F63148A097B32D28A3BC842 /* FIRGetProjectConfigResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 850B48724DDD9CA3ADE704FA62D5EA5A /* FIRGetProjectConfigResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9ACCFCC2C26B0CB23C4C97A55905170B /* posix_logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A6933FE1C6A29ECA799CFB8C39C872A /* posix_logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B4ED9245759E7819CBE6495F4CAC671 /* FIRAuthDataResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B7044D55D7E19AFD3900DABD500C2BAB /* FIRAuthDataResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B68231A266F3C4CD184A0A504B3F0AE /* iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 52C6835AB19C915DDBF7304F4A9300BB /* iterator.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 9BB1576C757F32D72757F97ED6A12F44 /* c.h in Headers */ = {isa = PBXBuildFile; fileRef = 201641656CA6857B14FB8FE9DD4054BF /* c.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9BFAF2497A687EE676795FDA5341C7B6 /* FIREmailLinkSignInResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0B03BB5C1649C926A02C2AA2FD4A29 /* FIREmailLinkSignInResponse.m */; }; - 9BFDEFBE7DD21BB5D25ACF7FD7721526 /* partial_sync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64E06784FA3B6F6AA98F32C151BF722C /* partial_sync.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 9C13AC4D26E5E541C4FDD87DA0975DF6 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 833FFA65380BC592A5DA4FEE614B246D /* RLMObjectBase_Dynamic.h */; }; - 9C5B32FB531BCFE5B039C9C4A894B139 /* FTrackedQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = B3FE521C713ED654A08EB82618EB271C /* FTrackedQuery.m */; }; - 9D226860F9B2A65B99B5C94C45BE2924 /* Realm-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB1F9E876407CD5BB252BD6A0490DAE /* Realm-dummy.m */; }; - 9D64BF0DA8DB5B7EDB7DD0BB9DED5C91 /* RLMObjectStore.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = B2DD1F797661A52FDEFF49CC71D986D2 /* RLMObjectStore.h */; }; - 9D8E5603E49BA59744466A6301DC1837 /* histogram.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9D1A9788A71428201F949C720DA3C9C9 /* histogram.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 9DBADD6400A67CD78DC0380D975F4F32 /* RLMMigration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1FEAA3161C1F9C56755E502529EF7FC5 /* RLMMigration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - 9E1F8C7970308B7C4C52B52A990AF5C0 /* FIRDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D2D18454880161205A54F248F1309417 /* FIRDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E3D6CF04B9458E4AE817A01FB763A1B /* table_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = FE237A3FA67FD7E1361EE75D555E1F5C /* table_cache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E3E0B530314C54D4388D91641AB4841 /* FIRUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 739EDA6BA880C374271A5FFD1F4827C7 /* FIRUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E40E90AABBDE693DD7B282100C3537B /* FClock.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0F91D2366FEC6EB1A7B28EE6A1888E /* FClock.m */; }; - 9E44E6F78C4EF41A6A5CF88A094AA1AC /* FIRAuthBackend.m in Sources */ = {isa = PBXBuildFile; fileRef = 01EE60DEEA4F6E9A3C2E16BB7D3E538A /* FIRAuthBackend.m */; }; - 9E4B40A3339FB47634EB30B6CBEFB91F /* FIRSendVerificationCodeRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1AEBAFB012D313D7298940982F4182 /* FIRSendVerificationCodeRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E4BFB7CFC09258C22A18B4AB4C331DB /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 0732883D1BAD351393D27D47576F1236 /* NSArray+Chameleon.m */; }; - 9ED2BB2981896E0A39EFA365503F58CE /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 796D14C630D8812D2DCE28B605FC4564 /* AFError.swift */; }; - 9EED24FBDD9E4E4E74C5440788BF3EC1 /* FIRSetAccountInfoResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 91FA7AE6B4AA6D2454F4599FC29CBE8A /* FIRSetAccountInfoResponse.m */; }; - 9F403F8C4D0C6BDA6CD954070F352021 /* env.cc in Sources */ = {isa = PBXBuildFile; fileRef = 011170F025ACC6E045835611E6E339C6 /* env.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - 9F510472B83B27DE9BCC42673E51A20A /* FIRAuthAPNSToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D025D271898248FCA3ED5E9FB44D563 /* FIRAuthAPNSToken.m */; }; - 9F553C994F4E1B6AAB5FAE964C0C13A0 /* RLMThreadSafeReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA79A6B3CCD3B720B78C2EABF4922F5 /* RLMThreadSafeReference.h */; }; - 9F8F6396CD7161C5C0BA9253BFE3446A /* FIRAuthWebUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 460EB96A504341E7527BEDAA1FEDEFA7 /* FIRAuthWebUtils.m */; }; - 9FED4D8226A39B2EED72A65E1AE0E0D8 /* FIRDatabaseQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6769178C5B6719E6F4520E8A1A2ED0 /* FIRDatabaseQuery.m */; }; - A02E49FB54C1126E9D3BB47CF289B2EA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - A08109DBF30659072126574219FC753B /* FIRGoogleAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 35343AFE86D3B019B15E621A0AE69B29 /* FIRGoogleAuthCredential.m */; }; - A0C9447BCDC65216357BC17A25CAC3AF /* FArraySortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 498D7CB872B9E3F3206280DD6302C75B /* FArraySortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0DF59496B81A011FCC32FD74C4DB1D4 /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 0199999A928BD098252EE9E3E7996064 /* logging.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - A10063DC8006353AA5251FFE59B7A4CC /* FIRSendVerificationCodeResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9C2A8733A9306806AB192FE8737108 /* FIRSendVerificationCodeResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A181A5467A0A4222A5704B742DF4A643 /* RLMAccessor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 15041A28BD4AF2BA8BBC0449DFE3FC55 /* RLMAccessor.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A1B37319657D8805F4C2C7A14E6A918C /* FRangedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = E9535BB87C3A65DC7EF7CAAE2BE8D61B /* FRangedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1B533FC8826A7066B6A475303BB591F /* CustomStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1338EA89CF01F1D3968BA51757F9953 /* CustomStringConvertible.swift */; }; - A1FC93D4034B21C036C5D254E0A4EB81 /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 580642BDB2A550A0A752100C1BAEDD62 /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8F472814B92879DD6EB38B9A38BD6AE7 /* FPriorityIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = 21E20683F3B793D3A157713ADCCC4326 /* FPriorityIndex.m */; }; + 8F7444EE525DDAC487E9638AD212345A /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E272D493395ABF9F93A519C37C611EDF /* PieChartDataEntry.swift */; }; + 8F7D63B453A6010150DE1D6F4C648561 /* FRangedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = B741DFC3C45A74D75650D19D61CD0AEF /* FRangedFilter.m */; }; + 8F87E38081DC9084DA26998366EA0ADD /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = D367F27D2C99A4A72B21665841BB1F78 /* Optional.swift */; }; + 8FF0A78261D4F14CBD4618C850200ADA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CFD9C5B4E24099B87D18EF99B785C958 /* UIKit.framework */; }; + 9053E198DE4959D70159A21A8F90BB63 /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C73FE0756F8F5C0417D56031B62FB80 /* IBubbleChartDataSet.swift */; }; + 90AB9A4F53EA707A17DD6D0EA0B9AFDF /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B93997F1E4DB619D6BB53AAD7997C3 /* Error.swift */; }; + 90C91B4DB090622DEF0801547D1035E8 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15254BA3250B5723FF8F2252C96E4F9A /* BarChartView.swift */; }; + 90DF4DE36B93C4DB6C683D39FD28F684 /* index_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90DF32E713CBC3C486D7DCC8D259083C /* index_set.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 910614ABC433839EEB2D016A04609FA4 /* FIRDatabaseReference.h in Headers */ = {isa = PBXBuildFile; fileRef = ECA5B33E77A81E1B638BD533007AE692 /* FIRDatabaseReference.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 912165AA28D971FC52B755C8EC6470DE /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = ECD7BA3D5DE79C189A49C586B3B522CE /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 912654DBC8EE50D7C49548317A5C16F6 /* RLMRealm_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9520F4E98820B6F558926064876F5AC8 /* RLMRealm_Private.h */; }; + 9169C67C53C656297CAF9AFF5D104308 /* FIRPhoneAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = B3B32E578877653139CA3243DE516DFE /* FIRPhoneAuthCredential.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 919AEB12FCA5A2605B21A137F31D43B8 /* memtable.cc in Sources */ = {isa = PBXBuildFile; fileRef = B18A9E60C22CE808906A4B038E3B3D07 /* memtable.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 91FBA9A173AE56BAE99FFBC4FF7CDE3A /* FIRErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 9311461610A5335AB38831FE1EB0C41A /* FIRErrors.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9216FA77B8ECDA7543FA6D743BF5276E /* FTupleRemovedQueriesEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 09B005B5E8973D2C4964794D38124066 /* FTupleRemovedQueriesEvents.m */; }; + 9220382537C41E7EDEBE51FFD33E7106 /* FIRCreateAuthURIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 232808034064F52672DDDD3772D6D6B9 /* FIRCreateAuthURIResponse.m */; }; + 92D427A926849C320A8AB9A4A6C5CA16 /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5287EF634A00D57846CFE8B9DB58C0CE /* FIROptions.m */; }; + 92E7CD0D8B384FA121136A9185A019E0 /* SideMenuManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76E4ED39E760E6169AD63819AFD85640 /* SideMenuManager.swift */; }; + 92F3ABF814C451C5B68BC008649E8FE7 /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077F0BBCD9DF75EFC6E0680E4A23DDE1 /* PieChartRenderer.swift */; }; + 932AE36436E9271E375CAD3BC4F7A9A8 /* FIRServerValue.m in Sources */ = {isa = PBXBuildFile; fileRef = E98B7F16E1968C0F5B2827BDA7982C53 /* FIRServerValue.m */; }; + 93435DDE2473E2300031C8BEF62904BE /* RLMSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F5761ABBE7D34859F6873ED5001D20F2 /* RLMSyncManager.h */; }; + 9349F8DE57389B1E7554750B78411397 /* RLMListBase.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = C0C36BFE9F8F94F4B9F0B593A4C6E4C6 /* RLMListBase.h */; }; + 936CD02BC613B3DE0853F1A4C2BA4D4D /* FIRVerifyAssertionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A80709F76E853ADC26ACBDD3B16C92BF /* FIRVerifyAssertionRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93916E7ACD4A21796DCF53670B85E8A0 /* FIRAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DEF6CBDE137A9D304491225064F131B /* FIRAuth.m */; }; + 93BF5E63C2A2D2EDF5030FB591B99F5F /* RLMResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C2204D4B7BAAE7C0283A04900A453A8 /* RLMResults.h */; }; + 93F3CF0BFFA1223543F611BAAA88A636 /* FEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 46AE74B10F7C0E252596929E9503E189 /* FEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 940C50A9F197CA2D0ED6CB073893A764 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 145E87090498C9A807B91E8AF19C3434 /* LineChartRenderer.swift */; }; + 942EA9182162FFCF485CDBE322987857 /* FIRSignUpNewUserRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = BFFFA1D4B5B3E70B8A5A77644009587F /* FIRSignUpNewUserRequest.m */; }; + 94A15DC6C689BE09711ADCC28A393A73 /* RLMRealmConfiguration+Sync.h in Headers */ = {isa = PBXBuildFile; fileRef = DCAD53AB4741FAAE1601FCB66AABA196 /* RLMRealmConfiguration+Sync.h */; }; + 94B6D2B76AEFCAA823FF8B3459E055D0 /* Thenable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999BB6545C2BD4474217011F2EC71906 /* Thenable.swift */; }; + 94B919E5E37E5F2A3328C01092D64B06 /* FOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CBB5AFA0FFA2140562338C10AB62AC6 /* FOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 94DFCA33D9DA10EACE60D098B2361DE2 /* FTransformedEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = A1157F822DD04B416CB4882B6AE0C0E0 /* FTransformedEnumerator.m */; }; + 9512FC6084B2BD1AC845BE76B3F2540C /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F68106257FC66AE78998CDE6A13BF125 /* ComponentBase.swift */; }; + 95156987028D309F91AC55FBDFE01643 /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C4045D05301ACDC8D67975D7EBB040EB /* Kingfisher-dummy.m */; }; + 95169A77C0EAE726517CABE977890209 /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AAB0D800CC3AAA4CF2EDEBAE6E57F4 /* Realm.framework */; }; + 952170D5850C7E1F5814E53FC255961E /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51B4AA15ABBB1261F5E793114BC417B /* RadarChartDataEntry.swift */; }; + 953C109E107142C97B281784866B5ED5 /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 497F1096BACAE774E114FAEC740D5AD4 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 95BA971B3A3B79BA3EFBF446FBA7D0B4 /* FViewProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C27F19177EDA2E360C44DC25BC64507 /* FViewProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95E860EF913B4BF065B2FDF42B008022 /* FIRReachabilityChecker+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7B09A93B8E808B32BE6C6B19C8091B /* FIRReachabilityChecker+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 964145A6D396D87C55E0D8BFFFFAB21E /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C39B60D444A644531A2F92C55F8CC9F /* SquareShapeRenderer.swift */; }; + 96416BE648D453B402DD79FC793F2699 /* RLMOptionalBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = EEEB3C3C89CD691258C71D9861F0EAE4 /* RLMOptionalBase.h */; }; + 96ADBE2B89D8E6080D3A8297705BDE76 /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BC2333A3C0C4AE7B7A006657401D4CC /* ChartDataRendererBase.swift */; }; + 96D9B3E43696E717758336813A2659FE /* FCachePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = C4087F474248E1C1BECA11C887779F7F /* FCachePolicy.m */; }; + 97133E8F3B5BFCD61BE11B33382D5383 /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = D116B37B4CC8790458F3EDE605394C60 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9726B65A1F97CF0EFB91F193D025C8B0 /* FIRDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 37E12B6FCBA64AA69BBC0C69C20791A7 /* FIRDatabase.m */; }; + 9727FC6F0458718EFBC13F55CEF2C9B1 /* FCancelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 56792BC7071A111C79B8BD42F3C1ED6D /* FCancelEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 972A007B9792B86D70AF5B0523A681CE /* hang.swift in Sources */ = {isa = PBXBuildFile; fileRef = 394217BF43925049167B82BEE13124F6 /* hang.swift */; }; + 9732DE875C50D5085ED9AAC2ED14AA26 /* FSyncTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8FF575FA2846D84D47954F3EE155F2 /* FSyncTree.m */; }; + 97DDC62C2566F1DAFF266A8E31B52D8D /* realm_coordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C09D4531628D0E5BE83B17999A2F5FBE /* realm_coordinator.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 981FF4558A18381B5939ED8C9C920BFF /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF8E6C18622FD5C83FD69B0DDAB5823 /* GTMNSData+zlib.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 985E7228660575602A2410A1C9E68A72 /* RLMThreadSafeReference.h in Headers */ = {isa = PBXBuildFile; fileRef = C2116FCC7B75EC60A136A777856980B9 /* RLMThreadSafeReference.h */; }; + 9870EDBF6E8ACAB0F4CD46E77E5BFC86 /* Alamofire+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02AD01C63ECA2BE2D0D23054BFF0C45A /* Alamofire+Promise.swift */; }; + 9893DAB11C592CD58002AE24C5BE7C52 /* RLMResults_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0D263DD44FCE700E4F3FA23FAF0594 /* RLMResults_Private.h */; }; + 989B6227B9B6629EF3E56E382496E75E /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD05D07327E5CC3EDC0C854004583BE1 /* ScatterChartData.swift */; }; + 98D12D646831DCFAFE0D921DC8FC4198 /* FSparseSnapshotTree.h in Headers */ = {isa = PBXBuildFile; fileRef = BA23E4520BD3ECD2C5DC5671C13F21A1 /* FSparseSnapshotTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9928E777B7D879A3AEBAFA10E41EC096 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 403605E683C012ED28DE82C12480818B /* RLMRealmConfiguration_Private.h */; }; + 994CBAE1EBD13FA3DFDC56F24F86EA14 /* when.m in Sources */ = {isa = PBXBuildFile; fileRef = D71240A2D4877ACF87999159339AC662 /* when.m */; }; + 9957637E5E91AD48BFD1A47F62AF8F41 /* object_schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 989EAF3DCA3CBD33274B002B2A4DCE61 /* object_schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 99A845D04850C426CBBAB1354D280A8F /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 177725A426DFCAC2B5A1FCFC07B02D26 /* BarChartRenderer.swift */; }; + 99CBC4F3BF25131FA908330CEB960CBE /* FIRNoopAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 9371C403F279FD7B8D4D8B8662761FE2 /* FIRNoopAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 99DCB5B35A0EBBBD61D3DABF2733E6F3 /* FTupleSetIdPath.h in Headers */ = {isa = PBXBuildFile; fileRef = BC219638C7354175BD397813F460998E /* FTupleSetIdPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A088833DEB9D7B0EE55B90B27112B18 /* FListenComplete.m in Sources */ = {isa = PBXBuildFile; fileRef = 05BCF2B6824F3D6AECED62E135D82C12 /* FListenComplete.m */; }; + 9A2691B5F224F44CC7D377E14C4E524C /* RLMSyncConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8FBAEF6A37B78525066DB01BBEC072B7 /* RLMSyncConfiguration.h */; }; + 9A2A48479F63148A097B32D28A3BC842 /* FIRGetProjectConfigResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = DE60E07F1ED9D438A7C71A665E7AC738 /* FIRGetProjectConfigResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9ACCFCC2C26B0CB23C4C97A55905170B /* posix_logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9EAEB0B511F6D6A3D974BE2F0B3207 /* posix_logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B4ED9245759E7819CBE6495F4CAC671 /* FIRAuthDataResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 829820B8821F8CF277355998B0EB4E6B /* FIRAuthDataResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B53647E6877E38B0F49C09303DE7397 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54AC5C30CD34FA6295FD2F917DDB19A /* TransformerHorizontalBarChart.swift */; }; + 9B5AA7A448DDEF1ECE598F8026F44AE4 /* RLMListBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 376774FD7327BE1E1FF438C025FC4E81 /* RLMListBase.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9B68231A266F3C4CD184A0A504B3F0AE /* iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 06ABE5481AE97583FE62FDFB8952C2D4 /* iterator.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 9BB1576C757F32D72757F97ED6A12F44 /* c.h in Headers */ = {isa = PBXBuildFile; fileRef = 382927EF1280F083D91F4ADC1BA04611 /* c.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9BFAF2497A687EE676795FDA5341C7B6 /* FIREmailLinkSignInResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 884FE364F7F4AC9D3B915B63C844CFA1 /* FIREmailLinkSignInResponse.m */; }; + 9C5B32FB531BCFE5B039C9C4A894B139 /* FTrackedQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A92340D6E2B4EE9033CD9212ED2C825 /* FTrackedQuery.m */; }; + 9CABBB1A02009EC2595AEAC4F61CDF04 /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36A32DA6C600AD919DF9563684CB94A4 /* MarkerImage.swift */; }; + 9CFA1AD23B694842A4E48A0DB4F1D7B5 /* RLMConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C49AAEFCD32B4B510FB8224BCD0944E /* RLMConstants.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9D774C2A6CD437431DCB0C3DC0A73B97 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B56D2583344249C1A8E402CDDFA31CD /* QuartzCore.framework */; }; + 9D8DA4882EB1307B73A4F56C0372CD84 /* RLMSyncSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = DC46A1AE5BB80D97BADCD70C3B0FFDBB /* RLMSyncSession.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + 9D8E5603E49BA59744466A6301DC1837 /* histogram.cc in Sources */ = {isa = PBXBuildFile; fileRef = F3B7E2E973BBB444C06C551233B1D8B9 /* histogram.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 9E1F8C7970308B7C4C52B52A990AF5C0 /* FIRDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C62BEED4AD91CC42CDE2465E1E454971 /* FIRDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E3D6CF04B9458E4AE817A01FB763A1B /* table_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A8DDD2705297C49F475FA8546ECABD /* table_cache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E3E0B530314C54D4388D91641AB4841 /* FIRUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4001033DBF35BF25BC0B98754A934EDB /* FIRUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E40E90AABBDE693DD7B282100C3537B /* FClock.m in Sources */ = {isa = PBXBuildFile; fileRef = C3699ABB00BA59D8641DCFB0DAFC86DC /* FClock.m */; }; + 9E44E6F78C4EF41A6A5CF88A094AA1AC /* FIRAuthBackend.m in Sources */ = {isa = PBXBuildFile; fileRef = 1908CB01202F8FE5D5065C5971BCE40B /* FIRAuthBackend.m */; }; + 9E4B40A3339FB47634EB30B6CBEFB91F /* FIRSendVerificationCodeRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 71BA7A67BBC43A4DB783712FB346DABD /* FIRSendVerificationCodeRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E4BFB7CFC09258C22A18B4AB4C331DB /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 02567E06C0649C2B8EE728CCEF4F0CC8 /* NSArray+Chameleon.m */; }; + 9E569E674A4755874D729C460604978F /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8D7CBB785F455D6E2B1C535A2C2AA3 /* List.swift */; }; + 9ED2BB2981896E0A39EFA365503F58CE /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430E9B8AB787A5CD66DBD7BEA7801919 /* AFError.swift */; }; + 9EED24FBDD9E4E4E74C5440788BF3EC1 /* FIRSetAccountInfoResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 557B7CC5A9A11189BBEAFC72464BEA0A /* FIRSetAccountInfoResponse.m */; }; + 9F403F8C4D0C6BDA6CD954070F352021 /* env.cc in Sources */ = {isa = PBXBuildFile; fileRef = AFDBAA766F94D84BAD76651FCEF19F17 /* env.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + 9F510472B83B27DE9BCC42673E51A20A /* FIRAuthAPNSToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D99A87B69BB9482A7F35A29FA3B22D0 /* FIRAuthAPNSToken.m */; }; + 9F8F6396CD7161C5C0BA9253BFE3446A /* FIRAuthWebUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3DE7D630CFB3538A508DEC63BD1701 /* FIRAuthWebUtils.m */; }; + 9FE28FF51551892A889A76123F97E81E /* RLMSyncUtil.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 79354ADC42B200C248C8124D60CB81E6 /* RLMSyncUtil.h */; }; + 9FED4D8226A39B2EED72A65E1AE0E0D8 /* FIRDatabaseQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = E13C55167E7C43E08ACFF3C1C5DECDA7 /* FIRDatabaseQuery.m */; }; + A08109DBF30659072126574219FC753B /* FIRGoogleAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 741AD09F20CCD4D64A615FE16AEDB387 /* FIRGoogleAuthCredential.m */; }; + A0C9447BCDC65216357BC17A25CAC3AF /* FArraySortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = FE94EC3F2DE0FAB11166955BB0245B5B /* FArraySortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0DF59496B81A011FCC32FD74C4DB1D4 /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9F78C8D5538F2593D1928EE534385A72 /* logging.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + A0E491BE55ACE4EF2C826A37B22D2939 /* collection_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C98D92A054E4BDDEB04D0D9EF190C0 /* collection_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + A10063DC8006353AA5251FFE59B7A4CC /* FIRSendVerificationCodeResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7546C05AF7D0A1160FC41FFBDFFED75C /* FIRSendVerificationCodeResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1B37319657D8805F4C2C7A14E6A918C /* FRangedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = C09029D3DB98EBDD87D510D1426597DB /* FRangedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1FC93D4034B21C036C5D254E0A4EB81 /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 708476560D22C9E2631C4F742586EFF8 /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A21FF879F22A04E297C8BB54AEAD1EEE /* SVProgressAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C69E4C66B28770C59E6B9BA77DA2830 /* SVProgressAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; }; A2422DF542110FE20395C3B78F8864FB /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBAA5BACA9745702C885EB1AF32FA673 /* Security.framework */; }; - A25A4B2402809148CC9ED9A8F144CBBB /* FMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F6BFDF488B63BC769F213FF0D28D968 /* FMerge.m */; }; - A2A6F71B727312BD45CC7A4AAD7B0AB7 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296659C5638CAF0191D8D60039C7A4DE /* NetworkReachabilityManager.swift */; }; - A2BD4D7A41A27330CB8674EB2625CC77 /* FTupleObjectNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CD26081036BEE7C05DD4C429054B7894 /* FTupleObjectNode.m */; }; - A2BF02FE06102FE692DA247C97812B97 /* FImmutableSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE583426B0571D546C951D11A281BF6 /* FImmutableSortedDictionary.m */; }; - A2FF26B161E442DF7DFB20C75604BB48 /* FLeafNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EB4CA782B4E1BDD6432422D73C87206 /* FLeafNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3192E10530C0D91DD7D7A403DE1E53F /* FClock.h in Headers */ = {isa = PBXBuildFile; fileRef = D855FD00DDA5E0D42BFE2777C20A9968 /* FClock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3644063751733D55C32BA052E6441C0 /* RLMCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = B433C9505D488D3D4CCFECE91DB80379 /* RLMCollection.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A4724ED0201B76336EA5F9AC3135DFBF /* FIRAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 060B27D9EB1F50D6412B276C2BC4BFC2 /* FIRAuthProvider.m */; }; - A4753FE57CE56F2010E0B428789CB3EF /* FIRMutableData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C42B2760B949BEED82EBD3F86033DE6 /* FIRMutableData.m */; }; - A498662E3250C5FD24E596EAAD389A53 /* SwiftChart-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D97A8C0D678831946DEC1418C7B6876 /* SwiftChart-dummy.m */; }; - A543062562F99997510A2983AC405A50 /* FDataEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B3FAF29B072E0393348D9393D31AD4 /* FDataEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A55460BA0BBED79CB3FD2000AC7DA5DE /* RLMSwiftSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ECC507E7F47E66784AAB190F66457D6 /* RLMSwiftSupport.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A56499E874DA6BFD36D3E733028866F2 /* FLLRBEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6038170437BAF049CB60F88B2FF54AA5 /* FLLRBEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A56B676A8DA02E627D06A2AF7BDCDB95 /* RLMObjectBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = FE08BA04FFD4D05E87FF20CA580F01B7 /* RLMObjectBase.h */; }; - A5BC7B92676861B2F3C66CA0EAA57935 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A3C7DFCABE213768DFF8B34B4286677 /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A646A5DB58C09CD6BE0173A3BCB13234 /* PromiseKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4173B25E8676D5EAA0F87AC0ED739271 /* PromiseKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A64BA00ABE2C9B3A37D50B82B3BCB103 /* db_iter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E11CEC5A1750DA6841C79BA06EEAD46 /* db_iter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A69A64A73F26F57F07C95120CCAA73AB /* RLMClassInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = CAC1E1C82CC6C37C905A0336966AB1A4 /* RLMClassInfo.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A6C641B47CB496B8E32B9D9C9B7FFBC0 /* RLMThreadSafeReference.mm in Sources */ = {isa = PBXBuildFile; fileRef = 613B41797B8589C74E3BCB0E66789F1D /* RLMThreadSafeReference.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - A7E5834A87CB7D350C24DACBFC1BA1D9 /* FIRTransactionResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 04D70AD08B309E1B7AA1E899AB9F7DD0 /* FIRTransactionResult.m */; }; - A8087054B60C4082589838D61DFE5A44 /* fbase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C0508B893BA3752988AAB9C06416A7C /* fbase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8A79840E81BFA3D8DCC29BE71F1AEC4 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3AA80D8B2AF7C36A131F15E22D7503 /* KingfisherManager.swift */; }; - A935A5F8CCCB11099705B3153B39F1CA /* c.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4286EFABA0810BD8CF4B7BD2281E6F04 /* c.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - A9B8A98A4A6640297A21509480FAC721 /* RLMSyncConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 383E5AC85A03FCAAD90BBA38871A2074 /* RLMSyncConfiguration_Private.h */; }; - A9D2A6547EE5F6532EF8D1F1870BF158 /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9ABDA150F8FCB5586804EBB396E825F /* CacheSerializer.swift */; }; - A9E8FD4C2FB496170FF0BFC65356FE9C /* FTupleCallbackStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = EDE51BDB9F8A1452AEA0C36D5DB71FD8 /* FTupleCallbackStatus.m */; }; - A9EEEA7477981DEEBC72432DE9990A4B /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AB0FC15C3D9D806562BAA15CD21713E /* Alamofire-dummy.m */; }; - A9FA33E73D383755E61F4A9DFF457E44 /* FNamedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 843D5111E7D78F9D8C0552A9992D3BCD /* FNamedNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AA0B5B50DC571C6C0B39AA7C4A5F980F /* env_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 0377ECD853047ECC66C472A94B29E043 /* env_posix.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - AA0DD9F6660DA012BED616C76AEF89C3 /* FIREmailLinkSignInRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D96141A1F8F122322F0FC36C9F9EE9BE /* FIREmailLinkSignInRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AA2CA4E5A3CF78A4D891166A10478B9C /* FIRGetOOBConfirmationCodeRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 47E0583817CDAF3174410BE29308E175 /* FIRGetOOBConfirmationCodeRequest.m */; }; - AAA95586A8195713834B51F37A7F2CDA /* FIRAuthKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 25AF23E210F2B16DE227CBE1D1B7B7AF /* FIRAuthKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AAB6307055DD02C93549A7D013EB9B5C /* env.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EE074BDDBCA5D7ACBC1D565DC19B0FE /* env.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AABD173CF56B61852E4643AE5FC9D737 /* FMaxNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 769A24B9A7E6EA91AB22AC7BDF7294A1 /* FMaxNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AAE057B69178AC146DFABBCAF7B39721 /* FIRAuthAppCredentialManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 467113AD6072BC4157BB38F53BB959C9 /* FIRAuthAppCredentialManager.m */; }; - AAE345232B79B0E25254968D8C7273B0 /* RLMRealm+Sync.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D41733250C51AB27A9EDB633243356FB /* RLMRealm+Sync.h */; }; - AAF9D290AEBAFC96C918CE214121B91C /* RLMMigration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D29BE28AB8262B8B505B9098E19E55E /* RLMMigration_Private.h */; }; - AB46CB350172E081634454FD9E5C4117 /* FAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ECDAC859AFE6D77E199B99242CF9302 /* FAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB56501BE479E580CE858A0E403A44CF /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D89CBA57930B44B7419023858932BA9F /* GTMSessionUploadFetcher.m */; }; - ABD39EAFA1768E0BBF1F7E83AD517BBE /* FStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 70BA0C5E124A73AB8333E19108FEBDCF /* FStringUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC2226CC810DEB8A9E19D5FC44688A27 /* RLMConstants.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 6459ED0790D6ED01E1D9C3474BD712A6 /* RLMConstants.h */; }; - AC23C23DFCFDEDF16A63B8F52C23E62D /* FTupleBoolBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F337E4E3BE93C305DBB326335C09D2C /* FTupleBoolBlock.m */; }; - AC6F39F1C4F636529D6269ABF83E2177 /* coding.cc in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDE7CCDB2A7DB50BC6DC4EB0D5830 /* coding.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - AC82D120B0B465641985587872D0B2D6 /* RLMSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2049C5CA639316DB171CAA0B09E0676B /* RLMSyncManager.h */; }; - AC9DBC374F87509902096C9BD7460244 /* FIRDatabaseConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 23D2A626E8FC87744A73EF8C49B11F8B /* FIRDatabaseConfig.m */; }; - ACBF0C7E0D45A733515946C9D040A857 /* FIRDeleteAccountResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 881B396F293B5055277292EEF4F7F1DA /* FIRDeleteAccountResponse.m */; }; - ACE1391C1EA3D69D4DAE6A2A176D052E /* uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 252FD7EEAEA7D49BB483B864311F6840 /* uuid.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - ACF600C726DED4ECCE12CA80AD594F20 /* FIROAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 391DE7AC210A9CA140C59DA7B60C4FCD /* FIROAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACF818BB5D603726F2DAEF871BE7FA87 /* FPruneForest.h in Headers */ = {isa = PBXBuildFile; fileRef = 703413B3BDA586A54D308061523C6ED8 /* FPruneForest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD4A62CD5EAC42AAED2202C0E85C409C /* port_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 743CCCB96F2E9E1F74323049669C8766 /* port_posix.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - AD9D97E572F2A2A9FBEC0ACE5B9EE778 /* Aliases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BEF567AC5697DBC621C486D4EAE245 /* Aliases.swift */; }; - ADFE48CCF84F1BFB2B011FBD49EBF1E8 /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 23F60B0C684B89763846E2F8FF9A007D /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE1EF48399533730D0066E04B22CA2D6 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C92E165878030D6059C424B9B1951E29 /* SessionManager.swift */; }; - AE66E1072E98D5EDBE047BC1EB2CCC39 /* FPath.m in Sources */ = {isa = PBXBuildFile; fileRef = BEDCFC9F774844B490FC6F1123E91884 /* FPath.m */; }; - AEDBE16C5A5A9780E22938566CFB187C /* SVRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 230529BF51BC41AE5A524A0E124E5700 /* SVRadialGradientLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF82F6DF4DC1CD0178AC120F8724130F /* ObjectiveCSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E2DF15F6ABE0A035905AAA3D96E9D3 /* ObjectiveCSupport.swift */; }; - B07327CCD10323B5C30EFEA280191A12 /* FIRAuthSerialTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD06B5A3CCDDA46033CB96120CF513B /* FIRAuthSerialTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B074B490E31CC196AB9A3C91D9F28420 /* FIRAuthOperationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3894693FC755AD6DDCA6821228CF105F /* FIRAuthOperationType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B08A1C1CA69A1747D878E01818B2151C /* Guarantee.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1815D2D0435C20942C254EEE55A77A7A /* Guarantee.swift */; }; - B099BC41FDDDA1C0905D9CBFF4F0610C /* RLMPlatform.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8128B85FFE0C0D700431543AA97F0F38 /* RLMPlatform.h */; }; - B101651107ACE7586585CA833F38DEF9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - B111C38ACBCDCC7F3025677B6B9E3B39 /* block_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3CF4365D76D4198C829B63404CF2ED16 /* block_builder.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - B1C494AB10C1AC3305493FD2B5A0B97F /* FImmutableSortedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 03BAB0254AF20F3DAF78573DC0FEE99E /* FImmutableSortedSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B22A39875D35734A42322A71AEAFA82B /* FIREmailLinkSignInRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = DA01AC2A148B9B2D04DBB71330093C59 /* FIREmailLinkSignInRequest.m */; }; - B2887913555F5C7033C598997ACE05E5 /* FChildrenNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B096D5FC4934FF4A2297A9CDB96AE52 /* FChildrenNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2E9E71DE1D27AB7ABD2A1D5531134BF /* FTupleUserCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F544CE6EB349011514F2B58814743C /* FTupleUserCallback.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B30AC6EB54BBD2E8EB3BFA6D0A94447C /* RLMSyncConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 383E5AC85A03FCAAD90BBA38871A2074 /* RLMSyncConfiguration_Private.h */; }; - B352D4623270F2D8A882772A7B654299 /* FIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = BCCCD79C219D9F805B8316B46CAFA25D /* FIndex.m */; }; - B3E70AF9B58B6D572E0B4F6C216786F0 /* arena.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C03BD85ABC64CD186A121936AB36741 /* arena.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3EDD6F62870A895F03281B4CE0B9A91 /* FIRNoopAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B5C113E56C758FF777823B19EFB8C60A /* FIRNoopAuthTokenProvider.m */; }; - B4119ED4D9DFBDCBE31873E9672DA923 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - B41AEE9CA376EE9A23AD1BE23117CE66 /* results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E1E1E852986BDD18DA72A5BA27E7145 /* results.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - B488C81E194D8D2C6A5FEAC85AE1AE19 /* FIRSecureTokenService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D259C8603FA80BC7A1615C037237352 /* FIRSecureTokenService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4C46703C14A3101A63F20182791550E /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = A1D45D2E35C892676FF4C6063859015E /* FIRBundleUtil.m */; }; - B51C6B3D691E2511F72ADF63B6AF6E99 /* FIRReachabilityChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 273D0275517578F12DFEF2A0A0543B47 /* FIRReachabilityChecker.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B564B930C3B6CCFCC109ABF374B21CE6 /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B5E0BD4A534DE8672E0ECCC5B57062 /* ImageModifier.swift */; }; - B581786440DAC44344D7209A8EC0CDE9 /* RLMUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 086306D83D8C3B92325BC169A4DF6893 /* RLMUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - B58FF7576B1F9D4C5A97EABDFF1DB447 /* table_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3937C1C917C4F53ADE64AF1D80858EE4 /* table_builder.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - B590084EBFDF134A5FC7E2FF4E6BCEB0 /* Realm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA67CDDCDB4D0F4FDD2CD29BD96D01C7 /* Realm.h */; }; - B59494F0DA153AFA0E1D6834724A04C2 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7BA65358ED3EFA3C71D0AD440DA51FD /* Optional.swift */; }; - B6017DB8F69AF1447F4DBA83A15D6601 /* FCancelEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 733157C0A6CD88538BB514CA3022FE34 /* FCancelEvent.m */; }; - B622F92774261551C2329DDE4D4E2404 /* FSyncTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F54EAFFFEB8994F4F4DBC66105B30C /* FSyncTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B65FCF589DA398C3EFE0128064E510EC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C986E51C8A5D6AA268C2B5C679439D7 /* MultipartFormData.swift */; }; - B6D3432403736A76F898B14A0797B1CB /* RLMSyncConfiguration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 39C3B310CEE800AC9572C07D5EE7954D /* RLMSyncConfiguration.h */; }; - B76C902A16D68CC3444CA2C31167615B /* FUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 22CA6F29CD92F4C1B2BB0A4BCA0C0FA7 /* FUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B883B0D23D119D06A32042966038FCD4 /* collection_change_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FC894FE73485EAE64E47EC2B7F525A4 /* collection_change_builder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - B8A7B8DC1B0D4F13A5A20E8FBFF53299 /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E58255240BCE83C15FD794E52C3F01 /* FIRVersion.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B8D38FC933546061142AA1F0AF84C880 /* FIRSecureTokenResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB5FBD89A9E56002ACAC938354F4CDB /* FIRSecureTokenResponse.m */; }; - B8D68762B5ECF611DBB98221C97DEDF4 /* FWebSocketConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 8131049A8380941A015BC952D24BC4A5 /* FWebSocketConnection.m */; }; - B8E72F88D6404C31373B932965C610B2 /* FUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 65F3954631DF66A5F3305029849F5A2F /* FUtilities.m */; }; - B8F9C632324A1399FBF7CAB7167613A5 /* FIRVerifyCustomTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 34E669C7C4D8508C8254BE9C56063841 /* FIRVerifyCustomTokenRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B924069CD75769E22765912C66A87BF3 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3209A5685F06611A1F5C751F8845366F /* Image.swift */; }; - B92588AC780C7BB76A0F77E84CBAA050 /* RLMObjectSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B83582E104AC09BA078311C252D8F4 /* RLMObjectSchema.h */; }; - BA2117BCECB8C53824A0A5BE4E5A35C2 /* FIRVerifyClientResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 75ABBAC607546BF05C94D2EA117EFEE8 /* FIRVerifyClientResponse.m */; }; - BA3A9D2509E05835CBFBDD7C2654D3D6 /* FTupleSetIdPath.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE1402FA9903A094033843D6D68E3CC /* FTupleSetIdPath.m */; }; - BA4DF38E820FF6B40FFABF8B1BBCC615 /* Kingfisher.h in Headers */ = {isa = PBXBuildFile; fileRef = 701681E97FC378477898782FA5C80933 /* Kingfisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA81C05E0B5EBFFD6C6CE3514B3F2065 /* FIRGetProjectConfigResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B0E4455DE9644DF9B4FCC7A64C619391 /* FIRGetProjectConfigResponse.m */; }; - BAC17487B9F5E23847CE163F2868E06F /* FEventGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1747B4A54A460E488213B0D92506C7 /* FEventGenerator.m */; }; - BAD128EBCB80571A83B174F36BC070F4 /* FIRSecureTokenService.m in Sources */ = {isa = PBXBuildFile; fileRef = 320406F57594C563FC22B268CF497450 /* FIRSecureTokenService.m */; }; - BB2CEEE801771BE50C0A1B636548F3F8 /* thread_annotations.h in Headers */ = {isa = PBXBuildFile; fileRef = 7301F254EF0E1C7E917EA5B3B21726FE /* thread_annotations.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB9CC473ED99AE6ABF8B0A6F4F08321A /* FTupleUserCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = E819A97A23766D4FB38805E95D8EB1ED /* FTupleUserCallback.m */; }; - BBE66B963B47047EC52CB0042A29E1D8 /* FIRSetAccountInfoResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 6993E8A72A6CA0442ADF959C87569226 /* FIRSetAccountInfoResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BBEFE2F9CEB73DC7BD97FFA66A0D9D4F /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0D1DDC4A6C31D6F3FDCE41C7CD4BD2D /* Validation.swift */; }; - BC56F639C0AE988A7404E1F63C81863D /* FRepo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 99AF1B1BAFACCE770472FD60484786B2 /* FRepo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC5C4DE29E6034D306BE8EEC0921D42D /* FParsedUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3248E4707C43400D306C8D449F602C0A /* FParsedUrl.m */; }; - BC6AD521A28404C58FB620B78C5CDF88 /* FIRIdentityToolkitRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = EE74E6FA4B872279CBCB62D7BEF31760 /* FIRIdentityToolkitRequest.m */; }; - BC7F0688B8256FBF7C467493E6BB5169 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 95885AB8284E99BEBECAB3C364967D0B /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCC6DCF97771836DF3B3A5DE8F2929ED /* FConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4E0F3B352BAC4824632A9FECA3E8C1 /* FConnection.m */; }; - BCF33AB8F25C7F886910DABDDFF334D1 /* FOperationSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1545BEA2ADAD856AD2526AB9EEDD39 /* FOperationSource.m */; }; - BD2F9C5A86BEFFA37CB0DE1308DB8D9B /* weak_realm_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 60B34087ADF9E2187A1C509EB443DC08 /* weak_realm_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - BD54D3977DB4BC983C34B909EC2A10C5 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FFAA2ABC7DEDD6E364ED76C0FF88AE4 /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD88996CF2AAABB7A5687811D63EDA29 /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AAB0D800CC3AAA4CF2EDEBAE6E57F4 /* Realm.framework */; }; - BDBC14DD277B1E09F49091DB1AFA00B2 /* FIRMutableData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D63E653C0BB9F8E37E3A4D6ACA0523C /* FIRMutableData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BDE507BC224071B7E6D234DDAC75FEC8 /* SVIndefiniteAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF639014265922535577B76D7DD6554 /* SVIndefiniteAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE5C67A07E289FE1F9BE27335B159997 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39CD106DAA14CF78C23C7060CE05739E /* ParameterEncoding.swift */; }; - BE9FB5E8188E0B68DB277B09A06E79BA /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DBA4949E4537E73554B770BD9FCD696 /* ImagePrefetcher.swift */; }; - BF239A3D9E52FCD5BB59B78ECE4A3955 /* FirebaseAuthVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B07C1D3640F22A48DEC343240B8892 /* FirebaseAuthVersion.m */; }; - BF9BDDD69D5060066B745D6C5587C05D /* RLMSyncUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = B44A73D3ECBD0AA320DFAE8729245BE0 /* RLMSyncUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - C0530396661445F2888BA3CC4C332E44 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7F4B9219625D214F1B6B82D278C3EFC /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C05C424DDF36791C991BF3BD346C9A8B /* FirebaseAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E58F66E1475886462800C6EAC1AB058 /* FirebaseAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C07959692FAC25ADDBBB2F9B25A086F5 /* format.cc in Sources */ = {isa = PBXBuildFile; fileRef = 57D9077B48BC77A49623101CB4DE95F1 /* format.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - C082D72BC2DBD1E4862A8FFFC51B6AC2 /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 01DA5B8F3981011693888D2B0938CA00 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C09EA14ED805A5376E0927C66C363579 /* block.h in Headers */ = {isa = PBXBuildFile; fileRef = E42E40A46046AAEAB2CF43E6BE431B4D /* block.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0AC52263C7989D239B4E276677E81A1 /* when.m in Sources */ = {isa = PBXBuildFile; fileRef = B40B3D12787C2D8F3DB5985AB253258F /* when.m */; }; - C0BCC0ACADE61D6C32FB2FB6E3446D0D /* FIRAuthErrorUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = C2E64176AF730FA535211FD7CC87197F /* FIRAuthErrorUtils.m */; }; - C0E584A37B305EB1D166DFB20569C26B /* FIRUserMetadata_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 26A2509C55277C92F9535925A9167506 /* FIRUserMetadata_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C11BE4575083D0712E25FCCB957EFE4C /* FIRServerValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6554B57681363990CB506AE66ADDFFD8 /* FIRServerValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C156B12C47E4F1CB2A4CF118408351CB /* FPersistentConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = A28C8055B939C8A355918ACE46F7DCF3 /* FPersistentConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1B16EFBA4F0674E8A6D32AE3583B522 /* FIREmailAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D42BE6FB6E20A86A3704AEA15994D4B /* FIREmailAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1FD5C612AE5FF1FB8B3AEEE39DBB4B3 /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D3CE21281F234A7CC3F0C5655C24097 /* FIRApp.m */; }; - C22647CEB4A5978F4FB4C2392D4D1AD2 /* FChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B80A63CD2968247F06E00F9DB61A76E /* FChange.m */; }; - C25176A97C6A1D9AE4F473722DA73198 /* FEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CCB66A239E1C2ECAB01A381ECD1C729 /* FEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C30FD7951767EED3050B090B8EA3420C /* FTupleTSN.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DB7B79E357A7765895F6FB422938BE8 /* FTupleTSN.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C32C7FE70764DE37935F6A5D80CB17C7 /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54B6FE265FF633C4B985BC1BA1BC027D /* RequestModifier.swift */; }; - C38F9EAA47CE7CCD2D3CCD3C46A9070C /* FTransformedEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = E762147F2F13707B979FB6B2F3BB781F /* FTransformedEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3BBE34D529610CCC51DFB9906A15F16 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - C3D047930814AA1A7207079E0B174386 /* FAtomicNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = C2ED7ED48B42FBB3CAFB1411E9F35938 /* FAtomicNumber.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3D3D4012603FB3946CDC69D9F234319 /* FChildChangeAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = 76EF099F001B8227ACD7D720DF9D7897 /* FChildChangeAccumulator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3F6FFEAA9F1580C2145E12CC69C7593 /* FIRAuthGlobalWorkQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2097F01236A7B73A9D900E608AFE3A /* FIRAuthGlobalWorkQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C450BECB2B426D3AC130AF6BF116A581 /* FChange.h in Headers */ = {isa = PBXBuildFile; fileRef = FCF8AF39C9864784716336420A00B8D6 /* FChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C45501E96DE7AFFDCE93F103AB69A0AA /* FIRResetPasswordRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 797648B1E0D3A6066F994556F924BF1E /* FIRResetPasswordRequest.m */; }; - C54497646EEA586AFA5A2B8D454C6DFD /* version_edit.h in Headers */ = {isa = PBXBuildFile; fileRef = CCBFFB66381C8D0BCC92EF96CCE5A0F5 /* version_edit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C547137953719CFBC4979DF3B2083A6E /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 12E16B2872D6AB2B0E579D661F4C0713 /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5AC6892962C63826BA6796A87FFB8A2 /* FAckUserWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B2B42C046114BA0FE5525A81C338031 /* FAckUserWrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5E06DAEE5EFC75FD87B9424177150DF /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A00D0EED7F7F39883D5DEE42E84DCC1A /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5EBA8C53FB56169B055228DE189E264 /* RLMObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = B2DD1F797661A52FDEFF49CC71D986D2 /* RLMObjectStore.h */; }; - C5FD8ED3C140C4FDC839E3264FB25736 /* FIRVerifyPhoneNumberResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = E312064F9390389ECFA774881A27C239 /* FIRVerifyPhoneNumberResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C613E3AB27D226100446CD16B14A3D42 /* FIRAuthTokenResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 2093D30F15C065748FABFF4BA05E552D /* FIRAuthTokenResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C67184ADB62CE7B66A82752751AE28AF /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C1B13116923C2FCCD5A6CD8F138C0D /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C68C212F7F9E59544063D61029437CB1 /* NSData+SRB64Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD1C58110EB87B555D1286A9600FA31 /* NSData+SRB64Additions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A25A4B2402809148CC9ED9A8F144CBBB /* FMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = E070B50C219F0362825D7D9524B1EEFE /* FMerge.m */; }; + A29A90BFDCEF2744684BFB22982C98A6 /* work_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D6592970485F8F655D9CF7A424C8E735 /* work_queue.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + A2A6F71B727312BD45CC7A4AAD7B0AB7 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850C89F9188FF87678E74F3783CEAA50 /* NetworkReachabilityManager.swift */; }; + A2BD4D7A41A27330CB8674EB2625CC77 /* FTupleObjectNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E255080150BF442FABF48724E41239FA /* FTupleObjectNode.m */; }; + A2BF02FE06102FE692DA247C97812B97 /* FImmutableSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D702E515A27CF01ACC7748411B323A4 /* FImmutableSortedDictionary.m */; }; + A2FF26B161E442DF7DFB20C75604BB48 /* FLeafNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 362650F9E56450FD8BF4CD45E583431E /* FLeafNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A31558B3B3445DE2C02E7C2527EEEDE2 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC23F68D7DCD34CD236A1B5998B12AD6 /* Alamofire.framework */; }; + A3192E10530C0D91DD7D7A403DE1E53F /* FClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 528EDFE4FDC447F1BA0D26180ADD0D7F /* FClock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A4151F881DAB4651899F9E8F510DA531 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FB69BBAFD285F0522E82C573488DBFD /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; + A4724ED0201B76336EA5F9AC3135DFBF /* FIRAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B75114BC2BD572972C91A8CB9E116C60 /* FIRAuthProvider.m */; }; + A4753FE57CE56F2010E0B428789CB3EF /* FIRMutableData.m in Sources */ = {isa = PBXBuildFile; fileRef = 81CC21A6AB646F4422180E0373894A61 /* FIRMutableData.m */; }; + A543062562F99997510A2983AC405A50 /* FDataEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0444D8A27B25779CEAB828ACDE64BAF1 /* FDataEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A56499E874DA6BFD36D3E733028866F2 /* FLLRBEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 287F35AA416E82C14EC56D5D7EE2456B /* FLLRBEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5BC7B92676861B2F3C66CA0EAA57935 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 12B1627081E995F21A586C0E85F603A9 /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A5C086A939371902DFD4696360A260B1 /* RLMObjectStore.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 82B6B81212097CABC380F5F7C605BD02 /* RLMObjectStore.h */; }; + A61F2A706238F4E0AB4F96DDBE0CA880 /* RLMConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B094E3EC51E25F052BA9E2382D7605 /* RLMConstants.h */; }; + A64BA00ABE2C9B3A37D50B82B3BCB103 /* db_iter.h in Headers */ = {isa = PBXBuildFile; fileRef = A18A837D5E5A9549808F1347125AA090 /* db_iter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A69CD59AB50E01403A646479704F1792 /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57CF61C6EBE6F957C0A6AA2410460547 /* AxisBase.swift */; }; + A7564DC8C0EDE45BFAD22D9FA551E2CA /* RLMListBase.h in Headers */ = {isa = PBXBuildFile; fileRef = C0C36BFE9F8F94F4B9F0B593A4C6E4C6 /* RLMListBase.h */; }; + A7E5834A87CB7D350C24DACBFC1BA1D9 /* FIRTransactionResult.m in Sources */ = {isa = PBXBuildFile; fileRef = DB74BFD13F355F3BB311B7C64A76FBBB /* FIRTransactionResult.m */; }; + A8087054B60C4082589838D61DFE5A44 /* fbase64.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D87E2DAC9848D75EA38E31FD947BB5 /* fbase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A84DD32E0FA99D3D344F56795F21C370 /* RLMArray.h in Headers */ = {isa = PBXBuildFile; fileRef = D7333BA6FC2F09AF434AABBB50A768A3 /* RLMArray.h */; }; + A8A79840E81BFA3D8DCC29BE71F1AEC4 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A996DF9334688E455CD7353C30DCA2C /* KingfisherManager.swift */; }; + A935A5F8CCCB11099705B3153B39F1CA /* c.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6CE491E93382DA40AB4CB0BA9C8A7C41 /* c.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + A9D2A6547EE5F6532EF8D1F1870BF158 /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F0B108D02D31661E0205EE1A2B31AC /* CacheSerializer.swift */; }; + A9D54363CC7197558EEF6850CFE219A9 /* RLMMigration.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7E3C68A8338F859194C1124BEBDCB0A5 /* RLMMigration.h */; }; + A9E8FD4C2FB496170FF0BFC65356FE9C /* FTupleCallbackStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = CB5A1C3811AEF75D8E8F537513E72E03 /* FTupleCallbackStatus.m */; }; + A9EEEA7477981DEEBC72432DE9990A4B /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E412C3C35C8F506CC0DAF9C8CA69F6 /* Alamofire-dummy.m */; }; + A9FA33E73D383755E61F4A9DFF457E44 /* FNamedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C30AB285FB1E27391F35624231CAF69 /* FNamedNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA0B5B50DC571C6C0B39AA7C4A5F980F /* env_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 431A8F2A7438C9305A9D8C6D36C495B5 /* env_posix.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + AA0DD9F6660DA012BED616C76AEF89C3 /* FIREmailLinkSignInRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B3AB5BA442710676AEA53CF8C15DFA3 /* FIREmailLinkSignInRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA2CA4E5A3CF78A4D891166A10478B9C /* FIRGetOOBConfirmationCodeRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = EAF71C594340430806E39D9C938D9C33 /* FIRGetOOBConfirmationCodeRequest.m */; }; + AAA95586A8195713834B51F37A7F2CDA /* FIRAuthKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = CA2F7CC3E721CEFEF750B13F5555DCD5 /* FIRAuthKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AAB6307055DD02C93549A7D013EB9B5C /* env.h in Headers */ = {isa = PBXBuildFile; fileRef = EA097D93EB4F79569238F8C519B4EC51 /* env.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AABD173CF56B61852E4643AE5FC9D737 /* FMaxNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B432CAA766CF17D9CABEE0B7462B083 /* FMaxNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AAE057B69178AC146DFABBCAF7B39721 /* FIRAuthAppCredentialManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C759143D70A6473AD8FF9521C4502C /* FIRAuthAppCredentialManager.m */; }; + AAE31145808C8B6C763676FDF8FFFCEA /* RLMSyncSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = AA99CE8E6673012F7549400C8B2E9419 /* RLMSyncSubscription.h */; }; + AB46CB350172E081634454FD9E5C4117 /* FAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F35C5BBD2933B004BF1EDF9D6E02A70B /* FAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB56501BE479E580CE858A0E403A44CF /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = B192324D1875BCED7C83FC4525773E90 /* GTMSessionUploadFetcher.m */; }; + ABD39EAFA1768E0BBF1F7E83AD517BBE /* FStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E76EB4BCBF62A4F7F83D4708D243B248 /* FStringUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABE3789ACE881004249CB7EB8469070B /* Guarantee.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76D84C63622221E6419BA6E16155D78 /* Guarantee.swift */; }; + AC23C23DFCFDEDF16A63B8F52C23E62D /* FTupleBoolBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 016F4EFD29D57463E0529F36C204359D /* FTupleBoolBlock.m */; }; + AC51FABED87FA7E9453195A5A43E410C /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D183FE601881EA3EA1723A6A60827856 /* Promise.swift */; }; + AC6F39F1C4F636529D6269ABF83E2177 /* coding.cc in Sources */ = {isa = PBXBuildFile; fileRef = AAD9DC3E7D33B92E29567F9DD9956A4C /* coding.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + AC72E3E5A9ED9CCF9BB0654F6FE9F8AF /* Aliases.swift in Sources */ = {isa = PBXBuildFile; fileRef = D091BB87643304B1034E9FF5791C58BD /* Aliases.swift */; }; + AC87C9266ACAA0FA87CEF8E83C0569A6 /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383BD85CF714DAA8F61D7455906ADB3F /* CombinedChartRenderer.swift */; }; + AC9DBC374F87509902096C9BD7460244 /* FIRDatabaseConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = C6951C33D6394A62BA69340DEE879DE7 /* FIRDatabaseConfig.m */; }; + AC9FDD3467EC4E381E4359764DB6560F /* RLMResults.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 4C2204D4B7BAAE7C0283A04900A453A8 /* RLMResults.h */; }; + ACBF0C7E0D45A733515946C9D040A857 /* FIRDeleteAccountResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = CA5B28EA8EC8119650FB4878AE0FDECC /* FIRDeleteAccountResponse.m */; }; + ACF600C726DED4ECCE12CA80AD594F20 /* FIROAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A21D5B5371B5E7636CBA4BD83CA63E9 /* FIROAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACF818BB5D603726F2DAEF871BE7FA87 /* FPruneForest.h in Headers */ = {isa = PBXBuildFile; fileRef = DB268EE51269AD46437C65F33C5A4EA9 /* FPruneForest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD4A62CD5EAC42AAED2202C0E85C409C /* port_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 520BB36ACD9FFA8FCA515E8705745141 /* port_posix.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + ADD0A7D4873694805EAD32848441AFAD /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93762F97D5ED6B7950A565F65CD9CEE0 /* ChartDataEntryBase.swift */; }; + ADFE48CCF84F1BFB2B011FBD49EBF1E8 /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 60E45BAEB38F4980C0B6AD8AA6855E46 /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AE1EF48399533730D0066E04B22CA2D6 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892CA59B13478F06E097BEA9A8C170EA /* SessionManager.swift */; }; + AE66E1072E98D5EDBE047BC1EB2CCC39 /* FPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 73EE77F1500EDC920D3EB0A80643F425 /* FPath.m */; }; + AF4335697C7933BA632ACF1BDB4BE997 /* Results.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A38E7D7C3143EA1BC1A47DB34190AFA /* Results.swift */; }; + AF4ABC7B74E33FC53C01E73602C6F466 /* results.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C36124615A6FB62D8AEB16AE1D21B8CC /* results.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + AF7208E6743D2450FB0323B508E615B5 /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ED126BBB5AE4F23E031D69A6E6E38F2 /* SVProgressHUD.m */; }; + AFEB5B0FA845F196A2644B0C4AD5C0B4 /* RLMObjectBase_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 98E1D1FE20785A431DB1F1A409678D5C /* RLMObjectBase_Private.h */; }; + B07327CCD10323B5C30EFEA280191A12 /* FIRAuthSerialTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E773BDD27F0D7006A30D19CC668AEF /* FIRAuthSerialTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B074B490E31CC196AB9A3C91D9F28420 /* FIRAuthOperationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BE747726F4C08DBC004A12848155C35 /* FIRAuthOperationType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0A61A65076EE591506FE85707C0223D /* system_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 998F1D1684276A1E86539A5975908D88 /* system_configuration.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + B111C38ACBCDCC7F3025677B6B9E3B39 /* block_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = CD59542B0AA5CB88938E19C95138ABE9 /* block_builder.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + B1C494AB10C1AC3305493FD2B5A0B97F /* FImmutableSortedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = F07CC73F5FF404CE850436C15AE45CCC /* FImmutableSortedSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1ECD96706031AB7771C86FFC90A47F1 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90F3F298EC4F08FC7B7656C36536C85C /* Util.swift */; }; + B22A39875D35734A42322A71AEAFA82B /* FIREmailLinkSignInRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 064BFA305D3D77BC0D1830BA41858569 /* FIREmailLinkSignInRequest.m */; }; + B2887913555F5C7033C598997ACE05E5 /* FChildrenNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 711DFD2FE2B424741E88BB4E596C1229 /* FChildrenNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B28F6E392799BDC6481681EC77E3D602 /* RLMPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = D3A679ED21E151A6BFA4CA8AD8F4B5A1 /* RLMPlatform.h */; }; + B2D6BD6C64A6D800219C4CB956D344EC /* RLMAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = CF772156CD908D9723EC1AC67A65F983 /* RLMAccessor.h */; }; + B2E9E71DE1D27AB7ABD2A1D5531134BF /* FTupleUserCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C0FEC35A6418184C241C03F020A5E40 /* FTupleUserCallback.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B352D4623270F2D8A882772A7B654299 /* FIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = D38615B33B60544099B4605E2442A40B /* FIndex.m */; }; + B363B2414E5BD50E7F6C39B745C5F81D /* AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 6502C8871A6DABC7252760716E08A60F /* AnyPromise.m */; }; + B381B958EFB1A8BE2D793C17B273086E /* Catchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7EF2CE9127FE3E0A845CA0A0CA80C6 /* Catchable.swift */; }; + B3E70AF9B58B6D572E0B4F6C216786F0 /* arena.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5EB85DAF4F8597657CB9004635F334 /* arena.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B3EDD6F62870A895F03281B4CE0B9A91 /* FIRNoopAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FDA66C5596A9622CA9B7C57949A38C9 /* FIRNoopAuthTokenProvider.m */; }; + B457286593975FC40D455355602D8111 /* RLMSyncConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = DCB195E78149D6A42F4DB12D06BAFAEB /* RLMSyncConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + B488C81E194D8D2C6A5FEAC85AE1AE19 /* FIRSecureTokenService.h in Headers */ = {isa = PBXBuildFile; fileRef = 522DAB4D87CE1F09BDE1A65F15F2FBB1 /* FIRSecureTokenService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4C46703C14A3101A63F20182791550E /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BA13E1BC0E1942C73566C7FA929FF94 /* FIRBundleUtil.m */; }; + B4E270234B767FA450D8AE600C8BEF4D /* sync_permission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2210E1182B560036258B75812788793F /* sync_permission.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + B51C6B3D691E2511F72ADF63B6AF6E99 /* FIRReachabilityChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 434FF1E5321E6CE0C9EB8CF520D77DAA /* FIRReachabilityChecker.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B564B930C3B6CCFCC109ABF374B21CE6 /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAFD1DD6DE458FAFC1C264A4CD0B519 /* ImageModifier.swift */; }; + B58FF7576B1F9D4C5A97EABDFF1DB447 /* table_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = E3B53465250D3BD666A5547A90167ADF /* table_builder.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + B5C06A9E2E9333E2CE5ADCFCFBE195E9 /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B4EA3280F40FE0AB0FBF167DFE5697 /* BarLineScatterCandleBubbleRenderer.swift */; }; + B6017DB8F69AF1447F4DBA83A15D6601 /* FCancelEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C044F8C75D24171E753854F781D0C2 /* FCancelEvent.m */; }; + B622F92774261551C2329DDE4D4E2404 /* FSyncTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A8626383D0431644FFE8F46D508F77D /* FSyncTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6363D182BAF8C9BB5024586C4187BF1 /* RLMArray.mm in Sources */ = {isa = PBXBuildFile; fileRef = F210646CCCEB64FDB5E524228B7EB9BB /* RLMArray.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + B65FCF589DA398C3EFE0128064E510EC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D30E80723C26FFB3A12A0BDECA43BF3 /* MultipartFormData.swift */; }; + B6ABD44AB09F8811D1D62CE43DA5B3E9 /* RLMProperty_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E59A62C06B2C9F2B6C1B0236FA1B0750 /* RLMProperty_Private.h */; }; + B7251BCC063F1B5D357B31DDA9D3911F /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B105C9BADD74AEBC8AB2764E8391B7A5 /* PieRadarChartViewBase.swift */; }; + B76C902A16D68CC3444CA2C31167615B /* FUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = EA6C777DD124804241662EA4C09C34FA /* FUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7859DCC5C9A6703EE2D345D14BDD404 /* SortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EE3F1520FA3FB9C749D850C7E2B520B /* SortDescriptor.swift */; }; + B7FC69D3ACE5ECF99DE7BE0934080743 /* Realm-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 053BC13DDD4C01F359911BEDFFCB1818 /* Realm-dummy.m */; }; + B8A7B8DC1B0D4F13A5A20E8FBFF53299 /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 788C0E2205927E8A04F8DC86C8BEF339 /* FIRVersion.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B8D38FC933546061142AA1F0AF84C880 /* FIRSecureTokenResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A45C77AF49B6D0D51D4D3D0BA5882D57 /* FIRSecureTokenResponse.m */; }; + B8D68762B5ECF611DBB98221C97DEDF4 /* FWebSocketConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = B29E5643F6A2053B82EAB5E0EE16CFF0 /* FWebSocketConnection.m */; }; + B8E72F88D6404C31373B932965C610B2 /* FUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A2A87D0AA1590786E0E5D4AE98740F42 /* FUtilities.m */; }; + B8F9C632324A1399FBF7CAB7167613A5 /* FIRVerifyCustomTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E37B9A54C39CE0E0145C88BD3DDD3F /* FIRVerifyCustomTokenRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B924069CD75769E22765912C66A87BF3 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1E8F69E8187BDBC80E0F8FD873975CC /* Image.swift */; }; + B9E2A3DF455414E2BE8C54E50FF87A50 /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFC2D7DD17B284E6861E9F929F2E45FF /* YAxisRendererHorizontalBarChart.swift */; }; + BA2117BCECB8C53824A0A5BE4E5A35C2 /* FIRVerifyClientResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F21AAA9D6C94DEB06889483476FBB730 /* FIRVerifyClientResponse.m */; }; + BA3A9D2509E05835CBFBDD7C2654D3D6 /* FTupleSetIdPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 92688E0D3D7BF74B53C6FFAB522EE2E4 /* FTupleSetIdPath.m */; }; + BA4DF38E820FF6B40FFABF8B1BBCC615 /* Kingfisher.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F9DF31B5AC288EFC34E3949191A7C52 /* Kingfisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA81C05E0B5EBFFD6C6CE3514B3F2065 /* FIRGetProjectConfigResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E67AEFA46825634C26F1DFE38EAF96E /* FIRGetProjectConfigResponse.m */; }; + BAC17487B9F5E23847CE163F2868E06F /* FEventGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = B6EA5CC11C004A5AD734941C6991C78C /* FEventGenerator.m */; }; + BAD128EBCB80571A83B174F36BC070F4 /* FIRSecureTokenService.m in Sources */ = {isa = PBXBuildFile; fileRef = FDD65D82B30903266797AB26B18B1973 /* FIRSecureTokenService.m */; }; + BB015B2B6649BC2499C3C505A092E7E8 /* RLMResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = 67965BC8AD7532C6B432E803DEB4439E /* RLMResults.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + BB2CEEE801771BE50C0A1B636548F3F8 /* thread_annotations.h in Headers */ = {isa = PBXBuildFile; fileRef = C2862AF6402E3BAFA4949021603A6310 /* thread_annotations.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB9CC473ED99AE6ABF8B0A6F4F08321A /* FTupleUserCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 4179670FD71912E5B9D26CCEE8F37EC7 /* FTupleUserCallback.m */; }; + BBC5DF13B0556466C9FC06D9A620EFE9 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26BD96A6922E4DCAD8D864596F9E81C6 /* BubbleChartDataEntry.swift */; }; + BBE66B963B47047EC52CB0042A29E1D8 /* FIRSetAccountInfoResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = CCA690505615B2B18B5D01A172F2696E /* FIRSetAccountInfoResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BBEFE2F9CEB73DC7BD97FFA66A0D9D4F /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6632D07B62268908386AC138F7A39B9E /* Validation.swift */; }; + BC56F639C0AE988A7404E1F63C81863D /* FRepo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D938EB4D6C98B5A964DC2761E5E149A /* FRepo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC5C4DE29E6034D306BE8EEC0921D42D /* FParsedUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = AAD5864C01446FB069A13761DDF0EC7A /* FParsedUrl.m */; }; + BC6AD521A28404C58FB620B78C5CDF88 /* FIRIdentityToolkitRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D0DE4099A5592BBC2725C9A994F62051 /* FIRIdentityToolkitRequest.m */; }; + BC7F0688B8256FBF7C467493E6BB5169 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B86C85394B98DD6743DE904B7577E56 /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC88A6EDACA76FE1E5EC7ACFABAA0499 /* schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9EC0EB9F1A2B0401B210CB16F285E937 /* schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + BCC6DCF97771836DF3B3A5DE8F2929ED /* FConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = B370A04FDDC02FA784A3721908D1CD55 /* FConnection.m */; }; + BCCFE1827D22D9E859F4F83E59154DAC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + BCF33AB8F25C7F886910DABDDFF334D1 /* FOperationSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 460D3C961A1A8EDF95CAA7B40EBA41FB /* FOperationSource.m */; }; + BD111EC1D596F1DB4DB4348AFD2C9A58 /* PromiseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 09D867EECAC7257F6079603569A90232 /* PromiseKit-dummy.m */; }; + BD54D3977DB4BC983C34B909EC2A10C5 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4D058B8624C835308A4D74FDA6AB88 /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD7B00B2F65ECB9F95EF3CAA327B4B58 /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B6F4E71F3E662268B000FB6188BAD89 /* ChevronUpShapeRenderer.swift */; }; + BDBC14DD277B1E09F49091DB1AFA00B2 /* FIRMutableData.h in Headers */ = {isa = PBXBuildFile; fileRef = AB83029602BA522C9332382DB573B27D /* FIRMutableData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE5C67A07E289FE1F9BE27335B159997 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F40CBA44DC84F30307B1E535BB01C0B /* ParameterEncoding.swift */; }; + BE9FB5E8188E0B68DB277B09A06E79BA /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E211216D81C3386CC56C9765AB7CBDF9 /* ImagePrefetcher.swift */; }; + BF239A3D9E52FCD5BB59B78ECE4A3955 /* FirebaseAuthVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 293C7A983AE41C61AA2B460A3B6E9B28 /* FirebaseAuthVersion.m */; }; + BF5595703396846833EBEDFC58E902EF /* thread_safe_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABA858AFE0748454D151310D2B114251 /* thread_safe_reference.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + BF711F9FCDDC898433FB04664594E39F /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65EC6F0455439F1FCD49C7E81F3DDAC /* AnimatedMoveViewJob.swift */; }; + C032D98203BCD9F59A3E1211D9B1A936 /* UITableViewVibrantCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0878B61F4CC1F9C58C9FF195BA56C85 /* UITableViewVibrantCell.swift */; }; + C05C424DDF36791C991BF3BD346C9A8B /* FirebaseAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DAD8E2E266E90C1F2AFE8D84149897E /* FirebaseAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C07959692FAC25ADDBBB2F9B25A086F5 /* format.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FB7571887C1B0B1FB4A5D9112DBF223 /* format.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + C07B58D26F20913552F30AD7686D08F0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + C082D72BC2DBD1E4862A8FFFC51B6AC2 /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = BE8FC91B9BE981825B89D2A22737A2D2 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C09EA14ED805A5376E0927C66C363579 /* block.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EC58E2B8F7AA2D9E57176E74A476C5D /* block.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0BCC0ACADE61D6C32FB2FB6E3446D0D /* FIRAuthErrorUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DD0DE7989E802C0D14EE23A291A2322E /* FIRAuthErrorUtils.m */; }; + C0E584A37B305EB1D166DFB20569C26B /* FIRUserMetadata_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C465239CC40EA67F5314F2513FBC6BFA /* FIRUserMetadata_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C11BE4575083D0712E25FCCB957EFE4C /* FIRServerValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 46E25271D410A774F194F1F10C39DA7B /* FIRServerValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C136A4D878A7F03220827161FFD0436F /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A90BAB32C569EF81B985DA76391B4B /* DefaultValueFormatter.swift */; }; + C156B12C47E4F1CB2A4CF118408351CB /* FPersistentConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = C2DD1DF7A3FA1D772ECC96AD9E245F65 /* FPersistentConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1B16EFBA4F0674E8A6D32AE3583B522 /* FIREmailAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8052150797EF7003E18047A0AE00F0C5 /* FIREmailAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1DD9F380B9A5E2F13F0F34EAC8845D5 /* Pods-pocloud-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A8A5C31425BBA75A7B674379EC000AA8 /* Pods-pocloud-dummy.m */; }; + C1FD5C612AE5FF1FB8B3AEEE39DBB4B3 /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B08E8A1F22162556B7E880073BAACFD /* FIRApp.m */; }; + C22647CEB4A5978F4FB4C2392D4D1AD2 /* FChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 07FB6171E53CF3738BC9DEC1338741C6 /* FChange.m */; }; + C25176A97C6A1D9AE4F473722DA73198 /* FEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CCC91E1E92AEC4C530F1AE0956D1100 /* FEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C30FD7951767EED3050B090B8EA3420C /* FTupleTSN.h in Headers */ = {isa = PBXBuildFile; fileRef = CB43310D7F163BA38ABFE29881697321 /* FTupleTSN.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C32C7FE70764DE37935F6A5D80CB17C7 /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA0E304694370331B93C86691A008B /* RequestModifier.swift */; }; + C38F9EAA47CE7CCD2D3CCD3C46A9070C /* FTransformedEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8734C162176FD7FDC4BF6BA3FB495692 /* FTransformedEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3D047930814AA1A7207079E0B174386 /* FAtomicNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DFF4F552B983996A7FA6E20710FED8 /* FAtomicNumber.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3D3D4012603FB3946CDC69D9F234319 /* FChildChangeAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CCDB8ECA2E54160B580831DF1D5B80A /* FChildChangeAccumulator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3E6D035EE177A4DED6B9431BE72BE30 /* RLMListBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C0C36BFE9F8F94F4B9F0B593A4C6E4C6 /* RLMListBase.h */; }; + C3F6FFEAA9F1580C2145E12CC69C7593 /* FIRAuthGlobalWorkQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F0ACF7382F5D686B491846D9C1BCDB /* FIRAuthGlobalWorkQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C42C84BBCA3684DC26444CDD62C14034 /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2094731F48DB5E9C42E24E7B280C9467 /* PieHighlighter.swift */; }; + C42D0F4964E822FAE97322767D8D0CB6 /* collection_change_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D21D3EFEE79B2BCA4CB5DB1413C031AF /* collection_change_builder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + C443196BF0146EC946D8A3534F41D5A4 /* RLMMigration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 62A0B768F2064E7856A14C9777566E9A /* RLMMigration_Private.h */; }; + C44ABAEE96656B47C1A5E8A3319EC358 /* after.m in Sources */ = {isa = PBXBuildFile; fileRef = 22F6A6E6A8625C1034D78A2DD20B6BA0 /* after.m */; }; + C450BECB2B426D3AC130AF6BF116A581 /* FChange.h in Headers */ = {isa = PBXBuildFile; fileRef = A46A76226DFA3973A17EB6AEBE54A5D9 /* FChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C45501E96DE7AFFDCE93F103AB69A0AA /* FIRResetPasswordRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = EF8D79189693CA879E823A588A4D478C /* FIRResetPasswordRequest.m */; }; + C4AEF283B2A61E8D0E03C508E2E0884D /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BDC899AA4D8B7FCCD880ADD36E35139 /* CombinedChartView.swift */; }; + C54127087BD239F57436AC8A9B79BE81 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F2132A35DEEA2D49B89DCE4248093A9 /* ChartLimitLine.swift */; }; + C54497646EEA586AFA5A2B8D454C6DFD /* version_edit.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B0D83A863CC6B26F3B8953DE584165 /* version_edit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C547137953719CFBC4979DF3B2083A6E /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 188B8F3E19924A18B940243A1542DF64 /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5AC6892962C63826BA6796A87FFB8A2 /* FAckUserWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = E06EB00A4344BF2F2868A696D27FB88D /* FAckUserWrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5CFD17A4D316A68B2DB7D5F5D777A29 /* SwiftChart-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8452774B42ECFB83C55E5D4F4FF8A955 /* SwiftChart-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5E06DAEE5EFC75FD87B9424177150DF /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D6011E05F28E90CE441DAEB3CFF872 /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5FD8ED3C140C4FDC839E3264FB25736 /* FIRVerifyPhoneNumberResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = B3FF4FA01EE81F777C429E6A8BC14259 /* FIRVerifyPhoneNumberResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C613E3AB27D226100446CD16B14A3D42 /* FIRAuthTokenResult.h in Headers */ = {isa = PBXBuildFile; fileRef = EBD19FA459C832FDC87D5BC12252FA81 /* FIRAuthTokenResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C62EA7B82E16D8F0C343BC966A8E4F12 /* ThreadSafeReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B950344BA8FC126A292D3CA789AF2C2 /* ThreadSafeReference.swift */; }; + C635A40164B7240957763788406E9DDC /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4D52A25F128059A0CD5F8736854539 /* CombinedChartDataProvider.swift */; }; + C67184ADB62CE7B66A82752751AE28AF /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 723D831D9FDBD1773A736D67D7110811 /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C68C212F7F9E59544063D61029437CB1 /* NSData+SRB64Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = A38E291F87A700FFB9F257E74033C16A /* NSData+SRB64Additions.h */; settings = {ATTRIBUTES = (Project, ); }; }; C6FF1D264A91730D79EBC15A7DDA2CBC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - C70A8DDB12EDAF23972DA0A316663BD7 /* crc32c.h in Headers */ = {isa = PBXBuildFile; fileRef = 7913F86A702F9C8F85472BAEC81459A5 /* crc32c.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C723A74304A28912C98C04611D2A2F41 /* RLMRealmUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5022842F9E7F7976C98C10557A560F01 /* RLMRealmUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - C747154709AEE1A5130BB3866ACA5687 /* FIRAuth_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B889265B7A23CC582794297E02FCC5E /* FIRAuth_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7ABEACB53A953F03ACFA94C20C9FCBC /* filename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 0E09B6B7C23DF784C8949C2D5EB5534E /* filename.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - C848ABDBAC17DDEA230A5C8A643D789E /* FIRSignUpNewUserResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B60E1CB843A5DF4FB249D7914B75EA38 /* FIRSignUpNewUserResponse.m */; }; - C882486720E56C389B7B5940C7D4C7C2 /* RLMObjectBase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7DB1E54F31774781F5E7EA96A0E365 /* RLMObjectBase_Private.h */; }; - C888CAF254C5DC30EDCCC74640E9BD3A /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B76C34DAB2C4FAF6245ADBF3CC9BD14 /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C88B18F381EC7E5FC622EFC2586AFE0C /* FIRAuthAppCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = B54CEA68DC92AA00DD74F23E3F23B4C5 /* FIRAuthAppCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8A800D4E27711D9531B7BAF0A610E9B /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8308C19DB799F75509F860FE1407414 /* Resolver.swift */; }; - C92A8E7094DD8D148FE0765DC923037B /* SideMenu-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 114AACB449F70D301BC988FAB1A6ED51 /* SideMenu-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9F084A4147F5CACD28423926AA10B99 /* index_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1A16DA952DC63FA903DE6D330E5015E /* index_set.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - CA1F2293A739DCA6069FBD0A087D6A96 /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 22E9F3CFFCE3C10469284AF35E50D597 /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA2C1EBCF38A4433AE1BB92A1A4880F7 /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = AB5E6538AECFF5B077FB238B5106FF95 /* FIRVersion.m */; }; - CA3F6022128EABD87AAD296484911BDC /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DCA4497DF78553D1239B754708C2CB9 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CA81AA1B167660C37E639ED28B21F0D0 /* FIRGitHubAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = D6793BC75E6E62410B088D642B468B90 /* FIRGitHubAuthProvider.m */; }; - CA844C4C012A9D0AD0B7E1651A852CBD /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 60A348D6CFED1F1FE490C002476433E9 /* SVIndefiniteAnimatedView.m */; }; - CAA8189B6715A44B53C34034500E3858 /* FWriteRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = D287124397290FCDED128BD06946425C /* FWriteRecord.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB575ABAC529D4E99ABD8DE92D0CB16A /* FirebaseAuthVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F8918111252A1691EBEF519B9C8DDE6 /* FirebaseAuthVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CB607DD1586A5D90ACC69FCDD7E006D1 /* RLMRealm.mm in Sources */ = {isa = PBXBuildFile; fileRef = B203F1615EE524DC61D140C4A1C4FD38 /* RLMRealm.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - CB6D60925223897FFA2662667DF83E8A /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DC347A6ED7C92D386603D2735988B2E /* Response.swift */; }; - CB73CA3F2EDC826E26885F09AA623324 /* FTreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A1FF3997E9161B9290C7D1608B82DA0 /* FTreeNode.m */; }; - CB7AA1407C4C9F0D90056BE20F1577B3 /* FIRDeleteAccountResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 515315EF76AAE8BBC64BA7F9C3CD76A8 /* FIRDeleteAccountResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC658CAD555E3C1A2C28B1C22FEF836E /* RealmSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E19D6AC7CA5E9702F50748E38632183 /* RealmSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC76A6C9CA4CCF7A19EF91395F23F150 /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA0752F8DA780992400AD21AA5512D4 /* UIImage+ChameleonPrivate.m */; }; - CC7A053F0C1A267FEDD85BC46769C30E /* FIRGetAccountInfoRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F8D7C8A6C66377EB7E20B0EC617C56F /* FIRGetAccountInfoRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD8616CC0A2FC053F2AA57FC57DDFE87 /* log_reader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D06031E56C16D9BA725FDC59F92C4DE /* log_reader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD92585ECEF703D4B99E5902B3DF08DF /* FIRSecureTokenResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A0313D151CF5AED9251675316363A80C /* FIRSecureTokenResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CDACF8925682050278BBE7C4D8F3456B /* FIRRetryHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F1FE337DFE5384B74391B5ABFF41E34 /* FIRRetryHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE01B497321992131D627BEBB571D2AF /* FIRNetworkURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = CAB101BD0349A15D67E3E402F78CD62E /* FIRNetworkURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CE0383C0CBEF411EA721C5BBF0483128 /* FImmutableSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = BB07463EBFD38A5996816DF5F0B1BD2F /* FImmutableSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE0997FF7179BC70F12EDD9E37044D82 /* FIRAuthDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 073A52E2C21FF1D62C7F62E22229E27D /* FIRAuthDispatcher.m */; }; - CE22EE377E940754E0384BCA946FA1ED /* FConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 3164B469BD414382EA5E78E4DBB45513 /* FConstants.m */; }; - CE2E8B877175AA583514FDBA999ACC8F /* FIRAuthDataResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 99FFFBFE2E49EE854353112FEFE653EC /* FIRAuthDataResult.m */; }; - CE38861F1268294930C074FC3F807E55 /* ThreadHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3823BB85C260F0B5558755549E60251A /* ThreadHelper.swift */; }; - CE4D9ADB18580613CD5C8B9E06271712 /* mutexlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 31866ACC5E21CEE03E543BB6578BDC03 /* mutexlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE7DAB673BC5086278BB196C584BB83E /* FIRTwitterAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1BC4E4C1A06AD1BE9AC63866DE44F3 /* FIRTwitterAuthProvider.m */; }; - CE9F2FAE2831FAACF7A98F28A1C59A6D /* FIRAuthWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B51C7C857E5345B5976378CFA7B010B2 /* FIRAuthWebViewController.m */; }; - CEEB7C897409C08DF53289E307AB987C /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0C497181F13C716F7C4EBC2AAA343A6 /* String+MD5.swift */; }; - CEFEEB418A6775DB778A0AFEAEE38030 /* SVProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AA5D6181A6B4867451ED54A8080BA9B /* SVProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CFBD0E2AE8DB4DE7B3BD3D65E5438715 /* FPathIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = AE84A7609499770D18328ED3ACCFA098 /* FPathIndex.m */; }; - CFFD79E5D04B43EB97479DA0FC3C7AB9 /* FTupleOnDisconnect.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F7A37638CB3624A41208437A049DCB /* FTupleOnDisconnect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D0854D140FD18C01855ABE96F06C1CCD /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 77557DD69A4D0C3139C6B340667495AC /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D115F87C158364DA6177ED35700B0CA2 /* Realm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AA67CDDCDB4D0F4FDD2CD29BD96D01C7 /* Realm.h */; }; - D1575AAADDCEA395E3828EBAC2A772FA /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0FEF05B614A195E9DF14BD40E5A30B /* Box.swift */; }; - D1C81DD31F9C35C17A06E076667047A6 /* FSyncPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 11668C5DEA03D4F2BB6FF39E794BA093 /* FSyncPoint.m */; }; - D251E3B02C47CE5122036938617B3286 /* RLMOptionalBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 072CC0EFA6553B40B3C6AD14AD95CDF5 /* RLMOptionalBase.h */; }; - D2829FFFD441F294E02EF923BECBBA30 /* FTreeSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A32F0E945349D62441F3ADBE859017 /* FTreeSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2922E0707B13B40D87A03255340D13B /* testutil.cc in Sources */ = {isa = PBXBuildFile; fileRef = B9AD49071C4F923C790D340FAE15064A /* testutil.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - D2ED0AF6C6C1EF809C9079E364F7D68F /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = DF9D43AFDB5C6F43CC096559CB2BDC2F /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3507AD136BDFD219CF96005FA2762CD /* list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FBABB0B0834F4086D311AE5C7DB67 /* list.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - D352E39416F2B51AAB843F85D264D88A /* FIRAuthWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = A25E8BC716B7E4643F55FCF77E563DCD /* FIRAuthWebView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D37447352A19B729260CC336BE9551A4 /* RLMObjectSchema_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F7453E0EFD2ADC36B38779BFF40F992E /* RLMObjectSchema_Private.h */; }; - D3F7E494E85A24369DB03FEF60E8A839 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = D57D11057021C3E5C37A12FF04539DF4 /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3FD91F82E845C1BADE57AAF83B6327E /* RLMSyncManager_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 89F27B0980DDE5BD783531CF77807A73 /* RLMSyncManager_Private.h */; }; - D437740C5E94C79E4E2E6804724D5281 /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6764E93AE1777DD4865F3F56E035455B /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D44D0D23A3CCA6867940920582C7089E /* network_reachability_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E898E5D1BA5EA8F89D088FAF791C281 /* network_reachability_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - D48BA0E8158944F73B836C85B314AD69 /* FIRVerifyPhoneNumberResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 528BC4AA27400716710899BC26508C5A /* FIRVerifyPhoneNumberResponse.m */; }; - D49BDA57E23F2D757D84996E70ABD7FC /* FLevelDBStorageEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 4199CB4345C0D7BDF479307A0449F1EF /* FLevelDBStorageEngine.m */; }; - D50B182A4DFF40544E60F196CC22346B /* dispatch_promise.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A3EC566AB99F6C73103EC88769C0767 /* dispatch_promise.m */; }; - D51145F0A8B028EB3091357574F6F57F /* FViewCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E2EF1FC87C693AD40D02F7164BC01D9 /* FViewCache.m */; }; - D5F849F3AE1CFD2E2F747B83D1110ED4 /* FIRDatabaseConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C1BC562131E66DA3F567B37BB58B4A8 /* FIRDatabaseConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6003C2B3E2E320A64BD72DA6A27B4A4 /* FLimitedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B5D05CE22BF8AE1975019B14E5FB38B /* FLimitedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D68B3AB22F9E8257C762B517AEFA286B /* log_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 20B4D9D0B60E5161CCF10BC3D1E0F0F1 /* log_writer.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - D73A79CEC85833C565B1364BA0AC2766 /* FIRAuthBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = B301C59E5D1D1AA6BBFDB80E69FBA831 /* FIRAuthBackend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D75E588D278E2741F2D581C5C3961167 /* RLMUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 640A0DADA9E8195F23753A3D53B9BDE4 /* RLMUpdateChecker.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - D81E3E88AC28D415F7E591350A3476B2 /* FIRUserInfoImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B26CD3AE15CAFA6F3AA2D461C1A96F4 /* FIRUserInfoImpl.m */; }; - D83CE71F0FDCCE799E3FE6C2DB9A2B8A /* FEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CA2808E8E1F2C6D7A19D5C2A280F43E /* FEmptyNode.m */; }; - D8507AEF94F26D7345178A54256722DA /* FirebaseDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C33855C45FA18D4FE14D04003AD87671 /* FirebaseDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D85E1D5BB5C631EB8A01E68BB454C199 /* FIRSignUpNewUserRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = E807046A165001F1535378F0F5B118D0 /* FIRSignUpNewUserRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D8F261F8A45C34CBB2FF0E90668C96A1 /* FIRGoogleAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DADFF37B1C1CC93D9F77D3FF6335047 /* FIRGoogleAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D900EBA590BC50BE11096B6552B098E7 /* FIRSignUpNewUserResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5741B681D7961787830A7178DC5BE854 /* FIRSignUpNewUserResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D91379AB1A48A920A7DB6FF24AFC2613 /* FIndexedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8EDCC8327F45F2337D1751B6527A39 /* FIndexedFilter.m */; }; - D9594E36AE5792CE1D5D3C02291A5795 /* options.cc in Sources */ = {isa = PBXBuildFile; fileRef = 825761CCB49BEA007AA06F02FCCE907D /* options.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - D95E06F25144131DA98A78BBF6BCDB44 /* RLMSyncUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = A944252BCA5D3D9744756FB9821C97B2 /* RLMSyncUtil.h */; }; - D97FCF4447D881820BE97D09F30D3926 /* RLMSyncSession.mm in Sources */ = {isa = PBXBuildFile; fileRef = 261972D03F90C17872EEEF9379ADB54E /* RLMSyncSession.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - D9E259CADAB4F6DE9AADE6084C0B319E /* FIRResetPasswordResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F3D138B8787D82CFEF0F467425F0C0A7 /* FIRResetPasswordResponse.m */; }; - DA2AC0AAA81893849A07CE69067318B0 /* FViewProcessorResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A0B75010E7D217156712DACB92C96A /* FViewProcessorResult.m */; }; - DA502DD67B28D53911DCC73A2F08BB27 /* SideMenuTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7BC07DE3D0650ED280F57F67EC1995 /* SideMenuTransition.swift */; }; - DA7A5ECA4C0B39776007BE89B99227EF /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BA71F18701F565C90D0804B16EE5F84 /* ImageDownloader.swift */; }; - DA8A28D4D68472CEAAEA8AA47AFA9DF3 /* FImmutableSortedSet.m in Sources */ = {isa = PBXBuildFile; fileRef = AC81A7F4FB9112E5DDB4EB8457BA9324 /* FImmutableSortedSet.m */; }; - DB10F11752D36FD3F886A24E4CAE59CE /* RLMRealm.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AD1430AEFB88002077F297A1D31604D /* RLMRealm.h */; }; - DB4385C99B72F287DB7C8548D81D5664 /* FSyncPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = CA360EC2133EBE3681DE9ED3AC9359B0 /* FSyncPoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB4C8CBE5BD2159632235A8DA6D3107B /* collection_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 58967CC9171FE7B9F5617475E12061AF /* collection_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - DC457AC426E743A4985078FCA31BB406 /* RLMRealm_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F6DFBD150A3B56A826609F05027EBF2 /* RLMRealm_Private.h */; }; - DC7299565478D9AC30C5E6F0F283A586 /* filter_block.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9C6EEEA8B6E6845C85916F0B2DB5D00A /* filter_block.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - DCD7B03F11EAA6E946BBEA0095155317 /* hang.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ACCB7C8249C4A4459C1C7B6AE74B5ED /* hang.m */; }; - DD5FE14CFBE0E796D2C9C7D289292B9E /* Alamofire+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF18DB9AB29349185B333DDFC25DFBE8 /* Alamofire+Promise.swift */; }; - DD91C08B7263174ABBD55402E09383FD /* FIRActionCodeSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 14849BA50E7E3EEA53D6C3ED20626839 /* FIRActionCodeSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C70A8DDB12EDAF23972DA0A316663BD7 /* crc32c.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C27A66A466D7FFCB2A215950F19AAB0 /* crc32c.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C747154709AEE1A5130BB3866ACA5687 /* FIRAuth_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B37ACA86A2EF1B394AFCC2FCBCFD57ED /* FIRAuth_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7ABEACB53A953F03ACFA94C20C9FCBC /* filename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1BD7435F5F0250F9652A873A7AC42563 /* filename.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + C7C871FDCA5DB59FCA6D79C3E40D31F8 /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA0327F03BFD9DCEDF9B55C82009731F /* ChartDataSet.swift */; }; + C848ABDBAC17DDEA230A5C8A643D789E /* FIRSignUpNewUserResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A1078A283A02F54A3A353E950AD15443 /* FIRSignUpNewUserResponse.m */; }; + C888CAF254C5DC30EDCCC74640E9BD3A /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = AE126089164A76E4AFE1E11780270A0B /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C88B18F381EC7E5FC622EFC2586AFE0C /* FIRAuthAppCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 2212B2E5596BBBAFF0595D2AF702C7E7 /* FIRAuthAppCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C8EC913F45D98180007B34C46A351CAF /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A59FB51DA1BCED1B41485FC9E165AF9 /* Platform.swift */; }; + C9A3D62A0A9C8BED619A3F3479A18964 /* SVRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA851D335F85D8D2CD2D8F1E97396BDE /* SVRadialGradientLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9DB89D817C2F4199CD9FAF7032F43E5 /* RLMThreadSafeReference.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C2116FCC7B75EC60A136A777856980B9 /* RLMThreadSafeReference.h */; }; + CA1F2293A739DCA6069FBD0A087D6A96 /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F737BE1BCBCB6589CD1E7F034A6C61C8 /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA2C1EBCF38A4433AE1BB92A1A4880F7 /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B7568273FEE14BD1E7D80B89DD42B152 /* FIRVersion.m */; }; + CA3C2E825B627B0E19297606C239146C /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77D387360DE7045C51A1E141AB6CDE09 /* IBarChartDataSet.swift */; }; + CA3F6022128EABD87AAD296484911BDC /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = A7330A0B6A5E8B00A1423BD470BC8857 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CA620B910430E64ED2640CE1E8D00218 /* placeholder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BE3625CD02B45E7A52596710D14901E /* placeholder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + CA81AA1B167660C37E639ED28B21F0D0 /* FIRGitHubAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = E3128E68EB45CC50FB2EA91D87A81F3F /* FIRGitHubAuthProvider.m */; }; + CA996D32F8624A9BF65F142068FD62D5 /* RLMPlatform.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D3A679ED21E151A6BFA4CA8AD8F4B5A1 /* RLMPlatform.h */; }; + CAA8189B6715A44B53C34034500E3858 /* FWriteRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = CF10194636462F103D40226E0D9F68A7 /* FWriteRecord.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAB0A258495DEABD4A2BF5E9C7FFF9CE /* RLMProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5E17945DA126F74CD125B86CAEDD995 /* RLMProperty.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + CB22616E397605733EF48764C6AA0974 /* list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3737B67C2FBF160C0F95ABA8B4F3DB50 /* list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + CB575ABAC529D4E99ABD8DE92D0CB16A /* FirebaseAuthVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = A80450F729547BBDEAED8CBCA1E06F48 /* FirebaseAuthVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CB6D60925223897FFA2662667DF83E8A /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 280A7778B9DD0C0A6F6D11AD9BEB2B6F /* Response.swift */; }; + CB73CA3F2EDC826E26885F09AA623324 /* FTreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 232B22E07A6BC74BA295F2C97C41A5AA /* FTreeNode.m */; }; + CB7AA1407C4C9F0D90056BE20F1577B3 /* FIRDeleteAccountResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = E4133A311D0FB64D2AD4B9F49E3259F8 /* FIRDeleteAccountResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC2D6D87EF9DB614AF3DB177596937F9 /* RLMSyncManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E7325D090D50E37131B7FBF3667C45D /* RLMSyncManager.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + CC76A6C9CA4CCF7A19EF91395F23F150 /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E14DB3EC12C588CD8998834E8254B81 /* UIImage+ChameleonPrivate.m */; }; + CC7A053F0C1A267FEDD85BC46769C30E /* FIRGetAccountInfoRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D8A9C1D55D198A39CFF4C84B85FEC4EE /* FIRGetAccountInfoRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD1DD0DC5590457595EEA3117F430097 /* RLMObjectBase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 98E1D1FE20785A431DB1F1A409678D5C /* RLMObjectBase_Private.h */; }; + CD8616CC0A2FC053F2AA57FC57DDFE87 /* log_reader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B4BCAD8FD3A9F982DC589D5471C8F6E /* log_reader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD92585ECEF703D4B99E5902B3DF08DF /* FIRSecureTokenResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 824F6D873FAAFD885E3A2C085BC79AD4 /* FIRSecureTokenResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CDACF8925682050278BBE7C4D8F3456B /* FIRRetryHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = DE087804912A4BCB19C1BB22EBA1F44F /* FIRRetryHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE01B497321992131D627BEBB571D2AF /* FIRNetworkURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBBFB9164F3142B4A51D3D6F2AA60F4 /* FIRNetworkURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CE0383C0CBEF411EA721C5BBF0483128 /* FImmutableSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 118C5C1C8CB52ADF89DE45F265E1F838 /* FImmutableSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE0997FF7179BC70F12EDD9E37044D82 /* FIRAuthDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D79854F623E3F02E4FBFC6DB18E826C7 /* FIRAuthDispatcher.m */; }; + CE22EE377E940754E0384BCA946FA1ED /* FConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FC9DD5792A6E971BF0253FDAE139DD25 /* FConstants.m */; }; + CE2E8B877175AA583514FDBA999ACC8F /* FIRAuthDataResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 850E23D92FFA2683BF6D166F4B989B95 /* FIRAuthDataResult.m */; }; + CE38861F1268294930C074FC3F807E55 /* ThreadHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC412FFF86FE105B4DD03B8DB3DA8689 /* ThreadHelper.swift */; }; + CE4D9ADB18580613CD5C8B9E06271712 /* mutexlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 04522968653053DCC25E6277865EF474 /* mutexlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE7DAB673BC5086278BB196C584BB83E /* FIRTwitterAuthProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = DC1B54C03365E9EBA752E0DC5E534766 /* FIRTwitterAuthProvider.m */; }; + CE8D59281ED15FC18FE6CF0594B3533D /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2CFB08B219E2306E08BE6B95799291 /* Range.swift */; }; + CE9F2FAE2831FAACF7A98F28A1C59A6D /* FIRAuthWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 810A10450ECFA0D3FFDF555F29BC5782 /* FIRAuthWebViewController.m */; }; + CEEB7C897409C08DF53289E307AB987C /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 464EF491A012E2A9F730BABE744586F8 /* String+MD5.swift */; }; + CF29294314CA7C1104D1DBDA7E006D34 /* external_commit_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 891405B2B88EE4E540AF70CE9C20089C /* external_commit_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + CFBD0E2AE8DB4DE7B3BD3D65E5438715 /* FPathIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = E064CCF1C6E56D95FA19C00293E43572 /* FPathIndex.m */; }; + CFF63FF5AC0F8479FA17DC25FB7A52BF /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 560F3F9733DA7864B7349F6BC6B51708 /* Configuration.swift */; }; + CFFD79E5D04B43EB97479DA0FC3C7AB9 /* FTupleOnDisconnect.h in Headers */ = {isa = PBXBuildFile; fileRef = AD0B5F01066B2383DBD408279D73DCF4 /* FTupleOnDisconnect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0175B3E6756AA485FEB95E4444CAF7B /* RLMObjectBase.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A3F41AC1060BEC0F8FFF9670D0AE6838 /* RLMObjectBase.h */; }; + D0854D140FD18C01855ABE96F06C1CCD /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1184EAEEC060394B21FE215643CBB29D /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0D4C7A089C8F578251C724DAF14A449 /* RLMObjectBase_Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C3CCD25881233655EC34CC8FC36927A /* RLMObjectBase_Dynamic.h */; }; + D1575AAADDCEA395E3828EBAC2A772FA /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = B127B0D183DA160E8F3B178A61E713A1 /* Box.swift */; }; + D15FDA74C88E47EAD68B1A6F30E11966 /* RLMObjectSchema.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 041186F74B1C4AEC7DE643D8D7F780F8 /* RLMObjectSchema.h */; }; + D1C81DD31F9C35C17A06E076667047A6 /* FSyncPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 43A9EBC2EA34C42D100979AD4F05F516 /* FSyncPoint.m */; }; + D1E5B2726DEDEF589D0DCFDAC100E7E5 /* SVProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA0D432FF6E0BC9F68AD5F03713ED69 /* SVProgressHUD-dummy.m */; }; + D2829FFFD441F294E02EF923BECBBA30 /* FTreeSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = DFA920CB71D6C3CA77AEA3BEF13D02A4 /* FTreeSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2922E0707B13B40D87A03255340D13B /* testutil.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4CB9F1B76B46264590D8E287CF9A261A /* testutil.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + D2BDAB02A9525421303C75FF9A2BD5DA /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 465C6DB6F98BC384E2736A18E50EA068 /* LineChartView.swift */; }; + D2ED0AF6C6C1EF809C9079E364F7D68F /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = A8CB66F4C4265D6CAC15AF6C79BBDDC5 /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D352E39416F2B51AAB843F85D264D88A /* FIRAuthWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BBA6B9BB3015E87BD31D16CC861DDA4 /* FIRAuthWebView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D35653116BC9D9386ABBF195A3092996 /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 046C707F9E1CEF2E1FF457BA0B2A067D /* LineChartDataProvider.swift */; }; + D3E4C09B03E95D37D671528F27CB1613 /* network_reachability_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 197CB3CBEBBD2E12576E0B5154D5F92E /* network_reachability_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + D3F7E494E85A24369DB03FEF60E8A839 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 9541E6B4336E92C5C49A3201A3DFDE7B /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D437740C5E94C79E4E2E6804724D5281 /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = 366D8A8E2FF58285B0186633F54F719C /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D44A3BB9FE8AE0048939A2A851E438AD /* transact_log_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7120604DFE5DF6ACB163A261DE13C64 /* transact_log_handler.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + D48BA0E8158944F73B836C85B314AD69 /* FIRVerifyPhoneNumberResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 17AA6BE41ACCDF37C985CE899BDE6ADC /* FIRVerifyPhoneNumberResponse.m */; }; + D4990EFFED9568CBDA1D220DB47B2C07 /* sync_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ACDFC08E51E546A5F494211E30EC0B74 /* sync_file.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + D49BDA57E23F2D757D84996E70ABD7FC /* FLevelDBStorageEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = ED25B59214967FE279B4715D47C53229 /* FLevelDBStorageEngine.m */; }; + D51145F0A8B028EB3091357574F6F57F /* FViewCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 097EB8A0D21FC005ED36D789FBBA6873 /* FViewCache.m */; }; + D5C99BB23C97A332BC297B5965B781A4 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F85AC7E2B7638C7A4675FE8645C9566 /* CombinedHighlighter.swift */; }; + D5F849F3AE1CFD2E2F747B83D1110ED4 /* FIRDatabaseConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 558FC549A76CA0190F89A7A432101B05 /* FIRDatabaseConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6003C2B3E2E320A64BD72DA6A27B4A4 /* FLimitedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 10243194FB421B2207E4E7CFEA42DD5F /* FLimitedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D658A6228F9F4B64989F355FECCF5BF5 /* Realm.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7612B8886297ECA57B9853F437A7F196 /* Realm.h */; }; + D68B3AB22F9E8257C762B517AEFA286B /* log_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = B2BDA85AA0F54F28FDC05220221E20B1 /* log_writer.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + D6C665FF89DA8E66F749383EFC4620A2 /* RLMSyncUtil_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 8888DC66E10879CC9EDB6F60DD99AF13 /* RLMSyncUtil_Private.h */; }; + D70AC4ADBC1784237470DF649F33FBCD /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D067E124A21DE5D53EDB493E256CEE /* LegendRenderer.swift */; }; + D72F84B50637811140165357EEB305A1 /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5B69AB2453A073F8510BFFCDBE55E9F /* PieChartView.swift */; }; + D73A79CEC85833C565B1364BA0AC2766 /* FIRAuthBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF123F105531FD9F000814A28719AC6 /* FIRAuthBackend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D7816F27846D38F06CEB67CAA85A4460 /* RLMAccessor.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = CF772156CD908D9723EC1AC67A65F983 /* RLMAccessor.h */; }; + D81E3E88AC28D415F7E591350A3476B2 /* FIRUserInfoImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 6904D4E404DA009AC64EE44664F92516 /* FIRUserInfoImpl.m */; }; + D83CE71F0FDCCE799E3FE6C2DB9A2B8A /* FEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF2EF0668BE38CC1D6E516827CF5037 /* FEmptyNode.m */; }; + D840D17C17F3A69465AF33150B556B64 /* RLMObject.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F68EED2313969991AF9FC6F620CECC42 /* RLMObject.h */; }; + D8507AEF94F26D7345178A54256722DA /* FirebaseDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BF77D591207B5470F262B46F4B22B0 /* FirebaseDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D85E1D5BB5C631EB8A01E68BB454C199 /* FIRSignUpNewUserRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = FE32373C2B36D33767DBC246ABFBD3FD /* FIRSignUpNewUserRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8F261F8A45C34CBB2FF0E90668C96A1 /* FIRGoogleAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = BACD5A2CAE91B66A84A73052D4573B2F /* FIRGoogleAuthCredential.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D900EBA590BC50BE11096B6552B098E7 /* FIRSignUpNewUserResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = E0E1301557F34BE04CB001D327503599 /* FIRSignUpNewUserResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D91379AB1A48A920A7DB6FF24AFC2613 /* FIndexedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F099B740609AB599E6284B793EB85E5 /* FIndexedFilter.m */; }; + D9243CF0D41EEE51E01B590DE41C8DC3 /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E0D1163910E27D230F1CC62944F059 /* ViewPortHandler.swift */; }; + D9594E36AE5792CE1D5D3C02291A5795 /* options.cc in Sources */ = {isa = PBXBuildFile; fileRef = 495AEED16A11482422DFDC46FB1D420D /* options.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + D9E259CADAB4F6DE9AADE6084C0B319E /* FIRResetPasswordResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3089385BC493F2C6B225BFCFD6D072F8 /* FIRResetPasswordResponse.m */; }; + DA2AC0AAA81893849A07CE69067318B0 /* FViewProcessorResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F3E7852BF6DED7418C374015298907E /* FViewProcessorResult.m */; }; + DA7A5ECA4C0B39776007BE89B99227EF /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC18A9A93FCF03EB4C6C1EBFB3A585D /* ImageDownloader.swift */; }; + DA8A28D4D68472CEAAEA8AA47AFA9DF3 /* FImmutableSortedSet.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C03A08FBA9AE8AAFA947AD2092F07A /* FImmutableSortedSet.m */; }; + DB4385C99B72F287DB7C8548D81D5664 /* FSyncPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B6785D9FB4E71F7B81001741D543AD2 /* FSyncPoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB5A17947A918F9726EC32008524A936 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5834E9F628118227FC3B6BA690DFFF /* MoveViewJob.swift */; }; + DBCC21237D99AA5FF9696B5AA8D228C1 /* UISideMenuNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBBD8B0EFD47C2DD5440F393202C03D1 /* UISideMenuNavigationController.swift */; }; + DC3D84DA4F6D53D267AD52A1E82009A5 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C58BDE5B7D5777D539C0978DC434585 /* ILineChartDataSet.swift */; }; + DC6292FD16D3A68DA26D7110AB8DE316 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669C9CDAFC6C882827F53860BE3D2A29 /* ChartAnimationEasing.swift */; }; + DC7299565478D9AC30C5E6F0F283A586 /* filter_block.cc in Sources */ = {isa = PBXBuildFile; fileRef = D01D33E1465E3733B2B3B88C20E4EA30 /* filter_block.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + DCBAFF3CE02B5C32DDE0EBA4927EBAA1 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14EA722EE21B995732296D7822CCE102 /* ScatterChartView.swift */; }; + DCF4AB22285B8C3A5127705D7F8DCB21 /* fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = C053FF3799C9807E0F22F3EC445CF59B /* fwd.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD142F02377F5E3B0EB7C5A94A756F66 /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA8FDBAAA10EBA2BF4F4B9E67B306886 /* IRadarChartDataSet.swift */; }; + DD394F12DD886AEB9E328301962CACF2 /* SwiftChart-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2569C5D166871F0F359DDD5AB060C79D /* SwiftChart-dummy.m */; }; + DD91C08B7263174ABBD55402E09383FD /* FIRActionCodeSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 851203D593E01F116B920E3E8051D0F7 /* FIRActionCodeSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; DD9618E6B204442AF995305203EA6A35 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD652DFA7B9433714A03ACD1A3893F8A /* SystemConfiguration.framework */; }; - DD9F8D9B9F3185717820F0B34FBEF86A /* FIRDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EFD4D1CBB9EDBC363742620BADED297 /* FIRDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE3804346D5AC52B2A3CBA959C23F088 /* FEventRaiser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC81608667CC5841981197E2B59D6F3 /* FEventRaiser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE985695F875FF7966A2A4EA4A172807 /* version_edit.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1CF2F0A013889808BB697EF589C270E2 /* version_edit.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - DF0C0953538534C62437B1A3D56616A3 /* FIRAuthRequestConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2180E395070CBCD3CC25B3C56661CD6A /* FIRAuthRequestConfiguration.m */; }; - DF5895D4BED9263ED165DC4FEADDA360 /* FWebSocketConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BC2D24DEB60661E4AB229DF73A489CA /* FWebSocketConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFC5B94918E5A17185B32BB4992428A1 /* RLMConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6459ED0790D6ED01E1D9C3474BD712A6 /* RLMConstants.h */; }; - E035175CF4C77707C51D7C8482D4D312 /* SVProgressAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A2BDE296D8DDD93BA5BDD6A21AA3E37 /* SVProgressAnimatedView.m */; }; - E045B0B7F083BBF5C5DDEBD5FF2F6D44 /* RLMSyncUtil_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = CDC8CF1BB201AB7E004BDC7D1A04BC88 /* RLMSyncUtil_Private.h */; }; - E11E884E03D5234B68F9B99B70DAF1AB /* FIRTwitterAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C775F7136F0DE7AC48F0E20DC951818 /* FIRTwitterAuthCredential.m */; }; - E125940AA8E59969535E41467A2D1F75 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CFD9C5B4E24099B87D18EF99B785C958 /* UIKit.framework */; }; - E181395E73163EB702FCE9A21403D67B /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ACBB2A3DD950E04C6B1FCD9F1DC108B /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1AF9702A6C7E7C5042DCD9421534EAB /* FIRGetProjectConfigRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = FD4ADAA2A64DF5BD1BDA33ABED0DA53E /* FIRGetProjectConfigRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1F16EBAC60A40383252F90286FB874F /* FIRAuthDataResult_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 767E4C2BF6AE88347EDE51469D7B2069 /* FIRAuthDataResult_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E21DEBC819E22EDE912D5DFF61C0C973 /* collection_notifications.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75218D68233C400F1AAC882CD516F41A /* collection_notifications.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - E222DDAF7CA5E34E1C3FCD953E8B1978 /* FTupleBoolBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = D91D0804446ED6E038CF4AF95C2E14F1 /* FTupleBoolBlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E29E5FF8047955E70A0F659B4834D414 /* sync_session.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A21D65008049DD151689EF9F5395381 /* sync_session.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - E38E5B2BDB3CCCA6E7BB304EF30792BD /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 022F7A2E011A1E1354FE0BDC21A7CD66 /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E414D863CA6DE727679476B85A46D37A /* binding_callback_thread_observer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D2171D98CCD2ECA9A0FB611E88B7FC79 /* binding_callback_thread_observer.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - E4168D844792F9589220022C9BE1E435 /* FCachePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C731AA8B0C2C85C48B5BBC71380CA34 /* FCachePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E435A4CE6ED2900A63CD86D0D175609C /* FChildChangeAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = 04274B2D193F1C3402EFB98EA7D21A6C /* FChildChangeAccumulator.m */; }; - E47F69731DD6070B8FAB237BB65CF5CA /* Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 737B0B8BB170869321A0C8168842696C /* Sync.swift */; }; - E48635B07F123B77DE95276888D8475C /* format.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D95573EC44BD0D72B1330888525CC8 /* format.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5455F0236936CCD1F2FE548D11A17EB /* FIRAuthUserDefaultsStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = E5BAFCB8CC217BA94F66BDDB8BC61AC4 /* FIRAuthUserDefaultsStorage.m */; }; + DD9F8D9B9F3185717820F0B34FBEF86A /* FIRDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BD4D9A43441A9345D06FADC12FCD86D /* FIRDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDEDBC3E9C1544066B1FF710DD7420EC /* RLMRealmConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0BEB6B309722C82FF0BC701A8E937ED8 /* RLMRealmConfiguration.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + DE3804346D5AC52B2A3CBA959C23F088 /* FEventRaiser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E6B7CC96CD5AA76DD12A439130B6611 /* FEventRaiser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE8201138BC27360623DED5E33DB09F7 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E56BFB651EAAB7A87E89B54852D0345E /* ScatterChartRenderer.swift */; }; + DE985695F875FF7966A2A4EA4A172807 /* version_edit.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC43C20083FD29C4BA5E6007413C904 /* version_edit.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + DF0C0953538534C62437B1A3D56616A3 /* FIRAuthRequestConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = A8EDCEA43EF83A121FF9794EA8F3BE5B /* FIRAuthRequestConfiguration.m */; }; + DF5895D4BED9263ED165DC4FEADDA360 /* FWebSocketConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E5FE37307F3DA32A61193CA00BB422BA /* FWebSocketConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E00847E0466E3AD79DAAA2ADF3B39EDE /* AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = D08AD131AF3ECD12EF2CD53BACDB1040 /* AnyPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E06C11517CF5EBC3AD4716BAF9DE7032 /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4584C41121CB16EE3CC6D95039BF3586 /* RadarChartView.swift */; }; + E0D426A3CB89383D5F9A2DFDECA05305 /* results_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFF2766440846A31FD73AAF469CB2610 /* results_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E11E884E03D5234B68F9B99B70DAF1AB /* FIRTwitterAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BCD04CC3CC4E934B8C3D74FC9170E54 /* FIRTwitterAuthCredential.m */; }; + E181395E73163EB702FCE9A21403D67B /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = A06B5ECFAC0638767A41E1A95556FB28 /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E1AF9702A6C7E7C5042DCD9421534EAB /* FIRGetProjectConfigRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 350DC54E5CA7208005D14E60E07D2C77 /* FIRGetProjectConfigRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E1F16EBAC60A40383252F90286FB874F /* FIRAuthDataResult_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 88331AF8C3BFC76E90C3264E87C4C901 /* FIRAuthDataResult_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E216DF3249A1CB66A60FA17F2762D8B3 /* sync_user.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F306E49F6CBA1AE7A1A70C9D74062C88 /* sync_user.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E222DDAF7CA5E34E1C3FCD953E8B1978 /* FTupleBoolBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 6545DE771492D2A91E6EA8C24DC73884 /* FTupleBoolBlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E345DE02AD87C708150A4F61462DF063 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; + E38E5B2BDB3CCCA6E7BB304EF30792BD /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = A99C67D7AFDD636DFA057FBFB2C1D78A /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3CE7D8E0B77F66F39B4D0F35AD4D8F5 /* RLMUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 63FEDBEB15B81D387A20EE08CD182C7C /* RLMUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E4168D844792F9589220022C9BE1E435 /* FCachePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 802DF4CEDE7115D1ED4C4627ED0B1A13 /* FCachePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E435A4CE6ED2900A63CD86D0D175609C /* FChildChangeAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = CC08C987D982C1F212823CA4307970AF /* FChildChangeAccumulator.m */; }; + E47225618780FDAE95332247EB028FF9 /* RLMObject_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 3980B565D719CE507DDDD42C78FB99F3 /* RLMObject_Private.h */; }; + E48635B07F123B77DE95276888D8475C /* format.h in Headers */ = {isa = PBXBuildFile; fileRef = 030163BB1C65F04906744F0CDBE415FF /* format.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5455F0236936CCD1F2FE548D11A17EB /* FIRAuthUserDefaultsStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = E7727B9947C70A6D381F53FFABEE6C3A /* FIRAuthUserDefaultsStorage.m */; }; + E5B1F1D3579641AA5FF8C031950F56F7 /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041F6190E6D9A5D5C2848FD4405DACEB /* BubbleChartView.swift */; }; + E5D4775E2489D034D6D6F20900569EF0 /* NSError+RLMSync.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CB983503C52AC6448E9DB5F554FE236 /* NSError+RLMSync.m */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E5F8D9EF3F2A9FE68CAF5DD2960A5599 /* NSError+RLMSync.h in Headers */ = {isa = PBXBuildFile; fileRef = C73FEFAA3CDDDEC0013655E4316A9DFC /* NSError+RLMSync.h */; }; + E5FC72B541FCB1A63257993E0A64EA5A /* sync_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CD4364271A47A98B3FB8D811D9474054 /* sync_config.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; E641FA2F8DA6ED29439B53E52E869B75 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */; }; - E645E8C767E2D14645B0B11DDC8A2041 /* FPersistentConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 279506759E965C04139EA8BF32BC85F0 /* FPersistentConnection.m */; }; - E65D95EA9C20BFFBAA60A7D483B73B81 /* FTreeSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = E92D15118B786BA86D1B0ED014DAC550 /* FTreeSortedDictionary.m */; }; - E6836AFE4C48E34457304BFDDE00A06C /* FWriteTreeRef.m in Sources */ = {isa = PBXBuildFile; fileRef = EEA3E1CAFC53ED900CC4A9D1E69DAAB3 /* FWriteTreeRef.m */; }; - E68E1F2324E85664B419A4BB91B78ABC /* FTupleRemovedQueriesEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 039F5411FDC209C6D02A79FC091E01B8 /* FTupleRemovedQueriesEvents.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E7457D92E75200B25792996E63216EB2 /* RLMObjectSchema_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = F7453E0EFD2ADC36B38779BFF40F992E /* RLMObjectSchema_Private.h */; }; - E75CCB538E9C2C9DFD20DC03EDD7E766 /* FIRSecureTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E5EBF90FA9F0C98408EF13E485DFBD /* FIRSecureTokenRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E823A127299C8135038A0FBF6010A087 /* FTupleNodePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B7ECE0F84BACFC785AB07041F1B3C7 /* FTupleNodePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8D88D7A3211DFFB81935B3A3CEF7000 /* FIRAuthAPNSToken.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FD691EF6249ED497DCF7CBC2F87206 /* FIRAuthAPNSToken.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8E5F19C649576B0A94647161AE3FA89 /* keychain_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE7C2858E2C5A485300722303DD1784F /* keychain_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - E8FF3AD08413ECEBE837F84D2EFD06A2 /* FIREmailLinkSignInResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 706AFBECC91447F3B97ED9DA2ED0F149 /* FIREmailLinkSignInResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E913655A4F208789B3086A216D9473D4 /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = B854E348078BB064C1A7930A6131C5FA /* FIRAnalyticsConfiguration.m */; }; - E91C2C7E7F442AE719135A03857DD5C5 /* RLMSyncCredentials.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 515D097DCD4CB3E03C5D26379559BF4F /* RLMSyncCredentials.h */; }; - E979E9F43B6A93209A30FE4E28F247F9 /* FRangeMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = 44AE3BAA3E5EE58F48C87AF1F5F3FF88 /* FRangeMerge.m */; }; - E9E5F082818BE1AA4722E77DD066450F /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = A71BAAB6BB2A78F9ACDEA00D68266E01 /* Kingfisher.swift */; }; - EA2C971AFCA2449BFA8C923C89BA41D1 /* FIRGetProjectConfigRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F4BE791E1BAFA2B52E47778D476C11D /* FIRGetProjectConfigRequest.m */; }; - EACC4A8962E01437378FCE9EE957420B /* FPendingPut.m in Sources */ = {isa = PBXBuildFile; fileRef = EAD0CC66EB949F945F8E6074B855FCA0 /* FPendingPut.m */; }; - EAFDE5409F00D4D18589D1A977339952 /* race.m in Sources */ = {isa = PBXBuildFile; fileRef = 4929B54A9E9DECE6438DB81F21C0C5A4 /* race.m */; }; - EB8FE260F0BA93CDB13DE9AA35DDD196 /* FIRVerifyAssertionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = CB22F3A2AA3E9173F9190650F8D204E9 /* FIRVerifyAssertionResponse.m */; }; - EC56E17020C49F9A939696ABB68EF70B /* FEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 44495764D29A5192248157697337ABAE /* FEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC9C58EAFB6C7ED35D278B1011EB860D /* db_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = D817CD58242817C291BC0EE8E586CE72 /* db_impl.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + E645E8C767E2D14645B0B11DDC8A2041 /* FPersistentConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = ACF983B4340DAC23633B0CA21BF9F653 /* FPersistentConnection.m */; }; + E65ABE59482F0887B432AD11F0C3E1F7 /* Chart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A7C94A8565150F3D5973A944B036DFA /* Chart.swift */; }; + E65D95EA9C20BFFBAA60A7D483B73B81 /* FTreeSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 53695C03B289AB70B3B9A00816EC598A /* FTreeSortedDictionary.m */; }; + E6646BAE1A23B2ED231F37B13B5A3E11 /* weak_realm_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3D63F3C70AEB3405539CFD1711834B0 /* weak_realm_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E669ED50381035D703CDAB22B3094D23 /* RLMSyncCredentials.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D8EDB52C8867702B3E27FE68547CC43D /* RLMSyncCredentials.h */; }; + E6836AFE4C48E34457304BFDDE00A06C /* FWriteTreeRef.m in Sources */ = {isa = PBXBuildFile; fileRef = C6689CA6209D12C2E6AE031D127F4D09 /* FWriteTreeRef.m */; }; + E68E1F2324E85664B419A4BB91B78ABC /* FTupleRemovedQueriesEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2B01A415F7ACE81B048B713D8FE90E /* FTupleRemovedQueriesEvents.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E6FC09D485B3A310B30A04CDA03AA9CB /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDC49B8A1AD95E20EDF4FA01C5DA07EE /* IPieChartDataSet.swift */; }; + E75CCB538E9C2C9DFD20DC03EDD7E766 /* FIRSecureTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D84D4415254CB3E2764CC60F4649464C /* FIRSecureTokenRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E79525D2BB5EFBA1170DDF31EFE69E1B /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 315C7FDA3CA5D1664929CEA6E882ADCA /* BubbleChartData.swift */; }; + E823A127299C8135038A0FBF6010A087 /* FTupleNodePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FC3F2DFACE7D51E17F7954B1EB30275 /* FTupleNodePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E8B12C9DD3456B9403F35DCAFA088707 /* object_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C930B245950DF4367BCF0D8467CE9D8 /* object_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + E8D88D7A3211DFFB81935B3A3CEF7000 /* FIRAuthAPNSToken.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DCBF745ADE50ECB37A08B26A7353C5 /* FIRAuthAPNSToken.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E8FF3AD08413ECEBE837F84D2EFD06A2 /* FIREmailLinkSignInResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 19BA97759F07732AFFBBFDC8C8A1810E /* FIREmailLinkSignInResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E913655A4F208789B3086A216D9473D4 /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F210A6653BCF42C9456F4CD1A6BBBD /* FIRAnalyticsConfiguration.m */; }; + E979E9F43B6A93209A30FE4E28F247F9 /* FRangeMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CCCDCE5180D72EF2A7915476786F336 /* FRangeMerge.m */; }; + E9E5F082818BE1AA4722E77DD066450F /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B79FD3CEA8082FC5E7227D4655E4B6 /* Kingfisher.swift */; }; + EA2C971AFCA2449BFA8C923C89BA41D1 /* FIRGetProjectConfigRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F53AC3B56E84F6C31D6266D4C53141F /* FIRGetProjectConfigRequest.m */; }; + EACC4A8962E01437378FCE9EE957420B /* FPendingPut.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E0A0CCFA3173BDDDABA9DA3E0DD3058 /* FPendingPut.m */; }; + EAFE66969B8288438DB654702FE920CF /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4942026A8026CF7E076E0AA739AAAD29 /* LineRadarChartDataSet.swift */; }; + EB73EBC822BCD6277EAD01E54597AED9 /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E17F5D3C8611981CAD280408B214E47A /* SwiftyJSON-dummy.m */; }; + EB8FE260F0BA93CDB13DE9AA35DDD196 /* FIRVerifyAssertionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D21312B70688001CD741A8E1DD2D29 /* FIRVerifyAssertionResponse.m */; }; + EC56E17020C49F9A939696ABB68EF70B /* FEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4510F4AED388F9675FCF452048EA5D63 /* FEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC9C58EAFB6C7ED35D278B1011EB860D /* db_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = FD48BBBF03C51B7650C1664FE9D22A86 /* db_impl.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + ECA8832916B8D8EFFAB5A2C766A6330D /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2985ED25438C1F2BE7A51A8BF689F9F /* BarChartDataSet.swift */; }; ECB180997B7E93632DD275ED337C6393 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E50769454BAB05FFAFD0F3A91B0476 /* CFNetwork.framework */; }; - ECD464FCB2D6FF880AEC6F4ABCF608E2 /* write_batch.h in Headers */ = {isa = PBXBuildFile; fileRef = BC241B3ECDADE20136BE7F095C362C55 /* write_batch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED77A8CFF29C6BA2A07C071CC71541FE /* FPruneForest.m in Sources */ = {isa = PBXBuildFile; fileRef = F62D2C38661956FB1EA268061A54F656 /* FPruneForest.m */; }; - EDC0AE2E2B97A9B99EC3EE1D3AA3766E /* Catchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7615907BB7747985754615DAEF089A4 /* Catchable.swift */; }; - EE0384F4B768FD12B5227D6CDFD4D21C /* db_iter.cc in Sources */ = {isa = PBXBuildFile; fileRef = BB28107EC523C61FEA83D2BCB930E3EA /* db_iter.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - EE237442B4CF48663F6E25CB2EBEBF92 /* version_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = 74E7929741A42451CBF6BBD492AA09EC /* version_set.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - EECA21DD085CDC46A8472A3306251BF9 /* FIRTwitterAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 100FF94E3015593CECC1255B3F665E35 /* FIRTwitterAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EED220E7F7A14B3499D5A38EF4033B1D /* FNextPushId.h in Headers */ = {isa = PBXBuildFile; fileRef = A3518271C1360FECB7B62107A839F0CA /* FNextPushId.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EEFCFF19C5E249AE7B648DBA1D45D402 /* FKeepSyncedEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 03ADD67983ADECBCBFF12A13D5F5446A /* FKeepSyncedEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF13A859D01FA9A4B2BDB00CB24D4748 /* after.m in Sources */ = {isa = PBXBuildFile; fileRef = 69A5CDCB0D783A09A4BB193FF66CCC15 /* after.m */; }; - EF66D5E71544BE3CE2328B047C7BED9F /* comparator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1B3DC33DF5A79E4952AA173236099A85 /* comparator.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - EFD264FC408EBF3BA2528E70B08DDD94 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 994E34C59DB8E9DCF98E5A5EE5489AAA /* Notifications.swift */; }; - F01D85154EA067D1494820E8741F7A9F /* FIRTransactionResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D093E4A532BB4793C85D123B1F5BC55A /* FIRTransactionResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F04D0513FACCF0FA3603E8847B411B35 /* FIRAuthNotificationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 29DABDAF6F9E0407544E8FD4EA9322A5 /* FIRAuthNotificationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F07652D072348C368FF2997DE67BD849 /* FNextPushId.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C738177964ED52E8059D490D1A0500E /* FNextPushId.m */; }; - F07AB3E2CBC8F77BF57000AF06F32E1B /* filter_policy.cc in Sources */ = {isa = PBXBuildFile; fileRef = 0F3F404F9850B2CB2CD2B23BD179771D /* filter_policy.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; - F0E3080C69002862DD794AD5275B28AE /* object_schema.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 703F0CA64B244E7C39599A425A4A9A04 /* object_schema.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F0E3A42E96725649DDD99CC3DCF0CB7E /* FView.h in Headers */ = {isa = PBXBuildFile; fileRef = 26B7CE2D2961B216E39557E9D2785C74 /* FView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F14AF54B32A05768FB772C2487B3974F /* FirebaseAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 82839582921198FABDE00052D66E2F0C /* FirebaseAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1711D7BB8EC3D47469529726FDA6ABC /* testutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FEED253C14771AB979BE87C47893FD4 /* testutil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F185E0B6CB75ACF333B0A8C9A137F273 /* RealmSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E1C5E57E92B11E6EB24E5ACAC73E70 /* RealmSwift-dummy.m */; }; - F1B52C36849DBC54FF6AB7F974BB7422 /* FIRDatabaseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D4B640835F345FD00D9CB01B0AB0DC7 /* FIRDatabaseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1E43B61130E71B4EFF9A056CFC7AFED /* RLMSyncCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = 515D097DCD4CB3E03C5D26379559BF4F /* RLMSyncCredentials.h */; }; - F215CE92BEFC96E75C521E54940EEE68 /* FIRAuthWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CFA3DB2710C9150755686D9980A781 /* FIRAuthWebView.m */; }; - F31505C5BB0BC94F063945FBEA567BF3 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 593FE72222BC2EF93683E4257630D211 /* Object.swift */; }; - F3A4B94B13050B0A3395BA942CEB0CC8 /* RLMRealm_Dynamic.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = DF15C92D0E7C68B041093A95CAB8EB6F /* RLMRealm_Dynamic.h */; }; - F3AABB11BFCA0D8614959DD0FEFB461F /* thread_safe_reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C86EBB0032823748C3C73ECF340FDC1 /* thread_safe_reference.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F42E1724B80954ABC8705BD199473594 /* AnyPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9858FE2A6CD145EFD7EB722FEE336C89 /* AnyPromise.swift */; }; - F45DC5D5564AE28958CED9131EE10274 /* FIRVerifyClientRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F20440FC5E61BDEE9A09B544C5974154 /* FIRVerifyClientRequest.m */; }; - F4EBECD3A85AF148EB96E4DB09DF31EF /* SideMenu-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F4351ABF0E5804F47D02066C4F50BAA1 /* SideMenu-dummy.m */; }; - F4F0E76F4FC99AA806EDDB9A8D195B51 /* RLMProperty_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 0AC29CD8C22A2463B88B3F529DD41B08 /* RLMProperty_Private.h */; }; - F58E4F66183150EDFDCBA4986C42E7D9 /* FQueryParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CB6AE028F0001B0D4C44A5AEE15445D /* FQueryParams.m */; }; - F5ECFC106ED02D3F5ECA3286E183F41F /* RLMSchema.h in Headers */ = {isa = PBXBuildFile; fileRef = 199A54868C68F439FBCCECBD84D0AA94 /* RLMSchema.h */; }; - F615FBA917D6DA7CA421C297DE4471ED /* RLMSyncPermission.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = C1FBAEFB116E74CBCBF1A67240EC1E49 /* RLMSyncPermission.h */; }; - F6330FDD789FFE97DCB51F7E0597E767 /* db_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF9D3741DFBB014DF4F19195C830C0E /* db_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F697A47B9851FBC125DE11228FB27815 /* Pods-pocloud-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 39805068056EB58D370D71A27CD2F678 /* Pods-pocloud-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F69AB231B620BE9E5B10876C401D9A75 /* object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C1118B949F848618F8AFEFFA4DCF352 /* object.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F69DE864C2419769C43DD30333B5686E /* FIRAuthTokenResult_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E37786C25F05296621C72208689D84C /* FIRAuthTokenResult_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F6A1AE445EF97D0A86B081BDB25C292C /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = E49FC6F17A125CD5AA7F1DFDAC5B02E0 /* table.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6BECD98B97CBFEBE2C96F0E9E72A6C0 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD36562FCB3CAC1CDF829BFEF0FB6CFD /* ResponseSerialization.swift */; }; - F6D288E22CDC3184E2D7FFDEB7473B43 /* FIRUserMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A6F67245C5EF7F78E4682A85FC6A849 /* FIRUserMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F70C8A6AEAB10ADCA612783439AD9486 /* FValueEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = ECBB5EB4DDA66EB6EA4D197712996F33 /* FValueEventRegistration.m */; }; - F736524B8F94A54428F79E0114074CB7 /* FIRDataEventType.h in Headers */ = {isa = PBXBuildFile; fileRef = EB48733EDDA28CE0130DB6F418E12216 /* FIRDataEventType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F74B3343CF2B8B108578CBA460B0873C /* FIRDataSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F06DDE1647C1B4F556BF9208E5A502D /* FIRDataSnapshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F805B446F1365DD7C5B757B1332F76E9 /* RLMQueryUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8BDE227456E7A4A10B5674E0F7F1E8A6 /* RLMQueryUtil.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F83E6BF9968D2038F1D4EC7F55774B8B /* placeholder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E82CFD05B35717654A1CA07BA84FFE4 /* placeholder.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F8469D950E387BEA23EB3060ACFAF117 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06BB1F4FC9BB61074842DD02B0BAF55C /* Migration.swift */; }; - F8B3D3092ED0417E8CDF32033F6122F5 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2817712D14124F193818D0195281148 /* Alamofire.swift */; }; - F903BE65C108A179CBCA727562358BAC /* RLMRealmConfiguration_Private.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = D367DE8AFEB78091122B8580DF71E51F /* RLMRealmConfiguration_Private.h */; }; - F91FC79A930BC93EB78D1EAEAB01F29C /* FIRAuthSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 85B9D47CA185751D2CC8D7B324EB7EEF /* FIRAuthSettings.m */; }; - F9201469F5FB6DAC27668A2F893350C7 /* external_commit_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA0D24FFC21F0AC3D8A2FFC3AE63EB77 /* external_commit_helper.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - F988B85970A139C7B4F4884582B9D531 /* Deprecations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2F526A371F15523F70033F71D4E8DC /* Deprecations.swift */; }; - F99CE4D3861E9F7028E9FBCCAC35CA78 /* FLLRBValueNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CC072C55EAA4F58FB9737792ED612B05 /* FLLRBValueNode.m */; }; - F9A31D40347540FC0676D96BCDE54C82 /* FIRCreateAuthURIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B351A95EA8BF4F4489CDDF15D468BAA /* FIRCreateAuthURIResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9CB61D2D29FD9389C97B07D0AA9E237 /* FLLRBValueNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E8ADF43E9D247D3BB0419A366EEAD55 /* FLLRBValueNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9D92BA503505CB48EF4ECF0DDF57686 /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 876C8FE4C8BC6D8AF9FFD9FF46B6589C /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA280BD252696167869DF965A07424BA /* FirebaseDatabase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E568AD223B636055BCADD93E5CBD699E /* FirebaseDatabase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA5820A11082B0BB3D16F39705A6BA74 /* sync_permission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD0C89D0D70A5C5C2AC6954D4AF09C24 /* sync_permission.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - FA95EE8C3ADEA94E5B66EF78C211747B /* FTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BC02749593FFFFBFBEFF12AA613D571 /* FTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FAE1429761E55B80D8F9F4EE387E697D /* RLMSyncSubscription.mm in Sources */ = {isa = PBXBuildFile; fileRef = E67EE91FCAF8E86F384AA8B15E9C9BFB /* RLMSyncSubscription.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - FB126AFC86DBEF45F48FF8E79F4FA438 /* RLMObjectStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA69AA362DC47C2FA0A3D8BA2372DDF9 /* RLMObjectStore.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.0\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; - FB48DC5ECBAB973160FC8537433D13B4 /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C1CA3A2B6EA7F70F7F6B5419B489DAC /* ChameleonFramework-dummy.m */; }; - FB4B8550B44B1EA86000867733DA1E1E /* RLMSyncManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89F27B0980DDE5BD783531CF77807A73 /* RLMSyncManager_Private.h */; }; - FB6D49D3E7CF33EDA4DA16B521B6369C /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 5305DBA793AA7CEAEAE7B3A96CE8CB78 /* UIViewController+Chameleon.m */; }; - FBCBED4CBB63054A48DFF182786C8151 /* FServerValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D86498062747657DA44EF4E4FC1D64B /* FServerValues.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FCAAC6CD678BA60068F1191155A96BBD /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C133579CAA0F7792D10746A36A6795 /* Error.swift */; }; - FCB5AA8CA0811FCB8EC61AFA99ED37F8 /* port_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = B8570446709CB77262045BB7C12361ED /* port_posix.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FCE4A6519CB10D9FE62C677D673D7747 /* FIRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = D8D5C12768B4509B8E069E019A2AF140 /* FIRErrors.m */; }; - FD9ACDC426E5C19D4A621601F2F65D15 /* AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 54B1B15C5992AABEA834EB9EF50BEF34 /* AnyPromise.m */; }; - FDAFF95434EC595FE647795654E4F8FD /* FMaxNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 92B76C50618D84D3A4C1256A34745255 /* FMaxNode.m */; }; - FDBAD3A83AF39B20E72DB7C8FDEDFB1A /* iterator_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = EAD2FDD9D63185D4CE0449323C8AC108 /* iterator_wrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FDBE2354ADDBCE418832377E08137898 /* FIRGetOOBConfirmationCodeResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 903B2DFB2B75E07AD51566DB58E59C83 /* FIRGetOOBConfirmationCodeResponse.m */; }; - FE9D6F49E90C40DCE944ED83E6A89436 /* FIRVerifyCustomTokenResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 01DE3250A0CAB753DCFBDBB0C78236BF /* FIRVerifyCustomTokenResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FED97351EC4705507DAB175106B819C8 /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA12F09478DC61C0A6342F9C486EF289 /* UIButton+Kingfisher.swift */; }; - FF9242778082FC5E56AC968F32DA81C6 /* FIRVerifyClientRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 848D29C5FC6A7B0FFDC1DB2DFCE7BEBC /* FIRVerifyClientRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FFAC8722B0099719AC10EAD80C2E92BD /* RLMSyncUser.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0DF43ED484210512CEC7842239F5345D /* RLMSyncUser.h */; }; - FFB0CF833AA027B1673903388A571394 /* status.h in Headers */ = {isa = PBXBuildFile; fileRef = CA5CCBEB25184C290D089BE2CA188BCC /* status.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ECD464FCB2D6FF880AEC6F4ABCF608E2 /* write_batch.h in Headers */ = {isa = PBXBuildFile; fileRef = 3622D6061A94CE8E0352320B60C699A7 /* write_batch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED1873FF6CA812842E1DDD873FCBA974 /* RLMMigration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 62A0B768F2064E7856A14C9777566E9A /* RLMMigration_Private.h */; }; + ED77A8CFF29C6BA2A07C071CC71541FE /* FPruneForest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1740E3878E8152AA3495EDC1CC4F9584 /* FPruneForest.m */; }; + EDF33AD8DFAD527E84D2F3982244D805 /* primitive_list_notifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4407BCC12D6454A7C4DD5EB59989CB90 /* primitive_list_notifier.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + EE0384F4B768FD12B5227D6CDFD4D21C /* db_iter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 216C148E7AAB55B4A42CA429789C1B65 /* db_iter.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + EE237442B4CF48663F6E25CB2EBEBF92 /* version_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = D90A8F88224ECCEF79428080A5258DD8 /* version_set.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + EE96809B72CD956D93B2C74C5CEC3079 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1A77A95C767183930715923CA7B9CD8 /* IChartDataSet.swift */; }; + EECA21DD085CDC46A8472A3306251BF9 /* FIRTwitterAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C757F3C107E98DCBF3614F91E051BAC2 /* FIRTwitterAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EED220E7F7A14B3499D5A38EF4033B1D /* FNextPushId.h in Headers */ = {isa = PBXBuildFile; fileRef = 40ABF03F2985E93BB3E380F12A39EC3D /* FNextPushId.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEFCFF19C5E249AE7B648DBA1D45D402 /* FKeepSyncedEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 51857F69494E751F1292917527853C26 /* FKeepSyncedEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF66D5E71544BE3CE2328B047C7BED9F /* comparator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1B9E5336251CDB16A838C72DC2FCC200 /* comparator.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + EFD264FC408EBF3BA2528E70B08DDD94 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2658EFF6E7C32CD315FE3E97741B8F /* Notifications.swift */; }; + F01D85154EA067D1494820E8741F7A9F /* FIRTransactionResult.h in Headers */ = {isa = PBXBuildFile; fileRef = ABC670FBD5E8B2397A4506CBA3D8AC1E /* FIRTransactionResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F04D0513FACCF0FA3603E8847B411B35 /* FIRAuthNotificationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B9BDF63B39092D211921C6CBD60DA7B /* FIRAuthNotificationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F05C013826F73FC7A5E6677879C8221F /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = B039F44ABB7A92B17AE56C91A8D1331A /* Error.swift */; }; + F07652D072348C368FF2997DE67BD849 /* FNextPushId.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D34C37E819E168E7E98D1AF3B56A88E /* FNextPushId.m */; }; + F07AB3E2CBC8F77BF57000AF06F32E1B /* filter_policy.cc in Sources */ = {isa = PBXBuildFile; fileRef = A883601D9703726B4322D2E02409B4BA /* filter_policy.cc */; settings = {COMPILER_FLAGS = "-DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -fno-objc-arc"; }; }; + F0E3A42E96725649DDD99CC3DCF0CB7E /* FView.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B8E74A9B829C2A9F1A358BED46E52F /* FView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F14AF54B32A05768FB772C2487B3974F /* FirebaseAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 404A48DBA1D7B997CB861D59714CED9A /* FirebaseAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1657543192F8AE888B0EC60DEFE1A75 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC5CFBD9FA0619FAC8BA87254AD80F9 /* YAxisRendererRadarChart.swift */; }; + F1711D7BB8EC3D47469529726FDA6ABC /* testutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F691853BFC1A254495084C3FB79AB1E /* testutil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F17F62DDB93ADF8E88628A6DEAE2D5E5 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010F3E78EA2B017AA93BEADC8E20028B /* ChartData.swift */; }; + F1B52C36849DBC54FF6AB7F974BB7422 /* FIRDatabaseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7C344E3090DBF2569D710383CAE4F0 /* FIRDatabaseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F215CE92BEFC96E75C521E54940EEE68 /* FIRAuthWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D63F2692B6B3BD98E4CC626FC8A37A /* FIRAuthWebView.m */; }; + F3164A48C4BD14B24589513631E76289 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D836C6135A4A0DB91321A0AF66F189BA /* RadarChartData.swift */; }; + F34138A7B6DA112CD721402546A83E4C /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3121C1AA2669BA601A1F89BBEC089E48 /* CandleStickChartRenderer.swift */; }; + F403D77C753A61A3A43015CCCD6E3419 /* RLMRealm.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20CCF052EE82D7B150FCD5F5B9410BC9 /* RLMRealm.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + F436A29081BC6FFCE34183E1EE4384D5 /* list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511CD8D08D77F4C86FFAB96B8D4DA5CA /* list.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + F45DC5D5564AE28958CED9131EE10274 /* FIRVerifyClientRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 48EF342504252DD6E318CC1EB4B5D80F /* FIRVerifyClientRequest.m */; }; + F58E4F66183150EDFDCBA4986C42E7D9 /* FQueryParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C593131F797D7DAC1039F2AF3698863 /* FQueryParams.m */; }; + F6330FDD789FFE97DCB51F7E0597E767 /* db_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = F75441FCC771DAB20E10F502367D5C14 /* db_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F69DE864C2419769C43DD30333B5686E /* FIRAuthTokenResult_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 70A1AD3B20C64A95B7B5580B9E81D43C /* FIRAuthTokenResult_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F6A1AE445EF97D0A86B081BDB25C292C /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = BB34959F74D2FFFACC4C04FCAB66C594 /* table.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6BECD98B97CBFEBE2C96F0E9E72A6C0 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16A20A4FB231EE817DD971C8AB04B91B /* ResponseSerialization.swift */; }; + F6D288E22CDC3184E2D7FFDEB7473B43 /* FIRUserMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = CADD45CDEF8FFCAED76A0C64EFE20125 /* FIRUserMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70C8A6AEAB10ADCA612783439AD9486 /* FValueEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 529F2A28F18269F592C0EF751D57B12A /* FValueEventRegistration.m */; }; + F736524B8F94A54428F79E0114074CB7 /* FIRDataEventType.h in Headers */ = {isa = PBXBuildFile; fileRef = 19E3AD3BF9A76E328E1108AEB019FFFE /* FIRDataEventType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F74B3343CF2B8B108578CBA460B0873C /* FIRDataSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E5D887055BB8A66417BED95CFE1A7F8 /* FIRDataSnapshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7F063574F41CEB07C2E8D5515283613 /* RLMSyncUser.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D389BB45620221D213E040D3CF144A /* RLMSyncUser.h */; }; + F825A4F1D13FF1652E961F0EE90F8E83 /* partial_sync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1318E50C377898EE6E826DF192BDE65 /* partial_sync.cpp */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + F827569161143A920BF181535EEF2A48 /* RLMMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E3C68A8338F859194C1124BEBDCB0A5 /* RLMMigration.h */; }; + F87CE4DE54E94FA55A3A927007FB1FD6 /* RealmSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FE50293D6F45770888DD421CCF1AF684 /* RealmSwift-dummy.m */; }; + F8B3D3092ED0417E8CDF32033F6122F5 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3EB9C130BCDF5D41B767A2DDB23620E /* Alamofire.swift */; }; + F91FC79A930BC93EB78D1EAEAB01F29C /* FIRAuthSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE6E212E97F0BE496C4BBF14E535286 /* FIRAuthSettings.m */; }; + F99CE4D3861E9F7028E9FBCCAC35CA78 /* FLLRBValueNode.m in Sources */ = {isa = PBXBuildFile; fileRef = EFC5008C82A789C5CE54CC603CD45792 /* FLLRBValueNode.m */; }; + F9A31D40347540FC0676D96BCDE54C82 /* FIRCreateAuthURIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5118852F00D319C28B010E9BA8768CC9 /* FIRCreateAuthURIResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9CB61D2D29FD9389C97B07D0AA9E237 /* FLLRBValueNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3FF4D9F6D45AEEFD3B7A5B6223B228 /* FLLRBValueNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9D92BA503505CB48EF4ECF0DDF57686 /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EC3CCB389D940FD240C6627A2ABE0ECA /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA235C475565E40FB2EC81D8C07AEB1D /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4570A996D9D1630514D541FA7101AF0C /* YAxisRenderer.swift */; }; + FA280BD252696167869DF965A07424BA /* FirebaseDatabase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C57FD505AA549D1E21DB283C8DD250F7 /* FirebaseDatabase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA83F71C3974BA3D5F72B84259276652 /* SVRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B257A251D6FBC2AFDD55B4D7C8F3E263 /* SVRadialGradientLayer.m */; }; + FA95EE8C3ADEA94E5B66EF78C211747B /* FTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 25183A1EC546EA54A19D49147C8B6C96 /* FTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAA4D66F240061BE2D23E2DCFA8EBDA1 /* RLMRealm+Sync.mm in Sources */ = {isa = PBXBuildFile; fileRef = 63A5EB73F253F91E0F7BD49FFB62E8A2 /* RLMRealm+Sync.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + FAF0B88E606AED62810B5439CF3838F6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBAA5BACA9745702C885EB1AF32FA673 /* Security.framework */; }; + FB0545D14B1E4861481C33CBAA0C0E38 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BE481F940AF4A8DF36951AEB716349 /* Description.swift */; }; + FB0EE332F0D9DB21A3242E01D9729963 /* RLMObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F41AC1060BEC0F8FFF9670D0AE6838 /* RLMObjectBase.h */; }; + FB48DC5ECBAB973160FC8537433D13B4 /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A40816A42C954603A831D194843E7E7C /* ChameleonFramework-dummy.m */; }; + FB6D49D3E7CF33EDA4DA16B521B6369C /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 186FA77A9F5A6D0915DBBC97984BBF46 /* UIViewController+Chameleon.m */; }; + FBCBED4CBB63054A48DFF182786C8151 /* FServerValues.h in Headers */ = {isa = PBXBuildFile; fileRef = D5FFBB0A4527F0757086AB0E0521E0A3 /* FServerValues.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBE3E2442ACE2FBA04F7AB0C162C4D89 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF8A643199F293F7BD1D067690F0419 /* RadarChartRenderer.swift */; }; + FC57776203D958993075D6E1E166A07F /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA25FFCB0C2E368A77DB3560B235BF3E /* IAxisValueFormatter.swift */; }; + FC58F30B6D6D806A4F07700836301649 /* RLMUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 903734663D02151E18F4C148991DAAE0 /* RLMUpdateChecker.mm */; settings = {COMPILER_FLAGS = "-DREALM_HAVE_CONFIG -DREALM_COCOA_VERSION='@\"3.7.1\"' -D__ASSERTMACROS__ -DREALM_ENABLE_SYNC"; }; }; + FCB5AA8CA0811FCB8EC61AFA99ED37F8 /* port_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = DD3B1E8CF575604F22181747F6BE98CA /* port_posix.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCE4A6519CB10D9FE62C677D673D7747 /* FIRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = CBD462291D881E25803DE9FC8115B50B /* FIRErrors.m */; }; + FDAFF95434EC595FE647795654E4F8FD /* FMaxNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F1E1E998443D17EED1A4B847684070 /* FMaxNode.m */; }; + FDBAD3A83AF39B20E72DB7C8FDEDFB1A /* iterator_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 1244EAC63AB515E7A9148B79C493BAE8 /* iterator_wrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDBE2354ADDBCE418832377E08137898 /* FIRGetOOBConfirmationCodeResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = CB29682178E05D22A82FCDDFE5819D2C /* FIRGetOOBConfirmationCodeResponse.m */; }; + FE9D6F49E90C40DCE944ED83E6A89436 /* FIRVerifyCustomTokenResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1753BDDC9962E4F3F28577F2734B235B /* FIRVerifyCustomTokenResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FED97351EC4705507DAB175106B819C8 /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65B45B8E875F6ECDF184594472AF8A5F /* UIButton+Kingfisher.swift */; }; + FF094B99FBD0FC5CFAC0091958D49032 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EE1E0883062B30061F69A7DC3E4796A /* HorizontalBarChartView.swift */; }; + FF9242778082FC5E56AC968F32DA81C6 /* FIRVerifyClientRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 01837F648781495D356798BE5B89DBE2 /* FIRVerifyClientRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FFB0CF833AA027B1673903388A571394 /* status.h in Headers */ = {isa = PBXBuildFile; fileRef = B39617B32590F6D5D9E53BB446F611A3 /* status.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFBE64C7CD91108D7DDE64831A9D8BF6 /* SideMenu-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A67DE7838148233FBF12950FE0AD450 /* SideMenu-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFF38F053B3F4842CAFAFD53109555E3 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A4A51BDF4DB2D619A25C8BC84CA655A /* IScatterChartDataSet.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 034290CF3467836EC58FE68AD063310B /* PBXContainerItemProxy */ = { + 1BF4FFDCF47B83E524D60704DEA25D0E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 163ACDEEDFE672B67E0DB15318AF0C07; - remoteInfo = Realm; + remoteGlobalIDString = 42FD17D195FA3B5B05CE79F0B6CF447D; + remoteInfo = FirebaseCore; }; - 0B82B905D3FC275BD0C2E37F7EDDE8EB /* PBXContainerItemProxy */ = { + 29158A5BAB1AF49DD722EFE2F4A9FAE5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 4F87037150ABE2C9238B54E8F6E33F36; - remoteInfo = Kingfisher; + remoteGlobalIDString = 7D63CE0CBBC5134E15681885C016EC4F; + remoteInfo = SwiftChart; }; - 193F6B242D2B389103653C57DDCFE122 /* PBXContainerItemProxy */ = { + 32667219CD3C40CE7B75A13A9C0EB885 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 488CA9079247B8F25888405871FCF2F4; - remoteInfo = GoogleToolboxForMac; - }; - 28B218822CC57EB41A1C5000A771B12F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8B772225B6972C5F5121F8C6F296B00A; - remoteInfo = SVProgressHUD; - }; - 2979C1143E109AD426C7D45E4DFEFFDB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 88E9EC28B8B46C3631E6B242B50F4442; - remoteInfo = Alamofire; + remoteGlobalIDString = 2E769F49CA0CFF5358BD147A496DC598; + remoteInfo = SideMenu; }; 367D61C9083B720530DA81AC98288B75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -993,26 +1117,40 @@ remoteGlobalIDString = 488CA9079247B8F25888405871FCF2F4; remoteInfo = GoogleToolboxForMac; }; - 38B348765667E3EF9697C0147A56A728 /* PBXContainerItemProxy */ = { + 39D0E26560AC232DD6111DD1CE8B886E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C9AF417271F67CC4FA2DA0DC6AD972AB; - remoteInfo = SwiftyJSON; + remoteGlobalIDString = 8A267660E1AD4832DE75665F2F87AEA3; + remoteInfo = ChameleonFramework; }; - 3DEC546676A0F3DFB219187C19E2D1CC /* PBXContainerItemProxy */ = { + 3C66AC071D36F70E5CB33462AA679B7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = DBA0CD9259A1F0AE57C098B81B8448ED; - remoteInfo = SideMenu; + remoteGlobalIDString = E4DD95323C54A78F879DAB0F1508B8E7; + remoteInfo = nanopb; }; - 42F600F68E373DFB011D0A76228D1838 /* PBXContainerItemProxy */ = { + 4B62D3C23EE2748FEF98FB6FC38F909D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9938F3058E6013FAB6444C41E86DC9E9; - remoteInfo = "leveldb-library"; + remoteGlobalIDString = AC12289D8D8EA15163F1BFCBE783D119; + remoteInfo = PromiseKit; + }; + 54F3DFF0440069C07F5508B93682D33F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 62FABD757FE4DF7B87CB5ACCAE424F36; + remoteInfo = FirebaseDatabase; + }; + 588CA3E7BA6E2716B01A14D6C3F4336A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 85A4785CDCA19B18B452AB3681A101F5; + remoteInfo = Realm; }; 5F522470CF5BF10D6E52C99BA2EA7B0E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1021,40 +1159,33 @@ remoteGlobalIDString = 42FD17D195FA3B5B05CE79F0B6CF447D; remoteInfo = FirebaseCore; }; - 6085DFA2C4D2C096E1B7DAB9EF6C6605 /* PBXContainerItemProxy */ = { + 67BB2AD3C9308D3315ABD6FBC1973E4E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 4EEC98C9980EBF6EB559FE9840F88600; - remoteInfo = PromiseKit; + remoteGlobalIDString = 85A4785CDCA19B18B452AB3681A101F5; + remoteInfo = Realm; }; - 630D8AE5C58CD83D7E74430A349B79EF /* PBXContainerItemProxy */ = { + 6D792F4D6B89CF912EA0A99ABCC03EBA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 26389CA2D7E58CA4716E217346D0655C; - remoteInfo = RealmSwift; + remoteGlobalIDString = 488CA9079247B8F25888405871FCF2F4; + remoteInfo = GoogleToolboxForMac; }; - 6EAB8D3EBB47FE6619923250344F91DA /* PBXContainerItemProxy */ = { + 72B707FB8D19DAD14A99B3CF3888E276 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 88E9EC28B8B46C3631E6B242B50F4442; remoteInfo = Alamofire; }; - 7C839CBB90935D8CAC7B816BDECCB83D /* PBXContainerItemProxy */ = { + 7BD9F6A92F2E8D50D7FAF59ED413B372 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C71013989C387BAAD69BFE01570495EB; - remoteInfo = GTMSessionFetcher; - }; - 7DCC38ED421A8E54D8BF5F4044F31C8A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 62FABD757FE4DF7B87CB5ACCAE424F36; - remoteInfo = FirebaseDatabase; + remoteGlobalIDString = DC201E4CC62EC8A658D2DFAC007E057B; + remoteInfo = RealmSwift; }; 8259DCBFC79F7A391B707A14D37A4BBA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1063,12 +1194,19 @@ remoteGlobalIDString = 488CA9079247B8F25888405871FCF2F4; remoteInfo = GoogleToolboxForMac; }; - 9AF3C01A643B8F078CB63491614D34BF /* PBXContainerItemProxy */ = { + 866466C0FC6C7560D6D3AE1DF9F07BA4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 163ACDEEDFE672B67E0DB15318AF0C07; - remoteInfo = Realm; + remoteGlobalIDString = C71013989C387BAAD69BFE01570495EB; + remoteInfo = GTMSessionFetcher; + }; + 978DFC9519279B1627360BC8BFC062A7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4F87037150ABE2C9238B54E8F6E33F36; + remoteInfo = Kingfisher; }; A7629079EAFECDF56D06279F0F87B1EE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1077,26 +1215,26 @@ remoteGlobalIDString = 42FD17D195FA3B5B05CE79F0B6CF447D; remoteInfo = FirebaseCore; }; - B63C228C8CA9F2F54B2F48A8C3AD111D /* PBXContainerItemProxy */ = { + AA366233C53F9BFD73061FC84AAF3A73 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = C60D48C24AC5107F932D1778161FE56E; remoteInfo = FirebaseAuth; }; - BC3BBEF7A586E144762A37B14D7EFAB7 /* PBXContainerItemProxy */ = { + AC4DA82E6C4B9796AC0ADBC4DB8E951F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 42FD17D195FA3B5B05CE79F0B6CF447D; - remoteInfo = FirebaseCore; + remoteGlobalIDString = 1D416D5E8AAA52C62EECDEEAFED16087; + remoteInfo = Charts; }; - C936B4DDC050318851842F2C3674061A /* PBXContainerItemProxy */ = { + BA42ECB63937C8734147DCD1791DF673 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E4DD95323C54A78F879DAB0F1508B8E7; - remoteInfo = nanopb; + remoteGlobalIDString = 88E9EC28B8B46C3631E6B242B50F4442; + remoteInfo = Alamofire; }; CAE729D936A8C8BB1D7B97D1034CB700 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1105,6 +1243,20 @@ remoteGlobalIDString = 9938F3058E6013FAB6444C41E86DC9E9; remoteInfo = "leveldb-library"; }; + D2CA6DCE7C9380EC02DD1D27A8487CF7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9938F3058E6013FAB6444C41E86DC9E9; + remoteInfo = "leveldb-library"; + }; + D59CAB6F4AB0C82557AD07537A986010 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = CA422484FAF4A9E5D7FFDD41A987EF04; + remoteInfo = SwiftyJSON; + }; DC79AF76D9D01EBEF5027AFF0F8CD873 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -1112,19 +1264,12 @@ remoteGlobalIDString = 488CA9079247B8F25888405871FCF2F4; remoteInfo = GoogleToolboxForMac; }; - E5FDFB54DB94E62855733B76973770F4 /* PBXContainerItemProxy */ = { + F3A7F6A6C0DD53D6C7113A19E4606F59 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 8A267660E1AD4832DE75665F2F87AEA3; - remoteInfo = ChameleonFramework; - }; - E6CF3DFABE0583E3A2408E0ADB88E865 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F2B8B75736083DA9B4F09AE96C5205C; - remoteInfo = SwiftChart; + remoteGlobalIDString = DE7EC12ADEA52D1655CEC698566C4109; + remoteInfo = SVProgressHUD; }; F78BF8C4665536E7DC5A172B41F62554 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1136,1041 +1281,1183 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 55B4421CCFAFB283030F2F9BAC7DFACD /* Copy . Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - 58CBF20A1F56789FAEAA7DC13B8EFF6E /* NSError+RLMSync.h in Copy . Public Headers */, - D115F87C158364DA6177ED35700B0CA2 /* Realm.h in Copy . Public Headers */, - 3630D9858DFFFB03099F529A9F6BE1A5 /* RLMArray.h in Copy . Public Headers */, - 083B6A57E973A56C7C900A1480DF5078 /* RLMCollection.h in Copy . Public Headers */, - AC2226CC810DEB8A9E19D5FC44688A27 /* RLMConstants.h in Copy . Public Headers */, - 8C2E86D5239157BCC92D640C22B1D67D /* RLMListBase.h in Copy . Public Headers */, - 8327B9D7936FCA6736EE567153083421 /* RLMMigration.h in Copy . Public Headers */, - 5CF65A69A3ADB9FA9FB1F714D69E10DF /* RLMObject.h in Copy . Public Headers */, - A56B676A8DA02E627D06A2AF7BDCDB95 /* RLMObjectBase.h in Copy . Public Headers */, - 9C13AC4D26E5E541C4FDD87DA0975DF6 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */, - 47D4B618FC55B31C7D92B6ACC8B7CF9A /* RLMObjectSchema.h in Copy . Public Headers */, - D251E3B02C47CE5122036938617B3286 /* RLMOptionalBase.h in Copy . Public Headers */, - B099BC41FDDDA1C0905D9CBFF4F0610C /* RLMPlatform.h in Copy . Public Headers */, - 81139734D8EDBB4E901EB8D16BDCE96D /* RLMProperty.h in Copy . Public Headers */, - AAE345232B79B0E25254968D8C7273B0 /* RLMRealm+Sync.h in Copy . Public Headers */, - 3BF229262126198B764A60D36A705C61 /* RLMRealm.h in Copy . Public Headers */, - F3A4B94B13050B0A3395BA942CEB0CC8 /* RLMRealm_Dynamic.h in Copy . Public Headers */, - 15B52CC8AB1AE163B4F1D24B7EE8ABAB /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */, - 89BA1CB8522D3DE03BE61E4EA591FD2F /* RLMRealmConfiguration.h in Copy . Public Headers */, - 3AB142E626E038F53D47F81030F6EC3C /* RLMResults.h in Copy . Public Headers */, - 7CFEA12DF14696B8EBAEA0854C993082 /* RLMSchema.h in Copy . Public Headers */, - B6D3432403736A76F898B14A0797B1CB /* RLMSyncConfiguration.h in Copy . Public Headers */, - E91C2C7E7F442AE719135A03857DD5C5 /* RLMSyncCredentials.h in Copy . Public Headers */, - 67E04AE58975D6C1C5B38050A2733FED /* RLMSyncManager.h in Copy . Public Headers */, - F615FBA917D6DA7CA421C297DE4471ED /* RLMSyncPermission.h in Copy . Public Headers */, - 8E9983D05F8D5E5950FB415FA0E779F7 /* RLMSyncSession.h in Copy . Public Headers */, - 60BCACD5DF6380864584EFC1143499F6 /* RLMSyncSubscription.h in Copy . Public Headers */, - FFAC8722B0099719AC10EAD80C2E92BD /* RLMSyncUser.h in Copy . Public Headers */, - 121D46DB1C0B4762865E5FF00592D60F /* RLMSyncUtil.h in Copy . Public Headers */, - 3A95EA86B539BD78C8F1C924CC84743F /* RLMThreadSafeReference.h in Copy . Public Headers */, - ); - name = "Copy . Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - C1EB0D21FF8F48274194E30BACE610AF /* Copy . Private Headers */ = { + 88CC9DE1C70C13261FC0EAB2C4FA02E3 /* Copy . Private Headers */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; dstSubfolderSpec = 16; files = ( - 5BE10C5A182E7495F8076720DE73399F /* RLMAccessor.h in Copy . Private Headers */, - 77E1BE646BDCCBF26C5471FF315CCE77 /* RLMArray_Private.h in Copy . Private Headers */, - 7D9A2C4BA83190E7F2CBFB5B74F41FE3 /* RLMCollection_Private.h in Copy . Private Headers */, - 30164E1305AFC12298C8ECAFD258342E /* RLMListBase.h in Copy . Private Headers */, - 4CAD8FE0F1582C102C00F91A1A62A1ED /* RLMMigration_Private.h in Copy . Private Headers */, - 256D4559E7D381A28E379F6D58842405 /* RLMObject_Private.h in Copy . Private Headers */, - 1608369270603B0A8AEA9922DB61E991 /* RLMObjectBase_Private.h in Copy . Private Headers */, - E7457D92E75200B25792996E63216EB2 /* RLMObjectSchema_Private.h in Copy . Private Headers */, - 9D64BF0DA8DB5B7EDB7DD0BB9DED5C91 /* RLMObjectStore.h in Copy . Private Headers */, - 6F88B7FBE811504C10126E6FB5ACD140 /* RLMOptionalBase.h in Copy . Private Headers */, - F4F0E76F4FC99AA806EDDB9A8D195B51 /* RLMProperty_Private.h in Copy . Private Headers */, - 6F773D3E94F3E4E91F0B9106CD69566C /* RLMRealm_Private.h in Copy . Private Headers */, - F903BE65C108A179CBCA727562358BAC /* RLMRealmConfiguration_Private.h in Copy . Private Headers */, - 1DD94A3F6F21B27AB9A15165DD66D3DB /* RLMResults_Private.h in Copy . Private Headers */, - 502F3F61CDF8A47AAB03A2DFF07550E5 /* RLMSchema_Private.h in Copy . Private Headers */, - B30AC6EB54BBD2E8EB3BFA6D0A94447C /* RLMSyncConfiguration_Private.h in Copy . Private Headers */, - D3FD91F82E845C1BADE57AAF83B6327E /* RLMSyncManager_Private.h in Copy . Private Headers */, - E045B0B7F083BBF5C5DDEBD5FF2F6D44 /* RLMSyncUtil_Private.h in Copy . Private Headers */, + D7816F27846D38F06CEB67CAA85A4460 /* RLMAccessor.h in Copy . Private Headers */, + 35B521DB8C10D18B4900047A32156B6C /* RLMArray_Private.h in Copy . Private Headers */, + 11AEDA4837332CB1BC8A51C312A29C55 /* RLMCollection_Private.h in Copy . Private Headers */, + 9349F8DE57389B1E7554750B78411397 /* RLMListBase.h in Copy . Private Headers */, + C443196BF0146EC946D8A3534F41D5A4 /* RLMMigration_Private.h in Copy . Private Headers */, + E47225618780FDAE95332247EB028FF9 /* RLMObject_Private.h in Copy . Private Headers */, + AFEB5B0FA845F196A2644B0C4AD5C0B4 /* RLMObjectBase_Private.h in Copy . Private Headers */, + 435F4C4ABBA3555525E12FB7D784E9C4 /* RLMObjectSchema_Private.h in Copy . Private Headers */, + A5C086A939371902DFD4696360A260B1 /* RLMObjectStore.h in Copy . Private Headers */, + 61C2FAA7275B3E85B28BD47AF12CBB61 /* RLMOptionalBase.h in Copy . Private Headers */, + 51EFF7414BE559B77F1484CA3A375A02 /* RLMProperty_Private.h in Copy . Private Headers */, + 40088B3E7230D95BFCB3AFB56CC851F0 /* RLMRealm_Private.h in Copy . Private Headers */, + 9928E777B7D879A3AEBAFA10E41EC096 /* RLMRealmConfiguration_Private.h in Copy . Private Headers */, + 6FB85ECF42034629EC7884FCFCDE16E8 /* RLMResults_Private.h in Copy . Private Headers */, + 7A15B0C3312E202092741AA8DDBACCB1 /* RLMSchema_Private.h in Copy . Private Headers */, + 6CFAF1739C87435ABB52C0011EE5CC2E /* RLMSyncConfiguration_Private.h in Copy . Private Headers */, + 335C2CB1271F53CF91DE85C73CF37306 /* RLMSyncManager_Private.h in Copy . Private Headers */, + D6C665FF89DA8E66F749383EFC4620A2 /* RLMSyncUtil_Private.h in Copy . Private Headers */, ); name = "Copy . Private Headers"; runOnlyForDeploymentPostprocessing = 0; }; + BAF1D7E9F30FF58F7882A88C13DD76CD /* Copy . Public Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; + dstSubfolderSpec = 16; + files = ( + 7EA26BF6E579DDBD953B2CB3903E8066 /* NSError+RLMSync.h in Copy . Public Headers */, + D658A6228F9F4B64989F355FECCF5BF5 /* Realm.h in Copy . Public Headers */, + 00D7C6B81EE7790B2484C56D8AD2DBDD /* RLMArray.h in Copy . Public Headers */, + 7010E45A7DDF5570F72DF282D440DAE1 /* RLMCollection.h in Copy . Public Headers */, + 43EE250C0F409FCAB4282401E61AAE91 /* RLMConstants.h in Copy . Public Headers */, + C3E6D035EE177A4DED6B9431BE72BE30 /* RLMListBase.h in Copy . Public Headers */, + A9D54363CC7197558EEF6850CFE219A9 /* RLMMigration.h in Copy . Public Headers */, + D840D17C17F3A69465AF33150B556B64 /* RLMObject.h in Copy . Public Headers */, + D0175B3E6756AA485FEB95E4444CAF7B /* RLMObjectBase.h in Copy . Public Headers */, + 13FDE320DCC710A70A2E4217214AB4C8 /* RLMObjectBase_Dynamic.h in Copy . Public Headers */, + D15FDA74C88E47EAD68B1A6F30E11966 /* RLMObjectSchema.h in Copy . Public Headers */, + 96416BE648D453B402DD79FC793F2699 /* RLMOptionalBase.h in Copy . Public Headers */, + CA996D32F8624A9BF65F142068FD62D5 /* RLMPlatform.h in Copy . Public Headers */, + 4D7D2B439AEBBE3F7FD80DE63769F269 /* RLMProperty.h in Copy . Public Headers */, + 1277D45E7B686F4945D7EE575884A69F /* RLMRealm+Sync.h in Copy . Public Headers */, + 1966299DF244FA60F3D6F4000584C573 /* RLMRealm.h in Copy . Public Headers */, + 3AF16F62C64B49F32E71211A47C1967F /* RLMRealm_Dynamic.h in Copy . Public Headers */, + 681B0EA16666D544C5646F0F555F6A5C /* RLMRealmConfiguration+Sync.h in Copy . Public Headers */, + 411D6578ECE50346770395D74A902DCC /* RLMRealmConfiguration.h in Copy . Public Headers */, + AC9FDD3467EC4E381E4359764DB6560F /* RLMResults.h in Copy . Public Headers */, + 1C8523A5106C0B25E352FF5BD860E6F9 /* RLMSchema.h in Copy . Public Headers */, + 9A2691B5F224F44CC7D377E14C4E524C /* RLMSyncConfiguration.h in Copy . Public Headers */, + E669ED50381035D703CDAB22B3094D23 /* RLMSyncCredentials.h in Copy . Public Headers */, + 19518C44C6586761D72BACB4F78F1ED2 /* RLMSyncManager.h in Copy . Public Headers */, + 69DC95A92CB145398EFDB36570BA731B /* RLMSyncPermission.h in Copy . Public Headers */, + 87BABC6CB05EFAB1BF299CE58F3E37B7 /* RLMSyncSession.h in Copy . Public Headers */, + 1BE9C29AB45E39D5D303F9C89C4F7398 /* RLMSyncSubscription.h in Copy . Public Headers */, + 75B7EF3BFFD311AE732C8204F1643E78 /* RLMSyncUser.h in Copy . Public Headers */, + 9FE28FF51551892A889A76123F97E81E /* RLMSyncUtil.h in Copy . Public Headers */, + C9DB89D817C2F4199CD9FAF7032F43E5 /* RLMThreadSafeReference.h in Copy . Public Headers */, + ); + name = "Copy . Public Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 003BEE696E52AC5C0543F4C821DC9451 /* FIRAuthExceptionUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthExceptionUtils.h; path = Firebase/Auth/Source/FIRAuthExceptionUtils.h; sourceTree = ""; }; - 011170F025ACC6E045835611E6E339C6 /* env.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = env.cc; path = util/env.cc; sourceTree = ""; }; - 012C9CCA072C9B01CA92A4C0577B282A /* FCompoundWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundWrite.h; path = Firebase/Database/Snapshot/FCompoundWrite.h; sourceTree = ""; }; - 0199999A928BD098252EE9E3E7996064 /* logging.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = logging.cc; path = util/logging.cc; sourceTree = ""; }; - 01B65001CC680852B87526799EBC5A19 /* FRepoInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoInfo.m; path = Firebase/Database/Core/FRepoInfo.m; sourceTree = ""; }; - 01DA5B8F3981011693888D2B0938CA00 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; - 01DE3250A0CAB753DCFBDBB0C78236BF /* FIRVerifyCustomTokenResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyCustomTokenResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h; sourceTree = ""; }; - 01EE60DEEA4F6E9A3C2E16BB7D3E538A /* FIRAuthBackend.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthBackend.m; path = Firebase/Auth/Source/RPCs/FIRAuthBackend.m; sourceTree = ""; }; - 022E927034BF829787B7C39142FAEA7F /* FNamedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNamedNode.m; path = Firebase/Database/FNamedNode.m; sourceTree = ""; }; - 022F7A2E011A1E1354FE0BDC21A7CD66 /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = Firebase/Core/Public/FIRLoggerLevel.h; sourceTree = ""; }; - 02496D195F2F0DDB1BBB92482BD1C8E9 /* testharness.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = testharness.cc; path = util/testharness.cc; sourceTree = ""; }; - 024FC59778A7D3BF25C444C6DA477757 /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; - 0377ECD853047ECC66C472A94B29E043 /* env_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = env_posix.cc; path = util/env_posix.cc; sourceTree = ""; }; - 039F5411FDC209C6D02A79FC091E01B8 /* FTupleRemovedQueriesEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleRemovedQueriesEvents.h; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h; sourceTree = ""; }; - 03ADD67983ADECBCBFF12A13D5F5446A /* FKeepSyncedEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeepSyncedEventRegistration.h; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.h; sourceTree = ""; }; - 03BAB0254AF20F3DAF78573DC0FEE99E /* FImmutableSortedSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedSet.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h; sourceTree = ""; }; + 00780D4D04882C948E1B9336A2C69E9E /* SVProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressHUD.h; path = SVProgressHUD/SVProgressHUD.h; sourceTree = ""; }; + 00EFEEE85CB95D18DC489063B2FD374B /* join.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = join.m; path = Sources/join.m; sourceTree = ""; }; + 010F3E78EA2B017AA93BEADC8E20028B /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; + 0114AC1580DC8D7B871714A7AE3A2000 /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; + 0130B2AC51BDBB44098750C3DBFB1889 /* FIRAuthErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthErrors.h; path = Firebase/Auth/Source/Public/FIRAuthErrors.h; sourceTree = ""; }; + 01353F67E6131A74A5E9F0F7441A5D24 /* PromiseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromiseKit.xcconfig; sourceTree = ""; }; + 016F4EFD29D57463E0529F36C204359D /* FTupleBoolBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleBoolBlock.m; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m; sourceTree = ""; }; + 0176A640860C22CA590917E949EA896D /* FIRPhoneAuthCredential_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRPhoneAuthCredential_Internal.h; path = Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthCredential_Internal.h; sourceTree = ""; }; + 01837F648781495D356798BE5B89DBE2 /* FIRVerifyClientRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyClientRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.h; sourceTree = ""; }; + 02567E06C0649C2B8EE728CCEF4F0CC8 /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; + 02AD01C63ECA2BE2D0D23054BFF0C45A /* Alamofire+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Alamofire+Promise.swift"; path = "Extensions/Alamofire/Sources/Alamofire+Promise.swift"; sourceTree = ""; }; + 02B38DCB18E5386EA2F64B0DA37AEF11 /* FParsedUrl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FParsedUrl.h; path = Firebase/Database/Utilities/FParsedUrl.h; sourceTree = ""; }; + 030163BB1C65F04906744F0CDBE415FF /* format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format.h; path = table/format.h; sourceTree = ""; }; + 031086F2CEE1F3707ED06FED89720174 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; + 033FC3396ADB83FC83AA7513D3D464A1 /* FPathIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPathIndex.h; path = Firebase/Database/FPathIndex.h; sourceTree = ""; }; + 034F186DEC5C318DAB5AA49B019811DD /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; + 038FC2F39E49914CC7AC3FF9A6AAE199 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; + 041186F74B1C4AEC7DE643D8D7F780F8 /* RLMObjectSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema.h; path = include/RLMObjectSchema.h; sourceTree = ""; }; 041546C28FAD9947BD99E5DA0DAB76DE /* Pods-pocloud-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-pocloud-resources.sh"; sourceTree = ""; }; - 04274B2D193F1C3402EFB98EA7D21A6C /* FChildChangeAccumulator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildChangeAccumulator.m; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m; sourceTree = ""; }; - 0443E9ED4AFAB4239674A2E3FB46F5C2 /* FIRAuthAppDelegateProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAppDelegateProxy.h; path = Firebase/Auth/Source/FIRAuthAppDelegateProxy.h; sourceTree = ""; }; - 04D70AD08B309E1B7AA1E899AB9F7DD0 /* FIRTransactionResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTransactionResult.m; path = Firebase/Database/Api/FIRTransactionResult.m; sourceTree = ""; }; - 04F93951C862B1D6F50DD9F2F2D1C76D /* FIRAuthUIDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthUIDelegate.h; path = Firebase/Auth/Source/Public/FIRAuthUIDelegate.h; sourceTree = ""; }; - 04FB889A3B7E33CA3EB8FF5CA1CCE7EC /* Property.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Property.swift; path = RealmSwift/Property.swift; sourceTree = ""; }; - 05E821CB1FD3B7617B1747440CAB5E23 /* PromiseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromiseKit-prefix.pch"; sourceTree = ""; }; - 0609AE291B884541C6DF20C135E2A3FB /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 060B27D9EB1F50D6412B276C2BC4BFC2 /* FIRAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthProvider.m; path = Firebase/Auth/Source/FIRAuthProvider.m; sourceTree = ""; }; - 061FDDD238820A8A858B697D584DB04E /* Kingfisher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-umbrella.h"; sourceTree = ""; }; - 0692A131C2E9F640FF4B64BF63320706 /* RLMProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty.h; path = include/RLMProperty.h; sourceTree = ""; }; - 06BB1F4FC9BB61074842DD02B0BAF55C /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = RealmSwift/Migration.swift; sourceTree = ""; }; - 06DF0317E615FE43980DDE8915C60FBB /* FIRGetAccountInfoResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetAccountInfoResponse.m; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoResponse.m; sourceTree = ""; }; - 072CC0EFA6553B40B3C6AD14AD95CDF5 /* RLMOptionalBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMOptionalBase.h; path = include/RLMOptionalBase.h; sourceTree = ""; }; - 0732883D1BAD351393D27D47576F1236 /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; - 073A52E2C21FF1D62C7F62E22229E27D /* FIRAuthDispatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthDispatcher.m; path = Firebase/Auth/Source/FIRAuthDispatcher.m; sourceTree = ""; }; - 07448843721411D105BC77181ED246C6 /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; - 079163C3758BB988A92C22F1BC465BD3 /* FIRVerifyCustomTokenRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyCustomTokenRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.m; sourceTree = ""; }; - 086306D83D8C3B92325BC169A4DF6893 /* RLMUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUtil.mm; path = Realm/RLMUtil.mm; sourceTree = ""; }; - 08811D88CEC4702543555843C810657D /* GTMNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMNSData+zlib.h"; path = "Foundation/GTMNSData+zlib.h"; sourceTree = ""; }; - 09193CF269C262BBE8A20C9A22C1D22C /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = RealmSwift/List.swift; sourceTree = ""; }; - 094DA8FED8C56F8C41DBB3327BF9A850 /* FCompoundHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundHash.h; path = Firebase/Database/Core/FCompoundHash.h; sourceTree = ""; }; - 09AA5AA89D97D1BF16F36C62FDD2AD5F /* FTreeNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeNode.h; path = Firebase/Database/Core/Utilities/FTreeNode.h; sourceTree = ""; }; - 0A2E1CE2DC70E49CCB32378842FD5680 /* FWriteTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTree.h; path = Firebase/Database/Core/FWriteTree.h; sourceTree = ""; }; - 0A7A1C13C4245A09439D1DBC7E5C75F2 /* FIRServerValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRServerValue.m; path = Firebase/Database/Api/FIRServerValue.m; sourceTree = ""; }; - 0AB0FC15C3D9D806562BAA15CD21713E /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - 0AC29CD8C22A2463B88B3F529DD41B08 /* RLMProperty_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty_Private.h; path = include/RLMProperty_Private.h; sourceTree = ""; }; - 0ACCB7C8249C4A4459C1C7B6AE74B5ED /* hang.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = hang.m; path = Sources/hang.m; sourceTree = ""; }; - 0AEB804462BD0EC775A3A28A6CA369C0 /* FCacheNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCacheNode.m; path = Firebase/Database/Core/View/FCacheNode.m; sourceTree = ""; }; - 0B2CE9529795C2488347FB5015888DB6 /* leveldb-library-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "leveldb-library-dummy.m"; sourceTree = ""; }; - 0B51BC483E61688364E86FD7AC9706CD /* memtable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = memtable.h; path = db/memtable.h; sourceTree = ""; }; - 0B7472A2B767877174E2DF15ADC3E8D2 /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; - 0BC2D24DEB60661E4AB229DF73A489CA /* FWebSocketConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWebSocketConnection.h; path = Firebase/Database/Realtime/FWebSocketConnection.h; sourceTree = ""; }; - 0C1118B949F848618F8AFEFFA4DCF352 /* object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object.cpp; path = Realm/ObjectStore/src/object.cpp; sourceTree = ""; }; - 0C775F7136F0DE7AC48F0E20DC951818 /* FIRTwitterAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTwitterAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Twitter/FIRTwitterAuthCredential.m; sourceTree = ""; }; - 0CD1C58110EB87B555D1286A9600FA31 /* NSData+SRB64Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+SRB64Additions.h"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h"; sourceTree = ""; }; - 0D0384586ACEA88566F47AAE1CC4143B /* FRangeMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangeMerge.h; path = Firebase/Database/Core/FRangeMerge.h; sourceTree = ""; }; - 0D4B640835F345FD00D9CB01B0AB0DC7 /* FIRDatabaseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery.h; path = Firebase/Database/Public/FIRDatabaseQuery.h; sourceTree = ""; }; - 0DF43ED484210512CEC7842239F5345D /* RLMSyncUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUser.h; path = include/RLMSyncUser.h; sourceTree = ""; }; - 0DF6C1FC347D897F3D7EB7580EDDD44C /* FIRAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthCredential.h; path = Firebase/Auth/Source/Public/FIRAuthCredential.h; sourceTree = ""; }; - 0E09B6B7C23DF784C8949C2D5EB5534E /* filename.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = filename.cc; path = db/filename.cc; sourceTree = ""; }; - 0E0FEF05B614A195E9DF14BD40E5A30B /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = ""; }; - 0ECDAC859AFE6D77E199B99242CF9302 /* FAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAuthTokenProvider.h; path = Firebase/Database/Login/FAuthTokenProvider.h; sourceTree = ""; }; - 0EE074BDDBCA5D7ACBC1D565DC19B0FE /* env.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env.h; path = include/leveldb/env.h; sourceTree = ""; }; - 0F3F404F9850B2CB2CD2B23BD179771D /* filter_policy.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = filter_policy.cc; path = util/filter_policy.cc; sourceTree = ""; }; - 0F4D29B0ACD4D5C0D0523BACA815679F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0F66493B50DF62BCB1A084C7D275B89C /* FIRDatabaseQuery_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h; sourceTree = ""; }; - 0FF11FA13FFFDA7E56941C07B0E9328C /* FIRSendVerificationCodeRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSendVerificationCodeRequest.m; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.m; sourceTree = ""; }; - 100FF94E3015593CECC1255B3F665E35 /* FIRTwitterAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTwitterAuthProvider.h; path = Firebase/Auth/Source/Public/FIRTwitterAuthProvider.h; sourceTree = ""; }; - 101E7D7A3849AF8379E44C24618B8570 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Filter.swift; sourceTree = ""; }; - 10587F1EAA20DD8DD4C4AA694141920F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 10F9EA5391B3EA21581C23210B839467 /* after.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = after.swift; path = Sources/after.swift; sourceTree = ""; }; - 114AACB449F70D301BC988FAB1A6ED51 /* SideMenu-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SideMenu-umbrella.h"; sourceTree = ""; }; - 11668C5DEA03D4F2BB6FF39E794BA093 /* FSyncPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncPoint.m; path = Firebase/Database/Core/FSyncPoint.m; sourceTree = ""; }; - 11784773888188D10E9F4201373A8E05 /* FStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStorageEngine.h; path = Firebase/Database/Persistence/FStorageEngine.h; sourceTree = ""; }; - 122F0EC51FF8523F396566F6A3084F4B /* port_posix_sse.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = port_posix_sse.cc; path = port/port_posix_sse.cc; sourceTree = ""; }; - 127740F1F2DB220B999CC652BA862045 /* FIRAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthCredential.m; path = Firebase/Auth/Source/FIRAuthCredential.m; sourceTree = ""; }; - 12C54A50907C72C5231FE064E0FD5EB4 /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; - 12E16B2872D6AB2B0E579D661F4C0713 /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; - 133E1CBCA9D4227BA0693421D24078B5 /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = Firebase/Core/Private/FIRBundleUtil.h; sourceTree = ""; }; - 136586EF70918CE2645599936BDA2CBD /* FLLRBNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h; sourceTree = ""; }; - 13D830AFCC6A73DD371F88A84E69A22C /* FCompoundWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundWrite.m; path = Firebase/Database/Snapshot/FCompoundWrite.m; sourceTree = ""; }; - 1447015D7EE4CA9757DB258EDFEC618A /* RLMSyncCredentials.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSyncCredentials.m; path = Realm/RLMSyncCredentials.m; sourceTree = ""; }; - 146469777BFD805C29A1047E56F16C6C /* FIREmailPasswordAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailPasswordAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/EmailPassword/FIREmailPasswordAuthCredential.m; sourceTree = ""; }; - 14849BA50E7E3EEA53D6C3ED20626839 /* FIRActionCodeSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRActionCodeSettings.h; path = Firebase/Auth/Source/Public/FIRActionCodeSettings.h; sourceTree = ""; }; - 14B5B683844392A4519974BDECD2FE0F /* dbformat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dbformat.h; path = db/dbformat.h; sourceTree = ""; }; - 15041A28BD4AF2BA8BBC0449DFE3FC55 /* RLMAccessor.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAccessor.mm; path = Realm/RLMAccessor.mm; sourceTree = ""; }; - 15B72D95F92B0B512C075618A1B39BC2 /* sync_user.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_user.cpp; path = Realm/ObjectStore/src/sync/sync_user.cpp; sourceTree = ""; }; - 1645A9E9EEE934729E23AB96051EB3AD /* FormatIndicatedCacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatIndicatedCacheSerializer.swift; path = Sources/FormatIndicatedCacheSerializer.swift; sourceTree = ""; }; - 17D7473FEC7E4B09268EA7A1117ABA72 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = Firebase/Core/Private/FIROptionsInternal.h; sourceTree = ""; }; - 1815D2D0435C20942C254EEE55A77A7A /* Guarantee.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Guarantee.swift; path = Sources/Guarantee.swift; sourceTree = ""; }; - 189A223201EBFFEBE5AB937C2B736211 /* FIRVerifyPhoneNumberRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPhoneNumberRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.h; sourceTree = ""; }; - 19267BA0CAEC6EFEDC034F76FF896C5F /* results_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results_notifier.cpp; path = Realm/ObjectStore/src/impl/results_notifier.cpp; sourceTree = ""; }; - 193C6C22EAE9A101142E050A6C97E5D2 /* FIRUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRUser.m; path = Firebase/Auth/Source/FIRUser.m; sourceTree = ""; }; - 199A54868C68F439FBCCECBD84D0AA94 /* RLMSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema.h; path = include/RLMSchema.h; sourceTree = ""; }; - 19D823D8734EB75ED01B5866FCC79A2D /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1A3EC566AB99F6C73103EC88769C0767 /* dispatch_promise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = dispatch_promise.m; path = Sources/dispatch_promise.m; sourceTree = ""; }; - 1A4C1C5AC30DE4A55E5B813F80CAB464 /* FServerValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FServerValues.m; path = Firebase/Database/Core/FServerValues.m; sourceTree = ""; }; - 1AF9D3741DFBB014DF4F19195C830C0E /* db_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_impl.h; path = db/db_impl.h; sourceTree = ""; }; - 1B3DC33DF5A79E4952AA173236099A85 /* comparator.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = comparator.cc; path = util/comparator.cc; sourceTree = ""; }; - 1BA4A4DAFD5B40883118575B98D908C3 /* FIRAuthUserDefaultsStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthUserDefaultsStorage.h; path = Firebase/Auth/Source/FIRAuthUserDefaultsStorage.h; sourceTree = ""; }; - 1C1CA3A2B6EA7F70F7F6B5419B489DAC /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; - 1C8BF63BAB94A488687EF57BA50A2301 /* SwiftChart-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftChart-umbrella.h"; sourceTree = ""; }; - 1C8C5C0126C82AA5F08F73690A1D9A7D /* FIRGitHubAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGitHubAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/GitHub/FIRGitHubAuthCredential.m; sourceTree = ""; }; - 1CF2F0A013889808BB697EF589C270E2 /* version_edit.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = version_edit.cc; path = db/version_edit.cc; sourceTree = ""; }; - 1D53D27ED4378B60C2784666ECEEFD5F /* FWriteRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteRecord.m; path = Firebase/Database/Core/FWriteRecord.m; sourceTree = ""; }; - 1D8BA7FAB9088209FF49CF19669B6A8D /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; - 1DB49A3919E5A65C4E6547F44C30A163 /* FIRPhoneAuthCredential_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRPhoneAuthCredential_Internal.h; path = Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthCredential_Internal.h; sourceTree = ""; }; - 1E1A3A71989A118385B2374EB5E79BB8 /* FIRDatabaseReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference.h; path = Firebase/Database/Public/FIRDatabaseReference.h; sourceTree = ""; }; - 1ED502BFD549FB181F163263B093CAF0 /* sync_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_config.cpp; path = Realm/ObjectStore/src/sync/sync_config.cpp; sourceTree = ""; }; - 1EDFA25CA7B170D7E62F384298B2DA9C /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; - 1F1AEBAFB012D313D7298940982F4182 /* FIRSendVerificationCodeRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSendVerificationCodeRequest.h; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.h; sourceTree = ""; }; - 1FA79A6B3CCD3B720B78C2EABF4922F5 /* RLMThreadSafeReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMThreadSafeReference.h; path = include/RLMThreadSafeReference.h; sourceTree = ""; }; - 1FEAA3161C1F9C56755E502529EF7FC5 /* RLMMigration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMMigration.mm; path = Realm/RLMMigration.mm; sourceTree = ""; }; - 201641656CA6857B14FB8FE9DD4054BF /* c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = c.h; path = include/leveldb/c.h; sourceTree = ""; }; - 2035B3D2BC6F59B3474A6BB304A0A175 /* leveldb-library.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "leveldb-library.modulemap"; sourceTree = ""; }; - 2049C5CA639316DB171CAA0B09E0676B /* RLMSyncManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager.h; path = include/RLMSyncManager.h; sourceTree = ""; }; - 2093D30F15C065748FABFF4BA05E552D /* FIRAuthTokenResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthTokenResult.h; path = Firebase/Auth/Source/Public/FIRAuthTokenResult.h; sourceTree = ""; }; - 20B4D9D0B60E5161CCF10BC3D1E0F0F1 /* log_writer.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = log_writer.cc; path = db/log_writer.cc; sourceTree = ""; }; - 211FCA1FFC4C77EA93B530870B20B073 /* FIRTwitterAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTwitterAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/Twitter/FIRTwitterAuthCredential.h; sourceTree = ""; }; - 217D04B0EB91FC4454C1F2756B666845 /* FIRAuthRequestConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthRequestConfiguration.h; path = Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.h; sourceTree = ""; }; - 2180E395070CBCD3CC25B3C56661CD6A /* FIRAuthRequestConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthRequestConfiguration.m; path = Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.m; sourceTree = ""; }; - 21BA4F344F529178CDFB1ABA0D06908B /* table_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_builder.h; path = include/leveldb/table_builder.h; sourceTree = ""; }; - 21E0CE12FC42A620B6C0D721C835CC2C /* version_set.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_set.h; path = db/version_set.h; sourceTree = ""; }; - 22095030353ECE1534E0D2F078683231 /* RLMSyncSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSession.h; path = include/RLMSyncSession.h; sourceTree = ""; }; - 228D5C9C186B55465CBBD86B5E03FCC4 /* FKeyIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeyIndex.h; path = Firebase/Database/FKeyIndex.h; sourceTree = ""; }; - 22CA6F29CD92F4C1B2BB0A4BCA0C0FA7 /* FUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUtilities.h; path = Firebase/Database/Utilities/FUtilities.h; sourceTree = ""; }; - 22E9F3CFFCE3C10469284AF35E50D597 /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; - 22F12DE8D1F2C8DA2A503F28F6011764 /* FIRResetPasswordRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRResetPasswordRequest.h; path = Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.h; sourceTree = ""; }; - 230529BF51BC41AE5A524A0E124E5700 /* SVRadialGradientLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVRadialGradientLayer.h; path = SVProgressHUD/SVRadialGradientLayer.h; sourceTree = ""; }; - 23CA50BB5CC5430225B3A92952BB37AA /* FConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConnection.h; path = Firebase/Database/Realtime/FConnection.h; sourceTree = ""; }; - 23D2A626E8FC87744A73EF8C49B11F8B /* FIRDatabaseConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseConfig.m; path = Firebase/Database/Api/FIRDatabaseConfig.m; sourceTree = ""; }; - 23F60B0C684B89763846E2F8FF9A007D /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = Firebase/Core/Public/FIRConfiguration.h; sourceTree = ""; }; - 2401851FEF961A15104EB6C723CF332D /* leveldb-library.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "leveldb-library.xcconfig"; sourceTree = ""; }; - 2476127FCECFE8BAF92977DBA8A2A261 /* FIRVerifyCustomTokenResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyCustomTokenResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m; sourceTree = ""; }; - 24AAE30D6056FD7D084FEF595C799173 /* RLMResults_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults_Private.h; path = include/RLMResults_Private.h; sourceTree = ""; }; - 252FD7EEAEA7D49BB483B864311F6840 /* uuid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = uuid.cpp; path = Realm/ObjectStore/src/util/uuid.cpp; sourceTree = ""; }; - 2535470B099987084D42AD7FC9199290 /* write_batch_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch_internal.h; path = db/write_batch_internal.h; sourceTree = ""; }; - 25ABAE281B9B85515231C787D50B50C8 /* SideMenuManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SideMenuManager.swift; path = Pod/Classes/SideMenuManager.swift; sourceTree = ""; }; - 25AF23E210F2B16DE227CBE1D1B7B7AF /* FIRAuthKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthKeychain.h; path = Firebase/Auth/Source/FIRAuthKeychain.h; sourceTree = ""; }; - 261972D03F90C17872EEEF9379ADB54E /* RLMSyncSession.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSession.mm; path = Realm/RLMSyncSession.mm; sourceTree = ""; }; - 261DFEBC7EA69BAF5CC8E2FEA7E3F02E /* FIRPhoneAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRPhoneAuthCredential.h; path = Firebase/Auth/Source/Public/FIRPhoneAuthCredential.h; sourceTree = ""; }; - 26A2509C55277C92F9535925A9167506 /* FIRUserMetadata_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserMetadata_Internal.h; path = Firebase/Auth/Source/FIRUserMetadata_Internal.h; sourceTree = ""; }; - 26B2AF4FE85BC2B05F422DD7CFCECEAE /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = Firebase/Core/Public/FIROptions.h; sourceTree = ""; }; - 26B7CE2D2961B216E39557E9D2785C74 /* FView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FView.h; path = Firebase/Database/Core/View/FView.h; sourceTree = ""; }; - 26CD5B1D919107654A24937186DBB3E7 /* FIRAuthGlobalWorkQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthGlobalWorkQueue.m; path = Firebase/Auth/Source/FIRAuthGlobalWorkQueue.m; sourceTree = ""; }; - 26E5F18ACD873FD6A13EE7F4475650BE /* FQuerySpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQuerySpec.m; path = Firebase/Database/Core/FQuerySpec.m; sourceTree = ""; }; - 273D0275517578F12DFEF2A0A0543B47 /* FIRReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRReachabilityChecker.h; path = Firebase/Core/Private/FIRReachabilityChecker.h; sourceTree = ""; }; - 273F89EF5E84A25EFCAD7E480D899271 /* FIRCreateAuthURIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCreateAuthURIResponse.m; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIResponse.m; sourceTree = ""; }; - 279506759E965C04139EA8BF32BC85F0 /* FPersistentConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistentConnection.m; path = Firebase/Database/Core/FPersistentConnection.m; sourceTree = ""; }; - 27C72747189B551B974043E9183C55F8 /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; - 280E71F4A10F40DA26EB5029443DC470 /* FirebaseAuth.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAuth.xcconfig; sourceTree = ""; }; - 28275241D6047A1620E7671A606A284B /* FTrackedQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQuery.h; path = Firebase/Database/Persistence/FTrackedQuery.h; sourceTree = ""; }; - 28F25EDE292C4A862214B20B6307CE2E /* ChartColors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColors.swift; path = Source/ChartColors.swift; sourceTree = ""; }; - 28FD496277CE7CD6A22335D4267183D1 /* FRepoInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoInfo.h; path = Firebase/Database/Core/FRepoInfo.h; sourceTree = ""; }; - 2913119A759FDFBDC6F9FC617890BE97 /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 296659C5638CAF0191D8D60039C7A4DE /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; - 29DABDAF6F9E0407544E8FD4EA9322A5 /* FIRAuthNotificationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthNotificationManager.h; path = Firebase/Auth/Source/FIRAuthNotificationManager.h; sourceTree = ""; }; + 041F6190E6D9A5D5C2848FD4405DACEB /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = ""; }; + 0444D8A27B25779CEAB828ACDE64BAF1 /* FDataEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FDataEvent.h; path = Firebase/Database/Core/View/FDataEvent.h; sourceTree = ""; }; + 04522968653053DCC25E6277865EF474 /* mutexlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mutexlock.h; path = util/mutexlock.h; sourceTree = ""; }; + 046C707F9E1CEF2E1FF457BA0B2A067D /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; + 0496DEE60F52D897ACBCC688A9373F16 /* FirebaseAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseAuth-dummy.m"; sourceTree = ""; }; + 04BE9ADFA2D956332AAB30051EBD7485 /* nanopb.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.xcconfig; sourceTree = ""; }; + 0520170A0F4165130ED1587C24B15F56 /* RLMRealmUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmUtil.mm; path = Realm/RLMRealmUtil.mm; sourceTree = ""; }; + 0530BFC7D3BAFA0486AD5729F731BB72 /* SideMenu.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SideMenu.xcconfig; sourceTree = ""; }; + 053BC13DDD4C01F359911BEDFFCB1818 /* Realm-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Realm-dummy.m"; sourceTree = ""; }; + 05A43BADBAE486962B7CF5BB0C747F81 /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = ""; }; + 05B3498DBB737BA19207FE404C0C6647 /* DataApproximator+N.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DataApproximator+N.swift"; path = "Source/Charts/Filters/DataApproximator+N.swift"; sourceTree = ""; }; + 05BCF2B6824F3D6AECED62E135D82C12 /* FListenComplete.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenComplete.m; path = Firebase/Database/FListenComplete.m; sourceTree = ""; }; + 064BFA305D3D77BC0D1830BA41858569 /* FIREmailLinkSignInRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailLinkSignInRequest.m; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInRequest.m; sourceTree = ""; }; + 0657F248C972537EE50A6586504ECB94 /* FLLRBNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h; sourceTree = ""; }; + 069B3B1A4ED4F2ED02EBD7CB6BBCCC4A /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = ""; }; + 06A8B6CE8E50420450544145B479DC04 /* port_posix_sse.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = port_posix_sse.cc; path = port/port_posix_sse.cc; sourceTree = ""; }; + 06ABE5481AE97583FE62FDFB8952C2D4 /* iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = iterator.cc; path = table/iterator.cc; sourceTree = ""; }; + 06E1FA1B42CA05778101C2712761FE8A /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = ""; }; + 07093C7D6DA5E12EE853618511C3670F /* FOverwrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOverwrite.h; path = Firebase/Database/Core/Operation/FOverwrite.h; sourceTree = ""; }; + 073A9335EC36C2F8B51D4B164257ED28 /* merger.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = merger.cc; path = table/merger.cc; sourceTree = ""; }; + 077F0BBCD9DF75EFC6E0680E4A23DDE1 /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = ""; }; + 07A90BAB32C569EF81B985DA76391B4B /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = ""; }; + 07FB6171E53CF3738BC9DEC1338741C6 /* FChange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChange.m; path = Firebase/Database/Core/View/FChange.m; sourceTree = ""; }; + 08C691596B6D5A6A93740E4B320582B9 /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; + 08D2C002F22FD48F47361D4F0C71CAE5 /* FIRVerifyClientResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyClientResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyClientResponse.h; sourceTree = ""; }; + 091CBB58F14812C3DB81BBFB1947E6C1 /* FIRAuthDispatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDispatcher.h; path = Firebase/Auth/Source/FIRAuthDispatcher.h; sourceTree = ""; }; + 095146E5B0C4DB68AEBF9EEC59FB7BF5 /* write_batch_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch_internal.h; path = db/write_batch_internal.h; sourceTree = ""; }; + 097EB8A0D21FC005ED36D789FBBA6873 /* FViewCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewCache.m; path = Firebase/Database/Core/View/FViewCache.m; sourceTree = ""; }; + 09B005B5E8973D2C4964794D38124066 /* FTupleRemovedQueriesEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleRemovedQueriesEvents.m; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m; sourceTree = ""; }; + 09D17E8D85E502FFD67032AFA2B25F29 /* FIRMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableDictionary.h; path = Firebase/Core/Private/FIRMutableDictionary.h; sourceTree = ""; }; + 09D867EECAC7257F6079603569A90232 /* PromiseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromiseKit-dummy.m"; sourceTree = ""; }; + 0A0ED8A6481F4E1DD088861668AA47F9 /* FViewProcessorResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessorResult.h; path = Firebase/Database/FViewProcessorResult.h; sourceTree = ""; }; + 0A4A51BDF4DB2D619A25C8BC84CA655A /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Source/Charts/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; + 0A543BED31EFA916E944D41E476D6920 /* FValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValidation.h; path = Firebase/Database/Utilities/FValidation.h; sourceTree = ""; }; + 0A5AAF9218927014A049769DDDDE7833 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; + 0B1D1A30BE87C5658205E09FF83A7CB9 /* FOverwrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOverwrite.m; path = Firebase/Database/Core/Operation/FOverwrite.m; sourceTree = ""; }; + 0B2C3EACECBB4D5A059E18B27FC65F01 /* RLMRealm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm.h; path = include/RLMRealm.h; sourceTree = ""; }; + 0B3AB5BA442710676AEA53CF8C15DFA3 /* FIREmailLinkSignInRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailLinkSignInRequest.h; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInRequest.h; sourceTree = ""; }; + 0B6785D9FB4E71F7B81001741D543AD2 /* FSyncPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncPoint.h; path = Firebase/Database/Core/FSyncPoint.h; sourceTree = ""; }; + 0BA13E1BC0E1942C73566C7FA929FF94 /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = Firebase/Core/FIRBundleUtil.m; sourceTree = ""; }; + 0BC18A9A93FCF03EB4C6C1EBFB3A585D /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/ImageDownloader.swift; sourceTree = ""; }; + 0BEB6B309722C82FF0BC701A8E937ED8 /* RLMRealmConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmConfiguration.mm; path = Realm/RLMRealmConfiguration.mm; sourceTree = ""; }; + 0BFA5F7AB7496B736FAE82BE675BFB48 /* FValueEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueEventRegistration.h; path = Firebase/Database/Core/View/FValueEventRegistration.h; sourceTree = ""; }; + 0C281F9BACB91ABB9C02E7DD425B029A /* testharness.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = testharness.cc; path = util/testharness.cc; sourceTree = ""; }; + 0C3BC82ED552CDE2F0B6AE44580EE2C9 /* FIRDataSnapshot_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot_Private.h; path = Firebase/Database/Api/Private/FIRDataSnapshot_Private.h; sourceTree = ""; }; + 0CCC91E1E92AEC4C530F1AE0956D1100 /* FEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEvent.h; path = Firebase/Database/Core/View/FEvent.h; sourceTree = ""; }; + 0D30E80723C26FFB3A12A0BDECA43BF3 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + 0D62835BE74C0C592738DB2D9320ABD8 /* FIRNetwork.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNetwork.m; path = Firebase/Core/FIRNetwork.m; sourceTree = ""; }; + 0D6EAE3288DF54A1F96CDB9B2AD0F452 /* FIRAdditionalUserInfo_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAdditionalUserInfo_Internal.h; path = Firebase/Auth/Source/FIRAdditionalUserInfo_Internal.h; sourceTree = ""; }; + 0D938EB4D6C98B5A964DC2761E5E149A /* FRepo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo_Private.h; path = Firebase/Database/Core/FRepo_Private.h; sourceTree = ""; }; + 0DA43129CDEA8715DA7CA75C41476122 /* FTupleStringNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleStringNode.m; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.m; sourceTree = ""; }; + 0DB0848330CEF5107A832A155104D6B0 /* FMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMerge.h; path = Firebase/Database/Core/Operation/FMerge.h; sourceTree = ""; }; + 0DD80A04952275F00220C6174A8ED422 /* binding_callback_thread_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = binding_callback_thread_observer.cpp; path = Realm/ObjectStore/src/binding_callback_thread_observer.cpp; sourceTree = ""; }; + 0DDB0E2D288E288C87065342830A7102 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = ""; }; + 0E14DB3EC12C588CD8998834E8254B81 /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; }; + 0E1762A795F0CCB2D4BEC91CE676509C /* random.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = random.h; path = util/random.h; sourceTree = ""; }; + 0E67AEFA46825634C26F1DFE38EAF96E /* FIRGetProjectConfigResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetProjectConfigResponse.m; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigResponse.m; sourceTree = ""; }; + 0EAF6868DDC7C08B7D20512D22244A9B /* RealmConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmConfiguration.swift; path = RealmSwift/RealmConfiguration.swift; sourceTree = ""; }; + 10243194FB421B2207E4E7CFEA42DD5F /* FLimitedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLimitedFilter.h; path = Firebase/Database/Core/View/Filter/FLimitedFilter.h; sourceTree = ""; }; + 1184EAEEC060394B21FE215643CBB29D /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; + 118C5C1C8CB52ADF89DE45F265E1F838 /* FImmutableSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h; sourceTree = ""; }; + 1244EAC63AB515E7A9148B79C493BAE8 /* iterator_wrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator_wrapper.h; path = table/iterator_wrapper.h; sourceTree = ""; }; + 12B1627081E995F21A586C0E85F603A9 /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = Firebase/Core/Private/FIRAppInternal.h; sourceTree = ""; }; + 12F210A6653BCF42C9456F4CD1A6BBBD /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = Firebase/Core/FIRAnalyticsConfiguration.m; sourceTree = ""; }; + 134506D9971BFA731A5652FB6C7C1384 /* FIRAuthAPNSTokenType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAPNSTokenType.h; path = Firebase/Auth/Source/Public/FIRAuthAPNSTokenType.h; sourceTree = ""; }; + 137C3277D8A84ABAB176985061E001E1 /* GoogleToolboxForMac-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleToolboxForMac-dummy.m"; sourceTree = ""; }; + 145E87090498C9A807B91E8AF19C3434 /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; + 14B538A92666A26E2B3A1C7304517568 /* race.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = race.swift; path = Sources/race.swift; sourceTree = ""; }; + 14DDBFC7D42AC773D5956EFCA98074EA /* FIRVerifyPasswordRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPasswordRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.h; sourceTree = ""; }; + 14EA722EE21B995732296D7822CCE102 /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = ""; }; + 15254BA3250B5723FF8F2252C96E4F9A /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Source/Charts/Charts/BarChartView.swift; sourceTree = ""; }; + 15BC780347377E8FAFF95135078BEE2D /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 15DBAC1E19A43D6D54BD8C81A55585E8 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; + 15E46C0199B62CBCEA304FC838555606 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 15F13C1322382339F6E043BF937E60AE /* FIRSetAccountInfoRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSetAccountInfoRequest.m; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.m; sourceTree = ""; }; + 16244595C10AC1B8927F780CCE468E60 /* AnyPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyPromise.swift; path = Sources/AnyPromise.swift; sourceTree = ""; }; + 165CDD1930D875689EAF18ADF9ADE087 /* FRepoInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoInfo.h; path = Firebase/Database/Core/FRepoInfo.h; sourceTree = ""; }; + 16A20A4FB231EE817DD971C8AB04B91B /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + 1740E3878E8152AA3495EDC1CC4F9584 /* FPruneForest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPruneForest.m; path = Firebase/Database/Persistence/FPruneForest.m; sourceTree = ""; }; + 1753BDDC9962E4F3F28577F2734B235B /* FIRVerifyCustomTokenResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyCustomTokenResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.h; sourceTree = ""; }; + 175B6161C1230906A04A8615122B8041 /* FIRNetworkMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkMessageCode.h; path = Firebase/Core/Private/FIRNetworkMessageCode.h; sourceTree = ""; }; + 177725A426DFCAC2B5A1FCFC07B02D26 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = ""; }; + 17A44D77220B02A8E4ABBDB177CA1A44 /* RLMObjectStore.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectStore.mm; path = Realm/RLMObjectStore.mm; sourceTree = ""; }; + 17AA6BE41ACCDF37C985CE899BDE6ADC /* FIRVerifyPhoneNumberResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPhoneNumberResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberResponse.m; sourceTree = ""; }; + 17C044F8C75D24171E753854F781D0C2 /* FCancelEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCancelEvent.m; path = Firebase/Database/Core/View/FCancelEvent.m; sourceTree = ""; }; + 17E7718BC15B2B522A1B2F3670E50CBC /* dispatch_promise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = dispatch_promise.m; path = Sources/dispatch_promise.m; sourceTree = ""; }; + 1803D0173412108933958EA442223558 /* leveldb-library-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-prefix.pch"; sourceTree = ""; }; + 186FA77A9F5A6D0915DBBC97984BBF46 /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; + 188B8F3E19924A18B940243A1542DF64 /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; + 18C78ED0F3B75405F0CD990B1AF93037 /* FIRReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRReachabilityChecker.m; path = Firebase/Core/FIRReachabilityChecker.m; sourceTree = ""; }; + 18D63F2692B6B3BD98E4CC626FC8A37A /* FIRAuthWebView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthWebView.m; path = Firebase/Auth/Source/FIRAuthWebView.m; sourceTree = ""; }; + 1908CB01202F8FE5D5065C5971BCE40B /* FIRAuthBackend.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthBackend.m; path = Firebase/Auth/Source/RPCs/FIRAuthBackend.m; sourceTree = ""; }; + 190D77825220692FFEDBABDA8396830D /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; + 19179E5A68C85D49ECAECC019BDB8A33 /* FRepoInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoInfo.m; path = Firebase/Database/Core/FRepoInfo.m; sourceTree = ""; }; + 1924511D23F11022AD69827F9E169983 /* FIRFacebookAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFacebookAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/Facebook/FIRFacebookAuthCredential.h; sourceTree = ""; }; + 197CB3CBEBBD2E12576E0B5154D5F92E /* network_reachability_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = network_reachability_observer.cpp; path = Realm/ObjectStore/src/sync/impl/apple/network_reachability_observer.cpp; sourceTree = ""; }; + 19B42F50EF177DECC23EBEEFD624F39A /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; + 19BA97759F07732AFFBBFDC8C8A1810E /* FIREmailLinkSignInResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailLinkSignInResponse.h; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInResponse.h; sourceTree = ""; }; + 19E3AD3BF9A76E328E1108AEB019FFFE /* FIRDataEventType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataEventType.h; path = Firebase/Database/Public/FIRDataEventType.h; sourceTree = ""; }; + 1B08E8A1F22162556B7E880073BAACFD /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = Firebase/Core/FIRApp.m; sourceTree = ""; }; + 1B9E5336251CDB16A838C72DC2FCC200 /* comparator.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = comparator.cc; path = util/comparator.cc; sourceTree = ""; }; + 1BB8AA9739245BF6F13BF252929EB855 /* object_store.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_store.cpp; path = Realm/ObjectStore/src/object_store.cpp; sourceTree = ""; }; + 1BC2333A3C0C4AE7B7A006657401D4CC /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; + 1BD7435F5F0250F9652A873A7AC42563 /* filename.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = filename.cc; path = db/filename.cc; sourceTree = ""; }; + 1C25A9EF70B4577F076EEC542286CC29 /* RLMNetworkClient.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMNetworkClient.mm; path = Realm/RLMNetworkClient.mm; sourceTree = ""; }; + 1C593131F797D7DAC1039F2AF3698863 /* FQueryParams.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQueryParams.m; path = Firebase/Database/Core/FQueryParams.m; sourceTree = ""; }; + 1C7B3474211DE26FB22A569661DFDF32 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; + 1D702E515A27CF01ACC7748411B323A4 /* FImmutableSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m; sourceTree = ""; }; + 1D99A87B69BB9482A7F35A29FA3B22D0 /* FIRAuthAPNSToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAPNSToken.m; path = Firebase/Auth/Source/FIRAuthAPNSToken.m; sourceTree = ""; }; + 1DE2A0BA98F28B03B880E89F1DA0DEF4 /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = ""; }; + 1DEF6CBDE137A9D304491225064F131B /* FIRAuth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuth.m; path = Firebase/Auth/Source/FIRAuth.m; sourceTree = ""; }; + 1DF8A643199F293F7BD1D067690F0419 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; + 1E0A0CCFA3173BDDDABA9DA3E0DD3058 /* FPendingPut.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPendingPut.m; path = Firebase/Database/Persistence/FPendingPut.m; sourceTree = ""; }; + 1E5EB85DAF4F8597657CB9004635F334 /* arena.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = arena.h; path = util/arena.h; sourceTree = ""; }; + 1E74BF9B3F916FD5E44DD1C0F035D0E8 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = ""; }; + 1E939A429E0075D9CBD198F9A137CDEB /* RLMRealmConfiguration+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealmConfiguration+Sync.mm"; path = "Realm/RLMRealmConfiguration+Sync.mm"; sourceTree = ""; }; + 1EB3F0C07B44D28853ADDFB2D43A7DA8 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1ED126BBB5AE4F23E031D69A6E6E38F2 /* SVProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressHUD.m; path = SVProgressHUD/SVProgressHUD.m; sourceTree = ""; }; + 1EF123F105531FD9F000814A28719AC6 /* FIRAuthBackend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthBackend.h; path = Firebase/Auth/Source/RPCs/FIRAuthBackend.h; sourceTree = ""; }; + 1F0994DB24D3819F0A16FC1E9B6989EC /* SVProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-umbrella.h"; sourceTree = ""; }; + 1F4823FC39667A5B8492225E3E4614C1 /* FIRAuthURLPresenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthURLPresenter.h; path = Firebase/Auth/Source/FIRAuthURLPresenter.h; sourceTree = ""; }; + 1F53AC3B56E84F6C31D6266D4C53141F /* FIRGetProjectConfigRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetProjectConfigRequest.m; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigRequest.m; sourceTree = ""; }; + 1F691853BFC1A254495084C3FB79AB1E /* testutil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testutil.h; path = util/testutil.h; sourceTree = ""; }; + 201A7B45C4CCEE36C1DB90B0119E7F7D /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = RealmSwift/Object.swift; sourceTree = ""; }; + 2027D37EFACF602AB29CAD43E4F356CF /* GoogleToolboxForMac.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleToolboxForMac.xcconfig; sourceTree = ""; }; + 2094731F48DB5E9C42E24E7B280C9467 /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = ""; }; + 20A50F221F900E02D2064844A565AB7A /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; + 20CCF052EE82D7B150FCD5F5B9410BC9 /* RLMRealm.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealm.mm; path = Realm/RLMRealm.mm; sourceTree = ""; }; + 216C148E7AAB55B4A42CA429789C1B65 /* db_iter.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = db_iter.cc; path = db/db_iter.cc; sourceTree = ""; }; + 21A74F61C5F4B30CF6861EE4EB5132E2 /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = ""; }; + 21E20683F3B793D3A157713ADCCC4326 /* FPriorityIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPriorityIndex.m; path = Firebase/Database/FPriorityIndex.m; sourceTree = ""; }; + 21E80C1DA37DB6B3201C7AA374EF11A5 /* FIRAuthAppCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAppCredential.m; path = Firebase/Auth/Source/FIRAuthAppCredential.m; sourceTree = ""; }; + 2210E1182B560036258B75812788793F /* sync_permission.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_permission.cpp; path = Realm/ObjectStore/src/sync/sync_permission.cpp; sourceTree = ""; }; + 2212B2E5596BBBAFF0595D2AF702C7E7 /* FIRAuthAppCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAppCredential.h; path = Firebase/Auth/Source/FIRAuthAppCredential.h; sourceTree = ""; }; + 224372ECAFA42A4C308C2D50769DC77D /* RLMRealm_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Dynamic.h; path = include/RLMRealm_Dynamic.h; sourceTree = ""; }; + 2257C36FAF75A4FB0D99C1241C6E16B9 /* uuid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = uuid.cpp; path = Realm/ObjectStore/src/util/uuid.cpp; sourceTree = ""; }; + 22F6A6E6A8625C1034D78A2DD20B6BA0 /* after.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = after.m; path = Sources/after.m; sourceTree = ""; }; + 232808034064F52672DDDD3772D6D6B9 /* FIRCreateAuthURIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCreateAuthURIResponse.m; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIResponse.m; sourceTree = ""; }; + 232B22E07A6BC74BA295F2C97C41A5AA /* FTreeNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeNode.m; path = Firebase/Database/Core/Utilities/FTreeNode.m; sourceTree = ""; }; + 235F1DC8E299757F7CD88AE7BC4C870C /* FIRSendVerificationCodeRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSendVerificationCodeRequest.m; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.m; sourceTree = ""; }; + 2434D6C0B6C4E024F00F8DEF27C2ADA6 /* RLMSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSchema.mm; path = Realm/RLMSchema.mm; sourceTree = ""; }; + 2457D6701A727AD6979D51B5D4CA8B77 /* FTreeNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeNode.h; path = Firebase/Database/Core/Utilities/FTreeNode.h; sourceTree = ""; }; + 25183A1EC546EA54A19D49147C8B6C96 /* FTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTree.h; path = Firebase/Database/Core/Utilities/FTree.h; sourceTree = ""; }; + 2569C5D166871F0F359DDD5AB060C79D /* SwiftChart-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftChart-dummy.m"; sourceTree = ""; }; + 26AE500AF9F1DBA7221343754C918896 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; + 26BD96A6922E4DCAD8D864596F9E81C6 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; + 280A7778B9DD0C0A6F6D11AD9BEB2B6F /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + 287F35AA416E82C14EC56D5D7EE2456B /* FLLRBEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBEmptyNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h; sourceTree = ""; }; + 28C9F16B6AE6D029F061F53E7C2D1D15 /* FirebaseAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 28CD9EDF9D1D1A4EE362482970394330 /* RLMSyncPermission.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermission.mm; path = Realm/RLMSyncPermission.mm; sourceTree = ""; }; + 28F119668FF12921B1FEC53A13230593 /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; + 293C7A983AE41C61AA2B460A3B6E9B28 /* FirebaseAuthVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FirebaseAuthVersion.m; path = Firebase/Auth/Source/FirebaseAuthVersion.m; sourceTree = ""; }; + 29967233CB796B2BF275C6A16585480D /* Pods_pocloud.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_pocloud.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29FF2AAEEC380825664B6FA356F39907 /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = ""; }; + 2A132F01DDE0C5955D7C9BBBA204B3F3 /* RLMRealmConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration.h; path = include/RLMRealmConfiguration.h; sourceTree = ""; }; + 2A2C2720C0CA75A68F8506D31EB8D003 /* FQuerySpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQuerySpec.m; path = Firebase/Database/Core/FQuerySpec.m; sourceTree = ""; }; + 2A321494C32F7A4E6CF1410A4936CD62 /* dbformat.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = dbformat.cc; path = db/dbformat.cc; sourceTree = ""; }; 2A32A5F933056AF0BB4CC991F44AE061 /* Pods-pocloud.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-pocloud.release.xcconfig"; sourceTree = ""; }; - 2A3AECC5D8915010C88CBE3F8300815E /* Kingfisher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Kingfisher.modulemap; sourceTree = ""; }; - 2A8B461A3C236049243EE3D07036E86F /* FIRGetAccountInfoRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetAccountInfoRequest.m; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.m; sourceTree = ""; }; - 2A8EDCC8327F45F2337D1751B6527A39 /* FIndexedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedFilter.m; path = Firebase/Database/Core/View/Filter/FIndexedFilter.m; sourceTree = ""; }; - 2B3E601205A45E5D22D3132B15576A4E /* RLMRealmConfiguration+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealmConfiguration+Sync.h"; path = "include/RLMRealmConfiguration+Sync.h"; sourceTree = ""; }; - 2C0508B893BA3752988AAB9C06416A7C /* fbase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fbase64.h; path = Firebase/Database/third_party/SocketRocket/fbase64.h; sourceTree = ""; }; - 2C7310AD32194E0C9E8955706B4FD9A7 /* FRepo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo.h; path = Firebase/Database/Core/FRepo.h; sourceTree = ""; }; - 2C738177964ED52E8059D490D1A0500E /* FNextPushId.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNextPushId.m; path = Firebase/Database/Utilities/FNextPushId.m; sourceTree = ""; }; - 2CC7B9007790C3A994D2A077B2A10C42 /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/KingfisherOptionsInfo.swift; sourceTree = ""; }; - 2DC347A6ED7C92D386603D2735988B2E /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - 2E2C48448E1B625868FB98BB8BBEEE7F /* FArraySortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FArraySortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m; sourceTree = ""; }; - 2E58F66E1475886462800C6EAC1AB058 /* FirebaseAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseAuth-umbrella.h"; sourceTree = ""; }; - 2E819A65E8B105C06E39112892043DEC /* sync_manager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_manager.cpp; path = Realm/ObjectStore/src/sync/sync_manager.cpp; sourceTree = ""; }; - 2E9FBABB0B0834F4086D311AE5C7DB67 /* list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list.cpp; path = Realm/ObjectStore/src/list.cpp; sourceTree = ""; }; - 2EBF93A215B2032494BF204BA394E419 /* RLMCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection.h; path = include/RLMCollection.h; sourceTree = ""; }; - 2EC81608667CC5841981197E2B59D6F3 /* FEventRaiser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRaiser.h; path = Firebase/Database/Core/View/FEventRaiser.h; sourceTree = ""; }; - 2ED40CA21C81D183487E2AA1EE13C818 /* FTupleStringNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleStringNode.h; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.h; sourceTree = ""; }; - 2EE089B6DFD2B2508B0CB8D72C7E3C2B /* NSError+RLMSync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+RLMSync.h"; path = "include/NSError+RLMSync.h"; sourceTree = ""; }; - 2F2A5B73006D792A2363C64C06E8316A /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = ""; }; - 2F6BFDF488B63BC769F213FF0D28D968 /* FMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMerge.m; path = Firebase/Database/Core/Operation/FMerge.m; sourceTree = ""; }; - 2F759D8E1D8B844B0E78E9AD43486080 /* skiplist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = skiplist.h; path = db/skiplist.h; sourceTree = ""; }; - 3015660C97A402971AD6C28366206CA9 /* NSData+SRB64Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+SRB64Additions.m"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m"; sourceTree = ""; }; - 308234130A4AF00BC7A2DE4461215CB0 /* FIRAuthInternalErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthInternalErrors.h; path = Firebase/Auth/Source/FIRAuthInternalErrors.h; sourceTree = ""; }; - 30BA23BD9B339BBC6480ADF054F0EA91 /* ObjectSchema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectSchema.swift; path = RealmSwift/ObjectSchema.swift; sourceTree = ""; }; - 30C133579CAA0F7792D10746A36A6795 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RealmSwift/Error.swift; sourceTree = ""; }; - 31237C6D89A7D53CAA2C360547EBB637 /* RLMOptionalBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMOptionalBase.mm; path = Realm/RLMOptionalBase.mm; sourceTree = ""; }; - 3164B469BD414382EA5E78E4DBB45513 /* FConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConstants.m; path = Firebase/Database/Constants/FConstants.m; sourceTree = ""; }; - 316EC660ACCEC0B560483E4DD14BA386 /* filter_policy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_policy.h; path = include/leveldb/filter_policy.h; sourceTree = ""; }; - 3183AF069AE0091159320866D444ACD6 /* RLMObject_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject_Private.h; path = include/RLMObject_Private.h; sourceTree = ""; }; - 31866ACC5E21CEE03E543BB6578BDC03 /* mutexlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mutexlock.h; path = util/mutexlock.h; sourceTree = ""; }; - 318F1A2D4EC60AC43046D5DA67C51D47 /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Source/GTMSessionFetcherService.m; sourceTree = ""; }; - 3194D3992438F30D90F545F8B6BB8776 /* db.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db.h; path = include/leveldb/db.h; sourceTree = ""; }; - 31E90C01CF879F35869F5A24A5B7E614 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; - 320406F57594C563FC22B268CF497450 /* FIRSecureTokenService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSecureTokenService.m; path = Firebase/Auth/Source/FIRSecureTokenService.m; sourceTree = ""; }; - 3209A5685F06611A1F5C751F8845366F /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image.swift; sourceTree = ""; }; - 3248E4707C43400D306C8D449F602C0A /* FParsedUrl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FParsedUrl.m; path = Firebase/Database/Utilities/FParsedUrl.m; sourceTree = ""; }; - 324F54FD594D01AFB378373F9C8932B6 /* FRepoManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoManager.m; path = Firebase/Database/Core/FRepoManager.m; sourceTree = ""; }; - 3301F78BD509C4ED05D8305AEE34B15A /* FImmutableTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableTree.m; path = Firebase/Database/Core/Utilities/FImmutableTree.m; sourceTree = ""; }; - 331EFA91C37C85605E3C91F45C0B4798 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 336695E3293627D6C7CB4B9F63001010 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 337BAD4B73E2EB61F0439C9EED57D9F8 /* RLMRealmConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration.h; path = include/RLMRealmConfiguration.h; sourceTree = ""; }; - 33CD335E9D0AEF1131817DF3B362D6A4 /* RLMObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObject.mm; path = Realm/RLMObject.mm; sourceTree = ""; }; - 34173751FD882FD988CB7527BF3F51F0 /* RLMRealmConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmConfiguration.mm; path = Realm/RLMRealmConfiguration.mm; sourceTree = ""; }; - 3419E8890B5ECC68471FF7152A9D3867 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; - 3433F65AF7DBB7D1F226BB0FFD59F40B /* GTMSessionFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcher.m; path = Source/GTMSessionFetcher.m; sourceTree = ""; }; - 344282A34D78727F32CD1188E0A98BD4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 34BEF567AC5697DBC621C486D4EAE245 /* Aliases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Aliases.swift; path = RealmSwift/Aliases.swift; sourceTree = ""; }; - 34D95573EC44BD0D72B1330888525CC8 /* format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format.h; path = table/format.h; sourceTree = ""; }; - 34E21A819095A6B738F359A7AED31A05 /* FIRGoogleAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGoogleAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Google/FIRGoogleAuthProvider.m; sourceTree = ""; }; - 34E669C7C4D8508C8254BE9C56063841 /* FIRVerifyCustomTokenRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyCustomTokenRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.h; sourceTree = ""; }; - 34FB0AC26A184602B86A7C9B582D0D62 /* FTupleObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjects.h; path = Firebase/Database/Utilities/Tuples/FTupleObjects.h; sourceTree = ""; }; - 35343AFE86D3B019B15E621A0AE69B29 /* FIRGoogleAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGoogleAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Google/FIRGoogleAuthCredential.m; sourceTree = ""; }; - 35D5A4E05152C08B2026704262E08F82 /* FSnapshotHolder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotHolder.h; path = Firebase/Database/Core/FSnapshotHolder.h; sourceTree = ""; }; - 3615F35A23B930ABFA9ED2322FE545A9 /* FIRAuthSerialTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthSerialTaskQueue.m; path = Firebase/Auth/Source/FIRAuthSerialTaskQueue.m; sourceTree = ""; }; - 3694A4FAEFDB9C1ADCE833F4D9151E11 /* SwiftChart.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftChart.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 36BAB10C547C609FD6ADE9F03AB68684 /* FIRMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMutableDictionary.m; path = Firebase/Core/FIRMutableDictionary.m; sourceTree = ""; }; - 36D1265351704DD5A9610C3579CD18B6 /* GoogleToolboxForMac-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleToolboxForMac-dummy.m"; sourceTree = ""; }; - 36E1C5E57E92B11E6EB24E5ACAC73E70 /* RealmSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RealmSwift-dummy.m"; sourceTree = ""; }; - 378C81AC447EC1755C6AE069A0AA329F /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; - 37BD44BE580F43C7D3714FD1B0663CC1 /* sync_file.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_file.cpp; path = Realm/ObjectStore/src/sync/impl/sync_file.cpp; sourceTree = ""; }; - 3823BB85C260F0B5558755549E60251A /* ThreadHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadHelper.swift; path = Sources/ThreadHelper.swift; sourceTree = ""; }; - 383E5AC85A03FCAAD90BBA38871A2074 /* RLMSyncConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration_Private.h; path = include/RLMSyncConfiguration_Private.h; sourceTree = ""; }; - 3894693FC755AD6DDCA6821228CF105F /* FIRAuthOperationType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthOperationType.h; path = Firebase/Auth/Source/FIRAuthOperationType.h; sourceTree = ""; }; - 391DE7AC210A9CA140C59DA7B60C4FCD /* FIROAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/OAuth/FIROAuthCredential.h; sourceTree = ""; }; - 3937C1C917C4F53ADE64AF1D80858EE4 /* table_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = table_builder.cc; path = table/table_builder.cc; sourceTree = ""; }; - 393E34A6743DCFE11EA0EB1A258748E5 /* FTupleSetIdPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleSetIdPath.h; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h; sourceTree = ""; }; - 397B9F7253E8B343B730257BB2F433C1 /* FTrackedQueryManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQueryManager.h; path = Firebase/Database/Persistence/FTrackedQueryManager.h; sourceTree = ""; }; + 2A34D3F39FEB7F56A29186833EC296F9 /* FIRGetOOBConfirmationCodeResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetOOBConfirmationCodeResponse.h; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeResponse.h; sourceTree = ""; }; + 2A38E7D7C3143EA1BC1A47DB34190AFA /* Results.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Results.swift; path = RealmSwift/Results.swift; sourceTree = ""; }; + 2A7722D16D60668CF76D4702AF57DC0F /* IHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IHighlighter.swift; path = Source/Charts/Highlight/IHighlighter.swift; sourceTree = ""; }; + 2A7A71481572CA991F801E3AE699F86B /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = ""; }; + 2A7C94A8565150F3D5973A944B036DFA /* Chart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Chart.swift; path = Source/Chart.swift; sourceTree = ""; }; + 2AC43C20083FD29C4BA5E6007413C904 /* version_edit.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = version_edit.cc; path = db/version_edit.cc; sourceTree = ""; }; + 2ACA0E304694370331B93C86691A008B /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/RequestModifier.swift; sourceTree = ""; }; + 2B6F4E71F3E662268B000FB6188BAD89 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = ""; }; + 2BDC899AA4D8B7FCCD880ADD36E35139 /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = ""; }; + 2C3645ECCA826261E84A744D29DC5C0D /* FAckUserWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAckUserWrite.m; path = Firebase/Database/Core/Operation/FAckUserWrite.m; sourceTree = ""; }; + 2C59A83B471A80E86C01C72ADDBC60A2 /* FIRPhoneAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRPhoneAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthCredential.m; sourceTree = ""; }; + 2CC87E8DFFF489B5DD3DC02CD07847AA /* GTMNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMNSData+zlib.h"; path = "Foundation/GTMNSData+zlib.h"; sourceTree = ""; }; + 2D4904E5E343C601FAD9F45EC07DD8E9 /* FListenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenProvider.h; path = Firebase/Database/Core/FListenProvider.h; sourceTree = ""; }; + 2D51D40740CDB76A9ACF99F540201831 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2D708ECEC790FEFE693A914A41CFAA86 /* GoogleToolboxForMac-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-prefix.pch"; sourceTree = ""; }; + 2D984D136EC467110E22895C4CAD8800 /* APLevelDB.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = APLevelDB.mm; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm"; sourceTree = ""; }; + 2E6B7CC96CD5AA76DD12A439130B6611 /* FEventRaiser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRaiser.h; path = Firebase/Database/Core/View/FEventRaiser.h; sourceTree = ""; }; + 2E6E79E4292D1C39541705A2F37D9CFA /* FLevelDBStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLevelDBStorageEngine.h; path = Firebase/Database/Persistence/FLevelDBStorageEngine.h; sourceTree = ""; }; + 2E7325D090D50E37131B7FBF3667C45D /* RLMSyncManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncManager.mm; path = Realm/RLMSyncManager.mm; sourceTree = ""; }; + 2EA181D43D337C3F302053D11C402B08 /* FValidation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValidation.m; path = Firebase/Database/Utilities/FValidation.m; sourceTree = ""; }; + 2ECF6930DF18520ED0FB7F63A838701A /* FWriteRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteRecord.m; path = Firebase/Database/Core/FWriteRecord.m; sourceTree = ""; }; + 2EE91D7B97587454F8A81B6DCE1D0914 /* Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sync.swift; path = RealmSwift/Sync.swift; sourceTree = ""; }; + 2F3AFDE6C4F8D8F3DE8DAEC14E749E5D /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; + 2F5F203A63679CF16684B77792FF7F9A /* FIndexedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedNode.h; path = Firebase/Database/Snapshot/FIndexedNode.h; sourceTree = ""; }; + 2FA00D6E3B238AF862DF4EF298FF9E26 /* Kingfisher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-prefix.pch"; sourceTree = ""; }; + 2FB073AF368B2BF119966220911E6F33 /* FRepo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo.h; path = Firebase/Database/Core/FRepo.h; sourceTree = ""; }; + 2FF1EA91EB07C651A380A1E0ECAAA4BE /* AxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRendererBase.swift; path = Source/Charts/Renderers/AxisRendererBase.swift; sourceTree = ""; }; + 3089385BC493F2C6B225BFCFD6D072F8 /* FIRResetPasswordResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRResetPasswordResponse.m; path = Firebase/Auth/Source/RPCs/FIRResetPasswordResponse.m; sourceTree = ""; }; + 30AFAA378425E249D5029B3DE664BA39 /* IValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IValueFormatter.swift; path = Source/Charts/Formatters/IValueFormatter.swift; sourceTree = ""; }; + 30ECAD789542E5E5E38B16F9291EEE31 /* LineRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarRenderer.swift; path = Source/Charts/Renderers/LineRadarRenderer.swift; sourceTree = ""; }; + 3121C1AA2669BA601A1F89BBEC089E48 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; + 31486ABB90DDFF1BFB652E279892932E /* dumpfile.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = dumpfile.cc; path = db/dumpfile.cc; sourceTree = ""; }; + 315C7FDA3CA5D1664929CEA6E882ADCA /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; + 32A41D9C686AD397B8031F0A4A3E8684 /* DataApproximator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataApproximator.swift; path = Source/Charts/Filters/DataApproximator.swift; sourceTree = ""; }; + 32ED3B43377B30A557082FF4A1F8E418 /* Charts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-prefix.pch"; sourceTree = ""; }; + 32F0ACF7382F5D686B491846D9C1BCDB /* FIRAuthGlobalWorkQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthGlobalWorkQueue.h; path = Firebase/Auth/Source/FIRAuthGlobalWorkQueue.h; sourceTree = ""; }; + 33030D2F5C687747F75E642267737AE1 /* cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cache.h; path = include/leveldb/cache.h; sourceTree = ""; }; + 3319C402AAC42193BCF9797D4E79044F /* Property.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Property.swift; path = RealmSwift/Property.swift; sourceTree = ""; }; + 331C5BE3EBECEF6AE93C09CD0EDD6D68 /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; }; + 3363F7773DA62E15F8134331A08DF665 /* RLMObjectSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectSchema.mm; path = Realm/RLMObjectSchema.mm; sourceTree = ""; }; + 3429DADBDACA9E36CC4E3ACD319C05E4 /* FIRNetworkLoggerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkLoggerProtocol.h; path = Firebase/Core/Private/FIRNetworkLoggerProtocol.h; sourceTree = ""; }; + 3453E22357E9358959E5D71E2DAF4BBE /* SVProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SVProgressHUD.modulemap; sourceTree = ""; }; + 34641035AAE57AD3EB93FC9662E87FC4 /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = ""; }; + 34653C25E996950D43F4FD9ACEC18968 /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = ""; }; + 3481B02F02ECC97DA0B8011CC82FF918 /* SwiftChart.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftChart.xcconfig; sourceTree = ""; }; + 34FD2D68E9188EB20D44ABB5C0544791 /* GTMSessionFetcher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.xcconfig; sourceTree = ""; }; + 350DC54E5CA7208005D14E60E07D2C77 /* FIRGetProjectConfigRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetProjectConfigRequest.h; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigRequest.h; sourceTree = ""; }; + 3622D6061A94CE8E0352320B60C699A7 /* write_batch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch.h; path = include/leveldb/write_batch.h; sourceTree = ""; }; + 362650F9E56450FD8BF4CD45E583431E /* FLeafNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLeafNode.h; path = Firebase/Database/Snapshot/FLeafNode.h; sourceTree = ""; }; + 366D8A8E2FF58285B0186633F54F719C /* GTMSessionFetcherService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherService.h; path = Source/GTMSessionFetcherService.h; sourceTree = ""; }; + 36A32DA6C600AD919DF9563684CB94A4 /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = ""; }; + 36E13BF49B439761787CC6DDCE1798F5 /* Kingfisher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-umbrella.h"; sourceTree = ""; }; + 36E5BEE289ED2023AFE06214DE18BBDE /* RLMSyncCredentials.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSyncCredentials.m; path = Realm/RLMSyncCredentials.m; sourceTree = ""; }; + 37266CD26FD5C3B0080BAB63BC24AFE7 /* RLMSyncPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncPermission.h; path = include/RLMSyncPermission.h; sourceTree = ""; }; + 372B7BB1862C377115782F21A6331990 /* FIRAuthDefaultUIDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthDefaultUIDelegate.m; path = Firebase/Auth/Source/FIRAuthDefaultUIDelegate.m; sourceTree = ""; }; + 3737B67C2FBF160C0F95ABA8B4F3DB50 /* list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list_notifier.cpp; path = Realm/ObjectStore/src/impl/list_notifier.cpp; sourceTree = ""; }; + 375FDBDD269DC8FE8E87898CECCB23F5 /* FIRDataSnapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDataSnapshot.m; path = Firebase/Database/Api/FIRDataSnapshot.m; sourceTree = ""; }; + 3762AB6CDCABD4BA24DD01E8F6717177 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; + 376774FD7327BE1E1FF438C025FC4E81 /* RLMListBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMListBase.mm; path = Realm/RLMListBase.mm; sourceTree = ""; }; + 37E12B6FCBA64AA69BBC0C69C20791A7 /* FIRDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabase.m; path = Firebase/Database/Api/FIRDatabase.m; sourceTree = ""; }; + 382927EF1280F083D91F4ADC1BA04611 /* c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = c.h; path = include/leveldb/c.h; sourceTree = ""; }; + 383BD85CF714DAA8F61D7455906ADB3F /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; + 3848A12626CAE2A525C49A334A9E72A9 /* merger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = merger.h; path = table/merger.h; sourceTree = ""; }; + 384BF7ADE20F623BB87B6771A9E0159E /* ObjectSchema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectSchema.swift; path = RealmSwift/ObjectSchema.swift; sourceTree = ""; }; + 3852929DA5FB50C214BFD56D757A1C62 /* RLMCollection.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMCollection.mm; path = Realm/RLMCollection.mm; sourceTree = ""; }; + 390993B058394CBF562C99D0708C2B78 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; + 394217BF43925049167B82BEE13124F6 /* hang.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = hang.swift; path = Sources/hang.swift; sourceTree = ""; }; 39805068056EB58D370D71A27CD2F678 /* Pods-pocloud-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-pocloud-umbrella.h"; sourceTree = ""; }; - 39B3FAF29B072E0393348D9393D31AD4 /* FDataEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FDataEvent.h; path = Firebase/Database/Core/View/FDataEvent.h; sourceTree = ""; }; - 39C3B310CEE800AC9572C07D5EE7954D /* RLMSyncConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration.h; path = include/RLMSyncConfiguration.h; sourceTree = ""; }; - 39CD106DAA14CF78C23C7060CE05739E /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; - 3AB5FBC45585C1A361662B4CD7EE76C5 /* FTypedefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs.h; path = Firebase/Database/Utilities/FTypedefs.h; sourceTree = ""; }; - 3B26CD3AE15CAFA6F3AA2D461C1A96F4 /* FIRUserInfoImpl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRUserInfoImpl.m; path = Firebase/Auth/Source/FIRUserInfoImpl.m; sourceTree = ""; }; - 3B3AA80D8B2AF7C36A131F15E22D7503 /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/KingfisherManager.swift; sourceTree = ""; }; - 3B47CEC728C7969B0515AFA0224C3BAD /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON.swift; sourceTree = ""; }; - 3B61F0E6347F886A15B6123340937E6D /* FIRNetwork.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNetwork.m; path = Firebase/Core/FIRNetwork.m; sourceTree = ""; }; - 3B6B274BA55924A32D1099D55AE060EC /* FIRSignUpNewUserRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSignUpNewUserRequest.m; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.m; sourceTree = ""; }; - 3C986E51C8A5D6AA268C2B5C679439D7 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - 3CB6AE028F0001B0D4C44A5AEE15445D /* FQueryParams.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQueryParams.m; path = Firebase/Database/Core/FQueryParams.m; sourceTree = ""; }; - 3CF4365D76D4198C829B63404CF2ED16 /* block_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = block_builder.cc; path = table/block_builder.cc; sourceTree = ""; }; - 3D025D271898248FCA3ED5E9FB44D563 /* FIRAuthAPNSToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAPNSToken.m; path = Firebase/Auth/Source/FIRAuthAPNSToken.m; sourceTree = ""; }; - 3D42BE6FB6E20A86A3704AEA15994D4B /* FIREmailAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailAuthProvider.h; path = Firebase/Auth/Source/Public/FIREmailAuthProvider.h; sourceTree = ""; }; - 3D86498062747657DA44EF4E4FC1D64B /* FServerValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FServerValues.h; path = Firebase/Database/Core/FServerValues.h; sourceTree = ""; }; - 3E0A2CF79462B3B4ED47BA6C8B900FFB /* ChameleonFramework.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.xcconfig; sourceTree = ""; }; - 3E19D6AC7CA5E9702F50748E38632183 /* RealmSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-umbrella.h"; sourceTree = ""; }; - 3E37786C25F05296621C72208689D84C /* FIRAuthTokenResult_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthTokenResult_Internal.h; path = Firebase/Auth/Source/FIRAuthTokenResult_Internal.h; sourceTree = ""; }; - 3E67C6A3497AB7667575DD1278AEC1BD /* FIRUserMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRUserMetadata.m; path = Firebase/Auth/Source/FIRUserMetadata.m; sourceTree = ""; }; - 3E898E5D1BA5EA8F89D088FAF791C281 /* network_reachability_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = network_reachability_observer.cpp; path = Realm/ObjectStore/src/sync/impl/apple/network_reachability_observer.cpp; sourceTree = ""; }; - 3F16D423F4F3C3ED7305FAE90EA8E5BD /* FirebaseAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseAuth.modulemap; sourceTree = ""; }; - 3F1E3D0F84BB635CD5899B141258779C /* status.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = status.cc; path = util/status.cc; sourceTree = ""; }; - 3F4FC47F1C6CE579B1454BCD296B49E1 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Source/GTMSessionFetcherLogging.h; sourceTree = ""; }; - 3FCE8941552AD50778D44D36BF09208B /* GTMSessionFetcher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.xcconfig; sourceTree = ""; }; - 3FE630FD8A52F7623FB9F430DFE83D2F /* FIRGitHubAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGitHubAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/GitHub/FIRGitHubAuthCredential.h; sourceTree = ""; }; - 3FEED253C14771AB979BE87C47893FD4 /* testutil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testutil.h; path = util/testutil.h; sourceTree = ""; }; - 404A99971E2E296714F6D9264DE6AEB5 /* FChildrenNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildrenNode.m; path = Firebase/Database/Snapshot/FChildrenNode.m; sourceTree = ""; }; - 40CFA3DB2710C9150755686D9980A781 /* FIRAuthWebView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthWebView.m; path = Firebase/Auth/Source/FIRAuthWebView.m; sourceTree = ""; }; - 40F1951617C35D1A46317044DEFCFBEA /* FPersistenceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistenceManager.m; path = Firebase/Database/Persistence/FPersistenceManager.m; sourceTree = ""; }; - 41704C34A45976B3B0D3501C353F987E /* GoogleToolboxForMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleToolboxForMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4173B25E8676D5EAA0F87AC0ED739271 /* PromiseKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromiseKit-umbrella.h"; sourceTree = ""; }; - 4199CB4345C0D7BDF479307A0449F1EF /* FLevelDBStorageEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLevelDBStorageEngine.m; path = Firebase/Database/Persistence/FLevelDBStorageEngine.m; sourceTree = ""; }; - 4286EFABA0810BD8CF4B7BD2281E6F04 /* c.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = c.cc; path = db/c.cc; sourceTree = ""; }; - 429CCB87B4917463265B13D18456A99E /* GTMSessionUploadFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionUploadFetcher.h; path = Source/GTMSessionUploadFetcher.h; sourceTree = ""; }; - 4351F9D1008713ABC051703842527BD1 /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = Firebase/Core/Public/FirebaseCore.h; sourceTree = ""; }; - 443BCF90C7092142D43607C82A16AB2B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 44410CE7FD1EFF628F5BDD09B35F2422 /* SortDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SortDescriptor.swift; path = RealmSwift/SortDescriptor.swift; sourceTree = ""; }; - 44495764D29A5192248157697337ABAE /* FEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventEmitter.h; path = Firebase/Database/Utilities/FEventEmitter.h; sourceTree = ""; }; - 4454874BDA6C240BEC5ECC1610A46832 /* FirebaseDatabase.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseDatabase.modulemap; sourceTree = ""; }; - 44AE3BAA3E5EE58F48C87AF1F5F3FF88 /* FRangeMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangeMerge.m; path = Firebase/Database/Core/FRangeMerge.m; sourceTree = ""; }; - 44C39CC8C63A8007E41CB05DB0BFB08A /* PromiseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PromiseKit.h; path = Sources/PromiseKit.h; sourceTree = ""; }; - 44EF79207E2E34DFCC5AF186C2A10740 /* SVProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressHUD.m; path = SVProgressHUD/SVProgressHUD.m; sourceTree = ""; }; - 45900142225A457954B103E20C8837B1 /* FIRAuthExceptionUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthExceptionUtils.m; path = Firebase/Auth/Source/FIRAuthExceptionUtils.m; sourceTree = ""; }; - 45A2BF0065145556D3A453FA0506E67F /* FIRAuthRPCResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthRPCResponse.h; path = Firebase/Auth/Source/RPCs/FIRAuthRPCResponse.h; sourceTree = ""; }; - 45D545BE1C689816A8345AC0B5691A94 /* leveldb-library-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-umbrella.h"; sourceTree = ""; }; - 460EB96A504341E7527BEDAA1FEDEFA7 /* FIRAuthWebUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthWebUtils.m; path = Firebase/Auth/Source/FIRAuthWebUtils.m; sourceTree = ""; }; - 466FEFCBFC76BDE5BC10B8EC12AD813E /* FIRUserInfoImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserInfoImpl.h; path = Firebase/Auth/Source/FIRUserInfoImpl.h; sourceTree = ""; }; - 467113AD6072BC4157BB38F53BB959C9 /* FIRAuthAppCredentialManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAppCredentialManager.m; path = Firebase/Auth/Source/FIRAuthAppCredentialManager.m; sourceTree = ""; }; - 46F7A37638CB3624A41208437A049DCB /* FTupleOnDisconnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleOnDisconnect.h; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h; sourceTree = ""; }; - 476E8E54604E4CD6B03F317728CC19F1 /* FTupleNodePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleNodePath.m; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.m; sourceTree = ""; }; - 47E0583817CDAF3174410BE29308E175 /* FIRGetOOBConfirmationCodeRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetOOBConfirmationCodeRequest.m; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.m; sourceTree = ""; }; - 486A22C0B0F79526DA6C0AD53C26AB4C /* GoogleToolboxForMac-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-umbrella.h"; sourceTree = ""; }; - 4887B8B0CF7F087448CFB1B1B9B8C687 /* comparator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = comparator.h; path = include/leveldb/comparator.h; sourceTree = ""; }; - 48CF6D56AF692E9D87F5F950E5F4D13A /* SwiftChart.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftChart.modulemap; sourceTree = ""; }; - 48E989AA5700F2285C547EB9FFEA04CE /* merger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = merger.h; path = table/merger.h; sourceTree = ""; }; - 4929B54A9E9DECE6438DB81F21C0C5A4 /* race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = race.m; path = Sources/race.m; sourceTree = ""; }; - 498D7CB872B9E3F3206280DD6302C75B /* FArraySortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FArraySortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h; sourceTree = ""; }; - 4A1FF3997E9161B9290C7D1608B82DA0 /* FTreeNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeNode.m; path = Firebase/Database/Core/Utilities/FTreeNode.m; sourceTree = ""; }; - 4A6933FE1C6A29ECA799CFB8C39C872A /* posix_logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = posix_logger.h; path = util/posix_logger.h; sourceTree = ""; }; - 4AA5D6181A6B4867451ED54A8080BA9B /* SVProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-umbrella.h"; sourceTree = ""; }; - 4AD1430AEFB88002077F297A1D31604D /* RLMRealm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm.h; path = include/RLMRealm.h; sourceTree = ""; }; - 4BC264E8DF5A12C41675C66DE5E782A8 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; - 4C0F91D2366FEC6EB1A7B28EE6A1888E /* FClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FClock.m; path = Firebase/Database/FClock.m; sourceTree = ""; }; - 4C7BC07DE3D0650ED280F57F67EC1995 /* SideMenuTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SideMenuTransition.swift; path = Pod/Classes/SideMenuTransition.swift; sourceTree = ""; }; - 4CCB66A239E1C2ECAB01A381ECD1C729 /* FEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEvent.h; path = Firebase/Database/Core/View/FEvent.h; sourceTree = ""; }; - 4D0567DE7174EB9965E6B3CE1BFFE735 /* FPendingPut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPendingPut.h; path = Firebase/Database/Persistence/FPendingPut.h; sourceTree = ""; }; - 4D23F10C68371CC69CFDF6EDFEE2FC50 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/ImageCache.swift; sourceTree = ""; }; - 4D259C8603FA80BC7A1615C037237352 /* FIRSecureTokenService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSecureTokenService.h; path = Firebase/Auth/Source/FIRSecureTokenService.h; sourceTree = ""; }; - 4DADFF37B1C1CC93D9F77D3FF6335047 /* FIRGoogleAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGoogleAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/Google/FIRGoogleAuthCredential.h; sourceTree = ""; }; - 4E5E5A2031B2F2B7760AC0A33A47EF55 /* atomic_pointer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = atomic_pointer.h; path = port/atomic_pointer.h; sourceTree = ""; }; - 4EC2388019816A657DA80E56F3C271AC /* FDataEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FDataEvent.m; path = Firebase/Database/Core/View/FDataEvent.m; sourceTree = ""; }; - 4F06DDE1647C1B4F556BF9208E5A502D /* FIRDataSnapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot.h; path = Firebase/Database/Public/FIRDataSnapshot.h; sourceTree = ""; }; - 4F1FE337DFE5384B74391B5ABFF41E34 /* FIRRetryHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRRetryHelper.h; path = Firebase/Database/Core/Utilities/FIRRetryHelper.h; sourceTree = ""; }; - 4F2BFDBF37C6024A37B98BF959ED74E8 /* FTreeSortedDictionaryEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionaryEnumerator.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m; sourceTree = ""; }; - 4F2C92932D029D32CCE07BD577973029 /* Resource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resource.swift; path = Sources/Resource.swift; sourceTree = ""; }; - 4F84176FB531E6C5C208B71882DF37C2 /* Pods_pocloud.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_pocloud.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4F8D7C8A6C66377EB7E20B0EC617C56F /* FIRGetAccountInfoRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetAccountInfoRequest.h; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.h; sourceTree = ""; }; - 4FAABD62DEB63315D1257B7D6CFEE2F8 /* FIRAuth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuth.m; path = Firebase/Auth/Source/FIRAuth.m; sourceTree = ""; }; + 3980B565D719CE507DDDD42C78FB99F3 /* RLMObject_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject_Private.h; path = include/RLMObject_Private.h; sourceTree = ""; }; + 3AAD93E1BFA39EFDECA5FCB3AA0ECB8F /* FIRAuthSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthSettings.h; path = Firebase/Auth/Source/Public/FIRAuthSettings.h; sourceTree = ""; }; + 3AD4FA8427B1312C45262C5BDE296F5F /* FIRAuthAppCredentialManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAppCredentialManager.h; path = Firebase/Auth/Source/FIRAuthAppCredentialManager.h; sourceTree = ""; }; + 3B09EA49F16E2D3D6352F64FFFD1F3EE /* SideMenu-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SideMenu-dummy.m"; sourceTree = ""; }; + 3B260F2EE1633471C17C65CE5372F231 /* SideMenu-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SideMenu-prefix.pch"; sourceTree = ""; }; + 3B4D3FD0F91CA23485218BEAEE8762E7 /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Source/Charts/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; + 3B9555B121522E2F0E813F56C059928C /* Realm.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Realm.modulemap; sourceTree = ""; }; + 3BAADCDBD533E680F27169B11D334626 /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; + 3BD7F7AFEACB911C1E58BD20E01E6603 /* FTupleObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjects.m; path = Firebase/Database/Utilities/Tuples/FTupleObjects.m; sourceTree = ""; }; + 3BE747726F4C08DBC004A12848155C35 /* FIRAuthOperationType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthOperationType.h; path = Firebase/Auth/Source/FIRAuthOperationType.h; sourceTree = ""; }; + 3C11DC37BFB910086B7157B9D7594F06 /* RLMSyncManager_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager_Private.h; path = include/RLMSyncManager_Private.h; sourceTree = ""; }; + 3C27A66A466D7FFCB2A215950F19AAB0 /* crc32c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crc32c.h; path = util/crc32c.h; sourceTree = ""; }; + 3C30AB285FB1E27391F35624231CAF69 /* FNamedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNamedNode.h; path = Firebase/Database/FNamedNode.h; sourceTree = ""; }; + 3C58BDE5B7D5777D539C0978DC434585 /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; + 3D000FE4E703132CF7C1BE92990CC8A8 /* FIRAuthErrorUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthErrorUtils.h; path = Firebase/Auth/Source/FIRAuthErrorUtils.h; sourceTree = ""; }; + 3EA08ED63DF6DAB479975D9F92E22AEC /* FTupleTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTransaction.m; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.m; sourceTree = ""; }; + 3EC58E2B8F7AA2D9E57176E74A476C5D /* block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block.h; path = table/block.h; sourceTree = ""; }; + 3F62946732F71AED467042243FAA5FF2 /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Frameworks/FirebaseAnalytics.framework; sourceTree = ""; }; + 3FF058BE3163AA9D893471E25897DB99 /* builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = builder.cc; path = db/builder.cc; sourceTree = ""; }; + 4001033DBF35BF25BC0B98754A934EDB /* FIRUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserInfo.h; path = Firebase/Auth/Source/Public/FIRUserInfo.h; sourceTree = ""; }; + 403605E683C012ED28DE82C12480818B /* RLMRealmConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration_Private.h; path = include/RLMRealmConfiguration_Private.h; sourceTree = ""; }; + 4047F4A05311DF2B78751ADBE1AC74BD /* memtable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = memtable.h; path = db/memtable.h; sourceTree = ""; }; + 404A48DBA1D7B997CB861D59714CED9A /* FirebaseAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseAuth.h; path = Firebase/Auth/Source/Public/FirebaseAuth.h; sourceTree = ""; }; + 40922B60DDED533B5B42EB02561856FF /* SVProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-prefix.pch"; sourceTree = ""; }; + 40ABF03F2985E93BB3E380F12A39EC3D /* FNextPushId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNextPushId.h; path = Firebase/Database/Utilities/FNextPushId.h; sourceTree = ""; }; + 40C9941C01EE06DEF4871CA17AAB434D /* FTupleNodePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleNodePath.m; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.m; sourceTree = ""; }; + 4140CE4FD05BC15BB6B384192DF8E87C /* RLMOptionalBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMOptionalBase.mm; path = Realm/RLMOptionalBase.mm; sourceTree = ""; }; + 4179670FD71912E5B9D26CCEE8F37EC7 /* FTupleUserCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleUserCallback.m; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.m; sourceTree = ""; }; + 41E52F8B6EA6CD346D94DC010914A333 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseCoreDiagnostics.framework; path = Frameworks/FirebaseCoreDiagnostics.framework; sourceTree = ""; }; + 429E85852D2E482D63FA507AC1AE51C5 /* FLeafNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLeafNode.m; path = Firebase/Database/Snapshot/FLeafNode.m; sourceTree = ""; }; + 42C98D92A054E4BDDEB04D0D9EF190C0 /* collection_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifier.cpp; path = Realm/ObjectStore/src/impl/collection_notifier.cpp; sourceTree = ""; }; + 42F0F570ACE3A2878722AD7FDA8285EB /* RealmSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-umbrella.h"; sourceTree = ""; }; + 430E9B8AB787A5CD66DBD7BEA7801919 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; + 430F20234467F7FEB69372E66DAAC7DD /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 431A8F2A7438C9305A9D8C6D36C495B5 /* env_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = env_posix.cc; path = util/env_posix.cc; sourceTree = ""; }; + 434FF1E5321E6CE0C9EB8CF520D77DAA /* FIRReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRReachabilityChecker.h; path = Firebase/Core/Private/FIRReachabilityChecker.h; sourceTree = ""; }; + 4350D3A1A82200DFEAEE25B15273EDBF /* RLMSyncUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUtil.mm; path = Realm/RLMSyncUtil.mm; sourceTree = ""; }; + 43A9EBC2EA34C42D100979AD4F05F516 /* FSyncPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncPoint.m; path = Firebase/Database/Core/FSyncPoint.m; sourceTree = ""; }; + 43FF6AFC778669992AB4360DC956E128 /* builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = builder.h; path = db/builder.h; sourceTree = ""; }; + 4407BCC12D6454A7C4DD5EB59989CB90 /* primitive_list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = primitive_list_notifier.cpp; path = Realm/ObjectStore/src/impl/primitive_list_notifier.cpp; sourceTree = ""; }; + 4510F4AED388F9675FCF452048EA5D63 /* FEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventEmitter.h; path = Firebase/Database/Utilities/FEventEmitter.h; sourceTree = ""; }; + 4551C926FA2A7BC7D0743024BB5070EF /* SideMenuTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SideMenuTransition.swift; path = Pod/Classes/SideMenuTransition.swift; sourceTree = ""; }; + 4570A996D9D1630514D541FA7101AF0C /* YAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRenderer.swift; path = Source/Charts/Renderers/YAxisRenderer.swift; sourceTree = ""; }; + 4584C41121CB16EE3CC6D95039BF3586 /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = ""; }; + 45BC269B6F04B95CD1E4A0A1EA849352 /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = Firebase/Core/Public/FIRAnalyticsConfiguration.h; sourceTree = ""; }; + 45C74B70411DB52E5DDD3045889C223C /* FIRActionCodeSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRActionCodeSettings.m; path = Firebase/Auth/Source/FIRActionCodeSettings.m; sourceTree = ""; }; + 460D3C961A1A8EDF95CAA7B40EBA41FB /* FOperationSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOperationSource.m; path = Firebase/Database/Core/Operation/FOperationSource.m; sourceTree = ""; }; + 464EF491A012E2A9F730BABE744586F8 /* String+MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+MD5.swift"; path = "Sources/String+MD5.swift"; sourceTree = ""; }; + 465C6DB6F98BC384E2736A18E50EA068 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; + 465ED0591EB38D21C157E29A477E471A /* FIREmailAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/EmailPassword/FIREmailAuthProvider.m; sourceTree = ""; }; + 468DFF9A4ABBE8AFEA1CAE8415194F96 /* Charts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Charts.modulemap; sourceTree = ""; }; + 46AE74B10F7C0E252596929E9503E189 /* FEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRegistration.h; path = Firebase/Database/Core/View/FEventRegistration.h; sourceTree = ""; }; + 46AE7A77ABF323FBAFEBAE18712E206E /* FWriteTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTree.h; path = Firebase/Database/Core/FWriteTree.h; sourceTree = ""; }; + 46CE34D58150B0A8EB66F7B68E8A4B10 /* FIRAnalyticsConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRAnalyticsConfiguration+Internal.h"; path = "Firebase/Core/Private/FIRAnalyticsConfiguration+Internal.h"; sourceTree = ""; }; + 46E25271D410A774F194F1F10C39DA7B /* FIRServerValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRServerValue.h; path = Firebase/Database/Public/FIRServerValue.h; sourceTree = ""; }; + 487094C994310B27F08E297BFD93E02A /* FIROAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/OAuth/FIROAuthProvider.m; sourceTree = ""; }; + 48911F3D7CC70E74BC850BF429644753 /* FIRDatabaseReference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseReference.m; path = Firebase/Database/FIRDatabaseReference.m; sourceTree = ""; }; + 48EF342504252DD6E318CC1EB4B5D80F /* FIRVerifyClientRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyClientRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.m; sourceTree = ""; }; + 49083177C89E42C5AFCAAE6801E470C3 /* RLMRealm+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealm+Sync.h"; path = "include/RLMRealm+Sync.h"; sourceTree = ""; }; + 491CFD164F40E413FFC753B87C65668E /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; + 4942026A8026CF7E076E0AA739AAAD29 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; + 495AEED16A11482422DFDC46FB1D420D /* options.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = options.cc; path = util/options.cc; sourceTree = ""; }; + 497F1096BACAE774E114FAEC740D5AD4 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = Firebase/Core/Private/FIROptionsInternal.h; sourceTree = ""; }; + 49A8C9A11E822DE5E8791CC26F950EEB /* Resource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resource.swift; path = Sources/Resource.swift; sourceTree = ""; }; + 49C424A7023DC591070581A5D6B10560 /* two_level_iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = two_level_iterator.h; path = table/two_level_iterator.h; sourceTree = ""; }; + 49D92DE2FD620C4089B7A1BDE68051D6 /* FIRGetAccountInfoResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetAccountInfoResponse.m; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoResponse.m; sourceTree = ""; }; + 49E390C1462F6EED57261052298904E6 /* FIRVerifyPhoneNumberRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPhoneNumberRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.h; sourceTree = ""; }; + 4A562F06B8609FC8463FB76916809389 /* RLMProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty.h; path = include/RLMProperty.h; sourceTree = ""; }; + 4A97DA2E87AF4AF800CFD58F98F4B30E /* RLMCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection.h; path = include/RLMCollection.h; sourceTree = ""; }; + 4A9E21EC28E44F065DD4BEF037693AD1 /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Indicator.swift; sourceTree = ""; }; + 4AEB354FE125EBC905F9AFDF14100D8A /* FirebaseDatabase.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseDatabase.modulemap; sourceTree = ""; }; + 4B16B973E6095AC39F1A58423A4B794D /* FImmutableTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableTree.h; path = Firebase/Database/Core/Utilities/FImmutableTree.h; sourceTree = ""; }; + 4B5F34983595EA471A6DB036B836CF83 /* RLMManagedArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMManagedArray.mm; path = Realm/RLMManagedArray.mm; sourceTree = ""; }; + 4C2204D4B7BAAE7C0283A04900A453A8 /* RLMResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults.h; path = include/RLMResults.h; sourceTree = ""; }; + 4C9AF27BE97B3A9642D563A4E370337B /* object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object.cpp; path = Realm/ObjectStore/src/object.cpp; sourceTree = ""; }; + 4CB9F1B76B46264590D8E287CF9A261A /* testutil.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = testutil.cc; path = util/testutil.cc; sourceTree = ""; }; + 4D00AF8213700D98D74DCF2FD59D8640 /* PromiseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PromiseKit.h; path = Sources/PromiseKit.h; sourceTree = ""; }; + 4D087A754F0DA0746FDBCD5EEA0D7309 /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = Sources/Placeholder.swift; sourceTree = ""; }; + 4DEB23A6639EA6ED44783EA745FFFDA4 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = RealmSwift/Schema.swift; sourceTree = ""; }; + 4E0D263DD44FCE700E4F3FA23FAF0594 /* RLMResults_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults_Private.h; path = include/RLMResults_Private.h; sourceTree = ""; }; + 4EB559CD2A63769030727E0102F5F520 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; + 4EBBFB9164F3142B4A51D3D6F2AA60F4 /* FIRNetworkURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkURLSession.h; path = Firebase/Core/Private/FIRNetworkURLSession.h; sourceTree = ""; }; + 4ED17DDA14D925B11AB0455BA6484174 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4F81F03B310B1DEA33721EC3FF34F95D /* FIRAuthDefaultUIDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDefaultUIDelegate.h; path = Firebase/Auth/Source/FIRAuthDefaultUIDelegate.h; sourceTree = ""; }; + 4F85AC7E2B7638C7A4675FE8645C9566 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; + 4F9EAEB0B511F6D6A3D974BE2F0B3207 /* posix_logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = posix_logger.h; path = util/posix_logger.h; sourceTree = ""; }; 4FDCC000ECBCDDBF14532533EB299B4A /* Pods-pocloud-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-pocloud-acknowledgements.markdown"; sourceTree = ""; }; - 4FFAA2ABC7DEDD6E364ED76C0FF88AE4 /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; - 500E6A91A66C584EA2C316AF77E187E0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5022842F9E7F7976C98C10557A560F01 /* RLMRealmUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealmUtil.mm; path = Realm/RLMRealmUtil.mm; sourceTree = ""; }; - 5062AFA7A17C69061B025939D60DBD22 /* env_posix_test_helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env_posix_test_helper.h; path = util/env_posix_test_helper.h; sourceTree = ""; }; - 50921741ADBAE90702DAABF59E4FEE15 /* FIRGetOOBConfirmationCodeRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetOOBConfirmationCodeRequest.h; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.h; sourceTree = ""; }; - 50984D13FF239651C85D127D4A9B36C3 /* slice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = slice.h; path = include/leveldb/slice.h; sourceTree = ""; }; - 515315EF76AAE8BBC64BA7F9C3CD76A8 /* FIRDeleteAccountResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDeleteAccountResponse.h; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountResponse.h; sourceTree = ""; }; - 515D097DCD4CB3E03C5D26379559BF4F /* RLMSyncCredentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncCredentials.h; path = include/RLMSyncCredentials.h; sourceTree = ""; }; - 51A32F0E945349D62441F3ADBE859017 /* FTreeSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h; sourceTree = ""; }; - 51DF135B95C2C63E71D97168F8ED319A /* FTupleCallbackStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleCallbackStatus.h; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h; sourceTree = ""; }; - 527A58C2B84D5E74BBA75B24F2F2093C /* FTuplePathValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTuplePathValue.m; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.m; sourceTree = ""; }; - 528BC4AA27400716710899BC26508C5A /* FIRVerifyPhoneNumberResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPhoneNumberResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberResponse.m; sourceTree = ""; }; - 52B5019F9BF77445DFE298C506B80C28 /* GTMSessionFetcher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMSessionFetcher-dummy.m"; sourceTree = ""; }; - 52C514872DADF3C31F8DE496790DDF8D /* FIRSetAccountInfoRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSetAccountInfoRequest.h; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.h; sourceTree = ""; }; - 52C6835AB19C915DDBF7304F4A9300BB /* iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = iterator.cc; path = table/iterator.cc; sourceTree = ""; }; - 5305DBA793AA7CEAEAE7B3A96CE8CB78 /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; - 534B4638DFA317572A39BB56A983EA7E /* FIRVerifyPasswordResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPasswordResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordResponse.m; sourceTree = ""; }; - 53C820A895299ACA19C3562A5C0607B1 /* FQueryParams.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQueryParams.h; path = Firebase/Database/Core/FQueryParams.h; sourceTree = ""; }; - 544C412E1BFF5BA8C01C7DA3EA8CD2A3 /* histogram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = histogram.h; path = util/histogram.h; sourceTree = ""; }; - 544EDF7CD4D8CAD91E9B56A6A5D08873 /* RLMCollection_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection_Private.h; path = include/RLMCollection_Private.h; sourceTree = ""; }; - 54B1B15C5992AABEA834EB9EF50BEF34 /* AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AnyPromise.m; path = Sources/AnyPromise.m; sourceTree = ""; }; - 54B6FE265FF633C4B985BC1BA1BC027D /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/RequestModifier.swift; sourceTree = ""; }; - 5511F623379139758DEC24633092CE01 /* UIAppearance+Swift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAppearance+Swift.h"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.h"; sourceTree = ""; }; - 55E330F93C621C1B333A885F538531D9 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; - 55E58C714D0132CDF2EAAE2B26D88B21 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5678876753C0D72CCD71DE8D71ABE2D7 /* FIRAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppEnvironmentUtil.h; path = Firebase/Core/third_party/FIRAppEnvironmentUtil.h; sourceTree = ""; }; - 5678B70F3E291B18297F8C9FAEADD654 /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; }; - 56A0BBA5226AC81C85B8B0520E94E96B /* Kingfisher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-prefix.pch"; sourceTree = ""; }; - 56CC2A6A09A80F6AF6217E7CD1519A0F /* shared_realm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = shared_realm.cpp; path = Realm/ObjectStore/src/shared_realm.cpp; sourceTree = ""; }; - 570D4872F753E82842DDD66B6A81DB10 /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = Firebase/Core/FIROptions.m; sourceTree = ""; }; - 5741B681D7961787830A7178DC5BE854 /* FIRSignUpNewUserResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSignUpNewUserResponse.h; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserResponse.h; sourceTree = ""; }; - 57C45DAA68B153310BC786B46C0A2B7B /* FKeepSyncedEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeepSyncedEventRegistration.m; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.m; sourceTree = ""; }; - 57D9077B48BC77A49623101CB4DE95F1 /* format.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = format.cc; path = table/format.cc; sourceTree = ""; }; - 580642BDB2A550A0A752100C1BAEDD62 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = Firebase/Core/Private/FIRLogger.h; sourceTree = ""; }; - 581F88DD3FFB5C907CC453A1F6B2D690 /* SVProgressAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressAnimatedView.h; path = SVProgressHUD/SVProgressAnimatedView.h; sourceTree = ""; }; - 58218552544AB7AF9534B2E2095A553A /* FIRSendVerificationCodeResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSendVerificationCodeResponse.m; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeResponse.m; sourceTree = ""; }; - 58967CC9171FE7B9F5617475E12061AF /* collection_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifier.cpp; path = Realm/ObjectStore/src/impl/collection_notifier.cpp; sourceTree = ""; }; + 50288181F2014C1CE8A040C9AB729410 /* SwiftChart-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftChart-prefix.pch"; sourceTree = ""; }; + 504474BF763B534B5FF9F5704D2CFE10 /* FCompoundHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundHash.m; path = Firebase/Database/Core/FCompoundHash.m; sourceTree = ""; }; + 50A0B7E87F87386642B81876C540525A /* when.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = when.swift; path = Sources/when.swift; sourceTree = ""; }; + 50A8DDD2705297C49F475FA8546ECABD /* table_cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_cache.h; path = db/table_cache.h; sourceTree = ""; }; + 5118852F00D319C28B010E9BA8768CC9 /* FIRCreateAuthURIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCreateAuthURIResponse.h; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIResponse.h; sourceTree = ""; }; + 511CD8D08D77F4C86FFAB96B8D4DA5CA /* list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list.cpp; path = Realm/ObjectStore/src/list.cpp; sourceTree = ""; }; + 517CBAED413747971B1F17E29597B51B /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; + 51857F69494E751F1292917527853C26 /* FKeepSyncedEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeepSyncedEventRegistration.h; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.h; sourceTree = ""; }; + 519A49CE2EE30097D0276208C8FEAB99 /* FIROAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROAuthProvider.h; path = Firebase/Auth/Source/Public/FIROAuthProvider.h; sourceTree = ""; }; + 51BE481F940AF4A8DF36951AEB716349 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = ""; }; + 51BF77D591207B5470F262B46F4B22B0 /* FirebaseDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseDatabase.h; path = Firebase/Database/Public/FirebaseDatabase.h; sourceTree = ""; }; + 51C371F5521B2BCF67AC0D24836A6CC7 /* Realm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Realm.swift; path = RealmSwift/Realm.swift; sourceTree = ""; }; + 51FD4CC1F7669D2D7B4777BED9085ED3 /* RLMMigration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMMigration.mm; path = Realm/RLMMigration.mm; sourceTree = ""; }; + 520BB36ACD9FFA8FCA515E8705745141 /* port_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = port_posix.cc; path = port/port_posix.cc; sourceTree = ""; }; + 522DAB4D87CE1F09BDE1A65F15F2FBB1 /* FIRSecureTokenService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSecureTokenService.h; path = Firebase/Auth/Source/FIRSecureTokenService.h; sourceTree = ""; }; + 525CE13E0C9F9A241DB69307E7B99825 /* repair.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = repair.cc; path = db/repair.cc; sourceTree = ""; }; + 5285F62FDA5CB3B7DA97B2BA794C69E7 /* bloom.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = bloom.cc; path = util/bloom.cc; sourceTree = ""; }; + 5287EF634A00D57846CFE8B9DB58C0CE /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = Firebase/Core/FIROptions.m; sourceTree = ""; }; + 528EDFE4FDC447F1BA0D26180ADD0D7F /* FClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FClock.h; path = Firebase/Database/FClock.h; sourceTree = ""; }; + 529F2A28F18269F592C0EF751D57B12A /* FValueEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueEventRegistration.m; path = Firebase/Database/Core/View/FValueEventRegistration.m; sourceTree = ""; }; + 52DF3DE6ADA39756D7BBA44919ECD7DB /* SVProgressAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressAnimatedView.m; path = SVProgressHUD/SVProgressAnimatedView.m; sourceTree = ""; }; + 5312F1C9F18FC20E19E99A8D8A2EA64F /* FKeyIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeyIndex.h; path = Firebase/Database/FKeyIndex.h; sourceTree = ""; }; + 531CC9C9E4B5A7BAC1389D1101788CBC /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + 5351D32E1AB468685EAAE5EB133BF95F /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = ""; }; + 53695C03B289AB70B3B9A00816EC598A /* FTreeSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m; sourceTree = ""; }; + 5376D625D5EAF1217D51053AD6880341 /* FIRUser_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUser_Internal.h; path = Firebase/Auth/Source/FIRUser_Internal.h; sourceTree = ""; }; + 538DC7A94F0B68D36E8845C2A33B017C /* GTMSessionFetcherLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherLogging.m; path = Source/GTMSessionFetcherLogging.m; sourceTree = ""; }; + 54030AD9A4B116C4E5FA0A75606E68A4 /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; + 544F7AC0331A63D207A551A46D75D0C6 /* FEventRaiser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventRaiser.m; path = Firebase/Database/Core/View/FEventRaiser.m; sourceTree = ""; }; + 549D09B5023CA10D9B85E67234DF61C2 /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = ""; }; + 54F42BF843090DB9B2984C9E346B5F5F /* RLMJSONModels.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMJSONModels.m; path = Realm/RLMJSONModels.m; sourceTree = ""; }; + 55528499E664DADC6B16CAE2401E1A47 /* Charts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-umbrella.h"; sourceTree = ""; }; + 557B7CC5A9A11189BBEAFC72464BEA0A /* FIRSetAccountInfoResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSetAccountInfoResponse.m; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoResponse.m; sourceTree = ""; }; + 558FC549A76CA0190F89A7A432101B05 /* FIRDatabaseConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig_Private.h; path = Firebase/Database/FIRDatabaseConfig_Private.h; sourceTree = ""; }; + 55931FFEA5DF0153C27CB1AEC567A192 /* FIRAuthUIDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthUIDelegate.h; path = Firebase/Auth/Source/Public/FIRAuthUIDelegate.h; sourceTree = ""; }; + 55B7A09D32E5044BB16ADC8E7EF9B0DC /* FIRMutableData_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData_Private.h; path = Firebase/Database/Api/Private/FIRMutableData_Private.h; sourceTree = ""; }; + 56004FB2FD2A8850B62F9D65CD69A05B /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + 560F3F9733DA7864B7349F6BC6B51708 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Configuration.swift; sourceTree = ""; }; + 5662A1B421C5649BAE47116C8FE0CDBC /* FPersistenceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistenceManager.h; path = Firebase/Database/Persistence/FPersistenceManager.h; sourceTree = ""; }; + 56792BC7071A111C79B8BD42F3C1ED6D /* FCancelEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCancelEvent.h; path = Firebase/Database/Core/View/FCancelEvent.h; sourceTree = ""; }; + 56B0D236FE09400520ECD2E02A58554B /* FIRSetAccountInfoRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSetAccountInfoRequest.h; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.h; sourceTree = ""; }; + 57003CACD3FF47250D640C28A4EE994D /* RLMSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema.h; path = include/RLMSchema.h; sourceTree = ""; }; + 5707705EF37EA2D9FFABFF95DD250125 /* RLMCollection_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMCollection_Private.h; path = include/RLMCollection_Private.h; sourceTree = ""; }; + 5743AE5D75D2DEBC04AC83DC72970D1E /* table.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = table.cc; path = table/table.cc; sourceTree = ""; }; + 5774C49C36EBEC452C489EB8A9A2FAB1 /* FIREmailPasswordAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailPasswordAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/EmailPassword/FIREmailPasswordAuthCredential.h; sourceTree = ""; }; + 57CF61C6EBE6F957C0A6AA2410460547 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = ""; }; + 58BECD9DFE76D092DFF483F95F776051 /* FIndexedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedNode.m; path = Firebase/Database/Snapshot/FIndexedNode.m; sourceTree = ""; }; + 58FDFAE9DE75D7A060E752669192391B /* FViewProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessor.m; path = Firebase/Database/FViewProcessor.m; sourceTree = ""; }; + 5900366582EB15C7A4D6E21EEF0578B7 /* FIRFacebookAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRFacebookAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Facebook/FIRFacebookAuthProvider.m; sourceTree = ""; }; 5911D0717F4D9EBB132AC3842B3CFB34 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5913FC3CB687FC271619277DCC1F2737 /* FTupleTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTransaction.m; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.m; sourceTree = ""; }; - 593FE72222BC2EF93683E4257630D211 /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = RealmSwift/Object.swift; sourceTree = ""; }; - 59A4076E806FD4F791424B8134D10112 /* FIRUser_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUser_Internal.h; path = Firebase/Auth/Source/FIRUser_Internal.h; sourceTree = ""; }; - 59DC491546C84C6254B8D0965B77C866 /* RLMConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMConstants.m; path = Realm/RLMConstants.m; sourceTree = ""; }; - 59EE1EB5EDB6D0386D244460AD468670 /* FirebaseDatabase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseDatabase-dummy.m"; sourceTree = ""; }; - 5A0B03BB5C1649C926A02C2AA2FD4A29 /* FIREmailLinkSignInResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailLinkSignInResponse.m; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInResponse.m; sourceTree = ""; }; - 5A3C7DFCABE213768DFF8B34B4286677 /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = Firebase/Core/Private/FIRAppInternal.h; sourceTree = ""; }; - 5AC850C12D346539C85F42002FF892CC /* PromiseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromiseKit.xcconfig; sourceTree = ""; }; - 5B351A95EA8BF4F4489CDDF15D468BAA /* FIRCreateAuthURIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCreateAuthURIResponse.h; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIResponse.h; sourceTree = ""; }; - 5B564B0B062EB8F11B60E93E83E8FFF7 /* RLMObjectSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectSchema.mm; path = Realm/RLMObjectSchema.mm; sourceTree = ""; }; - 5B76C34DAB2C4FAF6245ADBF3CC9BD14 /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = Firebase/Core/Public/FIRApp.h; sourceTree = ""; }; - 5B87D1659FE9B26E6CCB17A4949B8CE8 /* two_level_iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = two_level_iterator.cc; path = table/two_level_iterator.cc; sourceTree = ""; }; - 5B889265B7A23CC582794297E02FCC5E /* FIRAuth_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuth_Internal.h; path = Firebase/Auth/Source/FIRAuth_Internal.h; sourceTree = ""; }; - 5B8C53A7F6723A3EAFCBB1801C1CDC42 /* RLMPredicateUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMPredicateUtil.mm; path = Realm/RLMPredicateUtil.mm; sourceTree = ""; }; - 5BA0752F8DA780992400AD21AA5512D4 /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; }; - 5BC02749593FFFFBFBEFF12AA613D571 /* FTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTree.h; path = Firebase/Database/Core/Utilities/FTree.h; sourceTree = ""; }; - 5BFC99100C7B07A11CD15F4740CD7102 /* FIRVerifyAssertionRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyAssertionRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.h; sourceTree = ""; }; - 5C731AA8B0C2C85C48B5BBC71380CA34 /* FCachePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCachePolicy.h; path = Firebase/Database/Persistence/FCachePolicy.h; sourceTree = ""; }; - 5CA2808E8E1F2C6D7A19D5C2A280F43E /* FEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEmptyNode.m; path = Firebase/Database/Snapshot/FEmptyNode.m; sourceTree = ""; }; - 5CAB71AB91FBC9374550D0311AA8CADB /* FIRVerifyAssertionRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyAssertionRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.m; sourceTree = ""; }; - 5D1B226B9F61815FD59B1A67E1CC7684 /* FSRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSRWebSocket.m; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.m; sourceTree = ""; }; - 5D29BE28AB8262B8B505B9098E19E55E /* RLMMigration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration_Private.h; path = include/RLMMigration_Private.h; sourceTree = ""; }; - 5D3A15DF47EC881BB44A0A944834E4BB /* FIndexedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedFilter.h; path = Firebase/Database/Core/View/Filter/FIndexedFilter.h; sourceTree = ""; }; - 5D97A8C0D678831946DEC1418C7B6876 /* SwiftChart-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftChart-dummy.m"; sourceTree = ""; }; - 5DAF9D56085B88A440BDF99226C3C5EC /* FChildEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildEventRegistration.m; path = Firebase/Database/Core/View/FChildEventRegistration.m; sourceTree = ""; }; - 5DB7B79E357A7765895F6FB422938BE8 /* FTupleTSN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTSN.h; path = Firebase/Database/Utilities/Tuples/FTupleTSN.h; sourceTree = ""; }; - 5DF64CC029A59D164C673992AD3C8037 /* FSRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSRWebSocket.h; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.h; sourceTree = ""; }; - 5E1E1E852986BDD18DA72A5BA27E7145 /* results.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results.cpp; path = Realm/ObjectStore/src/results.cpp; sourceTree = ""; }; - 5E3D6102C57EEF32AC91519BC2D70655 /* cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = cache.cc; path = util/cache.cc; sourceTree = ""; }; - 5E5A3E50584A73D4B2C399B7302BB3F5 /* FIRDatabaseConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig.h; path = Firebase/Database/Api/FIRDatabaseConfig.h; sourceTree = ""; }; - 5EB2568CD43E1E978DA697D64C2E0CAE /* table.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = table.cc; path = table/table.cc; sourceTree = ""; }; - 5EC37ABFB101C5CFFD17423D93AB7C6F /* FIRAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppEnvironmentUtil.m; path = Firebase/Core/third_party/FIRAppEnvironmentUtil.m; sourceTree = ""; }; - 5EC9D72DA4D993BA4FA7462F788E808F /* FIRAuthKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthKeychain.m; path = Firebase/Auth/Source/FIRAuthKeychain.m; sourceTree = ""; }; - 5EFD4D1CBB9EDBC363742620BADED297 /* FIRDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase.h; path = Firebase/Database/Public/FIRDatabase.h; sourceTree = ""; }; - 5F8918111252A1691EBEF519B9C8DDE6 /* FirebaseAuthVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseAuthVersion.h; path = Firebase/Auth/Source/Public/FirebaseAuthVersion.h; sourceTree = ""; }; - 5FE583426B0571D546C951D11A281BF6 /* FImmutableSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m; sourceTree = ""; }; - 602F700222EE4CD2DFDC8A6A71B94FC5 /* RealmCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCollection.swift; path = RealmSwift/RealmCollection.swift; sourceTree = ""; }; - 6038170437BAF049CB60F88B2FF54AA5 /* FLLRBEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBEmptyNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h; sourceTree = ""; }; - 60A19E52AC2DF8B18AA847F2F20E2D2F /* logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = logging.h; path = util/logging.h; sourceTree = ""; }; - 60A1D7A91801C819081DFD89E4232EB0 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseCoreDiagnostics.framework; path = Frameworks/FirebaseCoreDiagnostics.framework; sourceTree = ""; }; - 60A348D6CFED1F1FE490C002476433E9 /* SVIndefiniteAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVIndefiniteAnimatedView.m; path = SVProgressHUD/SVIndefiniteAnimatedView.m; sourceTree = ""; }; - 60B34087ADF9E2187A1C509EB443DC08 /* weak_realm_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = weak_realm_notifier.cpp; path = Realm/ObjectStore/src/impl/weak_realm_notifier.cpp; sourceTree = ""; }; - 60CE8BE9D8110D3D1BD11AF01584255F /* FIRNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetwork.h; path = Firebase/Core/Private/FIRNetwork.h; sourceTree = ""; }; - 60DA73827B471EA78A83D59EA2F88A3A /* NSError+RLMSync.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+RLMSync.m"; path = "Realm/NSError+RLMSync.m"; sourceTree = ""; }; - 6115C302DB89E3786D5A51DBD5F87FA9 /* GoogleToolboxForMac.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleToolboxForMac.xcconfig; sourceTree = ""; }; - 613B41797B8589C74E3BCB0E66789F1D /* RLMThreadSafeReference.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMThreadSafeReference.mm; path = Realm/RLMThreadSafeReference.mm; sourceTree = ""; }; - 61C74BF8C42C637EE978632922266FC3 /* FParsedUrl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FParsedUrl.h; path = Firebase/Database/Utilities/FParsedUrl.h; sourceTree = ""; }; - 61DE8708D7E957E3C14D958C3924525E /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; - 6253B6F08C1C7483ACD03327448E082F /* FIRErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrorCode.h; path = Firebase/Core/Private/FIRErrorCode.h; sourceTree = ""; }; - 6287EE2E2EBB2F65A34E83E0ED37A309 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; - 62E93BA1B4DD6210B7E3EFE261252EC6 /* leveldb-library-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-prefix.pch"; sourceTree = ""; }; - 640A0DADA9E8195F23753A3D53B9BDE4 /* RLMUpdateChecker.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUpdateChecker.mm; path = Realm/RLMUpdateChecker.mm; sourceTree = ""; }; - 643E99F30206C0660B175DEAC1C8D01C /* SideMenu-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SideMenu-prefix.pch"; sourceTree = ""; }; - 6459ED0790D6ED01E1D9C3474BD712A6 /* RLMConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMConstants.h; path = include/RLMConstants.h; sourceTree = ""; }; - 649842BF1C52EF2A7DB0CD4E9A4002E7 /* librealmcore-ios.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "librealmcore-ios.a"; path = "core/librealmcore-ios.a"; sourceTree = ""; }; - 64E06784FA3B6F6AA98F32C151BF722C /* partial_sync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = partial_sync.cpp; path = Realm/ObjectStore/src/sync/partial_sync.cpp; sourceTree = ""; }; - 6554B57681363990CB506AE66ADDFFD8 /* FIRServerValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRServerValue.h; path = Firebase/Database/Public/FIRServerValue.h; sourceTree = ""; }; - 655E1781A3BA59C3F210EA07B5C20FC0 /* FIRAdditionalUserInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAdditionalUserInfo.m; path = Firebase/Auth/Source/FIRAdditionalUserInfo.m; sourceTree = ""; }; - 65BDC2DF79ECB93585E1BEF395A43E4C /* FSyncTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncTree.m; path = Firebase/Database/Core/FSyncTree.m; sourceTree = ""; }; - 65C88EE0FD6E4593C528C854C2430593 /* hang.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = hang.swift; path = Sources/hang.swift; sourceTree = ""; }; - 65D54BF75DDC3FA231AA356BD5B8F3CC /* FCancelEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCancelEvent.h; path = Firebase/Database/Core/View/FCancelEvent.h; sourceTree = ""; }; - 65F3954631DF66A5F3305029849F5A2F /* FUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUtilities.m; path = Firebase/Database/Utilities/FUtilities.m; sourceTree = ""; }; - 65FC2AD306FFBF80D008C8310A3DA2D6 /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; + 591D1D76F93D97B88ABD56DA3759FF47 /* RLMObjectSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema_Private.h; path = include/RLMObjectSchema_Private.h; sourceTree = ""; }; + 5942D12055748C28C70B1DA7617F82AA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5A54F9668EA14903A17AB13D39065456 /* FDataEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FDataEvent.m; path = Firebase/Database/Core/View/FDataEvent.m; sourceTree = ""; }; + 5B3947E02DF46D7858EAF8710163E36D /* leveldb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = leveldb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5B86C85394B98DD6743DE904B7577E56 /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; + 5BD4D9A43441A9345D06FADC12FCD86D /* FIRDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase.h; path = Firebase/Database/Public/FIRDatabase.h; sourceTree = ""; }; + 5BEE5354F319A46335D471652FD9FC51 /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = ""; }; + 5C0DAF1ECF2F7FFA6FA81DB69E752441 /* FCompoundWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundWrite.h; path = Firebase/Database/Snapshot/FCompoundWrite.h; sourceTree = ""; }; + 5C27F19177EDA2E360C44DC25BC64507 /* FViewProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessor.h; path = Firebase/Database/FViewProcessor.h; sourceTree = ""; }; + 5C3CD574BDBFFF20187F6184C3385022 /* FIRAuthRPCRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthRPCRequest.h; path = Firebase/Auth/Source/RPCs/FIRAuthRPCRequest.h; sourceTree = ""; }; + 5CCDB8ECA2E54160B580831DF1D5B80A /* FChildChangeAccumulator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildChangeAccumulator.h; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h; sourceTree = ""; }; + 5D2B01A415F7ACE81B048B713D8FE90E /* FTupleRemovedQueriesEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleRemovedQueriesEvents.h; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h; sourceTree = ""; }; + 5D742D25253933AB27B72CF95E8CA25C /* FTuplePathValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTuplePathValue.m; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.m; sourceTree = ""; }; + 5D8FF575FA2846D84D47954F3EE155F2 /* FSyncTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncTree.m; path = Firebase/Database/Core/FSyncTree.m; sourceTree = ""; }; + 5EE1E0883062B30061F69A7DC3E4796A /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; + 5EF22D2D1A6662A828AF985AF5DB51F4 /* FIRAuthAPNSTokenManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAPNSTokenManager.m; path = Firebase/Auth/Source/FIRAuthAPNSTokenManager.m; sourceTree = ""; }; + 5FC3F2DFACE7D51E17F7954B1EB30275 /* FTupleNodePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleNodePath.h; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.h; sourceTree = ""; }; + 5FFEF00FA05F4DCCD71930549CA0FD9B /* sync_manager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_manager.cpp; path = Realm/ObjectStore/src/sync/sync_manager.cpp; sourceTree = ""; }; + 60125B3AB84AC0074335BEAC4412D766 /* log_format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_format.h; path = db/log_format.h; sourceTree = ""; }; + 60E45BAEB38F4980C0B6AD8AA6855E46 /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = Firebase/Core/Public/FIRConfiguration.h; sourceTree = ""; }; + 622796B1E0C22A2BC786C351F242C965 /* FIRAuthExceptionUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthExceptionUtils.h; path = Firebase/Auth/Source/FIRAuthExceptionUtils.h; sourceTree = ""; }; + 626902AF1130D9E133F590F00D2E7464 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = ""; }; + 627A43A2A4F286438FC5CED41A414DF6 /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/ImageProcessor.swift; sourceTree = ""; }; + 62A0B768F2064E7856A14C9777566E9A /* RLMMigration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration_Private.h; path = include/RLMMigration_Private.h; sourceTree = ""; }; + 63A5EB73F253F91E0F7BD49FFB62E8A2 /* RLMRealm+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealm+Sync.mm"; path = "Realm/RLMRealm+Sync.mm"; sourceTree = ""; }; + 63C90892838E596442C01C439B319CB3 /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; }; + 63FEDBEB15B81D387A20EE08CD182C7C /* RLMUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUtil.mm; path = Realm/RLMUtil.mm; sourceTree = ""; }; + 6446432053311D524A460ECC7D73DAD8 /* FImmutableTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableTree.m; path = Firebase/Database/Core/Utilities/FImmutableTree.m; sourceTree = ""; }; + 64955AB134B400739094B4DE34FE2674 /* FIRUserInfoImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserInfoImpl.h; path = Firebase/Auth/Source/FIRUserInfoImpl.h; sourceTree = ""; }; + 64E114839F523B12414E98D6DAD4E252 /* Resolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resolver.swift; path = Sources/Resolver.swift; sourceTree = ""; }; + 64F9F741EB513F18E517C47B3C5ED061 /* FTupleObjectNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjectNode.h; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.h; sourceTree = ""; }; + 6502C8871A6DABC7252760716E08A60F /* AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AnyPromise.m; path = Sources/AnyPromise.m; sourceTree = ""; }; + 6545DE771492D2A91E6EA8C24DC73884 /* FTupleBoolBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleBoolBlock.h; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h; sourceTree = ""; }; + 6575B78732C20726AA220886A00AF875 /* FRepoManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoManager.h; path = Firebase/Database/Core/FRepoManager.h; sourceTree = ""; }; + 6597DB55CCA248AB8A0F90E19357517E /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; + 65B45B8E875F6ECDF184594472AF8A5F /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/UIButton+Kingfisher.swift"; sourceTree = ""; }; + 65CE7E43891F975C07CDC076D7026F2B /* UIAppearance+Swift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAppearance+Swift.h"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.h"; sourceTree = ""; }; + 65EE173CD6482270A5F2AA2127830541 /* FEventEmitter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventEmitter.m; path = Firebase/Database/Utilities/FEventEmitter.m; sourceTree = ""; }; + 6632D07B62268908386AC138F7A39B9E /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + 6632F78F916FBAC8538290E6A8E2D94A /* FIRPhoneAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRPhoneAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthProvider.m; sourceTree = ""; }; + 66883986B03E5507A4645CD60569DB85 /* FPendingPut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPendingPut.h; path = Firebase/Database/Persistence/FPendingPut.h; sourceTree = ""; }; + 669C9CDAFC6C882827F53860BE3D2A29 /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Source/Charts/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; 66AAB0D800CC3AAA4CF2EDEBAE6E57F4 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6764E93AE1777DD4865F3F56E035455B /* GTMSessionFetcherService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherService.h; path = Source/GTMSessionFetcherService.h; sourceTree = ""; }; - 678D06BE325ACF1EBC6F2EB35DA227B8 /* nanopb.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.xcconfig; sourceTree = ""; }; - 67E3FFD687235B98417AECB81E391CA7 /* SVProgressHUD.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVProgressHUD.bundle; path = SVProgressHUD/SVProgressHUD.bundle; sourceTree = ""; }; - 67F24943D62E8185F12071A5C28EFE21 /* FIRDeleteAccountRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDeleteAccountRequest.m; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.m; sourceTree = ""; }; - 67FDEB92CEB811C39AB5C0A2B4D162E9 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; - 68E5EBF90FA9F0C98408EF13E485DFBD /* FIRSecureTokenRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSecureTokenRequest.h; path = Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.h; sourceTree = ""; }; + 66C759143D70A6473AD8FF9521C4502C /* FIRAuthAppCredentialManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAppCredentialManager.m; path = Firebase/Auth/Source/FIRAuthAppCredentialManager.m; sourceTree = ""; }; + 66DFE6FEDE19A7F3DE3737F583C57084 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 672B1ADCC8A31D0C4B7FADC3C2AE4AB3 /* GoogleToolboxForMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleToolboxForMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 676D729DBBEB993269FF14363C11A550 /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; + 67965BC8AD7532C6B432E803DEB4439E /* RLMResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMResults.mm; path = Realm/RLMResults.mm; sourceTree = ""; }; + 67E8667240251D060ACE1B6810C0F9F4 /* leveldb-library-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-umbrella.h"; sourceTree = ""; }; + 6800E5F589466FF8EE866AD17818CFF1 /* FirebaseAuth.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAuth.xcconfig; sourceTree = ""; }; + 68333EDF46E6D08169077669539DD854 /* FIRAuthWebUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthWebUtils.h; path = Firebase/Auth/Source/FIRAuthWebUtils.h; sourceTree = ""; }; + 684BCEEF0473DF6E9AD890F510F8F754 /* FNamedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNamedNode.m; path = Firebase/Database/FNamedNode.m; sourceTree = ""; }; + 68D8A82480667587B7F33CE189E5EC2A /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; + 68F1839B46A9B719413A9DC3FB78066A /* logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = logging.h; path = util/logging.h; sourceTree = ""; }; + 6904D4E404DA009AC64EE44664F92516 /* FIRUserInfoImpl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRUserInfoImpl.m; path = Firebase/Auth/Source/FIRUserInfoImpl.m; sourceTree = ""; }; 6947127001CBEE095E4A6CE3A232C4C5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 6993E8A72A6CA0442ADF959C87569226 /* FIRSetAccountInfoResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSetAccountInfoResponse.h; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoResponse.h; sourceTree = ""; }; - 69979796FD401B825B73A8FBF40D7E7C /* SVProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SVProgressHUD.xcconfig; sourceTree = ""; }; - 69A5CDCB0D783A09A4BB193FF66CCC15 /* after.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = after.m; path = Sources/after.m; sourceTree = ""; }; - 69D3713C5AEBC1522AC899FB6A0C1343 /* UIAppearance+Swift.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAppearance+Swift.m"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.m"; sourceTree = ""; }; - 6A107196D4B3E10BBF7082F6BB64DE8F /* FirebaseDatabase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseDatabase.xcconfig; sourceTree = ""; }; - 6A4692C20B2BC3C81D0B1A7F070493DF /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = ""; }; - 6B0D08298671E04D54EB4718EC3ECCAC /* GTMSessionFetcher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-prefix.pch"; sourceTree = ""; }; - 6B3B6D04CD804A2DCFD0CA0DA33A568D /* FTupleFirebase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleFirebase.m; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.m; sourceTree = ""; }; + 697968197D178CA84FCBA4556B32F54D /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; + 69EF71DAE265624AF7BE3E8DA3E31173 /* FIRAuthGlobalWorkQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthGlobalWorkQueue.m; path = Firebase/Auth/Source/FIRAuthGlobalWorkQueue.m; sourceTree = ""; }; + 6A02A3DCA7DC56236E85CE3F23C59E90 /* FIRAuthInternalErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthInternalErrors.h; path = Firebase/Auth/Source/FIRAuthInternalErrors.h; sourceTree = ""; }; + 6A3FF4D9F6D45AEEFD3B7A5B6223B228 /* FLLRBValueNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBValueNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h; sourceTree = ""; }; + 6A4D058B8624C835308A4D74FDA6AB88 /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; + 6A5D093C71358AB924BC825A9E0DB64C /* FirebaseNanoPB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseNanoPB.framework; path = Frameworks/FirebaseNanoPB.framework; sourceTree = ""; }; + 6A6BA37B57B834AB7486ADAA49713CD6 /* IMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IMarker.swift; path = Source/Charts/Components/IMarker.swift; sourceTree = ""; }; + 6A996DF9334688E455CD7353C30DCA2C /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/KingfisherManager.swift; sourceTree = ""; }; + 6B19ECCE4BEA2A0A53D17243036E9ABB /* FIRDeleteAccountRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDeleteAccountRequest.h; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.h; sourceTree = ""; }; + 6B432CAA766CF17D9CABEE0B7462B083 /* FMaxNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMaxNode.h; path = Firebase/Database/FMaxNode.h; sourceTree = ""; }; 6B56D2583344249C1A8E402CDDFA31CD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 6B5D05CE22BF8AE1975019B14E5FB38B /* FLimitedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLimitedFilter.h; path = Firebase/Database/Core/View/Filter/FLimitedFilter.h; sourceTree = ""; }; - 6B80A63CD2968247F06E00F9DB61A76E /* FChange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChange.m; path = Firebase/Database/Core/View/FChange.m; sourceTree = ""; }; - 6B85AAB94D405DD45E2B4D1A1F6EA8FF /* FTupleTSN.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTSN.m; path = Firebase/Database/Utilities/Tuples/FTupleTSN.m; sourceTree = ""; }; - 6BA71F18701F565C90D0804B16EE5F84 /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/ImageDownloader.swift; sourceTree = ""; }; - 6BD959D32405E363EE956AD0EE9B40D2 /* FIRAuthAPNSTokenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAPNSTokenManager.h; path = Firebase/Auth/Source/FIRAuthAPNSTokenManager.h; sourceTree = ""; }; - 6C0166981D977D45B84F88D65A9AC3BE /* FIRAuthRPCRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthRPCRequest.h; path = Firebase/Auth/Source/RPCs/FIRAuthRPCRequest.h; sourceTree = ""; }; - 6C1BC562131E66DA3F567B37BB58B4A8 /* FIRDatabaseConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig_Private.h; path = Firebase/Database/FIRDatabaseConfig_Private.h; sourceTree = ""; }; - 6C7E0F93D9D136C44D487B7C3B938091 /* FOperationSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperationSource.h; path = Firebase/Database/Core/Operation/FOperationSource.h; sourceTree = ""; }; - 6D3CE21281F234A7CC3F0C5655C24097 /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = Firebase/Core/FIRApp.m; sourceTree = ""; }; - 6D41543E190795417F7DAE9117C49FD7 /* APLevelDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APLevelDB.h; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h"; sourceTree = ""; }; - 6D43DD9A87F45A8AE34C94CF1F7AE7AF /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; - 6DBA4949E4537E73554B770BD9FCD696 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/ImagePrefetcher.swift; sourceTree = ""; }; - 6E11CEC5A1750DA6841C79BA06EEAD46 /* db_iter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_iter.h; path = db/db_iter.h; sourceTree = ""; }; - 6F2F526A371F15523F70033F71D4E8DC /* Deprecations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecations.swift; path = Sources/Deprecations.swift; sourceTree = ""; }; - 6F8AC2E4B435695A5EFDD2C14994B1EA /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Frameworks/FirebaseAnalytics.framework; sourceTree = ""; }; - 701681E97FC378477898782FA5C80933 /* Kingfisher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kingfisher.h; path = Sources/Kingfisher.h; sourceTree = ""; }; - 7031C9AC62B88E64CD05DDAFD88DAB98 /* FIRGetOOBConfirmationCodeResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetOOBConfirmationCodeResponse.h; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeResponse.h; sourceTree = ""; }; - 703413B3BDA586A54D308061523C6ED8 /* FPruneForest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPruneForest.h; path = Firebase/Database/Persistence/FPruneForest.h; sourceTree = ""; }; - 703F0CA64B244E7C39599A425A4A9A04 /* object_schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_schema.cpp; path = Realm/ObjectStore/src/object_schema.cpp; sourceTree = ""; }; - 706AFBECC91447F3B97ED9DA2ED0F149 /* FIREmailLinkSignInResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailLinkSignInResponse.h; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInResponse.h; sourceTree = ""; }; - 70BA0C5E124A73AB8333E19108FEBDCF /* FStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStringUtilities.h; path = Firebase/Database/Utilities/FStringUtilities.h; sourceTree = ""; }; - 721BDC7FEE69CCF878D29D3396CD4BBB /* PromiseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7232466B5111FDB327581672AD2D7C4D /* FCompoundHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundHash.m; path = Firebase/Database/Core/FCompoundHash.m; sourceTree = ""; }; - 727D09BAF5CCA8E230F101E228BFEB81 /* FTupleFirebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleFirebase.h; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.h; sourceTree = ""; }; + 6BCD04CC3CC4E934B8C3D74FC9170E54 /* FIRTwitterAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTwitterAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Twitter/FIRTwitterAuthCredential.m; sourceTree = ""; }; + 6BE3625CD02B45E7A52596710D14901E /* placeholder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = placeholder.cpp; path = Realm/ObjectStore/src/placeholder.cpp; sourceTree = ""; }; + 6C33712F92C7752493A4300C441EC30F /* FServerValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FServerValues.m; path = Firebase/Database/Core/FServerValues.m; sourceTree = ""; }; + 6C3ED2922BA38B9AAC4C0E77FED314E2 /* RLMClassInfo.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMClassInfo.mm; path = Realm/RLMClassInfo.mm; sourceTree = ""; }; + 6CC21EC03C278563E2F64C67D7085F0C /* FIRFacebookAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFacebookAuthProvider.h; path = Firebase/Auth/Source/Public/FIRFacebookAuthProvider.h; sourceTree = ""; }; + 6CE491E93382DA40AB4CB0BA9C8A7C41 /* c.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = c.cc; path = db/c.cc; sourceTree = ""; }; + 6D318FEDC73AF9331208167D90056B21 /* FRangeMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangeMerge.h; path = Firebase/Database/Core/FRangeMerge.h; sourceTree = ""; }; + 6D3E71A2A0680457DF6E0D979CAAE9FF /* FTreeSortedDictionaryEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionaryEnumerator.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m; sourceTree = ""; }; + 6D8D52701CFDD59510B13C2F46E3F311 /* FTupleTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTransaction.h; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.h; sourceTree = ""; }; + 6DC531CF5142D46B98D7FC287E601180 /* GTMSessionFetcher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-prefix.pch"; sourceTree = ""; }; + 6DC5CFBD9FA0619FAC8BA87254AD80F9 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = ""; }; + 6E2E162383BC786C78C4746589E49CB9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6E65BBDA82D1111FFEC7A68DCA3500B2 /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; + 6FB69BBAFD285F0522E82C573488DBFD /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + 6FE21F83684AA12B14D30F479979E17A /* PromiseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromiseKit.modulemap; sourceTree = ""; }; + 70196E133C023E4DC04F43B36826E256 /* FIRDeleteAccountRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDeleteAccountRequest.m; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.m; sourceTree = ""; }; + 708476560D22C9E2631C4F742586EFF8 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = Firebase/Core/Private/FIRLogger.h; sourceTree = ""; }; + 70A1AD3B20C64A95B7B5580B9E81D43C /* FIRAuthTokenResult_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthTokenResult_Internal.h; path = Firebase/Auth/Source/FIRAuthTokenResult_Internal.h; sourceTree = ""; }; + 711DFD2FE2B424741E88BB4E596C1229 /* FChildrenNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildrenNode.h; path = Firebase/Database/Snapshot/FChildrenNode.h; sourceTree = ""; }; + 71BA7A67BBC43A4DB783712FB346DABD /* FIRSendVerificationCodeRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSendVerificationCodeRequest.h; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeRequest.h; sourceTree = ""; }; + 71DC5EFBE1F1E241E8B79E9B04CF1148 /* RLMAnalytics.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAnalytics.mm; path = Realm/RLMAnalytics.mm; sourceTree = ""; }; + 7206FA132C6B17F949B7C576BC623641 /* FSRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSRWebSocket.m; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.m; sourceTree = ""; }; + 72073D119E282E7203065BAC884532A2 /* FIRAuthAppDelegateProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAppDelegateProxy.h; path = Firebase/Auth/Source/FIRAuthAppDelegateProxy.h; sourceTree = ""; }; + 723D831D9FDBD1773A736D67D7110811 /* port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port.h; path = port/port.h; sourceTree = ""; }; 72AF7766300EF09E371BAE0853760A92 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 72F54EAFFFEB8994F4F4DBC66105B30C /* FSyncTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncTree.h; path = Firebase/Database/Core/FSyncTree.h; sourceTree = ""; }; - 7301F254EF0E1C7E917EA5B3B21726FE /* thread_annotations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_annotations.h; path = port/thread_annotations.h; sourceTree = ""; }; - 733157C0A6CD88538BB514CA3022FE34 /* FCancelEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCancelEvent.m; path = Firebase/Database/Core/View/FCancelEvent.m; sourceTree = ""; }; - 735BB3DB964C42BE707ED69E758226F6 /* leveldb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = leveldb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 737B0B8BB170869321A0C8168842696C /* Sync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sync.swift; path = RealmSwift/Sync.swift; sourceTree = ""; }; - 739EDA6BA880C374271A5FFD1F4827C7 /* FIRUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserInfo.h; path = Firebase/Auth/Source/Public/FIRUserInfo.h; sourceTree = ""; }; - 74335A52733B4DEC7F2D9349FFA9DAC9 /* FView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FView.m; path = Firebase/Database/Core/View/FView.m; sourceTree = ""; }; - 743CCCB96F2E9E1F74323049669C8766 /* port_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = port_posix.cc; path = port/port_posix.cc; sourceTree = ""; }; - 74E7929741A42451CBF6BBD492AA09EC /* version_set.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = version_set.cc; path = db/version_set.cc; sourceTree = ""; }; - 75218D68233C400F1AAC882CD516F41A /* collection_notifications.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifications.cpp; path = Realm/ObjectStore/src/collection_notifications.cpp; sourceTree = ""; }; - 7524CFCF31C48861F456C88473538A4A /* FIRIdentityToolkitRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRIdentityToolkitRequest.h; path = Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.h; sourceTree = ""; }; - 75ABBAC607546BF05C94D2EA117EFEE8 /* FIRVerifyClientResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyClientResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyClientResponse.m; sourceTree = ""; }; - 75BD0946CE5246864866AA4AC0F912C1 /* FIRAuthErrorUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthErrorUtils.h; path = Firebase/Auth/Source/FIRAuthErrorUtils.h; sourceTree = ""; }; - 75C6E028A0660D0E07FEC2B89B906181 /* Realm.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.xcconfig; sourceTree = ""; }; - 75E2DF15F6ABE0A035905AAA3D96E9D3 /* ObjectiveCSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectiveCSupport.swift; path = RealmSwift/ObjectiveCSupport.swift; sourceTree = ""; }; - 761F5D38A926E73917FA881566026AEB /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Sources/Error.swift; sourceTree = ""; }; - 7628D1777E7034B427095448AFF65A1C /* memtable.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = memtable.cc; path = db/memtable.cc; sourceTree = ""; }; - 764C857A9B00BB35B14D1BB6C4B4745F /* when.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = when.swift; path = Sources/when.swift; sourceTree = ""; }; - 7675A21D9CF25DEBE0C17AB10A2B06F0 /* RLMAnalytics.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAnalytics.mm; path = Realm/RLMAnalytics.mm; sourceTree = ""; }; - 767E4C2BF6AE88347EDE51469D7B2069 /* FIRAuthDataResult_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDataResult_Internal.h; path = Firebase/Auth/Source/FIRAuthDataResult_Internal.h; sourceTree = ""; }; - 768468E80F9FE8B320DC7C1828DB5588 /* FEventRaiser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventRaiser.m; path = Firebase/Database/Core/View/FEventRaiser.m; sourceTree = ""; }; - 769A24B9A7E6EA91AB22AC7BDF7294A1 /* FMaxNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMaxNode.h; path = Firebase/Database/FMaxNode.h; sourceTree = ""; }; - 76EF099F001B8227ACD7D720DF9D7897 /* FChildChangeAccumulator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildChangeAccumulator.h; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h; sourceTree = ""; }; - 770AF2E17CD58BDCA0D918158D01E602 /* FTupleRemovedQueriesEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleRemovedQueriesEvents.m; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m; sourceTree = ""; }; - 77557DD69A4D0C3139C6B340667495AC /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; - 77A88B654376481EF3246A8AA3E83B5B /* FIRUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUser.h; path = Firebase/Auth/Source/Public/FIRUser.h; sourceTree = ""; }; - 77E5295317BF8E35A4774EDB9696C913 /* FPriorityIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPriorityIndex.h; path = Firebase/Database/FPriorityIndex.h; sourceTree = ""; }; - 7825758BA28D7B159C70BBC305286DEF /* FConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConstants.h; path = Firebase/Database/Constants/FConstants.h; sourceTree = ""; }; - 78F4770F3AA732271439C1E944CBB123 /* RLMArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray.h; path = include/RLMArray.h; sourceTree = ""; }; + 7310AB3328F510339EEB587BD873B4E9 /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = Firebase/Core/Public/FirebaseCore.h; sourceTree = ""; }; + 7352B886668E86A68A4EFA8A6C97CB54 /* FKeyIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeyIndex.m; path = Firebase/Database/FKeyIndex.m; sourceTree = ""; }; + 73EE77F1500EDC920D3EB0A80643F425 /* FPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPath.m; path = Firebase/Database/Core/Utilities/FPath.m; sourceTree = ""; }; + 7410C99F41C1D0EF8889CDB35AB1D7D2 /* FIRDatabaseConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig.h; path = Firebase/Database/Api/FIRDatabaseConfig.h; sourceTree = ""; }; + 741AD09F20CCD4D64A615FE16AEDB387 /* FIRGoogleAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGoogleAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Google/FIRGoogleAuthCredential.m; sourceTree = ""; }; + 747AF76A17AFE5EB9C6EDB83F4D0F850 /* FIRAuthRPCResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthRPCResponse.h; path = Firebase/Auth/Source/RPCs/FIRAuthRPCResponse.h; sourceTree = ""; }; + 74ABDC36D249A915106B24F9FC749188 /* collection_notifications.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_notifications.cpp; path = Realm/ObjectStore/src/collection_notifications.cpp; sourceTree = ""; }; + 74B094E3EC51E25F052BA9E2382D7605 /* RLMConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMConstants.h; path = include/RLMConstants.h; sourceTree = ""; }; + 7546C05AF7D0A1160FC41FFBDFFED75C /* FIRSendVerificationCodeResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSendVerificationCodeResponse.h; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeResponse.h; sourceTree = ""; }; + 75D9A17D3F1B383B2D2D7B66C7DB622F /* FCompleteChildSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompleteChildSource.h; path = Firebase/Database/Core/View/Filter/FCompleteChildSource.h; sourceTree = ""; }; + 7612B8886297ECA57B9853F437A7F196 /* Realm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Realm.h; path = include/Realm.h; sourceTree = ""; }; + 7637902B4668DDDC67B520644310F065 /* FIRNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNetworkURLSession.m; path = Firebase/Core/FIRNetworkURLSession.m; sourceTree = ""; }; + 7685EA497D4AE8E21984076298B032AE /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = ""; }; + 76A04A94145B3FDD3392961F5A3F093C /* SideMenu.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SideMenu.modulemap; sourceTree = ""; }; + 76E4ED39E760E6169AD63819AFD85640 /* SideMenuManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SideMenuManager.swift; path = Pod/Classes/SideMenuManager.swift; sourceTree = ""; }; + 7741D2B908706A014865AF7DAB2BA4AF /* FIREmailPasswordAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailPasswordAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/EmailPassword/FIREmailPasswordAuthCredential.m; sourceTree = ""; }; + 774C4A3357F416FF4ABBC5D20E381FAC /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = ""; }; + 77C6FC471A95E71A435F5C6B754AB34E /* PromiseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromiseKit-prefix.pch"; sourceTree = ""; }; + 77D387360DE7045C51A1E141AB6CDE09 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; + 785704FC5AE23C778C28851BB9F66712 /* FTypedefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs.h; path = Firebase/Database/Utilities/FTypedefs.h; sourceTree = ""; }; + 788C0E2205927E8A04F8DC86C8BEF339 /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = Firebase/Core/Private/FIRVersion.h; sourceTree = ""; }; + 78A8250090CA6E2D3ACEE645413821C9 /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; + 78B38305A403CF3D484D33D89933A4F9 /* FEventGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventGenerator.h; path = Firebase/Database/FEventGenerator.h; sourceTree = ""; }; + 78CDC724482462A38883D58A5C254258 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Filter.swift; sourceTree = ""; }; 7904EA655451E47F1B178CD6080E46B3 /* Pods-pocloud.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-pocloud.debug.xcconfig"; sourceTree = ""; }; - 7913F86A702F9C8F85472BAEC81459A5 /* crc32c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crc32c.h; path = util/crc32c.h; sourceTree = ""; }; - 796D14C630D8812D2DCE28B605FC4564 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - 797648B1E0D3A6066F994556F924BF1E /* FIRResetPasswordRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRResetPasswordRequest.m; path = Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.m; sourceTree = ""; }; - 79AF623890C6DC0CA3A952646F4A3A74 /* SwiftChart.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftChart.xcconfig; sourceTree = ""; }; - 79C6FE77B99E2E6E5FD2CF6ED248C543 /* FMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMerge.h; path = Firebase/Database/Core/Operation/FMerge.h; sourceTree = ""; }; - 79DFB4F96F2ADED65E9DFD60E2139A87 /* APLevelDB.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = APLevelDB.mm; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm"; sourceTree = ""; }; - 7A1DE1315A11CD023158786D3187DF8C /* options.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = options.h; path = include/leveldb/options.h; sourceTree = ""; }; - 7A2BDE296D8DDD93BA5BDD6A21AA3E37 /* SVProgressAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressAnimatedView.m; path = SVProgressHUD/SVProgressAnimatedView.m; sourceTree = ""; }; - 7A472B808EDB6A83459DD76A79343A48 /* fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fwd.h; path = Sources/fwd.h; sourceTree = ""; }; - 7AB4EFC7D664CE1E573015CF430E9ABE /* RLMSyncSessionRefreshHandle.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSessionRefreshHandle.mm; path = Realm/RLMSyncSessionRefreshHandle.mm; sourceTree = ""; }; - 7AE853070D0387E8AC5441618DC1DF9B /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Configuration.swift; sourceTree = ""; }; - 7AED3E930C42795FCFAA5FF2243A3039 /* GTMNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSData+zlib.m"; path = "Foundation/GTMNSData+zlib.m"; sourceTree = ""; }; - 7B2B42C046114BA0FE5525A81C338031 /* FAckUserWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAckUserWrite.h; path = Firebase/Database/Core/Operation/FAckUserWrite.h; sourceTree = ""; }; - 7BFDFA14359B1B0BEE2CA0ABDC4C58B3 /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/ImageTransition.swift; sourceTree = ""; }; - 7C2764F649066BFC811831F350C07134 /* RLMSyncConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncConfiguration.mm; path = Realm/RLMSyncConfiguration.mm; sourceTree = ""; }; - 7CED8D21E7C53ED13858B3B607897C0C /* FIRReachabilityChecker+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRReachabilityChecker+Internal.h"; path = "Firebase/Core/Private/FIRReachabilityChecker+Internal.h"; sourceTree = ""; }; - 7CF285C720B7E99C27DE9EE39CF64F0C /* FIRNetworkConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkConstants.h; path = Firebase/Core/Private/FIRNetworkConstants.h; sourceTree = ""; }; - 7D06036A48C38D7D57ADCEF3C5127F96 /* FTupleStringNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleStringNode.m; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.m; sourceTree = ""; }; - 7D89AEBF817EB6444223B32A0DFFD27D /* Kingfisher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.xcconfig; sourceTree = ""; }; - 7DBCC3ED273043DA153C2CB9A8D5B1D6 /* RLMRealm+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealm+Sync.mm"; path = "Realm/RLMRealm+Sync.mm"; sourceTree = ""; }; - 7DD6C39190CCBFB2CC1FC01CA4F58CEA /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageView+Kingfisher.swift"; path = "Sources/ImageView+Kingfisher.swift"; sourceTree = ""; }; - 7E904356BBD7A751A2C39DFF6784C13D /* FIROAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/OAuth/FIROAuthCredential.m; sourceTree = ""; }; - 7EA0E86840087A2F988191982AEF7BE4 /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = ""; }; - 7EC13AE3E7408848C1905A3C3DE6D75B /* FIRAuthAppDelegateProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAppDelegateProxy.m; path = Firebase/Auth/Source/FIRAuthAppDelegateProxy.m; sourceTree = ""; }; - 7EEFEA8CE983E6EE050FBF782D98B79D /* FIRNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNetworkURLSession.m; path = Firebase/Core/FIRNetworkURLSession.m; sourceTree = ""; }; - 7F568E2FB0AF2F675B252CA373C69672 /* FIRNoopAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNoopAuthTokenProvider.h; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.h; sourceTree = ""; }; - 7F7A1A72AF59BE923FA3943B224D2BBD /* FIndexedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedNode.m; path = Firebase/Database/Snapshot/FIndexedNode.m; sourceTree = ""; }; - 7F7A60E8391C0103B242BB64C3E046EF /* FIRDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabase.m; path = Firebase/Database/Api/FIRDatabase.m; sourceTree = ""; }; - 7F8B89BBE9BEFAC7A8E97AF53F8C835D /* crc32c.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = crc32c.cc; path = util/crc32c.cc; sourceTree = ""; }; - 7FA0FB5E1BD4E206AD6CA29388D53C9F /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseInstanceID.framework; path = Frameworks/FirebaseInstanceID.framework; sourceTree = ""; }; - 80CCE5EF196537E4E1F1C22EB8F190BC /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_decode.c; sourceTree = ""; }; - 80E58255240BCE83C15FD794E52C3F01 /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = Firebase/Core/Private/FIRVersion.h; sourceTree = ""; }; - 8107EE21C879AF93E93DC6E232BDF7E3 /* FImmutableTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableTree.h; path = Firebase/Database/Core/Utilities/FImmutableTree.h; sourceTree = ""; }; - 811E448B021B0518BB2802E83B759A48 /* FPathIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPathIndex.h; path = Firebase/Database/FPathIndex.h; sourceTree = ""; }; - 8128B85FFE0C0D700431543AA97F0F38 /* RLMPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMPlatform.h; path = include/RLMPlatform.h; sourceTree = ""; }; - 8131049A8380941A015BC952D24BC4A5 /* FWebSocketConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWebSocketConnection.m; path = Firebase/Database/Realtime/FWebSocketConnection.m; sourceTree = ""; }; - 813907820EE8D08F4E51858C8DF63508 /* RLMSyncPermission.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermission.mm; path = Realm/RLMSyncPermission.mm; sourceTree = ""; }; - 813C855CBF32B7018B96D90D50ACDC75 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 82121DFC73E36F57610A2EA7B5BB32A1 /* SVRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVRadialGradientLayer.m; path = SVProgressHUD/SVRadialGradientLayer.m; sourceTree = ""; }; - 825761CCB49BEA007AA06F02FCCE907D /* options.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = options.cc; path = util/options.cc; sourceTree = ""; }; - 82839582921198FABDE00052D66E2F0C /* FirebaseAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseAuth.h; path = Firebase/Auth/Source/Public/FirebaseAuth.h; sourceTree = ""; }; - 829D2B9470AC0635766764B8176BD052 /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; }; - 833FFA65380BC592A5DA4FEE614B246D /* RLMObjectBase_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Dynamic.h; path = include/RLMObjectBase_Dynamic.h; sourceTree = ""; }; - 8369E110071BFBC9A37294A747D99E9B /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ChameleonFramework.modulemap; sourceTree = ""; }; - 83CD4E6B1ED7B301D58E21CE221CDB01 /* PromiseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromiseKit-dummy.m"; sourceTree = ""; }; - 843D5111E7D78F9D8C0552A9992D3BCD /* FNamedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNamedNode.h; path = Firebase/Database/FNamedNode.h; sourceTree = ""; }; - 84421758A9D8BDF43864192E4D0CE548 /* coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = coding.h; path = util/coding.h; sourceTree = ""; }; - 848D29C5FC6A7B0FFDC1DB2DFCE7BEBC /* FIRVerifyClientRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyClientRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.h; sourceTree = ""; }; - 84B5E0BD4A534DE8672E0ECCC5B57062 /* ImageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageModifier.swift; path = Sources/ImageModifier.swift; sourceTree = ""; }; - 850B48724DDD9CA3ADE704FA62D5EA5A /* FIRGetProjectConfigResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetProjectConfigResponse.h; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigResponse.h; sourceTree = ""; }; - 854719D9A0CF8C52152DC541E1D3EF66 /* Kingfisher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kingfisher-dummy.m"; sourceTree = ""; }; - 85B9D47CA185751D2CC8D7B324EB7EEF /* FIRAuthSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthSettings.m; path = Firebase/Auth/Source/FIRAuthSettings.m; sourceTree = ""; }; - 85BEE294468499CAB9D040C75CFB6879 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; - 869C5AF859D170BC4B0887A66A7D532A /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = RealmSwift/Schema.swift; sourceTree = ""; }; - 86AEFDFBF9CDE9F34BB3754CE36A1AE9 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; - 86B7ECE0F84BACFC785AB07041F1B3C7 /* FTupleNodePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleNodePath.h; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.h; sourceTree = ""; }; - 8711A6C76DC7471688C3AA1DAA4567E2 /* SideMenu.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SideMenu.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 876C8FE4C8BC6D8AF9FFD9FF46B6589C /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = ""; }; - 87A9164E5451984017B164DE6217DE77 /* SVProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SVProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 87E1BC974D69E0F783517F2A463676DD /* FIRSecureTokenRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSecureTokenRequest.m; path = Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m; sourceTree = ""; }; - 881B396F293B5055277292EEF4F7F1DA /* FIRDeleteAccountResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDeleteAccountResponse.m; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountResponse.m; sourceTree = ""; }; - 8836D06E2AC67B606D19835C0351C275 /* FIRAuthURLPresenter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthURLPresenter.m; path = Firebase/Auth/Source/FIRAuthURLPresenter.m; sourceTree = ""; }; - 88736793BE9E25AAB9A2ADE921569424 /* log_writer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_writer.h; path = db/log_writer.h; sourceTree = ""; }; - 88DC3C4F9C544BC4E4297988708ECE37 /* FViewCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewCache.h; path = Firebase/Database/Core/View/FViewCache.h; sourceTree = ""; }; - 88E580127B8AC3BCDE2FF1A04185CA79 /* SVProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-prefix.pch"; sourceTree = ""; }; - 88EA2512216314AF93669CDC3C0BCC8B /* FIRAuthDispatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDispatcher.h; path = Firebase/Auth/Source/FIRAuthDispatcher.h; sourceTree = ""; }; - 897B651D79ACD29705D75780311D909D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 89F27B0980DDE5BD783531CF77807A73 /* RLMSyncManager_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager_Private.h; path = include/RLMSyncManager_Private.h; sourceTree = ""; }; - 8A062A239385A4D191C871589DED362E /* FTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTree.m; path = Firebase/Database/Core/Utilities/FTree.m; sourceTree = ""; }; - 8A6F67245C5EF7F78E4682A85FC6A849 /* FIRUserMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserMetadata.h; path = Firebase/Auth/Source/Public/FIRUserMetadata.h; sourceTree = ""; }; - 8AE871854B59BD765240668386C1DC4D /* FEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRegistration.h; path = Firebase/Database/Core/View/FEventRegistration.h; sourceTree = ""; }; - 8B096D5FC4934FF4A2297A9CDB96AE52 /* FChildrenNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildrenNode.h; path = Firebase/Database/Snapshot/FChildrenNode.h; sourceTree = ""; }; - 8B1BC4E4C1A06AD1BE9AC63866DE44F3 /* FIRTwitterAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTwitterAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Twitter/FIRTwitterAuthProvider.m; sourceTree = ""; }; - 8B1E5B3FD413F33EB83E2906392EB292 /* RLMArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMArray.mm; path = Realm/RLMArray.mm; sourceTree = ""; }; - 8B39D3D8B35335FA45948869AE8CC032 /* system_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = system_configuration.cpp; path = Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp; sourceTree = ""; }; - 8B4702AFD645801109ACC320CB48D0E3 /* RealmConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmConfiguration.swift; path = RealmSwift/RealmConfiguration.swift; sourceTree = ""; }; - 8B7DB1E54F31774781F5E7EA96A0E365 /* RLMObjectBase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Private.h; path = include/RLMObjectBase_Private.h; sourceTree = ""; }; - 8BDE227456E7A4A10B5674E0F7F1E8A6 /* RLMQueryUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMQueryUtil.mm; path = Realm/RLMQueryUtil.mm; sourceTree = ""; }; - 8C419006F9EBDF2CE1572087941841CD /* FStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FStringUtilities.m; path = Firebase/Database/Utilities/FStringUtilities.m; sourceTree = ""; }; - 8C5F1BDBD937E21E2A932593664BC2E4 /* FIRGoogleAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGoogleAuthProvider.h; path = Firebase/Auth/Source/Public/FIRGoogleAuthProvider.h; sourceTree = ""; }; - 8C86EBB0032823748C3C73ECF340FDC1 /* thread_safe_reference.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = thread_safe_reference.cpp; path = Realm/ObjectStore/src/thread_safe_reference.cpp; sourceTree = ""; }; - 8CE420DA1558F78911A3B350A9A11A79 /* FQuerySpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQuerySpec.h; path = Firebase/Database/Core/FQuerySpec.h; sourceTree = ""; }; - 8DD911CD20C74127970E24F1205AA100 /* ThreadSafeReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadSafeReference.swift; path = RealmSwift/ThreadSafeReference.swift; sourceTree = ""; }; - 8DEA2ECAD7B0C441945F043E8A185698 /* iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator.h; path = include/leveldb/iterator.h; sourceTree = ""; }; - 8DEB0049DCC0A568FB706C16B0B04B15 /* PromiseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromiseKit.modulemap; sourceTree = ""; }; - 8E2EF1FC87C693AD40D02F7164BC01D9 /* FViewCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewCache.m; path = Firebase/Database/Core/View/FViewCache.m; sourceTree = ""; }; - 8E4512E7B81A64FFC9B8E3208E8596CB /* GTMDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; - 8EB4CA782B4E1BDD6432422D73C87206 /* FLeafNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLeafNode.h; path = Firebase/Database/Snapshot/FLeafNode.h; sourceTree = ""; }; - 8ECC507E7F47E66784AAB190F66457D6 /* RLMSwiftSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSwiftSupport.m; path = Realm/RLMSwiftSupport.m; sourceTree = ""; }; - 8F05BBCB1F615E470A220DB8DEC9140D /* FValueIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueIndex.m; path = Firebase/Database/FValueIndex.m; sourceTree = ""; }; - 8F1BEA718FC558295361DE96283D7161 /* FKeyIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeyIndex.m; path = Firebase/Database/FKeyIndex.m; sourceTree = ""; }; - 8F6DFBD150A3B56A826609F05027EBF2 /* RLMRealm_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Private.h; path = include/RLMRealm_Private.h; sourceTree = ""; }; - 903B2DFB2B75E07AD51566DB58E59C83 /* FIRGetOOBConfirmationCodeResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetOOBConfirmationCodeResponse.m; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeResponse.m; sourceTree = ""; }; - 904A85DCC0C31F485625F9429B5A0288 /* write_batch.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = write_batch.cc; path = db/write_batch.cc; sourceTree = ""; }; - 9075980E4D0116EE5A04C9D0DB658EB7 /* FIRAuthSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthSettings.h; path = Firebase/Auth/Source/Public/FIRAuthSettings.h; sourceTree = ""; }; - 912431AAC7A4A16F390214EA93DA877F /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_common.c; sourceTree = ""; }; - 91616CCF5C4E910975ED0143C9C9FA25 /* UISideMenuNavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UISideMenuNavigationController.swift; path = Pod/Classes/UISideMenuNavigationController.swift; sourceTree = ""; }; - 91A054E8B1F8126C7A18B34BA0D619BC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 91FA7AE6B4AA6D2454F4599FC29CBE8A /* FIRSetAccountInfoResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSetAccountInfoResponse.m; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoResponse.m; sourceTree = ""; }; - 9298A68A6B543B408DC9E5FE996F903E /* FAckUserWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAckUserWrite.m; path = Firebase/Database/Core/Operation/FAckUserWrite.m; sourceTree = ""; }; - 92B76C50618D84D3A4C1256A34745255 /* FMaxNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMaxNode.m; path = Firebase/Database/FMaxNode.m; sourceTree = ""; }; - 9324BF7B815CE592B1B98F5DA6A82328 /* fbase64.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fbase64.c; path = Firebase/Database/third_party/SocketRocket/fbase64.c; sourceTree = ""; }; + 7914027ECA70A7FBBE9D4102042A86B8 /* testharness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testharness.h; path = util/testharness.h; sourceTree = ""; }; + 793159F9E53F784B20AE7D666C7E7C9B /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + 79354ADC42B200C248C8124D60CB81E6 /* RLMSyncUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil.h; path = include/RLMSyncUtil.h; sourceTree = ""; }; + 7936A56936DC138ECD9CF9EB11566720 /* Kingfisher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.xcconfig; sourceTree = ""; }; + 7944BA997F53E27F2D1F54CA2F25496E /* Realm.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Realm.xcconfig; sourceTree = ""; }; + 79582042D43A0EA1E68F34A15FECF6E6 /* FIROAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/OAuth/FIROAuthCredential.m; sourceTree = ""; }; + 79B0D83A863CC6B26F3B8953DE584165 /* version_edit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_edit.h; path = db/version_edit.h; sourceTree = ""; }; + 79B6AB976E1A4D392FBA7CCF6357945B /* FIRVerifyAssertionResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyAssertionResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionResponse.h; sourceTree = ""; }; + 7A21D5B5371B5E7636CBA4BD83CA63E9 /* FIROAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/OAuth/FIROAuthCredential.h; sourceTree = ""; }; + 7A2F2C82A25177D08A28BB5459B84C0A /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; + 7A3844CA270A7CED9BA4790A5AC267BF /* FSnapshotHolder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotHolder.m; path = Firebase/Database/Core/FSnapshotHolder.m; sourceTree = ""; }; + 7A59FB51DA1BCED1B41485FC9E165AF9 /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = ""; }; + 7A67DE7838148233FBF12950FE0AD450 /* SideMenu-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SideMenu-umbrella.h"; sourceTree = ""; }; + 7A77A063313D4220856407B8BD56CF59 /* FIRFacebookAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRFacebookAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Facebook/FIRFacebookAuthCredential.m; sourceTree = ""; }; + 7AFC2C32F983659FFE3698E948C6334D /* hang.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = hang.m; path = Sources/hang.m; sourceTree = ""; }; + 7B4BCAD8FD3A9F982DC589D5471C8F6E /* log_reader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_reader.h; path = db/log_reader.h; sourceTree = ""; }; + 7BAEAFEC92571D92EF4484705568BA63 /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; + 7C091FCC6D46C49F295A935225FACBA6 /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = ""; }; + 7C0FEC35A6418184C241C03F020A5E40 /* FTupleUserCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleUserCallback.h; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.h; sourceTree = ""; }; + 7C3CCD25881233655EC34CC8FC36927A /* RLMObjectBase_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Dynamic.h; path = include/RLMObjectBase_Dynamic.h; sourceTree = ""; }; + 7C930B245950DF4367BCF0D8467CE9D8 /* object_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_notifier.cpp; path = Realm/ObjectStore/src/impl/object_notifier.cpp; sourceTree = ""; }; + 7CCCDCE5180D72EF2A7915476786F336 /* FRangeMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangeMerge.m; path = Firebase/Database/Core/FRangeMerge.m; sourceTree = ""; }; + 7CF0301A467BA1C7EF4C001F2C36F460 /* RLMQueryUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMQueryUtil.mm; path = Realm/RLMQueryUtil.mm; sourceTree = ""; }; + 7D8CBCBD0D4A59762D4A428E878D085A /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ChameleonFramework.modulemap; sourceTree = ""; }; + 7DED48C2A2C2DA2C90329CF44BCE5B18 /* hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash.h; path = util/hash.h; sourceTree = ""; }; + 7E3C68A8338F859194C1124BEBDCB0A5 /* RLMMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration.h; path = include/RLMMigration.h; sourceTree = ""; }; + 7EE3F1520FA3FB9C749D850C7E2B520B /* SortDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SortDescriptor.swift; path = RealmSwift/SortDescriptor.swift; sourceTree = ""; }; + 7F099B740609AB599E6284B793EB85E5 /* FIndexedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedFilter.m; path = Firebase/Database/Core/View/Filter/FIndexedFilter.m; sourceTree = ""; }; + 7F5BE1BD9030E21522E465FE0E909980 /* SVIndefiniteAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVIndefiniteAnimatedView.m; path = SVProgressHUD/SVIndefiniteAnimatedView.m; sourceTree = ""; }; + 7FAAC7B65E59E536B765908EDE0F3535 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; + 7FD63606AEEA7A6C586C0E31B2E7D453 /* dumpfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dumpfile.h; path = include/leveldb/dumpfile.h; sourceTree = ""; }; + 7FDA66C5596A9622CA9B7C57949A38C9 /* FIRNoopAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNoopAuthTokenProvider.m; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.m; sourceTree = ""; }; + 802DF4CEDE7115D1ED4C4627ED0B1A13 /* FCachePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCachePolicy.h; path = Firebase/Database/Persistence/FCachePolicy.h; sourceTree = ""; }; + 8052150797EF7003E18047A0AE00F0C5 /* FIREmailAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailAuthProvider.h; path = Firebase/Auth/Source/Public/FIREmailAuthProvider.h; sourceTree = ""; }; + 80E37B9A54C39CE0E0145C88BD3DDD3F /* FIRVerifyCustomTokenRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyCustomTokenRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.h; sourceTree = ""; }; + 810A10450ECFA0D3FFDF555F29BC5782 /* FIRAuthWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthWebViewController.m; path = Firebase/Auth/Source/FIRAuthWebViewController.m; sourceTree = ""; }; + 81225CCEF8D97A19F315501E94968B16 /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; + 8129D1783B9F8B482F0A3F1333A79EDC /* FTrackedQueryManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQueryManager.m; path = Firebase/Database/Persistence/FTrackedQueryManager.m; sourceTree = ""; }; + 81CC21A6AB646F4422180E0373894A61 /* FIRMutableData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMutableData.m; path = Firebase/Database/Api/FIRMutableData.m; sourceTree = ""; }; + 823F49DE7F0D55893A775A770C6FEF80 /* FIRDatabaseQuery_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h; sourceTree = ""; }; + 824F6D873FAAFD885E3A2C085BC79AD4 /* FIRSecureTokenResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSecureTokenResponse.h; path = Firebase/Auth/Source/RPCs/FIRSecureTokenResponse.h; sourceTree = ""; }; + 8266BF952135223BA206F6CED75BBB03 /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = ""; }; + 829820B8821F8CF277355998B0EB4E6B /* FIRAuthDataResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDataResult.h; path = Firebase/Auth/Source/Public/FIRAuthDataResult.h; sourceTree = ""; }; + 82B6B81212097CABC380F5F7C605BD02 /* RLMObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectStore.h; path = include/RLMObjectStore.h; sourceTree = ""; }; + 82F2D45183A0F738F0A97A50B934F10A /* RLMSyncSubscription.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSubscription.mm; path = Realm/RLMSyncSubscription.mm; sourceTree = ""; }; + 83AC5A48327A8EEFFA935389CA55EC15 /* FIRAuthTokenResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthTokenResult.m; path = Firebase/Auth/Source/FIRAuthTokenResult.m; sourceTree = ""; }; + 83F5A22F9B9DB04DAAC56E6048565ECA /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; + 8414C4672D0F3D823B58F0C614D520B6 /* cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = cache.cc; path = util/cache.cc; sourceTree = ""; }; + 8452774B42ECFB83C55E5D4F4FF8A955 /* SwiftChart-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftChart-umbrella.h"; sourceTree = ""; }; + 850C89F9188FF87678E74F3783CEAA50 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + 850E23D92FFA2683BF6D166F4B989B95 /* FIRAuthDataResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthDataResult.m; path = Firebase/Auth/Source/FIRAuthDataResult.m; sourceTree = ""; }; + 851203D593E01F116B920E3E8051D0F7 /* FIRActionCodeSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRActionCodeSettings.h; path = Firebase/Auth/Source/Public/FIRActionCodeSettings.h; sourceTree = ""; }; + 85E3EBCF4EE6111A229B8733458A45D1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8616C6866E01247A6B293A8931181F1E /* slice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = slice.h; path = include/leveldb/slice.h; sourceTree = ""; }; + 8638B90F982D4A1D791C02A4DC43FE0D /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageView+Kingfisher.swift"; path = "Sources/ImageView+Kingfisher.swift"; sourceTree = ""; }; + 8734C162176FD7FDC4BF6BA3FB495692 /* FTransformedEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTransformedEnumerator.h; path = Firebase/Database/FTransformedEnumerator.h; sourceTree = ""; }; + 874D039FE167C6DD4D6D90A63EF7DD7B /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = ""; }; + 8787C588B6C7837C4E9688C8C999C84C /* Charts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Charts-dummy.m"; sourceTree = ""; }; + 87AF62BD026597BFB6BEDA8E02DF8189 /* RLMSyncConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration_Private.h; path = include/RLMSyncConfiguration_Private.h; sourceTree = ""; }; + 87D9AC6D54D56176799916C939C2B1A0 /* FQueryParams.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQueryParams.h; path = Firebase/Database/Core/FQueryParams.h; sourceTree = ""; }; + 87FC2984C9D99C99747A87A025913B44 /* FIRAuthWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthWebViewController.h; path = Firebase/Auth/Source/FIRAuthWebViewController.h; sourceTree = ""; }; + 88061D9A026D1728AF0FEC00E1BEA2BA /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_encode.c; sourceTree = ""; }; + 88331AF8C3BFC76E90C3264E87C4C901 /* FIRAuthDataResult_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDataResult_Internal.h; path = Firebase/Auth/Source/FIRAuthDataResult_Internal.h; sourceTree = ""; }; + 884FE364F7F4AC9D3B915B63C844CFA1 /* FIREmailLinkSignInResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailLinkSignInResponse.m; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInResponse.m; sourceTree = ""; }; + 8888DC66E10879CC9EDB6F60DD99AF13 /* RLMSyncUtil_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil_Private.h; path = include/RLMSyncUtil_Private.h; sourceTree = ""; }; + 88C62B868B2BEFA0EABA6C50EB778159 /* options.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = options.h; path = include/leveldb/options.h; sourceTree = ""; }; + 891405B2B88EE4E540AF70CE9C20089C /* external_commit_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = external_commit_helper.cpp; path = Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp; sourceTree = ""; }; + 892CA59B13478F06E097BEA9A8C170EA /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = ""; }; + 8A506D5A254369BC7F2340AFB1810AC4 /* FIRVerifyPhoneNumberRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPhoneNumberRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m; sourceTree = ""; }; + 8A5531FDC81208AA04006520EA2E7185 /* FTrackedQueryManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQueryManager.h; path = Firebase/Database/Persistence/FTrackedQueryManager.h; sourceTree = ""; }; + 8AD7186A4B4F9CE3B057BE9851875C5D /* FIRGitHubAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGitHubAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/GitHub/FIRGitHubAuthCredential.m; sourceTree = ""; }; + 8AF2EF0668BE38CC1D6E516827CF5037 /* FEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEmptyNode.m; path = Firebase/Database/Snapshot/FEmptyNode.m; sourceTree = ""; }; + 8BF93A3326AE273FEA46726801C04976 /* FIRAuthUserDefaultsStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthUserDefaultsStorage.h; path = Firebase/Auth/Source/FIRAuthUserDefaultsStorage.h; sourceTree = ""; }; + 8C49AAEFCD32B4B510FB8224BCD0944E /* RLMConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMConstants.m; path = Realm/RLMConstants.m; sourceTree = ""; }; + 8C69E4C66B28770C59E6B9BA77DA2830 /* SVProgressAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressAnimatedView.h; path = SVProgressHUD/SVProgressAnimatedView.h; sourceTree = ""; }; + 8C73FE0756F8F5C0417D56031B62FB80 /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; + 8CB983503C52AC6448E9DB5F554FE236 /* NSError+RLMSync.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+RLMSync.m"; path = "Realm/NSError+RLMSync.m"; sourceTree = ""; }; + 8CD47D2199FB043E90797A0EED88DE5E /* FListenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenProvider.m; path = Firebase/Database/Core/FListenProvider.m; sourceTree = ""; }; + 8D2C8704A62E407D434E266CAD07518A /* FIRVerifyCustomTokenResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyCustomTokenResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenResponse.m; sourceTree = ""; }; + 8DE4B04A2D8F3845CB79A83621AA60EC /* APLevelDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APLevelDB.h; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h"; sourceTree = ""; }; + 8E1D144B75B049DC621003B67C0CD62F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8E5D887055BB8A66417BED95CFE1A7F8 /* FIRDataSnapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot.h; path = Firebase/Database/Public/FIRDataSnapshot.h; sourceTree = ""; }; + 8E7C344E3090DBF2569D710383CAE4F0 /* FIRDatabaseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery.h; path = Firebase/Database/Public/FIRDatabaseQuery.h; sourceTree = ""; }; + 8F2132A35DEEA2D49B89DCE4248093A9 /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = ""; }; + 8F3E7852BF6DED7418C374015298907E /* FViewProcessorResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessorResult.m; path = Firebase/Database/FViewProcessorResult.m; sourceTree = ""; }; + 8F61CA59F4D5473CEF4F228C2A3398D2 /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8FB7571887C1B0B1FB4A5D9112DBF223 /* format.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = format.cc; path = table/format.cc; sourceTree = ""; }; + 8FBAEF6A37B78525066DB01BBEC072B7 /* RLMSyncConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncConfiguration.h; path = include/RLMSyncConfiguration.h; sourceTree = ""; }; + 903734663D02151E18F4C148991DAAE0 /* RLMUpdateChecker.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMUpdateChecker.mm; path = Realm/RLMUpdateChecker.mm; sourceTree = ""; }; + 90A88E56AAB100414B7E1B8F9E14500E /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = ""; }; + 90DF32E713CBC3C486D7DCC8D259083C /* index_set.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_set.cpp; path = Realm/ObjectStore/src/index_set.cpp; sourceTree = ""; }; + 90DFF4F552B983996A7FA6E20710FED8 /* FAtomicNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAtomicNumber.h; path = Firebase/Database/Utilities/FAtomicNumber.h; sourceTree = ""; }; + 90F3F298EC4F08FC7B7656C36536C85C /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = RealmSwift/Util.swift; sourceTree = ""; }; + 91B4EA3280F40FE0AB0FBF167DFE5697 /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; + 92084CC78383927905E5D5449826ABE1 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; + 9248A90B24912C0222CB8033CA987645 /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_common.c; sourceTree = ""; }; + 92688E0D3D7BF74B53C6FFAB522EE2E4 /* FTupleSetIdPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleSetIdPath.m; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m; sourceTree = ""; }; + 92B79FD3CEA8082FC5E7227D4655E4B6 /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/Kingfisher.swift; sourceTree = ""; }; + 92FC2E5B1068BCFE8E31DDAD713D90E0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9311461610A5335AB38831FE1EB0C41A /* FIRErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrors.h; path = Firebase/Core/Private/FIRErrors.h; sourceTree = ""; }; + 9315BCEE77E17FC2A4B79EACFF40998A /* after.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = after.swift; path = Sources/after.swift; sourceTree = ""; }; + 932C05AC017722E6D90C5B9DEC225894 /* RLMObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObject.mm; path = Realm/RLMObject.mm; sourceTree = ""; }; + 9339F53FE10BE090D1004CE9755EC055 /* block_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block_builder.h; path = table/block_builder.h; sourceTree = ""; }; + 9371C403F279FD7B8D4D8B8662761FE2 /* FIRNoopAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNoopAuthTokenProvider.h; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.h; sourceTree = ""; }; + 93762F97D5ED6B7950A565F65CD9CEE0 /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 950B89A37F650A6B150BB61CBD929CD6 /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = ""; }; - 950BEE25475AF8AB9882D8903CBF417C /* FValueEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueEventRegistration.h; path = Firebase/Database/Core/View/FValueEventRegistration.h; sourceTree = ""; }; - 95885AB8284E99BEBECAB3C364967D0B /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; - 9603113FBB4115B156F91010FA140D23 /* FIRPhoneAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRPhoneAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthProvider.m; sourceTree = ""; }; - 9621451D235008B6528F52230A6894E9 /* FCompleteChildSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompleteChildSource.h; path = Firebase/Database/Core/View/Filter/FCompleteChildSource.h; sourceTree = ""; }; - 964BC0A02DE65A55B384856AD9CAC6B8 /* RLMSyncUser.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUser.mm; path = Realm/RLMSyncUser.mm; sourceTree = ""; }; - 96880D71BB718EC563DB546D8AC09B02 /* RLMSyncManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncManager.mm; path = Realm/RLMSyncManager.mm; sourceTree = ""; }; - 96B7665DC8B7B4D3701725E3EC7BA80E /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = RealmSwift/Util.swift; sourceTree = ""; }; - 96DDC705EBD3CE46C26E4DFDC7B1AB86 /* firstly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = firstly.swift; path = Sources/firstly.swift; sourceTree = ""; }; - 96F68DEE8EDCECE1EA450424EB19AAEE /* FValueIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueIndex.h; path = Firebase/Database/FValueIndex.h; sourceTree = ""; }; - 97556BF680D73BEE50BC370237CE2ED1 /* port_example.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_example.h; path = port/port_example.h; sourceTree = ""; }; - 98176F7EB9856607DC25015E67B35486 /* SwiftChart-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftChart-prefix.pch"; sourceTree = ""; }; - 981B0AE384FEBF7B3CA6F32DC513A6D7 /* FIRFacebookAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRFacebookAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Facebook/FIRFacebookAuthProvider.m; sourceTree = ""; }; - 982417A3B308786B28B3E55A210AC1FD /* FSparseSnapshotTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSparseSnapshotTree.m; path = Firebase/Database/Core/FSparseSnapshotTree.m; sourceTree = ""; }; - 9858FE2A6CD145EFD7EB722FEE336C89 /* AnyPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyPromise.swift; path = Sources/AnyPromise.swift; sourceTree = ""; }; - 9876E90F3950A1B691CE092868255CD8 /* FIRActionCodeSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRActionCodeSettings.m; path = Firebase/Auth/Source/FIRActionCodeSettings.m; sourceTree = ""; }; - 98D40162192EB7E105E483C7882AEA80 /* RLMSyncSubscription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSubscription.h; path = include/RLMSyncSubscription.h; sourceTree = ""; }; - 98F855CE72F3685AF9024F0DF90F3AED /* filename.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filename.h; path = db/filename.h; sourceTree = ""; }; - 994E34C59DB8E9DCF98E5A5EE5489AAA /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; - 997244D190C4DA8AE809CE08C59D4B29 /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = ""; }; - 99AF1B1BAFACCE770472FD60484786B2 /* FRepo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo_Private.h; path = Firebase/Database/Core/FRepo_Private.h; sourceTree = ""; }; - 99BB089F5CF6B601E331E971470C012A /* FIRDatabaseReference_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseReference_Private.h; sourceTree = ""; }; - 99F0A0BAB79736410A6D7CC877ED9A4F /* FLeafNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLeafNode.m; path = Firebase/Database/Snapshot/FLeafNode.m; sourceTree = ""; }; - 99FFFBFE2E49EE854353112FEFE653EC /* FIRAuthDataResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthDataResult.m; path = Firebase/Auth/Source/FIRAuthDataResult.m; sourceTree = ""; }; - 9A21D65008049DD151689EF9F5395381 /* sync_session.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_session.cpp; path = Realm/ObjectStore/src/sync/sync_session.cpp; sourceTree = ""; }; - 9ACBB2A3DD950E04C6B1FCD9F1DC108B /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = ""; }; - 9B1FA8AD627718648DA68296BEDC177B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9B4F6E28284FF624BFF2C716DC39024F /* FRepoManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoManager.h; path = Firebase/Database/Core/FRepoManager.h; sourceTree = ""; }; + 93FC6DF9FBCA2D545B1C3ED49F0F5D29 /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; + 944F8C52012913D714492B1F2774F94B /* FormatIndicatedCacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatIndicatedCacheSerializer.swift; path = Sources/FormatIndicatedCacheSerializer.swift; sourceTree = ""; }; + 947BAA0F775DD173FC7FBC52F19324A0 /* UIAppearance+Swift.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAppearance+Swift.m"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.m"; sourceTree = ""; }; + 94DC926EFD5E35AE0EA727D999BAD26F /* FIRCreateAuthURIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCreateAuthURIRequest.h; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.h; sourceTree = ""; }; + 951CC80F9BAF5CFF9FF40B6834B47C6C /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = RealmSwift/Migration.swift; sourceTree = ""; }; + 9520F4E98820B6F558926064876F5AC8 /* RLMRealm_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Private.h; path = include/RLMRealm_Private.h; sourceTree = ""; }; + 953E0852E01C51509E02B37E17E93C5E /* FTupleStringNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleStringNode.h; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.h; sourceTree = ""; }; + 9541E6B4336E92C5C49A3201A3DFDE7B /* snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = snapshot.h; path = db/snapshot.h; sourceTree = ""; }; + 9578E32874352EC3F5E46BF1C17166C2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 95950109422E3F22FAD616FDD4DBC116 /* FTupleOnDisconnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleOnDisconnect.m; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m; sourceTree = ""; }; + 9627FD8F36F34032F218B1271FC536A7 /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; }; + 96851780AF6A88D586AAC94BFF34D705 /* FIRVerifyPasswordResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPasswordResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordResponse.h; sourceTree = ""; }; + 9703CBEF20334B7462F73334C5B156FF /* write_batch.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = write_batch.cc; path = db/write_batch.cc; sourceTree = ""; }; + 989EAF3DCA3CBD33274B002B2A4DCE61 /* object_schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_schema.cpp; path = Realm/ObjectStore/src/object_schema.cpp; sourceTree = ""; }; + 98C6C1DC67FE6FB631EB13328618D290 /* FKeepSyncedEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeepSyncedEventRegistration.m; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.m; sourceTree = ""; }; + 98E1D1FE20785A431DB1F1A409678D5C /* RLMObjectBase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase_Private.h; path = include/RLMObjectBase_Private.h; sourceTree = ""; }; + 990623AED0F8E420338425030236989B /* race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = race.m; path = Sources/race.m; sourceTree = ""; }; + 9958A301818B579A189DBDDFA4B6F989 /* RealmSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RealmSwift.modulemap; sourceTree = ""; }; + 998F1D1684276A1E86539A5975908D88 /* system_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = system_configuration.cpp; path = Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp; sourceTree = ""; }; + 999BB6545C2BD4474217011F2EC71906 /* Thenable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Thenable.swift; path = Sources/Thenable.swift; sourceTree = ""; }; + 99FF0EF905832C028A18D2964EE95D82 /* CustomStringConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomStringConvertible.swift; path = Sources/CustomStringConvertible.swift; sourceTree = ""; }; + 9A8626383D0431644FFE8F46D508F77D /* FSyncTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncTree.h; path = Firebase/Database/Core/FSyncTree.h; sourceTree = ""; }; + 9A92340D6E2B4EE9033CD9212ED2C825 /* FTrackedQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQuery.m; path = Firebase/Database/Persistence/FTrackedQuery.m; sourceTree = ""; }; + 9A94085869362C1259D5B71A3909042F /* AnimatedImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImageView.swift; path = Sources/AnimatedImageView.swift; sourceTree = ""; }; + 9A9D603EB01334C4C336592D90FB0A1C /* coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = coding.h; path = util/coding.h; sourceTree = ""; }; + 9AAA21B113E52450FA24FE55171F47DD /* ChameleonFramework.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.xcconfig; sourceTree = ""; }; 9B50A11F03F5E6C84500E56E4B6849DE /* Pods-pocloud-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-pocloud-frameworks.sh"; sourceTree = ""; }; - 9BC0174932E57EAE6EC19633AAEB7EA6 /* RLMMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMMigration.h; path = include/RLMMigration.h; sourceTree = ""; }; - 9C03BD85ABC64CD186A121936AB36741 /* arena.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = arena.h; path = util/arena.h; sourceTree = ""; }; - 9C224A282F04F2A209F24E12FD6A485F /* FAtomicNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAtomicNumber.m; path = Firebase/Database/Utilities/FAtomicNumber.m; sourceTree = ""; }; - 9C2DA7600F0669E802B1DCAC3D7C2D8D /* FIREmailAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/EmailPassword/FIREmailAuthProvider.m; sourceTree = ""; }; - 9C42B2760B949BEED82EBD3F86033DE6 /* FIRMutableData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMutableData.m; path = Firebase/Database/Api/FIRMutableData.m; sourceTree = ""; }; - 9C6EEEA8B6E6845C85916F0B2DB5D00A /* filter_block.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = filter_block.cc; path = table/filter_block.cc; sourceTree = ""; }; - 9CEF3BA59ED9C27B0B1653ECD59C3AA5 /* FIRFacebookAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRFacebookAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Facebook/FIRFacebookAuthCredential.m; sourceTree = ""; }; - 9CFB44E7986909688AA67ACB7477AFDB /* Thenable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Thenable.swift; path = Sources/Thenable.swift; sourceTree = ""; }; - 9D06031E56C16D9BA725FDC59F92C4DE /* log_reader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_reader.h; path = db/log_reader.h; sourceTree = ""; }; - 9D1A9788A71428201F949C720DA3C9C9 /* histogram.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = histogram.cc; path = util/histogram.cc; sourceTree = ""; }; - 9D4BB2F4FF61EF66313B797DD844EFF0 /* FIRPhoneAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRPhoneAuthCredential.m; path = Firebase/Auth/Source/AuthProviders/Phone/FIRPhoneAuthCredential.m; sourceTree = ""; }; - 9D63E653C0BB9F8E37E3A4D6ACA0523C /* FIRMutableData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData.h; path = Firebase/Database/Public/FIRMutableData.h; sourceTree = ""; }; - 9D9A4FAEC71E0B218A0C531F0D4D4D1B /* FIRPhoneAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRPhoneAuthProvider.h; path = Firebase/Auth/Source/Public/FIRPhoneAuthProvider.h; sourceTree = ""; }; - 9DBF4BDB35A5BDEAF68D7BE7C5FCF8F9 /* Results.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Results.swift; path = RealmSwift/Results.swift; sourceTree = ""; }; - 9DCA4497DF78553D1239B754708C2CB9 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = Firebase/Core/Private/FIRAppAssociationRegistration.h; sourceTree = ""; }; - 9E43B7E1F2579EF844CD943505C28416 /* FIRAuthDefaultUIDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDefaultUIDelegate.h; path = Firebase/Auth/Source/FIRAuthDefaultUIDelegate.h; sourceTree = ""; }; - 9E82CFD05B35717654A1CA07BA84FFE4 /* placeholder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = placeholder.cpp; path = Realm/ObjectStore/src/placeholder.cpp; sourceTree = ""; }; - 9E8ADF43E9D247D3BB0419A366EEAD55 /* FLLRBValueNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBValueNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h; sourceTree = ""; }; - 9F2EE7DDBF136DD05C0E02ED154059FE /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; - 9F337E4E3BE93C305DBB326335C09D2C /* FTupleBoolBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleBoolBlock.m; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m; sourceTree = ""; }; - 9F4BE791E1BAFA2B52E47778D476C11D /* FIRGetProjectConfigRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetProjectConfigRequest.m; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigRequest.m; sourceTree = ""; }; - 9FC894FE73485EAE64E47EC2B7F525A4 /* collection_change_builder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_change_builder.cpp; path = Realm/ObjectStore/src/impl/collection_change_builder.cpp; sourceTree = ""; }; - 9FCB6A8F99C4899F7414D370D4A77A3F /* race.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = race.swift; path = Sources/race.swift; sourceTree = ""; }; - 9FE7AEF7CA541FD67F39933A4390948B /* RLMResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMResults.mm; path = Realm/RLMResults.mm; sourceTree = ""; }; - A00D0EED7F7F39883D5DEE42E84DCC1A /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; - A0313D151CF5AED9251675316363A80C /* FIRSecureTokenResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSecureTokenResponse.h; path = Firebase/Auth/Source/RPCs/FIRSecureTokenResponse.h; sourceTree = ""; }; - A0531D91E7CFF1C4DF621C3246321F3E /* FTupleObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjects.m; path = Firebase/Database/Utilities/Tuples/FTupleObjects.m; sourceTree = ""; }; - A1980B3459A5D49DC21B3401F74CA7D3 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - A1D45D2E35C892676FF4C6063859015E /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = Firebase/Core/FIRBundleUtil.m; sourceTree = ""; }; - A1ED358F43ABF0E139113AFA038BC50C /* FListenComplete.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenComplete.m; path = Firebase/Database/FListenComplete.m; sourceTree = ""; }; - A25E8BC716B7E4643F55FCF77E563DCD /* FIRAuthWebView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthWebView.h; path = Firebase/Auth/Source/FIRAuthWebView.h; sourceTree = ""; }; - A28C8055B939C8A355918ACE46F7DCF3 /* FPersistentConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistentConnection.h; path = Firebase/Database/Core/FPersistentConnection.h; sourceTree = ""; }; - A2A07B142B800725A2FF3BFD9BE0E748 /* FIRReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRReachabilityChecker.m; path = Firebase/Core/FIRReachabilityChecker.m; sourceTree = ""; }; + 9B62EA01CFB05E93047777CCA1BFD294 /* comparator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = comparator.h; path = include/leveldb/comparator.h; sourceTree = ""; }; + 9B795D6B69559419018E87951D38F352 /* RLMObservation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObservation.mm; path = Realm/RLMObservation.mm; sourceTree = ""; }; + 9B950344BA8FC126A292D3CA789AF2C2 /* ThreadSafeReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadSafeReference.swift; path = RealmSwift/ThreadSafeReference.swift; sourceTree = ""; }; + 9B9B0512F2CB7AAE3AD87FFEC44F34F4 /* RLMPredicateUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMPredicateUtil.mm; path = Realm/RLMPredicateUtil.mm; sourceTree = ""; }; + 9B9BDF63B39092D211921C6CBD60DA7B /* FIRAuthNotificationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthNotificationManager.h; path = Firebase/Auth/Source/FIRAuthNotificationManager.h; sourceTree = ""; }; + 9BBA6B9BB3015E87BD31D16CC861DDA4 /* FIRAuthWebView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthWebView.h; path = Firebase/Auth/Source/FIRAuthWebView.h; sourceTree = ""; }; + 9C222A911FE8BB7A4667EA03E62A0A10 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = ""; }; + 9C39B60D444A644531A2F92C55F8CC9F /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = ""; }; + 9C7A8524355BA95D055AD0C1BE8A739B /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; + 9CBB5AFA0FFA2140562338C10AB62AC6 /* FOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperation.h; path = Firebase/Database/Core/Operation/FOperation.h; sourceTree = ""; }; + 9D34C37E819E168E7E98D1AF3B56A88E /* FNextPushId.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNextPushId.m; path = Firebase/Database/Utilities/FNextPushId.m; sourceTree = ""; }; + 9D3F38B2341DD1DD8C826AA01D21774D /* FIRResetPasswordResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRResetPasswordResponse.h; path = Firebase/Auth/Source/RPCs/FIRResetPasswordResponse.h; sourceTree = ""; }; + 9DAD8E2E266E90C1F2AFE8D84149897E /* FirebaseAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseAuth-umbrella.h"; sourceTree = ""; }; + 9E59227236440A499B7F293942D7D5FA /* FIRGoogleAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGoogleAuthProvider.h; path = Firebase/Auth/Source/Public/FIRGoogleAuthProvider.h; sourceTree = ""; }; + 9E76B46C555DF849442BFFA9754C7BC6 /* FIndexedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedFilter.h; path = Firebase/Database/Core/View/Filter/FIndexedFilter.h; sourceTree = ""; }; + 9E926D7245C29DA55996AC57E252BE4A /* FirebaseDatabase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseDatabase-dummy.m"; sourceTree = ""; }; + 9EB0772386D05F7BDACEB6EFC92E434D /* FSnapshotUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotUtilities.h; path = Firebase/Database/Snapshot/FSnapshotUtilities.h; sourceTree = ""; }; + 9EBDA8379067C22D8BB9A65D2C095F6B /* FIRDatabaseReference_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseReference_Private.h; sourceTree = ""; }; + 9EC0EB9F1A2B0401B210CB16F285E937 /* schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = schema.cpp; path = Realm/ObjectStore/src/schema.cpp; sourceTree = ""; }; + 9EE6E212E97F0BE496C4BBF14E535286 /* FIRAuthSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthSettings.m; path = Firebase/Auth/Source/FIRAuthSettings.m; sourceTree = ""; }; + 9F0C0144FC237834DEEA404A9A57B64F /* GoogleToolboxForMac-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-umbrella.h"; sourceTree = ""; }; + 9F40CBA44DC84F30307B1E535BB01C0B /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + 9F5643D368B34AD9E31027EE15B9464B /* filter_block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_block.h; path = table/filter_block.h; sourceTree = ""; }; + 9F78C8D5538F2593D1928EE534385A72 /* logging.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = logging.cc; path = util/logging.cc; sourceTree = ""; }; + 9F8B616291715F87BC1C364C4DB58E8C /* FTupleFirebase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleFirebase.m; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.m; sourceTree = ""; }; + 9F9DF31B5AC288EFC34E3949191A7C52 /* Kingfisher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kingfisher.h; path = Sources/Kingfisher.h; sourceTree = ""; }; + 9FAB009FE5E3B7374758D79382D43E6F /* SwiftChart.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftChart.modulemap; sourceTree = ""; }; + 9FF9AE944BC1704278BBE02A0AC2733C /* FIRTwitterAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTwitterAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/Twitter/FIRTwitterAuthCredential.h; sourceTree = ""; }; + A06B5ECFAC0638767A41E1A95556FB28 /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = ""; }; + A1078A283A02F54A3A353E950AD15443 /* FIRSignUpNewUserResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSignUpNewUserResponse.m; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserResponse.m; sourceTree = ""; }; + A1157F822DD04B416CB4882B6AE0C0E0 /* FTransformedEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTransformedEnumerator.m; path = Firebase/Database/FTransformedEnumerator.m; sourceTree = ""; }; + A18A837D5E5A9549808F1347125AA090 /* db_iter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_iter.h; path = db/db_iter.h; sourceTree = ""; }; + A233330DD411599D9A08537F900AE794 /* Deprecations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecations.swift; path = Sources/Deprecations.swift; sourceTree = ""; }; + A28DAF2A160B5D1689521057BC9E3498 /* FStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FStringUtilities.m; path = Firebase/Database/Utilities/FStringUtilities.m; sourceTree = ""; }; + A2A87D0AA1590786E0E5D4AE98740F42 /* FUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUtilities.m; path = Firebase/Database/Utilities/FUtilities.m; sourceTree = ""; }; + A2DE07E5E476F4FBD06195DDF23EC03E /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON.swift; sourceTree = ""; }; A2E50769454BAB05FFAFD0F3A91B0476 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - A3518271C1360FECB7B62107A839F0CA /* FNextPushId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNextPushId.h; path = Firebase/Database/Utilities/FNextPushId.h; sourceTree = ""; }; - A3988973AE5C02333414D4A17044A957 /* FViewProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessor.m; path = Firebase/Database/FViewProcessor.m; sourceTree = ""; }; - A3B07C1D3640F22A48DEC343240B8892 /* FirebaseAuthVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FirebaseAuthVersion.m; path = Firebase/Auth/Source/FirebaseAuthVersion.m; sourceTree = ""; }; - A3EB5FB28AE338E2D015F272B8007E4E /* FIRMutableData_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData_Private.h; path = Firebase/Database/Api/Private/FIRMutableData_Private.h; sourceTree = ""; }; - A403A0080BA699A51F583B8F60C8F4F1 /* FSnapshotUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotUtilities.m; path = Firebase/Database/Snapshot/FSnapshotUtilities.m; sourceTree = ""; }; - A48997DDACC81455ECBA8ED3769582EF /* FTreeSortedDictionaryEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionaryEnumerator.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h; sourceTree = ""; }; - A4B0D1914961561F09DC97036317B8DB /* Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Promise.swift; path = Sources/Promise.swift; sourceTree = ""; }; - A4F2EB422F562B28D5B39ECF7560BF14 /* work_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = work_queue.cpp; path = Realm/ObjectStore/src/sync/impl/work_queue.cpp; sourceTree = ""; }; - A542FB257B069D3A4C632378CC4C7D37 /* RLMJSONModels.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMJSONModels.m; path = Realm/RLMJSONModels.m; sourceTree = ""; }; - A5980A94BB8DDBCFFF560FCFDA4CE42C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A601ACA3853459C0F40EBB0EE5E3D6DC /* schema.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = schema.cpp; path = Realm/ObjectStore/src/schema.cpp; sourceTree = ""; }; - A60DEBF393BC35773B5A9BD349F8AD80 /* RealmSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-prefix.pch"; sourceTree = ""; }; - A625EB10C75C7FE7267B14C0AE89A3DB /* log_format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_format.h; path = db/log_format.h; sourceTree = ""; }; - A68C55C04B542FE304E7B417B1BD6D00 /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = Firebase/Core/Public/FIRAnalyticsConfiguration.h; sourceTree = ""; }; - A71BAAB6BB2A78F9ACDEA00D68266E01 /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/Kingfisher.swift; sourceTree = ""; }; - A797C8494029C82BB050553DAF5EBE63 /* FIRVerifyClientResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyClientResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyClientResponse.h; sourceTree = ""; }; - A7B096381505DCD71416779CC51D5D90 /* FViewProcessorResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessorResult.h; path = Firebase/Database/FViewProcessorResult.h; sourceTree = ""; }; - A7FD691EF6249ED497DCF7CBC2F87206 /* FIRAuthAPNSToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAPNSToken.h; path = Firebase/Auth/Source/FIRAuthAPNSToken.h; sourceTree = ""; }; + A3086E264490FCF97634AAED0EF2E7D3 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; + A30E60B721D759C4C218B11222B2EA7F /* RLMAccessor.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMAccessor.mm; path = Realm/RLMAccessor.mm; sourceTree = ""; }; + A38E291F87A700FFB9F257E74033C16A /* NSData+SRB64Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+SRB64Additions.h"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h"; sourceTree = ""; }; + A3BB17321FC1AD6A6CD741F31D119655 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + A3F41AC1060BEC0F8FFF9670D0AE6838 /* RLMObjectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase.h; path = include/RLMObjectBase.h; sourceTree = ""; }; + A40816A42C954603A831D194843E7E7C /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; + A4474A30653C16E60D67CFCDEF15E064 /* ChartSeries.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartSeries.swift; path = Source/ChartSeries.swift; sourceTree = ""; }; + A45C77AF49B6D0D51D4D3D0BA5882D57 /* FIRSecureTokenResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSecureTokenResponse.m; path = Firebase/Auth/Source/RPCs/FIRSecureTokenResponse.m; sourceTree = ""; }; + A46A76226DFA3973A17EB6AEBE54A5D9 /* FChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChange.h; path = Firebase/Database/Core/View/FChange.h; sourceTree = ""; }; + A52CC37534DBFEC3E431EC6D3247E9C5 /* Realm-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Realm-prefix.pch"; sourceTree = ""; }; + A5331EE51849C6FB50B6B85A90BDCAC4 /* FIRSendVerificationCodeResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSendVerificationCodeResponse.m; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeResponse.m; sourceTree = ""; }; + A5A4B49B48281F3297E60B117028A4CC /* GoogleToolboxForMac.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleToolboxForMac.modulemap; sourceTree = ""; }; + A5E773BDD27F0D7006A30D19CC668AEF /* FIRAuthSerialTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthSerialTaskQueue.h; path = Firebase/Auth/Source/FIRAuthSerialTaskQueue.h; sourceTree = ""; }; + A625B6306ADE89B96DC9B095496B2B32 /* SVProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SVProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A6CF6EC6C1A60DC71099387172A452D3 /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = Firebase/Core/Public/FIROptions.h; sourceTree = ""; }; + A6F1869A63AA02A98D9F933C1D06D6A8 /* FIRVerifyPasswordResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPasswordResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordResponse.m; sourceTree = ""; }; + A71163FC03CB1420F2FB3DBF6FD8D423 /* FIRGitHubAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGitHubAuthProvider.h; path = Firebase/Auth/Source/Public/FIRGitHubAuthProvider.h; sourceTree = ""; }; + A7120604DFE5DF6ACB163A261DE13C64 /* transact_log_handler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = transact_log_handler.cpp; path = Realm/ObjectStore/src/impl/transact_log_handler.cpp; sourceTree = ""; }; + A7330A0B6A5E8B00A1423BD470BC8857 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = Firebase/Core/Private/FIRAppAssociationRegistration.h; sourceTree = ""; }; + A7A0C8331B4F3C196AC4C39F581B4062 /* FConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConstants.h; path = Firebase/Database/Constants/FConstants.h; sourceTree = ""; }; + A7ADD3B3EECC1182856B26198D193415 /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = Firebase/Core/FIRConfiguration.m; sourceTree = ""; }; + A7DCBF745ADE50ECB37A08B26A7353C5 /* FIRAuthAPNSToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAPNSToken.h; path = Firebase/Auth/Source/FIRAuthAPNSToken.h; sourceTree = ""; }; + A80450F729547BBDEAED8CBCA1E06F48 /* FirebaseAuthVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseAuthVersion.h; path = Firebase/Auth/Source/Public/FirebaseAuthVersion.h; sourceTree = ""; }; + A80709F76E853ADC26ACBDD3B16C92BF /* FIRVerifyAssertionRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyAssertionRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.h; sourceTree = ""; }; A84FE5497FF8CF4F39C206333259809A /* Pods-pocloud.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-pocloud.modulemap"; sourceTree = ""; }; + A883601D9703726B4322D2E02409B4BA /* filter_policy.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = filter_policy.cc; path = util/filter_policy.cc; sourceTree = ""; }; A8840851AFFC0E461B5B935C155CE611 /* Pods-pocloud-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-pocloud-acknowledgements.plist"; sourceTree = ""; }; A8A5C31425BBA75A7B674379EC000AA8 /* Pods-pocloud-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-pocloud-dummy.m"; sourceTree = ""; }; - A90046E26AA851A035D7A9111C1941E8 /* FTransformedEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTransformedEnumerator.m; path = Firebase/Database/FTransformedEnumerator.m; sourceTree = ""; }; - A944252BCA5D3D9744756FB9821C97B2 /* RLMSyncUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil.h; path = include/RLMSyncUtil.h; sourceTree = ""; }; - A94A195887BF4B4B1470BE0FCE132D15 /* FListenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenProvider.h; path = Firebase/Database/Core/FListenProvider.h; sourceTree = ""; }; - A9B83582E104AC09BA078311C252D8F4 /* RLMObjectSchema.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema.h; path = include/RLMObjectSchema.h; sourceTree = ""; }; - AA0D50CD1AFF150D598303B5E53DD1E5 /* UITableViewVibrantCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UITableViewVibrantCell.swift; path = Pod/Classes/UITableViewVibrantCell.swift; sourceTree = ""; }; - AA67CDDCDB4D0F4FDD2CD29BD96D01C7 /* Realm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Realm.h; path = include/Realm.h; sourceTree = ""; }; - AA81185FC0AAD55BC670D2D4C5069EF9 /* repair.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = repair.cc; path = db/repair.cc; sourceTree = ""; }; - AA84C0312A0FE59EE3266F53E20785E9 /* FIRErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrors.h; path = Firebase/Core/Private/FIRErrors.h; sourceTree = ""; }; - AAB5FBD89A9E56002ACAC938354F4CDB /* FIRSecureTokenResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSecureTokenResponse.m; path = Firebase/Auth/Source/RPCs/FIRSecureTokenResponse.m; sourceTree = ""; }; - AAEEA8D18CF3D0782389042A9DEFC9D1 /* GoogleToolboxForMac.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleToolboxForMac.modulemap; sourceTree = ""; }; - AB093E52CEE6389EE9A0049CB4AB92D0 /* FIRNetworkConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNetworkConstants.m; path = Firebase/Core/FIRNetworkConstants.m; sourceTree = ""; }; - AB14DA082BF29AB88A322357A56BFD5E /* FIRVerifyPhoneNumberRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPhoneNumberRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberRequest.m; sourceTree = ""; }; - AB354B2F7FC0718FC09C1C020E00D73F /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Indicator.swift; sourceTree = ""; }; - AB37E493E6EDED38AA6799D9F5AA50B3 /* random.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = random.h; path = util/random.h; sourceTree = ""; }; - AB5E6538AECFF5B077FB238B5106FF95 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = Firebase/Core/FIRVersion.m; sourceTree = ""; }; - AC4B60D6ACFF487CD575866C2C63AA85 /* FirebaseAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AC505C9440C7D4BEAA2918C701E0D1E0 /* AnimatedImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImageView.swift; path = Sources/AnimatedImageView.swift; sourceTree = ""; }; - AC81A7F4FB9112E5DDB4EB8457BA9324 /* FImmutableSortedSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedSet.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m; sourceTree = ""; }; - ACACB1A8134E147173F966F899CBB9ED /* FEventEmitter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventEmitter.m; path = Firebase/Database/Utilities/FEventEmitter.m; sourceTree = ""; }; - AD098846A244706B0CA5A40F14E3FA6E /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AD36562FCB3CAC1CDF829BFEF0FB6CFD /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - ADA6729EB237AD14B790A81F78DA5B01 /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = ""; }; - AE84A7609499770D18328ED3ACCFA098 /* FPathIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPathIndex.m; path = Firebase/Database/FPathIndex.m; sourceTree = ""; }; - AEFD7E280A0837578CD031AA70BCCF6E /* FWriteTreeRef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTreeRef.h; path = Firebase/Database/Core/FWriteTreeRef.h; sourceTree = ""; }; - AFE022C681FAE209955B15EC76C4B6FB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B06A012AB01EF015C4C683E29EB9B428 /* FIRAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuth.h; path = Firebase/Auth/Source/Public/FIRAuth.h; sourceTree = ""; }; - B0E4455DE9644DF9B4FCC7A64C619391 /* FIRGetProjectConfigResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetProjectConfigResponse.m; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigResponse.m; sourceTree = ""; }; - B11683BA485E0F316EAB89F61689FE2D /* FSnapshotUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotUtilities.h; path = Firebase/Database/Snapshot/FSnapshotUtilities.h; sourceTree = ""; }; - B11C60C247367717B5A05C03B30BF3A2 /* FIRAuthWebUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthWebUtils.h; path = Firebase/Auth/Source/FIRAuthWebUtils.h; sourceTree = ""; }; - B11E28DD6F22A848433322EE62C82A0D /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = Firebase/Core/FIRLogger.m; sourceTree = ""; }; - B176FCF2140A3B4F0B5A6F74F3E6FABD /* FIRVerifyPasswordRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPasswordRequest.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.h; sourceTree = ""; }; - B203F1615EE524DC61D140C4A1C4FD38 /* RLMRealm.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMRealm.mm; path = Realm/RLMRealm.mm; sourceTree = ""; }; - B224F4BDCAFCCEEC67565AEA22B5F5E2 /* FIRDataSnapshot_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot_Private.h; path = Firebase/Database/Api/Private/FIRDataSnapshot_Private.h; sourceTree = ""; }; - B241A34EB7306BCF77878A8D266F416C /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = Firebase/Core/FIRConfiguration.m; sourceTree = ""; }; - B245149225ADBB6B6CB178D8F021E352 /* FIRAuthURLPresenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthURLPresenter.h; path = Firebase/Auth/Source/FIRAuthURLPresenter.h; sourceTree = ""; }; - B2DD1F797661A52FDEFF49CC71D986D2 /* RLMObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectStore.h; path = include/RLMObjectStore.h; sourceTree = ""; }; - B301C59E5D1D1AA6BBFDB80E69FBA831 /* FIRAuthBackend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthBackend.h; path = Firebase/Auth/Source/RPCs/FIRAuthBackend.h; sourceTree = ""; }; - B31E0966D3CF9D0CEDD9C866DE57075C /* Realm.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Realm.swift; path = RealmSwift/Realm.swift; sourceTree = ""; }; - B3D166294CFCAD78EC81C76B158B1A6E /* FIRRetryHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRRetryHelper.m; path = Firebase/Database/Core/Utilities/FIRRetryHelper.m; sourceTree = ""; }; - B3FE521C713ED654A08EB82618EB271C /* FTrackedQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQuery.m; path = Firebase/Database/Persistence/FTrackedQuery.m; sourceTree = ""; }; - B40B3D12787C2D8F3DB5985AB253258F /* when.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = when.m; path = Sources/when.m; sourceTree = ""; }; - B40B5F5C7A5892747AB538CB9B69C381 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B433C9505D488D3D4CCFECE91DB80379 /* RLMCollection.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMCollection.mm; path = Realm/RLMCollection.mm; sourceTree = ""; }; - B44A73D3ECBD0AA320DFAE8729245BE0 /* RLMSyncUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUtil.mm; path = Realm/RLMSyncUtil.mm; sourceTree = ""; }; - B4AA0EB452A4908B2C18F2E3091E17C2 /* LinkingObjects.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkingObjects.swift; path = RealmSwift/LinkingObjects.swift; sourceTree = ""; }; - B4F1819FC5E0AD0A7DE0DB9A77E2F1A3 /* FIRDeleteAccountRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDeleteAccountRequest.h; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountRequest.h; sourceTree = ""; }; - B51C7C857E5345B5976378CFA7B010B2 /* FIRAuthWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthWebViewController.m; path = Firebase/Auth/Source/FIRAuthWebViewController.m; sourceTree = ""; }; - B537910B3FBFF83F11E3EF416591530D /* FEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEmptyNode.h; path = Firebase/Database/Snapshot/FEmptyNode.h; sourceTree = ""; }; - B537F31923042528C00C3F43D4E49F23 /* ChameleonFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B54CEA68DC92AA00DD74F23E3F23B4C5 /* FIRAuthAppCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAppCredential.h; path = Firebase/Auth/Source/FIRAuthAppCredential.h; sourceTree = ""; }; - B5A0B75010E7D217156712DACB92C96A /* FViewProcessorResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessorResult.m; path = Firebase/Database/FViewProcessorResult.m; sourceTree = ""; }; - B5C113E56C758FF777823B19EFB8C60A /* FIRNoopAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNoopAuthTokenProvider.m; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.m; sourceTree = ""; }; - B60E1CB843A5DF4FB249D7914B75EA38 /* FIRSignUpNewUserResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSignUpNewUserResponse.m; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserResponse.m; sourceTree = ""; }; - B62365D273DD45764036DFF87AFC2E3A /* FIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndex.h; path = Firebase/Database/FIndex.h; sourceTree = ""; }; - B66D8D3A8424D1CFCB9075D328170260 /* FIRAuthDefaultUIDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthDefaultUIDelegate.m; path = Firebase/Auth/Source/FIRAuthDefaultUIDelegate.m; sourceTree = ""; }; - B687AAB9C24C10BFBD7EE58C5778AEBB /* testharness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testharness.h; path = util/testharness.h; sourceTree = ""; }; - B7044D55D7E19AFD3900DABD500C2BAB /* FIRAuthDataResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthDataResult.h; path = Firebase/Auth/Source/Public/FIRAuthDataResult.h; sourceTree = ""; }; - B7AD9E3604CA8CD8FEC7FC575E261FF7 /* RLMRealmConfiguration+Sync.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = "RLMRealmConfiguration+Sync.mm"; path = "Realm/RLMRealmConfiguration+Sync.mm"; sourceTree = ""; }; - B854E348078BB064C1A7930A6131C5FA /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = Firebase/Core/FIRAnalyticsConfiguration.m; sourceTree = ""; }; - B8570446709CB77262045BB7C12361ED /* port_posix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_posix.h; path = port/port_posix.h; sourceTree = ""; }; - B91BFACE8211274ACF860C0D633441BE /* dumpfile.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = dumpfile.cc; path = db/dumpfile.cc; sourceTree = ""; }; - B95A96E274C3BEF90BDDC1050D4B8846 /* FIRAuthErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthErrors.h; path = Firebase/Auth/Source/Public/FIRAuthErrors.h; sourceTree = ""; }; - B95F64448624F99D96C4102CA1890978 /* RLMSchema.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSchema.mm; path = Realm/RLMSchema.mm; sourceTree = ""; }; - B9AD49071C4F923C790D340FAE15064A /* testutil.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = testutil.cc; path = util/testutil.cc; sourceTree = ""; }; - B9B5D98A29C93523516AD5AE0C1C96BE /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; - BA03F2D46A4EBDF1B8BD831A98384534 /* FIRAuthWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthWebViewController.h; path = Firebase/Auth/Source/FIRAuthWebViewController.h; sourceTree = ""; }; - BB01A195A8A6F9F055491CE90A3B105C /* FIRResetPasswordResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRResetPasswordResponse.h; path = Firebase/Auth/Source/RPCs/FIRResetPasswordResponse.h; sourceTree = ""; }; - BB07463EBFD38A5996816DF5F0B1BD2F /* FImmutableSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h; sourceTree = ""; }; - BB1730835DB6F8AB2073DEF0ED68A9A0 /* RLMListBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMListBase.mm; path = Realm/RLMListBase.mm; sourceTree = ""; }; - BB28107EC523C61FEA83D2BCB930E3EA /* db_iter.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = db_iter.cc; path = db/db_iter.cc; sourceTree = ""; }; - BB7C81EA1D6BB6AEB7FC78A6B766921F /* FOverwrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOverwrite.h; path = Firebase/Database/Core/Operation/FOverwrite.h; sourceTree = ""; }; - BBA9C16DE4FB1E3BFFBFB4CBB00ACC0F /* FValidation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValidation.m; path = Firebase/Database/Utilities/FValidation.m; sourceTree = ""; }; - BC2097F01236A7B73A9D900E608AFE3A /* FIRAuthGlobalWorkQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthGlobalWorkQueue.h; path = Firebase/Auth/Source/FIRAuthGlobalWorkQueue.h; sourceTree = ""; }; + A8CB66F4C4265D6CAC15AF6C79BBDDC5 /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; + A8EDCEA43EF83A121FF9794EA8F3BE5B /* FIRAuthRequestConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthRequestConfiguration.m; path = Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.m; sourceTree = ""; }; + A99C67D7AFDD636DFA057FBFB2C1D78A /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = Firebase/Core/Public/FIRLoggerLevel.h; sourceTree = ""; }; + A9A72991FF327ABE7B0FAF46A686192E /* FirebaseAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseAuth.modulemap; sourceTree = ""; }; + A9CDD61CD5457BBA5EE0274AA530BF0A /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + A9E9B744D802678233D63BACD6A1D4DA /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = ""; }; + AA25FFCB0C2E368A77DB3560B235BF3E /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; + AA3706862871A33BD813A2356BC006C3 /* RLMSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema_Private.h; path = include/RLMSchema_Private.h; sourceTree = ""; }; + AA7B09A93B8E808B32BE6C6B19C8091B /* FIRReachabilityChecker+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRReachabilityChecker+Internal.h"; path = "Firebase/Core/Private/FIRReachabilityChecker+Internal.h"; sourceTree = ""; }; + AA8D7CBB785F455D6E2B1C535A2C2AA3 /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = RealmSwift/List.swift; sourceTree = ""; }; + AA99CE8E6673012F7549400C8B2E9419 /* RLMSyncSubscription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSubscription.h; path = include/RLMSyncSubscription.h; sourceTree = ""; }; + AAA78FBBDAA361F1432A063AFD1509F4 /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + AAD5864C01446FB069A13761DDF0EC7A /* FParsedUrl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FParsedUrl.m; path = Firebase/Database/Utilities/FParsedUrl.m; sourceTree = ""; }; + AAD9DC3E7D33B92E29567F9DD9956A4C /* coding.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = coding.cc; path = util/coding.cc; sourceTree = ""; }; + AB352C018761A50FDA6E6A42F12E7E68 /* FIRIdentityToolkitRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRIdentityToolkitRequest.h; path = Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.h; sourceTree = ""; }; + AB83029602BA522C9332382DB573B27D /* FIRMutableData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData.h; path = Firebase/Database/Public/FIRMutableData.h; sourceTree = ""; }; + ABA858AFE0748454D151310D2B114251 /* thread_safe_reference.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = thread_safe_reference.cpp; path = Realm/ObjectStore/src/thread_safe_reference.cpp; sourceTree = ""; }; + ABC670FBD5E8B2397A4506CBA3D8AC1E /* FIRTransactionResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult.h; path = Firebase/Database/Public/FIRTransactionResult.h; sourceTree = ""; }; + ACB8C72CD0383F34B37DC2CD7DA6BACA /* FArraySortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FArraySortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m; sourceTree = ""; }; + ACDFC08E51E546A5F494211E30EC0B74 /* sync_file.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_file.cpp; path = Realm/ObjectStore/src/sync/impl/sync_file.cpp; sourceTree = ""; }; + ACF983B4340DAC23633B0CA21BF9F653 /* FPersistentConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistentConnection.m; path = Firebase/Database/Core/FPersistentConnection.m; sourceTree = ""; }; + AD0B5F01066B2383DBD408279D73DCF4 /* FTupleOnDisconnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleOnDisconnect.h; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h; sourceTree = ""; }; + AD28420C97D32F634C3366A2227C32DF /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; + AD7097625B04E283AECB7A5BB9EE8586 /* port_example.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_example.h; path = port/port_example.h; sourceTree = ""; }; + ADD4A7893754BCBD73492E839D070B2A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE126089164A76E4AFE1E11780270A0B /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = Firebase/Core/Public/FIRApp.h; sourceTree = ""; }; + AE17264CB8229EBA8EFE7D2818563856 /* FIRUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUser.h; path = Firebase/Auth/Source/Public/FIRUser.h; sourceTree = ""; }; + AE8DC1AD0A1549B5FCE77C179422B91F /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; + AF5CA06FB9690D72D6F56294BC5BE968 /* FConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConnection.h; path = Firebase/Database/Realtime/FConnection.h; sourceTree = ""; }; + AF8445119CC11E5FC26985FC948F5A57 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; + AFDBAA766F94D84BAD76651FCEF19F17 /* env.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = env.cc; path = util/env.cc; sourceTree = ""; }; + B011795B453294FE3F74A08803B22534 /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; + B01C85D6CAC5BA84135DB99162DA5918 /* FSnapshotUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotUtilities.m; path = Firebase/Database/Snapshot/FSnapshotUtilities.m; sourceTree = ""; }; + B030844EAC021F2346F11D17295771C6 /* RealmCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RealmCollection.swift; path = RealmSwift/RealmCollection.swift; sourceTree = ""; }; + B039F44ABB7A92B17AE56C91A8D1331A /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Sources/Error.swift; sourceTree = ""; }; + B0878B61F4CC1F9C58C9FF195BA56C85 /* UITableViewVibrantCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UITableViewVibrantCell.swift; path = Pod/Classes/UITableViewVibrantCell.swift; sourceTree = ""; }; + B0B93997F1E4DB619D6BB53AAD7997C3 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RealmSwift/Error.swift; sourceTree = ""; }; + B105C9BADD74AEBC8AB2764E8391B7A5 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; + B127B0D183DA160E8F3B178A61E713A1 /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = ""; }; + B1318E50C377898EE6E826DF192BDE65 /* partial_sync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = partial_sync.cpp; path = Realm/ObjectStore/src/sync/partial_sync.cpp; sourceTree = ""; }; + B18A9E60C22CE808906A4B038E3B3D07 /* memtable.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = memtable.cc; path = db/memtable.cc; sourceTree = ""; }; + B192324D1875BCED7C83FC4525773E90 /* GTMSessionUploadFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionUploadFetcher.m; path = Source/GTMSessionUploadFetcher.m; sourceTree = ""; }; + B257A251D6FBC2AFDD55B4D7C8F3E263 /* SVRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVRadialGradientLayer.m; path = SVProgressHUD/SVRadialGradientLayer.m; sourceTree = ""; }; + B29E5643F6A2053B82EAB5E0EE16CFF0 /* FWebSocketConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWebSocketConnection.m; path = Firebase/Database/Realtime/FWebSocketConnection.m; sourceTree = ""; }; + B2BDA85AA0F54F28FDC05220221E20B1 /* log_writer.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = log_writer.cc; path = db/log_writer.cc; sourceTree = ""; }; + B2DD02A7971DA12F534892F246CA0602 /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; + B32723CBF83BA8B7D0661055F4B33508 /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = Firebase/Core/FIRLogger.m; sourceTree = ""; }; + B3313571CA472F1E1F41820EFF50D417 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/ImageCache.swift; sourceTree = ""; }; + B3644AF3A4DE98E81CC7A4444853BF87 /* FTrackedQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQuery.h; path = Firebase/Database/Persistence/FTrackedQuery.h; sourceTree = ""; }; + B370A04FDDC02FA784A3721908D1CD55 /* FConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConnection.m; path = Firebase/Database/Realtime/FConnection.m; sourceTree = ""; }; + B37ACA86A2EF1B394AFCC2FCBCFD57ED /* FIRAuth_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuth_Internal.h; path = Firebase/Auth/Source/FIRAuth_Internal.h; sourceTree = ""; }; + B39617B32590F6D5D9E53BB446F611A3 /* status.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = status.h; path = include/leveldb/status.h; sourceTree = ""; }; + B3B32E578877653139CA3243DE516DFE /* FIRPhoneAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRPhoneAuthCredential.h; path = Firebase/Auth/Source/Public/FIRPhoneAuthCredential.h; sourceTree = ""; }; + B3FF4FA01EE81F777C429E6A8BC14259 /* FIRVerifyPhoneNumberResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPhoneNumberResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberResponse.h; sourceTree = ""; }; + B42B4A68852510BA4C384A5AF6D0B894 /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = Firebase/Core/FIRAppAssociationRegistration.m; sourceTree = ""; }; + B49FCB10AFFB828792D40B90611AF6A3 /* Realm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Realm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B4E657BC55EA18198B25835E1B55D359 /* FIRUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRUser.m; path = Firebase/Auth/Source/FIRUser.m; sourceTree = ""; }; + B53AC62A4426FB3F7D7A52A39F3E43BB /* IShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/IShapeRenderer.swift; sourceTree = ""; }; + B54AC5C30CD34FA6295FD2F917DDB19A /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = ""; }; + B5B8A3F87536EA66ED63CA2EF2078363 /* filename.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filename.h; path = db/filename.h; sourceTree = ""; }; + B5E17945DA126F74CD125B86CAEDD995 /* RLMProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMProperty.mm; path = Realm/RLMProperty.mm; sourceTree = ""; }; + B60D24A57A4B635AE47AD479076959BB /* FAtomicNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAtomicNumber.m; path = Firebase/Database/Utilities/FAtomicNumber.m; sourceTree = ""; }; + B67762DF6B2CCF756D001FAB91FB7181 /* FSRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSRWebSocket.h; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.h; sourceTree = ""; }; + B6EA5CC11C004A5AD734941C6991C78C /* FEventGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventGenerator.m; path = Firebase/Database/FEventGenerator.m; sourceTree = ""; }; + B7072CC50B6BA667903E6C6241CD2447 /* FIRAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthCredential.m; path = Firebase/Auth/Source/FIRAuthCredential.m; sourceTree = ""; }; + B71B19337EB68C20755AB91BD17229C5 /* ChartColors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColors.swift; path = Source/ChartColors.swift; sourceTree = ""; }; + B741DFC3C45A74D75650D19D61CD0AEF /* FRangedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangedFilter.m; path = Firebase/Database/FRangedFilter.m; sourceTree = ""; }; + B75114BC2BD572972C91A8CB9E116C60 /* FIRAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthProvider.m; path = Firebase/Auth/Source/FIRAuthProvider.m; sourceTree = ""; }; + B7568273FEE14BD1E7D80B89DD42B152 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = Firebase/Core/FIRVersion.m; sourceTree = ""; }; + B785F57DA9D767989762DB2ACAEC6117 /* skiplist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = skiplist.h; path = db/skiplist.h; sourceTree = ""; }; + B7AA905E4C80B479B8690565CEF01FA6 /* FirebaseDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B7DB66706D8B56DB5564786815B99060 /* RLMSyncPermissionResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermissionResults.mm; path = Realm/RLMSyncPermissionResults.mm; sourceTree = ""; }; + B7E545C520678CE97801F9E1E9AA9122 /* table_cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = table_cache.cc; path = db/table_cache.cc; sourceTree = ""; }; + B8E6759063728026000C0CA072665FF2 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; + B9738F72A8A19560EBD290A4D37C8634 /* GTMSessionFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcher.h; path = Source/GTMSessionFetcher.h; sourceTree = ""; }; + B9D3E57FCB0E49389632295408450BB0 /* version_set.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_set.h; path = db/version_set.h; sourceTree = ""; }; + B9F0B108D02D31661E0205EE1A2B31AC /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/CacheSerializer.swift; sourceTree = ""; }; + BA23E4520BD3ECD2C5DC5671C13F21A1 /* FSparseSnapshotTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSparseSnapshotTree.h; path = Firebase/Database/Core/FSparseSnapshotTree.h; sourceTree = ""; }; + BA8FDBAAA10EBA2BF4F4B9E67B306886 /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; + BACD5A2CAE91B66A84A73052D4573B2F /* FIRGoogleAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGoogleAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/Google/FIRGoogleAuthCredential.h; sourceTree = ""; }; + BADF01B11E8540276DC1212EC4CEDAAE /* FTuplePathValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTuplePathValue.h; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.h; sourceTree = ""; }; + BB20EFD39D833EF805180DC6142C00DC /* NSData+SRB64Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+SRB64Additions.m"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m"; sourceTree = ""; }; + BB337CBA2CBBD6A561136BD3C9AE557C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BB34959F74D2FFFACC4C04FCAB66C594 /* table.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table.h; path = include/leveldb/table.h; sourceTree = ""; }; + BB9D30BE47311997F8AD8FECD1125ACD /* keychain_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = keychain_helper.cpp; path = Realm/ObjectStore/src/impl/apple/keychain_helper.cpp; sourceTree = ""; }; + BBB3EED3CD4E1A63496DBC24426DC400 /* SVProgressHUD.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVProgressHUD.bundle; path = SVProgressHUD/SVProgressHUD.bundle; sourceTree = ""; }; + BC219638C7354175BD397813F460998E /* FTupleSetIdPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleSetIdPath.h; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h; sourceTree = ""; }; BC23F68D7DCD34CD236A1B5998B12AD6 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BC241B3ECDADE20136BE7F095C362C55 /* write_batch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch.h; path = include/leveldb/write_batch.h; sourceTree = ""; }; - BC3A63432CA5505962BAB132A7847305 /* FIRAuthAppCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAppCredential.m; path = Firebase/Auth/Source/FIRAuthAppCredential.m; sourceTree = ""; }; - BCCCD79C219D9F805B8316B46CAFA25D /* FIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndex.m; path = Firebase/Database/FIndex.m; sourceTree = ""; }; - BD0C89D0D70A5C5C2AC6954D4AF09C24 /* sync_permission.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_permission.cpp; path = Realm/ObjectStore/src/sync/sync_permission.cpp; sourceTree = ""; }; - BDCA84FD49BEBABF9E067C2827A9E33D /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = Sources/Placeholder.swift; sourceTree = ""; }; - BE1F6AA86DAF33BFE79ACA8DD4251DCC /* FIRFacebookAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFacebookAuthProvider.h; path = Firebase/Auth/Source/Public/FIRFacebookAuthProvider.h; sourceTree = ""; }; - BE2357C0B1A5BD4EC81436E3CDC3BE3D /* two_level_iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = two_level_iterator.h; path = table/two_level_iterator.h; sourceTree = ""; }; - BE5F6CB39824A2A5A61EF738AC42BD80 /* builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = builder.h; path = db/builder.h; sourceTree = ""; }; - BE7C2858E2C5A485300722303DD1784F /* keychain_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = keychain_helper.cpp; path = Realm/ObjectStore/src/impl/apple/keychain_helper.cpp; sourceTree = ""; }; - BECC6E463ED9B84E1B747216E15C7707 /* FIRAuthAppCredentialManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAppCredentialManager.h; path = Firebase/Auth/Source/FIRAuthAppCredentialManager.h; sourceTree = ""; }; - BEDCFC9F774844B490FC6F1123E91884 /* FPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPath.m; path = Firebase/Database/Core/Utilities/FPath.m; sourceTree = ""; }; - BF1545BEA2ADAD856AD2526AB9EEDD39 /* FOperationSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOperationSource.m; path = Firebase/Database/Core/Operation/FOperationSource.m; sourceTree = ""; }; - BFA052F164EA2AE7C43E2FC163568E70 /* RLMArray_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray_Private.h; path = include/RLMArray_Private.h; sourceTree = ""; }; - C05C63EB66F2F185D359CF8BFADAF89D /* FIRDataSnapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDataSnapshot.m; path = Firebase/Database/Api/FIRDataSnapshot.m; sourceTree = ""; }; - C0C4473C03F31586B5E1C684CB5E37AD /* dbformat.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = dbformat.cc; path = db/dbformat.cc; sourceTree = ""; }; - C0CAAE3463D64322750A5AFF47E55937 /* FIRGetAccountInfoResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetAccountInfoResponse.h; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoResponse.h; sourceTree = ""; }; - C12E8A8D7D505477165899FC9D764847 /* RLMAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMAccessor.h; path = include/RLMAccessor.h; sourceTree = ""; }; - C15D16D620E6F6BDBB420CAF601AA89C /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; - C1A8F0D90BCCB517218BE7784558247B /* FTupleObjectNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjectNode.h; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.h; sourceTree = ""; }; - C1E8E706E03B1B21D1CB82874B6BC5C4 /* FSnapshotHolder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotHolder.m; path = Firebase/Database/Core/FSnapshotHolder.m; sourceTree = ""; }; - C1E95524242BB7CF0FD435BCEE0A5D56 /* RLMListBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMListBase.h; path = include/RLMListBase.h; sourceTree = ""; }; - C1FBAEFB116E74CBCBF1A67240EC1E49 /* RLMSyncPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncPermission.h; path = include/RLMSyncPermission.h; sourceTree = ""; }; - C2AF6E1171D2C4532C72147F5E3DD5E3 /* SideMenu.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SideMenu.modulemap; sourceTree = ""; }; - C2E64176AF730FA535211FD7CC87197F /* FIRAuthErrorUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthErrorUtils.m; path = Firebase/Auth/Source/FIRAuthErrorUtils.m; sourceTree = ""; }; - C2ED7ED48B42FBB3CAFB1411E9F35938 /* FAtomicNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAtomicNumber.h; path = Firebase/Database/Utilities/FAtomicNumber.h; sourceTree = ""; }; - C33855C45FA18D4FE14D04003AD87671 /* FirebaseDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseDatabase.h; path = Firebase/Database/Public/FirebaseDatabase.h; sourceTree = ""; }; - C3B22BEBA9E65F27C2C2380B9C96931F /* Chart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Chart.swift; path = Source/Chart.swift; sourceTree = ""; }; - C3C9964FDC6F093FA81BF0A7EF0A1334 /* FIRFacebookAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFacebookAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/Facebook/FIRFacebookAuthCredential.h; sourceTree = ""; }; - C3E03EEB0FF50B1253DE3D15D06B52F5 /* FOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperation.h; path = Firebase/Database/Core/Operation/FOperation.h; sourceTree = ""; }; - C58D534444744028E8F2BE35D2A31AAC /* log_reader.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = log_reader.cc; path = db/log_reader.cc; sourceTree = ""; }; - C5C8DE301EA1ECCB1AFA937EC8509470 /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; - C5DC03FBC0723304975A16A3CEC0A2A1 /* FIRSetAccountInfoRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSetAccountInfoRequest.m; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoRequest.m; sourceTree = ""; }; - C6A01C9CB5DD2D1ED389DF3BC6DFD7F8 /* SwiftVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftVersion.swift; path = RealmSwift/SwiftVersion.swift; sourceTree = ""; }; - C721E75AB963F4557DA58C17AA05083A /* GTMSessionFetcherLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherLogging.m; path = Source/GTMSessionFetcherLogging.m; sourceTree = ""; }; - C7453FB7160AE5853595FE731623E47B /* realm_coordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = realm_coordinator.cpp; path = Realm/ObjectStore/src/impl/realm_coordinator.cpp; sourceTree = ""; }; - C7B99F8FA3F243BC1099392A1B205536 /* builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = builder.cc; path = db/builder.cc; sourceTree = ""; }; - C924626DBF358408C0979CBA0AD1ED96 /* FTupleOnDisconnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleOnDisconnect.m; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m; sourceTree = ""; }; - C92E165878030D6059C424B9B1951E29 /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = ""; }; - CA2D7CBCBB66F21DDA384433B6F45CDE /* object_store.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_store.cpp; path = Realm/ObjectStore/src/object_store.cpp; sourceTree = ""; }; - CA360EC2133EBE3681DE9ED3AC9359B0 /* FSyncPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncPoint.h; path = Firebase/Database/Core/FSyncPoint.h; sourceTree = ""; }; - CA5424BB0A8A8591873A237C693AD88B /* FIRAdditionalUserInfo_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAdditionalUserInfo_Internal.h; path = Firebase/Auth/Source/FIRAdditionalUserInfo_Internal.h; sourceTree = ""; }; - CA5CCBEB25184C290D089BE2CA188BCC /* status.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = status.h; path = include/leveldb/status.h; sourceTree = ""; }; - CAB101BD0349A15D67E3E402F78CD62E /* FIRNetworkURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkURLSession.h; path = Firebase/Core/Private/FIRNetworkURLSession.h; sourceTree = ""; }; - CAC1E1C82CC6C37C905A0336966AB1A4 /* RLMClassInfo.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMClassInfo.mm; path = Realm/RLMClassInfo.mm; sourceTree = ""; }; - CB22F3A2AA3E9173F9190650F8D204E9 /* FIRVerifyAssertionResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyAssertionResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionResponse.m; sourceTree = ""; }; - CB66D88F0B7187CA3B3E9DA35265EAF0 /* FValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValidation.h; path = Firebase/Database/Utilities/FValidation.h; sourceTree = ""; }; - CBA3F59FE4E29C803BEE9980DEBED39F /* FirebaseDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CC072C55EAA4F58FB9737792ED612B05 /* FLLRBValueNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBValueNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m; sourceTree = ""; }; - CCBFFB66381C8D0BCC92EF96CCE5A0F5 /* version_edit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_edit.h; path = db/version_edit.h; sourceTree = ""; }; - CCDBD9A006F118C43699D882889419C6 /* FIRMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableDictionary.h; path = Firebase/Core/Private/FIRMutableDictionary.h; sourceTree = ""; }; - CD0E05902763B9243D41CA67C83696E1 /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = ""; }; - CD1747B4A54A460E488213B0D92506C7 /* FEventGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventGenerator.m; path = Firebase/Database/FEventGenerator.m; sourceTree = ""; }; - CD26081036BEE7C05DD4C429054B7894 /* FTupleObjectNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjectNode.m; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.m; sourceTree = ""; }; + BC412FFF86FE105B4DD03B8DB3DA8689 /* ThreadHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadHelper.swift; path = Sources/ThreadHelper.swift; sourceTree = ""; }; + BCA49FE548704E67BF70796D86854682 /* FIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndex.h; path = Firebase/Database/FIndex.h; sourceTree = ""; }; + BCD42C77588C659E16D289B88F0BBFB0 /* FViewCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewCache.h; path = Firebase/Database/Core/View/FViewCache.h; sourceTree = ""; }; + BCECB44D476CCEA5269C305C1864837A /* FIRUserMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRUserMetadata.m; path = Firebase/Auth/Source/FIRUserMetadata.m; sourceTree = ""; }; + BD6FBB26D133F3B1F2C9FD3DFF79D3D5 /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; + BD866A6602939852AD5141FE03BCBFF5 /* atomic_pointer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = atomic_pointer.h; path = port/atomic_pointer.h; sourceTree = ""; }; + BDC49B8A1AD95E20EDF4FA01C5DA07EE /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Source/Charts/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; + BE145A8B33A90F0E9B80C0BAEDD6449F /* FChildrenNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildrenNode.m; path = Firebase/Database/Snapshot/FChildrenNode.m; sourceTree = ""; }; + BE7EC5FF42BACE35E713CEBA3D81268E /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; + BE8FC91B9BE981825B89D2A22737A2D2 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; + BEEA8469FAA42075F634AC4B22E81818 /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CrossShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift; sourceTree = ""; }; + BF68C799DE10F35FA51248AE1BE962AF /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = ""; }; + BF74632840B548DF965BA2E95E91C74E /* firstly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = firstly.swift; path = Sources/firstly.swift; sourceTree = ""; }; + BFC65C3D6DB1260D4CC718E3EEC5EA65 /* FQuerySpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQuerySpec.h; path = Firebase/Database/Core/FQuerySpec.h; sourceTree = ""; }; + BFE788C6F697346F9CD4654D4BFB68B5 /* GTMSessionFetcher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMSessionFetcher-dummy.m"; sourceTree = ""; }; + BFFFA1D4B5B3E70B8A5A77644009587F /* FIRSignUpNewUserRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSignUpNewUserRequest.m; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.m; sourceTree = ""; }; + C053FF3799C9807E0F22F3EC445CF59B /* fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fwd.h; path = Sources/fwd.h; sourceTree = ""; }; + C068405762506B5CC03A4FE0A0B7E874 /* GTMSessionFetcher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMSessionFetcher.modulemap; sourceTree = ""; }; + C09029D3DB98EBDD87D510D1426597DB /* FRangedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangedFilter.h; path = Firebase/Database/FRangedFilter.h; sourceTree = ""; }; + C09D4531628D0E5BE83B17999A2F5FBE /* realm_coordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = realm_coordinator.cpp; path = Realm/ObjectStore/src/impl/realm_coordinator.cpp; sourceTree = ""; }; + C0B776C4EDA39EEB6B8BFCDAB89272EF /* FirebaseCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.xcconfig; sourceTree = ""; }; + C0C36BFE9F8F94F4B9F0B593A4C6E4C6 /* RLMListBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMListBase.h; path = include/RLMListBase.h; sourceTree = ""; }; + C128C65B7BD192BC8DC373D234DE137C /* FLimitedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLimitedFilter.m; path = Firebase/Database/Core/View/Filter/FLimitedFilter.m; sourceTree = ""; }; + C13B0234C9DC94C32C728C1AB5EAA99E /* FIRErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrorCode.h; path = Firebase/Core/Private/FIRErrorCode.h; sourceTree = ""; }; + C1A77A95C767183930715923CA7B9CD8 /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Source/Charts/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; + C1D067E124A21DE5D53EDB493E256CEE /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = ""; }; + C1E8F69E8187BDBC80E0F8FD873975CC /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image.swift; sourceTree = ""; }; + C200881D4442C52FBD3D5420540068E3 /* db.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db.h; path = include/leveldb/db.h; sourceTree = ""; }; + C2116FCC7B75EC60A136A777856980B9 /* RLMThreadSafeReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMThreadSafeReference.h; path = include/RLMThreadSafeReference.h; sourceTree = ""; }; + C23566CAE8356539B30B85A61B0F729D /* ObjectiveCSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectiveCSupport.swift; path = RealmSwift/ObjectiveCSupport.swift; sourceTree = ""; }; + C240F176E3878598E61FC0A7003130E9 /* FIRAuthCredential_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthCredential_Internal.h; path = Firebase/Auth/Source/FIRAuthCredential_Internal.h; sourceTree = ""; }; + C2862AF6402E3BAFA4949021603A6310 /* thread_annotations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_annotations.h; path = port/thread_annotations.h; sourceTree = ""; }; + C2961ACE175CE79C87253E003567A2B3 /* RLMObjectBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectBase.mm; path = Realm/RLMObjectBase.mm; sourceTree = ""; }; + C2985ED25438C1F2BE7A51A8BF689F9F /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; + C2D11DACDD4299304B76DD8E9ED95E50 /* FValueIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueIndex.h; path = Firebase/Database/FValueIndex.h; sourceTree = ""; }; + C2D9F210D521E9D56BACC2376227666D /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = ""; }; + C2DD1DF7A3FA1D772ECC96AD9E245F65 /* FPersistentConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistentConnection.h; path = Firebase/Database/Core/FPersistentConnection.h; sourceTree = ""; }; + C2EF2D15655E4664B9B3160D581BD99D /* hash.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = hash.cc; path = util/hash.cc; sourceTree = ""; }; + C36124615A6FB62D8AEB16AE1D21B8CC /* results.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results.cpp; path = Realm/ObjectStore/src/results.cpp; sourceTree = ""; }; + C3699ABB00BA59D8641DCFB0DAFC86DC /* FClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FClock.m; path = Firebase/Database/FClock.m; sourceTree = ""; }; + C3A09A5CF2FDEA43DBE46F1C4FBFEC0A /* FIRAuthAppDelegateProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAppDelegateProxy.m; path = Firebase/Auth/Source/FIRAuthAppDelegateProxy.m; sourceTree = ""; }; + C3A1858D00526C0CA80FD38C98A15A31 /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C3D389BB45620221D213E040D3CF144A /* RLMSyncUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUser.h; path = include/RLMSyncUser.h; sourceTree = ""; }; + C3D6011E05F28E90CE441DAEB3CFF872 /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; + C3D63F3C70AEB3405539CFD1711834B0 /* weak_realm_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = weak_realm_notifier.cpp; path = Realm/ObjectStore/src/impl/weak_realm_notifier.cpp; sourceTree = ""; }; + C3D87E2DAC9848D75EA38E31FD947BB5 /* fbase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fbase64.h; path = Firebase/Database/third_party/SocketRocket/fbase64.h; sourceTree = ""; }; + C4045D05301ACDC8D67975D7EBB040EB /* Kingfisher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kingfisher-dummy.m"; sourceTree = ""; }; + C4087F474248E1C1BECA11C887779F7F /* FCachePolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCachePolicy.m; path = Firebase/Database/Persistence/FCachePolicy.m; sourceTree = ""; }; + C426EB1EE80428CC1FBE266760F8C5F2 /* histogram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = histogram.h; path = util/histogram.h; sourceTree = ""; }; + C465239CC40EA67F5314F2513FBC6BFA /* FIRUserMetadata_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserMetadata_Internal.h; path = Firebase/Auth/Source/FIRUserMetadata_Internal.h; sourceTree = ""; }; + C494F60AEE91A7DA569623936AE14527 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C57FD505AA549D1E21DB283C8DD250F7 /* FirebaseDatabase-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseDatabase-umbrella.h"; sourceTree = ""; }; + C5D86DB70DD64D11FA99A20BF127EB79 /* FirebaseDatabase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseDatabase.xcconfig; sourceTree = ""; }; + C60CF237B58C0BA996D6C0CB5B651F18 /* FChildEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildEventRegistration.h; path = Firebase/Database/Core/View/FChildEventRegistration.h; sourceTree = ""; }; + C625C91DCDD9D09FA9160B1C6DBBB357 /* FAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAuthTokenProvider.m; path = Firebase/Database/Login/FAuthTokenProvider.m; sourceTree = ""; }; + C62BEED4AD91CC42CDE2465E1E454971 /* FIRDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase_Private.h; path = Firebase/Database/Api/Private/FIRDatabase_Private.h; sourceTree = ""; }; + C639AD55BDBC96777856DFBC54D030AD /* Kingfisher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Kingfisher.modulemap; sourceTree = ""; }; + C63B6F5B82109E43BDCF2B5DAAF42176 /* PromiseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PromiseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C65EC6F0455439F1FCD49C7E81F3DDAC /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; + C6689CA6209D12C2E6AE031D127F4D09 /* FWriteTreeRef.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTreeRef.m; path = Firebase/Database/Core/FWriteTreeRef.m; sourceTree = ""; }; + C6951C33D6394A62BA69340DEE879DE7 /* FIRDatabaseConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseConfig.m; path = Firebase/Database/Api/FIRDatabaseConfig.m; sourceTree = ""; }; + C6D19710C58514EBABFB43CD9AB95BAC /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; + C73FEFAA3CDDDEC0013655E4316A9DFC /* NSError+RLMSync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+RLMSync.h"; path = "include/NSError+RLMSync.h"; sourceTree = ""; }; + C740D8D2A0C6C1A4B33408528DA118C7 /* GTMSessionFetcher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GTMSessionFetcher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C757F3C107E98DCBF3614F91E051BAC2 /* FIRTwitterAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTwitterAuthProvider.h; path = Firebase/Auth/Source/Public/FIRTwitterAuthProvider.h; sourceTree = ""; }; + C7873C4FCCE3800FCA330A84DA3846DE /* FLLRBEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBEmptyNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m; sourceTree = ""; }; + C872EBF9458B7F5F6E048B5E9BC874F4 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; + C87E34926B63745C66A41DC9374384B5 /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = ""; }; + C887CAF83F9F233C66FE18F3B3CB5556 /* FWriteTreeRef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTreeRef.h; path = Firebase/Database/Core/FWriteTreeRef.h; sourceTree = ""; }; + C9A6B4ACFDFB716762D7A770A34CD986 /* FIRNetworkConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNetworkConstants.m; path = Firebase/Core/FIRNetworkConstants.m; sourceTree = ""; }; + C9D21312B70688001CD741A8E1DD2D29 /* FIRVerifyAssertionResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyAssertionResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionResponse.m; sourceTree = ""; }; + C9D39A1EEC24B6BC57508EAEEF38180A /* FIRAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuth.h; path = Firebase/Auth/Source/Public/FIRAuth.h; sourceTree = ""; }; + C9F6D122CADF2A18DDCE41FB31FE5F56 /* FEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEmptyNode.h; path = Firebase/Database/Snapshot/FEmptyNode.h; sourceTree = ""; }; + CA0327F03BFD9DCEDF9B55C82009731F /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; + CA2DFC999CB0C1035B5FEC76CDF46AC3 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; + CA2F7CC3E721CEFEF750B13F5555DCD5 /* FIRAuthKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthKeychain.h; path = Firebase/Auth/Source/FIRAuthKeychain.h; sourceTree = ""; }; + CA5127DB94209D260A1EAF579CAB7D80 /* FCacheNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCacheNode.h; path = Firebase/Database/Core/View/FCacheNode.h; sourceTree = ""; }; + CA5B28EA8EC8119650FB4878AE0FDECC /* FIRDeleteAccountResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDeleteAccountResponse.m; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountResponse.m; sourceTree = ""; }; + CADD45CDEF8FFCAED76A0C64EFE20125 /* FIRUserMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRUserMetadata.h; path = Firebase/Auth/Source/Public/FIRUserMetadata.h; sourceTree = ""; }; + CAE9C3B5FF74E02017987C2F7196F819 /* FIRVerifyAssertionRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyAssertionRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionRequest.m; sourceTree = ""; }; + CB29682178E05D22A82FCDDFE5819D2C /* FIRGetOOBConfirmationCodeResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetOOBConfirmationCodeResponse.m; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeResponse.m; sourceTree = ""; }; + CB43310D7F163BA38ABFE29881697321 /* FTupleTSN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTSN.h; path = Firebase/Database/Utilities/Tuples/FTupleTSN.h; sourceTree = ""; }; + CB5A1C3811AEF75D8E8F537513E72E03 /* FTupleCallbackStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleCallbackStatus.m; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m; sourceTree = ""; }; + CBA1ECE0D217C6F569C8F8A99D81FEC2 /* FIRGitHubAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGitHubAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/GitHub/FIRGitHubAuthCredential.h; sourceTree = ""; }; + CBCA6255F1DE02624BA7FA9019BD8850 /* Charts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.xcconfig; sourceTree = ""; }; + CBD462291D881E25803DE9FC8115B50B /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = Firebase/Core/FIRErrors.m; sourceTree = ""; }; + CC08C987D982C1F212823CA4307970AF /* FChildChangeAccumulator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildChangeAccumulator.m; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m; sourceTree = ""; }; + CC0FE1D3D6B8E4106E4B413EC52CC098 /* RLMSyncSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncSession.h; path = include/RLMSyncSession.h; sourceTree = ""; }; + CC418A1C526E702061BF276A2065F2FF /* FIRNetworkConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkConstants.h; path = Firebase/Core/Private/FIRNetworkConstants.h; sourceTree = ""; }; + CC52069FAC7F19666FD143219161E54D /* FCacheNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCacheNode.m; path = Firebase/Database/Core/View/FCacheNode.m; sourceTree = ""; }; + CC79495350FAB6A11B16150D0DFCFCCB /* crc32c.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = crc32c.cc; path = util/crc32c.cc; sourceTree = ""; }; + CCA690505615B2B18B5D01A172F2696E /* FIRSetAccountInfoResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSetAccountInfoResponse.h; path = Firebase/Auth/Source/RPCs/FIRSetAccountInfoResponse.h; sourceTree = ""; }; + CD07664D2740A69675520BA0C3A1E032 /* FPriorityIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPriorityIndex.h; path = Firebase/Database/FPriorityIndex.h; sourceTree = ""; }; + CD4364271A47A98B3FB8D811D9474054 /* sync_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_config.cpp; path = Realm/ObjectStore/src/sync/sync_config.cpp; sourceTree = ""; }; + CD59542B0AA5CB88938E19C95138ABE9 /* block_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = block_builder.cc; path = table/block_builder.cc; sourceTree = ""; }; CD652DFA7B9433714A03ACD1A3893F8A /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - CD8A171098CC2FB6667109F3D914190E /* FPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPath.h; path = Firebase/Database/Core/Utilities/FPath.h; sourceTree = ""; }; - CDC8CF1BB201AB7E004BDC7D1A04BC88 /* RLMSyncUtil_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncUtil_Private.h; path = include/RLMSyncUtil_Private.h; sourceTree = ""; }; - CDF639014265922535577B76D7DD6554 /* SVIndefiniteAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVIndefiniteAnimatedView.h; path = SVProgressHUD/SVIndefiniteAnimatedView.h; sourceTree = ""; }; - CE44C726A617D98DE6F406C09C971EB4 /* FIRVerifyPasswordRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPasswordRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.m; sourceTree = ""; }; - CEC5C7A6F37609623B65E1BB735638A5 /* FIROAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/OAuth/FIROAuthProvider.m; sourceTree = ""; }; - CEDEC11E8A3A5A39A44BAA92E7B9CB80 /* FRepo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepo.m; path = Firebase/Database/Core/FRepo.m; sourceTree = ""; }; - CF4C758E3B163A2972EC9E0647EADF33 /* FIRGitHubAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGitHubAuthProvider.h; path = Firebase/Auth/Source/Public/FIRGitHubAuthProvider.h; sourceTree = ""; }; - CF8B0E2EDA2689C6BC746A629F7BA8C3 /* GTMSessionFetcher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GTMSessionFetcher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CFCBD1049707A9F58E0E65E23821926E /* FNodeFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNodeFilter.h; path = Firebase/Database/Core/View/Filter/FNodeFilter.h; sourceTree = ""; }; + CE149580214F854CBC53C049ED237ED0 /* FCompoundWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundWrite.m; path = Firebase/Database/Snapshot/FCompoundWrite.m; sourceTree = ""; }; + CEBE5412165070041286682011D66E6D /* FTupleCallbackStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleCallbackStatus.h; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h; sourceTree = ""; }; + CEDBBF2C0E11C616DA2E6CB791BE47A7 /* FIRResetPasswordRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRResetPasswordRequest.h; path = Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.h; sourceTree = ""; }; + CEDE7A287C0E39D0F1B1ABFD2977430C /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = ""; }; + CEFFFB3A31E762262CFC54B391DBD931 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = ""; }; + CF0D45E9039B6B1EE0097D804950FC26 /* env_posix_test_helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env_posix_test_helper.h; path = util/env_posix_test_helper.h; sourceTree = ""; }; + CF10194636462F103D40226E0D9F68A7 /* FWriteRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteRecord.h; path = Firebase/Database/Core/FWriteRecord.h; sourceTree = ""; }; + CF5A66027CF4B280351EDD3536824E83 /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = ""; }; + CF772156CD908D9723EC1AC67A65F983 /* RLMAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMAccessor.h; path = include/RLMAccessor.h; sourceTree = ""; }; CFD9C5B4E24099B87D18EF99B785C958 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - D093E4A532BB4793C85D123B1F5BC55A /* FIRTransactionResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult.h; path = Firebase/Database/Public/FIRTransactionResult.h; sourceTree = ""; }; - D0C1B13116923C2FCCD5A6CD8F138C0D /* port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port.h; path = port/port.h; sourceTree = ""; }; - D0F231F015E13183195E41563BE8291D /* RealmSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RealmSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D13BD7A9F2B272B66AB3A5E408D37ED2 /* FLimitedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLimitedFilter.m; path = Firebase/Database/Core/View/Filter/FLimitedFilter.m; sourceTree = ""; }; - D1A16DA952DC63FA903DE6D330E5015E /* index_set.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_set.cpp; path = Realm/ObjectStore/src/index_set.cpp; sourceTree = ""; }; - D1E7A051F99434500E664AC519B7B5C7 /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; }; - D2171D98CCD2ECA9A0FB611E88B7FC79 /* binding_callback_thread_observer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = binding_callback_thread_observer.cpp; path = Realm/ObjectStore/src/binding_callback_thread_observer.cpp; sourceTree = ""; }; - D223F15198F481B2D52CC3F9CE6CB2C3 /* FTuplePathValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTuplePathValue.h; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.h; sourceTree = ""; }; - D25B3E3B6981BC07B4A23CFB6C0C24FA /* primitive_list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = primitive_list_notifier.cpp; path = Realm/ObjectStore/src/impl/primitive_list_notifier.cpp; sourceTree = ""; }; - D287124397290FCDED128BD06946425C /* FWriteRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteRecord.h; path = Firebase/Database/Core/FWriteRecord.h; sourceTree = ""; }; - D2D18454880161205A54F248F1309417 /* FIRDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase_Private.h; path = Firebase/Database/Api/Private/FIRDatabase_Private.h; sourceTree = ""; }; - D367DE8AFEB78091122B8580DF71E51F /* RLMRealmConfiguration_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealmConfiguration_Private.h; path = include/RLMRealmConfiguration_Private.h; sourceTree = ""; }; - D395886C18262575291F9C963CB4F203 /* merger.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = merger.cc; path = table/merger.cc; sourceTree = ""; }; - D3EC63088647E496A1109035BAA3FAA5 /* FTupleTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTransaction.h; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.h; sourceTree = ""; }; - D41733250C51AB27A9EDB633243356FB /* RLMRealm+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealm+Sync.h"; path = "include/RLMRealm+Sync.h"; sourceTree = ""; }; - D487D7F1D8837144619205D9B32042A6 /* AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnyPromise.h; path = Sources/AnyPromise.h; sourceTree = ""; }; - D48805F906562E74DE449E16534E7A59 /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; - D4F08FD72CF6D655250483F0381E1C04 /* FChildEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildEventRegistration.h; path = Firebase/Database/Core/View/FChildEventRegistration.h; sourceTree = ""; }; - D5588A38A55AD18D6C3C1BE58C6BC3DF /* cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cache.h; path = include/leveldb/cache.h; sourceTree = ""; }; - D57D11057021C3E5C37A12FF04539DF4 /* snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = snapshot.h; path = db/snapshot.h; sourceTree = ""; }; - D65D0BB13C4FCDA3A25FFF6CEE6254AA /* Realm-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Realm-prefix.pch"; sourceTree = ""; }; - D6793BC75E6E62410B088D642B468B90 /* FIRGitHubAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGitHubAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/GitHub/FIRGitHubAuthProvider.m; sourceTree = ""; }; - D7615907BB7747985754615DAEF089A4 /* Catchable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catchable.swift; path = Sources/Catchable.swift; sourceTree = ""; }; - D7C07886487C9B20E65BD7AD53E112B5 /* bloom.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = bloom.cc; path = util/bloom.cc; sourceTree = ""; }; - D7F61CFEA9E82A3FE8BC9B336BB62F11 /* FRangedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangedFilter.m; path = Firebase/Database/FRangedFilter.m; sourceTree = ""; }; - D817CD58242817C291BC0EE8E586CE72 /* db_impl.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = db_impl.cc; path = db/db_impl.cc; sourceTree = ""; }; - D855FD00DDA5E0D42BFE2777C20A9968 /* FClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FClock.h; path = Firebase/Database/FClock.h; sourceTree = ""; }; - D89CBA57930B44B7419023858932BA9F /* GTMSessionUploadFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionUploadFetcher.m; path = Source/GTMSessionUploadFetcher.m; sourceTree = ""; }; - D8D5C12768B4509B8E069E019A2AF140 /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = Firebase/Core/FIRErrors.m; sourceTree = ""; }; - D8D642261B2D226636A09E4CBA0215C9 /* filter_block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_block.h; path = table/filter_block.h; sourceTree = ""; }; - D8FDDE7CCDB2A7DB50BC6DC4EB0D5830 /* coding.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = coding.cc; path = util/coding.cc; sourceTree = ""; }; - D91D0804446ED6E038CF4AF95C2E14F1 /* FTupleBoolBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleBoolBlock.h; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h; sourceTree = ""; }; - D96141A1F8F122322F0FC36C9F9EE9BE /* FIREmailLinkSignInRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailLinkSignInRequest.h; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInRequest.h; sourceTree = ""; }; - DA01AC2A148B9B2D04DBB71330093C59 /* FIREmailLinkSignInRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIREmailLinkSignInRequest.m; path = Firebase/Auth/Source/RPCs/FIREmailLinkSignInRequest.m; sourceTree = ""; }; - DA0D24FFC21F0AC3D8A2FFC3AE63EB77 /* external_commit_helper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = external_commit_helper.cpp; path = Realm/ObjectStore/src/impl/apple/external_commit_helper.cpp; sourceTree = ""; }; - DA12F09478DC61C0A6342F9C486EF289 /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/UIButton+Kingfisher.swift"; sourceTree = ""; }; - DA69AA362DC47C2FA0A3D8BA2372DDF9 /* RLMObjectStore.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectStore.mm; path = Realm/RLMObjectStore.mm; sourceTree = ""; }; - DAD06B5A3CCDDA46033CB96120CF513B /* FIRAuthSerialTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthSerialTaskQueue.h; path = Firebase/Auth/Source/FIRAuthSerialTaskQueue.h; sourceTree = ""; }; - DAD8F2B2547F7377B3C959D31F89455D /* hash.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = hash.cc; path = util/hash.cc; sourceTree = ""; }; - DADF51336A5F9C36ADC982EC9D1648C9 /* FIRAuthAPNSTokenManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthAPNSTokenManager.m; path = Firebase/Auth/Source/FIRAuthAPNSTokenManager.m; sourceTree = ""; }; - DAE8F91FA9DBD119018F550096370C5E /* RLMObservation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObservation.mm; path = Realm/RLMObservation.mm; sourceTree = ""; }; + CFF8E6C18622FD5C83FD69B0DDAB5823 /* GTMNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSData+zlib.m"; path = "Foundation/GTMNSData+zlib.m"; sourceTree = ""; }; + CFF8E7614222B479BDD417F4569E3312 /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; }; + D01D33E1465E3733B2B3B88C20E4EA30 /* filter_block.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = filter_block.cc; path = table/filter_block.cc; sourceTree = ""; }; + D01EFBF5EAA358999E6632C5A27533B2 /* FView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FView.m; path = Firebase/Database/Core/View/FView.m; sourceTree = ""; }; + D07BF809C7C90AE82EEAE6E6E4CD3A99 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Source/GTMSessionFetcherLogging.h; sourceTree = ""; }; + D08AD131AF3ECD12EF2CD53BACDB1040 /* AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnyPromise.h; path = Sources/AnyPromise.h; sourceTree = ""; }; + D091BB87643304B1034E9FF5791C58BD /* Aliases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Aliases.swift; path = RealmSwift/Aliases.swift; sourceTree = ""; }; + D09C66AEBEC0BBBE11336D46DA3ABCD5 /* FSnapshotHolder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotHolder.h; path = Firebase/Database/Core/FSnapshotHolder.h; sourceTree = ""; }; + D0DE4099A5592BBC2725C9A994F62051 /* FIRIdentityToolkitRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRIdentityToolkitRequest.m; path = Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.m; sourceTree = ""; }; + D116B37B4CC8790458F3EDE605394C60 /* GTMSessionUploadFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionUploadFetcher.h; path = Source/GTMSessionUploadFetcher.h; sourceTree = ""; }; + D153B781C672130B02475F9561391256 /* FStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStorageEngine.h; path = Firebase/Database/Persistence/FStorageEngine.h; sourceTree = ""; }; + D155E6A282321B1570EDD16ED9A3FA96 /* GTMSessionFetcher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-umbrella.h"; sourceTree = ""; }; + D183FE601881EA3EA1723A6A60827856 /* Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Promise.swift; path = Sources/Promise.swift; sourceTree = ""; }; + D1BC0D33088688FFC769F42FDF6369C0 /* FTupleObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjects.h; path = Firebase/Database/Utilities/Tuples/FTupleObjects.h; sourceTree = ""; }; + D1E697278816E8FEA395A13FF44BC435 /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; + D21D3EFEE79B2BCA4CB5DB1413C031AF /* collection_change_builder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = collection_change_builder.cpp; path = Realm/ObjectStore/src/impl/collection_change_builder.cpp; sourceTree = ""; }; + D256F6F8A03BF50F154099A007F61AE0 /* FIRAdditionalUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAdditionalUserInfo.h; path = Firebase/Auth/Source/Public/FIRAdditionalUserInfo.h; sourceTree = ""; }; + D367F27D2C99A4A72B21665841BB1F78 /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RealmSwift/Optional.swift; sourceTree = ""; }; + D38615B33B60544099B4605E2442A40B /* FIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndex.m; path = Firebase/Database/FIndex.m; sourceTree = ""; }; + D3A679ED21E151A6BFA4CA8AD8F4B5A1 /* RLMPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMPlatform.h; path = include/RLMPlatform.h; sourceTree = ""; }; + D3DA0CA71CD6ED19EB97B27C1B3504ED /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = ""; }; + D45B1EDFE9EE9B9D92E3283F319D40D9 /* ChameleonFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4680D838192AB88753FF63D6B6557C0 /* SVIndefiniteAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVIndefiniteAnimatedView.h; path = SVProgressHUD/SVIndefiniteAnimatedView.h; sourceTree = ""; }; + D4D40227F5A0D254B43A099C8CE79364 /* FPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPath.h; path = Firebase/Database/Core/Utilities/FPath.h; sourceTree = ""; }; + D565CD2B0DFFDD2B1B8C8CA7661E18E4 /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + D5E98DABA67CCEBAFCBD865D76427C4A /* FCompoundHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundHash.h; path = Firebase/Database/Core/FCompoundHash.h; sourceTree = ""; }; + D5FFBB0A4527F0757086AB0E0521E0A3 /* FServerValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FServerValues.h; path = Firebase/Database/Core/FServerValues.h; sourceTree = ""; }; + D6069901D3C9E63450F8E563A49E6399 /* FIRTransactionResult_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult_Private.h; path = Firebase/Database/Api/Private/FIRTransactionResult_Private.h; sourceTree = ""; }; + D62F6F9721FAA23A77D7278A9B6E70C0 /* sync_session.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_session.cpp; path = Realm/ObjectStore/src/sync/sync_session.cpp; sourceTree = ""; }; + D6592970485F8F655D9CF7A424C8E735 /* work_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = work_queue.cpp; path = Realm/ObjectStore/src/sync/impl/work_queue.cpp; sourceTree = ""; }; + D6C6ED6167E361C59FB258E20E99DD86 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; + D70A4539E0CAC421B91A12DA601CD99B /* SVProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SVProgressHUD.xcconfig; sourceTree = ""; }; + D71240A2D4877ACF87999159339AC662 /* when.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = when.m; path = Sources/when.m; sourceTree = ""; }; + D7333BA6FC2F09AF434AABBB50A768A3 /* RLMArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray.h; path = include/RLMArray.h; sourceTree = ""; }; + D79854F623E3F02E4FBFC6DB18E826C7 /* FIRAuthDispatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthDispatcher.m; path = Firebase/Auth/Source/FIRAuthDispatcher.m; sourceTree = ""; }; + D836C6135A4A0DB91321A0AF66F189BA /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; + D84D4415254CB3E2764CC60F4649464C /* FIRSecureTokenRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSecureTokenRequest.h; path = Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.h; sourceTree = ""; }; + D86133D9C0631D471E52329FBA4050FF /* SwiftVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftVersion.swift; path = RealmSwift/SwiftVersion.swift; sourceTree = ""; }; + D874D0F99068C8E8D48F8B1E84D050F3 /* FTreeSortedDictionaryEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionaryEnumerator.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h; sourceTree = ""; }; + D8A9C1D55D198A39CFF4C84B85FEC4EE /* FIRGetAccountInfoRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetAccountInfoRequest.h; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.h; sourceTree = ""; }; + D8EDB52C8867702B3E27FE68547CC43D /* RLMSyncCredentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncCredentials.h; path = include/RLMSyncCredentials.h; sourceTree = ""; }; + D90A8F88224ECCEF79428080A5258DD8 /* version_set.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = version_set.cc; path = db/version_set.cc; sourceTree = ""; }; + D92BFB258F6CCC8691015A7777951A8A /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/ImageTransition.swift; sourceTree = ""; }; + D93B48CC39453EC085A4DCA234758D7D /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D9A2CB8DF34EA0B8B63FACCB0C172276 /* FIRRetryHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRRetryHelper.m; path = Firebase/Database/Core/Utilities/FIRRetryHelper.m; sourceTree = ""; }; + D9BE2E14C68AFD8462FAD35B1CD83C11 /* FIRNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetwork.h; path = Firebase/Core/Private/FIRNetwork.h; sourceTree = ""; }; + DA0AC69818903B4ECE5D8079A0F5CEFA /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; + DA6E1E53E3A26C9A84E82C9866A8CD1B /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; + DA851D335F85D8D2CD2D8F1E97396BDE /* SVRadialGradientLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVRadialGradientLayer.h; path = SVProgressHUD/SVRadialGradientLayer.h; sourceTree = ""; }; + DAD6C9F3DA49AF649D92BF0AAB18AF8C /* FIRSecureTokenRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSecureTokenRequest.m; path = Firebase/Auth/Source/RPCs/FIRSecureTokenRequest.m; sourceTree = ""; }; + DAD8DE89032093185844C9ECAE60C7D9 /* FIRCreateAuthURIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCreateAuthURIRequest.m; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.m; sourceTree = ""; }; + DAF6103C808D57B1FAE6BE6252BB54BB /* FIRVerifyPasswordRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyPasswordRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordRequest.m; sourceTree = ""; }; + DB2658EFF6E7C32CD315FE3E97741B8F /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + DB268EE51269AD46437C65F33C5A4EA9 /* FPruneForest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPruneForest.h; path = Firebase/Database/Persistence/FPruneForest.h; sourceTree = ""; }; + DB74BFD13F355F3BB311B7C64A76FBBB /* FIRTransactionResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTransactionResult.m; path = Firebase/Database/Api/FIRTransactionResult.m; sourceTree = ""; }; DBAA5BACA9745702C885EB1AF32FA673 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - DBC813ED15635B220F63454D8006E073 /* FirebaseAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseAuth-dummy.m"; sourceTree = ""; }; - DBE37874EE39B79BF0AFEDCEDAA3159B /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; - DC8998C2DD50C1167C9C926E3E4D672B /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_encode.c; sourceTree = ""; }; - DCECEAA4AA603F6A9E0920E53DDDEC2E /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DD8D5C62E69E0A3FB68E2AD2DF50B971 /* SideMenu.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SideMenu.xcconfig; sourceTree = ""; }; - DE125D16EFFA49F7DFA6BA3E17386AAD /* GoogleToolboxForMac-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-prefix.pch"; sourceTree = ""; }; - DE156E186646316B964B7775D53851FA /* RLMResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMResults.h; path = include/RLMResults.h; sourceTree = ""; }; - DF090133E74CB6A388026C980D12397F /* join.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = join.m; path = Sources/join.m; sourceTree = ""; }; - DF15C92D0E7C68B041093A95CAB8EB6F /* RLMRealm_Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMRealm_Dynamic.h; path = include/RLMRealm_Dynamic.h; sourceTree = ""; }; - DF18DB9AB29349185B333DDFC25DFBE8 /* Alamofire+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Alamofire+Promise.swift"; path = "Extensions/Alamofire/Sources/Alamofire+Promise.swift"; sourceTree = ""; }; - DF1F2A07D2308D209D0DB7A524B6B4AA /* FCachePolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCachePolicy.m; path = Firebase/Database/Persistence/FCachePolicy.m; sourceTree = ""; }; - DF4053AEB373E8A6B19592D9C08284DF /* SVProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressHUD.h; path = SVProgressHUD/SVProgressHUD.h; sourceTree = ""; }; - DF9D43AFDB5C6F43CC096559CB2BDC2F /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; - E0CB0FCCB05A3B341DB72C6184E5C97A /* RLMSyncPermissionResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncPermissionResults.mm; path = Realm/RLMSyncPermissionResults.mm; sourceTree = ""; }; - E0FE3457ECF74D7276A964351CDB65C4 /* FIRNetworkLoggerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkLoggerProtocol.h; path = Firebase/Core/Private/FIRNetworkLoggerProtocol.h; sourceTree = ""; }; - E103EDF631ABD695B0DEC4E9432FF54E /* RLMObjectBase.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMObjectBase.mm; path = Realm/RLMObjectBase.mm; sourceTree = ""; }; - E1338EA89CF01F1D3968BA51757F9953 /* CustomStringConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomStringConvertible.swift; path = Sources/CustomStringConvertible.swift; sourceTree = ""; }; - E14EA890AFFB0CE667D86C0A69FFB986 /* FListenComplete.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenComplete.h; path = Firebase/Database/FListenComplete.h; sourceTree = ""; }; - E1563BB065BDFC76F0AD80345FF226A8 /* RLMProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMProperty.mm; path = Realm/RLMProperty.mm; sourceTree = ""; }; - E1EAE2D6A9FA32C97243022C45926B2A /* FIRVerifyPasswordResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPasswordResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPasswordResponse.h; sourceTree = ""; }; - E2B8505FFB9E28E64596357FF3330F17 /* FPriorityIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPriorityIndex.m; path = Firebase/Database/FPriorityIndex.m; sourceTree = ""; }; - E2C88860B94B8599BDF9BE6D8FF30EC7 /* FIRNetworkMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNetworkMessageCode.h; path = Firebase/Core/Private/FIRNetworkMessageCode.h; sourceTree = ""; }; - E30E2267F1E9274C87E8D4A09F0CABD0 /* FirebaseCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.xcconfig; sourceTree = ""; }; - E312064F9390389ECFA774881A27C239 /* FIRVerifyPhoneNumberResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyPhoneNumberResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyPhoneNumberResponse.h; sourceTree = ""; }; - E31678C76540C57F6A5E6F5B097EAB69 /* transact_log_handler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = transact_log_handler.cpp; path = Realm/ObjectStore/src/impl/transact_log_handler.cpp; sourceTree = ""; }; - E415DFAAD524C6807AF22864550F23CF /* RLMSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSchema_Private.h; path = include/RLMSchema_Private.h; sourceTree = ""; }; - E42E40A46046AAEAB2CF43E6BE431B4D /* block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block.h; path = table/block.h; sourceTree = ""; }; - E49FC6F17A125CD5AA7F1DFDAC5B02E0 /* table.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table.h; path = include/leveldb/table.h; sourceTree = ""; }; - E568AD223B636055BCADD93E5CBD699E /* FirebaseDatabase-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseDatabase-umbrella.h"; sourceTree = ""; }; - E5BAFCB8CC217BA94F66BDDB8BC61AC4 /* FIRAuthUserDefaultsStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthUserDefaultsStorage.m; path = Firebase/Auth/Source/FIRAuthUserDefaultsStorage.m; sourceTree = ""; }; - E600ACAE0B9220663CE65B77A1CC4B26 /* FIRCreateAuthURIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCreateAuthURIRequest.m; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.m; sourceTree = ""; }; - E67EE91FCAF8E86F384AA8B15E9C9BFB /* RLMSyncSubscription.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSubscription.mm; path = Realm/RLMSyncSubscription.mm; sourceTree = ""; }; - E69E13C1098551E7FF04ABB2FFF1375B /* FCacheNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCacheNode.h; path = Firebase/Database/Core/View/FCacheNode.h; sourceTree = ""; }; - E743659391969DFFC825982CE5CC241C /* FIRDatabaseReference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseReference.m; path = Firebase/Database/FIRDatabaseReference.m; sourceTree = ""; }; - E762147F2F13707B979FB6B2F3BB781F /* FTransformedEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTransformedEnumerator.h; path = Firebase/Database/FTransformedEnumerator.h; sourceTree = ""; }; - E7AE1EF1B83DC8FC36416CE765AC2833 /* RealmSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.xcconfig; sourceTree = ""; }; - E7BA65358ED3EFA3C71D0AD440DA51FD /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RealmSwift/Optional.swift; sourceTree = ""; }; - E807046A165001F1535378F0F5B118D0 /* FIRSignUpNewUserRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSignUpNewUserRequest.h; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.h; sourceTree = ""; }; - E819A97A23766D4FB38805E95D8EB1ED /* FTupleUserCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleUserCallback.m; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.m; sourceTree = ""; }; - E8308C19DB799F75509F860FE1407414 /* Resolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resolver.swift; path = Sources/Resolver.swift; sourceTree = ""; }; - E8BDECA7A6A364067A1B158BCC1F7F6E /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; - E92D15118B786BA86D1B0ED014DAC550 /* FTreeSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m; sourceTree = ""; }; - E9535BB87C3A65DC7EF7CAAE2BE8D61B /* FRangedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangedFilter.h; path = Firebase/Database/FRangedFilter.h; sourceTree = ""; }; - E96D78B8853458DE35BFBB8305779746 /* FIndexedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedNode.h; path = Firebase/Database/Snapshot/FIndexedNode.h; sourceTree = ""; }; - EA22307FBAF5F149F33DD2803ACF53C4 /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; - EA4E0F3B352BAC4824632A9FECA3E8C1 /* FConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConnection.m; path = Firebase/Database/Realtime/FConnection.m; sourceTree = ""; }; - EAD0CC66EB949F945F8E6074B855FCA0 /* FPendingPut.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPendingPut.m; path = Firebase/Database/Persistence/FPendingPut.m; sourceTree = ""; }; - EAD2FDD9D63185D4CE0449323C8AC108 /* iterator_wrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator_wrapper.h; path = table/iterator_wrapper.h; sourceTree = ""; }; - EB48733EDDA28CE0130DB6F418E12216 /* FIRDataEventType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataEventType.h; path = Firebase/Database/Public/FIRDataEventType.h; sourceTree = ""; }; - EBD02801F0F79D84CB2A96A4C8461D5F /* SVProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SVProgressHUD.modulemap; sourceTree = ""; }; - EC0EF9BA3D9183E315DD637B783F44C1 /* FIRCreateAuthURIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCreateAuthURIRequest.h; path = Firebase/Auth/Source/RPCs/FIRCreateAuthURIRequest.h; sourceTree = ""; }; - EC2A4FE3CF03DBEF8339CA2564CF346C /* FTypedefs_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs_Private.h; path = Firebase/Database/Api/Private/FTypedefs_Private.h; sourceTree = ""; }; - EC4F14E0A0F67A117B21CDC7A23AE25A /* FTrackedQueryManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQueryManager.m; path = Firebase/Database/Persistence/FTrackedQueryManager.m; sourceTree = ""; }; - EC682AFA59C8C7BD40AB4B9B6D110FF2 /* sync_metadata.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_metadata.cpp; path = Realm/ObjectStore/src/sync/impl/sync_metadata.cpp; sourceTree = ""; }; - ECBB5EB4DDA66EB6EA4D197712996F33 /* FValueEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueEventRegistration.m; path = Firebase/Database/Core/View/FValueEventRegistration.m; sourceTree = ""; }; - ECD17D826CB656882BDB7CF28C25FC53 /* block_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block_builder.h; path = table/block_builder.h; sourceTree = ""; }; - EDE51BDB9F8A1452AEA0C36D5DB71FD8 /* FTupleCallbackStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleCallbackStatus.m; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m; sourceTree = ""; }; - EE5C428F3A3B7B6D673F2A48706658C7 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - EE6E158F81B0430F1C5FE2146F947E38 /* FIRAuthNotificationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthNotificationManager.m; path = Firebase/Auth/Source/FIRAuthNotificationManager.m; sourceTree = ""; }; - EE74E6FA4B872279CBCB62D7BEF31760 /* FIRIdentityToolkitRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRIdentityToolkitRequest.m; path = Firebase/Auth/Source/RPCs/FIRIdentityToolkitRequest.m; sourceTree = ""; }; - EE9C2A8733A9306806AB192FE8737108 /* FIRSendVerificationCodeResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSendVerificationCodeResponse.h; path = Firebase/Auth/Source/RPCs/FIRSendVerificationCodeResponse.h; sourceTree = ""; }; - EEA3E1CAFC53ED900CC4A9D1E69DAAB3 /* FWriteTreeRef.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTreeRef.m; path = Firebase/Database/Core/FWriteTreeRef.m; sourceTree = ""; }; - EEB765BA5A012453CAA0814A8B7C68AD /* RLMNetworkClient.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMNetworkClient.mm; path = Realm/RLMNetworkClient.mm; sourceTree = ""; }; - EEF64F45123D8FB8AFD81C22B85D89A5 /* FViewProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessor.h; path = Firebase/Database/FViewProcessor.h; sourceTree = ""; }; - EF6769178C5B6719E6F4520E8A1A2ED0 /* FIRDatabaseQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseQuery.m; path = Firebase/Database/Api/FIRDatabaseQuery.m; sourceTree = ""; }; - EFB1F9E876407CD5BB252BD6A0490DAE /* Realm-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Realm-dummy.m"; sourceTree = ""; }; - EFC330D3305F7763B45D2C9F016F2B74 /* RealmSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RealmSwift.modulemap; sourceTree = ""; }; - EFF27538EA032DA9FE2F20CFB945BADF /* Realm.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Realm.modulemap; sourceTree = ""; }; - F00A4739FD34EB513E15CC0292A858B0 /* GTMSessionFetcher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-umbrella.h"; sourceTree = ""; }; - F0C497181F13C716F7C4EBC2AAA343A6 /* String+MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+MD5.swift"; path = "Sources/String+MD5.swift"; sourceTree = ""; }; - F0D1DDC4A6C31D6F3FDCE41C7CD4BD2D /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - F136DFF42C239BB88A3F429C6CDA4D16 /* FIRAuthCredential_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthCredential_Internal.h; path = Firebase/Auth/Source/FIRAuthCredential_Internal.h; sourceTree = ""; }; - F14C3126A27ED02B8E5B7D5C709EA7E2 /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = ""; }; - F1FD6D374F4DC01D8278EEC2DF199B58 /* FirebaseNanoPB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseNanoPB.framework; path = Frameworks/FirebaseNanoPB.framework; sourceTree = ""; }; - F2018E3AE5464446EA4FD27F6BF756A0 /* table_cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = table_cache.cc; path = db/table_cache.cc; sourceTree = ""; }; - F20440FC5E61BDEE9A09B544C5974154 /* FIRVerifyClientRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyClientRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyClientRequest.m; sourceTree = ""; }; - F22E954A2ECB868FD5E02FAAE1878B8B /* RLMManagedArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMManagedArray.mm; path = Realm/RLMManagedArray.mm; sourceTree = ""; }; - F237BFE530F87F9D29EB20B41D6E7EA7 /* FLLRBEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBEmptyNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m; sourceTree = ""; }; - F27DDA2A4FA5B93C3D2BC4D07C85F94D /* hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash.h; path = util/hash.h; sourceTree = ""; }; - F2817712D14124F193818D0195281148 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - F350F4F42491E713EF27C4029334B448 /* FListenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenProvider.m; path = Firebase/Database/Core/FListenProvider.m; sourceTree = ""; }; - F37AA9A32DD9CCBC3CDCFF34D0CDDBCC /* SVProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SVProgressHUD-dummy.m"; sourceTree = ""; }; - F3D138B8787D82CFEF0F467425F0C0A7 /* FIRResetPasswordResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRResetPasswordResponse.m; path = Firebase/Auth/Source/RPCs/FIRResetPasswordResponse.m; sourceTree = ""; }; - F431C8240104B5D4C9A11E38AB50DDBE /* RLMObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject.h; path = include/RLMObject.h; sourceTree = ""; }; - F4351ABF0E5804F47D02066C4F50BAA1 /* SideMenu-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SideMenu-dummy.m"; sourceTree = ""; }; - F439BD97DD694938706D323C613AE6B4 /* FWriteTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTree.m; path = Firebase/Database/Core/FWriteTree.m; sourceTree = ""; }; - F464260936E9C53C8EEE939385034569 /* FOverwrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOverwrite.m; path = Firebase/Database/Core/Operation/FOverwrite.m; sourceTree = ""; }; - F47CC06334DD7C078969F817BC4E3238 /* FIRVerifyAssertionResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVerifyAssertionResponse.h; path = Firebase/Auth/Source/RPCs/FIRVerifyAssertionResponse.h; sourceTree = ""; }; - F524232F2B533892102DB1982763255E /* FSparseSnapshotTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSparseSnapshotTree.h; path = Firebase/Database/Core/FSparseSnapshotTree.h; sourceTree = ""; }; - F55B226D0D00EFA040C976DF49045D23 /* FIREmailPasswordAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIREmailPasswordAuthCredential.h; path = Firebase/Auth/Source/AuthProviders/EmailPassword/FIREmailPasswordAuthCredential.h; sourceTree = ""; }; - F587118FCAFF6DA5E474BA0F9AABE6D6 /* FIRAdditionalUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAdditionalUserInfo.h; path = Firebase/Auth/Source/Public/FIRAdditionalUserInfo.h; sourceTree = ""; }; - F5A1BAE0B8B6A6A7EA5E524A5029F574 /* FIRAuthAPNSTokenType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAPNSTokenType.h; path = Firebase/Auth/Source/Public/FIRAuthAPNSTokenType.h; sourceTree = ""; }; - F5F544CE6EB349011514F2B58814743C /* FTupleUserCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleUserCallback.h; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.h; sourceTree = ""; }; - F62D2C38661956FB1EA268061A54F656 /* FPruneForest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPruneForest.m; path = Firebase/Database/Persistence/FPruneForest.m; sourceTree = ""; }; - F7453E0EFD2ADC36B38779BFF40F992E /* RLMObjectSchema_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectSchema_Private.h; path = include/RLMObjectSchema_Private.h; sourceTree = ""; }; - F76D46FDE19DBAEBCBE30A226A0E30DE /* FIROAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROAuthProvider.h; path = Firebase/Auth/Source/Public/FIROAuthProvider.h; sourceTree = ""; }; - F78803667E6C83A5A8660CA29D277FAA /* dumpfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dumpfile.h; path = include/leveldb/dumpfile.h; sourceTree = ""; }; - F79840018A94A2754D04EAD026634EA9 /* FEventGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventGenerator.h; path = Firebase/Database/FEventGenerator.h; sourceTree = ""; }; - F7A0EF2088DBAD9A780E518DC022003A /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/ImageProcessor.swift; sourceTree = ""; }; - F7F4B9219625D214F1B6B82D278C3EFC /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; - F85E685C88F5CB8F7BCA127284A9E509 /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; }; - F8DC957A7E9E4767AD118CFEC226B886 /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = Firebase/Core/FIRAppAssociationRegistration.m; sourceTree = ""; }; - F8F6F94C2E3D8C837B8CC9E7DDF471CF /* FIRAnalyticsConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRAnalyticsConfiguration+Internal.h"; path = "Firebase/Core/Private/FIRAnalyticsConfiguration+Internal.h"; sourceTree = ""; }; - F95DDBFD616330F5F6A67C5AED7689FE /* arena.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = arena.cc; path = util/arena.cc; sourceTree = ""; }; - F9ABDA150F8FCB5586804EBB396E825F /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/CacheSerializer.swift; sourceTree = ""; }; - FA137177B101DF12EEE9B8A2FC68BC56 /* GTMSessionFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcher.h; path = Source/GTMSessionFetcher.h; sourceTree = ""; }; - FA418B7D73C04C4A8B1F901C0BB3B9DA /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; - FA496CD547DFB293FF3FE7B78A33A15A /* object_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = object_notifier.cpp; path = Realm/ObjectStore/src/impl/object_notifier.cpp; sourceTree = ""; }; - FB8B5C694769C60E21013C8EA0EF9ED2 /* FIRAuthTokenResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthTokenResult.m; path = Firebase/Auth/Source/FIRAuthTokenResult.m; sourceTree = ""; }; - FBBED2A541EF26AD99B96CAEFFA4172B /* FIRTransactionResult_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult_Private.h; path = Firebase/Database/Api/Private/FIRTransactionResult_Private.h; sourceTree = ""; }; - FCF8AF39C9864784716336420A00B8D6 /* FChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChange.h; path = Firebase/Database/Core/View/FChange.h; sourceTree = ""; }; - FD13A003F07E3F8B8323B787BEBC85E1 /* FNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNode.h; path = Firebase/Database/Snapshot/FNode.h; sourceTree = ""; }; - FD4ADAA2A64DF5BD1BDA33ABED0DA53E /* FIRGetProjectConfigRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetProjectConfigRequest.h; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigRequest.h; sourceTree = ""; }; - FE08BA04FFD4D05E87FF20CA580F01B7 /* RLMObjectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObjectBase.h; path = include/RLMObjectBase.h; sourceTree = ""; }; - FE237A3FA67FD7E1361EE75D555E1F5C /* table_cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_cache.h; path = db/table_cache.h; sourceTree = ""; }; - FE6B8AF94F6B9320B35BA9AEF571956C /* FPersistenceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistenceManager.h; path = Firebase/Database/Persistence/FPersistenceManager.h; sourceTree = ""; }; - FEBE6C6CC4D11E5379DA07B40C9B46D1 /* FLevelDBStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLevelDBStorageEngine.h; path = Firebase/Database/Persistence/FLevelDBStorageEngine.h; sourceTree = ""; }; - FF6C9B912DEAEBADD2AB183CF74BCB39 /* ChartSeries.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartSeries.swift; path = Source/ChartSeries.swift; sourceTree = ""; }; - FF90FD1EEAD8D69B6F2F9AFFA0D237C9 /* GTMSessionFetcher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMSessionFetcher.modulemap; sourceTree = ""; }; - FFB8A6D618A3C03D20469FFA5E164E9B /* FAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAuthTokenProvider.m; path = Firebase/Database/Login/FAuthTokenProvider.m; sourceTree = ""; }; - FFCE27F142F0288671E419BA079D09F5 /* list_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = list_notifier.cpp; path = Realm/ObjectStore/src/impl/list_notifier.cpp; sourceTree = ""; }; - FFCE7CA270F7F0DFB617B70FD87B18EB /* block.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = block.cc; path = table/block.cc; sourceTree = ""; }; - FFE1402FA9903A094033843D6D68E3CC /* FTupleSetIdPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleSetIdPath.m; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m; sourceTree = ""; }; + DC0CBB71E6642D5995887E7E83013BCF /* FListenComplete.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenComplete.h; path = Firebase/Database/FListenComplete.h; sourceTree = ""; }; + DC1B54C03365E9EBA752E0DC5E534766 /* FIRTwitterAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTwitterAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Twitter/FIRTwitterAuthProvider.m; sourceTree = ""; }; + DC3DE7D630CFB3538A508DEC63BD1701 /* FIRAuthWebUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthWebUtils.m; path = Firebase/Auth/Source/FIRAuthWebUtils.m; sourceTree = ""; }; + DC46A1AE5BB80D97BADCD70C3B0FFDBB /* RLMSyncSession.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSession.mm; path = Realm/RLMSyncSession.mm; sourceTree = ""; }; + DC5834E9F628118227FC3B6BA690DFFF /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = ""; }; + DC6D6429E9291910AD6517A3BEEFC5BE /* FTupleTSN.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTSN.m; path = Firebase/Database/Utilities/Tuples/FTupleTSN.m; sourceTree = ""; }; + DCAD53AB4741FAAE1601FCB66AABA196 /* RLMRealmConfiguration+Sync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RLMRealmConfiguration+Sync.h"; path = "include/RLMRealmConfiguration+Sync.h"; sourceTree = ""; }; + DCB195E78149D6A42F4DB12D06BAFAEB /* RLMSyncConfiguration.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncConfiguration.mm; path = Realm/RLMSyncConfiguration.mm; sourceTree = ""; }; + DCE71A669B6834D4656BFB09C78E9B76 /* SideMenu.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SideMenu.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DCEA32A7685F8B3A7A5F3C12D0FE0D9C /* arena.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = arena.cc; path = util/arena.cc; sourceTree = ""; }; + DD0DE7989E802C0D14EE23A291A2322E /* FIRAuthErrorUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthErrorUtils.m; path = Firebase/Auth/Source/FIRAuthErrorUtils.m; sourceTree = ""; }; + DD2A1A5865A20D1F79C122E36B2F82C4 /* RLMSyncUser.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncUser.mm; path = Realm/RLMSyncUser.mm; sourceTree = ""; }; + DD3B1E8CF575604F22181747F6BE98CA /* port_posix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_posix.h; path = port/port_posix.h; sourceTree = ""; }; + DE01A44B82EF619D9670F6D0AACC459C /* FIRAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthCredential.h; path = Firebase/Auth/Source/Public/FIRAuthCredential.h; sourceTree = ""; }; + DE087804912A4BCB19C1BB22EBA1F44F /* FIRRetryHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRRetryHelper.h; path = Firebase/Database/Core/Utilities/FIRRetryHelper.h; sourceTree = ""; }; + DE60E07F1ED9D438A7C71A665E7AC738 /* FIRGetProjectConfigResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetProjectConfigResponse.h; path = Firebase/Auth/Source/RPCs/FIRGetProjectConfigResponse.h; sourceTree = ""; }; + DE7EF2CE9127FE3E0A845CA0A0CA80C6 /* Catchable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catchable.swift; path = Sources/Catchable.swift; sourceTree = ""; }; + DEA0A0D04B604DBA164EB23CBB4645CB /* FIRAuthAPNSTokenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthAPNSTokenManager.h; path = Firebase/Auth/Source/FIRAuthAPNSTokenManager.h; sourceTree = ""; }; + DF3D1388C3208FB5654AEA752DF494DA /* FValueIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueIndex.m; path = Firebase/Database/FValueIndex.m; sourceTree = ""; }; + DFA920CB71D6C3CA77AEA3BEF13D02A4 /* FTreeSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h; sourceTree = ""; }; + DFD4F06C9C5C846C7E48A6BEB252C275 /* RLMThreadSafeReference.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMThreadSafeReference.mm; path = Realm/RLMThreadSafeReference.mm; sourceTree = ""; }; + DFF2766440846A31FD73AAF469CB2610 /* results_notifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = results_notifier.cpp; path = Realm/ObjectStore/src/impl/results_notifier.cpp; sourceTree = ""; }; + E010A4DB5333A49B51011AD79DF7AC63 /* FIRAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppEnvironmentUtil.m; path = Firebase/Core/third_party/FIRAppEnvironmentUtil.m; sourceTree = ""; }; + E0211EBEE4C7A49C7AB45756E6F92459 /* fbase64.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fbase64.c; path = Firebase/Database/third_party/SocketRocket/fbase64.c; sourceTree = ""; }; + E064CCF1C6E56D95FA19C00293E43572 /* FPathIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPathIndex.m; path = Firebase/Database/FPathIndex.m; sourceTree = ""; }; + E06EB00A4344BF2F2868A696D27FB88D /* FAckUserWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAckUserWrite.h; path = Firebase/Database/Core/Operation/FAckUserWrite.h; sourceTree = ""; }; + E070B50C219F0362825D7D9524B1EEFE /* FMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMerge.m; path = Firebase/Database/Core/Operation/FMerge.m; sourceTree = ""; }; + E09FF85ADC2F5EE2DCBEB81D81DF56C3 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = ""; }; + E0DCCF885A83486AD672608650AB8A39 /* block.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = block.cc; path = table/block.cc; sourceTree = ""; }; + E0E1301557F34BE04CB001D327503599 /* FIRSignUpNewUserResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSignUpNewUserResponse.h; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserResponse.h; sourceTree = ""; }; + E133445AED330F1E9A9FA6CD3B486CF8 /* FIRMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMutableDictionary.m; path = Firebase/Core/FIRMutableDictionary.m; sourceTree = ""; }; + E13C55167E7C43E08ACFF3C1C5DECDA7 /* FIRDatabaseQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseQuery.m; path = Firebase/Database/Api/FIRDatabaseQuery.m; sourceTree = ""; }; + E17F5D3C8611981CAD280408B214E47A /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; + E211216D81C3386CC56C9765AB7CBDF9 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/ImagePrefetcher.swift; sourceTree = ""; }; + E255080150BF442FABF48724E41239FA /* FTupleObjectNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjectNode.m; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.m; sourceTree = ""; }; + E272D493395ABF9F93A519C37C611EDF /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = ""; }; + E299160C17BB38B076A0CD608FF29635 /* GTMDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; + E2ACEFF5E7DE1A21254CD3E5D774B7C7 /* FNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNode.h; path = Firebase/Database/Snapshot/FNode.h; sourceTree = ""; }; + E2B8E74A9B829C2A9F1A358BED46E52F /* FView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FView.h; path = Firebase/Database/Core/View/FView.h; sourceTree = ""; }; + E2EECF1DA495C882A42965802744F8A1 /* shared_realm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = shared_realm.cpp; path = Realm/ObjectStore/src/shared_realm.cpp; sourceTree = ""; }; + E308DCCA43E5560B2600491365025266 /* RealmSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RealmSwift-prefix.pch"; sourceTree = ""; }; + E3128E68EB45CC50FB2EA91D87A81F3F /* FIRGitHubAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGitHubAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/GitHub/FIRGitHubAuthProvider.m; sourceTree = ""; }; + E33AA5AFBCAD9B41CB718793866A994E /* log_reader.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = log_reader.cc; path = db/log_reader.cc; sourceTree = ""; }; + E3B53465250D3BD666A5547A90167ADF /* table_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = table_builder.cc; path = table/table_builder.cc; sourceTree = ""; }; + E3C03A08FBA9AE8AAFA947AD2092F07A /* FImmutableSortedSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedSet.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m; sourceTree = ""; }; + E3E0D1163910E27D230F1CC62944F059 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = ""; }; + E3EB9C130BCDF5D41B767A2DDB23620E /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + E4133A311D0FB64D2AD4B9F49E3259F8 /* FIRDeleteAccountResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDeleteAccountResponse.h; path = Firebase/Auth/Source/RPCs/FIRDeleteAccountResponse.h; sourceTree = ""; }; + E417744D2BA90655B13C5DF82A5B99BA /* RealmSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RealmSwift.xcconfig; sourceTree = ""; }; + E44660104793B22126F515F4E14D3885 /* status.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = status.cc; path = util/status.cc; sourceTree = ""; }; + E476D088653EE4F6345064D9D149BA42 /* FTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTree.m; path = Firebase/Database/Core/Utilities/FTree.m; sourceTree = ""; }; + E5278205885FF01F26929F8BE769AB72 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; + E5397D3D838C93324D363E3C9F189C47 /* FTypedefs_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs_Private.h; path = Firebase/Database/Api/Private/FTypedefs_Private.h; sourceTree = ""; }; + E55D99BE0F6247BC1B1AB551C188D909 /* two_level_iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = two_level_iterator.cc; path = table/two_level_iterator.cc; sourceTree = ""; }; + E5669EE883F97BC9A23D1C8D871DC0D1 /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = ""; }; + E56BFB651EAAB7A87E89B54852D0345E /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; + E59A62C06B2C9F2B6C1B0236FA1B0750 /* RLMProperty_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMProperty_Private.h; path = include/RLMProperty_Private.h; sourceTree = ""; }; + E5C4CBD5C53DB24398B5E050FFFE4C96 /* FIRAuthSerialTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthSerialTaskQueue.m; path = Firebase/Auth/Source/FIRAuthSerialTaskQueue.m; sourceTree = ""; }; + E5D8F67F9944E0DB70382FA5CF599627 /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/KingfisherOptionsInfo.swift; sourceTree = ""; }; + E5FE37307F3DA32A61193CA00BB422BA /* FWebSocketConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWebSocketConnection.h; path = Firebase/Database/Realtime/FWebSocketConnection.h; sourceTree = ""; }; + E73E5706123B04485CDA9404C32A422E /* FIRGetOOBConfirmationCodeRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetOOBConfirmationCodeRequest.h; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.h; sourceTree = ""; }; + E743D76084C3E5FA7FE6A15E223A6913 /* IFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IFillFormatter.swift; path = Source/Charts/Formatters/IFillFormatter.swift; sourceTree = ""; }; + E76EB4BCBF62A4F7F83D4708D243B248 /* FStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStringUtilities.h; path = Firebase/Database/Utilities/FStringUtilities.h; sourceTree = ""; }; + E7727B9947C70A6D381F53FFABEE6C3A /* FIRAuthUserDefaultsStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthUserDefaultsStorage.m; path = Firebase/Auth/Source/FIRAuthUserDefaultsStorage.m; sourceTree = ""; }; + E7B0803FD1D9AB1AFC06B666EDE9F3B0 /* FIRAuthKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthKeychain.m; path = Firebase/Auth/Source/FIRAuthKeychain.m; sourceTree = ""; }; + E81850BB41F1CAD9F4102474A6FB2830 /* dbformat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dbformat.h; path = db/dbformat.h; sourceTree = ""; }; + E81E1EB38627F35CE6FBC4CDE458A51A /* leveldb-library.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "leveldb-library.modulemap"; sourceTree = ""; }; + E85E168B41DFBBC9158E86075D7F92E6 /* GTMSessionFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcher.m; path = Source/GTMSessionFetcher.m; sourceTree = ""; }; + E8806A8174D13CD9754D866166DD0562 /* FRepo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepo.m; path = Firebase/Database/Core/FRepo.m; sourceTree = ""; }; + E8EE02BFED580BD90EE81C76494401DE /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; + E8F1E1E998443D17EED1A4B847684070 /* FMaxNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMaxNode.m; path = Firebase/Database/FMaxNode.m; sourceTree = ""; }; + E91666D8D4E7C8B71DC998D1FE5619E9 /* FPersistenceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistenceManager.m; path = Firebase/Database/Persistence/FPersistenceManager.m; sourceTree = ""; }; + E98B7F16E1968C0F5B2827BDA7982C53 /* FIRServerValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRServerValue.m; path = Firebase/Database/Api/FIRServerValue.m; sourceTree = ""; }; + EA097D93EB4F79569238F8C519B4EC51 /* env.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env.h; path = include/leveldb/env.h; sourceTree = ""; }; + EA6C777DD124804241662EA4C09C34FA /* FUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUtilities.h; path = Firebase/Database/Utilities/FUtilities.h; sourceTree = ""; }; + EA903D437D2BFF7048A4ADB4D94F173F /* FIRVerifyCustomTokenRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyCustomTokenRequest.m; path = Firebase/Auth/Source/RPCs/FIRVerifyCustomTokenRequest.m; sourceTree = ""; }; + EAF71C594340430806E39D9C938D9C33 /* FIRGetOOBConfirmationCodeRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetOOBConfirmationCodeRequest.m; path = Firebase/Auth/Source/RPCs/FIRGetOOBConfirmationCodeRequest.m; sourceTree = ""; }; + EB15FCB45BA90AB127CACB1192603374 /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_decode.c; sourceTree = ""; }; + EB8C9AC5CE38F7A87DF1D2D68F290A1C /* RLMSyncSessionRefreshHandle.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMSyncSessionRefreshHandle.mm; path = Realm/RLMSyncSessionRefreshHandle.mm; sourceTree = ""; }; + EBA0D432FF6E0BC9F68AD5F03713ED69 /* SVProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SVProgressHUD-dummy.m"; sourceTree = ""; }; + EBD19FA459C832FDC87D5BC12252FA81 /* FIRAuthTokenResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthTokenResult.h; path = Firebase/Auth/Source/Public/FIRAuthTokenResult.h; sourceTree = ""; }; + EC22A226FA6EEDA3165563461A0902AD /* RLMArray_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMArray_Private.h; path = include/RLMArray_Private.h; sourceTree = ""; }; + EC2CFB08B219E2306E08BE6B95799291 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = ""; }; + EC3CCB389D940FD240C6627A2ABE0ECA /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = ""; }; + ECA5B33E77A81E1B638BD533007AE692 /* FIRDatabaseReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference.h; path = Firebase/Database/Public/FIRDatabaseReference.h; sourceTree = ""; }; + ECD7BA3D5DE79C189A49C586B3B522CE /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = Firebase/Core/Private/FIRBundleUtil.h; sourceTree = ""; }; + ED25B59214967FE279B4715D47C53229 /* FLevelDBStorageEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLevelDBStorageEngine.m; path = Firebase/Database/Persistence/FLevelDBStorageEngine.m; sourceTree = ""; }; + ED4D52A25F128059A0CD5F8736854539 /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = ""; }; + EEA879E68A4329D71FC0206FA63DDE3E /* FIRGoogleAuthProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGoogleAuthProvider.m; path = Firebase/Auth/Source/AuthProviders/Google/FIRGoogleAuthProvider.m; sourceTree = ""; }; + EED7927D2D435154DAF3FC7631FBB480 /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; + EEEB3C3C89CD691258C71D9861F0EAE4 /* RLMOptionalBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMOptionalBase.h; path = include/RLMOptionalBase.h; sourceTree = ""; }; + EF0A1D6C66E18A45BDA2381E61A5CD67 /* filter_policy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_policy.h; path = include/leveldb/filter_policy.h; sourceTree = ""; }; + EF133089DEADC3804D963EC6215DC092 /* FIRAdditionalUserInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAdditionalUserInfo.m; path = Firebase/Auth/Source/FIRAdditionalUserInfo.m; sourceTree = ""; }; + EF137FA4ABCDBD0A212686359A421D38 /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = ""; }; + EF46231B3B896419947E59C97E8AAFE0 /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = ""; }; + EF8D79189693CA879E823A588A4D478C /* FIRResetPasswordRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRResetPasswordRequest.m; path = Firebase/Auth/Source/RPCs/FIRResetPasswordRequest.m; sourceTree = ""; }; + EFA9A0C3EE5566683404437CECD445BC /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Source/GTMSessionFetcherService.m; sourceTree = ""; }; + EFBD716230C2EA6B4130C57E76B191D6 /* FIRAuthNotificationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthNotificationManager.m; path = Firebase/Auth/Source/FIRAuthNotificationManager.m; sourceTree = ""; }; + EFC2D7DD17B284E6861E9F929F2E45FF /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + EFC5008C82A789C5CE54CC603CD45792 /* FLLRBValueNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBValueNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m; sourceTree = ""; }; + EFDE506A4C3B1F7E3D9E24E858881233 /* LinkingObjects.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkingObjects.swift; path = RealmSwift/LinkingObjects.swift; sourceTree = ""; }; + F07CC73F5FF404CE850436C15AE45CCC /* FImmutableSortedSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedSet.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h; sourceTree = ""; }; + F0AE07EBBCFC01AED0B1CF71CB706B04 /* FIRAuthURLPresenter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthURLPresenter.m; path = Firebase/Auth/Source/FIRAuthURLPresenter.m; sourceTree = ""; }; + F0C79C32176E0055A39112880C7E862C /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; + F0D75C0BFFEAD73C8EBE9C7C034A533A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F1346DACDB39018988E6C5D8D2D5E306 /* FIRAuthRequestConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthRequestConfiguration.h; path = Firebase/Auth/Source/RPCs/FIRAuthRequestConfiguration.h; sourceTree = ""; }; + F14E7F640CF5AC07CA9AC2F95CF23CC7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F1D9330D0FDB021A6869C9D40CD6C04A /* librealmcore-ios.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "librealmcore-ios.a"; path = "core/librealmcore-ios.a"; sourceTree = ""; }; + F210646CCCEB64FDB5E524228B7EB9BB /* RLMArray.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = RLMArray.mm; path = Realm/RLMArray.mm; sourceTree = ""; }; + F21AAA9D6C94DEB06889483476FBB730 /* FIRVerifyClientResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVerifyClientResponse.m; path = Firebase/Auth/Source/RPCs/FIRVerifyClientResponse.m; sourceTree = ""; }; + F2379F4B86E1AE74BC7236E7083C3D0E /* FIRGetAccountInfoRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRGetAccountInfoRequest.m; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoRequest.m; sourceTree = ""; }; + F2E2300B20A23D7A9E2E7C1B904D16A7 /* FIRAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppEnvironmentUtil.h; path = Firebase/Core/third_party/FIRAppEnvironmentUtil.h; sourceTree = ""; }; + F306E49F6CBA1AE7A1A70C9D74062C88 /* sync_user.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_user.cpp; path = Realm/ObjectStore/src/sync/sync_user.cpp; sourceTree = ""; }; + F35C5BBD2933B004BF1EDF9D6E02A70B /* FAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAuthTokenProvider.h; path = Firebase/Database/Login/FAuthTokenProvider.h; sourceTree = ""; }; + F3B7E2E973BBB444C06C551233B1D8B9 /* histogram.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = histogram.cc; path = util/histogram.cc; sourceTree = ""; }; + F4F3609E7CE825F9255D0A5143BE6861 /* leveldb-library-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "leveldb-library-dummy.m"; sourceTree = ""; }; + F51B4AA15ABBB1261F5E793114BC417B /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = ""; }; + F5208118EAF286A10D95C99ACC06543F /* log_writer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_writer.h; path = db/log_writer.h; sourceTree = ""; }; + F54A971A6A51EBC2671C255AC65D53A5 /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; + F5761ABBE7D34859F6873ED5001D20F2 /* RLMSyncManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMSyncManager.h; path = include/RLMSyncManager.h; sourceTree = ""; }; + F5B69AB2453A073F8510BFFCDBE55E9F /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Source/Charts/Charts/PieChartView.swift; sourceTree = ""; }; + F5C5212ED1DC219BB630A54741005AF3 /* SwiftChart.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftChart.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F67A0D5B25DEB08B734DFE8804DAFB9F /* sync_metadata.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sync_metadata.cpp; path = Realm/ObjectStore/src/sync/impl/sync_metadata.cpp; sourceTree = ""; }; + F68106257FC66AE78998CDE6A13BF125 /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = ""; }; + F68EED2313969991AF9FC6F620CECC42 /* RLMObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RLMObject.h; path = include/RLMObject.h; sourceTree = ""; }; + F6EF89D9ABE8102ED8D2D9BE619EE7A0 /* FIRPhoneAuthProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRPhoneAuthProvider.h; path = Firebase/Auth/Source/Public/FIRPhoneAuthProvider.h; sourceTree = ""; }; + F71A6D520394229A328EE1222F948243 /* FNodeFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNodeFilter.h; path = Firebase/Database/Core/View/Filter/FNodeFilter.h; sourceTree = ""; }; + F71A9417DEDCA49A548C42921E4DBCAD /* PromiseKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromiseKit-umbrella.h"; sourceTree = ""; }; + F737BE1BCBCB6589CD1E7F034A6C61C8 /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; + F75441FCC771DAB20E10F502367D5C14 /* db_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_impl.h; path = db/db_impl.h; sourceTree = ""; }; + F76D84C63622221E6419BA6E16155D78 /* Guarantee.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Guarantee.swift; path = Sources/Guarantee.swift; sourceTree = ""; }; + F78EE50CA26577BF7F9B37539DC34362 /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + F79C9D57EEFE9D5B9E388EBB1F039327 /* FTupleFirebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleFirebase.h; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.h; sourceTree = ""; }; + F7E2D986345FEC7FFDEB3BB552A17AAC /* FOperationSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperationSource.h; path = Firebase/Database/Core/Operation/FOperationSource.h; sourceTree = ""; }; + F80FA5272DE2CE2206791655D881D7B3 /* RLMSwiftSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RLMSwiftSupport.m; path = Realm/RLMSwiftSupport.m; sourceTree = ""; }; + F853571EA379A1769F50F8736439903A /* table_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_builder.h; path = include/leveldb/table_builder.h; sourceTree = ""; }; + F85F70CAC842B677AAF9438E29482998 /* FIRAuthExceptionUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAuthExceptionUtils.m; path = Firebase/Auth/Source/FIRAuthExceptionUtils.m; sourceTree = ""; }; + F8AD5474FFB1C513463688190F974CA9 /* leveldb-library.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "leveldb-library.xcconfig"; sourceTree = ""; }; + F8E412C3C35C8F506CC0DAF9C8CA69F6 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + F8E46FB0ECD07C21DBD630231B1BA7AF /* FSparseSnapshotTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSparseSnapshotTree.m; path = Firebase/Database/Core/FSparseSnapshotTree.m; sourceTree = ""; }; + F91102CFBB4F8D09FDF63A213B0EDCFF /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = ""; }; + F9A0356185EA8D5579C06A6B2854E8BE /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = ""; }; + F9E15F476463A05F8A46ADFF9C3DF892 /* FRepoManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoManager.m; path = Firebase/Database/Core/FRepoManager.m; sourceTree = ""; }; + FA7F27648730D2DE62F463C09B4DF503 /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FAAFD1DD6DE458FAFC1C264A4CD0B519 /* ImageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageModifier.swift; path = Sources/ImageModifier.swift; sourceTree = ""; }; + FB05403E3E2BBF4C29F7F548DAB651A0 /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseInstanceID.framework; path = Frameworks/FirebaseInstanceID.framework; sourceTree = ""; }; + FBBD8B0EFD47C2DD5440F393202C03D1 /* UISideMenuNavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UISideMenuNavigationController.swift; path = Pod/Classes/UISideMenuNavigationController.swift; sourceTree = ""; }; + FC9DD5792A6E971BF0253FDAE139DD25 /* FConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConstants.m; path = Firebase/Database/Constants/FConstants.m; sourceTree = ""; }; + FD05D07327E5CC3EDC0C854004583BE1 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; + FD19106F235A77D1493BDD4EFDF93BA2 /* FIRGetAccountInfoResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRGetAccountInfoResponse.h; path = Firebase/Auth/Source/RPCs/FIRGetAccountInfoResponse.h; sourceTree = ""; }; + FD48BBBF03C51B7650C1664FE9D22A86 /* db_impl.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = db_impl.cc; path = db/db_impl.cc; sourceTree = ""; }; + FDB9ED0C21ED4219B0208A70B359A0DA /* iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator.h; path = include/leveldb/iterator.h; sourceTree = ""; }; + FDD65D82B30903266797AB26B18B1973 /* FIRSecureTokenService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRSecureTokenService.m; path = Firebase/Auth/Source/FIRSecureTokenService.m; sourceTree = ""; }; + FE32373C2B36D33767DBC246ABFBD3FD /* FIRSignUpNewUserRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRSignUpNewUserRequest.h; path = Firebase/Auth/Source/RPCs/FIRSignUpNewUserRequest.h; sourceTree = ""; }; + FE50293D6F45770888DD421CCF1AF684 /* RealmSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RealmSwift-dummy.m"; sourceTree = ""; }; + FE94EC3F2DE0FAB11166955BB0245B5B /* FArraySortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FArraySortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h; sourceTree = ""; }; + FF40BB7B5C5B67467D6BA7907483FFF0 /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = ""; }; + FFE2786A74C94370C5D7FDD890A55478 /* FWriteTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTree.m; path = Firebase/Database/Core/FWriteTree.m; sourceTree = ""; }; + FFE2AFC2422A907E0C9C94A2DFF53710 /* FChildEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildEventRegistration.m; path = Firebase/Database/Core/View/FChildEventRegistration.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2185,12 +2472,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 04C25C90C7AF94E68A35852AE88E48A3 /* Frameworks */ = { + 0E5039DE0E2A7B0B8EEB80F03F3B2DBC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 12DF4A5B24E587CB26728FCFDC943F36 /* Foundation.framework in Frameworks */, - E125940AA8E59969535E41467A2D1F75 /* UIKit.framework in Frameworks */, + 0EAD243F1F26194FF94131E8072AF5C6 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2203,6 +2489,32 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 1ADBF110CAF44A45EE8CBDFCC299F488 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E345DE02AD87C708150A4F61462DF063 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2E51F7DCA137D0B31CDC10706FA60E7F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A31558B3B3445DE2C02E7C2527EEEDE2 /* Alamofire.framework in Frameworks */, + 857CEC48533847E28980ADCDC08D9841 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 377B78DF7C56A0D81BDF3EB82B0A2689 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BCCFE1827D22D9E859F4F83E59154DAC /* Foundation.framework in Frameworks */, + 95169A77C0EAE726517CABE977890209 /* Realm.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3C86E1D7CD1DEA99FCFC81586F21A3B5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2214,20 +2526,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4DFE83E8AF91C894188CEC50C64E7ECB /* Frameworks */ = { + 58446016633773EB3F01F7CF995C4A90 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5576A08E4E5D0F44A39C74B3E685DAD3 /* Foundation.framework in Frameworks */, - BD88996CF2AAABB7A5687811D63EDA29 /* Realm.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7654112D71A14EF9AEC680586A284095 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B101651107ACE7586585CA833F38DEF9 /* Foundation.framework in Frameworks */, + 3D5768C2ABD4E97A261A67A37B74694D /* Foundation.framework in Frameworks */, + FAF0B88E606AED62810B5439CF3838F6 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2247,6 +2551,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9E79946D8CAA9D5508BFC37BB2DEAD21 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 03340225FEDF44302C7DB088D91C17D4 /* Foundation.framework in Frameworks */, + 9D774C2A6CD437431DCB0C3DC0A73B97 /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A05AD251435FB24E096BBA193F9C99F0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2264,28 +2577,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AB1141DB4559A03F12B75C4557F9A9D7 /* Frameworks */ = { + A6ABADFF5D02EA9BA78A8D04052D1003 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94DEBF8DF425A97C09B152A9E3508A37 /* Foundation.framework in Frameworks */, + 805C26328E942629D7243E5059372CF5 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BCFD8F7A98EDD07CCB474525DA38D51E /* Frameworks */ = { + B3CAE50F8658F0A70A5909E776F41E6B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A02E49FB54C1126E9D3BB47CF289B2EA /* Foundation.framework in Frameworks */, - 90A9BA2B290C3F004400886256EC596A /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BF63EDAB06E85EE07B307527B914A351 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 347709C273A444AE76953B46D16ED8B5 /* Foundation.framework in Frameworks */, + 55499034EDA765EA78EDAFADB5BAF9AF /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2307,6 +2611,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D387BAADE6E7411F8111B211183B211A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C07B58D26F20913552F30AD7686D08F0 /* Foundation.framework in Frameworks */, + 8FF0A78261D4F14CBD4618C850200ADA /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D69ED4D33D21C6F8BF9E2AABDEB03ABF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2315,548 +2628,245 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - EE560E4535B928855490E190757DE274 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 28FF5271CA3B86A704355743B1BC1116 /* Alamofire.framework in Frameworks */, - C3BBE34D529610CCC51DFB9906A15F16 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FC4AAAA8C3EB9468690671F86F4299D2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B4119ED4D9DFBDCBE31873E9672DA923 /* Foundation.framework in Frameworks */, - 59F1C57594CC6425F75E3A0E32016BED /* Security.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 038697CC3FF64AFB0BA9B957D72F0788 /* SwiftChart */ = { + 031106DC856E68D11A3BAC52AC2C19D1 /* Alamofire */ = { isa = PBXGroup; children = ( - C3B22BEBA9E65F27C2C2380B9C96931F /* Chart.swift */, - 28F25EDE292C4A862214B20B6307CE2E /* ChartColors.swift */, - FF6C9B912DEAEBADD2AB183CF74BCB39 /* ChartSeries.swift */, - B9F16E07A378380BD5391A08006D0D55 /* Support Files */, + 430E9B8AB787A5CD66DBD7BEA7801919 /* AFError.swift */, + E3EB9C130BCDF5D41B767A2DDB23620E /* Alamofire.swift */, + 793159F9E53F784B20AE7D666C7E7C9B /* DispatchQueue+Alamofire.swift */, + 0D30E80723C26FFB3A12A0BDECA43BF3 /* MultipartFormData.swift */, + 850C89F9188FF87678E74F3783CEAA50 /* NetworkReachabilityManager.swift */, + DB2658EFF6E7C32CD315FE3E97741B8F /* Notifications.swift */, + 9F40CBA44DC84F30307B1E535BB01C0B /* ParameterEncoding.swift */, + A9CDD61CD5457BBA5EE0274AA530BF0A /* Request.swift */, + 280A7778B9DD0C0A6F6D11AD9BEB2B6F /* Response.swift */, + 16A20A4FB231EE817DD971C8AB04B91B /* ResponseSerialization.swift */, + B8E6759063728026000C0CA072665FF2 /* Result.swift */, + 6597DB55CCA248AB8A0F90E19357517E /* ServerTrustPolicy.swift */, + 3762AB6CDCABD4BA24DD01E8F6717177 /* SessionDelegate.swift */, + 892CA59B13478F06E097BEA9A8C170EA /* SessionManager.swift */, + C87E34926B63745C66A41DC9374384B5 /* TaskDelegate.swift */, + 517CBAED413747971B1F17E29597B51B /* Timeline.swift */, + 6632D07B62268908386AC138F7A39B9E /* Validation.swift */, + C6BEE6B4C530342B54AFA68FBF7AEF30 /* Support Files */, ); - path = SwiftChart; + path = Alamofire; sourceTree = ""; }; - 067A91FABD003474D83BE3693E18F79B /* Defines */ = { + 04EC22394FE09B95E968628976477656 /* Support Files */ = { isa = PBXGroup; children = ( - 8E4512E7B81A64FFC9B8E3208E8596CB /* GTMDefines.h */, - ); - name = Defines; - sourceTree = ""; - }; - 069F2B5B52A90B97EB4B79A5DAFA5A9E /* nanopb */ = { - isa = PBXGroup; - children = ( - 829D2B9470AC0635766764B8176BD052 /* pb.h */, - 912431AAC7A4A16F390214EA93DA877F /* pb_common.c */, - 024FC59778A7D3BF25C444C6DA477757 /* pb_common.h */, - 80CCE5EF196537E4E1F1C22EB8F190BC /* pb_decode.c */, - DBE37874EE39B79BF0AFEDCEDAA3159B /* pb_decode.h */, - DC8998C2DD50C1167C9C926E3E4D672B /* pb_encode.c */, - 9ACBB2A3DD950E04C6B1FCD9F1DC108B /* pb_encode.h */, - F27A8D64A4BE2B058143643D80C969A1 /* decode */, - 54E29F21FC925F93A30785D9D746DC40 /* encode */, - 8D360BC880F2D320D0C08862D777B31C /* Support Files */, - ); - path = nanopb; - sourceTree = ""; - }; - 080D194E73166F77137479721FEA2F8E /* Support Files */ = { - isa = PBXGroup; - children = ( - 10587F1EAA20DD8DD4C4AA694141920F /* Info.plist */, - 2A3AECC5D8915010C88CBE3F8300815E /* Kingfisher.modulemap */, - 7D89AEBF817EB6444223B32A0DFFD27D /* Kingfisher.xcconfig */, - 854719D9A0CF8C52152DC541E1D3EF66 /* Kingfisher-dummy.m */, - 56A0BBA5226AC81C85B8B0520E94E96B /* Kingfisher-prefix.pch */, - 061FDDD238820A8A858B697D584DB04E /* Kingfisher-umbrella.h */, + 4AEB354FE125EBC905F9AFDF14100D8A /* FirebaseDatabase.modulemap */, + C5D86DB70DD64D11FA99A20BF127EB79 /* FirebaseDatabase.xcconfig */, + 9E926D7245C29DA55996AC57E252BE4A /* FirebaseDatabase-dummy.m */, + C57FD505AA549D1E21DB283C8DD250F7 /* FirebaseDatabase-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Kingfisher"; + path = "../Target Support Files/FirebaseDatabase"; sourceTree = ""; }; - 14AEB16459037B1D455526B0EAC33370 /* Support Files */ = { + 062531122EE2278DACE870E219BA7124 /* Support Files */ = { isa = PBXGroup; children = ( - 4BC264E8DF5A12C41675C66DE5E782A8 /* Alamofire.modulemap */, - 55E330F93C621C1B333A885F538531D9 /* Alamofire.xcconfig */, - 0AB0FC15C3D9D806562BAA15CD21713E /* Alamofire-dummy.m */, - 67FDEB92CEB811C39AB5C0A2B4D162E9 /* Alamofire-prefix.pch */, - A1980B3459A5D49DC21B3401F74CA7D3 /* Alamofire-umbrella.h */, - 9B1FA8AD627718648DA68296BEDC177B /* Info.plist */, + 4ED17DDA14D925B11AB0455BA6484174 /* Info.plist */, + 76A04A94145B3FDD3392961F5A3F093C /* SideMenu.modulemap */, + 0530BFC7D3BAFA0486AD5729F731BB72 /* SideMenu.xcconfig */, + 3B09EA49F16E2D3D6352F64FFFD1F3EE /* SideMenu-dummy.m */, + 3B260F2EE1633471C17C65CE5372F231 /* SideMenu-prefix.pch */, + 7A67DE7838148233FBF12950FE0AD450 /* SideMenu-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/Alamofire"; + path = "../Target Support Files/SideMenu"; sourceTree = ""; }; - 211B7DA75DEEDB41239AA643A6B0DC37 /* Support Files */ = { + 122570D05366DC078EA5D15878E8A808 /* GTMSessionFetcher */ = { isa = PBXGroup; children = ( - AAEEA8D18CF3D0782389042A9DEFC9D1 /* GoogleToolboxForMac.modulemap */, - 6115C302DB89E3786D5A51DBD5F87FA9 /* GoogleToolboxForMac.xcconfig */, - 36D1265351704DD5A9610C3579CD18B6 /* GoogleToolboxForMac-dummy.m */, - DE125D16EFFA49F7DFA6BA3E17386AAD /* GoogleToolboxForMac-prefix.pch */, - 486A22C0B0F79526DA6C0AD53C26AB4C /* GoogleToolboxForMac-umbrella.h */, - 331EFA91C37C85605E3C91F45C0B4798 /* Info.plist */, + D74FC2859005DEB2467962FBB0ADEE96 /* Core */, + 37C8793ED53CFB04BC41A5B79BF326BC /* Support Files */, + ); + path = GTMSessionFetcher; + sourceTree = ""; + }; + 16054FC813A926DD367DFF37BE9CD7BB /* Support Files */ = { + isa = PBXGroup; + children = ( + 7D8CBCBD0D4A59762D4A428E878D085A /* ChameleonFramework.modulemap */, + 9AAA21B113E52450FA24FE55171F47DD /* ChameleonFramework.xcconfig */, + A40816A42C954603A831D194843E7E7C /* ChameleonFramework-dummy.m */, + 93FC6DF9FBCA2D545B1C3ED49F0F5D29 /* ChameleonFramework-prefix.pch */, + 08C691596B6D5A6A93740E4B320582B9 /* ChameleonFramework-umbrella.h */, + 6E2E162383BC786C78C4746589E49CB9 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/ChameleonFramework"; + sourceTree = ""; + }; + 164AAFA22298245A61A83712C281D342 /* Support Files */ = { + isa = PBXGroup; + children = ( + A5A4B49B48281F3297E60B117028A4CC /* GoogleToolboxForMac.modulemap */, + 2027D37EFACF602AB29CAD43E4F356CF /* GoogleToolboxForMac.xcconfig */, + 137C3277D8A84ABAB176985061E001E1 /* GoogleToolboxForMac-dummy.m */, + 2D708ECEC790FEFE693A914A41CFAA86 /* GoogleToolboxForMac-prefix.pch */, + 9F0C0144FC237834DEEA404A9A57B64F /* GoogleToolboxForMac-umbrella.h */, + 85E3EBCF4EE6111A229B8733458A45D1 /* Info.plist */, ); name = "Support Files"; path = "../Target Support Files/GoogleToolboxForMac"; sourceTree = ""; }; - 2B4579290E5E69F11A2F9AB88D04FFBF /* Headers */ = { + 27906DB523924ADAB4A14F8DF203B471 /* Support Files */ = { isa = PBXGroup; children = ( - 2EE089B6DFD2B2508B0CB8D72C7E3C2B /* NSError+RLMSync.h */, - AA67CDDCDB4D0F4FDD2CD29BD96D01C7 /* Realm.h */, - 78F4770F3AA732271439C1E944CBB123 /* RLMArray.h */, - 2EBF93A215B2032494BF204BA394E419 /* RLMCollection.h */, - 6459ED0790D6ED01E1D9C3474BD712A6 /* RLMConstants.h */, - 9BC0174932E57EAE6EC19633AAEB7EA6 /* RLMMigration.h */, - F431C8240104B5D4C9A11E38AB50DDBE /* RLMObject.h */, - FE08BA04FFD4D05E87FF20CA580F01B7 /* RLMObjectBase.h */, - 833FFA65380BC592A5DA4FEE614B246D /* RLMObjectBase_Dynamic.h */, - A9B83582E104AC09BA078311C252D8F4 /* RLMObjectSchema.h */, - 8128B85FFE0C0D700431543AA97F0F38 /* RLMPlatform.h */, - 0692A131C2E9F640FF4B64BF63320706 /* RLMProperty.h */, - 4AD1430AEFB88002077F297A1D31604D /* RLMRealm.h */, - D41733250C51AB27A9EDB633243356FB /* RLMRealm+Sync.h */, - DF15C92D0E7C68B041093A95CAB8EB6F /* RLMRealm_Dynamic.h */, - 337BAD4B73E2EB61F0439C9EED57D9F8 /* RLMRealmConfiguration.h */, - 2B3E601205A45E5D22D3132B15576A4E /* RLMRealmConfiguration+Sync.h */, - DE156E186646316B964B7775D53851FA /* RLMResults.h */, - 199A54868C68F439FBCCECBD84D0AA94 /* RLMSchema.h */, - 39C3B310CEE800AC9572C07D5EE7954D /* RLMSyncConfiguration.h */, - 515D097DCD4CB3E03C5D26379559BF4F /* RLMSyncCredentials.h */, - 2049C5CA639316DB171CAA0B09E0676B /* RLMSyncManager.h */, - C1FBAEFB116E74CBCBF1A67240EC1E49 /* RLMSyncPermission.h */, - 22095030353ECE1534E0D2F078683231 /* RLMSyncSession.h */, - 98D40162192EB7E105E483C7882AEA80 /* RLMSyncSubscription.h */, - 0DF43ED484210512CEC7842239F5345D /* RLMSyncUser.h */, - A944252BCA5D3D9744756FB9821C97B2 /* RLMSyncUtil.h */, - 1FA79A6B3CCD3B720B78C2EABF4922F5 /* RLMThreadSafeReference.h */, + 90A88E56AAB100414B7E1B8F9E14500E /* FirebaseCore.modulemap */, + C0B776C4EDA39EEB6B8BFCDAB89272EF /* FirebaseCore.xcconfig */, + 21A74F61C5F4B30CF6861EE4EB5132E2 /* FirebaseCore-dummy.m */, + 1184EAEEC060394B21FE215643CBB29D /* FirebaseCore-umbrella.h */, ); - name = Headers; + name = "Support Files"; + path = "../Target Support Files/FirebaseCore"; sourceTree = ""; }; - 2CAEDB4DA317FA95290D038432E1AFC3 /* Core */ = { - isa = PBXGroup; - children = ( - FA137177B101DF12EEE9B8A2FC68BC56 /* GTMSessionFetcher.h */, - 3433F65AF7DBB7D1F226BB0FFD59F40B /* GTMSessionFetcher.m */, - 3F4FC47F1C6CE579B1454BCD296B49E1 /* GTMSessionFetcherLogging.h */, - C721E75AB963F4557DA58C17AA05083A /* GTMSessionFetcherLogging.m */, - 6764E93AE1777DD4865F3F56E035455B /* GTMSessionFetcherService.h */, - 318F1A2D4EC60AC43046D5DA67C51D47 /* GTMSessionFetcherService.m */, - 429CCB87B4917463265B13D18456A99E /* GTMSessionUploadFetcher.h */, - D89CBA57930B44B7419023858932BA9F /* GTMSessionUploadFetcher.m */, - ); - name = Core; - sourceTree = ""; - }; - 39FC4763EAD7C93D4986486A653D92A1 /* PromiseKit */ = { - isa = PBXGroup; - children = ( - 87A990F23E773F9FFA90EF9C0351D853 /* Alamofire */, - 751BAB2B256A5F4DA9CE50A36EF01067 /* CorePromise */, - 7379C9F2A29928ADC6CFECB478D72550 /* Support Files */, - ); - path = PromiseKit; - sourceTree = ""; - }; - 3EE19486B2CADE9B6CC692941AF9E442 /* Default */ = { - isa = PBXGroup; - children = ( - 27C72747189B551B974043E9183C55F8 /* Chameleon.h */, - F85E685C88F5CB8F7BCA127284A9E509 /* Chameleon_.h */, - 0B7472A2B767877174E2DF15ADC3E8D2 /* Chameleon_.m */, - 22E9F3CFFCE3C10469284AF35E50D597 /* ChameleonConstants.h */, - 12C54A50907C72C5231FE064E0FD5EB4 /* ChameleonConstants.m */, - DF9D43AFDB5C6F43CC096559CB2BDC2F /* ChameleonEnums.h */, - 12E16B2872D6AB2B0E579D661F4C0713 /* ChameleonMacros.h */, - 95885AB8284E99BEBECAB3C364967D0B /* NSArray+Chameleon.h */, - 0732883D1BAD351393D27D47576F1236 /* NSArray+Chameleon.m */, - 5511F623379139758DEC24633092CE01 /* UIAppearance+Swift.h */, - 69D3713C5AEBC1522AC899FB6A0C1343 /* UIAppearance+Swift.m */, - 07448843721411D105BC77181ED246C6 /* UIButton+Chameleon.h */, - E8BDECA7A6A364067A1B158BCC1F7F6E /* UIButton+Chameleon.m */, - 31E90C01CF879F35869F5A24A5B7E614 /* UIColor+Chameleon.h */, - D48805F906562E74DE449E16534E7A59 /* UIColor+Chameleon.m */, - 4FFAA2ABC7DEDD6E364ED76C0FF88AE4 /* UIColor+ChameleonPrivate.h */, - C5C8DE301EA1ECCB1AFA937EC8509470 /* UIColor+ChameleonPrivate.m */, - A00D0EED7F7F39883D5DEE42E84DCC1A /* UIImage+ChameleonPrivate.h */, - 5BA0752F8DA780992400AD21AA5512D4 /* UIImage+ChameleonPrivate.m */, - EA22307FBAF5F149F33DD2803ACF53C4 /* UILabel+Chameleon.h */, - 65FC2AD306FFBF80D008C8310A3DA2D6 /* UILabel+Chameleon.m */, - 01DA5B8F3981011693888D2B0938CA00 /* UINavigationController+Chameleon.h */, - 378C81AC447EC1755C6AE069A0AA329F /* UINavigationController+Chameleon.m */, - 5678B70F3E291B18297F8C9FAEADD654 /* UIView+ChameleonPrivate.h */, - C15D16D620E6F6BDBB420CAF601AA89C /* UIView+ChameleonPrivate.m */, - B9B5D98A29C93523516AD5AE0C1C96BE /* UIViewController+Chameleon.h */, - 5305DBA793AA7CEAEAE7B3A96CE8CB78 /* UIViewController+Chameleon.m */, - ); - name = Default; - sourceTree = ""; - }; - 438BABC960156F6C6F36033B72E37099 /* Realm */ = { - isa = PBXGroup; - children = ( - D2171D98CCD2ECA9A0FB611E88B7FC79 /* binding_callback_thread_observer.cpp */, - 9FC894FE73485EAE64E47EC2B7F525A4 /* collection_change_builder.cpp */, - 75218D68233C400F1AAC882CD516F41A /* collection_notifications.cpp */, - 58967CC9171FE7B9F5617475E12061AF /* collection_notifier.cpp */, - DA0D24FFC21F0AC3D8A2FFC3AE63EB77 /* external_commit_helper.cpp */, - D1A16DA952DC63FA903DE6D330E5015E /* index_set.cpp */, - BE7C2858E2C5A485300722303DD1784F /* keychain_helper.cpp */, - 2E9FBABB0B0834F4086D311AE5C7DB67 /* list.cpp */, - FFCE27F142F0288671E419BA079D09F5 /* list_notifier.cpp */, - 3E898E5D1BA5EA8F89D088FAF791C281 /* network_reachability_observer.cpp */, - 60DA73827B471EA78A83D59EA2F88A3A /* NSError+RLMSync.m */, - 0C1118B949F848618F8AFEFFA4DCF352 /* object.cpp */, - FA496CD547DFB293FF3FE7B78A33A15A /* object_notifier.cpp */, - 703F0CA64B244E7C39599A425A4A9A04 /* object_schema.cpp */, - CA2D7CBCBB66F21DDA384433B6F45CDE /* object_store.cpp */, - 64E06784FA3B6F6AA98F32C151BF722C /* partial_sync.cpp */, - 9E82CFD05B35717654A1CA07BA84FFE4 /* placeholder.cpp */, - D25B3E3B6981BC07B4A23CFB6C0C24FA /* primitive_list_notifier.cpp */, - C7453FB7160AE5853595FE731623E47B /* realm_coordinator.cpp */, - 5E1E1E852986BDD18DA72A5BA27E7145 /* results.cpp */, - 19267BA0CAEC6EFEDC034F76FF896C5F /* results_notifier.cpp */, - C12E8A8D7D505477165899FC9D764847 /* RLMAccessor.h */, - 15041A28BD4AF2BA8BBC0449DFE3FC55 /* RLMAccessor.mm */, - 7675A21D9CF25DEBE0C17AB10A2B06F0 /* RLMAnalytics.mm */, - 8B1E5B3FD413F33EB83E2906392EB292 /* RLMArray.mm */, - BFA052F164EA2AE7C43E2FC163568E70 /* RLMArray_Private.h */, - CAC1E1C82CC6C37C905A0336966AB1A4 /* RLMClassInfo.mm */, - B433C9505D488D3D4CCFECE91DB80379 /* RLMCollection.mm */, - 544EDF7CD4D8CAD91E9B56A6A5D08873 /* RLMCollection_Private.h */, - 59DC491546C84C6254B8D0965B77C866 /* RLMConstants.m */, - A542FB257B069D3A4C632378CC4C7D37 /* RLMJSONModels.m */, - C1E95524242BB7CF0FD435BCEE0A5D56 /* RLMListBase.h */, - BB1730835DB6F8AB2073DEF0ED68A9A0 /* RLMListBase.mm */, - F22E954A2ECB868FD5E02FAAE1878B8B /* RLMManagedArray.mm */, - 1FEAA3161C1F9C56755E502529EF7FC5 /* RLMMigration.mm */, - 5D29BE28AB8262B8B505B9098E19E55E /* RLMMigration_Private.h */, - EEB765BA5A012453CAA0814A8B7C68AD /* RLMNetworkClient.mm */, - 33CD335E9D0AEF1131817DF3B362D6A4 /* RLMObject.mm */, - 3183AF069AE0091159320866D444ACD6 /* RLMObject_Private.h */, - E103EDF631ABD695B0DEC4E9432FF54E /* RLMObjectBase.mm */, - 8B7DB1E54F31774781F5E7EA96A0E365 /* RLMObjectBase_Private.h */, - 5B564B0B062EB8F11B60E93E83E8FFF7 /* RLMObjectSchema.mm */, - F7453E0EFD2ADC36B38779BFF40F992E /* RLMObjectSchema_Private.h */, - B2DD1F797661A52FDEFF49CC71D986D2 /* RLMObjectStore.h */, - DA69AA362DC47C2FA0A3D8BA2372DDF9 /* RLMObjectStore.mm */, - DAE8F91FA9DBD119018F550096370C5E /* RLMObservation.mm */, - 072CC0EFA6553B40B3C6AD14AD95CDF5 /* RLMOptionalBase.h */, - 31237C6D89A7D53CAA2C360547EBB637 /* RLMOptionalBase.mm */, - 5B8C53A7F6723A3EAFCBB1801C1CDC42 /* RLMPredicateUtil.mm */, - E1563BB065BDFC76F0AD80345FF226A8 /* RLMProperty.mm */, - 0AC29CD8C22A2463B88B3F529DD41B08 /* RLMProperty_Private.h */, - 8BDE227456E7A4A10B5674E0F7F1E8A6 /* RLMQueryUtil.mm */, - B203F1615EE524DC61D140C4A1C4FD38 /* RLMRealm.mm */, - 7DBCC3ED273043DA153C2CB9A8D5B1D6 /* RLMRealm+Sync.mm */, - 8F6DFBD150A3B56A826609F05027EBF2 /* RLMRealm_Private.h */, - 34173751FD882FD988CB7527BF3F51F0 /* RLMRealmConfiguration.mm */, - B7AD9E3604CA8CD8FEC7FC575E261FF7 /* RLMRealmConfiguration+Sync.mm */, - D367DE8AFEB78091122B8580DF71E51F /* RLMRealmConfiguration_Private.h */, - 5022842F9E7F7976C98C10557A560F01 /* RLMRealmUtil.mm */, - 9FE7AEF7CA541FD67F39933A4390948B /* RLMResults.mm */, - 24AAE30D6056FD7D084FEF595C799173 /* RLMResults_Private.h */, - B95F64448624F99D96C4102CA1890978 /* RLMSchema.mm */, - E415DFAAD524C6807AF22864550F23CF /* RLMSchema_Private.h */, - 8ECC507E7F47E66784AAB190F66457D6 /* RLMSwiftSupport.m */, - 7C2764F649066BFC811831F350C07134 /* RLMSyncConfiguration.mm */, - 383E5AC85A03FCAAD90BBA38871A2074 /* RLMSyncConfiguration_Private.h */, - 1447015D7EE4CA9757DB258EDFEC618A /* RLMSyncCredentials.m */, - 96880D71BB718EC563DB546D8AC09B02 /* RLMSyncManager.mm */, - 89F27B0980DDE5BD783531CF77807A73 /* RLMSyncManager_Private.h */, - 813907820EE8D08F4E51858C8DF63508 /* RLMSyncPermission.mm */, - E0CB0FCCB05A3B341DB72C6184E5C97A /* RLMSyncPermissionResults.mm */, - 261972D03F90C17872EEEF9379ADB54E /* RLMSyncSession.mm */, - 7AB4EFC7D664CE1E573015CF430E9ABE /* RLMSyncSessionRefreshHandle.mm */, - E67EE91FCAF8E86F384AA8B15E9C9BFB /* RLMSyncSubscription.mm */, - 964BC0A02DE65A55B384856AD9CAC6B8 /* RLMSyncUser.mm */, - B44A73D3ECBD0AA320DFAE8729245BE0 /* RLMSyncUtil.mm */, - CDC8CF1BB201AB7E004BDC7D1A04BC88 /* RLMSyncUtil_Private.h */, - 613B41797B8589C74E3BCB0E66789F1D /* RLMThreadSafeReference.mm */, - 640A0DADA9E8195F23753A3D53B9BDE4 /* RLMUpdateChecker.mm */, - 086306D83D8C3B92325BC169A4DF6893 /* RLMUtil.mm */, - A601ACA3853459C0F40EBB0EE5E3D6DC /* schema.cpp */, - 56CC2A6A09A80F6AF6217E7CD1519A0F /* shared_realm.cpp */, - 1ED502BFD549FB181F163263B093CAF0 /* sync_config.cpp */, - 37BD44BE580F43C7D3714FD1B0663CC1 /* sync_file.cpp */, - 2E819A65E8B105C06E39112892043DEC /* sync_manager.cpp */, - EC682AFA59C8C7BD40AB4B9B6D110FF2 /* sync_metadata.cpp */, - BD0C89D0D70A5C5C2AC6954D4AF09C24 /* sync_permission.cpp */, - 9A21D65008049DD151689EF9F5395381 /* sync_session.cpp */, - 15B72D95F92B0B512C075618A1B39BC2 /* sync_user.cpp */, - 8B39D3D8B35335FA45948869AE8CC032 /* system_configuration.cpp */, - 8C86EBB0032823748C3C73ECF340FDC1 /* thread_safe_reference.cpp */, - E31678C76540C57F6A5E6F5B097EAB69 /* transact_log_handler.cpp */, - 252FD7EEAEA7D49BB483B864311F6840 /* uuid.cpp */, - 60B34087ADF9E2187A1C509EB443DC08 /* weak_realm_notifier.cpp */, - A4F2EB422F562B28D5B39ECF7560BF14 /* work_queue.cpp */, - 5FF271350056D19A65C510BBAD344C09 /* Frameworks */, - 2B4579290E5E69F11A2F9AB88D04FFBF /* Headers */, - 74A8A73400D68FB8D3917084190F3EEB /* Support Files */, - ); - path = Realm; - sourceTree = ""; - }; - 4AB3DCA2DEFBF2951A3974C8D085711C /* FirebaseInstanceID */ = { - isa = PBXGroup; - children = ( - 8BA5BE0A699C5919292BAA2B0A6284EC /* Frameworks */, - ); - path = FirebaseInstanceID; - sourceTree = ""; - }; - 4C4671A9D3032543495B947003FFC2ED /* FirebaseAuth */ = { - isa = PBXGroup; - children = ( - 14849BA50E7E3EEA53D6C3ED20626839 /* FIRActionCodeSettings.h */, - 9876E90F3950A1B691CE092868255CD8 /* FIRActionCodeSettings.m */, - F587118FCAFF6DA5E474BA0F9AABE6D6 /* FIRAdditionalUserInfo.h */, - 655E1781A3BA59C3F210EA07B5C20FC0 /* FIRAdditionalUserInfo.m */, - CA5424BB0A8A8591873A237C693AD88B /* FIRAdditionalUserInfo_Internal.h */, - B06A012AB01EF015C4C683E29EB9B428 /* FIRAuth.h */, - 4FAABD62DEB63315D1257B7D6CFEE2F8 /* FIRAuth.m */, - 5B889265B7A23CC582794297E02FCC5E /* FIRAuth_Internal.h */, - A7FD691EF6249ED497DCF7CBC2F87206 /* FIRAuthAPNSToken.h */, - 3D025D271898248FCA3ED5E9FB44D563 /* FIRAuthAPNSToken.m */, - 6BD959D32405E363EE956AD0EE9B40D2 /* FIRAuthAPNSTokenManager.h */, - DADF51336A5F9C36ADC982EC9D1648C9 /* FIRAuthAPNSTokenManager.m */, - F5A1BAE0B8B6A6A7EA5E524A5029F574 /* FIRAuthAPNSTokenType.h */, - B54CEA68DC92AA00DD74F23E3F23B4C5 /* FIRAuthAppCredential.h */, - BC3A63432CA5505962BAB132A7847305 /* FIRAuthAppCredential.m */, - BECC6E463ED9B84E1B747216E15C7707 /* FIRAuthAppCredentialManager.h */, - 467113AD6072BC4157BB38F53BB959C9 /* FIRAuthAppCredentialManager.m */, - 0443E9ED4AFAB4239674A2E3FB46F5C2 /* FIRAuthAppDelegateProxy.h */, - 7EC13AE3E7408848C1905A3C3DE6D75B /* FIRAuthAppDelegateProxy.m */, - B301C59E5D1D1AA6BBFDB80E69FBA831 /* FIRAuthBackend.h */, - 01EE60DEEA4F6E9A3C2E16BB7D3E538A /* FIRAuthBackend.m */, - 0DF6C1FC347D897F3D7EB7580EDDD44C /* FIRAuthCredential.h */, - 127740F1F2DB220B999CC652BA862045 /* FIRAuthCredential.m */, - F136DFF42C239BB88A3F429C6CDA4D16 /* FIRAuthCredential_Internal.h */, - B7044D55D7E19AFD3900DABD500C2BAB /* FIRAuthDataResult.h */, - 99FFFBFE2E49EE854353112FEFE653EC /* FIRAuthDataResult.m */, - 767E4C2BF6AE88347EDE51469D7B2069 /* FIRAuthDataResult_Internal.h */, - 9E43B7E1F2579EF844CD943505C28416 /* FIRAuthDefaultUIDelegate.h */, - B66D8D3A8424D1CFCB9075D328170260 /* FIRAuthDefaultUIDelegate.m */, - 88EA2512216314AF93669CDC3C0BCC8B /* FIRAuthDispatcher.h */, - 073A52E2C21FF1D62C7F62E22229E27D /* FIRAuthDispatcher.m */, - B95A96E274C3BEF90BDDC1050D4B8846 /* FIRAuthErrors.h */, - 75BD0946CE5246864866AA4AC0F912C1 /* FIRAuthErrorUtils.h */, - C2E64176AF730FA535211FD7CC87197F /* FIRAuthErrorUtils.m */, - 003BEE696E52AC5C0543F4C821DC9451 /* FIRAuthExceptionUtils.h */, - 45900142225A457954B103E20C8837B1 /* FIRAuthExceptionUtils.m */, - BC2097F01236A7B73A9D900E608AFE3A /* FIRAuthGlobalWorkQueue.h */, - 26CD5B1D919107654A24937186DBB3E7 /* FIRAuthGlobalWorkQueue.m */, - 308234130A4AF00BC7A2DE4461215CB0 /* FIRAuthInternalErrors.h */, - 25AF23E210F2B16DE227CBE1D1B7B7AF /* FIRAuthKeychain.h */, - 5EC9D72DA4D993BA4FA7462F788E808F /* FIRAuthKeychain.m */, - 29DABDAF6F9E0407544E8FD4EA9322A5 /* FIRAuthNotificationManager.h */, - EE6E158F81B0430F1C5FE2146F947E38 /* FIRAuthNotificationManager.m */, - 3894693FC755AD6DDCA6821228CF105F /* FIRAuthOperationType.h */, - 060B27D9EB1F50D6412B276C2BC4BFC2 /* FIRAuthProvider.m */, - 217D04B0EB91FC4454C1F2756B666845 /* FIRAuthRequestConfiguration.h */, - 2180E395070CBCD3CC25B3C56661CD6A /* FIRAuthRequestConfiguration.m */, - 6C0166981D977D45B84F88D65A9AC3BE /* FIRAuthRPCRequest.h */, - 45A2BF0065145556D3A453FA0506E67F /* FIRAuthRPCResponse.h */, - DAD06B5A3CCDDA46033CB96120CF513B /* FIRAuthSerialTaskQueue.h */, - 3615F35A23B930ABFA9ED2322FE545A9 /* FIRAuthSerialTaskQueue.m */, - 9075980E4D0116EE5A04C9D0DB658EB7 /* FIRAuthSettings.h */, - 85B9D47CA185751D2CC8D7B324EB7EEF /* FIRAuthSettings.m */, - 2093D30F15C065748FABFF4BA05E552D /* FIRAuthTokenResult.h */, - FB8B5C694769C60E21013C8EA0EF9ED2 /* FIRAuthTokenResult.m */, - 3E37786C25F05296621C72208689D84C /* FIRAuthTokenResult_Internal.h */, - 04F93951C862B1D6F50DD9F2F2D1C76D /* FIRAuthUIDelegate.h */, - B245149225ADBB6B6CB178D8F021E352 /* FIRAuthURLPresenter.h */, - 8836D06E2AC67B606D19835C0351C275 /* FIRAuthURLPresenter.m */, - 1BA4A4DAFD5B40883118575B98D908C3 /* FIRAuthUserDefaultsStorage.h */, - E5BAFCB8CC217BA94F66BDDB8BC61AC4 /* FIRAuthUserDefaultsStorage.m */, - B11C60C247367717B5A05C03B30BF3A2 /* FIRAuthWebUtils.h */, - 460EB96A504341E7527BEDAA1FEDEFA7 /* FIRAuthWebUtils.m */, - A25E8BC716B7E4643F55FCF77E563DCD /* FIRAuthWebView.h */, - 40CFA3DB2710C9150755686D9980A781 /* FIRAuthWebView.m */, - BA03F2D46A4EBDF1B8BD831A98384534 /* FIRAuthWebViewController.h */, - B51C7C857E5345B5976378CFA7B010B2 /* FIRAuthWebViewController.m */, - EC0EF9BA3D9183E315DD637B783F44C1 /* FIRCreateAuthURIRequest.h */, - E600ACAE0B9220663CE65B77A1CC4B26 /* FIRCreateAuthURIRequest.m */, - 5B351A95EA8BF4F4489CDDF15D468BAA /* FIRCreateAuthURIResponse.h */, - 273F89EF5E84A25EFCAD7E480D899271 /* FIRCreateAuthURIResponse.m */, - B4F1819FC5E0AD0A7DE0DB9A77E2F1A3 /* FIRDeleteAccountRequest.h */, - 67F24943D62E8185F12071A5C28EFE21 /* FIRDeleteAccountRequest.m */, - 515315EF76AAE8BBC64BA7F9C3CD76A8 /* FIRDeleteAccountResponse.h */, - 881B396F293B5055277292EEF4F7F1DA /* FIRDeleteAccountResponse.m */, - 82839582921198FABDE00052D66E2F0C /* FirebaseAuth.h */, - 5F8918111252A1691EBEF519B9C8DDE6 /* FirebaseAuthVersion.h */, - A3B07C1D3640F22A48DEC343240B8892 /* FirebaseAuthVersion.m */, - 3D42BE6FB6E20A86A3704AEA15994D4B /* FIREmailAuthProvider.h */, - 9C2DA7600F0669E802B1DCAC3D7C2D8D /* FIREmailAuthProvider.m */, - D96141A1F8F122322F0FC36C9F9EE9BE /* FIREmailLinkSignInRequest.h */, - DA01AC2A148B9B2D04DBB71330093C59 /* FIREmailLinkSignInRequest.m */, - 706AFBECC91447F3B97ED9DA2ED0F149 /* FIREmailLinkSignInResponse.h */, - 5A0B03BB5C1649C926A02C2AA2FD4A29 /* FIREmailLinkSignInResponse.m */, - F55B226D0D00EFA040C976DF49045D23 /* FIREmailPasswordAuthCredential.h */, - 146469777BFD805C29A1047E56F16C6C /* FIREmailPasswordAuthCredential.m */, - C3C9964FDC6F093FA81BF0A7EF0A1334 /* FIRFacebookAuthCredential.h */, - 9CEF3BA59ED9C27B0B1653ECD59C3AA5 /* FIRFacebookAuthCredential.m */, - BE1F6AA86DAF33BFE79ACA8DD4251DCC /* FIRFacebookAuthProvider.h */, - 981B0AE384FEBF7B3CA6F32DC513A6D7 /* FIRFacebookAuthProvider.m */, - 4F8D7C8A6C66377EB7E20B0EC617C56F /* FIRGetAccountInfoRequest.h */, - 2A8B461A3C236049243EE3D07036E86F /* FIRGetAccountInfoRequest.m */, - C0CAAE3463D64322750A5AFF47E55937 /* FIRGetAccountInfoResponse.h */, - 06DF0317E615FE43980DDE8915C60FBB /* FIRGetAccountInfoResponse.m */, - 50921741ADBAE90702DAABF59E4FEE15 /* FIRGetOOBConfirmationCodeRequest.h */, - 47E0583817CDAF3174410BE29308E175 /* FIRGetOOBConfirmationCodeRequest.m */, - 7031C9AC62B88E64CD05DDAFD88DAB98 /* FIRGetOOBConfirmationCodeResponse.h */, - 903B2DFB2B75E07AD51566DB58E59C83 /* FIRGetOOBConfirmationCodeResponse.m */, - FD4ADAA2A64DF5BD1BDA33ABED0DA53E /* FIRGetProjectConfigRequest.h */, - 9F4BE791E1BAFA2B52E47778D476C11D /* FIRGetProjectConfigRequest.m */, - 850B48724DDD9CA3ADE704FA62D5EA5A /* FIRGetProjectConfigResponse.h */, - B0E4455DE9644DF9B4FCC7A64C619391 /* FIRGetProjectConfigResponse.m */, - 3FE630FD8A52F7623FB9F430DFE83D2F /* FIRGitHubAuthCredential.h */, - 1C8C5C0126C82AA5F08F73690A1D9A7D /* FIRGitHubAuthCredential.m */, - CF4C758E3B163A2972EC9E0647EADF33 /* FIRGitHubAuthProvider.h */, - D6793BC75E6E62410B088D642B468B90 /* FIRGitHubAuthProvider.m */, - 4DADFF37B1C1CC93D9F77D3FF6335047 /* FIRGoogleAuthCredential.h */, - 35343AFE86D3B019B15E621A0AE69B29 /* FIRGoogleAuthCredential.m */, - 8C5F1BDBD937E21E2A932593664BC2E4 /* FIRGoogleAuthProvider.h */, - 34E21A819095A6B738F359A7AED31A05 /* FIRGoogleAuthProvider.m */, - 7524CFCF31C48861F456C88473538A4A /* FIRIdentityToolkitRequest.h */, - EE74E6FA4B872279CBCB62D7BEF31760 /* FIRIdentityToolkitRequest.m */, - 391DE7AC210A9CA140C59DA7B60C4FCD /* FIROAuthCredential.h */, - 7E904356BBD7A751A2C39DFF6784C13D /* FIROAuthCredential.m */, - F76D46FDE19DBAEBCBE30A226A0E30DE /* FIROAuthProvider.h */, - CEC5C7A6F37609623B65E1BB735638A5 /* FIROAuthProvider.m */, - 261DFEBC7EA69BAF5CC8E2FEA7E3F02E /* FIRPhoneAuthCredential.h */, - 9D4BB2F4FF61EF66313B797DD844EFF0 /* FIRPhoneAuthCredential.m */, - 1DB49A3919E5A65C4E6547F44C30A163 /* FIRPhoneAuthCredential_Internal.h */, - 9D9A4FAEC71E0B218A0C531F0D4D4D1B /* FIRPhoneAuthProvider.h */, - 9603113FBB4115B156F91010FA140D23 /* FIRPhoneAuthProvider.m */, - 22F12DE8D1F2C8DA2A503F28F6011764 /* FIRResetPasswordRequest.h */, - 797648B1E0D3A6066F994556F924BF1E /* FIRResetPasswordRequest.m */, - BB01A195A8A6F9F055491CE90A3B105C /* FIRResetPasswordResponse.h */, - F3D138B8787D82CFEF0F467425F0C0A7 /* FIRResetPasswordResponse.m */, - 68E5EBF90FA9F0C98408EF13E485DFBD /* FIRSecureTokenRequest.h */, - 87E1BC974D69E0F783517F2A463676DD /* FIRSecureTokenRequest.m */, - A0313D151CF5AED9251675316363A80C /* FIRSecureTokenResponse.h */, - AAB5FBD89A9E56002ACAC938354F4CDB /* FIRSecureTokenResponse.m */, - 4D259C8603FA80BC7A1615C037237352 /* FIRSecureTokenService.h */, - 320406F57594C563FC22B268CF497450 /* FIRSecureTokenService.m */, - 1F1AEBAFB012D313D7298940982F4182 /* FIRSendVerificationCodeRequest.h */, - 0FF11FA13FFFDA7E56941C07B0E9328C /* FIRSendVerificationCodeRequest.m */, - EE9C2A8733A9306806AB192FE8737108 /* FIRSendVerificationCodeResponse.h */, - 58218552544AB7AF9534B2E2095A553A /* FIRSendVerificationCodeResponse.m */, - 52C514872DADF3C31F8DE496790DDF8D /* FIRSetAccountInfoRequest.h */, - C5DC03FBC0723304975A16A3CEC0A2A1 /* FIRSetAccountInfoRequest.m */, - 6993E8A72A6CA0442ADF959C87569226 /* FIRSetAccountInfoResponse.h */, - 91FA7AE6B4AA6D2454F4599FC29CBE8A /* FIRSetAccountInfoResponse.m */, - E807046A165001F1535378F0F5B118D0 /* FIRSignUpNewUserRequest.h */, - 3B6B274BA55924A32D1099D55AE060EC /* FIRSignUpNewUserRequest.m */, - 5741B681D7961787830A7178DC5BE854 /* FIRSignUpNewUserResponse.h */, - B60E1CB843A5DF4FB249D7914B75EA38 /* FIRSignUpNewUserResponse.m */, - 211FCA1FFC4C77EA93B530870B20B073 /* FIRTwitterAuthCredential.h */, - 0C775F7136F0DE7AC48F0E20DC951818 /* FIRTwitterAuthCredential.m */, - 100FF94E3015593CECC1255B3F665E35 /* FIRTwitterAuthProvider.h */, - 8B1BC4E4C1A06AD1BE9AC63866DE44F3 /* FIRTwitterAuthProvider.m */, - 77A88B654376481EF3246A8AA3E83B5B /* FIRUser.h */, - 193C6C22EAE9A101142E050A6C97E5D2 /* FIRUser.m */, - 59A4076E806FD4F791424B8134D10112 /* FIRUser_Internal.h */, - 739EDA6BA880C374271A5FFD1F4827C7 /* FIRUserInfo.h */, - 466FEFCBFC76BDE5BC10B8EC12AD813E /* FIRUserInfoImpl.h */, - 3B26CD3AE15CAFA6F3AA2D461C1A96F4 /* FIRUserInfoImpl.m */, - 8A6F67245C5EF7F78E4682A85FC6A849 /* FIRUserMetadata.h */, - 3E67C6A3497AB7667575DD1278AEC1BD /* FIRUserMetadata.m */, - 26A2509C55277C92F9535925A9167506 /* FIRUserMetadata_Internal.h */, - 5BFC99100C7B07A11CD15F4740CD7102 /* FIRVerifyAssertionRequest.h */, - 5CAB71AB91FBC9374550D0311AA8CADB /* FIRVerifyAssertionRequest.m */, - F47CC06334DD7C078969F817BC4E3238 /* FIRVerifyAssertionResponse.h */, - CB22F3A2AA3E9173F9190650F8D204E9 /* FIRVerifyAssertionResponse.m */, - 848D29C5FC6A7B0FFDC1DB2DFCE7BEBC /* FIRVerifyClientRequest.h */, - F20440FC5E61BDEE9A09B544C5974154 /* FIRVerifyClientRequest.m */, - A797C8494029C82BB050553DAF5EBE63 /* FIRVerifyClientResponse.h */, - 75ABBAC607546BF05C94D2EA117EFEE8 /* FIRVerifyClientResponse.m */, - 34E669C7C4D8508C8254BE9C56063841 /* FIRVerifyCustomTokenRequest.h */, - 079163C3758BB988A92C22F1BC465BD3 /* FIRVerifyCustomTokenRequest.m */, - 01DE3250A0CAB753DCFBDBB0C78236BF /* FIRVerifyCustomTokenResponse.h */, - 2476127FCECFE8BAF92977DBA8A2A261 /* FIRVerifyCustomTokenResponse.m */, - B176FCF2140A3B4F0B5A6F74F3E6FABD /* FIRVerifyPasswordRequest.h */, - CE44C726A617D98DE6F406C09C971EB4 /* FIRVerifyPasswordRequest.m */, - E1EAE2D6A9FA32C97243022C45926B2A /* FIRVerifyPasswordResponse.h */, - 534B4638DFA317572A39BB56A983EA7E /* FIRVerifyPasswordResponse.m */, - 189A223201EBFFEBE5AB937C2B736211 /* FIRVerifyPhoneNumberRequest.h */, - AB14DA082BF29AB88A322357A56BFD5E /* FIRVerifyPhoneNumberRequest.m */, - E312064F9390389ECFA774881A27C239 /* FIRVerifyPhoneNumberResponse.h */, - 528BC4AA27400716710899BC26508C5A /* FIRVerifyPhoneNumberResponse.m */, - AF108A81C021BE19C8E873056F584BFC /* Support Files */, - ); - path = FirebaseAuth; - sourceTree = ""; - }; - 4C7661379170F899047005E369170EF9 /* Products */ = { - isa = PBXGroup; - children = ( - 0609AE291B884541C6DF20C135E2A3FB /* Alamofire.framework */, - B537F31923042528C00C3F43D4E49F23 /* ChameleonFramework.framework */, - AC4B60D6ACFF487CD575866C2C63AA85 /* FirebaseAuth.framework */, - DCECEAA4AA603F6A9E0920E53DDDEC2E /* FirebaseCore.framework */, - CBA3F59FE4E29C803BEE9980DEBED39F /* FirebaseDatabase.framework */, - 41704C34A45976B3B0D3501C353F987E /* GoogleToolboxForMac.framework */, - CF8B0E2EDA2689C6BC746A629F7BA8C3 /* GTMSessionFetcher.framework */, - 2913119A759FDFBDC6F9FC617890BE97 /* Kingfisher.framework */, - 735BB3DB964C42BE707ED69E758226F6 /* leveldb.framework */, - 813C855CBF32B7018B96D90D50ACDC75 /* nanopb.framework */, - 4F84176FB531E6C5C208B71882DF37C2 /* Pods_pocloud.framework */, - 721BDC7FEE69CCF878D29D3396CD4BBB /* PromiseKit.framework */, - 19D823D8734EB75ED01B5866FCC79A2D /* Realm.framework */, - D0F231F015E13183195E41563BE8291D /* RealmSwift.framework */, - 8711A6C76DC7471688C3AA1DAA4567E2 /* SideMenu.framework */, - 87A9164E5451984017B164DE6217DE77 /* SVProgressHUD.framework */, - 3694A4FAEFDB9C1ADCE833F4D9151E11 /* SwiftChart.framework */, - AD098846A244706B0CA5A40F14E3FA6E /* SwiftyJSON.framework */, - ); - name = Products; - sourceTree = ""; - }; - 54E29F21FC925F93A30785D9D746DC40 /* encode */ = { + 2F811E5E9F72F8F1AB302CCA76BCC703 /* encode */ = { isa = PBXGroup; children = ( ); name = encode; sourceTree = ""; }; - 5A3A0EC9465729E56E5655B8126AD3B7 /* Support Files */ = { + 2F841E8770F12B3C987A86BC15BD5599 /* Support Files */ = { isa = PBXGroup; children = ( - 344282A34D78727F32CD1188E0A98BD4 /* Info.plist */, - EBD02801F0F79D84CB2A96A4C8461D5F /* SVProgressHUD.modulemap */, - 69979796FD401B825B73A8FBF40D7E7C /* SVProgressHUD.xcconfig */, - F37AA9A32DD9CCBC3CDCFF34D0CDDBCC /* SVProgressHUD-dummy.m */, - 88E580127B8AC3BCDE2FF1A04185CA79 /* SVProgressHUD-prefix.pch */, - 4AA5D6181A6B4867451ED54A8080BA9B /* SVProgressHUD-umbrella.h */, + A9A72991FF327ABE7B0FAF46A686192E /* FirebaseAuth.modulemap */, + 6800E5F589466FF8EE866AD17818CFF1 /* FirebaseAuth.xcconfig */, + 0496DEE60F52D897ACBCC688A9373F16 /* FirebaseAuth-dummy.m */, + 9DAD8E2E266E90C1F2AFE8D84149897E /* FirebaseAuth-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/SVProgressHUD"; + path = "../Target Support Files/FirebaseAuth"; sourceTree = ""; }; - 5FF271350056D19A65C510BBAD344C09 /* Frameworks */ = { + 379CE6FA6727966123C8B01E0D5B4965 /* Pods */ = { isa = PBXGroup; children = ( - 649842BF1C52EF2A7DB0CD4E9A4002E7 /* librealmcore-ios.a */, + 031106DC856E68D11A3BAC52AC2C19D1 /* Alamofire */, + 7DF30F31D5CE0E2CD4E81817A1B09C5E /* ChameleonFramework */, + 7DA6082A2AA272602BEBBCF10BD532AE /* Charts */, + 919DEE41E11C318AE40264FEEB26FA30 /* Firebase */, + BA889D700DA4623744A3CF7DF624D19A /* FirebaseAnalytics */, + A2C7D9242635C7A065CC62F3BCBA1E84 /* FirebaseAuth */, + F816893D3B59F53EA4332D1BF4176816 /* FirebaseCore */, + D4FAF89DBDD01C51F843FE2A2C7FE9DC /* FirebaseDatabase */, + D1749E0675B64E1435ED28DB7C532D66 /* FirebaseInstanceID */, + 8619BF6622C696789194DFF0AA39687C /* GoogleToolboxForMac */, + 122570D05366DC078EA5D15878E8A808 /* GTMSessionFetcher */, + 930ADB49744E9E084214F6CAE8D04E45 /* Kingfisher */, + 7B463755804BFEF896ED11CD0E9C1CA3 /* leveldb-library */, + 3B9DA4F0E8C5EDFF212D341151A82978 /* nanopb */, + B40AE397F7446FD8D0E463D0751F0F18 /* PromiseKit */, + DEC8A82416B03390C3012873EA7D5A87 /* Realm */, + 70DC23DF886EC8E86AE21E62EC6F2D5F /* RealmSwift */, + 96170E4082B5334DCE9CEFB5D8263DFD /* SideMenu */, + 8B7BF85F6C0B4C9DC69C7ADD8688AB67 /* SVProgressHUD */, + 9F0495007B4C8EFA57C745A859867A67 /* SwiftChart */, + ABE6742795084ABCADF54913BD1E705F /* SwiftyJSON */, ); - name = Frameworks; + name = Pods; + sourceTree = ""; + }; + 37C8793ED53CFB04BC41A5B79BF326BC /* Support Files */ = { + isa = PBXGroup; + children = ( + C068405762506B5CC03A4FE0A0B7E874 /* GTMSessionFetcher.modulemap */, + 34FD2D68E9188EB20D44ABB5C0544791 /* GTMSessionFetcher.xcconfig */, + BFE788C6F697346F9CD4654D4BFB68B5 /* GTMSessionFetcher-dummy.m */, + 6DC531CF5142D46B98D7FC287E601180 /* GTMSessionFetcher-prefix.pch */, + D155E6A282321B1570EDD16ED9A3FA96 /* GTMSessionFetcher-umbrella.h */, + F0D75C0BFFEAD73C8EBE9C7C034A533A /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/GTMSessionFetcher"; + sourceTree = ""; + }; + 3B9DA4F0E8C5EDFF212D341151A82978 /* nanopb */ = { + isa = PBXGroup; + children = ( + 63C90892838E596442C01C439B319CB3 /* pb.h */, + 9248A90B24912C0222CB8033CA987645 /* pb_common.c */, + 676D729DBBEB993269FF14363C11A550 /* pb_common.h */, + EB15FCB45BA90AB127CACB1192603374 /* pb_decode.c */, + 9C7A8524355BA95D055AD0C1BE8A739B /* pb_decode.h */, + 88061D9A026D1728AF0FEC00E1BEA2BA /* pb_encode.c */, + A06B5ECFAC0638767A41E1A95556FB28 /* pb_encode.h */, + E7B1399EA4449E2C2986929774D659E1 /* decode */, + 2F811E5E9F72F8F1AB302CCA76BCC703 /* encode */, + 54F75EDCC93B0C44A1EAD954CA13B89E /* Support Files */, + ); + path = nanopb; + sourceTree = ""; + }; + 54F75EDCC93B0C44A1EAD954CA13B89E /* Support Files */ = { + isa = PBXGroup; + children = ( + 66DFE6FEDE19A7F3DE3737F583C57084 /* Info.plist */, + CEDE7A287C0E39D0F1B1ABFD2977430C /* nanopb.modulemap */, + 04BE9ADFA2D956332AAB30051EBD7485 /* nanopb.xcconfig */, + DA6E1E53E3A26C9A84E82C9866A8CD1B /* nanopb-dummy.m */, + C2D9F210D521E9D56BACC2376227666D /* nanopb-prefix.pch */, + EC3CCB389D940FD240C6627A2ABE0ECA /* nanopb-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/nanopb"; + sourceTree = ""; + }; + 5AF5CD3DF89581F712669E0CFBF3E158 /* CorePromise */ = { + isa = PBXGroup; + children = ( + 22F6A6E6A8625C1034D78A2DD20B6BA0 /* after.m */, + 9315BCEE77E17FC2A4B79EACFF40998A /* after.swift */, + D08AD131AF3ECD12EF2CD53BACDB1040 /* AnyPromise.h */, + 6502C8871A6DABC7252760716E08A60F /* AnyPromise.m */, + 16244595C10AC1B8927F780CCE468E60 /* AnyPromise.swift */, + D3DA0CA71CD6ED19EB97B27C1B3504ED /* Box.swift */, + DE7EF2CE9127FE3E0A845CA0A0CA80C6 /* Catchable.swift */, + 560F3F9733DA7864B7349F6BC6B51708 /* Configuration.swift */, + 99FF0EF905832C028A18D2964EE95D82 /* CustomStringConvertible.swift */, + A233330DD411599D9A08537F900AE794 /* Deprecations.swift */, + 17E7718BC15B2B522A1B2F3670E50CBC /* dispatch_promise.m */, + B039F44ABB7A92B17AE56C91A8D1331A /* Error.swift */, + BF74632840B548DF965BA2E95E91C74E /* firstly.swift */, + C053FF3799C9807E0F22F3EC445CF59B /* fwd.h */, + F76D84C63622221E6419BA6E16155D78 /* Guarantee.swift */, + 7AFC2C32F983659FFE3698E948C6334D /* hang.m */, + 394217BF43925049167B82BEE13124F6 /* hang.swift */, + 00EFEEE85CB95D18DC489063B2FD374B /* join.m */, + D183FE601881EA3EA1723A6A60827856 /* Promise.swift */, + 4D00AF8213700D98D74DCF2FD59D8640 /* PromiseKit.h */, + 990623AED0F8E420338425030236989B /* race.m */, + 14B538A92666A26E2B3A1C7304517568 /* race.swift */, + 64E114839F523B12414E98D6DAD4E252 /* Resolver.swift */, + 999BB6545C2BD4474217011F2EC71906 /* Thenable.swift */, + D71240A2D4877ACF87999159339AC662 /* when.m */, + 50A0B7E87F87386642B81876C540525A /* when.swift */, + ); + name = CorePromise; + sourceTree = ""; + }; + 63CE10A7EC4A89499B14DF9F054936E2 /* Support Files */ = { + isa = PBXGroup; + children = ( + C494F60AEE91A7DA569623936AE14527 /* Info.plist */, + 3B9555B121522E2F0E813F56C059928C /* Realm.modulemap */, + 7944BA997F53E27F2D1F54CA2F25496E /* Realm.xcconfig */, + 053BC13DDD4C01F359911BEDFFCB1818 /* Realm-dummy.m */, + A52CC37534DBFEC3E431EC6D3247E9C5 /* Realm-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Realm"; sourceTree = ""; }; 644D1183A0EAD6A30C1AC9369115D8B3 /* Targets Support Files */ = { @@ -2867,228 +2877,637 @@ name = "Targets Support Files"; sourceTree = ""; }; - 6950AEA311B700F097ED8BBA393324CC /* Frameworks */ = { + 70DC23DF886EC8E86AE21E62EC6F2D5F /* RealmSwift */ = { isa = PBXGroup; children = ( - 6F8AC2E4B435695A5EFDD2C14994B1EA /* FirebaseAnalytics.framework */, - 60A1D7A91801C819081DFD89E4232EB0 /* FirebaseCoreDiagnostics.framework */, - F1FD6D374F4DC01D8278EEC2DF199B58 /* FirebaseNanoPB.framework */, + D091BB87643304B1034E9FF5791C58BD /* Aliases.swift */, + B0B93997F1E4DB619D6BB53AAD7997C3 /* Error.swift */, + EFDE506A4C3B1F7E3D9E24E858881233 /* LinkingObjects.swift */, + AA8D7CBB785F455D6E2B1C535A2C2AA3 /* List.swift */, + 951CC80F9BAF5CFF9FF40B6834B47C6C /* Migration.swift */, + 201A7B45C4CCEE36C1DB90B0119E7F7D /* Object.swift */, + C23566CAE8356539B30B85A61B0F729D /* ObjectiveCSupport.swift */, + 384BF7ADE20F623BB87B6771A9E0159E /* ObjectSchema.swift */, + D367F27D2C99A4A72B21665841BB1F78 /* Optional.swift */, + 3319C402AAC42193BCF9797D4E79044F /* Property.swift */, + 51C371F5521B2BCF67AC0D24836A6CC7 /* Realm.swift */, + B030844EAC021F2346F11D17295771C6 /* RealmCollection.swift */, + 0EAF6868DDC7C08B7D20512D22244A9B /* RealmConfiguration.swift */, + 2A38E7D7C3143EA1BC1A47DB34190AFA /* Results.swift */, + 4DEB23A6639EA6ED44783EA745FFFDA4 /* Schema.swift */, + 7EE3F1520FA3FB9C749D850C7E2B520B /* SortDescriptor.swift */, + D86133D9C0631D471E52329FBA4050FF /* SwiftVersion.swift */, + 2EE91D7B97587454F8A81B6DCE1D0914 /* Sync.swift */, + 9B950344BA8FC126A292D3CA789AF2C2 /* ThreadSafeReference.swift */, + 90F3F298EC4F08FC7B7656C36536C85C /* Util.swift */, + FE09A2498D53146057CAEB3721C6A030 /* Support Files */, ); - name = Frameworks; + path = RealmSwift; sourceTree = ""; }; - 698E442A89B74629E231AF6E34F08677 /* Support Files */ = { + 736A6E26405DD310CB88A5F94FDCAB80 /* Alamofire */ = { isa = PBXGroup; children = ( - ADA6729EB237AD14B790A81F78DA5B01 /* FirebaseCore.modulemap */, - E30E2267F1E9274C87E8D4A09F0CABD0 /* FirebaseCore.xcconfig */, - CD0E05902763B9243D41CA67C83696E1 /* FirebaseCore-dummy.m */, - 77557DD69A4D0C3139C6B340667495AC /* FirebaseCore-umbrella.h */, + 02AD01C63ECA2BE2D0D23054BFF0C45A /* Alamofire+Promise.swift */, ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCore"; + name = Alamofire; sourceTree = ""; }; - 7379C9F2A29928ADC6CFECB478D72550 /* Support Files */ = { + 79B03A7C8E47032458A5A9CF12443568 /* Core */ = { isa = PBXGroup; children = ( - AFE022C681FAE209955B15EC76C4B6FB /* Info.plist */, - 8DEB0049DCC0A568FB706C16B0B04B15 /* PromiseKit.modulemap */, - 5AC850C12D346539C85F42002FF892CC /* PromiseKit.xcconfig */, - 83CD4E6B1ED7B301D58E21CE221CDB01 /* PromiseKit-dummy.m */, - 05E821CB1FD3B7617B1747440CAB5E23 /* PromiseKit-prefix.pch */, - 4173B25E8676D5EAA0F87AC0ED739271 /* PromiseKit-umbrella.h */, + C65EC6F0455439F1FCD49C7E81F3DDAC /* AnimatedMoveViewJob.swift */, + 190D77825220692FFEDBABDA8396830D /* AnimatedViewPortJob.swift */, + AF8445119CC11E5FC26985FC948F5A57 /* AnimatedZoomViewJob.swift */, + 05A43BADBAE486962B7CF5BB0C747F81 /* Animator.swift */, + 57CF61C6EBE6F957C0A6AA2410460547 /* AxisBase.swift */, + 2FF1EA91EB07C651A380A1E0ECAAA4BE /* AxisRendererBase.swift */, + C6D19710C58514EBABFB43CD9AB95BAC /* BarChartData.swift */, + 7BAEAFEC92571D92EF4484705568BA63 /* BarChartDataEntry.swift */, + 038FC2F39E49914CC7AC3FF9A6AAE199 /* BarChartDataProvider.swift */, + C2985ED25438C1F2BE7A51A8BF689F9F /* BarChartDataSet.swift */, + 177725A426DFCAC2B5A1FCFC07B02D26 /* BarChartRenderer.swift */, + 15254BA3250B5723FF8F2252C96E4F9A /* BarChartView.swift */, + A9E9B744D802678233D63BACD6A1D4DA /* BarHighlighter.swift */, + 031086F2CEE1F3707ED06FED89720174 /* BarLineChartViewBase.swift */, + EED7927D2D435154DAF3FC7631FBB480 /* BarLineScatterCandleBubbleChartData.swift */, + 15DBAC1E19A43D6D54BD8C81A55585E8 /* BarLineScatterCandleBubbleChartDataProvider.swift */, + 56004FB2FD2A8850B62F9D65CD69A05B /* BarLineScatterCandleBubbleChartDataSet.swift */, + 91B4EA3280F40FE0AB0FBF167DFE5697 /* BarLineScatterCandleBubbleRenderer.swift */, + 315C7FDA3CA5D1664929CEA6E882ADCA /* BubbleChartData.swift */, + 26BD96A6922E4DCAD8D864596F9E81C6 /* BubbleChartDataEntry.swift */, + 491CFD164F40E413FFC753B87C65668E /* BubbleChartDataProvider.swift */, + 81225CCEF8D97A19F315501E94968B16 /* BubbleChartDataSet.swift */, + 4EB559CD2A63769030727E0102F5F520 /* BubbleChartRenderer.swift */, + 041F6190E6D9A5D5C2848FD4405DACEB /* BubbleChartView.swift */, + 20A50F221F900E02D2064844A565AB7A /* CandleChartData.swift */, + 68D8A82480667587B7F33CE189E5EC2A /* CandleChartDataEntry.swift */, + B011795B453294FE3F74A08803B22534 /* CandleChartDataProvider.swift */, + E8EE02BFED580BD90EE81C76494401DE /* CandleChartDataSet.swift */, + 3121C1AA2669BA601A1F89BBEC089E48 /* CandleStickChartRenderer.swift */, + 5BEE5354F319A46335D471652FD9FC51 /* CandleStickChartView.swift */, + 669C9CDAFC6C882827F53860BE3D2A29 /* ChartAnimationEasing.swift */, + E5278205885FF01F26929F8BE769AB72 /* ChartBaseDataSet.swift */, + E09FF85ADC2F5EE2DCBEB81D81DF56C3 /* ChartColorTemplates.swift */, + 010F3E78EA2B017AA93BEADC8E20028B /* ChartData.swift */, + CA2DFC999CB0C1035B5FEC76CDF46AC3 /* ChartDataEntry.swift */, + 93762F97D5ED6B7950A565F65CD9CEE0 /* ChartDataEntryBase.swift */, + 697968197D178CA84FCBA4556B32F54D /* ChartDataProvider.swift */, + 1BC2333A3C0C4AE7B7A006657401D4CC /* ChartDataRendererBase.swift */, + CA0327F03BFD9DCEDF9B55C82009731F /* ChartDataSet.swift */, + 626902AF1130D9E133F590F00D2E7464 /* ChartHighlighter.swift */, + 8F2132A35DEEA2D49B89DCE4248093A9 /* ChartLimitLine.swift */, + FF40BB7B5C5B67467D6BA7907483FFF0 /* ChartUtils.swift */, + 0DDB0E2D288E288C87065342830A7102 /* ChartViewBase.swift */, + CF5A66027CF4B280351EDD3536824E83 /* ChevronDownShapeRenderer.swift */, + 2B6F4E71F3E662268B000FB6188BAD89 /* ChevronUpShapeRenderer.swift */, + E5669EE883F97BC9A23D1C8D871DC0D1 /* CircleShapeRenderer.swift */, + 3BAADCDBD533E680F27169B11D334626 /* CombinedChartData.swift */, + ED4D52A25F128059A0CD5F8736854539 /* CombinedChartDataProvider.swift */, + 383BD85CF714DAA8F61D7455906ADB3F /* CombinedChartRenderer.swift */, + 2BDC899AA4D8B7FCCD880ADD36E35139 /* CombinedChartView.swift */, + 4F85AC7E2B7638C7A4675FE8645C9566 /* CombinedHighlighter.swift */, + F68106257FC66AE78998CDE6A13BF125 /* ComponentBase.swift */, + BEEA8469FAA42075F634AC4B22E81818 /* CrossShapeRenderer.swift */, + 32A41D9C686AD397B8031F0A4A3E8684 /* DataApproximator.swift */, + 05B3498DBB737BA19207FE404C0C6647 /* DataApproximator+N.swift */, + 549D09B5023CA10D9B85E67234DF61C2 /* DefaultAxisValueFormatter.swift */, + CEFFFB3A31E762262CFC54B391DBD931 /* DefaultFillFormatter.swift */, + 07A90BAB32C569EF81B985DA76391B4B /* DefaultValueFormatter.swift */, + 51BE481F940AF4A8DF36951AEB716349 /* Description.swift */, + 9C222A911FE8BB7A4667EA03E62A0A10 /* Fill.swift */, + F9A0356185EA8D5579C06A6B2854E8BE /* Highlight.swift */, + 7FAAC7B65E59E536B765908EDE0F3535 /* HorizontalBarChartRenderer.swift */, + 5EE1E0883062B30061F69A7DC3E4796A /* HorizontalBarChartView.swift */, + 8266BF952135223BA206F6CED75BBB03 /* HorizontalBarHighlighter.swift */, + AA25FFCB0C2E368A77DB3560B235BF3E /* IAxisValueFormatter.swift */, + 77D387360DE7045C51A1E141AB6CDE09 /* IBarChartDataSet.swift */, + 6FB69BBAFD285F0522E82C573488DBFD /* IBarLineScatterCandleBubbleChartDataSet.swift */, + 8C73FE0756F8F5C0417D56031B62FB80 /* IBubbleChartDataSet.swift */, + 3B4D3FD0F91CA23485218BEAEE8762E7 /* ICandleChartDataSet.swift */, + C1A77A95C767183930715923CA7B9CD8 /* IChartDataSet.swift */, + E743D76084C3E5FA7FE6A15E223A6913 /* IFillFormatter.swift */, + 2A7722D16D60668CF76D4702AF57DC0F /* IHighlighter.swift */, + 3C58BDE5B7D5777D539C0978DC434585 /* ILineChartDataSet.swift */, + F54A971A6A51EBC2671C255AC65D53A5 /* ILineRadarChartDataSet.swift */, + F78EE50CA26577BF7F9B37539DC34362 /* ILineScatterCandleRadarChartDataSet.swift */, + 6A6BA37B57B834AB7486ADAA49713CD6 /* IMarker.swift */, + 29FF2AAEEC380825664B6FA356F39907 /* IndexAxisValueFormatter.swift */, + BDC49B8A1AD95E20EDF4FA01C5DA07EE /* IPieChartDataSet.swift */, + BA8FDBAAA10EBA2BF4F4B9E67B306886 /* IRadarChartDataSet.swift */, + 0A4A51BDF4DB2D619A25C8BC84CA655A /* IScatterChartDataSet.swift */, + B53AC62A4426FB3F7D7A52A39F3E43BB /* IShapeRenderer.swift */, + 30AFAA378425E249D5029B3DE664BA39 /* IValueFormatter.swift */, + 2A7A71481572CA991F801E3AE699F86B /* Legend.swift */, + 34653C25E996950D43F4FD9ACEC18968 /* LegendEntry.swift */, + C1D067E124A21DE5D53EDB493E256CEE /* LegendRenderer.swift */, + 26AE500AF9F1DBA7221343754C918896 /* LineChartData.swift */, + 046C707F9E1CEF2E1FF457BA0B2A067D /* LineChartDataProvider.swift */, + F0C79C32176E0055A39112880C7E862C /* LineChartDataSet.swift */, + 145E87090498C9A807B91E8AF19C3434 /* LineChartRenderer.swift */, + 465C6DB6F98BC384E2736A18E50EA068 /* LineChartView.swift */, + 4942026A8026CF7E076E0AA739AAAD29 /* LineRadarChartDataSet.swift */, + 30ECAD789542E5E5E38B16F9291EEE31 /* LineRadarRenderer.swift */, + D565CD2B0DFFDD2B1B8C8CA7661E18E4 /* LineScatterCandleRadarChartDataSet.swift */, + 0114AC1580DC8D7B871714A7AE3A2000 /* LineScatterCandleRadarRenderer.swift */, + 36A32DA6C600AD919DF9563684CB94A4 /* MarkerImage.swift */, + 5351D32E1AB468685EAAE5EB133BF95F /* MarkerView.swift */, + DC5834E9F628118227FC3B6BA690DFFF /* MoveViewJob.swift */, + B2DD02A7971DA12F534892F246CA0602 /* PieChartData.swift */, + E272D493395ABF9F93A519C37C611EDF /* PieChartDataEntry.swift */, + 390993B058394CBF562C99D0708C2B78 /* PieChartDataSet.swift */, + 077F0BBCD9DF75EFC6E0680E4A23DDE1 /* PieChartRenderer.swift */, + F5B69AB2453A073F8510BFFCDBE55E9F /* PieChartView.swift */, + 2094731F48DB5E9C42E24E7B280C9467 /* PieHighlighter.swift */, + B105C9BADD74AEBC8AB2764E8391B7A5 /* PieRadarChartViewBase.swift */, + 83F5A22F9B9DB04DAAC56E6048565ECA /* PieRadarHighlighter.swift */, + 7A59FB51DA1BCED1B41485FC9E165AF9 /* Platform.swift */, + D836C6135A4A0DB91321A0AF66F189BA /* RadarChartData.swift */, + F51B4AA15ABBB1261F5E793114BC417B /* RadarChartDataEntry.swift */, + 92084CC78383927905E5D5449826ABE1 /* RadarChartDataSet.swift */, + 1DF8A643199F293F7BD1D067690F0419 /* RadarChartRenderer.swift */, + 4584C41121CB16EE3CC6D95039BF3586 /* RadarChartView.swift */, + 874D039FE167C6DD4D6D90A63EF7DD7B /* RadarHighlighter.swift */, + EC2CFB08B219E2306E08BE6B95799291 /* Range.swift */, + EF137FA4ABCDBD0A212686359A421D38 /* Renderer.swift */, + FD05D07327E5CC3EDC0C854004583BE1 /* ScatterChartData.swift */, + 19B42F50EF177DECC23EBEEFD624F39A /* ScatterChartDataProvider.swift */, + DA0AC69818903B4ECE5D8079A0F5CEFA /* ScatterChartDataSet.swift */, + E56BFB651EAAB7A87E89B54852D0345E /* ScatterChartRenderer.swift */, + 14EA722EE21B995732296D7822CCE102 /* ScatterChartView.swift */, + 9C39B60D444A644531A2F92C55F8CC9F /* SquareShapeRenderer.swift */, + 7C091FCC6D46C49F295A935225FACBA6 /* Transformer.swift */, + B54AC5C30CD34FA6295FD2F917DDB19A /* TransformerHorizontalBarChart.swift */, + 1E74BF9B3F916FD5E44DD1C0F035D0E8 /* TriangleShapeRenderer.swift */, + E3E0D1163910E27D230F1CC62944F059 /* ViewPortHandler.swift */, + 7685EA497D4AE8E21984076298B032AE /* ViewPortJob.swift */, + 06E1FA1B42CA05778101C2712761FE8A /* XAxis.swift */, + EF46231B3B896419947E59C97E8AAFE0 /* XAxisRenderer.swift */, + AAA78FBBDAA361F1432A063AFD1509F4 /* XAxisRendererHorizontalBarChart.swift */, + 069B3B1A4ED4F2ED02EBD7CB6BBCCC4A /* XAxisRendererRadarChart.swift */, + BF68C799DE10F35FA51248AE1BE962AF /* XShapeRenderer.swift */, + 774C4A3357F416FF4ABBC5D20E381FAC /* YAxis.swift */, + 4570A996D9D1630514D541FA7101AF0C /* YAxisRenderer.swift */, + EFC2D7DD17B284E6861E9F929F2E45FF /* YAxisRendererHorizontalBarChart.swift */, + 6DC5CFBD9FA0619FAC8BA87254AD80F9 /* YAxisRendererRadarChart.swift */, + 1DE2A0BA98F28B03B880E89F1DA0DEF4 /* ZoomViewJob.swift */, ); - name = "Support Files"; - path = "../Target Support Files/PromiseKit"; + name = Core; sourceTree = ""; }; - 74A8A73400D68FB8D3917084190F3EEB /* Support Files */ = { + 7B463755804BFEF896ED11CD0E9C1CA3 /* leveldb-library */ = { isa = PBXGroup; children = ( - 55E58C714D0132CDF2EAAE2B26D88B21 /* Info.plist */, - EFF27538EA032DA9FE2F20CFB945BADF /* Realm.modulemap */, - 75C6E028A0660D0E07FEC2B89B906181 /* Realm.xcconfig */, - EFB1F9E876407CD5BB252BD6A0490DAE /* Realm-dummy.m */, - D65D0BB13C4FCDA3A25FFF6CEE6254AA /* Realm-prefix.pch */, + DCEA32A7685F8B3A7A5F3C12D0FE0D9C /* arena.cc */, + 1E5EB85DAF4F8597657CB9004635F334 /* arena.h */, + BD866A6602939852AD5141FE03BCBFF5 /* atomic_pointer.h */, + E0DCCF885A83486AD672608650AB8A39 /* block.cc */, + 3EC58E2B8F7AA2D9E57176E74A476C5D /* block.h */, + CD59542B0AA5CB88938E19C95138ABE9 /* block_builder.cc */, + 9339F53FE10BE090D1004CE9755EC055 /* block_builder.h */, + 5285F62FDA5CB3B7DA97B2BA794C69E7 /* bloom.cc */, + 3FF058BE3163AA9D893471E25897DB99 /* builder.cc */, + 43FF6AFC778669992AB4360DC956E128 /* builder.h */, + 6CE491E93382DA40AB4CB0BA9C8A7C41 /* c.cc */, + 382927EF1280F083D91F4ADC1BA04611 /* c.h */, + 8414C4672D0F3D823B58F0C614D520B6 /* cache.cc */, + 33030D2F5C687747F75E642267737AE1 /* cache.h */, + AAD9DC3E7D33B92E29567F9DD9956A4C /* coding.cc */, + 9A9D603EB01334C4C336592D90FB0A1C /* coding.h */, + 1B9E5336251CDB16A838C72DC2FCC200 /* comparator.cc */, + 9B62EA01CFB05E93047777CCA1BFD294 /* comparator.h */, + CC79495350FAB6A11B16150D0DFCFCCB /* crc32c.cc */, + 3C27A66A466D7FFCB2A215950F19AAB0 /* crc32c.h */, + C200881D4442C52FBD3D5420540068E3 /* db.h */, + FD48BBBF03C51B7650C1664FE9D22A86 /* db_impl.cc */, + F75441FCC771DAB20E10F502367D5C14 /* db_impl.h */, + 216C148E7AAB55B4A42CA429789C1B65 /* db_iter.cc */, + A18A837D5E5A9549808F1347125AA090 /* db_iter.h */, + 2A321494C32F7A4E6CF1410A4936CD62 /* dbformat.cc */, + E81850BB41F1CAD9F4102474A6FB2830 /* dbformat.h */, + 31486ABB90DDFF1BFB652E279892932E /* dumpfile.cc */, + 7FD63606AEEA7A6C586C0E31B2E7D453 /* dumpfile.h */, + AFDBAA766F94D84BAD76651FCEF19F17 /* env.cc */, + EA097D93EB4F79569238F8C519B4EC51 /* env.h */, + 431A8F2A7438C9305A9D8C6D36C495B5 /* env_posix.cc */, + CF0D45E9039B6B1EE0097D804950FC26 /* env_posix_test_helper.h */, + 1BD7435F5F0250F9652A873A7AC42563 /* filename.cc */, + B5B8A3F87536EA66ED63CA2EF2078363 /* filename.h */, + D01D33E1465E3733B2B3B88C20E4EA30 /* filter_block.cc */, + 9F5643D368B34AD9E31027EE15B9464B /* filter_block.h */, + A883601D9703726B4322D2E02409B4BA /* filter_policy.cc */, + EF0A1D6C66E18A45BDA2381E61A5CD67 /* filter_policy.h */, + 8FB7571887C1B0B1FB4A5D9112DBF223 /* format.cc */, + 030163BB1C65F04906744F0CDBE415FF /* format.h */, + C2EF2D15655E4664B9B3160D581BD99D /* hash.cc */, + 7DED48C2A2C2DA2C90329CF44BCE5B18 /* hash.h */, + F3B7E2E973BBB444C06C551233B1D8B9 /* histogram.cc */, + C426EB1EE80428CC1FBE266760F8C5F2 /* histogram.h */, + 06ABE5481AE97583FE62FDFB8952C2D4 /* iterator.cc */, + FDB9ED0C21ED4219B0208A70B359A0DA /* iterator.h */, + 1244EAC63AB515E7A9148B79C493BAE8 /* iterator_wrapper.h */, + 60125B3AB84AC0074335BEAC4412D766 /* log_format.h */, + E33AA5AFBCAD9B41CB718793866A994E /* log_reader.cc */, + 7B4BCAD8FD3A9F982DC589D5471C8F6E /* log_reader.h */, + B2BDA85AA0F54F28FDC05220221E20B1 /* log_writer.cc */, + F5208118EAF286A10D95C99ACC06543F /* log_writer.h */, + 9F78C8D5538F2593D1928EE534385A72 /* logging.cc */, + 68F1839B46A9B719413A9DC3FB78066A /* logging.h */, + B18A9E60C22CE808906A4B038E3B3D07 /* memtable.cc */, + 4047F4A05311DF2B78751ADBE1AC74BD /* memtable.h */, + 073A9335EC36C2F8B51D4B164257ED28 /* merger.cc */, + 3848A12626CAE2A525C49A334A9E72A9 /* merger.h */, + 04522968653053DCC25E6277865EF474 /* mutexlock.h */, + 495AEED16A11482422DFDC46FB1D420D /* options.cc */, + 88C62B868B2BEFA0EABA6C50EB778159 /* options.h */, + 723D831D9FDBD1773A736D67D7110811 /* port.h */, + AD7097625B04E283AECB7A5BB9EE8586 /* port_example.h */, + 520BB36ACD9FFA8FCA515E8705745141 /* port_posix.cc */, + DD3B1E8CF575604F22181747F6BE98CA /* port_posix.h */, + 06A8B6CE8E50420450544145B479DC04 /* port_posix_sse.cc */, + 4F9EAEB0B511F6D6A3D974BE2F0B3207 /* posix_logger.h */, + 0E1762A795F0CCB2D4BEC91CE676509C /* random.h */, + 525CE13E0C9F9A241DB69307E7B99825 /* repair.cc */, + B785F57DA9D767989762DB2ACAEC6117 /* skiplist.h */, + 8616C6866E01247A6B293A8931181F1E /* slice.h */, + 9541E6B4336E92C5C49A3201A3DFDE7B /* snapshot.h */, + E44660104793B22126F515F4E14D3885 /* status.cc */, + B39617B32590F6D5D9E53BB446F611A3 /* status.h */, + 5743AE5D75D2DEBC04AC83DC72970D1E /* table.cc */, + BB34959F74D2FFFACC4C04FCAB66C594 /* table.h */, + E3B53465250D3BD666A5547A90167ADF /* table_builder.cc */, + F853571EA379A1769F50F8736439903A /* table_builder.h */, + B7E545C520678CE97801F9E1E9AA9122 /* table_cache.cc */, + 50A8DDD2705297C49F475FA8546ECABD /* table_cache.h */, + 0C281F9BACB91ABB9C02E7DD425B029A /* testharness.cc */, + 7914027ECA70A7FBBE9D4102042A86B8 /* testharness.h */, + 4CB9F1B76B46264590D8E287CF9A261A /* testutil.cc */, + 1F691853BFC1A254495084C3FB79AB1E /* testutil.h */, + C2862AF6402E3BAFA4949021603A6310 /* thread_annotations.h */, + E55D99BE0F6247BC1B1AB551C188D909 /* two_level_iterator.cc */, + 49C424A7023DC591070581A5D6B10560 /* two_level_iterator.h */, + 2AC43C20083FD29C4BA5E6007413C904 /* version_edit.cc */, + 79B0D83A863CC6B26F3B8953DE584165 /* version_edit.h */, + D90A8F88224ECCEF79428080A5258DD8 /* version_set.cc */, + B9D3E57FCB0E49389632295408450BB0 /* version_set.h */, + 9703CBEF20334B7462F73334C5B156FF /* write_batch.cc */, + 3622D6061A94CE8E0352320B60C699A7 /* write_batch.h */, + 095146E5B0C4DB68AEBF9EEC59FB7BF5 /* write_batch_internal.h */, + B58FD1824EEC42E3E7AEAC64043D94FF /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Realm"; + path = "leveldb-library"; sourceTree = ""; }; - 74C82651CED5889CC34A4BBC002EB902 /* Support Files */ = { + 7BC952B893958437231F45A36AB698ED /* CoreOnly */ = { isa = PBXGroup; children = ( - B40B5F5C7A5892747AB538CB9B69C381 /* Info.plist */, - 2035B3D2BC6F59B3474A6BB304A0A175 /* leveldb-library.modulemap */, - 2401851FEF961A15104EB6C723CF332D /* leveldb-library.xcconfig */, - 0B2CE9529795C2488347FB5015888DB6 /* leveldb-library-dummy.m */, - 62E93BA1B4DD6210B7E3EFE261252EC6 /* leveldb-library-prefix.pch */, - 45D545BE1C689816A8345AC0B5691A94 /* leveldb-library-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/leveldb-library"; - sourceTree = ""; - }; - 751BAB2B256A5F4DA9CE50A36EF01067 /* CorePromise */ = { - isa = PBXGroup; - children = ( - 69A5CDCB0D783A09A4BB193FF66CCC15 /* after.m */, - 10F9EA5391B3EA21581C23210B839467 /* after.swift */, - D487D7F1D8837144619205D9B32042A6 /* AnyPromise.h */, - 54B1B15C5992AABEA834EB9EF50BEF34 /* AnyPromise.m */, - 9858FE2A6CD145EFD7EB722FEE336C89 /* AnyPromise.swift */, - 2F2A5B73006D792A2363C64C06E8316A /* Box.swift */, - D7615907BB7747985754615DAEF089A4 /* Catchable.swift */, - 7AE853070D0387E8AC5441618DC1DF9B /* Configuration.swift */, - E1338EA89CF01F1D3968BA51757F9953 /* CustomStringConvertible.swift */, - 6F2F526A371F15523F70033F71D4E8DC /* Deprecations.swift */, - 1A3EC566AB99F6C73103EC88769C0767 /* dispatch_promise.m */, - 761F5D38A926E73917FA881566026AEB /* Error.swift */, - 96DDC705EBD3CE46C26E4DFDC7B1AB86 /* firstly.swift */, - 7A472B808EDB6A83459DD76A79343A48 /* fwd.h */, - 1815D2D0435C20942C254EEE55A77A7A /* Guarantee.swift */, - 0ACCB7C8249C4A4459C1C7B6AE74B5ED /* hang.m */, - 65C88EE0FD6E4593C528C854C2430593 /* hang.swift */, - DF090133E74CB6A388026C980D12397F /* join.m */, - A4B0D1914961561F09DC97036317B8DB /* Promise.swift */, - 44C39CC8C63A8007E41CB05DB0BFB08A /* PromiseKit.h */, - 4929B54A9E9DECE6438DB81F21C0C5A4 /* race.m */, - 9FCB6A8F99C4899F7414D370D4A77A3F /* race.swift */, - E8308C19DB799F75509F860FE1407414 /* Resolver.swift */, - 9CFB44E7986909688AA67ACB7477AFDB /* Thenable.swift */, - B40B3D12787C2D8F3DB5985AB253258F /* when.m */, - 764C857A9B00BB35B14D1BB6C4B4745F /* when.swift */, - ); - name = CorePromise; - sourceTree = ""; - }; - 799D7266536FB3D94AA2388BD71E7139 /* CoreOnly */ = { - isa = PBXGroup; - children = ( - 997244D190C4DA8AE809CE08C59D4B29 /* Firebase.h */, + F91102CFBB4F8D09FDF63A213B0EDCFF /* Firebase.h */, ); name = CoreOnly; sourceTree = ""; }; + 7DA6082A2AA272602BEBBCF10BD532AE /* Charts */ = { + isa = PBXGroup; + children = ( + 79B03A7C8E47032458A5A9CF12443568 /* Core */, + C51212A4ED2E92073520B22B9EF12232 /* Support Files */, + ); + path = Charts; + sourceTree = ""; + }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, F65D932CBFAC6D55C62F23641E56191D /* Frameworks */, - 992A5944E9BDFDB83D83D4E0D49225FE /* Pods */, - 4C7661379170F899047005E369170EF9 /* Products */, + 379CE6FA6727966123C8B01E0D5B4965 /* Pods */, + E7418253528F8161A60F1DFDF7D0DD85 /* Products */, 644D1183A0EAD6A30C1AC9369115D8B3 /* Targets Support Files */, ); sourceTree = ""; }; - 7F30F1B3DE10E3FC117E94C485C6AA1C /* NSData+zlib */ = { + 7DF30F31D5CE0E2CD4E81817A1B09C5E /* ChameleonFramework */ = { isa = PBXGroup; children = ( - 08811D88CEC4702543555843C810657D /* GTMNSData+zlib.h */, - 7AED3E930C42795FCFAA5FF2243A3039 /* GTMNSData+zlib.m */, + D612E8EA9379A3E2C150018FBBC5003D /* Default */, + 16054FC813A926DD367DFF37BE9CD7BB /* Support Files */, ); - name = "NSData+zlib"; + path = ChameleonFramework; sourceTree = ""; }; - 83205FD68EB410546446649854884207 /* GoogleToolboxForMac */ = { + 816DDA46230693C3846E1BFE848377BD /* Support Files */ = { isa = PBXGroup; children = ( - 067A91FABD003474D83BE3693E18F79B /* Defines */, - 7F30F1B3DE10E3FC117E94C485C6AA1C /* NSData+zlib */, - 211B7DA75DEEDB41239AA643A6B0DC37 /* Support Files */, + F14E7F640CF5AC07CA9AC2F95CF23CC7 /* Info.plist */, + 3453E22357E9358959E5D71E2DAF4BBE /* SVProgressHUD.modulemap */, + D70A4539E0CAC421B91A12DA601CD99B /* SVProgressHUD.xcconfig */, + EBA0D432FF6E0BC9F68AD5F03713ED69 /* SVProgressHUD-dummy.m */, + 40922B60DDED533B5B42EB02561856FF /* SVProgressHUD-prefix.pch */, + 1F0994DB24D3819F0A16FC1E9B6989EC /* SVProgressHUD-umbrella.h */, ); - path = GoogleToolboxForMac; + name = "Support Files"; + path = "../Target Support Files/SVProgressHUD"; sourceTree = ""; }; - 87A990F23E773F9FFA90EF9C0351D853 /* Alamofire */ = { + 820FDA0EA0697CEC25A73BBCC8848754 /* Frameworks */ = { isa = PBXGroup; children = ( - DF18DB9AB29349185B333DDFC25DFBE8 /* Alamofire+Promise.swift */, - ); - name = Alamofire; - sourceTree = ""; - }; - 89A43EF6F0496B6DB17D7EDA92419686 /* Resources */ = { - isa = PBXGroup; - children = ( - 67E3FFD687235B98417AECB81E391CA7 /* SVProgressHUD.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 8BA5BE0A699C5919292BAA2B0A6284EC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7FA0FB5E1BD4E206AD6CA29388D53C9F /* FirebaseInstanceID.framework */, + F1D9330D0FDB021A6869C9D40CD6C04A /* librealmcore-ios.a */, ); name = Frameworks; sourceTree = ""; }; - 8D360BC880F2D320D0C08862D777B31C /* Support Files */ = { + 8619BF6622C696789194DFF0AA39687C /* GoogleToolboxForMac */ = { isa = PBXGroup; children = ( - A5980A94BB8DDBCFFF560FCFDA4CE42C /* Info.plist */, - 950B89A37F650A6B150BB61CBD929CD6 /* nanopb.modulemap */, - 678D06BE325ACF1EBC6F2EB35DA227B8 /* nanopb.xcconfig */, - 9F2EE7DDBF136DD05C0E02ED154059FE /* nanopb-dummy.m */, - 6A4692C20B2BC3C81D0B1A7F070493DF /* nanopb-prefix.pch */, - 876C8FE4C8BC6D8AF9FFD9FF46B6589C /* nanopb-umbrella.h */, + B038AEECF9337BD96F0731B8485C9CC6 /* Defines */, + CFEA668605AB0FAE98AEF6A2E8D6BECA /* NSData+zlib */, + 164AAFA22298245A61A83712C281D342 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/nanopb"; + path = GoogleToolboxForMac; sourceTree = ""; }; - 92A416187A1798CC99732994CA5EFFEA /* Support Files */ = { + 8B7BF85F6C0B4C9DC69C7ADD8688AB67 /* SVProgressHUD */ = { isa = PBXGroup; children = ( - FF90FD1EEAD8D69B6F2F9AFFA0D237C9 /* GTMSessionFetcher.modulemap */, - 3FCE8941552AD50778D44D36BF09208B /* GTMSessionFetcher.xcconfig */, - 52B5019F9BF77445DFE298C506B80C28 /* GTMSessionFetcher-dummy.m */, - 6B0D08298671E04D54EB4718EC3ECCAC /* GTMSessionFetcher-prefix.pch */, - F00A4739FD34EB513E15CC0292A858B0 /* GTMSessionFetcher-umbrella.h */, - 336695E3293627D6C7CB4B9F63001010 /* Info.plist */, + D4680D838192AB88753FF63D6B6557C0 /* SVIndefiniteAnimatedView.h */, + 7F5BE1BD9030E21522E465FE0E909980 /* SVIndefiniteAnimatedView.m */, + 8C69E4C66B28770C59E6B9BA77DA2830 /* SVProgressAnimatedView.h */, + 52DF3DE6ADA39756D7BBA44919ECD7DB /* SVProgressAnimatedView.m */, + 00780D4D04882C948E1B9336A2C69E9E /* SVProgressHUD.h */, + 1ED126BBB5AE4F23E031D69A6E6E38F2 /* SVProgressHUD.m */, + DA851D335F85D8D2CD2D8F1E97396BDE /* SVRadialGradientLayer.h */, + B257A251D6FBC2AFDD55B4D7C8F3E263 /* SVRadialGradientLayer.m */, + CA5B4DD21A2C0348C262A1185970A2FB /* Resources */, + 816DDA46230693C3846E1BFE848377BD /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/GTMSessionFetcher"; + path = SVProgressHUD; sourceTree = ""; }; - 95F7AD6ADA8EDEC11385835940A70A8A /* SwiftyJSON */ = { + 919DEE41E11C318AE40264FEEB26FA30 /* Firebase */ = { isa = PBXGroup; children = ( - 3B47CEC728C7969B0515AFA0224C3BAD /* SwiftyJSON.swift */, - B35359EA6012D611A6E916BA5697C9D9 /* Support Files */, + 7BC952B893958437231F45A36AB698ED /* CoreOnly */, + ); + path = Firebase; + sourceTree = ""; + }; + 930ADB49744E9E084214F6CAE8D04E45 /* Kingfisher */ = { + isa = PBXGroup; + children = ( + 9A94085869362C1259D5B71A3909042F /* AnimatedImageView.swift */, + B127B0D183DA160E8F3B178A61E713A1 /* Box.swift */, + B9F0B108D02D31661E0205EE1A2B31AC /* CacheSerializer.swift */, + 78CDC724482462A38883D58A5C254258 /* Filter.swift */, + 944F8C52012913D714492B1F2774F94B /* FormatIndicatedCacheSerializer.swift */, + C1E8F69E8187BDBC80E0F8FD873975CC /* Image.swift */, + B3313571CA472F1E1F41820EFF50D417 /* ImageCache.swift */, + 0BC18A9A93FCF03EB4C6C1EBFB3A585D /* ImageDownloader.swift */, + FAAFD1DD6DE458FAFC1C264A4CD0B519 /* ImageModifier.swift */, + E211216D81C3386CC56C9765AB7CBDF9 /* ImagePrefetcher.swift */, + 627A43A2A4F286438FC5CED41A414DF6 /* ImageProcessor.swift */, + D92BFB258F6CCC8691015A7777951A8A /* ImageTransition.swift */, + 8638B90F982D4A1D791C02A4DC43FE0D /* ImageView+Kingfisher.swift */, + 4A9E21EC28E44F065DD4BEF037693AD1 /* Indicator.swift */, + 9F9DF31B5AC288EFC34E3949191A7C52 /* Kingfisher.h */, + 92B79FD3CEA8082FC5E7227D4655E4B6 /* Kingfisher.swift */, + 6A996DF9334688E455CD7353C30DCA2C /* KingfisherManager.swift */, + E5D8F67F9944E0DB70382FA5CF599627 /* KingfisherOptionsInfo.swift */, + 4D087A754F0DA0746FDBCD5EEA0D7309 /* Placeholder.swift */, + 2ACA0E304694370331B93C86691A008B /* RequestModifier.swift */, + 49A8C9A11E822DE5E8791CC26F950EEB /* Resource.swift */, + 464EF491A012E2A9F730BABE744586F8 /* String+MD5.swift */, + BC412FFF86FE105B4DD03B8DB3DA8689 /* ThreadHelper.swift */, + 65B45B8E875F6ECDF184594472AF8A5F /* UIButton+Kingfisher.swift */, + C729B594D6379382DEF4B34C7F090A65 /* Support Files */, + ); + path = Kingfisher; + sourceTree = ""; + }; + 93C9EDA4FA3582EF730905049ECB5C49 /* Frameworks */ = { + isa = PBXGroup; + children = ( + FB05403E3E2BBF4C29F7F548DAB651A0 /* FirebaseInstanceID.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 96170E4082B5334DCE9CEFB5D8263DFD /* SideMenu */ = { + isa = PBXGroup; + children = ( + 76E4ED39E760E6169AD63819AFD85640 /* SideMenuManager.swift */, + 4551C926FA2A7BC7D0743024BB5070EF /* SideMenuTransition.swift */, + FBBD8B0EFD47C2DD5440F393202C03D1 /* UISideMenuNavigationController.swift */, + B0878B61F4CC1F9C58C9FF195BA56C85 /* UITableViewVibrantCell.swift */, + 062531122EE2278DACE870E219BA7124 /* Support Files */, + ); + path = SideMenu; + sourceTree = ""; + }; + 9F0495007B4C8EFA57C745A859867A67 /* SwiftChart */ = { + isa = PBXGroup; + children = ( + 2A7C94A8565150F3D5973A944B036DFA /* Chart.swift */, + B71B19337EB68C20755AB91BD17229C5 /* ChartColors.swift */, + A4474A30653C16E60D67CFCDEF15E064 /* ChartSeries.swift */, + FD7CAFD2685AC13A5F78C0E6C637C7F8 /* Support Files */, + ); + path = SwiftChart; + sourceTree = ""; + }; + A2C7D9242635C7A065CC62F3BCBA1E84 /* FirebaseAuth */ = { + isa = PBXGroup; + children = ( + 851203D593E01F116B920E3E8051D0F7 /* FIRActionCodeSettings.h */, + 45C74B70411DB52E5DDD3045889C223C /* FIRActionCodeSettings.m */, + D256F6F8A03BF50F154099A007F61AE0 /* FIRAdditionalUserInfo.h */, + EF133089DEADC3804D963EC6215DC092 /* FIRAdditionalUserInfo.m */, + 0D6EAE3288DF54A1F96CDB9B2AD0F452 /* FIRAdditionalUserInfo_Internal.h */, + C9D39A1EEC24B6BC57508EAEEF38180A /* FIRAuth.h */, + 1DEF6CBDE137A9D304491225064F131B /* FIRAuth.m */, + B37ACA86A2EF1B394AFCC2FCBCFD57ED /* FIRAuth_Internal.h */, + A7DCBF745ADE50ECB37A08B26A7353C5 /* FIRAuthAPNSToken.h */, + 1D99A87B69BB9482A7F35A29FA3B22D0 /* FIRAuthAPNSToken.m */, + DEA0A0D04B604DBA164EB23CBB4645CB /* FIRAuthAPNSTokenManager.h */, + 5EF22D2D1A6662A828AF985AF5DB51F4 /* FIRAuthAPNSTokenManager.m */, + 134506D9971BFA731A5652FB6C7C1384 /* FIRAuthAPNSTokenType.h */, + 2212B2E5596BBBAFF0595D2AF702C7E7 /* FIRAuthAppCredential.h */, + 21E80C1DA37DB6B3201C7AA374EF11A5 /* FIRAuthAppCredential.m */, + 3AD4FA8427B1312C45262C5BDE296F5F /* FIRAuthAppCredentialManager.h */, + 66C759143D70A6473AD8FF9521C4502C /* FIRAuthAppCredentialManager.m */, + 72073D119E282E7203065BAC884532A2 /* FIRAuthAppDelegateProxy.h */, + C3A09A5CF2FDEA43DBE46F1C4FBFEC0A /* FIRAuthAppDelegateProxy.m */, + 1EF123F105531FD9F000814A28719AC6 /* FIRAuthBackend.h */, + 1908CB01202F8FE5D5065C5971BCE40B /* FIRAuthBackend.m */, + DE01A44B82EF619D9670F6D0AACC459C /* FIRAuthCredential.h */, + B7072CC50B6BA667903E6C6241CD2447 /* FIRAuthCredential.m */, + C240F176E3878598E61FC0A7003130E9 /* FIRAuthCredential_Internal.h */, + 829820B8821F8CF277355998B0EB4E6B /* FIRAuthDataResult.h */, + 850E23D92FFA2683BF6D166F4B989B95 /* FIRAuthDataResult.m */, + 88331AF8C3BFC76E90C3264E87C4C901 /* FIRAuthDataResult_Internal.h */, + 4F81F03B310B1DEA33721EC3FF34F95D /* FIRAuthDefaultUIDelegate.h */, + 372B7BB1862C377115782F21A6331990 /* FIRAuthDefaultUIDelegate.m */, + 091CBB58F14812C3DB81BBFB1947E6C1 /* FIRAuthDispatcher.h */, + D79854F623E3F02E4FBFC6DB18E826C7 /* FIRAuthDispatcher.m */, + 0130B2AC51BDBB44098750C3DBFB1889 /* FIRAuthErrors.h */, + 3D000FE4E703132CF7C1BE92990CC8A8 /* FIRAuthErrorUtils.h */, + DD0DE7989E802C0D14EE23A291A2322E /* FIRAuthErrorUtils.m */, + 622796B1E0C22A2BC786C351F242C965 /* FIRAuthExceptionUtils.h */, + F85F70CAC842B677AAF9438E29482998 /* FIRAuthExceptionUtils.m */, + 32F0ACF7382F5D686B491846D9C1BCDB /* FIRAuthGlobalWorkQueue.h */, + 69EF71DAE265624AF7BE3E8DA3E31173 /* FIRAuthGlobalWorkQueue.m */, + 6A02A3DCA7DC56236E85CE3F23C59E90 /* FIRAuthInternalErrors.h */, + CA2F7CC3E721CEFEF750B13F5555DCD5 /* FIRAuthKeychain.h */, + E7B0803FD1D9AB1AFC06B666EDE9F3B0 /* FIRAuthKeychain.m */, + 9B9BDF63B39092D211921C6CBD60DA7B /* FIRAuthNotificationManager.h */, + EFBD716230C2EA6B4130C57E76B191D6 /* FIRAuthNotificationManager.m */, + 3BE747726F4C08DBC004A12848155C35 /* FIRAuthOperationType.h */, + B75114BC2BD572972C91A8CB9E116C60 /* FIRAuthProvider.m */, + F1346DACDB39018988E6C5D8D2D5E306 /* FIRAuthRequestConfiguration.h */, + A8EDCEA43EF83A121FF9794EA8F3BE5B /* FIRAuthRequestConfiguration.m */, + 5C3CD574BDBFFF20187F6184C3385022 /* FIRAuthRPCRequest.h */, + 747AF76A17AFE5EB9C6EDB83F4D0F850 /* FIRAuthRPCResponse.h */, + A5E773BDD27F0D7006A30D19CC668AEF /* FIRAuthSerialTaskQueue.h */, + E5C4CBD5C53DB24398B5E050FFFE4C96 /* FIRAuthSerialTaskQueue.m */, + 3AAD93E1BFA39EFDECA5FCB3AA0ECB8F /* FIRAuthSettings.h */, + 9EE6E212E97F0BE496C4BBF14E535286 /* FIRAuthSettings.m */, + EBD19FA459C832FDC87D5BC12252FA81 /* FIRAuthTokenResult.h */, + 83AC5A48327A8EEFFA935389CA55EC15 /* FIRAuthTokenResult.m */, + 70A1AD3B20C64A95B7B5580B9E81D43C /* FIRAuthTokenResult_Internal.h */, + 55931FFEA5DF0153C27CB1AEC567A192 /* FIRAuthUIDelegate.h */, + 1F4823FC39667A5B8492225E3E4614C1 /* FIRAuthURLPresenter.h */, + F0AE07EBBCFC01AED0B1CF71CB706B04 /* FIRAuthURLPresenter.m */, + 8BF93A3326AE273FEA46726801C04976 /* FIRAuthUserDefaultsStorage.h */, + E7727B9947C70A6D381F53FFABEE6C3A /* FIRAuthUserDefaultsStorage.m */, + 68333EDF46E6D08169077669539DD854 /* FIRAuthWebUtils.h */, + DC3DE7D630CFB3538A508DEC63BD1701 /* FIRAuthWebUtils.m */, + 9BBA6B9BB3015E87BD31D16CC861DDA4 /* FIRAuthWebView.h */, + 18D63F2692B6B3BD98E4CC626FC8A37A /* FIRAuthWebView.m */, + 87FC2984C9D99C99747A87A025913B44 /* FIRAuthWebViewController.h */, + 810A10450ECFA0D3FFDF555F29BC5782 /* FIRAuthWebViewController.m */, + 94DC926EFD5E35AE0EA727D999BAD26F /* FIRCreateAuthURIRequest.h */, + DAD8DE89032093185844C9ECAE60C7D9 /* FIRCreateAuthURIRequest.m */, + 5118852F00D319C28B010E9BA8768CC9 /* FIRCreateAuthURIResponse.h */, + 232808034064F52672DDDD3772D6D6B9 /* FIRCreateAuthURIResponse.m */, + 6B19ECCE4BEA2A0A53D17243036E9ABB /* FIRDeleteAccountRequest.h */, + 70196E133C023E4DC04F43B36826E256 /* FIRDeleteAccountRequest.m */, + E4133A311D0FB64D2AD4B9F49E3259F8 /* FIRDeleteAccountResponse.h */, + CA5B28EA8EC8119650FB4878AE0FDECC /* FIRDeleteAccountResponse.m */, + 404A48DBA1D7B997CB861D59714CED9A /* FirebaseAuth.h */, + A80450F729547BBDEAED8CBCA1E06F48 /* FirebaseAuthVersion.h */, + 293C7A983AE41C61AA2B460A3B6E9B28 /* FirebaseAuthVersion.m */, + 8052150797EF7003E18047A0AE00F0C5 /* FIREmailAuthProvider.h */, + 465ED0591EB38D21C157E29A477E471A /* FIREmailAuthProvider.m */, + 0B3AB5BA442710676AEA53CF8C15DFA3 /* FIREmailLinkSignInRequest.h */, + 064BFA305D3D77BC0D1830BA41858569 /* FIREmailLinkSignInRequest.m */, + 19BA97759F07732AFFBBFDC8C8A1810E /* FIREmailLinkSignInResponse.h */, + 884FE364F7F4AC9D3B915B63C844CFA1 /* FIREmailLinkSignInResponse.m */, + 5774C49C36EBEC452C489EB8A9A2FAB1 /* FIREmailPasswordAuthCredential.h */, + 7741D2B908706A014865AF7DAB2BA4AF /* FIREmailPasswordAuthCredential.m */, + 1924511D23F11022AD69827F9E169983 /* FIRFacebookAuthCredential.h */, + 7A77A063313D4220856407B8BD56CF59 /* FIRFacebookAuthCredential.m */, + 6CC21EC03C278563E2F64C67D7085F0C /* FIRFacebookAuthProvider.h */, + 5900366582EB15C7A4D6E21EEF0578B7 /* FIRFacebookAuthProvider.m */, + D8A9C1D55D198A39CFF4C84B85FEC4EE /* FIRGetAccountInfoRequest.h */, + F2379F4B86E1AE74BC7236E7083C3D0E /* FIRGetAccountInfoRequest.m */, + FD19106F235A77D1493BDD4EFDF93BA2 /* FIRGetAccountInfoResponse.h */, + 49D92DE2FD620C4089B7A1BDE68051D6 /* FIRGetAccountInfoResponse.m */, + E73E5706123B04485CDA9404C32A422E /* FIRGetOOBConfirmationCodeRequest.h */, + EAF71C594340430806E39D9C938D9C33 /* FIRGetOOBConfirmationCodeRequest.m */, + 2A34D3F39FEB7F56A29186833EC296F9 /* FIRGetOOBConfirmationCodeResponse.h */, + CB29682178E05D22A82FCDDFE5819D2C /* FIRGetOOBConfirmationCodeResponse.m */, + 350DC54E5CA7208005D14E60E07D2C77 /* FIRGetProjectConfigRequest.h */, + 1F53AC3B56E84F6C31D6266D4C53141F /* FIRGetProjectConfigRequest.m */, + DE60E07F1ED9D438A7C71A665E7AC738 /* FIRGetProjectConfigResponse.h */, + 0E67AEFA46825634C26F1DFE38EAF96E /* FIRGetProjectConfigResponse.m */, + CBA1ECE0D217C6F569C8F8A99D81FEC2 /* FIRGitHubAuthCredential.h */, + 8AD7186A4B4F9CE3B057BE9851875C5D /* FIRGitHubAuthCredential.m */, + A71163FC03CB1420F2FB3DBF6FD8D423 /* FIRGitHubAuthProvider.h */, + E3128E68EB45CC50FB2EA91D87A81F3F /* FIRGitHubAuthProvider.m */, + BACD5A2CAE91B66A84A73052D4573B2F /* FIRGoogleAuthCredential.h */, + 741AD09F20CCD4D64A615FE16AEDB387 /* FIRGoogleAuthCredential.m */, + 9E59227236440A499B7F293942D7D5FA /* FIRGoogleAuthProvider.h */, + EEA879E68A4329D71FC0206FA63DDE3E /* FIRGoogleAuthProvider.m */, + AB352C018761A50FDA6E6A42F12E7E68 /* FIRIdentityToolkitRequest.h */, + D0DE4099A5592BBC2725C9A994F62051 /* FIRIdentityToolkitRequest.m */, + 7A21D5B5371B5E7636CBA4BD83CA63E9 /* FIROAuthCredential.h */, + 79582042D43A0EA1E68F34A15FECF6E6 /* FIROAuthCredential.m */, + 519A49CE2EE30097D0276208C8FEAB99 /* FIROAuthProvider.h */, + 487094C994310B27F08E297BFD93E02A /* FIROAuthProvider.m */, + B3B32E578877653139CA3243DE516DFE /* FIRPhoneAuthCredential.h */, + 2C59A83B471A80E86C01C72ADDBC60A2 /* FIRPhoneAuthCredential.m */, + 0176A640860C22CA590917E949EA896D /* FIRPhoneAuthCredential_Internal.h */, + F6EF89D9ABE8102ED8D2D9BE619EE7A0 /* FIRPhoneAuthProvider.h */, + 6632F78F916FBAC8538290E6A8E2D94A /* FIRPhoneAuthProvider.m */, + CEDBBF2C0E11C616DA2E6CB791BE47A7 /* FIRResetPasswordRequest.h */, + EF8D79189693CA879E823A588A4D478C /* FIRResetPasswordRequest.m */, + 9D3F38B2341DD1DD8C826AA01D21774D /* FIRResetPasswordResponse.h */, + 3089385BC493F2C6B225BFCFD6D072F8 /* FIRResetPasswordResponse.m */, + D84D4415254CB3E2764CC60F4649464C /* FIRSecureTokenRequest.h */, + DAD6C9F3DA49AF649D92BF0AAB18AF8C /* FIRSecureTokenRequest.m */, + 824F6D873FAAFD885E3A2C085BC79AD4 /* FIRSecureTokenResponse.h */, + A45C77AF49B6D0D51D4D3D0BA5882D57 /* FIRSecureTokenResponse.m */, + 522DAB4D87CE1F09BDE1A65F15F2FBB1 /* FIRSecureTokenService.h */, + FDD65D82B30903266797AB26B18B1973 /* FIRSecureTokenService.m */, + 71BA7A67BBC43A4DB783712FB346DABD /* FIRSendVerificationCodeRequest.h */, + 235F1DC8E299757F7CD88AE7BC4C870C /* FIRSendVerificationCodeRequest.m */, + 7546C05AF7D0A1160FC41FFBDFFED75C /* FIRSendVerificationCodeResponse.h */, + A5331EE51849C6FB50B6B85A90BDCAC4 /* FIRSendVerificationCodeResponse.m */, + 56B0D236FE09400520ECD2E02A58554B /* FIRSetAccountInfoRequest.h */, + 15F13C1322382339F6E043BF937E60AE /* FIRSetAccountInfoRequest.m */, + CCA690505615B2B18B5D01A172F2696E /* FIRSetAccountInfoResponse.h */, + 557B7CC5A9A11189BBEAFC72464BEA0A /* FIRSetAccountInfoResponse.m */, + FE32373C2B36D33767DBC246ABFBD3FD /* FIRSignUpNewUserRequest.h */, + BFFFA1D4B5B3E70B8A5A77644009587F /* FIRSignUpNewUserRequest.m */, + E0E1301557F34BE04CB001D327503599 /* FIRSignUpNewUserResponse.h */, + A1078A283A02F54A3A353E950AD15443 /* FIRSignUpNewUserResponse.m */, + 9FF9AE944BC1704278BBE02A0AC2733C /* FIRTwitterAuthCredential.h */, + 6BCD04CC3CC4E934B8C3D74FC9170E54 /* FIRTwitterAuthCredential.m */, + C757F3C107E98DCBF3614F91E051BAC2 /* FIRTwitterAuthProvider.h */, + DC1B54C03365E9EBA752E0DC5E534766 /* FIRTwitterAuthProvider.m */, + AE17264CB8229EBA8EFE7D2818563856 /* FIRUser.h */, + B4E657BC55EA18198B25835E1B55D359 /* FIRUser.m */, + 5376D625D5EAF1217D51053AD6880341 /* FIRUser_Internal.h */, + 4001033DBF35BF25BC0B98754A934EDB /* FIRUserInfo.h */, + 64955AB134B400739094B4DE34FE2674 /* FIRUserInfoImpl.h */, + 6904D4E404DA009AC64EE44664F92516 /* FIRUserInfoImpl.m */, + CADD45CDEF8FFCAED76A0C64EFE20125 /* FIRUserMetadata.h */, + BCECB44D476CCEA5269C305C1864837A /* FIRUserMetadata.m */, + C465239CC40EA67F5314F2513FBC6BFA /* FIRUserMetadata_Internal.h */, + A80709F76E853ADC26ACBDD3B16C92BF /* FIRVerifyAssertionRequest.h */, + CAE9C3B5FF74E02017987C2F7196F819 /* FIRVerifyAssertionRequest.m */, + 79B6AB976E1A4D392FBA7CCF6357945B /* FIRVerifyAssertionResponse.h */, + C9D21312B70688001CD741A8E1DD2D29 /* FIRVerifyAssertionResponse.m */, + 01837F648781495D356798BE5B89DBE2 /* FIRVerifyClientRequest.h */, + 48EF342504252DD6E318CC1EB4B5D80F /* FIRVerifyClientRequest.m */, + 08D2C002F22FD48F47361D4F0C71CAE5 /* FIRVerifyClientResponse.h */, + F21AAA9D6C94DEB06889483476FBB730 /* FIRVerifyClientResponse.m */, + 80E37B9A54C39CE0E0145C88BD3DDD3F /* FIRVerifyCustomTokenRequest.h */, + EA903D437D2BFF7048A4ADB4D94F173F /* FIRVerifyCustomTokenRequest.m */, + 1753BDDC9962E4F3F28577F2734B235B /* FIRVerifyCustomTokenResponse.h */, + 8D2C8704A62E407D434E266CAD07518A /* FIRVerifyCustomTokenResponse.m */, + 14DDBFC7D42AC773D5956EFCA98074EA /* FIRVerifyPasswordRequest.h */, + DAF6103C808D57B1FAE6BE6252BB54BB /* FIRVerifyPasswordRequest.m */, + 96851780AF6A88D586AAC94BFF34D705 /* FIRVerifyPasswordResponse.h */, + A6F1869A63AA02A98D9F933C1D06D6A8 /* FIRVerifyPasswordResponse.m */, + 49E390C1462F6EED57261052298904E6 /* FIRVerifyPhoneNumberRequest.h */, + 8A506D5A254369BC7F2340AFB1810AC4 /* FIRVerifyPhoneNumberRequest.m */, + B3FF4FA01EE81F777C429E6A8BC14259 /* FIRVerifyPhoneNumberResponse.h */, + 17AA6BE41ACCDF37C985CE899BDE6ADC /* FIRVerifyPhoneNumberResponse.m */, + 2F841E8770F12B3C987A86BC15BD5599 /* Support Files */, + ); + path = FirebaseAuth; + sourceTree = ""; + }; + ABE6742795084ABCADF54913BD1E705F /* SwiftyJSON */ = { + isa = PBXGroup; + children = ( + A2DE07E5E476F4FBD06195DDF23EC03E /* SwiftyJSON.swift */, + EB97C51C9297F648652099A4E224E752 /* Support Files */, ); path = SwiftyJSON; sourceTree = ""; }; - 992A5944E9BDFDB83D83D4E0D49225FE /* Pods */ = { - isa = PBXGroup; - children = ( - C3581F726269D514E5D2B13EC19DFE10 /* Alamofire */, - D2892E868AED7C051038013C68C8550F /* ChameleonFramework */, - FE1CBE7FF469DAF716097926B50D1D6F /* Firebase */, - D83064310FEC725667BE71D6B45AE277 /* FirebaseAnalytics */, - 4C4671A9D3032543495B947003FFC2ED /* FirebaseAuth */, - C75728778401CBA49E2E96F18E9E43A4 /* FirebaseCore */, - FE360E09AAF3053FBF8AFB15F6A45941 /* FirebaseDatabase */, - 4AB3DCA2DEFBF2951A3974C8D085711C /* FirebaseInstanceID */, - 83205FD68EB410546446649854884207 /* GoogleToolboxForMac */, - EFAC254CE9F3E51CE091161EFFF830E0 /* GTMSessionFetcher */, - C38DFEDEC19B483A42FFCD4802304643 /* Kingfisher */, - CBCFAB8F8E56842C5F81CDF371893F18 /* leveldb-library */, - 069F2B5B52A90B97EB4B79A5DAFA5A9E /* nanopb */, - 39FC4763EAD7C93D4986486A653D92A1 /* PromiseKit */, - 438BABC960156F6C6F36033B72E37099 /* Realm */, - DF7D2C590F795BCB12682C821DFB3098 /* RealmSwift */, - C9EBF17A5A7D37B0C1FE5714AF197D87 /* SideMenu */, - DD66D448DBFCB79DC7C92D5A843A1471 /* SVProgressHUD */, - 038697CC3FF64AFB0BA9B957D72F0788 /* SwiftChart */, - 95F7AD6ADA8EDEC11385835940A70A8A /* SwiftyJSON */, - ); - name = Pods; - sourceTree = ""; - }; AD66826F805E430D95BAA526E5E92992 /* iOS */ = { isa = PBXGroup; children = ( @@ -3103,294 +3522,447 @@ name = iOS; sourceTree = ""; }; - AF108A81C021BE19C8E873056F584BFC /* Support Files */ = { + B038AEECF9337BD96F0731B8485C9CC6 /* Defines */ = { isa = PBXGroup; children = ( - 3F16D423F4F3C3ED7305FAE90EA8E5BD /* FirebaseAuth.modulemap */, - 280E71F4A10F40DA26EB5029443DC470 /* FirebaseAuth.xcconfig */, - DBC813ED15635B220F63454D8006E073 /* FirebaseAuth-dummy.m */, - 2E58F66E1475886462800C6EAC1AB058 /* FirebaseAuth-umbrella.h */, + E299160C17BB38B076A0CD608FF29635 /* GTMDefines.h */, + ); + name = Defines; + sourceTree = ""; + }; + B40AE397F7446FD8D0E463D0751F0F18 /* PromiseKit */ = { + isa = PBXGroup; + children = ( + 736A6E26405DD310CB88A5F94FDCAB80 /* Alamofire */, + 5AF5CD3DF89581F712669E0CFBF3E158 /* CorePromise */, + FA4AD18B988DCD31D303780AB6F91F1F /* Support Files */, + ); + path = PromiseKit; + sourceTree = ""; + }; + B58FD1824EEC42E3E7AEAC64043D94FF /* Support Files */ = { + isa = PBXGroup; + children = ( + 2D51D40740CDB76A9ACF99F540201831 /* Info.plist */, + E81E1EB38627F35CE6FBC4CDE458A51A /* leveldb-library.modulemap */, + F8AD5474FFB1C513463688190F974CA9 /* leveldb-library.xcconfig */, + F4F3609E7CE825F9255D0A5143BE6861 /* leveldb-library-dummy.m */, + 1803D0173412108933958EA442223558 /* leveldb-library-prefix.pch */, + 67E8667240251D060ACE1B6810C0F9F4 /* leveldb-library-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/FirebaseAuth"; + path = "../Target Support Files/leveldb-library"; sourceTree = ""; }; - B35359EA6012D611A6E916BA5697C9D9 /* Support Files */ = { + BA889D700DA4623744A3CF7DF624D19A /* FirebaseAnalytics */ = { isa = PBXGroup; children = ( - 897B651D79ACD29705D75780311D909D /* Info.plist */, - F14C3126A27ED02B8E5B7D5C709EA7E2 /* SwiftyJSON.modulemap */, - D1E7A051F99434500E664AC519B7B5C7 /* SwiftyJSON.xcconfig */, - 61DE8708D7E957E3C14D958C3924525E /* SwiftyJSON-dummy.m */, - 86AEFDFBF9CDE9F34BB3754CE36A1AE9 /* SwiftyJSON-prefix.pch */, - F7F4B9219625D214F1B6B82D278C3EFC /* SwiftyJSON-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftyJSON"; - sourceTree = ""; - }; - B9F16E07A378380BD5391A08006D0D55 /* Support Files */ = { - isa = PBXGroup; - children = ( - 443BCF90C7092142D43607C82A16AB2B /* Info.plist */, - 48CF6D56AF692E9D87F5F950E5F4D13A /* SwiftChart.modulemap */, - 79AF623890C6DC0CA3A952646F4A3A74 /* SwiftChart.xcconfig */, - 5D97A8C0D678831946DEC1418C7B6876 /* SwiftChart-dummy.m */, - 98176F7EB9856607DC25015E67B35486 /* SwiftChart-prefix.pch */, - 1C8BF63BAB94A488687EF57BA50A2301 /* SwiftChart-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftChart"; - sourceTree = ""; - }; - BE686A1712D588D3583AB99B2E45536D /* Support Files */ = { - isa = PBXGroup; - children = ( - 4454874BDA6C240BEC5ECC1610A46832 /* FirebaseDatabase.modulemap */, - 6A107196D4B3E10BBF7082F6BB64DE8F /* FirebaseDatabase.xcconfig */, - 59EE1EB5EDB6D0386D244460AD468670 /* FirebaseDatabase-dummy.m */, - E568AD223B636055BCADD93E5CBD699E /* FirebaseDatabase-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseDatabase"; - sourceTree = ""; - }; - C3581F726269D514E5D2B13EC19DFE10 /* Alamofire */ = { - isa = PBXGroup; - children = ( - 796D14C630D8812D2DCE28B605FC4564 /* AFError.swift */, - F2817712D14124F193818D0195281148 /* Alamofire.swift */, - 1EDFA25CA7B170D7E62F384298B2DA9C /* DispatchQueue+Alamofire.swift */, - 3C986E51C8A5D6AA268C2B5C679439D7 /* MultipartFormData.swift */, - 296659C5638CAF0191D8D60039C7A4DE /* NetworkReachabilityManager.swift */, - 994E34C59DB8E9DCF98E5A5EE5489AAA /* Notifications.swift */, - 39CD106DAA14CF78C23C7060CE05739E /* ParameterEncoding.swift */, - 6287EE2E2EBB2F65A34E83E0ED37A309 /* Request.swift */, - 2DC347A6ED7C92D386603D2735988B2E /* Response.swift */, - AD36562FCB3CAC1CDF829BFEF0FB6CFD /* ResponseSerialization.swift */, - 85BEE294468499CAB9D040C75CFB6879 /* Result.swift */, - 1D8BA7FAB9088209FF49CF19669B6A8D /* ServerTrustPolicy.swift */, - EE5C428F3A3B7B6D673F2A48706658C7 /* SessionDelegate.swift */, - C92E165878030D6059C424B9B1951E29 /* SessionManager.swift */, - 7EA0E86840087A2F988191982AEF7BE4 /* TaskDelegate.swift */, - 3419E8890B5ECC68471FF7152A9D3867 /* Timeline.swift */, - F0D1DDC4A6C31D6F3FDCE41C7CD4BD2D /* Validation.swift */, - 14AEB16459037B1D455526B0EAC33370 /* Support Files */, - ); - path = Alamofire; - sourceTree = ""; - }; - C38DFEDEC19B483A42FFCD4802304643 /* Kingfisher */ = { - isa = PBXGroup; - children = ( - AC505C9440C7D4BEAA2918C701E0D1E0 /* AnimatedImageView.swift */, - 0E0FEF05B614A195E9DF14BD40E5A30B /* Box.swift */, - F9ABDA150F8FCB5586804EBB396E825F /* CacheSerializer.swift */, - 101E7D7A3849AF8379E44C24618B8570 /* Filter.swift */, - 1645A9E9EEE934729E23AB96051EB3AD /* FormatIndicatedCacheSerializer.swift */, - 3209A5685F06611A1F5C751F8845366F /* Image.swift */, - 4D23F10C68371CC69CFDF6EDFEE2FC50 /* ImageCache.swift */, - 6BA71F18701F565C90D0804B16EE5F84 /* ImageDownloader.swift */, - 84B5E0BD4A534DE8672E0ECCC5B57062 /* ImageModifier.swift */, - 6DBA4949E4537E73554B770BD9FCD696 /* ImagePrefetcher.swift */, - F7A0EF2088DBAD9A780E518DC022003A /* ImageProcessor.swift */, - 7BFDFA14359B1B0BEE2CA0ABDC4C58B3 /* ImageTransition.swift */, - 7DD6C39190CCBFB2CC1FC01CA4F58CEA /* ImageView+Kingfisher.swift */, - AB354B2F7FC0718FC09C1C020E00D73F /* Indicator.swift */, - 701681E97FC378477898782FA5C80933 /* Kingfisher.h */, - A71BAAB6BB2A78F9ACDEA00D68266E01 /* Kingfisher.swift */, - 3B3AA80D8B2AF7C36A131F15E22D7503 /* KingfisherManager.swift */, - 2CC7B9007790C3A994D2A077B2A10C42 /* KingfisherOptionsInfo.swift */, - BDCA84FD49BEBABF9E067C2827A9E33D /* Placeholder.swift */, - 54B6FE265FF633C4B985BC1BA1BC027D /* RequestModifier.swift */, - 4F2C92932D029D32CCE07BD577973029 /* Resource.swift */, - F0C497181F13C716F7C4EBC2AAA343A6 /* String+MD5.swift */, - 3823BB85C260F0B5558755549E60251A /* ThreadHelper.swift */, - DA12F09478DC61C0A6342F9C486EF289 /* UIButton+Kingfisher.swift */, - 080D194E73166F77137479721FEA2F8E /* Support Files */, - ); - path = Kingfisher; - sourceTree = ""; - }; - C75728778401CBA49E2E96F18E9E43A4 /* FirebaseCore */ = { - isa = PBXGroup; - children = ( - A68C55C04B542FE304E7B417B1BD6D00 /* FIRAnalyticsConfiguration.h */, - B854E348078BB064C1A7930A6131C5FA /* FIRAnalyticsConfiguration.m */, - F8F6F94C2E3D8C837B8CC9E7DDF471CF /* FIRAnalyticsConfiguration+Internal.h */, - 5B76C34DAB2C4FAF6245ADBF3CC9BD14 /* FIRApp.h */, - 6D3CE21281F234A7CC3F0C5655C24097 /* FIRApp.m */, - 9DCA4497DF78553D1239B754708C2CB9 /* FIRAppAssociationRegistration.h */, - F8DC957A7E9E4767AD118CFEC226B886 /* FIRAppAssociationRegistration.m */, - 5678876753C0D72CCD71DE8D71ABE2D7 /* FIRAppEnvironmentUtil.h */, - 5EC37ABFB101C5CFFD17423D93AB7C6F /* FIRAppEnvironmentUtil.m */, - 5A3C7DFCABE213768DFF8B34B4286677 /* FIRAppInternal.h */, - 133E1CBCA9D4227BA0693421D24078B5 /* FIRBundleUtil.h */, - A1D45D2E35C892676FF4C6063859015E /* FIRBundleUtil.m */, - 23F60B0C684B89763846E2F8FF9A007D /* FIRConfiguration.h */, - B241A34EB7306BCF77878A8D266F416C /* FIRConfiguration.m */, - 4351F9D1008713ABC051703842527BD1 /* FirebaseCore.h */, - 6253B6F08C1C7483ACD03327448E082F /* FIRErrorCode.h */, - AA84C0312A0FE59EE3266F53E20785E9 /* FIRErrors.h */, - D8D5C12768B4509B8E069E019A2AF140 /* FIRErrors.m */, - 580642BDB2A550A0A752100C1BAEDD62 /* FIRLogger.h */, - B11E28DD6F22A848433322EE62C82A0D /* FIRLogger.m */, - 022F7A2E011A1E1354FE0BDC21A7CD66 /* FIRLoggerLevel.h */, - CCDBD9A006F118C43699D882889419C6 /* FIRMutableDictionary.h */, - 36BAB10C547C609FD6ADE9F03AB68684 /* FIRMutableDictionary.m */, - 60CE8BE9D8110D3D1BD11AF01584255F /* FIRNetwork.h */, - 3B61F0E6347F886A15B6123340937E6D /* FIRNetwork.m */, - 7CF285C720B7E99C27DE9EE39CF64F0C /* FIRNetworkConstants.h */, - AB093E52CEE6389EE9A0049CB4AB92D0 /* FIRNetworkConstants.m */, - E0FE3457ECF74D7276A964351CDB65C4 /* FIRNetworkLoggerProtocol.h */, - E2C88860B94B8599BDF9BE6D8FF30EC7 /* FIRNetworkMessageCode.h */, - CAB101BD0349A15D67E3E402F78CD62E /* FIRNetworkURLSession.h */, - 7EEFEA8CE983E6EE050FBF782D98B79D /* FIRNetworkURLSession.m */, - 26B2AF4FE85BC2B05F422DD7CFCECEAE /* FIROptions.h */, - 570D4872F753E82842DDD66B6A81DB10 /* FIROptions.m */, - 17D7473FEC7E4B09268EA7A1117ABA72 /* FIROptionsInternal.h */, - 273D0275517578F12DFEF2A0A0543B47 /* FIRReachabilityChecker.h */, - A2A07B142B800725A2FF3BFD9BE0E748 /* FIRReachabilityChecker.m */, - 7CED8D21E7C53ED13858B3B607897C0C /* FIRReachabilityChecker+Internal.h */, - 80E58255240BCE83C15FD794E52C3F01 /* FIRVersion.h */, - AB5E6538AECFF5B077FB238B5106FF95 /* FIRVersion.m */, - 698E442A89B74629E231AF6E34F08677 /* Support Files */, - ); - path = FirebaseCore; - sourceTree = ""; - }; - C9EBF17A5A7D37B0C1FE5714AF197D87 /* SideMenu */ = { - isa = PBXGroup; - children = ( - 25ABAE281B9B85515231C787D50B50C8 /* SideMenuManager.swift */, - 4C7BC07DE3D0650ED280F57F67EC1995 /* SideMenuTransition.swift */, - 91616CCF5C4E910975ED0143C9C9FA25 /* UISideMenuNavigationController.swift */, - AA0D50CD1AFF150D598303B5E53DD1E5 /* UITableViewVibrantCell.swift */, - DEF91EADEEE06F212B7B54F802EAF35A /* Support Files */, - ); - path = SideMenu; - sourceTree = ""; - }; - CBCFAB8F8E56842C5F81CDF371893F18 /* leveldb-library */ = { - isa = PBXGroup; - children = ( - F95DDBFD616330F5F6A67C5AED7689FE /* arena.cc */, - 9C03BD85ABC64CD186A121936AB36741 /* arena.h */, - 4E5E5A2031B2F2B7760AC0A33A47EF55 /* atomic_pointer.h */, - FFCE7CA270F7F0DFB617B70FD87B18EB /* block.cc */, - E42E40A46046AAEAB2CF43E6BE431B4D /* block.h */, - 3CF4365D76D4198C829B63404CF2ED16 /* block_builder.cc */, - ECD17D826CB656882BDB7CF28C25FC53 /* block_builder.h */, - D7C07886487C9B20E65BD7AD53E112B5 /* bloom.cc */, - C7B99F8FA3F243BC1099392A1B205536 /* builder.cc */, - BE5F6CB39824A2A5A61EF738AC42BD80 /* builder.h */, - 4286EFABA0810BD8CF4B7BD2281E6F04 /* c.cc */, - 201641656CA6857B14FB8FE9DD4054BF /* c.h */, - 5E3D6102C57EEF32AC91519BC2D70655 /* cache.cc */, - D5588A38A55AD18D6C3C1BE58C6BC3DF /* cache.h */, - D8FDDE7CCDB2A7DB50BC6DC4EB0D5830 /* coding.cc */, - 84421758A9D8BDF43864192E4D0CE548 /* coding.h */, - 1B3DC33DF5A79E4952AA173236099A85 /* comparator.cc */, - 4887B8B0CF7F087448CFB1B1B9B8C687 /* comparator.h */, - 7F8B89BBE9BEFAC7A8E97AF53F8C835D /* crc32c.cc */, - 7913F86A702F9C8F85472BAEC81459A5 /* crc32c.h */, - 3194D3992438F30D90F545F8B6BB8776 /* db.h */, - D817CD58242817C291BC0EE8E586CE72 /* db_impl.cc */, - 1AF9D3741DFBB014DF4F19195C830C0E /* db_impl.h */, - BB28107EC523C61FEA83D2BCB930E3EA /* db_iter.cc */, - 6E11CEC5A1750DA6841C79BA06EEAD46 /* db_iter.h */, - C0C4473C03F31586B5E1C684CB5E37AD /* dbformat.cc */, - 14B5B683844392A4519974BDECD2FE0F /* dbformat.h */, - B91BFACE8211274ACF860C0D633441BE /* dumpfile.cc */, - F78803667E6C83A5A8660CA29D277FAA /* dumpfile.h */, - 011170F025ACC6E045835611E6E339C6 /* env.cc */, - 0EE074BDDBCA5D7ACBC1D565DC19B0FE /* env.h */, - 0377ECD853047ECC66C472A94B29E043 /* env_posix.cc */, - 5062AFA7A17C69061B025939D60DBD22 /* env_posix_test_helper.h */, - 0E09B6B7C23DF784C8949C2D5EB5534E /* filename.cc */, - 98F855CE72F3685AF9024F0DF90F3AED /* filename.h */, - 9C6EEEA8B6E6845C85916F0B2DB5D00A /* filter_block.cc */, - D8D642261B2D226636A09E4CBA0215C9 /* filter_block.h */, - 0F3F404F9850B2CB2CD2B23BD179771D /* filter_policy.cc */, - 316EC660ACCEC0B560483E4DD14BA386 /* filter_policy.h */, - 57D9077B48BC77A49623101CB4DE95F1 /* format.cc */, - 34D95573EC44BD0D72B1330888525CC8 /* format.h */, - DAD8F2B2547F7377B3C959D31F89455D /* hash.cc */, - F27DDA2A4FA5B93C3D2BC4D07C85F94D /* hash.h */, - 9D1A9788A71428201F949C720DA3C9C9 /* histogram.cc */, - 544C412E1BFF5BA8C01C7DA3EA8CD2A3 /* histogram.h */, - 52C6835AB19C915DDBF7304F4A9300BB /* iterator.cc */, - 8DEA2ECAD7B0C441945F043E8A185698 /* iterator.h */, - EAD2FDD9D63185D4CE0449323C8AC108 /* iterator_wrapper.h */, - A625EB10C75C7FE7267B14C0AE89A3DB /* log_format.h */, - C58D534444744028E8F2BE35D2A31AAC /* log_reader.cc */, - 9D06031E56C16D9BA725FDC59F92C4DE /* log_reader.h */, - 20B4D9D0B60E5161CCF10BC3D1E0F0F1 /* log_writer.cc */, - 88736793BE9E25AAB9A2ADE921569424 /* log_writer.h */, - 0199999A928BD098252EE9E3E7996064 /* logging.cc */, - 60A19E52AC2DF8B18AA847F2F20E2D2F /* logging.h */, - 7628D1777E7034B427095448AFF65A1C /* memtable.cc */, - 0B51BC483E61688364E86FD7AC9706CD /* memtable.h */, - D395886C18262575291F9C963CB4F203 /* merger.cc */, - 48E989AA5700F2285C547EB9FFEA04CE /* merger.h */, - 31866ACC5E21CEE03E543BB6578BDC03 /* mutexlock.h */, - 825761CCB49BEA007AA06F02FCCE907D /* options.cc */, - 7A1DE1315A11CD023158786D3187DF8C /* options.h */, - D0C1B13116923C2FCCD5A6CD8F138C0D /* port.h */, - 97556BF680D73BEE50BC370237CE2ED1 /* port_example.h */, - 743CCCB96F2E9E1F74323049669C8766 /* port_posix.cc */, - B8570446709CB77262045BB7C12361ED /* port_posix.h */, - 122F0EC51FF8523F396566F6A3084F4B /* port_posix_sse.cc */, - 4A6933FE1C6A29ECA799CFB8C39C872A /* posix_logger.h */, - AB37E493E6EDED38AA6799D9F5AA50B3 /* random.h */, - AA81185FC0AAD55BC670D2D4C5069EF9 /* repair.cc */, - 2F759D8E1D8B844B0E78E9AD43486080 /* skiplist.h */, - 50984D13FF239651C85D127D4A9B36C3 /* slice.h */, - D57D11057021C3E5C37A12FF04539DF4 /* snapshot.h */, - 3F1E3D0F84BB635CD5899B141258779C /* status.cc */, - CA5CCBEB25184C290D089BE2CA188BCC /* status.h */, - 5EB2568CD43E1E978DA697D64C2E0CAE /* table.cc */, - E49FC6F17A125CD5AA7F1DFDAC5B02E0 /* table.h */, - 3937C1C917C4F53ADE64AF1D80858EE4 /* table_builder.cc */, - 21BA4F344F529178CDFB1ABA0D06908B /* table_builder.h */, - F2018E3AE5464446EA4FD27F6BF756A0 /* table_cache.cc */, - FE237A3FA67FD7E1361EE75D555E1F5C /* table_cache.h */, - 02496D195F2F0DDB1BBB92482BD1C8E9 /* testharness.cc */, - B687AAB9C24C10BFBD7EE58C5778AEBB /* testharness.h */, - B9AD49071C4F923C790D340FAE15064A /* testutil.cc */, - 3FEED253C14771AB979BE87C47893FD4 /* testutil.h */, - 7301F254EF0E1C7E917EA5B3B21726FE /* thread_annotations.h */, - 5B87D1659FE9B26E6CCB17A4949B8CE8 /* two_level_iterator.cc */, - BE2357C0B1A5BD4EC81436E3CDC3BE3D /* two_level_iterator.h */, - 1CF2F0A013889808BB697EF589C270E2 /* version_edit.cc */, - CCBFFB66381C8D0BCC92EF96CCE5A0F5 /* version_edit.h */, - 74E7929741A42451CBF6BBD492AA09EC /* version_set.cc */, - 21E0CE12FC42A620B6C0D721C835CC2C /* version_set.h */, - 904A85DCC0C31F485625F9429B5A0288 /* write_batch.cc */, - BC241B3ECDADE20136BE7F095C362C55 /* write_batch.h */, - 2535470B099987084D42AD7FC9199290 /* write_batch_internal.h */, - 74C82651CED5889CC34A4BBC002EB902 /* Support Files */, - ); - path = "leveldb-library"; - sourceTree = ""; - }; - D2892E868AED7C051038013C68C8550F /* ChameleonFramework */ = { - isa = PBXGroup; - children = ( - 3EE19486B2CADE9B6CC692941AF9E442 /* Default */, - E42239220E689BC0E4C61DF97C079D5E /* Support Files */, - ); - path = ChameleonFramework; - sourceTree = ""; - }; - D83064310FEC725667BE71D6B45AE277 /* FirebaseAnalytics */ = { - isa = PBXGroup; - children = ( - 6950AEA311B700F097ED8BBA393324CC /* Frameworks */, + EE775580138483DA166534FF1373BBAD /* Frameworks */, ); path = FirebaseAnalytics; sourceTree = ""; }; + BC0BA923C8D6D99521A1CE4FA8B5B731 /* Headers */ = { + isa = PBXGroup; + children = ( + C73FEFAA3CDDDEC0013655E4316A9DFC /* NSError+RLMSync.h */, + 7612B8886297ECA57B9853F437A7F196 /* Realm.h */, + D7333BA6FC2F09AF434AABBB50A768A3 /* RLMArray.h */, + 4A97DA2E87AF4AF800CFD58F98F4B30E /* RLMCollection.h */, + 74B094E3EC51E25F052BA9E2382D7605 /* RLMConstants.h */, + 7E3C68A8338F859194C1124BEBDCB0A5 /* RLMMigration.h */, + F68EED2313969991AF9FC6F620CECC42 /* RLMObject.h */, + A3F41AC1060BEC0F8FFF9670D0AE6838 /* RLMObjectBase.h */, + 7C3CCD25881233655EC34CC8FC36927A /* RLMObjectBase_Dynamic.h */, + 041186F74B1C4AEC7DE643D8D7F780F8 /* RLMObjectSchema.h */, + D3A679ED21E151A6BFA4CA8AD8F4B5A1 /* RLMPlatform.h */, + 4A562F06B8609FC8463FB76916809389 /* RLMProperty.h */, + 0B2C3EACECBB4D5A059E18B27FC65F01 /* RLMRealm.h */, + 49083177C89E42C5AFCAAE6801E470C3 /* RLMRealm+Sync.h */, + 224372ECAFA42A4C308C2D50769DC77D /* RLMRealm_Dynamic.h */, + 2A132F01DDE0C5955D7C9BBBA204B3F3 /* RLMRealmConfiguration.h */, + DCAD53AB4741FAAE1601FCB66AABA196 /* RLMRealmConfiguration+Sync.h */, + 4C2204D4B7BAAE7C0283A04900A453A8 /* RLMResults.h */, + 57003CACD3FF47250D640C28A4EE994D /* RLMSchema.h */, + 8FBAEF6A37B78525066DB01BBEC072B7 /* RLMSyncConfiguration.h */, + D8EDB52C8867702B3E27FE68547CC43D /* RLMSyncCredentials.h */, + F5761ABBE7D34859F6873ED5001D20F2 /* RLMSyncManager.h */, + 37266CD26FD5C3B0080BAB63BC24AFE7 /* RLMSyncPermission.h */, + CC0FE1D3D6B8E4106E4B413EC52CC098 /* RLMSyncSession.h */, + AA99CE8E6673012F7549400C8B2E9419 /* RLMSyncSubscription.h */, + C3D389BB45620221D213E040D3CF144A /* RLMSyncUser.h */, + 79354ADC42B200C248C8124D60CB81E6 /* RLMSyncUtil.h */, + C2116FCC7B75EC60A136A777856980B9 /* RLMThreadSafeReference.h */, + ); + name = Headers; + sourceTree = ""; + }; + C51212A4ED2E92073520B22B9EF12232 /* Support Files */ = { + isa = PBXGroup; + children = ( + 468DFF9A4ABBE8AFEA1CAE8415194F96 /* Charts.modulemap */, + CBCA6255F1DE02624BA7FA9019BD8850 /* Charts.xcconfig */, + 8787C588B6C7837C4E9688C8C999C84C /* Charts-dummy.m */, + 32ED3B43377B30A557082FF4A1F8E418 /* Charts-prefix.pch */, + 55528499E664DADC6B16CAE2401E1A47 /* Charts-umbrella.h */, + 9578E32874352EC3F5E46BF1C17166C2 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/Charts"; + sourceTree = ""; + }; + C6BEE6B4C530342B54AFA68FBF7AEF30 /* Support Files */ = { + isa = PBXGroup; + children = ( + C872EBF9458B7F5F6E048B5E9BC874F4 /* Alamofire.modulemap */, + 1C7B3474211DE26FB22A569661DFDF32 /* Alamofire.xcconfig */, + F8E412C3C35C8F506CC0DAF9C8CA69F6 /* Alamofire-dummy.m */, + A3BB17321FC1AD6A6CD741F31D119655 /* Alamofire-prefix.pch */, + 531CC9C9E4B5A7BAC1389D1101788CBC /* Alamofire-umbrella.h */, + 92FC2E5B1068BCFE8E31DDAD713D90E0 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; + sourceTree = ""; + }; + C729B594D6379382DEF4B34C7F090A65 /* Support Files */ = { + isa = PBXGroup; + children = ( + 5942D12055748C28C70B1DA7617F82AA /* Info.plist */, + C639AD55BDBC96777856DFBC54D030AD /* Kingfisher.modulemap */, + 7936A56936DC138ECD9CF9EB11566720 /* Kingfisher.xcconfig */, + C4045D05301ACDC8D67975D7EBB040EB /* Kingfisher-dummy.m */, + 2FA00D6E3B238AF862DF4EF298FF9E26 /* Kingfisher-prefix.pch */, + 36E13BF49B439761787CC6DDCE1798F5 /* Kingfisher-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Kingfisher"; + sourceTree = ""; + }; + CA5B4DD21A2C0348C262A1185970A2FB /* Resources */ = { + isa = PBXGroup; + children = ( + BBB3EED3CD4E1A63496DBC24426DC400 /* SVProgressHUD.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + CFEA668605AB0FAE98AEF6A2E8D6BECA /* NSData+zlib */ = { + isa = PBXGroup; + children = ( + 2CC87E8DFFF489B5DD3DC02CD07847AA /* GTMNSData+zlib.h */, + CFF8E6C18622FD5C83FD69B0DDAB5823 /* GTMNSData+zlib.m */, + ); + name = "NSData+zlib"; + sourceTree = ""; + }; + D1749E0675B64E1435ED28DB7C532D66 /* FirebaseInstanceID */ = { + isa = PBXGroup; + children = ( + 93C9EDA4FA3582EF730905049ECB5C49 /* Frameworks */, + ); + path = FirebaseInstanceID; + sourceTree = ""; + }; + D4FAF89DBDD01C51F843FE2A2C7FE9DC /* FirebaseDatabase */ = { + isa = PBXGroup; + children = ( + 8DE4B04A2D8F3845CB79A83621AA60EC /* APLevelDB.h */, + 2D984D136EC467110E22895C4CAD8800 /* APLevelDB.mm */, + E06EB00A4344BF2F2868A696D27FB88D /* FAckUserWrite.h */, + 2C3645ECCA826261E84A744D29DC5C0D /* FAckUserWrite.m */, + FE94EC3F2DE0FAB11166955BB0245B5B /* FArraySortedDictionary.h */, + ACB8C72CD0383F34B37DC2CD7DA6BACA /* FArraySortedDictionary.m */, + 90DFF4F552B983996A7FA6E20710FED8 /* FAtomicNumber.h */, + B60D24A57A4B635AE47AD479076959BB /* FAtomicNumber.m */, + F35C5BBD2933B004BF1EDF9D6E02A70B /* FAuthTokenProvider.h */, + C625C91DCDD9D09FA9160B1C6DBBB357 /* FAuthTokenProvider.m */, + E0211EBEE4C7A49C7AB45756E6F92459 /* fbase64.c */, + C3D87E2DAC9848D75EA38E31FD947BB5 /* fbase64.h */, + CA5127DB94209D260A1EAF579CAB7D80 /* FCacheNode.h */, + CC52069FAC7F19666FD143219161E54D /* FCacheNode.m */, + 802DF4CEDE7115D1ED4C4627ED0B1A13 /* FCachePolicy.h */, + C4087F474248E1C1BECA11C887779F7F /* FCachePolicy.m */, + 56792BC7071A111C79B8BD42F3C1ED6D /* FCancelEvent.h */, + 17C044F8C75D24171E753854F781D0C2 /* FCancelEvent.m */, + A46A76226DFA3973A17EB6AEBE54A5D9 /* FChange.h */, + 07FB6171E53CF3738BC9DEC1338741C6 /* FChange.m */, + 5CCDB8ECA2E54160B580831DF1D5B80A /* FChildChangeAccumulator.h */, + CC08C987D982C1F212823CA4307970AF /* FChildChangeAccumulator.m */, + C60CF237B58C0BA996D6C0CB5B651F18 /* FChildEventRegistration.h */, + FFE2AFC2422A907E0C9C94A2DFF53710 /* FChildEventRegistration.m */, + 711DFD2FE2B424741E88BB4E596C1229 /* FChildrenNode.h */, + BE145A8B33A90F0E9B80C0BAEDD6449F /* FChildrenNode.m */, + 528EDFE4FDC447F1BA0D26180ADD0D7F /* FClock.h */, + C3699ABB00BA59D8641DCFB0DAFC86DC /* FClock.m */, + 75D9A17D3F1B383B2D2D7B66C7DB622F /* FCompleteChildSource.h */, + D5E98DABA67CCEBAFCBD865D76427C4A /* FCompoundHash.h */, + 504474BF763B534B5FF9F5704D2CFE10 /* FCompoundHash.m */, + 5C0DAF1ECF2F7FFA6FA81DB69E752441 /* FCompoundWrite.h */, + CE149580214F854CBC53C049ED237ED0 /* FCompoundWrite.m */, + AF5CA06FB9690D72D6F56294BC5BE968 /* FConnection.h */, + B370A04FDDC02FA784A3721908D1CD55 /* FConnection.m */, + A7A0C8331B4F3C196AC4C39F581B4062 /* FConstants.h */, + FC9DD5792A6E971BF0253FDAE139DD25 /* FConstants.m */, + 0444D8A27B25779CEAB828ACDE64BAF1 /* FDataEvent.h */, + 5A54F9668EA14903A17AB13D39065456 /* FDataEvent.m */, + C9F6D122CADF2A18DDCE41FB31FE5F56 /* FEmptyNode.h */, + 8AF2EF0668BE38CC1D6E516827CF5037 /* FEmptyNode.m */, + 0CCC91E1E92AEC4C530F1AE0956D1100 /* FEvent.h */, + 4510F4AED388F9675FCF452048EA5D63 /* FEventEmitter.h */, + 65EE173CD6482270A5F2AA2127830541 /* FEventEmitter.m */, + 78B38305A403CF3D484D33D89933A4F9 /* FEventGenerator.h */, + B6EA5CC11C004A5AD734941C6991C78C /* FEventGenerator.m */, + 2E6B7CC96CD5AA76DD12A439130B6611 /* FEventRaiser.h */, + 544F7AC0331A63D207A551A46D75D0C6 /* FEventRaiser.m */, + 46AE74B10F7C0E252596929E9503E189 /* FEventRegistration.h */, + 118C5C1C8CB52ADF89DE45F265E1F838 /* FImmutableSortedDictionary.h */, + 1D702E515A27CF01ACC7748411B323A4 /* FImmutableSortedDictionary.m */, + F07CC73F5FF404CE850436C15AE45CCC /* FImmutableSortedSet.h */, + E3C03A08FBA9AE8AAFA947AD2092F07A /* FImmutableSortedSet.m */, + 4B16B973E6095AC39F1A58423A4B794D /* FImmutableTree.h */, + 6446432053311D524A460ECC7D73DAD8 /* FImmutableTree.m */, + BCA49FE548704E67BF70796D86854682 /* FIndex.h */, + D38615B33B60544099B4605E2442A40B /* FIndex.m */, + 9E76B46C555DF849442BFFA9754C7BC6 /* FIndexedFilter.h */, + 7F099B740609AB599E6284B793EB85E5 /* FIndexedFilter.m */, + 2F5F203A63679CF16684B77792FF7F9A /* FIndexedNode.h */, + 58BECD9DFE76D092DFF483F95F776051 /* FIndexedNode.m */, + 5BD4D9A43441A9345D06FADC12FCD86D /* FIRDatabase.h */, + 37E12B6FCBA64AA69BBC0C69C20791A7 /* FIRDatabase.m */, + C62BEED4AD91CC42CDE2465E1E454971 /* FIRDatabase_Private.h */, + 7410C99F41C1D0EF8889CDB35AB1D7D2 /* FIRDatabaseConfig.h */, + C6951C33D6394A62BA69340DEE879DE7 /* FIRDatabaseConfig.m */, + 558FC549A76CA0190F89A7A432101B05 /* FIRDatabaseConfig_Private.h */, + 8E7C344E3090DBF2569D710383CAE4F0 /* FIRDatabaseQuery.h */, + E13C55167E7C43E08ACFF3C1C5DECDA7 /* FIRDatabaseQuery.m */, + 823F49DE7F0D55893A775A770C6FEF80 /* FIRDatabaseQuery_Private.h */, + ECA5B33E77A81E1B638BD533007AE692 /* FIRDatabaseReference.h */, + 48911F3D7CC70E74BC850BF429644753 /* FIRDatabaseReference.m */, + 9EBDA8379067C22D8BB9A65D2C095F6B /* FIRDatabaseReference_Private.h */, + 19E3AD3BF9A76E328E1108AEB019FFFE /* FIRDataEventType.h */, + 8E5D887055BB8A66417BED95CFE1A7F8 /* FIRDataSnapshot.h */, + 375FDBDD269DC8FE8E87898CECCB23F5 /* FIRDataSnapshot.m */, + 0C3BC82ED552CDE2F0B6AE44580EE2C9 /* FIRDataSnapshot_Private.h */, + 51BF77D591207B5470F262B46F4B22B0 /* FirebaseDatabase.h */, + AB83029602BA522C9332382DB573B27D /* FIRMutableData.h */, + 81CC21A6AB646F4422180E0373894A61 /* FIRMutableData.m */, + 55B7A09D32E5044BB16ADC8E7EF9B0DC /* FIRMutableData_Private.h */, + 9371C403F279FD7B8D4D8B8662761FE2 /* FIRNoopAuthTokenProvider.h */, + 7FDA66C5596A9622CA9B7C57949A38C9 /* FIRNoopAuthTokenProvider.m */, + DE087804912A4BCB19C1BB22EBA1F44F /* FIRRetryHelper.h */, + D9A2CB8DF34EA0B8B63FACCB0C172276 /* FIRRetryHelper.m */, + 46E25271D410A774F194F1F10C39DA7B /* FIRServerValue.h */, + E98B7F16E1968C0F5B2827BDA7982C53 /* FIRServerValue.m */, + ABC670FBD5E8B2397A4506CBA3D8AC1E /* FIRTransactionResult.h */, + DB74BFD13F355F3BB311B7C64A76FBBB /* FIRTransactionResult.m */, + D6069901D3C9E63450F8E563A49E6399 /* FIRTransactionResult_Private.h */, + 51857F69494E751F1292917527853C26 /* FKeepSyncedEventRegistration.h */, + 98C6C1DC67FE6FB631EB13328618D290 /* FKeepSyncedEventRegistration.m */, + 5312F1C9F18FC20E19E99A8D8A2EA64F /* FKeyIndex.h */, + 7352B886668E86A68A4EFA8A6C97CB54 /* FKeyIndex.m */, + 362650F9E56450FD8BF4CD45E583431E /* FLeafNode.h */, + 429E85852D2E482D63FA507AC1AE51C5 /* FLeafNode.m */, + 2E6E79E4292D1C39541705A2F37D9CFA /* FLevelDBStorageEngine.h */, + ED25B59214967FE279B4715D47C53229 /* FLevelDBStorageEngine.m */, + 10243194FB421B2207E4E7CFEA42DD5F /* FLimitedFilter.h */, + C128C65B7BD192BC8DC373D234DE137C /* FLimitedFilter.m */, + DC0CBB71E6642D5995887E7E83013BCF /* FListenComplete.h */, + 05BCF2B6824F3D6AECED62E135D82C12 /* FListenComplete.m */, + 2D4904E5E343C601FAD9F45EC07DD8E9 /* FListenProvider.h */, + 8CD47D2199FB043E90797A0EED88DE5E /* FListenProvider.m */, + 287F35AA416E82C14EC56D5D7EE2456B /* FLLRBEmptyNode.h */, + C7873C4FCCE3800FCA330A84DA3846DE /* FLLRBEmptyNode.m */, + 0657F248C972537EE50A6586504ECB94 /* FLLRBNode.h */, + 6A3FF4D9F6D45AEEFD3B7A5B6223B228 /* FLLRBValueNode.h */, + EFC5008C82A789C5CE54CC603CD45792 /* FLLRBValueNode.m */, + 6B432CAA766CF17D9CABEE0B7462B083 /* FMaxNode.h */, + E8F1E1E998443D17EED1A4B847684070 /* FMaxNode.m */, + 0DB0848330CEF5107A832A155104D6B0 /* FMerge.h */, + E070B50C219F0362825D7D9524B1EEFE /* FMerge.m */, + 3C30AB285FB1E27391F35624231CAF69 /* FNamedNode.h */, + 684BCEEF0473DF6E9AD890F510F8F754 /* FNamedNode.m */, + 40ABF03F2985E93BB3E380F12A39EC3D /* FNextPushId.h */, + 9D34C37E819E168E7E98D1AF3B56A88E /* FNextPushId.m */, + E2ACEFF5E7DE1A21254CD3E5D774B7C7 /* FNode.h */, + F71A6D520394229A328EE1222F948243 /* FNodeFilter.h */, + 9CBB5AFA0FFA2140562338C10AB62AC6 /* FOperation.h */, + F7E2D986345FEC7FFDEB3BB552A17AAC /* FOperationSource.h */, + 460D3C961A1A8EDF95CAA7B40EBA41FB /* FOperationSource.m */, + 07093C7D6DA5E12EE853618511C3670F /* FOverwrite.h */, + 0B1D1A30BE87C5658205E09FF83A7CB9 /* FOverwrite.m */, + 02B38DCB18E5386EA2F64B0DA37AEF11 /* FParsedUrl.h */, + AAD5864C01446FB069A13761DDF0EC7A /* FParsedUrl.m */, + D4D40227F5A0D254B43A099C8CE79364 /* FPath.h */, + 73EE77F1500EDC920D3EB0A80643F425 /* FPath.m */, + 033FC3396ADB83FC83AA7513D3D464A1 /* FPathIndex.h */, + E064CCF1C6E56D95FA19C00293E43572 /* FPathIndex.m */, + 66883986B03E5507A4645CD60569DB85 /* FPendingPut.h */, + 1E0A0CCFA3173BDDDABA9DA3E0DD3058 /* FPendingPut.m */, + 5662A1B421C5649BAE47116C8FE0CDBC /* FPersistenceManager.h */, + E91666D8D4E7C8B71DC998D1FE5619E9 /* FPersistenceManager.m */, + C2DD1DF7A3FA1D772ECC96AD9E245F65 /* FPersistentConnection.h */, + ACF983B4340DAC23633B0CA21BF9F653 /* FPersistentConnection.m */, + CD07664D2740A69675520BA0C3A1E032 /* FPriorityIndex.h */, + 21E20683F3B793D3A157713ADCCC4326 /* FPriorityIndex.m */, + DB268EE51269AD46437C65F33C5A4EA9 /* FPruneForest.h */, + 1740E3878E8152AA3495EDC1CC4F9584 /* FPruneForest.m */, + 87D9AC6D54D56176799916C939C2B1A0 /* FQueryParams.h */, + 1C593131F797D7DAC1039F2AF3698863 /* FQueryParams.m */, + BFC65C3D6DB1260D4CC718E3EEC5EA65 /* FQuerySpec.h */, + 2A2C2720C0CA75A68F8506D31EB8D003 /* FQuerySpec.m */, + C09029D3DB98EBDD87D510D1426597DB /* FRangedFilter.h */, + B741DFC3C45A74D75650D19D61CD0AEF /* FRangedFilter.m */, + 6D318FEDC73AF9331208167D90056B21 /* FRangeMerge.h */, + 7CCCDCE5180D72EF2A7915476786F336 /* FRangeMerge.m */, + 2FB073AF368B2BF119966220911E6F33 /* FRepo.h */, + E8806A8174D13CD9754D866166DD0562 /* FRepo.m */, + 0D938EB4D6C98B5A964DC2761E5E149A /* FRepo_Private.h */, + 165CDD1930D875689EAF18ADF9ADE087 /* FRepoInfo.h */, + 19179E5A68C85D49ECAECC019BDB8A33 /* FRepoInfo.m */, + 6575B78732C20726AA220886A00AF875 /* FRepoManager.h */, + F9E15F476463A05F8A46ADFF9C3DF892 /* FRepoManager.m */, + D5FFBB0A4527F0757086AB0E0521E0A3 /* FServerValues.h */, + 6C33712F92C7752493A4300C441EC30F /* FServerValues.m */, + D09C66AEBEC0BBBE11336D46DA3ABCD5 /* FSnapshotHolder.h */, + 7A3844CA270A7CED9BA4790A5AC267BF /* FSnapshotHolder.m */, + 9EB0772386D05F7BDACEB6EFC92E434D /* FSnapshotUtilities.h */, + B01C85D6CAC5BA84135DB99162DA5918 /* FSnapshotUtilities.m */, + BA23E4520BD3ECD2C5DC5671C13F21A1 /* FSparseSnapshotTree.h */, + F8E46FB0ECD07C21DBD630231B1BA7AF /* FSparseSnapshotTree.m */, + B67762DF6B2CCF756D001FAB91FB7181 /* FSRWebSocket.h */, + 7206FA132C6B17F949B7C576BC623641 /* FSRWebSocket.m */, + D153B781C672130B02475F9561391256 /* FStorageEngine.h */, + E76EB4BCBF62A4F7F83D4708D243B248 /* FStringUtilities.h */, + A28DAF2A160B5D1689521057BC9E3498 /* FStringUtilities.m */, + 0B6785D9FB4E71F7B81001741D543AD2 /* FSyncPoint.h */, + 43A9EBC2EA34C42D100979AD4F05F516 /* FSyncPoint.m */, + 9A8626383D0431644FFE8F46D508F77D /* FSyncTree.h */, + 5D8FF575FA2846D84D47954F3EE155F2 /* FSyncTree.m */, + B3644AF3A4DE98E81CC7A4444853BF87 /* FTrackedQuery.h */, + 9A92340D6E2B4EE9033CD9212ED2C825 /* FTrackedQuery.m */, + 8A5531FDC81208AA04006520EA2E7185 /* FTrackedQueryManager.h */, + 8129D1783B9F8B482F0A3F1333A79EDC /* FTrackedQueryManager.m */, + 8734C162176FD7FDC4BF6BA3FB495692 /* FTransformedEnumerator.h */, + A1157F822DD04B416CB4882B6AE0C0E0 /* FTransformedEnumerator.m */, + 25183A1EC546EA54A19D49147C8B6C96 /* FTree.h */, + E476D088653EE4F6345064D9D149BA42 /* FTree.m */, + 2457D6701A727AD6979D51B5D4CA8B77 /* FTreeNode.h */, + 232B22E07A6BC74BA295F2C97C41A5AA /* FTreeNode.m */, + DFA920CB71D6C3CA77AEA3BEF13D02A4 /* FTreeSortedDictionary.h */, + 53695C03B289AB70B3B9A00816EC598A /* FTreeSortedDictionary.m */, + D874D0F99068C8E8D48F8B1E84D050F3 /* FTreeSortedDictionaryEnumerator.h */, + 6D3E71A2A0680457DF6E0D979CAAE9FF /* FTreeSortedDictionaryEnumerator.m */, + 6545DE771492D2A91E6EA8C24DC73884 /* FTupleBoolBlock.h */, + 016F4EFD29D57463E0529F36C204359D /* FTupleBoolBlock.m */, + CEBE5412165070041286682011D66E6D /* FTupleCallbackStatus.h */, + CB5A1C3811AEF75D8E8F537513E72E03 /* FTupleCallbackStatus.m */, + F79C9D57EEFE9D5B9E388EBB1F039327 /* FTupleFirebase.h */, + 9F8B616291715F87BC1C364C4DB58E8C /* FTupleFirebase.m */, + 5FC3F2DFACE7D51E17F7954B1EB30275 /* FTupleNodePath.h */, + 40C9941C01EE06DEF4871CA17AAB434D /* FTupleNodePath.m */, + 64F9F741EB513F18E517C47B3C5ED061 /* FTupleObjectNode.h */, + E255080150BF442FABF48724E41239FA /* FTupleObjectNode.m */, + D1BC0D33088688FFC769F42FDF6369C0 /* FTupleObjects.h */, + 3BD7F7AFEACB911C1E58BD20E01E6603 /* FTupleObjects.m */, + AD0B5F01066B2383DBD408279D73DCF4 /* FTupleOnDisconnect.h */, + 95950109422E3F22FAD616FDD4DBC116 /* FTupleOnDisconnect.m */, + BADF01B11E8540276DC1212EC4CEDAAE /* FTuplePathValue.h */, + 5D742D25253933AB27B72CF95E8CA25C /* FTuplePathValue.m */, + 5D2B01A415F7ACE81B048B713D8FE90E /* FTupleRemovedQueriesEvents.h */, + 09B005B5E8973D2C4964794D38124066 /* FTupleRemovedQueriesEvents.m */, + BC219638C7354175BD397813F460998E /* FTupleSetIdPath.h */, + 92688E0D3D7BF74B53C6FFAB522EE2E4 /* FTupleSetIdPath.m */, + 953E0852E01C51509E02B37E17E93C5E /* FTupleStringNode.h */, + 0DA43129CDEA8715DA7CA75C41476122 /* FTupleStringNode.m */, + 6D8D52701CFDD59510B13C2F46E3F311 /* FTupleTransaction.h */, + 3EA08ED63DF6DAB479975D9F92E22AEC /* FTupleTransaction.m */, + CB43310D7F163BA38ABFE29881697321 /* FTupleTSN.h */, + DC6D6429E9291910AD6517A3BEEFC5BE /* FTupleTSN.m */, + 7C0FEC35A6418184C241C03F020A5E40 /* FTupleUserCallback.h */, + 4179670FD71912E5B9D26CCEE8F37EC7 /* FTupleUserCallback.m */, + 785704FC5AE23C778C28851BB9F66712 /* FTypedefs.h */, + E5397D3D838C93324D363E3C9F189C47 /* FTypedefs_Private.h */, + EA6C777DD124804241662EA4C09C34FA /* FUtilities.h */, + A2A87D0AA1590786E0E5D4AE98740F42 /* FUtilities.m */, + 0A543BED31EFA916E944D41E476D6920 /* FValidation.h */, + 2EA181D43D337C3F302053D11C402B08 /* FValidation.m */, + 0BFA5F7AB7496B736FAE82BE675BFB48 /* FValueEventRegistration.h */, + 529F2A28F18269F592C0EF751D57B12A /* FValueEventRegistration.m */, + C2D11DACDD4299304B76DD8E9ED95E50 /* FValueIndex.h */, + DF3D1388C3208FB5654AEA752DF494DA /* FValueIndex.m */, + E2B8E74A9B829C2A9F1A358BED46E52F /* FView.h */, + D01EFBF5EAA358999E6632C5A27533B2 /* FView.m */, + BCD42C77588C659E16D289B88F0BBFB0 /* FViewCache.h */, + 097EB8A0D21FC005ED36D789FBBA6873 /* FViewCache.m */, + 5C27F19177EDA2E360C44DC25BC64507 /* FViewProcessor.h */, + 58FDFAE9DE75D7A060E752669192391B /* FViewProcessor.m */, + 0A0ED8A6481F4E1DD088861668AA47F9 /* FViewProcessorResult.h */, + 8F3E7852BF6DED7418C374015298907E /* FViewProcessorResult.m */, + E5FE37307F3DA32A61193CA00BB422BA /* FWebSocketConnection.h */, + B29E5643F6A2053B82EAB5E0EE16CFF0 /* FWebSocketConnection.m */, + CF10194636462F103D40226E0D9F68A7 /* FWriteRecord.h */, + 2ECF6930DF18520ED0FB7F63A838701A /* FWriteRecord.m */, + 46AE7A77ABF323FBAFEBAE18712E206E /* FWriteTree.h */, + FFE2786A74C94370C5D7FDD890A55478 /* FWriteTree.m */, + C887CAF83F9F233C66FE18F3B3CB5556 /* FWriteTreeRef.h */, + C6689CA6209D12C2E6AE031D127F4D09 /* FWriteTreeRef.m */, + A38E291F87A700FFB9F257E74033C16A /* NSData+SRB64Additions.h */, + BB20EFD39D833EF805180DC6142C00DC /* NSData+SRB64Additions.m */, + 04EC22394FE09B95E968628976477656 /* Support Files */, + ); + path = FirebaseDatabase; + sourceTree = ""; + }; + D612E8EA9379A3E2C150018FBBC5003D /* Default */ = { + isa = PBXGroup; + children = ( + AE8DC1AD0A1549B5FCE77C179422B91F /* Chameleon.h */, + 331C5BE3EBECEF6AE93C09CD0EDD6D68 /* Chameleon_.h */, + D1E697278816E8FEA395A13FF44BC435 /* Chameleon_.m */, + F737BE1BCBCB6589CD1E7F034A6C61C8 /* ChameleonConstants.h */, + 78A8250090CA6E2D3ACEE645413821C9 /* ChameleonConstants.m */, + A8CB66F4C4265D6CAC15AF6C79BBDDC5 /* ChameleonEnums.h */, + 188B8F3E19924A18B940243A1542DF64 /* ChameleonMacros.h */, + 5B86C85394B98DD6743DE904B7577E56 /* NSArray+Chameleon.h */, + 02567E06C0649C2B8EE728CCEF4F0CC8 /* NSArray+Chameleon.m */, + 65CE7E43891F975C07CDC076D7026F2B /* UIAppearance+Swift.h */, + 947BAA0F775DD173FC7FBC52F19324A0 /* UIAppearance+Swift.m */, + AD28420C97D32F634C3366A2227C32DF /* UIButton+Chameleon.h */, + 2F3AFDE6C4F8D8F3DE8DAEC14E749E5D /* UIButton+Chameleon.m */, + 0A5AAF9218927014A049769DDDDE7833 /* UIColor+Chameleon.h */, + 54030AD9A4B116C4E5FA0A75606E68A4 /* UIColor+Chameleon.m */, + 6A4D058B8624C835308A4D74FDA6AB88 /* UIColor+ChameleonPrivate.h */, + BE7EC5FF42BACE35E713CEBA3D81268E /* UIColor+ChameleonPrivate.m */, + C3D6011E05F28E90CE441DAEB3CFF872 /* UIImage+ChameleonPrivate.h */, + 0E14DB3EC12C588CD8998834E8254B81 /* UIImage+ChameleonPrivate.m */, + 7A2F2C82A25177D08A28BB5459B84C0A /* UILabel+Chameleon.h */, + 28F119668FF12921B1FEC53A13230593 /* UILabel+Chameleon.m */, + BE8FC91B9BE981825B89D2A22737A2D2 /* UINavigationController+Chameleon.h */, + 6E65BBDA82D1111FFEC7A68DCA3500B2 /* UINavigationController+Chameleon.m */, + 9627FD8F36F34032F218B1271FC536A7 /* UIView+ChameleonPrivate.h */, + BD6FBB26D133F3B1F2C9FD3DFF79D3D5 /* UIView+ChameleonPrivate.m */, + 034F186DEC5C318DAB5AA49B019811DD /* UIViewController+Chameleon.h */, + 186FA77A9F5A6D0915DBBC97984BBF46 /* UIViewController+Chameleon.m */, + ); + name = Default; + sourceTree = ""; + }; + D74FC2859005DEB2467962FBB0ADEE96 /* Core */ = { + isa = PBXGroup; + children = ( + B9738F72A8A19560EBD290A4D37C8634 /* GTMSessionFetcher.h */, + E85E168B41DFBBC9158E86075D7F92E6 /* GTMSessionFetcher.m */, + D07BF809C7C90AE82EEAE6E6E4CD3A99 /* GTMSessionFetcherLogging.h */, + 538DC7A94F0B68D36E8845C2A33B017C /* GTMSessionFetcherLogging.m */, + 366D8A8E2FF58285B0186633F54F719C /* GTMSessionFetcherService.h */, + EFA9A0C3EE5566683404437CECD445BC /* GTMSessionFetcherService.m */, + D116B37B4CC8790458F3EDE605394C60 /* GTMSessionUploadFetcher.h */, + B192324D1875BCED7C83FC4525773E90 /* GTMSessionUploadFetcher.m */, + ); + name = Core; + sourceTree = ""; + }; D981261BB0F95B92A913848049042F3B /* Pods-pocloud */ = { isa = PBXGroup; children = ( @@ -3409,109 +3981,168 @@ path = "Target Support Files/Pods-pocloud"; sourceTree = ""; }; - DD66D448DBFCB79DC7C92D5A843A1471 /* SVProgressHUD */ = { + DEC8A82416B03390C3012873EA7D5A87 /* Realm */ = { isa = PBXGroup; children = ( - CDF639014265922535577B76D7DD6554 /* SVIndefiniteAnimatedView.h */, - 60A348D6CFED1F1FE490C002476433E9 /* SVIndefiniteAnimatedView.m */, - 581F88DD3FFB5C907CC453A1F6B2D690 /* SVProgressAnimatedView.h */, - 7A2BDE296D8DDD93BA5BDD6A21AA3E37 /* SVProgressAnimatedView.m */, - DF4053AEB373E8A6B19592D9C08284DF /* SVProgressHUD.h */, - 44EF79207E2E34DFCC5AF186C2A10740 /* SVProgressHUD.m */, - 230529BF51BC41AE5A524A0E124E5700 /* SVRadialGradientLayer.h */, - 82121DFC73E36F57610A2EA7B5BB32A1 /* SVRadialGradientLayer.m */, - 89A43EF6F0496B6DB17D7EDA92419686 /* Resources */, - 5A3A0EC9465729E56E5655B8126AD3B7 /* Support Files */, + 0DD80A04952275F00220C6174A8ED422 /* binding_callback_thread_observer.cpp */, + D21D3EFEE79B2BCA4CB5DB1413C031AF /* collection_change_builder.cpp */, + 74ABDC36D249A915106B24F9FC749188 /* collection_notifications.cpp */, + 42C98D92A054E4BDDEB04D0D9EF190C0 /* collection_notifier.cpp */, + 891405B2B88EE4E540AF70CE9C20089C /* external_commit_helper.cpp */, + 90DF32E713CBC3C486D7DCC8D259083C /* index_set.cpp */, + BB9D30BE47311997F8AD8FECD1125ACD /* keychain_helper.cpp */, + 511CD8D08D77F4C86FFAB96B8D4DA5CA /* list.cpp */, + 3737B67C2FBF160C0F95ABA8B4F3DB50 /* list_notifier.cpp */, + 197CB3CBEBBD2E12576E0B5154D5F92E /* network_reachability_observer.cpp */, + 8CB983503C52AC6448E9DB5F554FE236 /* NSError+RLMSync.m */, + 4C9AF27BE97B3A9642D563A4E370337B /* object.cpp */, + 7C930B245950DF4367BCF0D8467CE9D8 /* object_notifier.cpp */, + 989EAF3DCA3CBD33274B002B2A4DCE61 /* object_schema.cpp */, + 1BB8AA9739245BF6F13BF252929EB855 /* object_store.cpp */, + B1318E50C377898EE6E826DF192BDE65 /* partial_sync.cpp */, + 6BE3625CD02B45E7A52596710D14901E /* placeholder.cpp */, + 4407BCC12D6454A7C4DD5EB59989CB90 /* primitive_list_notifier.cpp */, + C09D4531628D0E5BE83B17999A2F5FBE /* realm_coordinator.cpp */, + C36124615A6FB62D8AEB16AE1D21B8CC /* results.cpp */, + DFF2766440846A31FD73AAF469CB2610 /* results_notifier.cpp */, + CF772156CD908D9723EC1AC67A65F983 /* RLMAccessor.h */, + A30E60B721D759C4C218B11222B2EA7F /* RLMAccessor.mm */, + 71DC5EFBE1F1E241E8B79E9B04CF1148 /* RLMAnalytics.mm */, + F210646CCCEB64FDB5E524228B7EB9BB /* RLMArray.mm */, + EC22A226FA6EEDA3165563461A0902AD /* RLMArray_Private.h */, + 6C3ED2922BA38B9AAC4C0E77FED314E2 /* RLMClassInfo.mm */, + 3852929DA5FB50C214BFD56D757A1C62 /* RLMCollection.mm */, + 5707705EF37EA2D9FFABFF95DD250125 /* RLMCollection_Private.h */, + 8C49AAEFCD32B4B510FB8224BCD0944E /* RLMConstants.m */, + 54F42BF843090DB9B2984C9E346B5F5F /* RLMJSONModels.m */, + C0C36BFE9F8F94F4B9F0B593A4C6E4C6 /* RLMListBase.h */, + 376774FD7327BE1E1FF438C025FC4E81 /* RLMListBase.mm */, + 4B5F34983595EA471A6DB036B836CF83 /* RLMManagedArray.mm */, + 51FD4CC1F7669D2D7B4777BED9085ED3 /* RLMMigration.mm */, + 62A0B768F2064E7856A14C9777566E9A /* RLMMigration_Private.h */, + 1C25A9EF70B4577F076EEC542286CC29 /* RLMNetworkClient.mm */, + 932C05AC017722E6D90C5B9DEC225894 /* RLMObject.mm */, + 3980B565D719CE507DDDD42C78FB99F3 /* RLMObject_Private.h */, + C2961ACE175CE79C87253E003567A2B3 /* RLMObjectBase.mm */, + 98E1D1FE20785A431DB1F1A409678D5C /* RLMObjectBase_Private.h */, + 3363F7773DA62E15F8134331A08DF665 /* RLMObjectSchema.mm */, + 591D1D76F93D97B88ABD56DA3759FF47 /* RLMObjectSchema_Private.h */, + 82B6B81212097CABC380F5F7C605BD02 /* RLMObjectStore.h */, + 17A44D77220B02A8E4ABBDB177CA1A44 /* RLMObjectStore.mm */, + 9B795D6B69559419018E87951D38F352 /* RLMObservation.mm */, + EEEB3C3C89CD691258C71D9861F0EAE4 /* RLMOptionalBase.h */, + 4140CE4FD05BC15BB6B384192DF8E87C /* RLMOptionalBase.mm */, + 9B9B0512F2CB7AAE3AD87FFEC44F34F4 /* RLMPredicateUtil.mm */, + B5E17945DA126F74CD125B86CAEDD995 /* RLMProperty.mm */, + E59A62C06B2C9F2B6C1B0236FA1B0750 /* RLMProperty_Private.h */, + 7CF0301A467BA1C7EF4C001F2C36F460 /* RLMQueryUtil.mm */, + 20CCF052EE82D7B150FCD5F5B9410BC9 /* RLMRealm.mm */, + 63A5EB73F253F91E0F7BD49FFB62E8A2 /* RLMRealm+Sync.mm */, + 9520F4E98820B6F558926064876F5AC8 /* RLMRealm_Private.h */, + 0BEB6B309722C82FF0BC701A8E937ED8 /* RLMRealmConfiguration.mm */, + 1E939A429E0075D9CBD198F9A137CDEB /* RLMRealmConfiguration+Sync.mm */, + 403605E683C012ED28DE82C12480818B /* RLMRealmConfiguration_Private.h */, + 0520170A0F4165130ED1587C24B15F56 /* RLMRealmUtil.mm */, + 67965BC8AD7532C6B432E803DEB4439E /* RLMResults.mm */, + 4E0D263DD44FCE700E4F3FA23FAF0594 /* RLMResults_Private.h */, + 2434D6C0B6C4E024F00F8DEF27C2ADA6 /* RLMSchema.mm */, + AA3706862871A33BD813A2356BC006C3 /* RLMSchema_Private.h */, + F80FA5272DE2CE2206791655D881D7B3 /* RLMSwiftSupport.m */, + DCB195E78149D6A42F4DB12D06BAFAEB /* RLMSyncConfiguration.mm */, + 87AF62BD026597BFB6BEDA8E02DF8189 /* RLMSyncConfiguration_Private.h */, + 36E5BEE289ED2023AFE06214DE18BBDE /* RLMSyncCredentials.m */, + 2E7325D090D50E37131B7FBF3667C45D /* RLMSyncManager.mm */, + 3C11DC37BFB910086B7157B9D7594F06 /* RLMSyncManager_Private.h */, + 28CD9EDF9D1D1A4EE362482970394330 /* RLMSyncPermission.mm */, + B7DB66706D8B56DB5564786815B99060 /* RLMSyncPermissionResults.mm */, + DC46A1AE5BB80D97BADCD70C3B0FFDBB /* RLMSyncSession.mm */, + EB8C9AC5CE38F7A87DF1D2D68F290A1C /* RLMSyncSessionRefreshHandle.mm */, + 82F2D45183A0F738F0A97A50B934F10A /* RLMSyncSubscription.mm */, + DD2A1A5865A20D1F79C122E36B2F82C4 /* RLMSyncUser.mm */, + 4350D3A1A82200DFEAEE25B15273EDBF /* RLMSyncUtil.mm */, + 8888DC66E10879CC9EDB6F60DD99AF13 /* RLMSyncUtil_Private.h */, + DFD4F06C9C5C846C7E48A6BEB252C275 /* RLMThreadSafeReference.mm */, + 903734663D02151E18F4C148991DAAE0 /* RLMUpdateChecker.mm */, + 63FEDBEB15B81D387A20EE08CD182C7C /* RLMUtil.mm */, + 9EC0EB9F1A2B0401B210CB16F285E937 /* schema.cpp */, + E2EECF1DA495C882A42965802744F8A1 /* shared_realm.cpp */, + CD4364271A47A98B3FB8D811D9474054 /* sync_config.cpp */, + ACDFC08E51E546A5F494211E30EC0B74 /* sync_file.cpp */, + 5FFEF00FA05F4DCCD71930549CA0FD9B /* sync_manager.cpp */, + F67A0D5B25DEB08B734DFE8804DAFB9F /* sync_metadata.cpp */, + 2210E1182B560036258B75812788793F /* sync_permission.cpp */, + D62F6F9721FAA23A77D7278A9B6E70C0 /* sync_session.cpp */, + F306E49F6CBA1AE7A1A70C9D74062C88 /* sync_user.cpp */, + 998F1D1684276A1E86539A5975908D88 /* system_configuration.cpp */, + ABA858AFE0748454D151310D2B114251 /* thread_safe_reference.cpp */, + A7120604DFE5DF6ACB163A261DE13C64 /* transact_log_handler.cpp */, + 2257C36FAF75A4FB0D99C1241C6E16B9 /* uuid.cpp */, + C3D63F3C70AEB3405539CFD1711834B0 /* weak_realm_notifier.cpp */, + D6592970485F8F655D9CF7A424C8E735 /* work_queue.cpp */, + 820FDA0EA0697CEC25A73BBCC8848754 /* Frameworks */, + BC0BA923C8D6D99521A1CE4FA8B5B731 /* Headers */, + 63CE10A7EC4A89499B14DF9F054936E2 /* Support Files */, ); - path = SVProgressHUD; + path = Realm; sourceTree = ""; }; - DEF91EADEEE06F212B7B54F802EAF35A /* Support Files */ = { + E7418253528F8161A60F1DFDF7D0DD85 /* Products */ = { isa = PBXGroup; children = ( - 91A054E8B1F8126C7A18B34BA0D619BC /* Info.plist */, - C2AF6E1171D2C4532C72147F5E3DD5E3 /* SideMenu.modulemap */, - DD8D5C62E69E0A3FB68E2AD2DF50B971 /* SideMenu.xcconfig */, - F4351ABF0E5804F47D02066C4F50BAA1 /* SideMenu-dummy.m */, - 643E99F30206C0660B175DEAC1C8D01C /* SideMenu-prefix.pch */, - 114AACB449F70D301BC988FAB1A6ED51 /* SideMenu-umbrella.h */, + 430F20234467F7FEB69372E66DAAC7DD /* Alamofire.framework */, + D45B1EDFE9EE9B9D92E3283F319D40D9 /* ChameleonFramework.framework */, + 15BC780347377E8FAFF95135078BEE2D /* Charts.framework */, + 28C9F16B6AE6D029F061F53E7C2D1D15 /* FirebaseAuth.framework */, + FA7F27648730D2DE62F463C09B4DF503 /* FirebaseCore.framework */, + B7AA905E4C80B479B8690565CEF01FA6 /* FirebaseDatabase.framework */, + 672B1ADCC8A31D0C4B7FADC3C2AE4AB3 /* GoogleToolboxForMac.framework */, + C740D8D2A0C6C1A4B33408528DA118C7 /* GTMSessionFetcher.framework */, + 8F61CA59F4D5473CEF4F228C2A3398D2 /* Kingfisher.framework */, + 5B3947E02DF46D7858EAF8710163E36D /* leveldb.framework */, + D93B48CC39453EC085A4DCA234758D7D /* nanopb.framework */, + 29967233CB796B2BF275C6A16585480D /* Pods_pocloud.framework */, + C63B6F5B82109E43BDCF2B5DAAF42176 /* PromiseKit.framework */, + B49FCB10AFFB828792D40B90611AF6A3 /* Realm.framework */, + C3A1858D00526C0CA80FD38C98A15A31 /* RealmSwift.framework */, + DCE71A669B6834D4656BFB09C78E9B76 /* SideMenu.framework */, + A625B6306ADE89B96DC9B095496B2B32 /* SVProgressHUD.framework */, + F5C5212ED1DC219BB630A54741005AF3 /* SwiftChart.framework */, + 1EB3F0C07B44D28853ADDFB2D43A7DA8 /* SwiftyJSON.framework */, ); - name = "Support Files"; - path = "../Target Support Files/SideMenu"; + name = Products; sourceTree = ""; }; - DF7D2C590F795BCB12682C821DFB3098 /* RealmSwift */ = { - isa = PBXGroup; - children = ( - 34BEF567AC5697DBC621C486D4EAE245 /* Aliases.swift */, - 30C133579CAA0F7792D10746A36A6795 /* Error.swift */, - B4AA0EB452A4908B2C18F2E3091E17C2 /* LinkingObjects.swift */, - 09193CF269C262BBE8A20C9A22C1D22C /* List.swift */, - 06BB1F4FC9BB61074842DD02B0BAF55C /* Migration.swift */, - 593FE72222BC2EF93683E4257630D211 /* Object.swift */, - 75E2DF15F6ABE0A035905AAA3D96E9D3 /* ObjectiveCSupport.swift */, - 30BA23BD9B339BBC6480ADF054F0EA91 /* ObjectSchema.swift */, - E7BA65358ED3EFA3C71D0AD440DA51FD /* Optional.swift */, - 04FB889A3B7E33CA3EB8FF5CA1CCE7EC /* Property.swift */, - B31E0966D3CF9D0CEDD9C866DE57075C /* Realm.swift */, - 602F700222EE4CD2DFDC8A6A71B94FC5 /* RealmCollection.swift */, - 8B4702AFD645801109ACC320CB48D0E3 /* RealmConfiguration.swift */, - 9DBF4BDB35A5BDEAF68D7BE7C5FCF8F9 /* Results.swift */, - 869C5AF859D170BC4B0887A66A7D532A /* Schema.swift */, - 44410CE7FD1EFF628F5BDD09B35F2422 /* SortDescriptor.swift */, - C6A01C9CB5DD2D1ED389DF3BC6DFD7F8 /* SwiftVersion.swift */, - 737B0B8BB170869321A0C8168842696C /* Sync.swift */, - 8DD911CD20C74127970E24F1205AA100 /* ThreadSafeReference.swift */, - 96B7665DC8B7B4D3701725E3EC7BA80E /* Util.swift */, - E8DED4F204D5B97085D292457AD4626D /* Support Files */, - ); - path = RealmSwift; - sourceTree = ""; - }; - E42239220E689BC0E4C61DF97C079D5E /* Support Files */ = { - isa = PBXGroup; - children = ( - 8369E110071BFBC9A37294A747D99E9B /* ChameleonFramework.modulemap */, - 3E0A2CF79462B3B4ED47BA6C8B900FFB /* ChameleonFramework.xcconfig */, - 1C1CA3A2B6EA7F70F7F6B5419B489DAC /* ChameleonFramework-dummy.m */, - 6D43DD9A87F45A8AE34C94CF1F7AE7AF /* ChameleonFramework-prefix.pch */, - FA418B7D73C04C4A8B1F901C0BB3B9DA /* ChameleonFramework-umbrella.h */, - 0F4D29B0ACD4D5C0D0523BACA815679F /* Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/ChameleonFramework"; - sourceTree = ""; - }; - E8DED4F204D5B97085D292457AD4626D /* Support Files */ = { - isa = PBXGroup; - children = ( - 500E6A91A66C584EA2C316AF77E187E0 /* Info.plist */, - EFC330D3305F7763B45D2C9F016F2B74 /* RealmSwift.modulemap */, - E7AE1EF1B83DC8FC36416CE765AC2833 /* RealmSwift.xcconfig */, - 36E1C5E57E92B11E6EB24E5ACAC73E70 /* RealmSwift-dummy.m */, - A60DEBF393BC35773B5A9BD349F8AD80 /* RealmSwift-prefix.pch */, - 3E19D6AC7CA5E9702F50748E38632183 /* RealmSwift-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/RealmSwift"; - sourceTree = ""; - }; - EFAC254CE9F3E51CE091161EFFF830E0 /* GTMSessionFetcher */ = { - isa = PBXGroup; - children = ( - 2CAEDB4DA317FA95290D038432E1AFC3 /* Core */, - 92A416187A1798CC99732994CA5EFFEA /* Support Files */, - ); - path = GTMSessionFetcher; - sourceTree = ""; - }; - F27A8D64A4BE2B058143643D80C969A1 /* decode */ = { + E7B1399EA4449E2C2986929774D659E1 /* decode */ = { isa = PBXGroup; children = ( ); name = decode; sourceTree = ""; }; + EB97C51C9297F648652099A4E224E752 /* Support Files */ = { + isa = PBXGroup; + children = ( + 8E1D144B75B049DC621003B67C0CD62F /* Info.plist */, + 34641035AAE57AD3EB93FC9662E87FC4 /* SwiftyJSON.modulemap */, + CFF8E7614222B479BDD417F4569E3312 /* SwiftyJSON.xcconfig */, + E17F5D3C8611981CAD280408B214E47A /* SwiftyJSON-dummy.m */, + D6C6ED6167E361C59FB258E20E99DD86 /* SwiftyJSON-prefix.pch */, + A3086E264490FCF97634AAED0EF2E7D3 /* SwiftyJSON-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftyJSON"; + sourceTree = ""; + }; + EE775580138483DA166534FF1373BBAD /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3F62946732F71AED467042243FAA5FF2 /* FirebaseAnalytics.framework */, + 41E52F8B6EA6CD346D94DC010914A333 /* FirebaseCoreDiagnostics.framework */, + 6A5D093C71358AB924BC825A9E0DB64C /* FirebaseNanoPB.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; F65D932CBFAC6D55C62F23641E56191D /* Frameworks */ = { isa = PBXGroup; children = ( @@ -3522,262 +4153,93 @@ name = Frameworks; sourceTree = ""; }; - FE1CBE7FF469DAF716097926B50D1D6F /* Firebase */ = { + F816893D3B59F53EA4332D1BF4176816 /* FirebaseCore */ = { isa = PBXGroup; children = ( - 799D7266536FB3D94AA2388BD71E7139 /* CoreOnly */, + 45BC269B6F04B95CD1E4A0A1EA849352 /* FIRAnalyticsConfiguration.h */, + 12F210A6653BCF42C9456F4CD1A6BBBD /* FIRAnalyticsConfiguration.m */, + 46CE34D58150B0A8EB66F7B68E8A4B10 /* FIRAnalyticsConfiguration+Internal.h */, + AE126089164A76E4AFE1E11780270A0B /* FIRApp.h */, + 1B08E8A1F22162556B7E880073BAACFD /* FIRApp.m */, + A7330A0B6A5E8B00A1423BD470BC8857 /* FIRAppAssociationRegistration.h */, + B42B4A68852510BA4C384A5AF6D0B894 /* FIRAppAssociationRegistration.m */, + F2E2300B20A23D7A9E2E7C1B904D16A7 /* FIRAppEnvironmentUtil.h */, + E010A4DB5333A49B51011AD79DF7AC63 /* FIRAppEnvironmentUtil.m */, + 12B1627081E995F21A586C0E85F603A9 /* FIRAppInternal.h */, + ECD7BA3D5DE79C189A49C586B3B522CE /* FIRBundleUtil.h */, + 0BA13E1BC0E1942C73566C7FA929FF94 /* FIRBundleUtil.m */, + 60E45BAEB38F4980C0B6AD8AA6855E46 /* FIRConfiguration.h */, + A7ADD3B3EECC1182856B26198D193415 /* FIRConfiguration.m */, + 7310AB3328F510339EEB587BD873B4E9 /* FirebaseCore.h */, + C13B0234C9DC94C32C728C1AB5EAA99E /* FIRErrorCode.h */, + 9311461610A5335AB38831FE1EB0C41A /* FIRErrors.h */, + CBD462291D881E25803DE9FC8115B50B /* FIRErrors.m */, + 708476560D22C9E2631C4F742586EFF8 /* FIRLogger.h */, + B32723CBF83BA8B7D0661055F4B33508 /* FIRLogger.m */, + A99C67D7AFDD636DFA057FBFB2C1D78A /* FIRLoggerLevel.h */, + 09D17E8D85E502FFD67032AFA2B25F29 /* FIRMutableDictionary.h */, + E133445AED330F1E9A9FA6CD3B486CF8 /* FIRMutableDictionary.m */, + D9BE2E14C68AFD8462FAD35B1CD83C11 /* FIRNetwork.h */, + 0D62835BE74C0C592738DB2D9320ABD8 /* FIRNetwork.m */, + CC418A1C526E702061BF276A2065F2FF /* FIRNetworkConstants.h */, + C9A6B4ACFDFB716762D7A770A34CD986 /* FIRNetworkConstants.m */, + 3429DADBDACA9E36CC4E3ACD319C05E4 /* FIRNetworkLoggerProtocol.h */, + 175B6161C1230906A04A8615122B8041 /* FIRNetworkMessageCode.h */, + 4EBBFB9164F3142B4A51D3D6F2AA60F4 /* FIRNetworkURLSession.h */, + 7637902B4668DDDC67B520644310F065 /* FIRNetworkURLSession.m */, + A6CF6EC6C1A60DC71099387172A452D3 /* FIROptions.h */, + 5287EF634A00D57846CFE8B9DB58C0CE /* FIROptions.m */, + 497F1096BACAE774E114FAEC740D5AD4 /* FIROptionsInternal.h */, + 434FF1E5321E6CE0C9EB8CF520D77DAA /* FIRReachabilityChecker.h */, + 18C78ED0F3B75405F0CD990B1AF93037 /* FIRReachabilityChecker.m */, + AA7B09A93B8E808B32BE6C6B19C8091B /* FIRReachabilityChecker+Internal.h */, + 788C0E2205927E8A04F8DC86C8BEF339 /* FIRVersion.h */, + B7568273FEE14BD1E7D80B89DD42B152 /* FIRVersion.m */, + 27906DB523924ADAB4A14F8DF203B471 /* Support Files */, ); - path = Firebase; + path = FirebaseCore; sourceTree = ""; }; - FE360E09AAF3053FBF8AFB15F6A45941 /* FirebaseDatabase */ = { + FA4AD18B988DCD31D303780AB6F91F1F /* Support Files */ = { isa = PBXGroup; children = ( - 6D41543E190795417F7DAE9117C49FD7 /* APLevelDB.h */, - 79DFB4F96F2ADED65E9DFD60E2139A87 /* APLevelDB.mm */, - 7B2B42C046114BA0FE5525A81C338031 /* FAckUserWrite.h */, - 9298A68A6B543B408DC9E5FE996F903E /* FAckUserWrite.m */, - 498D7CB872B9E3F3206280DD6302C75B /* FArraySortedDictionary.h */, - 2E2C48448E1B625868FB98BB8BBEEE7F /* FArraySortedDictionary.m */, - C2ED7ED48B42FBB3CAFB1411E9F35938 /* FAtomicNumber.h */, - 9C224A282F04F2A209F24E12FD6A485F /* FAtomicNumber.m */, - 0ECDAC859AFE6D77E199B99242CF9302 /* FAuthTokenProvider.h */, - FFB8A6D618A3C03D20469FFA5E164E9B /* FAuthTokenProvider.m */, - 9324BF7B815CE592B1B98F5DA6A82328 /* fbase64.c */, - 2C0508B893BA3752988AAB9C06416A7C /* fbase64.h */, - E69E13C1098551E7FF04ABB2FFF1375B /* FCacheNode.h */, - 0AEB804462BD0EC775A3A28A6CA369C0 /* FCacheNode.m */, - 5C731AA8B0C2C85C48B5BBC71380CA34 /* FCachePolicy.h */, - DF1F2A07D2308D209D0DB7A524B6B4AA /* FCachePolicy.m */, - 65D54BF75DDC3FA231AA356BD5B8F3CC /* FCancelEvent.h */, - 733157C0A6CD88538BB514CA3022FE34 /* FCancelEvent.m */, - FCF8AF39C9864784716336420A00B8D6 /* FChange.h */, - 6B80A63CD2968247F06E00F9DB61A76E /* FChange.m */, - 76EF099F001B8227ACD7D720DF9D7897 /* FChildChangeAccumulator.h */, - 04274B2D193F1C3402EFB98EA7D21A6C /* FChildChangeAccumulator.m */, - D4F08FD72CF6D655250483F0381E1C04 /* FChildEventRegistration.h */, - 5DAF9D56085B88A440BDF99226C3C5EC /* FChildEventRegistration.m */, - 8B096D5FC4934FF4A2297A9CDB96AE52 /* FChildrenNode.h */, - 404A99971E2E296714F6D9264DE6AEB5 /* FChildrenNode.m */, - D855FD00DDA5E0D42BFE2777C20A9968 /* FClock.h */, - 4C0F91D2366FEC6EB1A7B28EE6A1888E /* FClock.m */, - 9621451D235008B6528F52230A6894E9 /* FCompleteChildSource.h */, - 094DA8FED8C56F8C41DBB3327BF9A850 /* FCompoundHash.h */, - 7232466B5111FDB327581672AD2D7C4D /* FCompoundHash.m */, - 012C9CCA072C9B01CA92A4C0577B282A /* FCompoundWrite.h */, - 13D830AFCC6A73DD371F88A84E69A22C /* FCompoundWrite.m */, - 23CA50BB5CC5430225B3A92952BB37AA /* FConnection.h */, - EA4E0F3B352BAC4824632A9FECA3E8C1 /* FConnection.m */, - 7825758BA28D7B159C70BBC305286DEF /* FConstants.h */, - 3164B469BD414382EA5E78E4DBB45513 /* FConstants.m */, - 39B3FAF29B072E0393348D9393D31AD4 /* FDataEvent.h */, - 4EC2388019816A657DA80E56F3C271AC /* FDataEvent.m */, - B537910B3FBFF83F11E3EF416591530D /* FEmptyNode.h */, - 5CA2808E8E1F2C6D7A19D5C2A280F43E /* FEmptyNode.m */, - 4CCB66A239E1C2ECAB01A381ECD1C729 /* FEvent.h */, - 44495764D29A5192248157697337ABAE /* FEventEmitter.h */, - ACACB1A8134E147173F966F899CBB9ED /* FEventEmitter.m */, - F79840018A94A2754D04EAD026634EA9 /* FEventGenerator.h */, - CD1747B4A54A460E488213B0D92506C7 /* FEventGenerator.m */, - 2EC81608667CC5841981197E2B59D6F3 /* FEventRaiser.h */, - 768468E80F9FE8B320DC7C1828DB5588 /* FEventRaiser.m */, - 8AE871854B59BD765240668386C1DC4D /* FEventRegistration.h */, - BB07463EBFD38A5996816DF5F0B1BD2F /* FImmutableSortedDictionary.h */, - 5FE583426B0571D546C951D11A281BF6 /* FImmutableSortedDictionary.m */, - 03BAB0254AF20F3DAF78573DC0FEE99E /* FImmutableSortedSet.h */, - AC81A7F4FB9112E5DDB4EB8457BA9324 /* FImmutableSortedSet.m */, - 8107EE21C879AF93E93DC6E232BDF7E3 /* FImmutableTree.h */, - 3301F78BD509C4ED05D8305AEE34B15A /* FImmutableTree.m */, - B62365D273DD45764036DFF87AFC2E3A /* FIndex.h */, - BCCCD79C219D9F805B8316B46CAFA25D /* FIndex.m */, - 5D3A15DF47EC881BB44A0A944834E4BB /* FIndexedFilter.h */, - 2A8EDCC8327F45F2337D1751B6527A39 /* FIndexedFilter.m */, - E96D78B8853458DE35BFBB8305779746 /* FIndexedNode.h */, - 7F7A1A72AF59BE923FA3943B224D2BBD /* FIndexedNode.m */, - 5EFD4D1CBB9EDBC363742620BADED297 /* FIRDatabase.h */, - 7F7A60E8391C0103B242BB64C3E046EF /* FIRDatabase.m */, - D2D18454880161205A54F248F1309417 /* FIRDatabase_Private.h */, - 5E5A3E50584A73D4B2C399B7302BB3F5 /* FIRDatabaseConfig.h */, - 23D2A626E8FC87744A73EF8C49B11F8B /* FIRDatabaseConfig.m */, - 6C1BC562131E66DA3F567B37BB58B4A8 /* FIRDatabaseConfig_Private.h */, - 0D4B640835F345FD00D9CB01B0AB0DC7 /* FIRDatabaseQuery.h */, - EF6769178C5B6719E6F4520E8A1A2ED0 /* FIRDatabaseQuery.m */, - 0F66493B50DF62BCB1A084C7D275B89C /* FIRDatabaseQuery_Private.h */, - 1E1A3A71989A118385B2374EB5E79BB8 /* FIRDatabaseReference.h */, - E743659391969DFFC825982CE5CC241C /* FIRDatabaseReference.m */, - 99BB089F5CF6B601E331E971470C012A /* FIRDatabaseReference_Private.h */, - EB48733EDDA28CE0130DB6F418E12216 /* FIRDataEventType.h */, - 4F06DDE1647C1B4F556BF9208E5A502D /* FIRDataSnapshot.h */, - C05C63EB66F2F185D359CF8BFADAF89D /* FIRDataSnapshot.m */, - B224F4BDCAFCCEEC67565AEA22B5F5E2 /* FIRDataSnapshot_Private.h */, - C33855C45FA18D4FE14D04003AD87671 /* FirebaseDatabase.h */, - 9D63E653C0BB9F8E37E3A4D6ACA0523C /* FIRMutableData.h */, - 9C42B2760B949BEED82EBD3F86033DE6 /* FIRMutableData.m */, - A3EB5FB28AE338E2D015F272B8007E4E /* FIRMutableData_Private.h */, - 7F568E2FB0AF2F675B252CA373C69672 /* FIRNoopAuthTokenProvider.h */, - B5C113E56C758FF777823B19EFB8C60A /* FIRNoopAuthTokenProvider.m */, - 4F1FE337DFE5384B74391B5ABFF41E34 /* FIRRetryHelper.h */, - B3D166294CFCAD78EC81C76B158B1A6E /* FIRRetryHelper.m */, - 6554B57681363990CB506AE66ADDFFD8 /* FIRServerValue.h */, - 0A7A1C13C4245A09439D1DBC7E5C75F2 /* FIRServerValue.m */, - D093E4A532BB4793C85D123B1F5BC55A /* FIRTransactionResult.h */, - 04D70AD08B309E1B7AA1E899AB9F7DD0 /* FIRTransactionResult.m */, - FBBED2A541EF26AD99B96CAEFFA4172B /* FIRTransactionResult_Private.h */, - 03ADD67983ADECBCBFF12A13D5F5446A /* FKeepSyncedEventRegistration.h */, - 57C45DAA68B153310BC786B46C0A2B7B /* FKeepSyncedEventRegistration.m */, - 228D5C9C186B55465CBBD86B5E03FCC4 /* FKeyIndex.h */, - 8F1BEA718FC558295361DE96283D7161 /* FKeyIndex.m */, - 8EB4CA782B4E1BDD6432422D73C87206 /* FLeafNode.h */, - 99F0A0BAB79736410A6D7CC877ED9A4F /* FLeafNode.m */, - FEBE6C6CC4D11E5379DA07B40C9B46D1 /* FLevelDBStorageEngine.h */, - 4199CB4345C0D7BDF479307A0449F1EF /* FLevelDBStorageEngine.m */, - 6B5D05CE22BF8AE1975019B14E5FB38B /* FLimitedFilter.h */, - D13BD7A9F2B272B66AB3A5E408D37ED2 /* FLimitedFilter.m */, - E14EA890AFFB0CE667D86C0A69FFB986 /* FListenComplete.h */, - A1ED358F43ABF0E139113AFA038BC50C /* FListenComplete.m */, - A94A195887BF4B4B1470BE0FCE132D15 /* FListenProvider.h */, - F350F4F42491E713EF27C4029334B448 /* FListenProvider.m */, - 6038170437BAF049CB60F88B2FF54AA5 /* FLLRBEmptyNode.h */, - F237BFE530F87F9D29EB20B41D6E7EA7 /* FLLRBEmptyNode.m */, - 136586EF70918CE2645599936BDA2CBD /* FLLRBNode.h */, - 9E8ADF43E9D247D3BB0419A366EEAD55 /* FLLRBValueNode.h */, - CC072C55EAA4F58FB9737792ED612B05 /* FLLRBValueNode.m */, - 769A24B9A7E6EA91AB22AC7BDF7294A1 /* FMaxNode.h */, - 92B76C50618D84D3A4C1256A34745255 /* FMaxNode.m */, - 79C6FE77B99E2E6E5FD2CF6ED248C543 /* FMerge.h */, - 2F6BFDF488B63BC769F213FF0D28D968 /* FMerge.m */, - 843D5111E7D78F9D8C0552A9992D3BCD /* FNamedNode.h */, - 022E927034BF829787B7C39142FAEA7F /* FNamedNode.m */, - A3518271C1360FECB7B62107A839F0CA /* FNextPushId.h */, - 2C738177964ED52E8059D490D1A0500E /* FNextPushId.m */, - FD13A003F07E3F8B8323B787BEBC85E1 /* FNode.h */, - CFCBD1049707A9F58E0E65E23821926E /* FNodeFilter.h */, - C3E03EEB0FF50B1253DE3D15D06B52F5 /* FOperation.h */, - 6C7E0F93D9D136C44D487B7C3B938091 /* FOperationSource.h */, - BF1545BEA2ADAD856AD2526AB9EEDD39 /* FOperationSource.m */, - BB7C81EA1D6BB6AEB7FC78A6B766921F /* FOverwrite.h */, - F464260936E9C53C8EEE939385034569 /* FOverwrite.m */, - 61C74BF8C42C637EE978632922266FC3 /* FParsedUrl.h */, - 3248E4707C43400D306C8D449F602C0A /* FParsedUrl.m */, - CD8A171098CC2FB6667109F3D914190E /* FPath.h */, - BEDCFC9F774844B490FC6F1123E91884 /* FPath.m */, - 811E448B021B0518BB2802E83B759A48 /* FPathIndex.h */, - AE84A7609499770D18328ED3ACCFA098 /* FPathIndex.m */, - 4D0567DE7174EB9965E6B3CE1BFFE735 /* FPendingPut.h */, - EAD0CC66EB949F945F8E6074B855FCA0 /* FPendingPut.m */, - FE6B8AF94F6B9320B35BA9AEF571956C /* FPersistenceManager.h */, - 40F1951617C35D1A46317044DEFCFBEA /* FPersistenceManager.m */, - A28C8055B939C8A355918ACE46F7DCF3 /* FPersistentConnection.h */, - 279506759E965C04139EA8BF32BC85F0 /* FPersistentConnection.m */, - 77E5295317BF8E35A4774EDB9696C913 /* FPriorityIndex.h */, - E2B8505FFB9E28E64596357FF3330F17 /* FPriorityIndex.m */, - 703413B3BDA586A54D308061523C6ED8 /* FPruneForest.h */, - F62D2C38661956FB1EA268061A54F656 /* FPruneForest.m */, - 53C820A895299ACA19C3562A5C0607B1 /* FQueryParams.h */, - 3CB6AE028F0001B0D4C44A5AEE15445D /* FQueryParams.m */, - 8CE420DA1558F78911A3B350A9A11A79 /* FQuerySpec.h */, - 26E5F18ACD873FD6A13EE7F4475650BE /* FQuerySpec.m */, - E9535BB87C3A65DC7EF7CAAE2BE8D61B /* FRangedFilter.h */, - D7F61CFEA9E82A3FE8BC9B336BB62F11 /* FRangedFilter.m */, - 0D0384586ACEA88566F47AAE1CC4143B /* FRangeMerge.h */, - 44AE3BAA3E5EE58F48C87AF1F5F3FF88 /* FRangeMerge.m */, - 2C7310AD32194E0C9E8955706B4FD9A7 /* FRepo.h */, - CEDEC11E8A3A5A39A44BAA92E7B9CB80 /* FRepo.m */, - 99AF1B1BAFACCE770472FD60484786B2 /* FRepo_Private.h */, - 28FD496277CE7CD6A22335D4267183D1 /* FRepoInfo.h */, - 01B65001CC680852B87526799EBC5A19 /* FRepoInfo.m */, - 9B4F6E28284FF624BFF2C716DC39024F /* FRepoManager.h */, - 324F54FD594D01AFB378373F9C8932B6 /* FRepoManager.m */, - 3D86498062747657DA44EF4E4FC1D64B /* FServerValues.h */, - 1A4C1C5AC30DE4A55E5B813F80CAB464 /* FServerValues.m */, - 35D5A4E05152C08B2026704262E08F82 /* FSnapshotHolder.h */, - C1E8E706E03B1B21D1CB82874B6BC5C4 /* FSnapshotHolder.m */, - B11683BA485E0F316EAB89F61689FE2D /* FSnapshotUtilities.h */, - A403A0080BA699A51F583B8F60C8F4F1 /* FSnapshotUtilities.m */, - F524232F2B533892102DB1982763255E /* FSparseSnapshotTree.h */, - 982417A3B308786B28B3E55A210AC1FD /* FSparseSnapshotTree.m */, - 5DF64CC029A59D164C673992AD3C8037 /* FSRWebSocket.h */, - 5D1B226B9F61815FD59B1A67E1CC7684 /* FSRWebSocket.m */, - 11784773888188D10E9F4201373A8E05 /* FStorageEngine.h */, - 70BA0C5E124A73AB8333E19108FEBDCF /* FStringUtilities.h */, - 8C419006F9EBDF2CE1572087941841CD /* FStringUtilities.m */, - CA360EC2133EBE3681DE9ED3AC9359B0 /* FSyncPoint.h */, - 11668C5DEA03D4F2BB6FF39E794BA093 /* FSyncPoint.m */, - 72F54EAFFFEB8994F4F4DBC66105B30C /* FSyncTree.h */, - 65BDC2DF79ECB93585E1BEF395A43E4C /* FSyncTree.m */, - 28275241D6047A1620E7671A606A284B /* FTrackedQuery.h */, - B3FE521C713ED654A08EB82618EB271C /* FTrackedQuery.m */, - 397B9F7253E8B343B730257BB2F433C1 /* FTrackedQueryManager.h */, - EC4F14E0A0F67A117B21CDC7A23AE25A /* FTrackedQueryManager.m */, - E762147F2F13707B979FB6B2F3BB781F /* FTransformedEnumerator.h */, - A90046E26AA851A035D7A9111C1941E8 /* FTransformedEnumerator.m */, - 5BC02749593FFFFBFBEFF12AA613D571 /* FTree.h */, - 8A062A239385A4D191C871589DED362E /* FTree.m */, - 09AA5AA89D97D1BF16F36C62FDD2AD5F /* FTreeNode.h */, - 4A1FF3997E9161B9290C7D1608B82DA0 /* FTreeNode.m */, - 51A32F0E945349D62441F3ADBE859017 /* FTreeSortedDictionary.h */, - E92D15118B786BA86D1B0ED014DAC550 /* FTreeSortedDictionary.m */, - A48997DDACC81455ECBA8ED3769582EF /* FTreeSortedDictionaryEnumerator.h */, - 4F2BFDBF37C6024A37B98BF959ED74E8 /* FTreeSortedDictionaryEnumerator.m */, - D91D0804446ED6E038CF4AF95C2E14F1 /* FTupleBoolBlock.h */, - 9F337E4E3BE93C305DBB326335C09D2C /* FTupleBoolBlock.m */, - 51DF135B95C2C63E71D97168F8ED319A /* FTupleCallbackStatus.h */, - EDE51BDB9F8A1452AEA0C36D5DB71FD8 /* FTupleCallbackStatus.m */, - 727D09BAF5CCA8E230F101E228BFEB81 /* FTupleFirebase.h */, - 6B3B6D04CD804A2DCFD0CA0DA33A568D /* FTupleFirebase.m */, - 86B7ECE0F84BACFC785AB07041F1B3C7 /* FTupleNodePath.h */, - 476E8E54604E4CD6B03F317728CC19F1 /* FTupleNodePath.m */, - C1A8F0D90BCCB517218BE7784558247B /* FTupleObjectNode.h */, - CD26081036BEE7C05DD4C429054B7894 /* FTupleObjectNode.m */, - 34FB0AC26A184602B86A7C9B582D0D62 /* FTupleObjects.h */, - A0531D91E7CFF1C4DF621C3246321F3E /* FTupleObjects.m */, - 46F7A37638CB3624A41208437A049DCB /* FTupleOnDisconnect.h */, - C924626DBF358408C0979CBA0AD1ED96 /* FTupleOnDisconnect.m */, - D223F15198F481B2D52CC3F9CE6CB2C3 /* FTuplePathValue.h */, - 527A58C2B84D5E74BBA75B24F2F2093C /* FTuplePathValue.m */, - 039F5411FDC209C6D02A79FC091E01B8 /* FTupleRemovedQueriesEvents.h */, - 770AF2E17CD58BDCA0D918158D01E602 /* FTupleRemovedQueriesEvents.m */, - 393E34A6743DCFE11EA0EB1A258748E5 /* FTupleSetIdPath.h */, - FFE1402FA9903A094033843D6D68E3CC /* FTupleSetIdPath.m */, - 2ED40CA21C81D183487E2AA1EE13C818 /* FTupleStringNode.h */, - 7D06036A48C38D7D57ADCEF3C5127F96 /* FTupleStringNode.m */, - D3EC63088647E496A1109035BAA3FAA5 /* FTupleTransaction.h */, - 5913FC3CB687FC271619277DCC1F2737 /* FTupleTransaction.m */, - 5DB7B79E357A7765895F6FB422938BE8 /* FTupleTSN.h */, - 6B85AAB94D405DD45E2B4D1A1F6EA8FF /* FTupleTSN.m */, - F5F544CE6EB349011514F2B58814743C /* FTupleUserCallback.h */, - E819A97A23766D4FB38805E95D8EB1ED /* FTupleUserCallback.m */, - 3AB5FBC45585C1A361662B4CD7EE76C5 /* FTypedefs.h */, - EC2A4FE3CF03DBEF8339CA2564CF346C /* FTypedefs_Private.h */, - 22CA6F29CD92F4C1B2BB0A4BCA0C0FA7 /* FUtilities.h */, - 65F3954631DF66A5F3305029849F5A2F /* FUtilities.m */, - CB66D88F0B7187CA3B3E9DA35265EAF0 /* FValidation.h */, - BBA9C16DE4FB1E3BFFBFB4CBB00ACC0F /* FValidation.m */, - 950BEE25475AF8AB9882D8903CBF417C /* FValueEventRegistration.h */, - ECBB5EB4DDA66EB6EA4D197712996F33 /* FValueEventRegistration.m */, - 96F68DEE8EDCECE1EA450424EB19AAEE /* FValueIndex.h */, - 8F05BBCB1F615E470A220DB8DEC9140D /* FValueIndex.m */, - 26B7CE2D2961B216E39557E9D2785C74 /* FView.h */, - 74335A52733B4DEC7F2D9349FFA9DAC9 /* FView.m */, - 88DC3C4F9C544BC4E4297988708ECE37 /* FViewCache.h */, - 8E2EF1FC87C693AD40D02F7164BC01D9 /* FViewCache.m */, - EEF64F45123D8FB8AFD81C22B85D89A5 /* FViewProcessor.h */, - A3988973AE5C02333414D4A17044A957 /* FViewProcessor.m */, - A7B096381505DCD71416779CC51D5D90 /* FViewProcessorResult.h */, - B5A0B75010E7D217156712DACB92C96A /* FViewProcessorResult.m */, - 0BC2D24DEB60661E4AB229DF73A489CA /* FWebSocketConnection.h */, - 8131049A8380941A015BC952D24BC4A5 /* FWebSocketConnection.m */, - D287124397290FCDED128BD06946425C /* FWriteRecord.h */, - 1D53D27ED4378B60C2784666ECEEFD5F /* FWriteRecord.m */, - 0A2E1CE2DC70E49CCB32378842FD5680 /* FWriteTree.h */, - F439BD97DD694938706D323C613AE6B4 /* FWriteTree.m */, - AEFD7E280A0837578CD031AA70BCCF6E /* FWriteTreeRef.h */, - EEA3E1CAFC53ED900CC4A9D1E69DAAB3 /* FWriteTreeRef.m */, - 0CD1C58110EB87B555D1286A9600FA31 /* NSData+SRB64Additions.h */, - 3015660C97A402971AD6C28366206CA9 /* NSData+SRB64Additions.m */, - BE686A1712D588D3583AB99B2E45536D /* Support Files */, + 15E46C0199B62CBCEA304FC838555606 /* Info.plist */, + 6FE21F83684AA12B14D30F479979E17A /* PromiseKit.modulemap */, + 01353F67E6131A74A5E9F0F7441A5D24 /* PromiseKit.xcconfig */, + 09D867EECAC7257F6079603569A90232 /* PromiseKit-dummy.m */, + 77C6FC471A95E71A435F5C6B754AB34E /* PromiseKit-prefix.pch */, + F71A9417DEDCA49A548C42921E4DBCAD /* PromiseKit-umbrella.h */, ); - path = FirebaseDatabase; + name = "Support Files"; + path = "../Target Support Files/PromiseKit"; + sourceTree = ""; + }; + FD7CAFD2685AC13A5F78C0E6C637C7F8 /* Support Files */ = { + isa = PBXGroup; + children = ( + ADD4A7893754BCBD73492E839D070B2A /* Info.plist */, + 9FAB009FE5E3B7374758D79382D43E6F /* SwiftChart.modulemap */, + 3481B02F02ECC97DA0B8011CC82FF918 /* SwiftChart.xcconfig */, + 2569C5D166871F0F359DDD5AB060C79D /* SwiftChart-dummy.m */, + 50288181F2014C1CE8A040C9AB729410 /* SwiftChart-prefix.pch */, + 8452774B42ECFB83C55E5D4F4FF8A955 /* SwiftChart-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftChart"; + sourceTree = ""; + }; + FE09A2498D53146057CAEB3721C6A030 /* Support Files */ = { + isa = PBXGroup; + children = ( + BB337CBA2CBBD6A561136BD3C9AE557C /* Info.plist */, + 9958A301818B579A189DBDDFA4B6F989 /* RealmSwift.modulemap */, + E417744D2BA90655B13C5DF82A5B99BA /* RealmSwift.xcconfig */, + FE50293D6F45770888DD421CCF1AF684 /* RealmSwift-dummy.m */, + E308DCCA43E5560B2600491365025266 /* RealmSwift-prefix.pch */, + 42F0F570ACE3A2878722AD7FDA8285EB /* RealmSwift-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/RealmSwift"; sourceTree = ""; }; /* End PBXGroup section */ @@ -3806,19 +4268,30 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 17418DA81431B0538F80CEE684E0DAD7 /* Headers */ = { + 1C550E429D565863EB513A347891D385 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CC658CAD555E3C1A2C28B1C22FEF836E /* RealmSwift-umbrella.h in Headers */, + 4FE88B13DC674D2ED72B8E5DDBEE28A1 /* Pods-pocloud-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 42001CD05334C85D1463578AA4C94423 /* Headers */ = { + 2CD72E18F63602DBAD6EF78CE44A5BCF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C92A8E7094DD8D148FE0765DC923037B /* SideMenu-umbrella.h in Headers */, + 604A1EE9890CA91333944CF312ACDCFD /* SwiftyJSON-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3367B6825E7C5E92E1D74329C6678597 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E00847E0466E3AD79DAAA2ADF3B39EDE /* AnyPromise.h in Headers */, + DCF4AB22285B8C3A5127705D7F8DCB21 /* fwd.h in Headers */, + 02CBF074B0141697596E981D224380F8 /* PromiseKit-umbrella.h in Headers */, + 68B7AC4CB334D5707C38E5DB5C35C605 /* PromiseKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3938,56 +4411,64 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 60233E55029E9C95FA7E98EC15616C6B /* Headers */ = { + 661E2DB0059F603AF4D864FBE672BD5E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8F45469FC0750B930C2EE7FAC32405D2 /* NSError+RLMSync.h in Headers */, - B590084EBFDF134A5FC7E2FF4E6BCEB0 /* Realm.h in Headers */, - 49433F5BF1CDBEE4B750FC1F7FA0E31F /* RLMAccessor.h in Headers */, - 736CF37051D550C1FBACA07C91ECA662 /* RLMArray.h in Headers */, - 1823F56AC8FC905ECD3E1BF9FAE59870 /* RLMArray_Private.h in Headers */, - 68C3D57B4628397434A8008F2FDE9302 /* RLMCollection.h in Headers */, - 1CE00AB5BE897A1DDAEA7390E3E75B38 /* RLMCollection_Private.h in Headers */, - DFC5B94918E5A17185B32BB4992428A1 /* RLMConstants.h in Headers */, - 67FB274BF84E310A775731821106C0B0 /* RLMListBase.h in Headers */, - 7C3D609C3C600BEA110437A812A7FAC7 /* RLMMigration.h in Headers */, - AAF9D290AEBAFC96C918CE214121B91C /* RLMMigration_Private.h in Headers */, - 54A3CCB3F39CA70BA269BA03A1D8B8DF /* RLMObject.h in Headers */, - 60114CF758A0FD7E04182B2434023670 /* RLMObject_Private.h in Headers */, - 87218279BD6EB6F67461F4C59A2F52AF /* RLMObjectBase.h in Headers */, - 2F9397DEFF57401E2F49F4AC9C882CD7 /* RLMObjectBase_Dynamic.h in Headers */, - C882486720E56C389B7B5940C7D4C7C2 /* RLMObjectBase_Private.h in Headers */, - B92588AC780C7BB76A0F77E84CBAA050 /* RLMObjectSchema.h in Headers */, - D37447352A19B729260CC336BE9551A4 /* RLMObjectSchema_Private.h in Headers */, - C5EBA8C53FB56169B055228DE189E264 /* RLMObjectStore.h in Headers */, - 544FDC91B4E21711475AB28C1D6F8979 /* RLMOptionalBase.h in Headers */, - 9840CB2A95F650C2ED4BD38CC432A36A /* RLMPlatform.h in Headers */, - 88CB2C03CCC9A1AF21D9D5671A55F67B /* RLMProperty.h in Headers */, - 0D34670655A8C04C6E5B06EEBEB10404 /* RLMProperty_Private.h in Headers */, - 2CBB417265596F128F7CB144AB2E092C /* RLMRealm+Sync.h in Headers */, - DB10F11752D36FD3F886A24E4CAE59CE /* RLMRealm.h in Headers */, - 4F8D10D1E11532433156C9EEE71054D4 /* RLMRealm_Dynamic.h in Headers */, - DC457AC426E743A4985078FCA31BB406 /* RLMRealm_Private.h in Headers */, - 7C05228AB410B7E458DB789C1C5ECD1B /* RLMRealmConfiguration+Sync.h in Headers */, - 61811049EF9DB96C6092507062774A05 /* RLMRealmConfiguration.h in Headers */, - 7CFB8E353C8EA8BEC26486824A648953 /* RLMRealmConfiguration_Private.h in Headers */, - 54F00EED638C35E4AA74BBA452C0FFD3 /* RLMResults.h in Headers */, - 49BD0A719C61893E79267E6FCA661C3B /* RLMResults_Private.h in Headers */, - F5ECFC106ED02D3F5ECA3286E183F41F /* RLMSchema.h in Headers */, - 3FDB38F6164FE77929DD8D9C77AEBAD5 /* RLMSchema_Private.h in Headers */, - 62F71D64F91549B7ED5E7842481C5C11 /* RLMSyncConfiguration.h in Headers */, - A9B8A98A4A6640297A21509480FAC721 /* RLMSyncConfiguration_Private.h in Headers */, - F1E43B61130E71B4EFF9A056CFC7AFED /* RLMSyncCredentials.h in Headers */, - AC82D120B0B465641985587872D0B2D6 /* RLMSyncManager.h in Headers */, - FB4B8550B44B1EA86000867733DA1E1E /* RLMSyncManager_Private.h in Headers */, - 4D3A39B59624C3C544119F3957BCF255 /* RLMSyncPermission.h in Headers */, - 4F654F94BA01B069E92DACA085A46975 /* RLMSyncSession.h in Headers */, - 18110CBAA89F8A5EF32D0B9699E1CCFF /* RLMSyncSubscription.h in Headers */, - 28A41A6D34FF661D9E494929560F1CE0 /* RLMSyncUser.h in Headers */, - D95E06F25144131DA98A78BBF6BCDB44 /* RLMSyncUtil.h in Headers */, - 6EE0FD7882A213AEE683064420FF9BD0 /* RLMSyncUtil_Private.h in Headers */, - 9F553C994F4E1B6AAB5FAE964C0C13A0 /* RLMThreadSafeReference.h in Headers */, + E5F8D9EF3F2A9FE68CAF5DD2960A5599 /* NSError+RLMSync.h in Headers */, + 3B1FDC5E55797BDBA08A695342570994 /* Realm.h in Headers */, + B2D6BD6C64A6D800219C4CB956D344EC /* RLMAccessor.h in Headers */, + A84DD32E0FA99D3D344F56795F21C370 /* RLMArray.h in Headers */, + 6AF5EEF89EA9DB25DD5FB94089A7A412 /* RLMArray_Private.h in Headers */, + 35D16C195D2FE72AFE8E158A51312FC0 /* RLMCollection.h in Headers */, + 4821BBF62546D1ADB504C5E5CEB17EE3 /* RLMCollection_Private.h in Headers */, + A61F2A706238F4E0AB4F96DDBE0CA880 /* RLMConstants.h in Headers */, + A7564DC8C0EDE45BFAD22D9FA551E2CA /* RLMListBase.h in Headers */, + F827569161143A920BF181535EEF2A48 /* RLMMigration.h in Headers */, + ED1873FF6CA812842E1DDD873FCBA974 /* RLMMigration_Private.h in Headers */, + 5B9B5A9F3DB9CFC805BA81F027C1D4A2 /* RLMObject.h in Headers */, + 61F0161B602A936BCC2AE9E481CA118C /* RLMObject_Private.h in Headers */, + FB0EE332F0D9DB21A3242E01D9729963 /* RLMObjectBase.h in Headers */, + D0D4C7A089C8F578251C724DAF14A449 /* RLMObjectBase_Dynamic.h in Headers */, + CD1DD0DC5590457595EEA3117F430097 /* RLMObjectBase_Private.h in Headers */, + 3ABF8EDE834FD7A79BF0D118C88B5883 /* RLMObjectSchema.h in Headers */, + 850F41A30C6DF969C9116AB8D85B7724 /* RLMObjectSchema_Private.h in Headers */, + 3F683D868E4CD041C73777BA74E672DE /* RLMObjectStore.h in Headers */, + 313007FEC74BCDA7C4A2E3EE4FE3DD95 /* RLMOptionalBase.h in Headers */, + B28F6E392799BDC6481681EC77E3D602 /* RLMPlatform.h in Headers */, + 214439A729C375B16BC5A20BCC201DE3 /* RLMProperty.h in Headers */, + B6ABD44AB09F8811D1D62CE43DA5B3E9 /* RLMProperty_Private.h in Headers */, + 06DE75C7EBC24C0F4DADA742C1F918C8 /* RLMRealm+Sync.h in Headers */, + 13B76EA5C7C68C77AA7FE00DAD612528 /* RLMRealm.h in Headers */, + 43FC64E18EC4C25E122DB7458F3FA4E5 /* RLMRealm_Dynamic.h in Headers */, + 912654DBC8EE50D7C49548317A5C16F6 /* RLMRealm_Private.h in Headers */, + 94A15DC6C689BE09711ADCC28A393A73 /* RLMRealmConfiguration+Sync.h in Headers */, + 838D9D79F5C3D7C0458CAF32137A08B4 /* RLMRealmConfiguration.h in Headers */, + 079E02F3637CA44EB3E6DCA1802D3E92 /* RLMRealmConfiguration_Private.h in Headers */, + 93BF5E63C2A2D2EDF5030FB591B99F5F /* RLMResults.h in Headers */, + 9893DAB11C592CD58002AE24C5BE7C52 /* RLMResults_Private.h in Headers */, + 469F31F57BBF45D5418A447CD02E799E /* RLMSchema.h in Headers */, + 8DA49D8910554FE461C20C9D75937CC7 /* RLMSchema_Private.h in Headers */, + 38AD3ED521873A58EBB3E8F9474A2E19 /* RLMSyncConfiguration.h in Headers */, + 6E9EF814FBE59A6723C320E20A8B3481 /* RLMSyncConfiguration_Private.h in Headers */, + 77C2AB86A99E1A05DBEFE62937922E1A /* RLMSyncCredentials.h in Headers */, + 93435DDE2473E2300031C8BEF62904BE /* RLMSyncManager.h in Headers */, + 63922405A29253FB51A816740135CE4D /* RLMSyncManager_Private.h in Headers */, + 4FF9A49B1FB1899C286AEF2BB07FA72D /* RLMSyncPermission.h in Headers */, + 0CD0D5C0C7BB0E6FD384403228245BC8 /* RLMSyncSession.h in Headers */, + AAE31145808C8B6C763676FDF8FFFCEA /* RLMSyncSubscription.h in Headers */, + F7F063574F41CEB07C2E8D5515283613 /* RLMSyncUser.h in Headers */, + 3F83D566545862E1009627E70FB796BE /* RLMSyncUtil.h in Headers */, + 37877D4EB487DB81F244130A76A2F49F /* RLMSyncUtil_Private.h in Headers */, + 985E7228660575602A2410A1C9E68A72 /* RLMThreadSafeReference.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6DE17C627A516951FC925792ACA4E3F2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + FFBE64C7CD91108D7DDE64831A9D8BF6 /* SideMenu-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4001,18 +4482,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 7D0F29317E90139B86B21BA51E821E79 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BDE507BC224071B7E6D234DDAC75FEC8 /* SVIndefiniteAnimatedView.h in Headers */, - 424D2584DF6DFA622674DD14BD12279D /* SVProgressAnimatedView.h in Headers */, - CEFEEB418A6775DB778A0AFEAEE38030 /* SVProgressHUD-umbrella.h in Headers */, - 31ABE67DF75C99E20A9B85D5611CD71F /* SVProgressHUD.h in Headers */, - AEDBE16C5A5A9780E22938566CFB187C /* SVRadialGradientLayer.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 8410C352CEB5FE08C6D5BBCC3D30D8DC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -4086,11 +4555,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9B685531AC18FDA5B18AB22DC512D333 /* Headers */ = { + 93E49BD0DA8A41126BED6828AE3DD468 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5394DCCA526184F919D2416E58E43089 /* SwiftChart-umbrella.h in Headers */, + C5CFD17A4D316A68B2DB7D5F5D777A29 /* SwiftChart-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4126,6 +4595,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AAB4A4955F4F9E231A2E6898F1AAD1C7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6921688A5C00F59AF92F1D8C36211BE7 /* SVIndefiniteAnimatedView.h in Headers */, + A21FF879F22A04E297C8BB54AEAD1EEE /* SVProgressAnimatedView.h in Headers */, + 362189E78F4C581115BC898E290F23BE /* SVProgressHUD-umbrella.h in Headers */, + 8D4F37D8AAA69302CE2ACA9BA1010A8E /* SVProgressHUD.h in Headers */, + C9A3D62A0A9C8BED619A3F3479A18964 /* SVRadialGradientLayer.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; B4002B6E97835FDCCAA5963EFE09A3E0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -4143,30 +4624,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - EDDF4D7189FBB993DBB13161E0279B45 /* Headers */ = { + C66D3BE70ADA022658BF66D7BDA94F67 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C0530396661445F2888BA3CC4C332E44 /* SwiftyJSON-umbrella.h in Headers */, + 76ADBA8B2522FC8D5C1FDBDFA2C88B85 /* RealmSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - EF74E60AAA6831DAF93861AFA95F97A2 /* Headers */ = { + E3F239A68DF8B55E694F70B391A75DE1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F697A47B9851FBC125DE11228FB27815 /* Pods-pocloud-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F88510EB34CC7A62DE1C2F1E30133F96 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 190658D67B3438B72DCDEA1E401FD03B /* AnyPromise.h in Headers */, - 5A4D7EA1033D8F2708B04767898629E4 /* fwd.h in Headers */, - A646A5DB58C09CD6BE0173A3BCB13234 /* PromiseKit-umbrella.h in Headers */, - 870AFE1534B3B16BEF8CF2D3328D5BDC /* PromiseKit.h in Headers */, + 575EDB8DA96849B05B2D90CBBC6E7F37 /* Charts-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4312,41 +4782,38 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 163ACDEEDFE672B67E0DB15318AF0C07 /* Realm */ = { + 1D416D5E8AAA52C62EECDEEAFED16087 /* Charts */ = { isa = PBXNativeTarget; - buildConfigurationList = A23BEC1E3515793704829744CB52774D /* Build configuration list for PBXNativeTarget "Realm" */; + buildConfigurationList = AFA3461FDDF13768BF7CCB6A10F3FFC5 /* Build configuration list for PBXNativeTarget "Charts" */; buildPhases = ( - 75D2674BBDE2678648975BE3DFF60A7C /* Sources */, - FC4AAAA8C3EB9468690671F86F4299D2 /* Frameworks */, - 60233E55029E9C95FA7E98EC15616C6B /* Headers */, - C1EB0D21FF8F48274194E30BACE610AF /* Copy . Private Headers */, - 55B4421CCFAFB283030F2F9BAC7DFACD /* Copy . Public Headers */, + 5CC3312AAD6900EDFC5C0ED9BC963A63 /* Sources */, + A6ABADFF5D02EA9BA78A8D04052D1003 /* Frameworks */, + E3F239A68DF8B55E694F70B391A75DE1 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = Realm; - productName = Realm; - productReference = 19D823D8734EB75ED01B5866FCC79A2D /* Realm.framework */; + name = Charts; + productName = Charts; + productReference = 15BC780347377E8FAFF95135078BEE2D /* Charts.framework */; productType = "com.apple.product-type.framework"; }; - 26389CA2D7E58CA4716E217346D0655C /* RealmSwift */ = { + 2E769F49CA0CFF5358BD147A496DC598 /* SideMenu */ = { isa = PBXNativeTarget; - buildConfigurationList = 02CAB9A62E77F3105C80D180F6C06459 /* Build configuration list for PBXNativeTarget "RealmSwift" */; + buildConfigurationList = 9C61C4A84F18C9D95ABC568950BA5F42 /* Build configuration list for PBXNativeTarget "SideMenu" */; buildPhases = ( - ED79A79B4172361019A67CB6BBF408B9 /* Sources */, - 4DFE83E8AF91C894188CEC50C64E7ECB /* Frameworks */, - 17418DA81431B0538F80CEE684E0DAD7 /* Headers */, + C80598E619D2ADBC9287FA4AFBCB76EB /* Sources */, + 1ADBF110CAF44A45EE8CBDFCC299F488 /* Frameworks */, + 6DE17C627A516951FC925792ACA4E3F2 /* Headers */, ); buildRules = ( ); dependencies = ( - F682286DACD79873C77C1B8583ADBF11 /* PBXTargetDependency */, ); - name = RealmSwift; - productName = RealmSwift; - productReference = D0F231F015E13183195E41563BE8291D /* RealmSwift.framework */; + name = SideMenu; + productName = SideMenu; + productReference = DCE71A669B6834D4656BFB09C78E9B76 /* SideMenu.framework */; productType = "com.apple.product-type.framework"; }; 42FD17D195FA3B5B05CE79F0B6CF447D /* FirebaseCore */ = { @@ -4364,7 +4831,7 @@ ); name = FirebaseCore; productName = FirebaseCore; - productReference = DCECEAA4AA603F6A9E0920E53DDDEC2E /* FirebaseCore.framework */; + productReference = FA7F27648730D2DE62F463C09B4DF503 /* FirebaseCore.framework */; productType = "com.apple.product-type.framework"; }; 488CA9079247B8F25888405871FCF2F4 /* GoogleToolboxForMac */ = { @@ -4381,25 +4848,7 @@ ); name = GoogleToolboxForMac; productName = GoogleToolboxForMac; - productReference = 41704C34A45976B3B0D3501C353F987E /* GoogleToolboxForMac.framework */; - productType = "com.apple.product-type.framework"; - }; - 4EEC98C9980EBF6EB559FE9840F88600 /* PromiseKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = AF85F9BBD749F913AD78A9ADBB1BD5D2 /* Build configuration list for PBXNativeTarget "PromiseKit" */; - buildPhases = ( - 7F1471170F33BBB4E520D18BF30380C7 /* Sources */, - EE560E4535B928855490E190757DE274 /* Frameworks */, - F88510EB34CC7A62DE1C2F1E30133F96 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - B5EF9156898D85CAFC0159BFD472B124 /* PBXTargetDependency */, - ); - name = PromiseKit; - productName = PromiseKit; - productReference = 721BDC7FEE69CCF878D29D3396CD4BBB /* PromiseKit.framework */; + productReference = 672B1ADCC8A31D0C4B7FADC3C2AE4AB3 /* GoogleToolboxForMac.framework */; productType = "com.apple.product-type.framework"; }; 4F87037150ABE2C9238B54E8F6E33F36 /* Kingfisher */ = { @@ -4416,24 +4865,7 @@ ); name = Kingfisher; productName = Kingfisher; - productReference = 2913119A759FDFBDC6F9FC617890BE97 /* Kingfisher.framework */; - productType = "com.apple.product-type.framework"; - }; - 5F2B8B75736083DA9B4F09AE96C5205C /* SwiftChart */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7D1840B0203BDAA575D6B442391CF01D /* Build configuration list for PBXNativeTarget "SwiftChart" */; - buildPhases = ( - 2DC8732F974416AD23FECB6C64983A47 /* Sources */, - 04C25C90C7AF94E68A35852AE88E48A3 /* Frameworks */, - 9B685531AC18FDA5B18AB22DC512D333 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftChart; - productName = SwiftChart; - productReference = 3694A4FAEFDB9C1ADCE833F4D9151E11 /* SwiftChart.framework */; + productReference = 8F61CA59F4D5473CEF4F228C2A3398D2 /* Kingfisher.framework */; productType = "com.apple.product-type.framework"; }; 62FABD757FE4DF7B87CB5ACCAE424F36 /* FirebaseDatabase */ = { @@ -4453,7 +4885,43 @@ ); name = FirebaseDatabase; productName = FirebaseDatabase; - productReference = CBA3F59FE4E29C803BEE9980DEBED39F /* FirebaseDatabase.framework */; + productReference = B7AA905E4C80B479B8690565CEF01FA6 /* FirebaseDatabase.framework */; + productType = "com.apple.product-type.framework"; + }; + 7D63CE0CBBC5134E15681885C016EC4F /* SwiftChart */ = { + isa = PBXNativeTarget; + buildConfigurationList = B986754092674E1702A0CE87F2FE50FF /* Build configuration list for PBXNativeTarget "SwiftChart" */; + buildPhases = ( + E8E235F97093033BE6D669BB9C2E2D1D /* Sources */, + D387BAADE6E7411F8111B211183B211A /* Frameworks */, + 93E49BD0DA8A41126BED6828AE3DD468 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SwiftChart; + productName = SwiftChart; + productReference = F5C5212ED1DC219BB630A54741005AF3 /* SwiftChart.framework */; + productType = "com.apple.product-type.framework"; + }; + 85A4785CDCA19B18B452AB3681A101F5 /* Realm */ = { + isa = PBXNativeTarget; + buildConfigurationList = 88ED7A7F03CCD592EBD7E6746A9FF657 /* Build configuration list for PBXNativeTarget "Realm" */; + buildPhases = ( + E77F86F25E4B907D50BCB511B8E9345D /* Sources */, + 58446016633773EB3F01F7CF995C4A90 /* Frameworks */, + 661E2DB0059F603AF4D864FBE672BD5E /* Headers */, + 88CC9DE1C70C13261FC0EAB2C4FA02E3 /* Copy . Private Headers */, + BAF1D7E9F30FF58F7882A88C13DD76CD /* Copy . Public Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Realm; + productName = Realm; + productReference = B49FCB10AFFB828792D40B90611AF6A3 /* Realm.framework */; productType = "com.apple.product-type.framework"; }; 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */ = { @@ -4470,7 +4938,7 @@ ); name = Alamofire; productName = Alamofire; - productReference = 0609AE291B884541C6DF20C135E2A3FB /* Alamofire.framework */; + productReference = 430F20234467F7FEB69372E66DAAC7DD /* Alamofire.framework */; productType = "com.apple.product-type.framework"; }; 8A267660E1AD4832DE75665F2F87AEA3 /* ChameleonFramework */ = { @@ -4487,25 +4955,7 @@ ); name = ChameleonFramework; productName = ChameleonFramework; - productReference = B537F31923042528C00C3F43D4E49F23 /* ChameleonFramework.framework */; - productType = "com.apple.product-type.framework"; - }; - 8B772225B6972C5F5121F8C6F296B00A /* SVProgressHUD */ = { - isa = PBXNativeTarget; - buildConfigurationList = BB0922DAD98FD40B80428F80AE09C920 /* Build configuration list for PBXNativeTarget "SVProgressHUD" */; - buildPhases = ( - DCD61271949EC3D14F9513DBDEBBF3AB /* Sources */, - BCFD8F7A98EDD07CCB474525DA38D51E /* Frameworks */, - 7D0F29317E90139B86B21BA51E821E79 /* Headers */, - 469AC157F509C4EEDA4929B1DDBB1AB5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SVProgressHUD; - productName = SVProgressHUD; - productReference = 87A9164E5451984017B164DE6217DE77 /* SVProgressHUD.framework */; + productReference = D45B1EDFE9EE9B9D92E3283F319D40D9 /* ChameleonFramework.framework */; productType = "com.apple.product-type.framework"; }; 9938F3058E6013FAB6444C41E86DC9E9 /* leveldb-library */ = { @@ -4522,7 +4972,25 @@ ); name = "leveldb-library"; productName = "leveldb-library"; - productReference = 735BB3DB964C42BE707ED69E758226F6 /* leveldb.framework */; + productReference = 5B3947E02DF46D7858EAF8710163E36D /* leveldb.framework */; + productType = "com.apple.product-type.framework"; + }; + AC12289D8D8EA15163F1BFCBE783D119 /* PromiseKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0DC6991F682446D4C82176F068017AC2 /* Build configuration list for PBXNativeTarget "PromiseKit" */; + buildPhases = ( + CC8AF2DF799194B85401585E6310DBE4 /* Sources */, + 2E51F7DCA137D0B31CDC10706FA60E7F /* Frameworks */, + 3367B6825E7C5E92E1D74329C6678597 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + CE8B9BF607EF5D6E7A483FEC579F239E /* PBXTargetDependency */, + ); + name = PromiseKit; + productName = PromiseKit; + productReference = C63B6F5B82109E43BDCF2B5DAAF42176 /* PromiseKit.framework */; productType = "com.apple.product-type.framework"; }; C60D48C24AC5107F932D1778161FE56E /* FirebaseAuth */ = { @@ -4542,7 +5010,7 @@ ); name = FirebaseAuth; productName = FirebaseAuth; - productReference = AC4B60D6ACFF487CD575866C2C63AA85 /* FirebaseAuth.framework */; + productReference = 28C9F16B6AE6D029F061F53E7C2D1D15 /* FirebaseAuth.framework */; productType = "com.apple.product-type.framework"; }; C71013989C387BAAD69BFE01570495EB /* GTMSessionFetcher */ = { @@ -4559,16 +5027,16 @@ ); name = GTMSessionFetcher; productName = GTMSessionFetcher; - productReference = CF8B0E2EDA2689C6BC746A629F7BA8C3 /* GTMSessionFetcher.framework */; + productReference = C740D8D2A0C6C1A4B33408528DA118C7 /* GTMSessionFetcher.framework */; productType = "com.apple.product-type.framework"; }; - C9AF417271F67CC4FA2DA0DC6AD972AB /* SwiftyJSON */ = { + CA422484FAF4A9E5D7FFDD41A987EF04 /* SwiftyJSON */ = { isa = PBXNativeTarget; - buildConfigurationList = E9BF5556389B6488DD0EE3872C87645B /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; + buildConfigurationList = EE5ADD106DD877CF0FA25116A46D0FE2 /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; buildPhases = ( - A372A85E24A9FB711EEDFBA1B654A2B6 /* Sources */, - 7654112D71A14EF9AEC680586A284095 /* Frameworks */, - EDDF4D7189FBB993DBB13161E0279B45 /* Headers */, + A5F985AECCB78EDE858A98978BC1735E /* Sources */, + 0E5039DE0E2A7B0B8EEB80F03F3B2DBC /* Frameworks */, + 2CD72E18F63602DBAD6EF78CE44A5BCF /* Headers */, ); buildRules = ( ); @@ -4576,58 +5044,43 @@ ); name = SwiftyJSON; productName = SwiftyJSON; - productReference = AD098846A244706B0CA5A40F14E3FA6E /* SwiftyJSON.framework */; + productReference = 1EB3F0C07B44D28853ADDFB2D43A7DA8 /* SwiftyJSON.framework */; productType = "com.apple.product-type.framework"; }; - DBA0CD9259A1F0AE57C098B81B8448ED /* SideMenu */ = { + DC201E4CC62EC8A658D2DFAC007E057B /* RealmSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 2601715ED0E29541D986ABC0E58359BE /* Build configuration list for PBXNativeTarget "SideMenu" */; + buildConfigurationList = F8D5E51296AB29436BE87BD586D441EE /* Build configuration list for PBXNativeTarget "RealmSwift" */; buildPhases = ( - 0A5850074A7C474ECC1515871788F8AE /* Sources */, - AB1141DB4559A03F12B75C4557F9A9D7 /* Frameworks */, - 42001CD05334C85D1463578AA4C94423 /* Headers */, + F3F08B461080A149AB8E8615D3A46E50 /* Sources */, + 377B78DF7C56A0D81BDF3EB82B0A2689 /* Frameworks */, + C66D3BE70ADA022658BF66D7BDA94F67 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + E0B91263522292E00662EA5470178946 /* PBXTargetDependency */, + ); + name = RealmSwift; + productName = RealmSwift; + productReference = C3A1858D00526C0CA80FD38C98A15A31 /* RealmSwift.framework */; + productType = "com.apple.product-type.framework"; + }; + DE7EC12ADEA52D1655CEC698566C4109 /* SVProgressHUD */ = { + isa = PBXNativeTarget; + buildConfigurationList = C41B0D57DB2F91B65D75BA345D68001B /* Build configuration list for PBXNativeTarget "SVProgressHUD" */; + buildPhases = ( + A9F6BD0B69A478301009AC6A14142F6C /* Sources */, + 9E79946D8CAA9D5508BFC37BB2DEAD21 /* Frameworks */, + AAB4A4955F4F9E231A2E6898F1AAD1C7 /* Headers */, + C4373E632CCB41CB6970E3D9D7B9FACE /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = SideMenu; - productName = SideMenu; - productReference = 8711A6C76DC7471688C3AA1DAA4567E2 /* SideMenu.framework */; - productType = "com.apple.product-type.framework"; - }; - E1AA72C2B8CC72EA72381C70AD32DFE8 /* Pods-pocloud */ = { - isa = PBXNativeTarget; - buildConfigurationList = B11E05D0A955FEE0CB7FD7BEE5D8DA43 /* Build configuration list for PBXNativeTarget "Pods-pocloud" */; - buildPhases = ( - 03C078409C7A25154F0E1C8AC98D5220 /* Sources */, - BF63EDAB06E85EE07B307527B914A351 /* Frameworks */, - EF74E60AAA6831DAF93861AFA95F97A2 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 2A86F36893962D3721057C3BA19E5A95 /* PBXTargetDependency */, - 079382D6E3CF64149633EEC88F7CFC6A /* PBXTargetDependency */, - 70C9C1C1515C16CCCE87B013984CA7E4 /* PBXTargetDependency */, - 2C5E2A8A2CA9A0D172030B81605AC57E /* PBXTargetDependency */, - F8D9EC095D6EF0D1E5A70596A9BFE888 /* PBXTargetDependency */, - 4865637BA32C02E329A1A3D30100BF97 /* PBXTargetDependency */, - A9656A67193E0B101D1F716B816E1398 /* PBXTargetDependency */, - 332F992D8F6B6716D0B3FC2D225FC271 /* PBXTargetDependency */, - C9D4A1AAD6B7B25AD7B48A3F58CE0B67 /* PBXTargetDependency */, - 3240C58B3D888497AAEBE10DD1190F2B /* PBXTargetDependency */, - 2AB12B2A74419AA5DBC1ED8207FA0EE5 /* PBXTargetDependency */, - 61EAD5086C2DE844C06B489326243754 /* PBXTargetDependency */, - EC8C21E36D6CBAAB661813D521E54D00 /* PBXTargetDependency */, - 27A4EDBC25C510A35A3D3FCE94BC352F /* PBXTargetDependency */, - AC0E051658A34E3869CE62DAA47503AE /* PBXTargetDependency */, - 31DA194512FA54AD00904ACE842639E8 /* PBXTargetDependency */, - 56B8256ADFCF9AF58F66B6434F878DE8 /* PBXTargetDependency */, - ); - name = "Pods-pocloud"; - productName = "Pods-pocloud"; - productReference = 4F84176FB531E6C5C208B71882DF37C2 /* Pods_pocloud.framework */; + name = SVProgressHUD; + productName = SVProgressHUD; + productReference = A625B6306ADE89B96DC9B095496B2B32 /* SVProgressHUD.framework */; productType = "com.apple.product-type.framework"; }; E4DD95323C54A78F879DAB0F1508B8E7 /* nanopb */ = { @@ -4644,7 +5097,42 @@ ); name = nanopb; productName = nanopb; - productReference = 813C855CBF32B7018B96D90D50ACDC75 /* nanopb.framework */; + productReference = D93B48CC39453EC085A4DCA234758D7D /* nanopb.framework */; + productType = "com.apple.product-type.framework"; + }; + EDEB4F3613A4A75F728C336B21B980B1 /* Pods-pocloud */ = { + isa = PBXNativeTarget; + buildConfigurationList = FA9A89677B36E95848010D4EAF1943A4 /* Build configuration list for PBXNativeTarget "Pods-pocloud" */; + buildPhases = ( + E381D926D91C0177AF297355FEB0FF95 /* Sources */, + B3CAE50F8658F0A70A5909E776F41E6B /* Frameworks */, + 1C550E429D565863EB513A347891D385 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 7433631DEC9C4D876B79CECDC617D449 /* PBXTargetDependency */, + B70DA8CA67FD70E4EB97476607B00F70 /* PBXTargetDependency */, + 8E49E8F067E173802D15A10336234635 /* PBXTargetDependency */, + BBA5A665037C88E5F23C5C6DD051A2DA /* PBXTargetDependency */, + 9DEEF15168287F6B7E598D86AD6B87FC /* PBXTargetDependency */, + C1AF5A9A3AF4C84EB7531D42434FB1D0 /* PBXTargetDependency */, + EE081D1E77C98C62B58A986675012DC0 /* PBXTargetDependency */, + 1CBAF262253D335B3172928224EA0467 /* PBXTargetDependency */, + AC92C9A714325E78B2D11355213F27ED /* PBXTargetDependency */, + 33D1DEB1BB557DC1814C4FB5EE3C0CDF /* PBXTargetDependency */, + 8961AA8AFDCF51F67701BBEFDD176B53 /* PBXTargetDependency */, + 5D0FC60E6A83622A70DDDA5BEB5706AB /* PBXTargetDependency */, + 701504D62CFFD30D3F316EA979E5B1EA /* PBXTargetDependency */, + 5C525E66868C3AD2FD9B1C03BEE54234 /* PBXTargetDependency */, + 7B8D7AE1896B2374783A0370AFC86E60 /* PBXTargetDependency */, + 6D1D289430B8B174E5D6ACC3141B781E /* PBXTargetDependency */, + 6942C11653017951AE1A4B6DFB300CBF /* PBXTargetDependency */, + E9CB01E1A9CEA7786E3D0ACCA8ED179D /* PBXTargetDependency */, + ); + name = "Pods-pocloud"; + productName = "Pods-pocloud"; + productReference = 29967233CB796B2BF275C6A16585480D /* Pods_pocloud.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -4664,12 +5152,13 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 4C7661379170F899047005E369170EF9 /* Products */; + productRefGroup = E7418253528F8161A60F1DFDF7D0DD85 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */, 8A267660E1AD4832DE75665F2F87AEA3 /* ChameleonFramework */, + 1D416D5E8AAA52C62EECDEEAFED16087 /* Charts */, C60D48C24AC5107F932D1778161FE56E /* FirebaseAuth */, 42FD17D195FA3B5B05CE79F0B6CF447D /* FirebaseCore */, 62FABD757FE4DF7B87CB5ACCAE424F36 /* FirebaseDatabase */, @@ -4678,50 +5167,30 @@ 4F87037150ABE2C9238B54E8F6E33F36 /* Kingfisher */, 9938F3058E6013FAB6444C41E86DC9E9 /* leveldb-library */, E4DD95323C54A78F879DAB0F1508B8E7 /* nanopb */, - E1AA72C2B8CC72EA72381C70AD32DFE8 /* Pods-pocloud */, - 4EEC98C9980EBF6EB559FE9840F88600 /* PromiseKit */, - 163ACDEEDFE672B67E0DB15318AF0C07 /* Realm */, - 26389CA2D7E58CA4716E217346D0655C /* RealmSwift */, - DBA0CD9259A1F0AE57C098B81B8448ED /* SideMenu */, - 8B772225B6972C5F5121F8C6F296B00A /* SVProgressHUD */, - 5F2B8B75736083DA9B4F09AE96C5205C /* SwiftChart */, - C9AF417271F67CC4FA2DA0DC6AD972AB /* SwiftyJSON */, + EDEB4F3613A4A75F728C336B21B980B1 /* Pods-pocloud */, + AC12289D8D8EA15163F1BFCBE783D119 /* PromiseKit */, + 85A4785CDCA19B18B452AB3681A101F5 /* Realm */, + DC201E4CC62EC8A658D2DFAC007E057B /* RealmSwift */, + 2E769F49CA0CFF5358BD147A496DC598 /* SideMenu */, + DE7EC12ADEA52D1655CEC698566C4109 /* SVProgressHUD */, + 7D63CE0CBBC5134E15681885C016EC4F /* SwiftChart */, + CA422484FAF4A9E5D7FFDD41A987EF04 /* SwiftyJSON */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 469AC157F509C4EEDA4929B1DDBB1AB5 /* Resources */ = { + C4373E632CCB41CB6970E3D9D7B9FACE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 578289AD8005663CCA5DB316F4068389 /* SVProgressHUD.bundle in Resources */, + 7D1136B66C6BC40D03189960BD425B45 /* SVProgressHUD.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 03C078409C7A25154F0E1C8AC98D5220 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4B891FCED5762B1BF7172440593024A5 /* Pods-pocloud-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0A5850074A7C474ECC1515871788F8AE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F4EBECD3A85AF148EB96E4DB09DF31EF /* SideMenu-dummy.m in Sources */, - 64DC09353634B71B2EB822DB2445E20E /* SideMenuManager.swift in Sources */, - DA502DD67B28D53911DCC73A2F08BB27 /* SideMenuTransition.swift in Sources */, - 4648BA9616288D53B2B5DB31C4D6222C /* UISideMenuNavigationController.swift in Sources */, - 65CFC8401439ED200531A9C8BA093380 /* UITableViewVibrantCell.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 154F6D32400678B08A7CB2E5FD292972 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -4852,17 +5321,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2DC8732F974416AD23FECB6C64983A47 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1E8B7FCF340911A42EF2B52A1753FF1E /* Chart.swift in Sources */, - 1A730E27B60A026BBF8C28B9C2248CD0 /* ChartColors.swift in Sources */, - 6A1331338D376322D3540CB2488CDC63 /* ChartSeries.swift in Sources */, - A498662E3250C5FD24E596EAAD389A53 /* SwiftChart-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 32B9974868188C4803318E36329C87FE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -4923,129 +5381,167 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 75D2674BBDE2678648975BE3DFF60A7C /* Sources */ = { + 5CC3312AAD6900EDFC5C0ED9BC963A63 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E414D863CA6DE727679476B85A46D37A /* binding_callback_thread_observer.cpp in Sources */, - B883B0D23D119D06A32042966038FCD4 /* collection_change_builder.cpp in Sources */, - E21DEBC819E22EDE912D5DFF61C0C973 /* collection_notifications.cpp in Sources */, - DB4C8CBE5BD2159632235A8DA6D3107B /* collection_notifier.cpp in Sources */, - F9201469F5FB6DAC27668A2F893350C7 /* external_commit_helper.cpp in Sources */, - C9F084A4147F5CACD28423926AA10B99 /* index_set.cpp in Sources */, - E8E5F19C649576B0A94647161AE3FA89 /* keychain_helper.cpp in Sources */, - D3507AD136BDFD219CF96005FA2762CD /* list.cpp in Sources */, - 52EF2C7CE707010D53C475ABBF786628 /* list_notifier.cpp in Sources */, - D44D0D23A3CCA6867940920582C7089E /* network_reachability_observer.cpp in Sources */, - 7FA272840823D7B6AFD692BC696AEDA0 /* NSError+RLMSync.m in Sources */, - F69AB231B620BE9E5B10876C401D9A75 /* object.cpp in Sources */, - 435999D32C443ADABB5E3A8EAD9ED8E4 /* object_notifier.cpp in Sources */, - F0E3080C69002862DD794AD5275B28AE /* object_schema.cpp in Sources */, - 0B3406885244014CC760ACE038EC84E0 /* object_store.cpp in Sources */, - 9BFDEFBE7DD21BB5D25ACF7FD7721526 /* partial_sync.cpp in Sources */, - F83E6BF9968D2038F1D4EC7F55774B8B /* placeholder.cpp in Sources */, - 425F51AAF70C7D8417D57D1B19C88B13 /* primitive_list_notifier.cpp in Sources */, - 9D226860F9B2A65B99B5C94C45BE2924 /* Realm-dummy.m in Sources */, - 1FBC378B5456547DDB88006579BB3808 /* realm_coordinator.cpp in Sources */, - B41AEE9CA376EE9A23AD1BE23117CE66 /* results.cpp in Sources */, - 7C83D7E1120E49B44EA977F8A6FAA3CA /* results_notifier.cpp in Sources */, - A181A5467A0A4222A5704B742DF4A643 /* RLMAccessor.mm in Sources */, - 47360E79F6A777934FA2C18198E447CB /* RLMAnalytics.mm in Sources */, - 4409FBFDFF1BA31FD658A2D8D30DEE8F /* RLMArray.mm in Sources */, - A69A64A73F26F57F07C95120CCAA73AB /* RLMClassInfo.mm in Sources */, - A3644063751733D55C32BA052E6441C0 /* RLMCollection.mm in Sources */, - 2DDC6239B9189C8EE6970FA3E9FC335F /* RLMConstants.m in Sources */, - 6D57600397E7FEF2FE198B2A94ACA1A7 /* RLMJSONModels.m in Sources */, - 38F03103D8E36ED6C41615B5C233AF9B /* RLMListBase.mm in Sources */, - 1135E0A1EF05352E7A0EC7D4A43E7B17 /* RLMManagedArray.mm in Sources */, - 9DBADD6400A67CD78DC0380D975F4F32 /* RLMMigration.mm in Sources */, - 71E206C326354BD637851A45E46BA039 /* RLMNetworkClient.mm in Sources */, - 0821C899DF347F483F5690BEEBDBB608 /* RLMObject.mm in Sources */, - 399BFDA5B1B0810AAE4335C65B34005F /* RLMObjectBase.mm in Sources */, - 49B39C06E9A82762BD6E3C113FBB0E5F /* RLMObjectSchema.mm in Sources */, - FB126AFC86DBEF45F48FF8E79F4FA438 /* RLMObjectStore.mm in Sources */, - 9783BFF70715D5C496E6A6367463F68C /* RLMObservation.mm in Sources */, - 261ABF6B768E2AFCC0B9D792A5A000C8 /* RLMOptionalBase.mm in Sources */, - 4A0827FD3570B3316C37ED07DCB5E76B /* RLMPredicateUtil.mm in Sources */, - 8127717ABC83E9CD6D893AACC78437D4 /* RLMProperty.mm in Sources */, - F805B446F1365DD7C5B757B1332F76E9 /* RLMQueryUtil.mm in Sources */, - 6163542FEA0446D63830BFFE4E3A6C8E /* RLMRealm+Sync.mm in Sources */, - CB607DD1586A5D90ACC69FCDD7E006D1 /* RLMRealm.mm in Sources */, - 6AF2A29491D25A0C84E9AADFA1FE485C /* RLMRealmConfiguration+Sync.mm in Sources */, - 65DBBF871124634290B37233C5CB3C22 /* RLMRealmConfiguration.mm in Sources */, - C723A74304A28912C98C04611D2A2F41 /* RLMRealmUtil.mm in Sources */, - 064FDD771AFFCBD25091CF39EF7E6644 /* RLMResults.mm in Sources */, - 433C9C7D70ACDC7721ECDEFA41B4F0D1 /* RLMSchema.mm in Sources */, - A55460BA0BBED79CB3FD2000AC7DA5DE /* RLMSwiftSupport.m in Sources */, - 36DA7ABDF6EAF0559F68F76FB43A07A6 /* RLMSyncConfiguration.mm in Sources */, - 8F6AB8BAE3884560E926B5026255E788 /* RLMSyncCredentials.m in Sources */, - 4F82A824649A004B0D4A3F0CD21578F8 /* RLMSyncManager.mm in Sources */, - 588602AC1BFA61E16A4DC0FD6E0781B3 /* RLMSyncPermission.mm in Sources */, - 830FC47F91BB2479069B013903FB0464 /* RLMSyncPermissionResults.mm in Sources */, - D97FCF4447D881820BE97D09F30D3926 /* RLMSyncSession.mm in Sources */, - 61AB8125234DA0505F61F21D8A4854E1 /* RLMSyncSessionRefreshHandle.mm in Sources */, - FAE1429761E55B80D8F9F4EE387E697D /* RLMSyncSubscription.mm in Sources */, - 642B039A54F8DD39B0830022A960CF25 /* RLMSyncUser.mm in Sources */, - BF9BDDD69D5060066B745D6C5587C05D /* RLMSyncUtil.mm in Sources */, - A6C641B47CB496B8E32B9D9C9B7FFBC0 /* RLMThreadSafeReference.mm in Sources */, - D75E588D278E2741F2D581C5C3961167 /* RLMUpdateChecker.mm in Sources */, - B581786440DAC44344D7209A8EC0CDE9 /* RLMUtil.mm in Sources */, - 3A8BA471F2181FF519448221941B6C34 /* schema.cpp in Sources */, - 3A96B895BAA5983FEB9FEC604986B783 /* shared_realm.cpp in Sources */, - 910E35C49EC8FE29381F288A75BA9CAD /* sync_config.cpp in Sources */, - 97A5AB43F7CAC0CA3E126CDBA1794F8C /* sync_file.cpp in Sources */, - 576442174185E84DB817C3AE7DFF252F /* sync_manager.cpp in Sources */, - 1CA1E563F7760E846BB4CD1AE64498E6 /* sync_metadata.cpp in Sources */, - FA5820A11082B0BB3D16F39705A6BA74 /* sync_permission.cpp in Sources */, - E29E5FF8047955E70A0F659B4834D414 /* sync_session.cpp in Sources */, - 1A58D37AAF7B1DBB9FAD6F113B28008A /* sync_user.cpp in Sources */, - 48FF6E579E7F64D81A7D638D12BA15DC /* system_configuration.cpp in Sources */, - F3AABB11BFCA0D8614959DD0FEFB461F /* thread_safe_reference.cpp in Sources */, - 5F7203B3E3A13C8DFA1BB6A3D38B12EF /* transact_log_handler.cpp in Sources */, - ACE1391C1EA3D69D4DAE6A2A176D052E /* uuid.cpp in Sources */, - BD2F9C5A86BEFFA37CB0DE1308DB8D9B /* weak_realm_notifier.cpp in Sources */, - 808816BF42B240191330A4F736AB84A9 /* work_queue.cpp in Sources */, + BF711F9FCDDC898433FB04664594E39F /* AnimatedMoveViewJob.swift in Sources */, + 5F04B501E1FAFBB8F29C4BED4101032E /* AnimatedViewPortJob.swift in Sources */, + 40B98EAE903725671DDD49C09B110ECF /* AnimatedZoomViewJob.swift in Sources */, + 31F0D5BC7B463EFE9735CE9C992B146E /* Animator.swift in Sources */, + A69CD59AB50E01403A646479704F1792 /* AxisBase.swift in Sources */, + 736EF63B2F314148AB46F2AE5D935C59 /* AxisRendererBase.swift in Sources */, + 36FB477816CAD11896C74839F670C978 /* BarChartData.swift in Sources */, + 24DB250E2553A2584317D1AE38AA0B28 /* BarChartDataEntry.swift in Sources */, + 3AC9A6193ACBB2022412D554C807ECA4 /* BarChartDataProvider.swift in Sources */, + ECA8832916B8D8EFFAB5A2C766A6330D /* BarChartDataSet.swift in Sources */, + 99A845D04850C426CBBAB1354D280A8F /* BarChartRenderer.swift in Sources */, + 90C91B4DB090622DEF0801547D1035E8 /* BarChartView.swift in Sources */, + 107B2BEC263D45D8A7D927F98CA08EF8 /* BarHighlighter.swift in Sources */, + 541ACC8E434F35204868338AED4A3E18 /* BarLineChartViewBase.swift in Sources */, + 6FC5B0E0F56612457D2A08E5372B2265 /* BarLineScatterCandleBubbleChartData.swift in Sources */, + 7266DEDA85346EA9E01DD661C1C1AA17 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, + 1B113CB9C36746050ADC93F2D5AA40B2 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, + B5C06A9E2E9333E2CE5ADCFCFBE195E9 /* BarLineScatterCandleBubbleRenderer.swift in Sources */, + E79525D2BB5EFBA1170DDF31EFE69E1B /* BubbleChartData.swift in Sources */, + BBC5DF13B0556466C9FC06D9A620EFE9 /* BubbleChartDataEntry.swift in Sources */, + 7E4271876298C299BE9C94B0620F4D18 /* BubbleChartDataProvider.swift in Sources */, + 5FEDAC5E86BF81C3243CED51CD53CC35 /* BubbleChartDataSet.swift in Sources */, + 121E3CFD495BA608A6C85E9835F39FDB /* BubbleChartRenderer.swift in Sources */, + E5B1F1D3579641AA5FF8C031950F56F7 /* BubbleChartView.swift in Sources */, + 4D16399E42DACB783BD832909B66F673 /* CandleChartData.swift in Sources */, + 2C00EEEB878E3AFF833FB4265139E751 /* CandleChartDataEntry.swift in Sources */, + 7542D705B7B04A2DA07060CD7836EE82 /* CandleChartDataProvider.swift in Sources */, + 73D8B4618F9B5B178F8414D30F6FF7D4 /* CandleChartDataSet.swift in Sources */, + F34138A7B6DA112CD721402546A83E4C /* CandleStickChartRenderer.swift in Sources */, + 4BACAA53D0EC568832CEDD59ABA1CE06 /* CandleStickChartView.swift in Sources */, + DC6292FD16D3A68DA26D7110AB8DE316 /* ChartAnimationEasing.swift in Sources */, + 78E9166215F02F3FA8A5E2923C86E2E8 /* ChartBaseDataSet.swift in Sources */, + 0EB00BFDDF749FB31540233CFA696558 /* ChartColorTemplates.swift in Sources */, + F17F62DDB93ADF8E88628A6DEAE2D5E5 /* ChartData.swift in Sources */, + 0CFFC8A4F8CB53582A8CDD3D760DC552 /* ChartDataEntry.swift in Sources */, + ADD0A7D4873694805EAD32848441AFAD /* ChartDataEntryBase.swift in Sources */, + 679A922E58AD36EA0CD2FF1F194A49F8 /* ChartDataProvider.swift in Sources */, + 96ADBE2B89D8E6080D3A8297705BDE76 /* ChartDataRendererBase.swift in Sources */, + C7C871FDCA5DB59FCA6D79C3E40D31F8 /* ChartDataSet.swift in Sources */, + 0DBCD6C0B88CE3CA4E32C7C1B59FDC5C /* ChartHighlighter.swift in Sources */, + C54127087BD239F57436AC8A9B79BE81 /* ChartLimitLine.swift in Sources */, + 2886AB5EEBEB31E87420ABCCEC2B1762 /* Charts-dummy.m in Sources */, + 20F5A490EF7E4CCDB94EFB87572B8178 /* ChartUtils.swift in Sources */, + 25341A055ACCAAE63F479800DEEBFE1A /* ChartViewBase.swift in Sources */, + 22C79DF4949D58696FBCD17DE758FC92 /* ChevronDownShapeRenderer.swift in Sources */, + BD7B00B2F65ECB9F95EF3CAA327B4B58 /* ChevronUpShapeRenderer.swift in Sources */, + 5C66D4BED1B4572FB65745EE045961DA /* CircleShapeRenderer.swift in Sources */, + 358768F88E772F4647ABC89090218A1F /* CombinedChartData.swift in Sources */, + C635A40164B7240957763788406E9DDC /* CombinedChartDataProvider.swift in Sources */, + AC87C9266ACAA0FA87CEF8E83C0569A6 /* CombinedChartRenderer.swift in Sources */, + C4AEF283B2A61E8D0E03C508E2E0884D /* CombinedChartView.swift in Sources */, + D5C99BB23C97A332BC297B5965B781A4 /* CombinedHighlighter.swift in Sources */, + 9512FC6084B2BD1AC845BE76B3F2540C /* ComponentBase.swift in Sources */, + 416214FA92743FF11B78120FC4734B28 /* CrossShapeRenderer.swift in Sources */, + 3AC1624E17DACAC3AEA1D9543E58ED55 /* DataApproximator+N.swift in Sources */, + 8992239AF1272804CEE86F780052CF62 /* DataApproximator.swift in Sources */, + 69E81189486A414318D77B812FE5BD11 /* DefaultAxisValueFormatter.swift in Sources */, + 334B19BE6F150C629E49D3E2291D4117 /* DefaultFillFormatter.swift in Sources */, + C136A4D878A7F03220827161FFD0436F /* DefaultValueFormatter.swift in Sources */, + FB0545D14B1E4861481C33CBAA0C0E38 /* Description.swift in Sources */, + 26E6A619C6EE68508416929515A0CD42 /* Fill.swift in Sources */, + 656D24B598864391F4AAD997DA78A973 /* Highlight.swift in Sources */, + 13138040C1441CFA3E307F16C6F91E0B /* HorizontalBarChartRenderer.swift in Sources */, + FF094B99FBD0FC5CFAC0091958D49032 /* HorizontalBarChartView.swift in Sources */, + 4A1C47F3A607BB4FE2FEBA0E5E6D1F50 /* HorizontalBarHighlighter.swift in Sources */, + FC57776203D958993075D6E1E166A07F /* IAxisValueFormatter.swift in Sources */, + CA3C2E825B627B0E19297606C239146C /* IBarChartDataSet.swift in Sources */, + A4151F881DAB4651899F9E8F510DA531 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, + 9053E198DE4959D70159A21A8F90BB63 /* IBubbleChartDataSet.swift in Sources */, + 3C93FB4B67CCE624CDB59AB77B0D93E7 /* ICandleChartDataSet.swift in Sources */, + EE96809B72CD956D93B2C74C5CEC3079 /* IChartDataSet.swift in Sources */, + 5D1756710EA899736AEA98FB3721E7A0 /* IFillFormatter.swift in Sources */, + 5EBC299D308103979F873C085EF99470 /* IHighlighter.swift in Sources */, + DC3D84DA4F6D53D267AD52A1E82009A5 /* ILineChartDataSet.swift in Sources */, + 5E25BD5C5721C0698AB67ED6ED3E2202 /* ILineRadarChartDataSet.swift in Sources */, + 8D4DDB21B8B72A5104CFF24DA8590CAA /* ILineScatterCandleRadarChartDataSet.swift in Sources */, + 510E4C97F40677A248DF595EF41D1013 /* IMarker.swift in Sources */, + 2361551BB51CAF8596525C84FA20278F /* IndexAxisValueFormatter.swift in Sources */, + E6FC09D485B3A310B30A04CDA03AA9CB /* IPieChartDataSet.swift in Sources */, + DD142F02377F5E3B0EB7C5A94A756F66 /* IRadarChartDataSet.swift in Sources */, + FFF38F053B3F4842CAFAFD53109555E3 /* IScatterChartDataSet.swift in Sources */, + 0A14C975AE6102593F2C0C01C42612AB /* IShapeRenderer.swift in Sources */, + 8C8FB298E817329B3775E7E12BE7CC92 /* IValueFormatter.swift in Sources */, + 6287C456EF61332DC742AF12E6051809 /* Legend.swift in Sources */, + 66E7265532304E90A9D5E6DBFABD4517 /* LegendEntry.swift in Sources */, + D70AC4ADBC1784237470DF649F33FBCD /* LegendRenderer.swift in Sources */, + 7485FDF311361494561EFD1A3E866F53 /* LineChartData.swift in Sources */, + D35653116BC9D9386ABBF195A3092996 /* LineChartDataProvider.swift in Sources */, + 7548ACB434594E231EFE5D75A5D96CCF /* LineChartDataSet.swift in Sources */, + 940C50A9F197CA2D0ED6CB073893A764 /* LineChartRenderer.swift in Sources */, + D2BDAB02A9525421303C75FF9A2BD5DA /* LineChartView.swift in Sources */, + EAFE66969B8288438DB654702FE920CF /* LineRadarChartDataSet.swift in Sources */, + 7596C4EC49FA537B84FB3C63F3890188 /* LineRadarRenderer.swift in Sources */, + 5CF666D94A00EB9897A2A75EBA0A1A77 /* LineScatterCandleRadarChartDataSet.swift in Sources */, + 27CFB28382586DAA7335F21D81F3BBA4 /* LineScatterCandleRadarRenderer.swift in Sources */, + 9CABBB1A02009EC2595AEAC4F61CDF04 /* MarkerImage.swift in Sources */, + 45E1D7A51B9B03431DEE490674BFC0A9 /* MarkerView.swift in Sources */, + DB5A17947A918F9726EC32008524A936 /* MoveViewJob.swift in Sources */, + 2E77D12FF73D2CDC3FC900187D365C66 /* PieChartData.swift in Sources */, + 8F7444EE525DDAC487E9638AD212345A /* PieChartDataEntry.swift in Sources */, + 47A398B18A8CE6D23F5BB2E001A83FF7 /* PieChartDataSet.swift in Sources */, + 92F3ABF814C451C5B68BC008649E8FE7 /* PieChartRenderer.swift in Sources */, + D72F84B50637811140165357EEB305A1 /* PieChartView.swift in Sources */, + C42C84BBCA3684DC26444CDD62C14034 /* PieHighlighter.swift in Sources */, + B7251BCC063F1B5D357B31DDA9D3911F /* PieRadarChartViewBase.swift in Sources */, + 4BE216A9543B0A37845E3129E2D1B3E8 /* PieRadarHighlighter.swift in Sources */, + C8EC913F45D98180007B34C46A351CAF /* Platform.swift in Sources */, + F3164A48C4BD14B24589513631E76289 /* RadarChartData.swift in Sources */, + 952170D5850C7E1F5814E53FC255961E /* RadarChartDataEntry.swift in Sources */, + 07791CBB2F51E5BA87C08D4BC1F7C070 /* RadarChartDataSet.swift in Sources */, + FBE3E2442ACE2FBA04F7AB0C162C4D89 /* RadarChartRenderer.swift in Sources */, + E06C11517CF5EBC3AD4716BAF9DE7032 /* RadarChartView.swift in Sources */, + 806564C05DA4E1954384AE79FFDAFAE6 /* RadarHighlighter.swift in Sources */, + CE8D59281ED15FC18FE6CF0594B3533D /* Range.swift in Sources */, + 5857B07B67A8752924C22368C45E436C /* Renderer.swift in Sources */, + 989B6227B9B6629EF3E56E382496E75E /* ScatterChartData.swift in Sources */, + 560C8F3AD5B3809D0148B2BB80C987F5 /* ScatterChartDataProvider.swift in Sources */, + 0779E9756899A25CA332C9E3AE8B924C /* ScatterChartDataSet.swift in Sources */, + DE8201138BC27360623DED5E33DB09F7 /* ScatterChartRenderer.swift in Sources */, + DCBAFF3CE02B5C32DDE0EBA4927EBAA1 /* ScatterChartView.swift in Sources */, + 964145A6D396D87C55E0D8BFFFFAB21E /* SquareShapeRenderer.swift in Sources */, + 6825F987487EDF06F4D24299C38983E4 /* Transformer.swift in Sources */, + 9B53647E6877E38B0F49C09303DE7397 /* TransformerHorizontalBarChart.swift in Sources */, + 02F884A5BF39328B21CC5CEA3AE8904C /* TriangleShapeRenderer.swift in Sources */, + D9243CF0D41EEE51E01B590DE41C8DC3 /* ViewPortHandler.swift in Sources */, + 86492D003584407BF5EA438D0A5F489C /* ViewPortJob.swift in Sources */, + 7384A31634E8E31EE02AC1FF415BDB0D /* XAxis.swift in Sources */, + 6C679C3A31EDFD86CA769C0213F0266D /* XAxisRenderer.swift in Sources */, + 4405A6A5344DDD391720FDD1C5C9BD2A /* XAxisRendererHorizontalBarChart.swift in Sources */, + 751C726677C9300274CADE580317C0AA /* XAxisRendererRadarChart.swift in Sources */, + 43D39889A2A4D9B161B8E8B36D10ADFC /* XShapeRenderer.swift in Sources */, + 3D3AC8D12A23595327C1B09C5729FF56 /* YAxis.swift in Sources */, + FA235C475565E40FB2EC81D8C07AEB1D /* YAxisRenderer.swift in Sources */, + B9E2A3DF455414E2BE8C54E50FF87A50 /* YAxisRendererHorizontalBarChart.swift in Sources */, + F1657543192F8AE888B0EC60DEFE1A75 /* YAxisRendererRadarChart.swift in Sources */, + 3C08FD7959BD8AB4EEFE90F812CE0331 /* ZoomViewJob.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7F1471170F33BBB4E520D18BF30380C7 /* Sources */ = { + A5F985AECCB78EDE858A98978BC1735E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EF13A859D01FA9A4B2BDB00CB24D4748 /* after.m in Sources */, - 4959495C7F1283AA5DFBAD578C6FB776 /* after.swift in Sources */, - DD5FE14CFBE0E796D2C9C7D289292B9E /* Alamofire+Promise.swift in Sources */, - FD9ACDC426E5C19D4A621601F2F65D15 /* AnyPromise.m in Sources */, - F42E1724B80954ABC8705BD199473594 /* AnyPromise.swift in Sources */, - 0E345887C2458F446393A8E03280E158 /* Box.swift in Sources */, - EDC0AE2E2B97A9B99EC3EE1D3AA3766E /* Catchable.swift in Sources */, - 0B916B7D5A78D907E23E760C62C564F5 /* Configuration.swift in Sources */, - A1B533FC8826A7066B6A475303BB591F /* CustomStringConvertible.swift in Sources */, - F988B85970A139C7B4F4884582B9D531 /* Deprecations.swift in Sources */, - D50B182A4DFF40544E60F196CC22346B /* dispatch_promise.m in Sources */, - 3E083F23737BC2771B16F318CD6EDE33 /* Error.swift in Sources */, - 484A0DB6BD53D6803DC36BCAC3B8698F /* firstly.swift in Sources */, - B08A1C1CA69A1747D878E01818B2151C /* Guarantee.swift in Sources */, - DCD7B03F11EAA6E946BBEA0095155317 /* hang.m in Sources */, - 450DF41F173DA551D3267F90654AA249 /* hang.swift in Sources */, - 180459A0350285C55BC9FBF9FABFA795 /* join.m in Sources */, - 106125E7E166F639F404CE8BF5B1AFC4 /* Promise.swift in Sources */, - 79822EAE0CA5D70ABAEFB595A3E08602 /* PromiseKit-dummy.m in Sources */, - EAFDE5409F00D4D18589D1A977339952 /* race.m in Sources */, - 3A9EBE6259AABD5E8C9D29024C890100 /* race.swift in Sources */, - C8A800D4E27711D9531B7BAF0A610E9B /* Resolver.swift in Sources */, - 5145E0F78D02E14C4966514339300AF2 /* Thenable.swift in Sources */, - C0AC52263C7989D239B4E276677E81A1 /* when.m in Sources */, - 0874436CD4E3BBBBA79F2FA74BDF8126 /* when.swift in Sources */, + EB73EBC822BCD6277EAD01E54597AED9 /* SwiftyJSON-dummy.m in Sources */, + 36767BFA83A42F60FB15CDB2FF33280A /* SwiftyJSON.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A372A85E24A9FB711EEDFBA1B654A2B6 /* Sources */ = { + A9F6BD0B69A478301009AC6A14142F6C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4AD0818276F1C0C54F358E4AA77EB41C /* SwiftyJSON-dummy.m in Sources */, - 986908EC6AD3E31E5729D3262A925066 /* SwiftyJSON.swift in Sources */, + 3E2FA3D0FE09B85E081CC9BDA92C299E /* SVIndefiniteAnimatedView.m in Sources */, + 33DBD98E7F314E882859B5B00A2EAD74 /* SVProgressAnimatedView.m in Sources */, + D1E5B2726DEDEF589D0DCFDAC100E7E5 /* SVProgressHUD-dummy.m in Sources */, + AF7208E6743D2450FB0323B508E615B5 /* SVProgressHUD.m in Sources */, + FA83F71C3974BA3D5F72B84259276652 /* SVRadialGradientLayer.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5069,15 +5565,47 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DCD61271949EC3D14F9513DBDEBBF3AB /* Sources */ = { + C80598E619D2ADBC9287FA4AFBCB76EB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CA844C4C012A9D0AD0B7E1651A852CBD /* SVIndefiniteAnimatedView.m in Sources */, - E035175CF4C77707C51D7C8482D4D312 /* SVProgressAnimatedView.m in Sources */, - 88C16E132E58AF7B34F6D755DE59EDD4 /* SVProgressHUD-dummy.m in Sources */, - 7EF34A00DA1459CCF3A774CE3AE8E8A7 /* SVProgressHUD.m in Sources */, - 62E874A16C2A4062460E34245D003468 /* SVRadialGradientLayer.m in Sources */, + 3CCDAF71A141437EC1D6E4096C1E0F92 /* SideMenu-dummy.m in Sources */, + 92E7CD0D8B384FA121136A9185A019E0 /* SideMenuManager.swift in Sources */, + 5485ADF94A92CF163F3FF10BD92B946B /* SideMenuTransition.swift in Sources */, + DBCC21237D99AA5FF9696B5AA8D228C1 /* UISideMenuNavigationController.swift in Sources */, + C032D98203BCD9F59A3E1211D9B1A936 /* UITableViewVibrantCell.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CC8AF2DF799194B85401585E6310DBE4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C44ABAEE96656B47C1A5E8A3319EC358 /* after.m in Sources */, + 37C86C6EA85215102C748A965D086BDC /* after.swift in Sources */, + 9870EDBF6E8ACAB0F4CD46E77E5BFC86 /* Alamofire+Promise.swift in Sources */, + B363B2414E5BD50E7F6C39B745C5F81D /* AnyPromise.m in Sources */, + 86AA000156CB8798218FEB463F78B9B8 /* AnyPromise.swift in Sources */, + 57BD56667F38045F3D1DC5559D3E60E1 /* Box.swift in Sources */, + B381B958EFB1A8BE2D793C17B273086E /* Catchable.swift in Sources */, + CFF63FF5AC0F8479FA17DC25FB7A52BF /* Configuration.swift in Sources */, + 45FFD26DA4724F422AF6CA0693A317B8 /* CustomStringConvertible.swift in Sources */, + 288252B93043FF0E2B6EE603E50F82AA /* Deprecations.swift in Sources */, + 1DD06AA60216738835B5091C5E122AB0 /* dispatch_promise.m in Sources */, + F05C013826F73FC7A5E6677879C8221F /* Error.swift in Sources */, + 7B0FF41A39B7540CFD19F0F0653DE9FA /* firstly.swift in Sources */, + ABE3789ACE881004249CB7EB8469070B /* Guarantee.swift in Sources */, + 2ED4D7DC8C6BBB2E420D8E6C8CEBEEC2 /* hang.m in Sources */, + 972A007B9792B86D70AF5B0523A681CE /* hang.swift in Sources */, + 755769D3387214328FABFAD50B693E30 /* join.m in Sources */, + AC51FABED87FA7E9453195A5A43E410C /* Promise.swift in Sources */, + BD111EC1D596F1DB4DB4348AFD2C9A58 /* PromiseKit-dummy.m in Sources */, + 04DBDF6FFE93B305F87FE4B551E0B027 /* race.m in Sources */, + 65FC2E5A28A19C710FD91022548C0BDE /* race.swift in Sources */, + 5395E80F63A0F3C2F2CBD4ED375F6A68 /* Resolver.swift in Sources */, + 94B6D2B76AEFCAA823FF8B3459E055D0 /* Thenable.swift in Sources */, + 994CBAE1EBD13FA3DFDC56F24F86EA14 /* when.m in Sources */, + 00F47E1BF1D75C714428D0E2F530E48F /* when.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5131,31 +5659,135 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - ED79A79B4172361019A67CB6BBF408B9 /* Sources */ = { + E381D926D91C0177AF297355FEB0FF95 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AD9D97E572F2A2A9FBEC0ACE5B9EE778 /* Aliases.swift in Sources */, - FCAAC6CD678BA60068F1191155A96BBD /* Error.swift in Sources */, - 5533ACC87CC583984578DE1BFCB1B82D /* LinkingObjects.swift in Sources */, - 4945C0CDE46AABECBAA146239ECE29C7 /* List.swift in Sources */, - F8469D950E387BEA23EB3060ACFAF117 /* Migration.swift in Sources */, - F31505C5BB0BC94F063945FBEA567BF3 /* Object.swift in Sources */, - AF82F6DF4DC1CD0178AC120F8724130F /* ObjectiveCSupport.swift in Sources */, - 1F4AA0E8AAC9520C063952E44374D5A4 /* ObjectSchema.swift in Sources */, - B59494F0DA153AFA0E1D6834724A04C2 /* Optional.swift in Sources */, - 7BC7D601502B273670A5D4FB888E9CBE /* Property.swift in Sources */, - 71BC60E2FFF0BEF3977451C3DABD165F /* Realm.swift in Sources */, - 205790B0034545C1E59B740603516491 /* RealmCollection.swift in Sources */, - 22A339DD4C3B157385293F1E96D39A76 /* RealmConfiguration.swift in Sources */, - F185E0B6CB75ACF333B0A8C9A137F273 /* RealmSwift-dummy.m in Sources */, - 1A2FF7E45AC4616073975DBD62994EB1 /* Results.swift in Sources */, - 8495065E38B2EAE9DA645D45DAE2AA5C /* Schema.swift in Sources */, - 8C783050F3226AFD18382624623DB229 /* SortDescriptor.swift in Sources */, - 26727FD614DDF2000D979FB368CA56F0 /* SwiftVersion.swift in Sources */, - E47F69731DD6070B8FAB237BB65CF5CA /* Sync.swift in Sources */, - 719D9A075FE59855E3E8EE95D516FCB2 /* ThreadSafeReference.swift in Sources */, - 85224A019E1C1A806F0C4A884B5913DD /* Util.swift in Sources */, + C1DD9F380B9A5E2F13F0F34EAC8845D5 /* Pods-pocloud-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E77F86F25E4B907D50BCB511B8E9345D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 394D1F99288AEA2D80645BE108867645 /* binding_callback_thread_observer.cpp in Sources */, + C42D0F4964E822FAE97322767D8D0CB6 /* collection_change_builder.cpp in Sources */, + 7E6EF2E4A9BC02CF1614BE09DCE1BE91 /* collection_notifications.cpp in Sources */, + A0E491BE55ACE4EF2C826A37B22D2939 /* collection_notifier.cpp in Sources */, + CF29294314CA7C1104D1DBDA7E006D34 /* external_commit_helper.cpp in Sources */, + 90DF4DE36B93C4DB6C683D39FD28F684 /* index_set.cpp in Sources */, + 5DA8D93BC3AF5A5691076C0A5B4D2412 /* keychain_helper.cpp in Sources */, + F436A29081BC6FFCE34183E1EE4384D5 /* list.cpp in Sources */, + CB22616E397605733EF48764C6AA0974 /* list_notifier.cpp in Sources */, + D3E4C09B03E95D37D671528F27CB1613 /* network_reachability_observer.cpp in Sources */, + E5D4775E2489D034D6D6F20900569EF0 /* NSError+RLMSync.m in Sources */, + 46BEE5F68FE3C89EA565CC6A159A27A0 /* object.cpp in Sources */, + E8B12C9DD3456B9403F35DCAFA088707 /* object_notifier.cpp in Sources */, + 9957637E5E91AD48BFD1A47F62AF8F41 /* object_schema.cpp in Sources */, + 1B015614AE2EA2F9730119786D4D3513 /* object_store.cpp in Sources */, + F825A4F1D13FF1652E961F0EE90F8E83 /* partial_sync.cpp in Sources */, + CA620B910430E64ED2640CE1E8D00218 /* placeholder.cpp in Sources */, + EDF33AD8DFAD527E84D2F3982244D805 /* primitive_list_notifier.cpp in Sources */, + B7FC69D3ACE5ECF99DE7BE0934080743 /* Realm-dummy.m in Sources */, + 97DDC62C2566F1DAFF266A8E31B52D8D /* realm_coordinator.cpp in Sources */, + AF4ABC7B74E33FC53C01E73602C6F466 /* results.cpp in Sources */, + E0D426A3CB89383D5F9A2DFDECA05305 /* results_notifier.cpp in Sources */, + 42607FB38CB0125A4350B051514AD79B /* RLMAccessor.mm in Sources */, + 55430EEFD7E29A71CA560F9942C2A76A /* RLMAnalytics.mm in Sources */, + B6363D182BAF8C9BB5024586C4187BF1 /* RLMArray.mm in Sources */, + 09C587A0B751E9C844D37AE4031A20E4 /* RLMClassInfo.mm in Sources */, + 8C2B148EEFDCF32020883BFD4603B636 /* RLMCollection.mm in Sources */, + 9CFA1AD23B694842A4E48A0DB4F1D7B5 /* RLMConstants.m in Sources */, + 08B298D9DA09D7AE42609DCEB437104F /* RLMJSONModels.m in Sources */, + 9B5AA7A448DDEF1ECE598F8026F44AE4 /* RLMListBase.mm in Sources */, + 74F7BFC1A12CF621F696F66E0CBDBFDE /* RLMManagedArray.mm in Sources */, + 429F18D5A4135B9DDE015E390C9E2091 /* RLMMigration.mm in Sources */, + 6C4253A1AD1D4232F19C0D68A0A868B2 /* RLMNetworkClient.mm in Sources */, + 02E1DA68C0A62892BB5ECBE3041954BD /* RLMObject.mm in Sources */, + 640B1792326A610FA508B88007E12704 /* RLMObjectBase.mm in Sources */, + 79D0731B67F283B00440552750028543 /* RLMObjectSchema.mm in Sources */, + 80194706017AFDA377F52F0F1541C2BC /* RLMObjectStore.mm in Sources */, + 1ECCA54832CF29434C190CCD88C81411 /* RLMObservation.mm in Sources */, + 42AED9C6D8C9E42E85DC69E979944D39 /* RLMOptionalBase.mm in Sources */, + 6CFBCAF693BBBD990C8DA4B8C60450FD /* RLMPredicateUtil.mm in Sources */, + CAB0A258495DEABD4A2BF5E9C7FFF9CE /* RLMProperty.mm in Sources */, + 035D72BDA1849FC0F1DF59E78FAF8F99 /* RLMQueryUtil.mm in Sources */, + FAA4D66F240061BE2D23E2DCFA8EBDA1 /* RLMRealm+Sync.mm in Sources */, + F403D77C753A61A3A43015CCCD6E3419 /* RLMRealm.mm in Sources */, + 293DE9664BDB913929D9729108CF3FE8 /* RLMRealmConfiguration+Sync.mm in Sources */, + DDEDBC3E9C1544066B1FF710DD7420EC /* RLMRealmConfiguration.mm in Sources */, + 8C31E7EB56D5BD35C933B649B15FE56C /* RLMRealmUtil.mm in Sources */, + BB015B2B6649BC2499C3C505A092E7E8 /* RLMResults.mm in Sources */, + 37287DDF85833B8A72202DA8575B67FC /* RLMSchema.mm in Sources */, + 7938F54522516077BC7706B218BF4B26 /* RLMSwiftSupport.m in Sources */, + B457286593975FC40D455355602D8111 /* RLMSyncConfiguration.mm in Sources */, + 64DCC3B2E7A0680230CB1FC513B3E463 /* RLMSyncCredentials.m in Sources */, + CC2D6D87EF9DB614AF3DB177596937F9 /* RLMSyncManager.mm in Sources */, + 15E5B6E3920FE127098A77BC57BB544F /* RLMSyncPermission.mm in Sources */, + 57007C54BFFFB47A9A2F149BDD693C83 /* RLMSyncPermissionResults.mm in Sources */, + 9D8DA4882EB1307B73A4F56C0372CD84 /* RLMSyncSession.mm in Sources */, + 61032DBD7C50644EA9FA6F4D1857CF8D /* RLMSyncSessionRefreshHandle.mm in Sources */, + 5438A7BFE0B22BF23D49AF0D592F915A /* RLMSyncSubscription.mm in Sources */, + 7CD47F45578131D5202840A6EFF99C90 /* RLMSyncUser.mm in Sources */, + 5D808BD6FE6760A9D943AB7E86C3A071 /* RLMSyncUtil.mm in Sources */, + 22D6AC3454B14D7C3CC108C16838657D /* RLMThreadSafeReference.mm in Sources */, + FC58F30B6D6D806A4F07700836301649 /* RLMUpdateChecker.mm in Sources */, + E3CE7D8E0B77F66F39B4D0F35AD4D8F5 /* RLMUtil.mm in Sources */, + BC88A6EDACA76FE1E5EC7ACFABAA0499 /* schema.cpp in Sources */, + 2E7ECAB13CC0719333C4E1EE26FB7284 /* shared_realm.cpp in Sources */, + E5FC72B541FCB1A63257993E0A64EA5A /* sync_config.cpp in Sources */, + D4990EFFED9568CBDA1D220DB47B2C07 /* sync_file.cpp in Sources */, + 8CCF2AA7F01C1E9B3BE93FF1ABE22879 /* sync_manager.cpp in Sources */, + 1D79A9063DAB2BFC9185316E9697C954 /* sync_metadata.cpp in Sources */, + B4E270234B767FA450D8AE600C8BEF4D /* sync_permission.cpp in Sources */, + 55424BCED863886F63862E88144BA88C /* sync_session.cpp in Sources */, + E216DF3249A1CB66A60FA17F2762D8B3 /* sync_user.cpp in Sources */, + B0A61A65076EE591506FE85707C0223D /* system_configuration.cpp in Sources */, + BF5595703396846833EBEDFC58E902EF /* thread_safe_reference.cpp in Sources */, + D44A3BB9FE8AE0048939A2A851E438AD /* transact_log_handler.cpp in Sources */, + 31BA42C80A0B1F7A09A93D2473CE5EE2 /* uuid.cpp in Sources */, + E6646BAE1A23B2ED231F37B13B5A3E11 /* weak_realm_notifier.cpp in Sources */, + A29A90BFDCEF2744684BFB22982C98A6 /* work_queue.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8E235F97093033BE6D669BB9C2E2D1D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E65ABE59482F0887B432AD11F0C3E1F7 /* Chart.swift in Sources */, + 86B18EB4F5199A340F29478A4FAA6164 /* ChartColors.swift in Sources */, + 6D137A30C834F01F3538671DF58C5DE7 /* ChartSeries.swift in Sources */, + DD394F12DD886AEB9E328301962CACF2 /* SwiftChart-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F08B461080A149AB8E8615D3A46E50 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AC72E3E5A9ED9CCF9BB0654F6FE9F8AF /* Aliases.swift in Sources */, + 90AB9A4F53EA707A17DD6D0EA0B9AFDF /* Error.swift in Sources */, + 6ACAE95C2BAAC89E66A9327C1315C204 /* LinkingObjects.swift in Sources */, + 9E569E674A4755874D729C460604978F /* List.swift in Sources */, + 1B3891E96953B02DDACDFBDD0031A7DB /* Migration.swift in Sources */, + 7C3F0312557F1066EF19FE62795B0D56 /* Object.swift in Sources */, + 8A04561E86C4815684364676E820BE5A /* ObjectiveCSupport.swift in Sources */, + 23B7D49BE763D3AD84B3FF4D6D1E9C4E /* ObjectSchema.swift in Sources */, + 8F87E38081DC9084DA26998366EA0ADD /* Optional.swift in Sources */, + 51A4FE5FE31FE516A4DA68F5277531F3 /* Property.swift in Sources */, + 56E9ED6714E4BCC33A5E4375247737CF /* Realm.swift in Sources */, + 511BF09915EFAF31E2D8F5D2BE018084 /* RealmCollection.swift in Sources */, + 71124DB5566FEC567DC863292D76B65D /* RealmConfiguration.swift in Sources */, + F87CE4DE54E94FA55A3A927007FB1FD6 /* RealmSwift-dummy.m in Sources */, + AF4335697C7933BA632ACF1BDB4BE997 /* Results.swift in Sources */, + 23F54A8305DE182045306A01333D9A52 /* Schema.swift in Sources */, + B7859DCC5C9A6703EE2D345D14BDD404 /* SortDescriptor.swift in Sources */, + 840099BED9E8A6002D64D2F894585985 /* SwiftVersion.swift in Sources */, + 2462B2F4E41EA388F8CE2600BEFB03D7 /* Sync.swift in Sources */, + C62EA7B82E16D8F0C343BC966A8E4F12 /* ThreadSafeReference.swift in Sources */, + B1ECD96706031AB7771C86FFC90A47F1 /* Util.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5296,59 +5928,17 @@ target = 9938F3058E6013FAB6444C41E86DC9E9 /* leveldb-library */; targetProxy = CAE729D936A8C8BB1D7B97D1034CB700 /* PBXContainerItemProxy */; }; - 079382D6E3CF64149633EEC88F7CFC6A /* PBXTargetDependency */ = { + 1CBAF262253D335B3172928224EA0467 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ChameleonFramework; - target = 8A267660E1AD4832DE75665F2F87AEA3 /* ChameleonFramework */; - targetProxy = E5FDFB54DB94E62855733B76973770F4 /* PBXContainerItemProxy */; + name = GoogleToolboxForMac; + target = 488CA9079247B8F25888405871FCF2F4 /* GoogleToolboxForMac */; + targetProxy = 6D792F4D6B89CF912EA0A99ABCC03EBA /* PBXContainerItemProxy */; }; - 27A4EDBC25C510A35A3D3FCE94BC352F /* PBXTargetDependency */ = { + 33D1DEB1BB557DC1814C4FB5EE3C0CDF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftChart; - target = 5F2B8B75736083DA9B4F09AE96C5205C /* SwiftChart */; - targetProxy = E6CF3DFABE0583E3A2408E0ADB88E865 /* PBXContainerItemProxy */; - }; - 2A86F36893962D3721057C3BA19E5A95 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Alamofire; - target = 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */; - targetProxy = 6EAB8D3EBB47FE6619923250344F91DA /* PBXContainerItemProxy */; - }; - 2AB12B2A74419AA5DBC1ED8207FA0EE5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RealmSwift; - target = 26389CA2D7E58CA4716E217346D0655C /* RealmSwift */; - targetProxy = 630D8AE5C58CD83D7E74430A349B79EF /* PBXContainerItemProxy */; - }; - 2C5E2A8A2CA9A0D172030B81605AC57E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 42FD17D195FA3B5B05CE79F0B6CF447D /* FirebaseCore */; - targetProxy = BC3BBEF7A586E144762A37B14D7EFAB7 /* PBXContainerItemProxy */; - }; - 31DA194512FA54AD00904ACE842639E8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "leveldb-library"; - target = 9938F3058E6013FAB6444C41E86DC9E9 /* leveldb-library */; - targetProxy = 42F600F68E373DFB011D0A76228D1838 /* PBXContainerItemProxy */; - }; - 3240C58B3D888497AAEBE10DD1190F2B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Realm; - target = 163ACDEEDFE672B67E0DB15318AF0C07 /* Realm */; - targetProxy = 034290CF3467836EC58FE68AD063310B /* PBXContainerItemProxy */; - }; - 332F992D8F6B6716D0B3FC2D225FC271 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Kingfisher; - target = 4F87037150ABE2C9238B54E8F6E33F36 /* Kingfisher */; - targetProxy = 0B82B905D3FC275BD0C2E37F7EDDE8EB /* PBXContainerItemProxy */; - }; - 4865637BA32C02E329A1A3D30100BF97 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GTMSessionFetcher; - target = C71013989C387BAAD69BFE01570495EB /* GTMSessionFetcher */; - targetProxy = 7C839CBB90935D8CAC7B816BDECCB83D /* PBXContainerItemProxy */; + name = PromiseKit; + target = AC12289D8D8EA15163F1BFCBE783D119 /* PromiseKit */; + targetProxy = 4B62D3C23EE2748FEF98FB6FC38F909D /* PBXContainerItemProxy */; }; 50A9116D5CD6E0F7546AABEBF72D17A1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -5356,17 +5946,17 @@ target = 488CA9079247B8F25888405871FCF2F4 /* GoogleToolboxForMac */; targetProxy = 367D61C9083B720530DA81AC98288B75 /* PBXContainerItemProxy */; }; - 56B8256ADFCF9AF58F66B6434F878DE8 /* PBXTargetDependency */ = { + 5C525E66868C3AD2FD9B1C03BEE54234 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = nanopb; - target = E4DD95323C54A78F879DAB0F1508B8E7 /* nanopb */; - targetProxy = C936B4DDC050318851842F2C3674061A /* PBXContainerItemProxy */; + name = SideMenu; + target = 2E769F49CA0CFF5358BD147A496DC598 /* SideMenu */; + targetProxy = 32667219CD3C40CE7B75A13A9C0EB885 /* PBXContainerItemProxy */; }; - 61EAD5086C2DE844C06B489326243754 /* PBXTargetDependency */ = { + 5D0FC60E6A83622A70DDDA5BEB5706AB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SVProgressHUD; - target = 8B772225B6972C5F5121F8C6F296B00A /* SVProgressHUD */; - targetProxy = 28B218822CC57EB41A1C5000A771B12F /* PBXContainerItemProxy */; + name = RealmSwift; + target = DC201E4CC62EC8A658D2DFAC007E057B /* RealmSwift */; + targetProxy = 7BD9F6A92F2E8D50D7FAF59ED413B372 /* PBXContainerItemProxy */; }; 684663704407609C016482068E1374D9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -5374,11 +5964,29 @@ target = 42FD17D195FA3B5B05CE79F0B6CF447D /* FirebaseCore */; targetProxy = 5F522470CF5BF10D6E52C99BA2EA7B0E /* PBXContainerItemProxy */; }; - 70C9C1C1515C16CCCE87B013984CA7E4 /* PBXTargetDependency */ = { + 6942C11653017951AE1A4B6DFB300CBF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FirebaseAuth; - target = C60D48C24AC5107F932D1778161FE56E /* FirebaseAuth */; - targetProxy = B63C228C8CA9F2F54B2F48A8C3AD111D /* PBXContainerItemProxy */; + name = "leveldb-library"; + target = 9938F3058E6013FAB6444C41E86DC9E9 /* leveldb-library */; + targetProxy = D2CA6DCE7C9380EC02DD1D27A8487CF7 /* PBXContainerItemProxy */; + }; + 6D1D289430B8B174E5D6ACC3141B781E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SwiftyJSON; + target = CA422484FAF4A9E5D7FFDD41A987EF04 /* SwiftyJSON */; + targetProxy = D59CAB6F4AB0C82557AD07537A986010 /* PBXContainerItemProxy */; + }; + 701504D62CFFD30D3F316EA979E5B1EA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SVProgressHUD; + target = DE7EC12ADEA52D1655CEC698566C4109 /* SVProgressHUD */; + targetProxy = F3A7F6A6C0DD53D6C7113A19E4606F59 /* PBXContainerItemProxy */; + }; + 7433631DEC9C4D876B79CECDC617D449 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */; + targetProxy = 72B707FB8D19DAD14A99B3CF3888E276 /* PBXContainerItemProxy */; }; 78A659337BAA6F988242D0FD77091D49 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -5386,23 +5994,41 @@ target = 488CA9079247B8F25888405871FCF2F4 /* GoogleToolboxForMac */; targetProxy = 8259DCBFC79F7A391B707A14D37A4BBA /* PBXContainerItemProxy */; }; - A9656A67193E0B101D1F716B816E1398 /* PBXTargetDependency */ = { + 7B8D7AE1896B2374783A0370AFC86E60 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleToolboxForMac; - target = 488CA9079247B8F25888405871FCF2F4 /* GoogleToolboxForMac */; - targetProxy = 193F6B242D2B389103653C57DDCFE122 /* PBXContainerItemProxy */; + name = SwiftChart; + target = 7D63CE0CBBC5134E15681885C016EC4F /* SwiftChart */; + targetProxy = 29158A5BAB1AF49DD722EFE2F4A9FAE5 /* PBXContainerItemProxy */; }; - AC0E051658A34E3869CE62DAA47503AE /* PBXTargetDependency */ = { + 8961AA8AFDCF51F67701BBEFDD176B53 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftyJSON; - target = C9AF417271F67CC4FA2DA0DC6AD972AB /* SwiftyJSON */; - targetProxy = 38B348765667E3EF9697C0147A56A728 /* PBXContainerItemProxy */; + name = Realm; + target = 85A4785CDCA19B18B452AB3681A101F5 /* Realm */; + targetProxy = 588CA3E7BA6E2716B01A14D6C3F4336A /* PBXContainerItemProxy */; }; - B5EF9156898D85CAFC0159BFD472B124 /* PBXTargetDependency */ = { + 8E49E8F067E173802D15A10336234635 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Alamofire; - target = 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */; - targetProxy = 2979C1143E109AD426C7D45E4DFEFFDB /* PBXContainerItemProxy */; + name = Charts; + target = 1D416D5E8AAA52C62EECDEEAFED16087 /* Charts */; + targetProxy = AC4DA82E6C4B9796AC0ADBC4DB8E951F /* PBXContainerItemProxy */; + }; + 9DEEF15168287F6B7E598D86AD6B87FC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FirebaseCore; + target = 42FD17D195FA3B5B05CE79F0B6CF447D /* FirebaseCore */; + targetProxy = 1BF4FFDCF47B83E524D60704DEA25D0E /* PBXContainerItemProxy */; + }; + AC92C9A714325E78B2D11355213F27ED /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Kingfisher; + target = 4F87037150ABE2C9238B54E8F6E33F36 /* Kingfisher */; + targetProxy = 978DFC9519279B1627360BC8BFC062A7 /* PBXContainerItemProxy */; + }; + B70DA8CA67FD70E4EB97476607B00F70 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ChameleonFramework; + target = 8A267660E1AD4832DE75665F2F87AEA3 /* ChameleonFramework */; + targetProxy = 39D0E26560AC232DD6111DD1CE8B886E /* PBXContainerItemProxy */; }; B93E96AF5030C522B810E1CDA0B86D89 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -5410,23 +6036,41 @@ target = 488CA9079247B8F25888405871FCF2F4 /* GoogleToolboxForMac */; targetProxy = DC79AF76D9D01EBEF5027AFF0F8CD873 /* PBXContainerItemProxy */; }; + BBA5A665037C88E5F23C5C6DD051A2DA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FirebaseAuth; + target = C60D48C24AC5107F932D1778161FE56E /* FirebaseAuth */; + targetProxy = AA366233C53F9BFD73061FC84AAF3A73 /* PBXContainerItemProxy */; + }; BDD0E7337021020E4118188E8055A220 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GTMSessionFetcher; target = C71013989C387BAAD69BFE01570495EB /* GTMSessionFetcher */; targetProxy = F78BF8C4665536E7DC5A172B41F62554 /* PBXContainerItemProxy */; }; - C9D4A1AAD6B7B25AD7B48A3F58CE0B67 /* PBXTargetDependency */ = { + C1AF5A9A3AF4C84EB7531D42434FB1D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PromiseKit; - target = 4EEC98C9980EBF6EB559FE9840F88600 /* PromiseKit */; - targetProxy = 6085DFA2C4D2C096E1B7DAB9EF6C6605 /* PBXContainerItemProxy */; + name = FirebaseDatabase; + target = 62FABD757FE4DF7B87CB5ACCAE424F36 /* FirebaseDatabase */; + targetProxy = 54F3DFF0440069C07F5508B93682D33F /* PBXContainerItemProxy */; }; - EC8C21E36D6CBAAB661813D521E54D00 /* PBXTargetDependency */ = { + CE8B9BF607EF5D6E7A483FEC579F239E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SideMenu; - target = DBA0CD9259A1F0AE57C098B81B8448ED /* SideMenu */; - targetProxy = 3DEC546676A0F3DFB219187C19E2D1CC /* PBXContainerItemProxy */; + name = Alamofire; + target = 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */; + targetProxy = BA42ECB63937C8734147DCD1791DF673 /* PBXContainerItemProxy */; + }; + E0B91263522292E00662EA5470178946 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Realm; + target = 85A4785CDCA19B18B452AB3681A101F5 /* Realm */; + targetProxy = 67BB2AD3C9308D3315ABD6FBC1973E4E /* PBXContainerItemProxy */; + }; + E9CB01E1A9CEA7786E3D0ACCA8ED179D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = nanopb; + target = E4DD95323C54A78F879DAB0F1508B8E7 /* nanopb */; + targetProxy = 3C66AC071D36F70E5CB33462AA679B7D /* PBXContainerItemProxy */; }; ECB4E34A75C6F9EF1E6F088A13AB1948 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -5434,24 +6078,18 @@ target = 42FD17D195FA3B5B05CE79F0B6CF447D /* FirebaseCore */; targetProxy = A7629079EAFECDF56D06279F0F87B1EE /* PBXContainerItemProxy */; }; - F682286DACD79873C77C1B8583ADBF11 /* PBXTargetDependency */ = { + EE081D1E77C98C62B58A986675012DC0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Realm; - target = 163ACDEEDFE672B67E0DB15318AF0C07 /* Realm */; - targetProxy = 9AF3C01A643B8F078CB63491614D34BF /* PBXContainerItemProxy */; - }; - F8D9EC095D6EF0D1E5A70596A9BFE888 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseDatabase; - target = 62FABD757FE4DF7B87CB5ACCAE424F36 /* FirebaseDatabase */; - targetProxy = 7DCC38ED421A8E54D8BF5F4044F31C8A /* PBXContainerItemProxy */; + name = GTMSessionFetcher; + target = C71013989C387BAAD69BFE01570495EB /* GTMSessionFetcher */; + targetProxy = 866466C0FC6C7560D6D3AE1DF9F07BA4 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 020A53F491639994C4514255980CDED4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A107196D4B3E10BBF7082F6BB64DE8F /* FirebaseDatabase.xcconfig */; + baseConfigurationReference = C5D86DB70DD64D11FA99A20BF127EB79 /* FirebaseDatabase.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5480,42 +6118,9 @@ }; name = Debug; }; - 07CFBAE70C07E2AC2FC675A1A7E2C14B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E7AE1EF1B83DC8FC36416CE765AC2833 /* RealmSwift.xcconfig */; - buildSettings = { - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - 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"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 083812298EE8EFDADB287D248C210214 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6115C302DB89E3786D5A51DBD5F87FA9 /* GoogleToolboxForMac.xcconfig */; + baseConfigurationReference = 2027D37EFACF602AB29CAD43E4F356CF /* GoogleToolboxForMac.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5547,7 +6152,7 @@ }; 13F435F608B367402B0EE25C9D5DF549 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3E0A2CF79462B3B4ED47BA6C8B900FFB /* ChameleonFramework.xcconfig */; + baseConfigurationReference = 9AAA21B113E52450FA24FE55171F47DD /* ChameleonFramework.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5578,9 +6183,9 @@ }; name = Release; }; - 37CF3FED42F9066DAAA62E00F6EFE623 /* Debug */ = { + 2081BF5999F8DB37EFE0C8B0C1639486 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 75C6E028A0660D0E07FEC2B89B906181 /* Realm.xcconfig */; + baseConfigurationReference = E417744D2BA90655B13C5DF82A5B99BA /* RealmSwift.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5592,17 +6197,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Info.plist"; + 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/Realm/Realm.modulemap"; - PRODUCT_MODULE_NAME = Realm; - PRODUCT_NAME = Realm; + MODULEMAP_FILE = "Target Support Files/RealmSwift/RealmSwift.modulemap"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -5612,7 +6218,7 @@ }; 475D13339E740EDE0738A030EFFC35D3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3E0A2CF79462B3B4ED47BA6C8B900FFB /* ChameleonFramework.xcconfig */; + baseConfigurationReference = 9AAA21B113E52450FA24FE55171F47DD /* ChameleonFramework.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5642,9 +6248,9 @@ }; name = Debug; }; - 4B515737757D031A8D0B6D91EA5E978B /* Debug */ = { + 4B12E5729F985A18605E9A2BB85798DB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 79AF623890C6DC0CA3A952646F4A3A74 /* SwiftChart.xcconfig */; + baseConfigurationReference = 3481B02F02ECC97DA0B8011CC82FF918 /* SwiftChart.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5677,7 +6283,7 @@ }; 4B5E299F12220705B017C121B9CA9ED4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A107196D4B3E10BBF7082F6BB64DE8F /* FirebaseDatabase.xcconfig */; + baseConfigurationReference = C5D86DB70DD64D11FA99A20BF127EB79 /* FirebaseDatabase.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5707,9 +6313,43 @@ }; name = Release; }; - 4D733C0682C88848FCCBDD36A08CEFF0 /* Release */ = { + 4BB03B27AE019E612BE7B7DA0B381677 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5AC850C12D346539C85F42002FF892CC /* PromiseKit.xcconfig */; + baseConfigurationReference = 0530BFC7D3BAFA0486AD5729F731BB72 /* SideMenu.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SideMenu/SideMenu-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SideMenu/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/SideMenu/SideMenu.modulemap"; + PRODUCT_MODULE_NAME = SideMenu; + PRODUCT_NAME = SideMenu; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 4C13F26F75C074B88FFD96261907E4F0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 01353F67E6131A74A5E9F0F7441A5D24 /* PromiseKit.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5741,9 +6381,43 @@ }; name = Release; }; + 50B5A9A3853F9E1BD8D474B85B6E691E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CFF8E7614222B479BDD417F4569E3312 /* SwiftyJSON.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/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/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 5481DCF34F1F483E96E91EEF6E2CC0F6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 280E71F4A10F40DA26EB5029443DC470 /* FirebaseAuth.xcconfig */; + baseConfigurationReference = 6800E5F589466FF8EE866AD17818CFF1 /* FirebaseAuth.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5773,43 +6447,6 @@ }; name = Release; }; - 54BF93E4D9005389FB4D6F0AF43FF7C6 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7904EA655451E47F1B178CD6080E46B3 /* Pods-pocloud.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-pocloud/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-pocloud/Pods-pocloud.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 5C62205F1D8CC5D5B5126D501D3E0D98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -5869,7 +6506,7 @@ }; 5EF4A415E940A1E4AC4429926EA3C53C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2401851FEF961A15104EB6C723CF332D /* leveldb-library.xcconfig */; + baseConfigurationReference = F8AD5474FFB1C513463688190F974CA9 /* leveldb-library.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5902,7 +6539,7 @@ }; 603973C0E78CC6D71BC55EAC2D9E2AF0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2401851FEF961A15104EB6C723CF332D /* leveldb-library.xcconfig */; + baseConfigurationReference = F8AD5474FFB1C513463688190F974CA9 /* leveldb-library.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5934,7 +6571,7 @@ }; 618A4E4327B750917546A604A45090AA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6115C302DB89E3786D5A51DBD5F87FA9 /* GoogleToolboxForMac.xcconfig */; + baseConfigurationReference = 2027D37EFACF602AB29CAD43E4F356CF /* GoogleToolboxForMac.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5965,9 +6602,9 @@ }; name = Release; }; - 620B89178686FF6AA02B0FBB99BB7655 /* Debug */ = { + 64D825021A947792C41A72EBE2676C60 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D1E7A051F99434500E664AC519B7B5C7 /* SwiftyJSON.xcconfig */; + baseConfigurationReference = 3481B02F02ECC97DA0B8011CC82FF918 /* SwiftChart.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -5979,47 +6616,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwiftChart/SwiftChart-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftChart/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 63EAEF68A0766173EC5EA3D83D3162CA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D1E7A051F99434500E664AC519B7B5C7 /* SwiftyJSON.xcconfig */; - buildSettings = { - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/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/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; + MODULEMAP_FILE = "Target Support Files/SwiftChart/SwiftChart.modulemap"; + PRODUCT_MODULE_NAME = SwiftChart; + PRODUCT_NAME = SwiftChart; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6032,9 +6636,41 @@ }; name = Release; }; + 687F91BE13BE7A6F4525DC398555E94C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7944BA997F53E27F2D1F54CA2F25496E /* Realm.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + 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"; + PRODUCT_MODULE_NAME = Realm; + PRODUCT_NAME = Realm; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 68B728A3675FE1BCC38F47423F396EC2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 678D06BE325ACF1EBC6F2EB35DA227B8 /* nanopb.xcconfig */; + baseConfigurationReference = 04BE9ADFA2D956332AAB30051EBD7485 /* nanopb.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6067,7 +6703,7 @@ }; 6D634A80EC1941537F34B9E2F3F02020 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3FCE8941552AD50778D44D36BF09208B /* GTMSessionFetcher.xcconfig */; + baseConfigurationReference = 34FD2D68E9188EB20D44ABB5C0544791 /* GTMSessionFetcher.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6097,10 +6733,12 @@ }; name = Debug; }; - 74EDDCBA8C16A036F1EF42B7405AA166 /* Release */ = { + 73C14076C5F83482189A87CBC8E9F5B6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DD8D5C62E69E0A3FB68E2AD2DF50B971 /* SideMenu.xcconfig */; + baseConfigurationReference = 2A32A5F933056AF0BB4CC991F44AE061 /* Pods-pocloud.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6111,53 +6749,20 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SideMenu/SideMenu-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SideMenu/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-pocloud/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SideMenu/SideMenu.modulemap"; - PRODUCT_MODULE_NAME = SideMenu; - PRODUCT_NAME = SideMenu; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-pocloud/Pods-pocloud.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 77E02A01E08B86BA0BA04B10140399D7 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E7AE1EF1B83DC8FC36416CE765AC2833 /* RealmSwift.xcconfig */; - buildSettings = { - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - 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"; - PRODUCT_MODULE_NAME = RealmSwift; - PRODUCT_NAME = RealmSwift; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -6167,7 +6772,7 @@ }; 7F39F790BDD943507B33A3D527CD5B9D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E30E2267F1E9274C87E8D4A09F0CABD0 /* FirebaseCore.xcconfig */; + baseConfigurationReference = C0B776C4EDA39EEB6B8BFCDAB89272EF /* FirebaseCore.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6197,9 +6802,9 @@ }; name = Release; }; - 7F400C2F4770D43A56259FBE3B566E20 /* Release */ = { + 8AEFFD726A3959CDD2C872DF29A8BEB3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 79AF623890C6DC0CA3A952646F4A3A74 /* SwiftChart.xcconfig */; + baseConfigurationReference = 0530BFC7D3BAFA0486AD5729F731BB72 /* SideMenu.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6211,48 +6816,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftChart/SwiftChart-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftChart/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftChart/SwiftChart.modulemap"; - PRODUCT_MODULE_NAME = SwiftChart; - PRODUCT_NAME = SwiftChart; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 89F5908883CC2F28F0C8E7C665F7752F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5AC850C12D346539C85F42002FF892CC /* PromiseKit.xcconfig */; - buildSettings = { - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/PromiseKit/PromiseKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PromiseKit/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SideMenu/SideMenu-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SideMenu/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/PromiseKit/PromiseKit.modulemap"; - PRODUCT_MODULE_NAME = PromiseKit; - PRODUCT_NAME = PromiseKit; + MODULEMAP_FILE = "Target Support Files/SideMenu/SideMenu.modulemap"; + PRODUCT_MODULE_NAME = SideMenu; + PRODUCT_NAME = SideMenu; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6266,7 +6837,7 @@ }; 955978003C0D0440BC6BF83154F2509D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 678D06BE325ACF1EBC6F2EB35DA227B8 /* nanopb.xcconfig */; + baseConfigurationReference = 04BE9ADFA2D956332AAB30051EBD7485 /* nanopb.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6296,10 +6867,12 @@ }; name = Debug; }; - 95C7366905B79C22C386268EE74674EF /* Release */ = { + 9CA6D85E8CEF34280AE7D3AA0F6ABA14 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 75C6E028A0660D0E07FEC2B89B906181 /* Realm.xcconfig */; + baseConfigurationReference = 7904EA655451E47F1B178CD6080E46B3 /* Pods-pocloud.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6310,61 +6883,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Realm/Realm-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Realm/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-pocloud/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Realm/Realm.modulemap"; - PRODUCT_MODULE_NAME = Realm; - PRODUCT_NAME = Realm; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-pocloud/Pods-pocloud.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - 9C0B17B08BA898EC44410B6F52803AFC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 69979796FD401B825B73A8FBF40D7E7C /* SVProgressHUD.xcconfig */; - buildSettings = { - CLANG_WARN_DOCUMENTATION_COMMENTS = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SVProgressHUD/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/SVProgressHUD/SVProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = SVProgressHUD; - PRODUCT_NAME = SVProgressHUD; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; + name = Debug; }; 9EF5724CD349D6D1805D125DCF8045ED /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55E330F93C621C1B333A885F538531D9 /* Alamofire.xcconfig */; + baseConfigurationReference = 1C7B3474211DE26FB22A569661DFDF32 /* Alamofire.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6397,7 +6939,7 @@ }; 9F0CE5ADC8054055A74E3A818E05D22C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 280E71F4A10F40DA26EB5029443DC470 /* FirebaseAuth.xcconfig */; + baseConfigurationReference = 6800E5F589466FF8EE866AD17818CFF1 /* FirebaseAuth.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6426,9 +6968,9 @@ }; name = Debug; }; - A51C0683ECDC3EA1A6DAD1B092046A89 /* Debug */ = { + A22C4D23A378F97B199F785B7C4DA4F8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DD8D5C62E69E0A3FB68E2AD2DF50B971 /* SideMenu.xcconfig */; + baseConfigurationReference = CBCA6255F1DE02624BA7FA9019BD8850 /* Charts.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6440,18 +6982,51 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SideMenu/SideMenu-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SideMenu/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/SideMenu/SideMenu.modulemap"; - PRODUCT_MODULE_NAME = SideMenu; - PRODUCT_NAME = SideMenu; + MODULEMAP_FILE = "Target Support Files/Charts/Charts.modulemap"; + PRODUCT_MODULE_NAME = Charts; + PRODUCT_NAME = Charts; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + B3D743EF393FDC9A8BA18F9ADD127B12 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D70A4539E0CAC421B91A12DA601CD99B /* SVProgressHUD.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SVProgressHUD/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/SVProgressHUD/SVProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = SVProgressHUD; + PRODUCT_NAME = SVProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -6461,7 +7036,7 @@ }; B55BB3FD6E59463BD8362DD88E8CC114 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E30E2267F1E9274C87E8D4A09F0CABD0 /* FirebaseCore.xcconfig */; + baseConfigurationReference = C0B776C4EDA39EEB6B8BFCDAB89272EF /* FirebaseCore.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6492,7 +7067,7 @@ }; B842B52FB004503E9D2080105C6D03BD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55E330F93C621C1B333A885F538531D9 /* Alamofire.xcconfig */; + baseConfigurationReference = 1C7B3474211DE26FB22A569661DFDF32 /* Alamofire.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6585,12 +7160,10 @@ }; name = Debug; }; - BE1452D7BF883D5E119A584FE22C5640 /* Release */ = { + BDF7DA6CDEED752F0085D85DF74EFDAA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A32A5F933056AF0BB4CC991F44AE061 /* Pods-pocloud.release.xcconfig */; + baseConfigurationReference = 01353F67E6131A74A5E9F0F7441A5D24 /* PromiseKit.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6601,20 +7174,51 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-pocloud/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/PromiseKit/PromiseKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PromiseKit/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + 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-pocloud/Pods-pocloud.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/PromiseKit/PromiseKit.modulemap"; + PRODUCT_MODULE_NAME = PromiseKit; + PRODUCT_NAME = PromiseKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + BED66B4BD1610CA39129E27A5CF2620A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7944BA997F53E27F2D1F54CA2F25496E /* Realm.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + 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"; + PRODUCT_MODULE_NAME = Realm; + PRODUCT_NAME = Realm; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -6624,7 +7228,7 @@ }; C38095E545B3B877D6040B7D53CEA779 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3FCE8941552AD50778D44D36BF09208B /* GTMSessionFetcher.xcconfig */; + baseConfigurationReference = 34FD2D68E9188EB20D44ABB5C0544791 /* GTMSessionFetcher.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6657,7 +7261,7 @@ }; D53E4CF8C6C55DA367C05C7D4D792ED1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D89AEBF817EB6444223B32A0DFFD27D /* Kingfisher.xcconfig */; + baseConfigurationReference = 7936A56936DC138ECD9CF9EB11566720 /* Kingfisher.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6689,9 +7293,9 @@ }; name = Release; }; - F39F3401315D5E3CBFF53D2343F85C61 /* Debug */ = { + D8B4C7F5E26247B7EFC16B97324837BA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 69979796FD401B825B73A8FBF40D7E7C /* SVProgressHUD.xcconfig */; + baseConfigurationReference = D70A4539E0CAC421B91A12DA601CD99B /* SVProgressHUD.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6716,6 +7320,107 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E61B277170853B2119D36DF365C6011D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CBCA6255F1DE02624BA7FA9019BD8850 /* Charts.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + 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"; + PRODUCT_MODULE_NAME = Charts; + PRODUCT_NAME = Charts; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E7AA2390850D028B4456760B944B3181 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E417744D2BA90655B13C5DF82A5B99BA /* RealmSwift.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + 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"; + PRODUCT_MODULE_NAME = RealmSwift; + PRODUCT_NAME = RealmSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E948DDF730C3222E69422301CBFB0783 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CFF8E7614222B479BDD417F4569E3312 /* SwiftyJSON.xcconfig */; + buildSettings = { + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/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/SwiftyJSON/SwiftyJSON.modulemap"; + PRODUCT_MODULE_NAME = SwiftyJSON; + PRODUCT_NAME = SwiftyJSON; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -6723,7 +7428,7 @@ }; FD440EF9287D06B6AFFF45A018596019 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D89AEBF817EB6444223B32A0DFFD27D /* Kingfisher.xcconfig */; + baseConfigurationReference = 7936A56936DC138ECD9CF9EB11566720 /* Kingfisher.xcconfig */; buildSettings = { CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_IDENTITY = ""; @@ -6757,11 +7462,11 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 02CAB9A62E77F3105C80D180F6C06459 /* Build configuration list for PBXNativeTarget "RealmSwift" */ = { + 0DC6991F682446D4C82176F068017AC2 /* Build configuration list for PBXNativeTarget "PromiseKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - 07CFBAE70C07E2AC2FC675A1A7E2C14B /* Debug */, - 77E02A01E08B86BA0BA04B10140399D7 /* Release */, + BDF7DA6CDEED752F0085D85DF74EFDAA /* Debug */, + 4C13F26F75C074B88FFD96261907E4F0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6793,15 +7498,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2601715ED0E29541D986ABC0E58359BE /* Build configuration list for PBXNativeTarget "SideMenu" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A51C0683ECDC3EA1A6DAD1B092046A89 /* Debug */, - 74EDDCBA8C16A036F1EF42B7405AA166 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -6847,15 +7543,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7D1840B0203BDAA575D6B442391CF01D /* Build configuration list for PBXNativeTarget "SwiftChart" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4B515737757D031A8D0B6D91EA5E978B /* Debug */, - 7F400C2F4770D43A56259FBE3B566E20 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 7D59C7AC3BE8A44E92002E4558418AE1 /* Build configuration list for PBXNativeTarget "FirebaseAuth" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -6865,6 +7552,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 88ED7A7F03CCD592EBD7E6746A9FF657 /* Build configuration list for PBXNativeTarget "Realm" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 687F91BE13BE7A6F4525DC398555E94C /* Debug */, + BED66B4BD1610CA39129E27A5CF2620A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 8A86DCBB6DF6E1D41192262477E2EB2E /* Build configuration list for PBXNativeTarget "FirebaseDatabase" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -6874,47 +7570,47 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A23BEC1E3515793704829744CB52774D /* Build configuration list for PBXNativeTarget "Realm" */ = { + 9C61C4A84F18C9D95ABC568950BA5F42 /* Build configuration list for PBXNativeTarget "SideMenu" */ = { isa = XCConfigurationList; buildConfigurations = ( - 37CF3FED42F9066DAAA62E00F6EFE623 /* Debug */, - 95C7366905B79C22C386268EE74674EF /* Release */, + 8AEFFD726A3959CDD2C872DF29A8BEB3 /* Debug */, + 4BB03B27AE019E612BE7B7DA0B381677 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AF85F9BBD749F913AD78A9ADBB1BD5D2 /* Build configuration list for PBXNativeTarget "PromiseKit" */ = { + AFA3461FDDF13768BF7CCB6A10F3FFC5 /* Build configuration list for PBXNativeTarget "Charts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 89F5908883CC2F28F0C8E7C665F7752F /* Debug */, - 4D733C0682C88848FCCBDD36A08CEFF0 /* Release */, + E61B277170853B2119D36DF365C6011D /* Debug */, + A22C4D23A378F97B199F785B7C4DA4F8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B11E05D0A955FEE0CB7FD7BEE5D8DA43 /* Build configuration list for PBXNativeTarget "Pods-pocloud" */ = { + B986754092674E1702A0CE87F2FE50FF /* Build configuration list for PBXNativeTarget "SwiftChart" */ = { isa = XCConfigurationList; buildConfigurations = ( - 54BF93E4D9005389FB4D6F0AF43FF7C6 /* Debug */, - BE1452D7BF883D5E119A584FE22C5640 /* Release */, + 4B12E5729F985A18605E9A2BB85798DB /* Debug */, + 64D825021A947792C41A72EBE2676C60 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BB0922DAD98FD40B80428F80AE09C920 /* Build configuration list for PBXNativeTarget "SVProgressHUD" */ = { + C41B0D57DB2F91B65D75BA345D68001B /* Build configuration list for PBXNativeTarget "SVProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( - F39F3401315D5E3CBFF53D2343F85C61 /* Debug */, - 9C0B17B08BA898EC44410B6F52803AFC /* Release */, + B3D743EF393FDC9A8BA18F9ADD127B12 /* Debug */, + D8B4C7F5E26247B7EFC16B97324837BA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E9BF5556389B6488DD0EE3872C87645B /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { + EE5ADD106DD877CF0FA25116A46D0FE2 /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { isa = XCConfigurationList; buildConfigurations = ( - 620B89178686FF6AA02B0FBB99BB7655 /* Debug */, - 63EAEF68A0766173EC5EA3D83D3162CA /* Release */, + E948DDF730C3222E69422301CBFB0783 /* Debug */, + 50B5A9A3853F9E1BD8D474B85B6E691E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6928,6 +7624,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + F8D5E51296AB29436BE87BD586D441EE /* Build configuration list for PBXNativeTarget "RealmSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2081BF5999F8DB37EFE0C8B0C1639486 /* Debug */, + E7AA2390850D028B4456760B944B3181 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FA9A89677B36E95848010D4EAF1943A4 /* Build configuration list for PBXNativeTarget "Pods-pocloud" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9CA6D85E8CEF34280AE7D3AA0F6ABA14 /* Debug */, + 73C14076C5F83482189A87CBC8E9F5B6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; diff --git a/Pods/PromiseKit/README.md b/Pods/PromiseKit/README.md index a00e5d3..9b06cdd 100644 --- a/Pods/PromiseKit/README.md +++ b/Pods/PromiseKit/README.md @@ -49,8 +49,8 @@ target "Change Me!" do end ``` -PromiseKit 6, 5 and 4 support Xcode 8.3, 9.0, 9.1, 9.2 and 9.3; Swift 3.1, -3.2, 3.3, 4.0 and 4.1 ; iOS, macOS, tvOS, watchOS, Linux and Android; CocoaPods, +PromiseKit 6, 5 and 4 support Xcode 8.3, 9.x and 10.0; Swift 3.1, +3.2, 3.3, 4.0, 4.1 and 4.2 ; iOS, macOS, tvOS, watchOS, Linux and Android; CocoaPods, Carthage and SwiftPM; ([CI Matrix](https://travis-ci.org/mxcl/PromiseKit)). For Carthage, SwiftPM, etc., or for instructions when using older Swifts or @@ -149,7 +149,7 @@ func makeUrlRequest() throws -> URLRequest { rq.httpMethod = "POST" rq.addValue("application/json", forHTTPHeaderField: "Content-Type") rq.addValue("application/json", forHTTPHeaderField: "Accept") - rq.httpBody = try JSONSerialization.jsonData(with: obj) + rq.httpBody = try JSONEncoder().encode(obj) return rq } ``` diff --git a/Pods/PromiseKit/Sources/Box.swift b/Pods/PromiseKit/Sources/Box.swift index 77b02ce..3bf7ecd 100644 --- a/Pods/PromiseKit/Sources/Box.swift +++ b/Pods/PromiseKit/Sources/Box.swift @@ -85,12 +85,17 @@ class EmptyBox: Box { extension Optional where Wrapped: DispatchQueue { - func async(_ body: @escaping() -> Void) { + @inline(__always) + func async(flags: DispatchWorkItemFlags?, _ body: @escaping() -> Void) { switch self { case .none: body() case .some(let q): - q.async(execute: body) + if let flags = flags { + q.async(flags: flags, execute: body) + } else { + q.async(execute: body) + } } } } diff --git a/Pods/PromiseKit/Sources/Catchable.swift b/Pods/PromiseKit/Sources/Catchable.swift index 1da259e..8b0a305 100644 --- a/Pods/PromiseKit/Sources/Catchable.swift +++ b/Pods/PromiseKit/Sources/Catchable.swift @@ -21,7 +21,7 @@ public extension CatchMixin { - SeeAlso: [Cancellation](http://promisekit.org/docs/) */ @discardableResult - func `catch`(on: DispatchQueue? = conf.Q.return, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) -> Void) -> PMKFinalizer { + func `catch`(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) -> Void) -> PMKFinalizer { let finalizer = PMKFinalizer() pipe { switch $0 { @@ -29,7 +29,7 @@ public extension CatchMixin { guard policy == .allErrors || !error.isCancelled else { fallthrough } - on.async { + on.async(flags: flags) { body(error) finalizer.pending.resolve(()) } @@ -70,7 +70,7 @@ public extension CatchMixin { - Parameter body: The handler to execute if this promise is rejected. - SeeAlso: [Cancellation](http://promisekit.org/docs/) */ - func recover(on: DispatchQueue? = conf.Q.map, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) throws -> U) -> Promise where U.T == T { + func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) throws -> U) -> Promise where U.T == T { let rp = Promise(.pending) pipe { switch $0 { @@ -78,7 +78,7 @@ public extension CatchMixin { rp.box.seal(.fulfilled(value)) case .rejected(let error): if policy == .allErrors || !error.isCancelled { - on.async { + on.async(flags: flags) { do { let rv = try body(error) guard rv !== rp else { throw PMKError.returnedSelf } @@ -97,23 +97,21 @@ public extension CatchMixin { /** The provided closure executes when this promise rejects. - This variant of `recover` requires the handler to return a Guarantee, thus it returns a Guarantee itself and your closure cannot `throw`. - Note it is logically impossible for this to take a `catchPolicy`, thus `allErrors` are handled. - + - Note it is logically impossible for this to take a `catchPolicy`, thus `allErrors` are handled. - Parameter on: The queue to which the provided closure dispatches. - Parameter body: The handler to execute if this promise is rejected. - SeeAlso: [Cancellation](http://promisekit.org/docs/) */ @discardableResult - func recover(on: DispatchQueue? = conf.Q.map, _ body: @escaping(Error) -> Guarantee) -> Guarantee { + func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(Error) -> Guarantee) -> Guarantee { let rg = Guarantee(.pending) pipe { switch $0 { case .fulfilled(let value): rg.box.seal(value) case .rejected(let error): - on.async { + on.async(flags: flags) { body(error).pipe(to: rg.box.seal) } } @@ -138,10 +136,10 @@ public extension CatchMixin { - Parameter body: The closure that executes when this promise resolves. - Returns: A new promise, resolved with this promise’s resolution. */ - func ensure(on: DispatchQueue? = conf.Q.return, _ body: @escaping () -> Void) -> Promise { + func ensure(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping () -> Void) -> Promise { let rp = Promise(.pending) pipe { result in - on.async { + on.async(flags: flags) { body() rp.box.seal(result) } @@ -167,10 +165,10 @@ public extension CatchMixin { - Parameter body: The closure that executes when this promise resolves. - Returns: A new promise, resolved with this promise’s resolution. */ - func ensureThen(on: DispatchQueue? = conf.Q.return, _ body: @escaping () -> Guarantee) -> Promise { + func ensureThen(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping () -> Guarantee) -> Promise { let rp = Promise(.pending) pipe { result in - on.async { + on.async(flags: flags) { body().done { rp.box.seal(result) } @@ -205,14 +203,14 @@ public extension CatchMixin where T == Void { - SeeAlso: [Cancellation](http://promisekit.org/docs/) */ @discardableResult - func recover(on: DispatchQueue? = conf.Q.map, _ body: @escaping(Error) -> Void) -> Guarantee { + func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(Error) -> Void) -> Guarantee { let rg = Guarantee(.pending) pipe { switch $0 { case .fulfilled: rg.box.seal(()) case .rejected(let error): - on.async { + on.async(flags: flags) { body(error) rg.box.seal(()) } @@ -230,7 +228,7 @@ public extension CatchMixin where T == Void { - Parameter body: The handler to execute if this promise is rejected. - SeeAlso: [Cancellation](http://promisekit.org/docs/) */ - func recover(on: DispatchQueue? = conf.Q.map, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) throws -> Void) -> Promise { + func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) throws -> Void) -> Promise { let rg = Promise(.pending) pipe { switch $0 { @@ -238,7 +236,7 @@ public extension CatchMixin where T == Void { rg.box.seal(.fulfilled(())) case .rejected(let error): if policy == .allErrors || !error.isCancelled { - on.async { + on.async(flags: flags) { do { rg.box.seal(.fulfilled(try body(error))) } catch { diff --git a/Pods/PromiseKit/Sources/Guarantee.swift b/Pods/PromiseKit/Sources/Guarantee.swift index 6042125..1a60d57 100644 --- a/Pods/PromiseKit/Sources/Guarantee.swift +++ b/Pods/PromiseKit/Sources/Guarantee.swift @@ -66,10 +66,10 @@ public class Guarantee: Thenable { public extension Guarantee { @discardableResult - func done(on: DispatchQueue? = conf.Q.return, _ body: @escaping(T) -> Void) -> Guarantee { + func done(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) -> Void) -> Guarantee { let rg = Guarantee(.pending) pipe { (value: T) in - on.async { + on.async(flags: flags) { body(value) rg.box.seal(()) } @@ -77,10 +77,10 @@ public extension Guarantee { return rg } - func map(on: DispatchQueue? = conf.Q.map, _ body: @escaping(T) -> U) -> Guarantee { + func map(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) -> U) -> Guarantee { let rg = Guarantee(.pending) pipe { value in - on.async { + on.async(flags: flags) { rg.box.seal(body(value)) } } @@ -88,10 +88,10 @@ public extension Guarantee { } @discardableResult - func then(on: DispatchQueue? = conf.Q.map, _ body: @escaping(T) -> Guarantee) -> Guarantee { + func then(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) -> Guarantee) -> Guarantee { let rg = Guarantee(.pending) pipe { value in - on.async { + on.async(flags: flags) { body(value).pipe(to: rg.box.seal) } } @@ -125,6 +125,29 @@ public extension Guarantee { } } +public extension Guarantee where T: Sequence { + + /** + `Guarantee<[T]>` => `T` -> `Guarantee` => `Guaranetee<[U]>` + + firstly { + .value([1,2,3]) + }.thenMap { + .value($0 * 2) + }.done { + // $0 => [2,4,6] + } + */ + func thenMap(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) -> Guarantee) -> Guarantee<[U]> { + return then(on: on, flags: flags) { + when(fulfilled: $0.map(transform)) + }.recover { + // if happens then is bug inside PromiseKit + fatalError(String(describing: $0)) + } + } +} + #if swift(>=3.1) public extension Guarantee where T == Void { convenience init() { diff --git a/Pods/PromiseKit/Sources/Thenable.swift b/Pods/PromiseKit/Sources/Thenable.swift index 25cac5f..7d9d156 100644 --- a/Pods/PromiseKit/Sources/Thenable.swift +++ b/Pods/PromiseKit/Sources/Thenable.swift @@ -30,12 +30,12 @@ public extension Thenable { //… } */ - func then(on: DispatchQueue? = conf.Q.map, file: StaticString = #file, line: UInt = #line, _ body: @escaping(T) throws -> U) -> Promise { + func then(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) throws -> U) -> Promise { let rp = Promise(.pending) pipe { switch $0 { case .fulfilled(let value): - on.async { + on.async(flags: flags) { do { let rv = try body(value) guard rv !== rp else { throw PMKError.returnedSelf } @@ -68,12 +68,12 @@ public extension Thenable { //… } */ - func map(on: DispatchQueue? = conf.Q.map, _ transform: @escaping(T) throws -> U) -> Promise { + func map(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T) throws -> U) -> Promise { let rp = Promise(.pending) pipe { switch $0 { case .fulfilled(let value): - on.async { + on.async(flags: flags) { do { rp.box.seal(.fulfilled(try transform(value))) } catch { @@ -102,12 +102,12 @@ public extension Thenable { // either `PMKError.compactMap` or a `JSONError` } */ - func compactMap(on: DispatchQueue? = conf.Q.map, _ transform: @escaping(T) throws -> U?) -> Promise { + func compactMap(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T) throws -> U?) -> Promise { let rp = Promise(.pending) pipe { switch $0 { case .fulfilled(let value): - on.async { + on.async(flags: flags) { do { if let rv = try transform(value) { rp.box.seal(.fulfilled(rv)) @@ -141,12 +141,12 @@ public extension Thenable { print(response.data) } */ - func done(on: DispatchQueue? = conf.Q.return, _ body: @escaping(T) throws -> Void) -> Promise { + func done(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) throws -> Void) -> Promise { let rp = Promise(.pending) pipe { switch $0 { case .fulfilled(let value): - on.async { + on.async(flags: flags) { do { try body(value) rp.box.seal(.fulfilled(())) @@ -181,8 +181,8 @@ public extension Thenable { print(foo, " is Void") } */ - func get(on: DispatchQueue? = conf.Q.return, _ body: @escaping (T) throws -> Void) -> Promise { - return map(on: on) { + func get(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping (T) throws -> Void) -> Promise { + return map(on: on, flags: flags) { try body($0) return $0 } @@ -264,8 +264,8 @@ public extension Thenable where T: Sequence { // $0 => [2,4,6] } */ - func mapValues(on: DispatchQueue? = conf.Q.map, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U]> { - return map(on: on){ try $0.map(transform) } + func mapValues(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U]> { + return map(on: on, flags: flags){ try $0.map(transform) } } /** @@ -279,8 +279,8 @@ public extension Thenable where T: Sequence { // $0 => [1,1,2,2,3,3] } */ - func flatMapValues(on: DispatchQueue? = conf.Q.map, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.Iterator.Element]> { - return map(on: on){ (foo: T) in + func flatMapValues(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.Iterator.Element]> { + return map(on: on, flags: flags){ (foo: T) in try foo.flatMap{ try transform($0) } } } @@ -296,8 +296,8 @@ public extension Thenable where T: Sequence { // $0 => [1,2,3] } */ - func compactMapValues(on: DispatchQueue? = conf.Q.map, _ transform: @escaping(T.Iterator.Element) throws -> U?) -> Promise<[U]> { - return map(on: on) { foo -> [U] in + func compactMapValues(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U?) -> Promise<[U]> { + return map(on: on, flags: flags) { foo -> [U] in #if !swift(>=3.3) || (swift(>=4) && !swift(>=4.1)) return try foo.flatMap(transform) #else @@ -317,8 +317,8 @@ public extension Thenable where T: Sequence { // $0 => [2,4,6] } */ - func thenMap(on: DispatchQueue? = conf.Q.map, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.T]> { - return then(on: on) { + func thenMap(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.T]> { + return then(on: on, flags: flags) { when(fulfilled: try $0.map(transform)) } } @@ -334,8 +334,8 @@ public extension Thenable where T: Sequence { // $0 => [1,1,2,2,3,3] } */ - func thenFlatMap(on: DispatchQueue? = conf.Q.map, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.T.Iterator.Element]> where U.T: Sequence { - return then(on: on) { + func thenFlatMap(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.T.Iterator.Element]> where U.T: Sequence { + return then(on: on, flags: flags) { when(fulfilled: try $0.map(transform)) }.map(on: nil) { $0.flatMap{ $0 } @@ -353,8 +353,8 @@ public extension Thenable where T: Sequence { // $0 => [2,3] } */ - func filterValues(on: DispatchQueue? = conf.Q.map, _ isIncluded: @escaping (T.Iterator.Element) -> Bool) -> Promise<[T.Iterator.Element]> { - return map(on: on) { + func filterValues(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ isIncluded: @escaping (T.Iterator.Element) -> Bool) -> Promise<[T.Iterator.Element]> { + return map(on: on, flags: flags) { $0.filter(isIncluded) } } @@ -387,7 +387,7 @@ public extension Thenable where T: Collection { public extension Thenable where T: Sequence, T.Iterator.Element: Comparable { /// - Returns: a promise fulfilled with the sorted values of this `Sequence`. - func sortedValues(on: DispatchQueue? = conf.Q.map) -> Promise<[T.Iterator.Element]> { - return map(on: on){ $0.sorted() } + func sortedValues(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil) -> Promise<[T.Iterator.Element]> { + return map(on: on, flags: flags){ $0.sorted() } } } diff --git a/Pods/Realm/Realm/RLMMigration.mm b/Pods/Realm/Realm/RLMMigration.mm index 0fca177..6c0c571 100644 --- a/Pods/Realm/Realm/RLMMigration.mm +++ b/Pods/Realm/Realm/RLMMigration.mm @@ -78,7 +78,7 @@ using namespace realm; return self.realm.schema; } -- (void)enumerateObjects:(NSString *)className block:(RLMObjectMigrationBlock)block { +- (void)enumerateObjects:(NSString *)className block:(__attribute__((noescape)) RLMObjectMigrationBlock)block { RLMResults *objects = [_realm.schema schemaForClassName:className] ? [_realm allObjects:className] : nil; RLMResults *oldObjects = [_oldRealm.schema schemaForClassName:className] ? [_oldRealm allObjects:className] : nil; diff --git a/Pods/Realm/Realm/RLMRealm.mm b/Pods/Realm/Realm/RLMRealm.mm index 2271042..c5be182 100644 --- a/Pods/Realm/Realm/RLMRealm.mm +++ b/Pods/Realm/Realm/RLMRealm.mm @@ -609,11 +609,11 @@ REALM_NOINLINE static void translateSharedGroupOpenException(RLMRealmConfigurati } } -- (void)transactionWithBlock:(void(^)(void))block { +- (void)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block { [self transactionWithBlock:block error:nil]; } -- (BOOL)transactionWithBlock:(void(^)(void))block error:(NSError **)outError { +- (BOOL)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block error:(NSError **)outError { [self beginWriteTransaction]; block(); if (_realm->is_in_transaction()) { diff --git a/Pods/RealmSwift/RealmSwift/Error.swift b/Pods/RealmSwift/RealmSwift/Error.swift index e3f65bd..e7b34ac 100644 --- a/Pods/RealmSwift/RealmSwift/Error.swift +++ b/Pods/RealmSwift/RealmSwift/Error.swift @@ -34,7 +34,6 @@ extension Realm { ``` */ public struct Error { - // swiftlint:disable:next nesting public typealias Code = RLMError.Code /// Error thrown by Realm if no other specific error is returned when a realm is opened. @@ -84,7 +83,7 @@ extension Realm { } /// :nodoc: - public var _nsError: NSError + public let _nsError: NSError /// :nodoc: public init(_nsError error: NSError) { @@ -105,7 +104,9 @@ extension Realm { // Provide bridging from errors with domain RLMErrorDomain to Error. extension Realm.Error: _BridgedStoredNSError { /// :nodoc: - public static var _nsErrorDomain = RLMErrorDomain + public static let _nsErrorDomain = RLMErrorDomain + /// :nodoc: + public static let errorDomain = RLMErrorDomain } // MARK: Equatable diff --git a/Pods/RealmSwift/RealmSwift/List.swift b/Pods/RealmSwift/RealmSwift/List.swift index cce22d2..377754d 100644 --- a/Pods/RealmSwift/RealmSwift/List.swift +++ b/Pods/RealmSwift/RealmSwift/List.swift @@ -481,6 +481,24 @@ extension List: RealmCollection { return RLMIterator(collection: _rlmArray) } +#if swift(>=4) + /** + 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 replaceSubrange(_ subrange: R, with newElements: C) + where C.Iterator.Element == Element, R: RangeExpression, List.Index == R.Bound { + let subrange = subrange.relative(to: self) + for _ in subrange.lowerBound.. +#endif /// The position of the first element in a non-empty collection. /// Identical to endIndex in an empty collection. @@ -596,7 +611,19 @@ extension List: MutableCollection { currentIndex += 1 } } + #if swift(>=4.1.50) + /** + Removes objects from the list at the given range. + - warning: This method may only be called during a write transaction. + */ + public func removeSubrange(_ boundsExpression: R) where R : RangeExpression, List.Index == R.Bound { + let bounds = boundsExpression.relative(to: self) + for _ in bounds { + remove(at: bounds.lowerBound) + } + } + #else /** Removes objects from the list at the given range. @@ -611,7 +638,7 @@ extension List: MutableCollection { removeSubrange(bounds.lowerBound...bounds.upperBound) } - //// :nodoc: + /// :nodoc: public func removeSubrange(_ bounds: CountableRange) { for _ in bounds { remove(at: bounds.lowerBound) @@ -651,12 +678,14 @@ extension List: MutableCollection { insert(contentsOf: newElements, at: subrange.lowerBound) } + /// :nodoc: public func replaceSubrange(_ subrange: DefaultRandomAccessIndices, with newElements: C) where C.Iterator.Element == Element { removeSubrange(subrange) insert(contentsOf: newElements, at: subrange.startIndex) } +#endif } #else // MARK: - RangeReplaceableCollection support @@ -676,7 +705,7 @@ extension List: RangeReplaceableCollection { #if swift(>=3.2) // The issue described below is fixed in Swift 3.2 and above. -#elseif swift(>=3.1) +#else // These should not be necessary, but Swift 3.1's compiler fails to infer the `SubSequence`, // and the standard library neglects to provide the default implementation of `subscript` /// :nodoc: diff --git a/Pods/RealmSwift/RealmSwift/Object.swift b/Pods/RealmSwift/RealmSwift/Object.swift index 573ae65..a56d0ca 100644 --- a/Pods/RealmSwift/RealmSwift/Object.swift +++ b/Pods/RealmSwift/RealmSwift/Object.swift @@ -69,7 +69,6 @@ import Realm.Private @objc(RealmSwiftObject) open class Object: RLMObjectBase, ThreadConfined, RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectClassName: className()) } diff --git a/Pods/RealmSwift/RealmSwift/RealmCollection.swift b/Pods/RealmSwift/RealmSwift/RealmCollection.swift index 7465c9c..39606f7 100644 --- a/Pods/RealmSwift/RealmSwift/RealmCollection.swift +++ b/Pods/RealmSwift/RealmSwift/RealmCollection.swift @@ -32,6 +32,11 @@ public struct RLMIterator: IteratorProtocol { /// Advance to the next element and return it, or `nil` if no next element exists. public mutating func next() -> Element? { let next = generatorBase.next() + #if swift(>=3.4) && (swift(>=4.1.50) || !swift(>=4)) + if next is NSNull { + return Element._nilValue() + } + #endif if let next = next as? Object? { if next == nil { return nil as Element? @@ -130,38 +135,69 @@ private func forceCast(_ from: A, to type: U.Type) -> U { } /// A type which can be stored in a Realm List or Results +#if swift(>=3.4) && (swift(>=4.1.50) || !swift(>=4)) +public protocol RealmCollectionValue: Equatable { + /// :nodoc: + static func _rlmArray() -> RLMArray + /// :nodoc: + static func _nilValue() -> Self +} +#else public protocol RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name static func _rlmArray() -> RLMArray } +#endif extension RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectType: .int, optional: false) } -} - -extension Optional: RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name - public static func _rlmArray() -> RLMArray { - switch Wrapped.self { - case is Int.Type, is Int8.Type, is Int16.Type, is Int32.Type, is Int64.Type: - return RLMArray(objectType: .int, optional: true) - case is Bool.Type: return RLMArray(objectType: .bool, optional: true) - case is Float.Type: return RLMArray(objectType: .float, optional: true) - case is Double.Type: return RLMArray(objectType: .double, optional: true) - case is String.Type: return RLMArray(objectType: .string, optional: true) - case is Data.Type: return RLMArray(objectType: .data, optional: true) - case is Date.Type: return RLMArray(objectType: .date, optional: true) - default: fatalError("Unsupported type for List: \(Wrapped.self)?") - } + public static func _nilValue() -> Self { + fatalError("unexpected NSNull for non-Optional type") } } +private func arrayType(_ type: T.Type) -> RLMArray { + switch type { + case is Int.Type, is Int8.Type, is Int16.Type, is Int32.Type, is Int64.Type: + return RLMArray(objectType: .int, optional: true) + case is Bool.Type: return RLMArray(objectType: .bool, optional: true) + case is Float.Type: return RLMArray(objectType: .float, optional: true) + case is Double.Type: return RLMArray(objectType: .double, optional: true) + case is String.Type: return RLMArray(objectType: .string, optional: true) + case is Data.Type: return RLMArray(objectType: .data, optional: true) + case is Date.Type: return RLMArray(objectType: .date, optional: true) + default: fatalError("Unsupported type for List: \(T.self)?") + } +} + +#if swift(>=3.4) && (swift(>=4.1.50) || !swift(>=4)) +extension Optional: RealmCollectionValue where Wrapped: RealmCollectionValue { + /// :nodoc: + public static func _rlmArray() -> RLMArray { + return arrayType(Wrapped.self) + } + /// :nodoc: + public static func _nilValue() -> Optional { + return nil + } +} +#else +extension Optional: RealmCollectionValue { + /// :nodoc: + public static func _rlmArray() -> RLMArray { + return arrayType(Wrapped.self) + } + /// :nodoc: + public static func _nilValue() -> Optional { + return nil + } +} +#endif + extension Int: RealmCollectionValue {} extension Int8: RealmCollectionValue {} extension Int16: RealmCollectionValue {} @@ -169,21 +205,18 @@ extension Int32: RealmCollectionValue {} extension Int64: RealmCollectionValue {} extension Float: RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectType: .float, optional: false) } } extension Double: RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectType: .double, optional: false) } } extension Bool: RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectType: .bool, optional: false) } @@ -191,21 +224,18 @@ extension Bool: RealmCollectionValue { extension String: RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectType: .string, optional: false) } } extension Date: RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectType: .date, optional: false) } } extension Data: RealmCollectionValue { /// :nodoc: - // swiftlint:disable:next identifier_name public static func _rlmArray() -> RLMArray { return RLMArray(objectType: .data, optional: false) } diff --git a/Pods/RealmSwift/RealmSwift/Sync.swift b/Pods/RealmSwift/RealmSwift/Sync.swift index 4c43865..9295922 100644 --- a/Pods/RealmSwift/RealmSwift/Sync.swift +++ b/Pods/RealmSwift/RealmSwift/Sync.swift @@ -726,7 +726,6 @@ extension SortDescriptor { } } -#if swift(>=3.1) extension Results where Element == SyncPermission { /** Return a `Results` containing the objects represented @@ -739,7 +738,6 @@ extension Results where Element == SyncPermission { return sorted(by: [SortDescriptor(sortProperty: sortProperty, ascending: ascending)]) } } -#endif // MARK: - Partial sync subscriptions diff --git a/Pods/RealmSwift/RealmSwift/Util.swift b/Pods/RealmSwift/RealmSwift/Util.swift index 649a53f..954f4fb 100644 --- a/Pods/RealmSwift/RealmSwift/Util.swift +++ b/Pods/RealmSwift/RealmSwift/Util.swift @@ -35,38 +35,13 @@ internal func noWarnUnsafeBitCast(_ x: T, to type: U.Type) -> U { /// replace them with the underlying value or NSNull. internal func unwrapOptionals(in varargs: [Any]) -> [Any] { return varargs.map { arg in -#if swift(>=3.1) if let someArg = arg as Any? { return someArg } return NSNull() -#else - if let optionalArg = arg as? RealmAnyOptionalUnboxingWorkaround { - return optionalArg.rlm_unwrappedValue() - } else { - return arg - } -#endif } } -// FIXME: Kill this when we drop Xcode 8.0 support. -#if swift(>=3.1) -#else -private protocol RealmAnyOptionalUnboxingWorkaround { - func rlm_unwrappedValue() -> Any -} - -extension Optional: RealmAnyOptionalUnboxingWorkaround { - func rlm_unwrappedValue() -> Any { - switch self { - case .none: return NSNull() - case let .some(underlying): return underlying - } - } -} -#endif - internal func notFoundToNil(index: UInt) -> Int? { if index == UInt(NSNotFound) { return nil diff --git a/Pods/Target Support Files/Charts/Charts-dummy.m b/Pods/Target Support Files/Charts/Charts-dummy.m new file mode 100644 index 0000000..0d0640c --- /dev/null +++ b/Pods/Target Support Files/Charts/Charts-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Charts : NSObject +@end +@implementation PodsDummy_Charts +@end diff --git a/Pods/Target Support Files/Charts/Charts-prefix.pch b/Pods/Target Support Files/Charts/Charts-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Charts/Charts-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Charts/Charts-umbrella.h b/Pods/Target Support Files/Charts/Charts-umbrella.h new file mode 100644 index 0000000..006a8a2 --- /dev/null +++ b/Pods/Target Support Files/Charts/Charts-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ChartsVersionNumber; +FOUNDATION_EXPORT const unsigned char ChartsVersionString[]; + diff --git a/Pods/Target Support Files/Charts/Charts.modulemap b/Pods/Target Support Files/Charts/Charts.modulemap new file mode 100644 index 0000000..663dec7 --- /dev/null +++ b/Pods/Target Support Files/Charts/Charts.modulemap @@ -0,0 +1,6 @@ +framework module Charts { + umbrella header "Charts-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Charts/Charts.xcconfig b/Pods/Target Support Files/Charts/Charts.xcconfig new file mode 100644 index 0000000..8a1b787 --- /dev/null +++ b/Pods/Target Support Files/Charts/Charts.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Charts +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +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} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Charts +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Charts/Info.plist b/Pods/Target Support Files/Charts/Info.plist new file mode 100644 index 0000000..793d31a --- /dev/null +++ b/Pods/Target Support Files/Charts/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.1.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.markdown b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.markdown index 2f7dbc5..012e4e9 100644 --- a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.markdown @@ -49,6 +49,212 @@ THE SOFTWARE. > SOFTWARE. +## Charts + +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 2016 Daniel Cohen Gindi & Philipp Jahoda + + 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. + + + ## Firebase Copyright 2018 Google diff --git a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.plist b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.plist index 6d5f338..dd51c78 100644 --- a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-acknowledgements.plist @@ -72,6 +72,218 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + 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 2016 Daniel Cohen Gindi & Philipp Jahoda + + 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. + + + License + Apache License, Version 2.0 + Title + Charts + Type + PSGroupSpecifier + FooterText Copyright 2018 Google diff --git a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-frameworks.sh b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-frameworks.sh index 8e36ba7..33996f6 100755 --- a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-frameworks.sh +++ b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-frameworks.sh @@ -145,6 +145,7 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" install_framework "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Charts/Charts.framework" install_framework "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework" install_framework "${BUILT_PRODUCTS_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework" install_framework "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework" @@ -161,6 +162,7 @@ fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" install_framework "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Charts/Charts.framework" install_framework "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework" install_framework "${BUILT_PRODUCTS_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework" install_framework "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework" diff --git a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud.debug.xcconfig b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud.debug.xcconfig index 2f10670..491290c 100644 --- a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud.debug.xcconfig +++ b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.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}/SVProgressHUD/SVProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart/SwiftChart.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"sqlite3" -l"z" -framework "Alamofire" -framework "CFNetwork" -framework "ChameleonFramework" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "Kingfisher" -framework "PromiseKit" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "SideMenu" -framework "StoreKit" -framework "SwiftChart" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "leveldb" -framework "nanopb" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.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}/SVProgressHUD/SVProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart/SwiftChart.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"sqlite3" -l"z" -framework "Alamofire" -framework "CFNetwork" -framework "ChameleonFramework" -framework "Charts" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "Kingfisher" -framework "PromiseKit" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "SideMenu" -framework "StoreKit" -framework "SwiftChart" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "leveldb" -framework "nanopb" 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-pocloud/Pods-pocloud.release.xcconfig b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud.release.xcconfig index 2f10670..491290c 100644 --- a/Pods/Target Support Files/Pods-pocloud/Pods-pocloud.release.xcconfig +++ b/Pods/Target Support Files/Pods-pocloud/Pods-pocloud.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.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}/SVProgressHUD/SVProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart/SwiftChart.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"sqlite3" -l"z" -framework "Alamofire" -framework "CFNetwork" -framework "ChameleonFramework" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "Kingfisher" -framework "PromiseKit" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "SideMenu" -framework "StoreKit" -framework "SwiftChart" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "leveldb" -framework "nanopb" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.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}/SVProgressHUD/SVProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftChart/SwiftChart.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"sqlite3" -l"z" -framework "Alamofire" -framework "CFNetwork" -framework "ChameleonFramework" -framework "Charts" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "Kingfisher" -framework "PromiseKit" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "SideMenu" -framework "StoreKit" -framework "SwiftChart" -framework "SwiftyJSON" -framework "SystemConfiguration" -framework "leveldb" -framework "nanopb" 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/PromiseKit/Info.plist b/Pods/Target Support Files/PromiseKit/Info.plist index ab019f2..6406150 100644 --- a/Pods/Target Support Files/PromiseKit/Info.plist +++ b/Pods/Target Support Files/PromiseKit/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 6.2.8 + 6.3.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/Realm/Info.plist b/Pods/Target Support Files/Realm/Info.plist index 3ef6a8d..df8fb84 100644 --- a/Pods/Target Support Files/Realm/Info.plist +++ b/Pods/Target Support Files/Realm/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.7.0 + 3.7.1 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/RealmSwift/Info.plist b/Pods/Target Support Files/RealmSwift/Info.plist index 3ef6a8d..df8fb84 100644 --- a/Pods/Target Support Files/RealmSwift/Info.plist +++ b/Pods/Target Support Files/RealmSwift/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.7.0 + 3.7.1 CFBundleSignature ???? CFBundleVersion diff --git a/pocloud.xcodeproj/project.pbxproj b/pocloud.xcodeproj/project.pbxproj index 71bc7d6..ddbdbc3 100644 --- a/pocloud.xcodeproj/project.pbxproj +++ b/pocloud.xcodeproj/project.pbxproj @@ -31,6 +31,8 @@ C58C142A20B86C1C001BE9DA /* ChannelDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C58C142920B86C1C001BE9DA /* ChannelDetailViewController.swift */; }; C58C142C20B87197001BE9DA /* ChannelHistoryValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C58C142B20B87197001BE9DA /* ChannelHistoryValue.swift */; }; C58C142E20BDD6BA001BE9DA /* HistoryGraphViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C58C142D20BDD6BA001BE9DA /* HistoryGraphViewController.swift */; }; + C593D87820CF35ED00236B99 /* MaxWaterSystemViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C593D87720CF35ED00236B99 /* MaxWaterSystemViewController.swift */; }; + C593D87A20CF371400236B99 /* BaseDeviceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C593D87920CF371400236B99 /* BaseDeviceViewController.swift */; }; C5AA264A20C1BED600B39425 /* AppAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5AA264920C1BED600B39425 /* AppAuth.swift */; }; C5B75C2120BE350600EB850D /* MeshifyFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5B75C2020BE350600EB850D /* MeshifyFunctions.swift */; }; C5B75C2320BEFE3500EB850D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C5B75C2220BEFE3500EB850D /* GoogleService-Info.plist */; }; @@ -43,6 +45,7 @@ C5D24FDB20C88C3E00262BE8 /* MainNavController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D24FDA20C88C3E00262BE8 /* MainNavController.swift */; }; C5D24FDD20C891B600262BE8 /* CompanyDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D24FDC20C891B600262BE8 /* CompanyDetailViewController.swift */; }; C5D24FDF20C895C500262BE8 /* Migrations.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D24FDE20C895C500262BE8 /* Migrations.swift */; }; + C5D8BB8920D9C3BC00ABD1A7 /* DeviceChannelTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D8BB8820D9C3BC00ABD1A7 /* DeviceChannelTableCell.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -73,6 +76,8 @@ C58C142920B86C1C001BE9DA /* ChannelDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelDetailViewController.swift; sourceTree = ""; }; C58C142B20B87197001BE9DA /* ChannelHistoryValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelHistoryValue.swift; sourceTree = ""; }; C58C142D20BDD6BA001BE9DA /* HistoryGraphViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryGraphViewController.swift; sourceTree = ""; }; + C593D87720CF35ED00236B99 /* MaxWaterSystemViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaxWaterSystemViewController.swift; sourceTree = ""; }; + C593D87920CF371400236B99 /* BaseDeviceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseDeviceViewController.swift; sourceTree = ""; }; C5AA264920C1BED600B39425 /* AppAuth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAuth.swift; sourceTree = ""; }; C5B75C2020BE350600EB850D /* MeshifyFunctions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshifyFunctions.swift; sourceTree = ""; }; C5B75C2220BEFE3500EB850D /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; @@ -85,6 +90,7 @@ C5D24FDA20C88C3E00262BE8 /* MainNavController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainNavController.swift; sourceTree = ""; }; C5D24FDC20C891B600262BE8 /* CompanyDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompanyDetailViewController.swift; sourceTree = ""; }; C5D24FDE20C895C500262BE8 /* Migrations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Migrations.swift; sourceTree = ""; }; + C5D8BB8820D9C3BC00ABD1A7 /* DeviceChannelTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceChannelTableCell.swift; sourceTree = ""; }; D7E8B9ABE8755B533A815A1B /* Pods_pocloud.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_pocloud.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -116,6 +122,7 @@ C53407E920B85C3F0016CFAB /* MapDetailDeviceCell.swift */, C53407EB20B86AE90016CFAB /* ChannelHistoryCell.swift */, C5D24FD420C86CD900262BE8 /* AdminCompanyCell.swift */, + C5D8BB8820D9C3BC00ABD1A7 /* DeviceChannelTableCell.swift */, ); path = Cells; sourceTree = ""; @@ -184,6 +191,7 @@ C5589C0120B4A1B400639393 /* Controller */ = { isa = PBXGroup; children = ( + C593D87620CF35DB00236B99 /* Devices */, C5589BED20B47E2100639393 /* AppDelegate.swift */, C5B75C2020BE350600EB850D /* MeshifyFunctions.swift */, C5D24FDA20C88C3E00262BE8 /* MainNavController.swift */, @@ -210,6 +218,15 @@ path = "Supporting Files"; sourceTree = ""; }; + C593D87620CF35DB00236B99 /* Devices */ = { + isa = PBXGroup; + children = ( + C593D87720CF35ED00236B99 /* MaxWaterSystemViewController.swift */, + C593D87920CF371400236B99 /* BaseDeviceViewController.swift */, + ); + path = Devices; + sourceTree = ""; + }; F192CB42E03B8E853CFBBF82 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -315,6 +332,7 @@ "${SRCROOT}/Pods/Target Support Files/Pods-pocloud/Pods-pocloud-frameworks.sh", "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework", "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework", + "${BUILT_PRODUCTS_DIR}/Charts/Charts.framework", "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework", "${BUILT_PRODUCTS_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework", "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework", @@ -332,6 +350,7 @@ outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ChameleonFramework.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Charts.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleToolboxForMac.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework", @@ -360,6 +379,7 @@ C53407DC20B7333B0016CFAB /* Device.swift in Sources */, C5B75C2120BE350600EB850D /* MeshifyFunctions.swift in Sources */, C5589BF020B47E2100639393 /* LoginViewController.swift in Sources */, + C593D87A20CF371400236B99 /* BaseDeviceViewController.swift in Sources */, C53407E020B7462C0016CFAB /* DeviceDetailViewController.swift in Sources */, C53407E220B74A0A0016CFAB /* Channel.swift in Sources */, C58C142E20BDD6BA001BE9DA /* HistoryGraphViewController.swift in Sources */, @@ -368,6 +388,7 @@ C5D24FD520C86CD900262BE8 /* AdminCompanyCell.swift in Sources */, C5589BEE20B47E2100639393 /* AppDelegate.swift in Sources */, C5D24FD920C87DBA00262BE8 /* NavigationMenuController.swift in Sources */, + C5D8BB8920D9C3BC00ABD1A7 /* DeviceChannelTableCell.swift in Sources */, C5AA264A20C1BED600B39425 /* AppAuth.swift in Sources */, C5D24FDF20C895C500262BE8 /* Migrations.swift in Sources */, C5D24FD720C86DBB00262BE8 /* Company.swift in Sources */, @@ -375,6 +396,7 @@ C5D24FDD20C891B600262BE8 /* CompanyDetailViewController.swift in Sources */, C53407E420B74B6F0016CFAB /* ChanValue.swift in Sources */, C53407D820B72AE80016CFAB /* Gateway.swift in Sources */, + C593D87820CF35ED00236B99 /* MaxWaterSystemViewController.swift in Sources */, C5589C0420B4AA9600639393 /* User.swift in Sources */, C5D24FDB20C88C3E00262BE8 /* MainNavController.swift in Sources */, C58C142C20B87197001BE9DA /* ChannelHistoryValue.swift in Sources */, diff --git a/pocloud/Cells/DeviceChannelTableCell.swift b/pocloud/Cells/DeviceChannelTableCell.swift new file mode 100644 index 0000000..97ad10d --- /dev/null +++ b/pocloud/Cells/DeviceChannelTableCell.swift @@ -0,0 +1,27 @@ +// +// DeviceChannelTableCell.swift +// pocloud +// +// Created by Patrick McDonagh on 6/19/18. +// Copyright © 2018 patrickjmcd. All rights reserved. +// + +import UIKit + +class DeviceChannelTableCell: UITableViewCell { + + @IBOutlet weak var valueLabel: UILabel! + @IBOutlet weak var nameLabel: UILabel! + @IBOutlet weak var timestampLabel: UILabel! + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/pocloud/Controller/DeviceListViewController.swift b/pocloud/Controller/DeviceListViewController.swift index 7ce48f1..fcf0c7f 100644 --- a/pocloud/Controller/DeviceListViewController.swift +++ b/pocloud/Controller/DeviceListViewController.swift @@ -140,6 +140,11 @@ class DeviceListViewController: UITableViewController { let destinationVC = segue.destination as! DeviceDetailViewController destinationVC.thisDevice = selectedDevice! } + + if segue.identifier == "openMaxWaterSystem" { + let destinationVC = segue.destination as! MaxWaterSystemViewController + destinationVC.thisDevice = selectedDevice! + } } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -156,12 +161,14 @@ class DeviceListViewController: UITableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let uniqueDeviceTypes = getUniqueDeviceTypeNames() let deviceTypesWithDevices = devices?.filter("ANY parentDeviceType.vanityName == %@", uniqueDeviceTypes[indexPath.section]).sorted(byKeyPath: "vanityName") -// let deviceTypesWithDevices = deviceTypes?.filter(deviceTypeFilter) -// if let thisSection = deviceTypesWithDevices?[indexPath.section] { -// selectedDevice = thisSection.devices[indexPath.row] - selectedDevice = deviceTypesWithDevices?[indexPath.row] + selectedDevice = deviceTypesWithDevices?[indexPath.row] + switch (selectedDevice?.parentDeviceType.first?.name){ + case "advvfdipp": + performSegue(withIdentifier: "openMaxWaterSystem", sender: self) + + default: performSegue(withIdentifier: "openDeviceDetailView", sender: self) -// } + } } diff --git a/pocloud/Controller/Devices/BaseDeviceViewController.swift b/pocloud/Controller/Devices/BaseDeviceViewController.swift new file mode 100644 index 0000000..c04cb82 --- /dev/null +++ b/pocloud/Controller/Devices/BaseDeviceViewController.swift @@ -0,0 +1,143 @@ +// +// BaseDeviceViewController.swift +// pocloud +// +// Created by Patrick McDonagh on 6/11/18. +// Copyright © 2018 patrickjmcd. All rights reserved. +// + +import UIKit +import RealmSwift +import FirebaseDatabase +import SVProgressHUD +import PromiseKit + +class BaseDeviceViewController: UIViewController { + let realm = try! Realm() + var ref: DatabaseReference! + let baseURL = (UIApplication.shared.delegate as! AppDelegate).baseURL + let user = (UIApplication.shared.delegate as! AppDelegate).user + + var thisDevice : Device? + var deviceTypes : Results? + var selectedChannel : Channel? + + var channelLookup : [String : Int] = [:] + var values : [String : MeshifyValue] = [:] + var updatedChannelNames : [String] = [String]() + var changedChannelNames : [String] = [String]() + let numFormatter = NumberFormatter() + + override func viewDidLoad() { + super.viewDidLoad() + ref = Database.database().reference() + + numFormatter.minimumFractionDigits = 0 + numFormatter.maximumFractionDigits = 3 + numFormatter.minimumIntegerDigits = 1 + + initializeData() + } + + func initializeData() { + let macAddress = String((thisDevice?.macAddress.replacingOccurrences(of: ":", with: "").uppercased().dropLast(4))!) + let deviceTypeName = (thisDevice?.parentDeviceType.first?.name)! + SVProgressHUD.show() + firstly { + loadData() + }.then { _ in + getChannels(deviceTypeId: self.thisDevice!.deviceTypeId, baseURL: self.baseURL, authToken: (self.user?.authToken)!) + }.then { _ in + getChannelValues(deviceId: self.thisDevice!.id, baseURL: self.baseURL, authToken: (self.user?.authToken)!) + }.done { (valueDict) in + self.values = valueDict + self.updateGauges() + self.updateChartData() + SVProgressHUD.dismiss() + if let dev = self.thisDevice { + for chanIndex in 0.. String { + if let doubledValue = Double(value) { + if let formattedString = numFormatter.string(from: NSNumber(value: doubledValue)) { + return formattedString + } else { + return value + } + } else { + return value + } + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if segue.identifier == "goToChannelView" { + let destinationVC = segue.destination as! ChannelDetailViewController + destinationVC.thisDevice = thisDevice! + destinationVC.thisChannel = selectedChannel! + } + } + + func loadData() -> Promise { + return Promise { promise in + deviceTypes = realm.objects(DeviceType.self) + thisDevice = realm.objects(Device.self).filter("id == %d", thisDevice!.id).first! + promise.fulfill(()) + } + } +} diff --git a/pocloud/Controller/Devices/MaxWaterSystemViewController.swift b/pocloud/Controller/Devices/MaxWaterSystemViewController.swift new file mode 100644 index 0000000..c7189ec --- /dev/null +++ b/pocloud/Controller/Devices/MaxWaterSystemViewController.swift @@ -0,0 +1,138 @@ +// +// MaxWaterSystemViewController.swift +// pocloud +// +// Created by Patrick McDonagh on 6/11/18. +// Copyright © 2018 patrickjmcd. All rights reserved. +// + +import UIKit +import SVProgressHUD +import PromiseKit +import ChameleonFramework + +class MaxWaterSystemViewController: BaseDeviceViewController, UITableViewDelegate, UITableViewDataSource { + + @IBOutlet weak var startButton: UIButton! + @IBOutlet weak var stopButton: UIButton! + @IBOutlet weak var resetFaultsButton: UIButton! + @IBOutlet weak var tableView: UITableView! + + let channelLabels : [String] = ["Status", "Fluid Level", "Flow Rate", "Intake Pressure", "Intake Temperature", "Motor Frequency", "Motor Current", "Tubing Pressure"] + let channelNames : [String] = ["wellstatus", "fluidlevel", "flowrate", "intakepressure", "intaketemperature", "vfdfrequency", "vfdcurrent", "tubingpressure"] + let formatter = DateFormatter() + + override func viewDidLoad() { + super.viewDidLoad() + formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" + + self.title = thisDevice?.vanityName + + tableView.delegate = self + tableView.dataSource = self + + tableView.estimatedRowHeight = 80 + tableView.rowHeight = UITableViewAutomaticDimension + + startButton.backgroundColor = UIColor.flatWhiteColorDark() + startButton.setTitleColor(UIColor.flatForestGreen(), for: .normal) + startButton.layer.cornerRadius = 5 + startButton.layer.borderWidth = 1 + startButton.layer.borderColor = UIColor.flatForestGreen().cgColor + + stopButton.backgroundColor = UIColor.flatWhiteColorDark() + stopButton.setTitleColor(UIColor.flatRed(), for: .normal) + stopButton.layer.cornerRadius = 5 + stopButton.layer.borderWidth = 1 + stopButton.layer.borderColor = UIColor.flatRed().cgColor + + resetFaultsButton.backgroundColor = UIColor.flatWhiteColorDark() + resetFaultsButton.setTitleColor(UIColor.flatBlue(), for: .normal) + resetFaultsButton.layer.cornerRadius = 5 + resetFaultsButton.layer.borderWidth = 1 + resetFaultsButton.layer.borderColor = UIColor.flatBlue().cgColor + + + } + + //MARK: - Table View Methods + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return channelLabels.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "deviceChannelCell", for: indexPath) as! DeviceChannelTableCell + cell.nameLabel.text = channelLabels[indexPath.row] + + if let meshVal = values[channelNames[indexPath.row]] { + cell.valueLabel.text = tryRound(value: meshVal.value, places: 3) + cell.timestampLabel.text = formatter.string(from: Date(timeIntervalSince1970: Double(meshVal.timestamp))) + } + + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + selectedChannel = thisDevice?.parentDeviceType.first?.channels[indexPath.row] + performSegue(withIdentifier: "goToChannelView", sender: self) + } + + override func updateChartData() { + tableView.reloadData() + } + + //MARK: - Control Button Methods + @IBAction func startButtonPressed(_ sender: Any) { + let alert = UIAlertController(title: "Start Well", message: "Are you sure you want to start the well?", preferredStyle: .alert) + let action = UIAlertAction(title: "Start", style: .default) { (action) in + // what will happen once the user clicks the add item button on our UIAlert + firstly { + setChannelValue(deviceId: (self.thisDevice?.id)!, channelName: "writeplctag", value: "{'tag': 'cmd_Start', 'val': 1}", baseURL: self.baseURL, authToken: (self.user?.authToken)!) + }.done { _ in + self.initializeData() + }.catch { error in + print("ERROR IN startButtonPressed: \(error)") + } + + } + alert.addAction(action) + alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) + present(alert, animated: true, completion: nil) + } + + @IBAction func resetButtonPressed(_ sender: UIButton) { + let alert = UIAlertController(title: "Reset Well", message: "Are you sure you want to reset the well?", preferredStyle: .alert) + let action = UIAlertAction(title: "Reset", style: .default) { (action) in + // what will happen once the user clicks the add item button on our UIAlert + firstly { + setChannelValue(deviceId: (self.thisDevice?.id)!, channelName: "writeplctag", value: "{'tag': 'cmd_ResetAlarms', 'val': 1}", baseURL: self.baseURL, authToken: (self.user?.authToken)!) + }.done { _ in + self.initializeData() + }.catch { error in + print("ERROR IN resetButtonPressed: \(error)") + } + + } + alert.addAction(action) + alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) + present(alert, animated: true, completion: nil) + + } + @IBAction func stopButtonPressed(_ sender: Any) { + let alert = UIAlertController(title: "Stop Well", message: "Are you sure you want to stop the well?", preferredStyle: .alert) + let action = UIAlertAction(title: "Stop", style: .default) { (action) in + // what will happen once the user clicks the add item button on our UIAlert + firstly { + setChannelValue(deviceId: (self.thisDevice?.id)!, channelName: "writeplctag", value: "{'tag': 'cmd_Stop', 'val': 1}", baseURL: self.baseURL, authToken: (self.user?.authToken)!) + }.done { _ in + self.initializeData() + }.catch { error in + print("ERROR IN stopButtonPressed: \(error)") + } + + } + alert.addAction(action) + alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) + present(alert, animated: true, completion: nil) + } +} diff --git a/pocloud/Controller/MapDetailViewController.swift b/pocloud/Controller/MapDetailViewController.swift index 79574c8..dc1dd4e 100644 --- a/pocloud/Controller/MapDetailViewController.swift +++ b/pocloud/Controller/MapDetailViewController.swift @@ -72,7 +72,14 @@ class MapDetailViewController: UIViewController, MKMapViewDelegate, UITableViewD func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { selectedDevice = devices?[indexPath.row] - performSegue(withIdentifier: "openDeviceDetailView", sender: self) + switch (selectedDevice?.parentDeviceType.first?.name){ + case "advvfdipp": + performSegue(withIdentifier: "openMaxWaterSystem", sender: self) + + default: + performSegue(withIdentifier: "openDeviceDetailView", sender: self) + } + } @@ -115,6 +122,11 @@ class MapDetailViewController: UIViewController, MKMapViewDelegate, UITableViewD let destinationVC = segue.destination as! DeviceDetailViewController destinationVC.thisDevice = selectedDevice! } + + if segue.identifier == "openMaxWaterSystem" { + let destinationVC = segue.destination as! MaxWaterSystemViewController + destinationVC.thisDevice = selectedDevice! + } } func getDevicesAtGateway(){ diff --git a/pocloud/Controller/MeshifyFunctions.swift b/pocloud/Controller/MeshifyFunctions.swift index b49f3d9..63e511d 100644 --- a/pocloud/Controller/MeshifyFunctions.swift +++ b/pocloud/Controller/MeshifyFunctions.swift @@ -372,10 +372,10 @@ func getAllMeshifyData(baseURL : String, authToken : String) -> Promise{ } func writeChannelValue(deviceId: Int, channelName: String, value : String, baseURL : String, authToken : String) -> Promise { - let timestamp: Int = Int(Date().timeIntervalSince1970) +// let timestamp: Int = Int(Date().timeIntervalSince1970) var channelJson : JSON = JSON() channelJson["name"].string = channelName - channelJson["timestamp"].int = timestamp +// channelJson["timestamp"].int = timestamp channelJson["value"].string = value var listJson = JSON() @@ -401,6 +401,34 @@ func writeChannelValue(deviceId: Int, channelName: String, value : String, baseU } +func setChannelValue(deviceId: Int, channelName: String, value : String, baseURL : String, authToken : String) -> Promise { + // let timestamp: Int = Int(Date().timeIntervalSince1970) + var channelJson : JSON = JSON() + channelJson["name"].string = channelName + // channelJson["timestamp"].int = timestamp + channelJson["value"].string = value + + var listJson = JSON() + listJson.arrayObject = [channelJson] + + let url = "\(baseURL)/devices/\(deviceId)/sets?tries=2" + let headers : HTTPHeaders = [ + "Authorization": authToken + ] + + return Promise { promise in + Alamofire.request(url, method: .put, parameters: [:], encoding: listJson.rawString()!, headers: headers) + .response { response in + if response.response?.statusCode == 200 { + promise.fulfill(true) + } else { + promise.reject(String(response.response!.statusCode) as! Error) + } + } + } + +} + extension String: ParameterEncoding { public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { diff --git a/pocloud/Info.plist b/pocloud/Info.plist index 93fb983..0a35bed 100644 --- a/pocloud/Info.plist +++ b/pocloud/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString 1.0 CFBundleVersion - 9-rc1 + 10 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/pocloud/View/Base.lproj/Main.storyboard b/pocloud/View/Base.lproj/Main.storyboard index 1d89b69..2101c73 100644 --- a/pocloud/View/Base.lproj/Main.storyboard +++ b/pocloud/View/Base.lproj/Main.storyboard @@ -232,7 +232,7 @@