diff --git a/LoopFollow.xcodeproj/project.pbxproj b/LoopFollow.xcodeproj/project.pbxproj index 9d1133389..8efab85aa 100644 --- a/LoopFollow.xcodeproj/project.pbxproj +++ b/LoopFollow.xcodeproj/project.pbxproj @@ -8,6 +8,14 @@ /* Begin PBXBuildFile section */ 3F1335F351590E573D8E6962 /* Pods_LoopFollow.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D55B42A22051DAD69E89D0 /* Pods_LoopFollow.framework */; }; + DD152D3B24C01B2300361FA2 /* InfoDisplaySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD152D3A24C01B2300361FA2 /* InfoDisplaySettingsViewController.swift */; }; + DD98F54424BCEFEE0007425A /* ShareClientExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD98F54324BCEFEE0007425A /* ShareClientExtension.swift */; }; + DDCF979424C0D380002C9752 /* UIViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCF979324C0D380002C9752 /* UIViewExtension.swift */; }; + DDCF979624C1443C002C9752 /* GeneralSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCF979524C1443C002C9752 /* GeneralSettingsViewController.swift */; }; + DDCF979824C1489C002C9752 /* GraphSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCF979724C1489C002C9752 /* GraphSettingsViewController.swift */; }; + DDCF979A24C14DB4002C9752 /* WatchSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCF979924C14DB4002C9752 /* WatchSettingsViewController.swift */; }; + DDCF979C24C14EFB002C9752 /* DebugSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCF979B24C14EFB002C9752 /* DebugSettingsViewController.swift */; }; + DDCF979E24C2382A002C9752 /* AppStateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCF979D24C2382A002C9752 /* AppStateController.swift */; }; FC16A97A24996673003D6245 /* NightScout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC16A97924996673003D6245 /* NightScout.swift */; }; FC16A97B249966A3003D6245 /* AlarmSound.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC7CE589248ABEA3001F83B8 /* AlarmSound.swift */; }; FC16A97D24996747003D6245 /* Alarms.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC16A97C24996747003D6245 /* Alarms.swift */; }; @@ -162,6 +170,14 @@ /* Begin PBXFileReference section */ 059B0FA59AABFE72FE13DDDA /* Pods-LoopFollow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LoopFollow.release.xcconfig"; path = "Target Support Files/Pods-LoopFollow/Pods-LoopFollow.release.xcconfig"; sourceTree = ""; }; A7D55B42A22051DAD69E89D0 /* Pods_LoopFollow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LoopFollow.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DD152D3A24C01B2300361FA2 /* InfoDisplaySettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoDisplaySettingsViewController.swift; sourceTree = ""; }; + DD98F54324BCEFEE0007425A /* ShareClientExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareClientExtension.swift; sourceTree = ""; }; + DDCF979324C0D380002C9752 /* UIViewExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewExtension.swift; sourceTree = ""; }; + DDCF979524C1443C002C9752 /* GeneralSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingsViewController.swift; sourceTree = ""; }; + DDCF979724C1489C002C9752 /* GraphSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphSettingsViewController.swift; sourceTree = ""; }; + DDCF979924C14DB4002C9752 /* WatchSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchSettingsViewController.swift; sourceTree = ""; }; + DDCF979B24C14EFB002C9752 /* DebugSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugSettingsViewController.swift; sourceTree = ""; }; + DDCF979D24C2382A002C9752 /* AppStateController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppStateController.swift; sourceTree = ""; }; ECA3EFB4037410B4973BB632 /* Pods-LoopFollow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LoopFollow.debug.xcconfig"; path = "Target Support Files/Pods-LoopFollow/Pods-LoopFollow.debug.xcconfig"; sourceTree = ""; }; FC16A97924996673003D6245 /* NightScout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightScout.swift; sourceTree = ""; }; FC16A97C24996747003D6245 /* Alarms.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alarms.swift; sourceTree = ""; }; @@ -350,6 +366,15 @@ path = Pods; sourceTree = ""; }; + DD98F54224BCEF190007425A /* Extensions */ = { + isa = PBXGroup; + children = ( + DD98F54324BCEFEE0007425A /* ShareClientExtension.swift */, + DDCF979324C0D380002C9752 /* UIViewExtension.swift */, + ); + path = Extensions; + sourceTree = ""; + }; FC16A97624995FEE003D6245 /* Application */ = { isa = PBXGroup; children = ( @@ -364,6 +389,7 @@ FC16A9782499657E003D6245 /* Controllers */ = { isa = PBXGroup; children = ( + DDCF979D24C2382A002C9752 /* AppStateController.swift */, FC7CE589248ABEA3001F83B8 /* AlarmSound.swift */, FC16A97924996673003D6245 /* NightScout.swift */, FC16A97C24996747003D6245 /* Alarms.swift */, @@ -513,6 +539,7 @@ FC8DEEE62485D1ED0075863F /* Info.plist */, FC7CE59A248D334B001F83B8 /* Resources */, FCC68871248A736700A0279D /* ViewControllers */, + DD98F54224BCEF190007425A /* Extensions */, FC16A9782499657E003D6245 /* Controllers */, FCC688542489367300A0279D /* helpers */, FCC68872248A748A00A0279D /* Models */, @@ -578,6 +605,11 @@ FCFEECA1248857A600402A7F /* SettingsViewController.swift */, FCC6884F248935D800A0279D /* AlarmViewController.swift */, FC7CE59E248D8D23001F83B8 /* SnoozeViewController.swift */, + DD152D3A24C01B2300361FA2 /* InfoDisplaySettingsViewController.swift */, + DDCF979524C1443C002C9752 /* GeneralSettingsViewController.swift */, + DDCF979724C1489C002C9752 /* GraphSettingsViewController.swift */, + DDCF979924C14DB4002C9752 /* WatchSettingsViewController.swift */, + DDCF979B24C14EFB002C9752 /* DebugSettingsViewController.swift */, ); path = ViewControllers; sourceTree = ""; @@ -824,7 +856,9 @@ FCC68850248935D800A0279D /* AlarmViewController.swift in Sources */, FC7CE59F248D8D23001F83B8 /* SnoozeViewController.swift in Sources */, FCC6886724898F8000A0279D /* UserDefaultsValue.swift in Sources */, + DDCF979E24C2382A002C9752 /* AppStateController.swift in Sources */, FC97881E2485969B00A7906C /* NightScoutViewController.swift in Sources */, + DDCF979824C1489C002C9752 /* GraphSettingsViewController.swift in Sources */, FC3AE7B5249E8E0E00AAE1E0 /* LoopFollow.xcdatamodeld in Sources */, FCC6886F2489A53800A0279D /* AppConstants.swift in Sources */, FC16A97A24996673003D6245 /* NightScout.swift in Sources */, @@ -833,20 +867,26 @@ FC16A97B249966A3003D6245 /* AlarmSound.swift in Sources */, FCFEECA2248857A600402A7F /* SettingsViewController.swift in Sources */, FCFEECA02488157B00402A7F /* Chart.swift in Sources */, + DDCF979424C0D380002C9752 /* UIViewExtension.swift in Sources */, FCEF87AC24A141A700AE6FA0 /* bgUnits.swift in Sources */, FC1BDD3224A2585C001B652C /* DataStructs.swift in Sources */, FCC6886524898EEE00A0279D /* UserDefaults.swift in Sources */, FC16A97F249969E2003D6245 /* Graphs.swift in Sources */, + DD152D3B24C01B2300361FA2 /* InfoDisplaySettingsViewController.swift in Sources */, + DDCF979C24C14EFB002C9752 /* DebugSettingsViewController.swift in Sources */, FC97881C2485969B00A7906C /* MainViewController.swift in Sources */, + DDCF979624C1443C002C9752 /* GeneralSettingsViewController.swift in Sources */, FCC0FAC224922A22003E610E /* DictionaryKeyPath.swift in Sources */, FC9788182485969B00A7906C /* AppDelegate.swift in Sources */, FCC6886B24898FD800A0279D /* ObservationToken.swift in Sources */, + DD98F54424BCEFEE0007425A /* ShareClientExtension.swift in Sources */, FCC6886D2489909D00A0279D /* AnyConvertible.swift in Sources */, FC97881A2485969B00A7906C /* SceneDelegate.swift in Sources */, FCD49B6C24AA536E007879DC /* DebugViewController.swift in Sources */, FC1BDD2B24A22650001B652C /* Stats.swift in Sources */, FC1BDD2D24A23204001B652C /* StatsView.swift in Sources */, FCE537BC249A4D7D00F80BF8 /* carbBolusArrays.swift in Sources */, + DDCF979A24C14DB4002C9752 /* WatchSettingsViewController.swift in Sources */, FC16A98124996C07003D6245 /* DateTime.swift in Sources */, FC3CAB022493B6220068A152 /* BackgroundTaskAudio.swift in Sources */, ); diff --git a/LoopFollow.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist b/LoopFollow.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist index 8a869d109..cd47f354e 100644 --- a/LoopFollow.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/LoopFollow.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ LoopFollow.xcscheme_^#shared#^_ orderHint - 3 + 4 diff --git a/LoopFollow/Application/AppDelegate.swift b/LoopFollow/Application/AppDelegate.swift index 97dece083..727ebfd20 100644 --- a/LoopFollow/Application/AppDelegate.swift +++ b/LoopFollow/Application/AppDelegate.swift @@ -16,7 +16,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? let notificationCenter = UNUserNotificationCenter.current() - + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. @@ -30,12 +30,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } let store = EKEventStore() store.requestAccess(to: .event) {(granted, error) in - if !granted { return } - } - - return true - } - + if !granted { return } + } + + return true + } + + func applicationWillTerminate(_ application: UIApplication) { if UserDefaultsRepository.alertAppInactive.value { AlarmSound.setSoundFile(str: "Alarm_Buzzer") diff --git a/LoopFollow/Application/Base.lproj/Main.storyboard b/LoopFollow/Application/Base.lproj/Main.storyboard index 1cbee5750..ed60c02d7 100644 --- a/LoopFollow/Application/Base.lproj/Main.storyboard +++ b/LoopFollow/Application/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -17,19 +17,25 @@ - + - + + - + - + - - + @@ -106,7 +112,7 @@ - + @@ -139,7 +145,7 @@ - + - + - - + - - + + + + + @@ -273,12 +293,14 @@ - - + + + + diff --git a/LoopFollow/Application/SceneDelegate.swift b/LoopFollow/Application/SceneDelegate.swift index 0bf9c95d0..5dbf730a1 100644 --- a/LoopFollow/Application/SceneDelegate.swift +++ b/LoopFollow/Application/SceneDelegate.swift @@ -12,12 +12,43 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? - + let appStateController = AppStateController() + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). guard let _ = (scene as? UIWindowScene) else { return } + + // get the tabBar + guard let tabBarController = window?.rootViewController as? UITabBarController, + let viewControllers = tabBarController.viewControllers + else { + return + } + + // set the main controllers' connection to the app sate + // other controllers that need to know app state are setup programatically + for i in 0..= Double(UserDefaultsRepository.alertNotLooping.value * 60)) - && UserDefaultsRepository.alertLastLoopTime.value > 0 { - - var trigger = true - if (UserDefaultsRepository.alertNotLoopingUseLimits.value - && ( - (Float(currentBG) >= UserDefaultsRepository.alertNotLoopingUpperLimit.value - && Float(currentBG) <= UserDefaultsRepository.alertNotLoopingLowerLimit.value) || - // Ignore Limits if BG reading is older than non looping time - (Double(now - currentBGTime) >= Double(UserDefaultsRepository.alertNotLooping.value * 60)) - ) || - !UserDefaultsRepository.alertNotLoopingUseLimits.value) { - AlarmSound.whichAlarm = "Not Looping Alert" - if UserDefaultsRepository.alertNotLoopingRepeat.value { numLoops = -1 } - triggerAlarm(sound: UserDefaultsRepository.alertNotLoopingSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) - return - } + + //check for missed reading alert + if UserDefaultsRepository.alertMissedReadingActive.value && !UserDefaultsRepository.alertMissedReadingIsSnoozed.value && (Double(now - currentBGTime) >= Double(UserDefaultsRepository.alertMissedReading.value * 60)) { + AlarmSound.whichAlarm = "Missed Reading Alert" + if UserDefaultsRepository.alertMissedReadingRepeat.value { numLoops = -1 } + triggerAlarm(sound: UserDefaultsRepository.alertMissedReadingSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) + return } - // check for missed bolus - Only checks within 1 hour of carb entry - // Only continue if alert is active, not snooozed, we have carb data, and bg is over the ignore limit - if UserDefaultsRepository.alertMissedBolusActive.value - && !UserDefaultsRepository.alertMissedBolusIsSnoozed.value - && carbData.count > 0 - && Float(currentBG) > UserDefaultsRepository.alertMissedBolusLowGramsBG.value { - - // Grab the latest carb entry - let lastCarb = carbData[carbData.count - 1].value - let lastCarbTime = carbData[carbData.count - 1].date - let now = dateTimeUtils.getNowTimeIntervalUTC() + + if UserDefaultsRepository.url.value != "" { - //Make sure carb entry is newer than 1 hour, has reached the time length, and is over the ignore limit - if lastCarbTime > (now - (60 * 60)) - && lastCarbTime < (now - Double((UserDefaultsRepository.alertMissedBolus.value * 60))) - && lastCarb > Double(UserDefaultsRepository.alertMissedBolusLowGrams.value) { + if UserDefaultsRepository.alertNotLoopingActive.value + && !UserDefaultsRepository.alertNotLoopingIsSnoozed.value + && (Double(dateTimeUtils.getNowTimeIntervalUTC() - UserDefaultsRepository.alertLastLoopTime.value) >= Double(UserDefaultsRepository.alertNotLooping.value * 60)) + && UserDefaultsRepository.alertLastLoopTime.value > 0 { - // There is a current carb but no boluses data at all - if bolusData.count < 1 { - AlarmSound.whichAlarm = "Missed Bolus Alert" - if UserDefaultsRepository.alertMissedBolusRepeat.value { numLoops = -1 } - triggerAlarm(sound: UserDefaultsRepository.alertMissedBolusSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) + var trigger = true + if (UserDefaultsRepository.alertNotLoopingUseLimits.value + && ( + (Float(currentBG) >= UserDefaultsRepository.alertNotLoopingUpperLimit.value + && Float(currentBG) <= UserDefaultsRepository.alertNotLoopingLowerLimit.value) || + // Ignore Limits if BG reading is older than non looping time + (Double(now - currentBGTime) >= Double(UserDefaultsRepository.alertNotLooping.value * 60)) + ) || + !UserDefaultsRepository.alertNotLoopingUseLimits.value) { + AlarmSound.whichAlarm = "Not Looping Alert" + if UserDefaultsRepository.alertNotLoopingRepeat.value { numLoops = -1 } + triggerAlarm(sound: UserDefaultsRepository.alertNotLoopingSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) return } + } + + // check for missed bolus - Only checks within 1 hour of carb entry + // Only continue if alert is active, not snooozed, we have carb data, and bg is over the ignore limit + if UserDefaultsRepository.alertMissedBolusActive.value + && !UserDefaultsRepository.alertMissedBolusIsSnoozed.value + && carbData.count > 0 + && Float(currentBG) > UserDefaultsRepository.alertMissedBolusLowGramsBG.value { - // Get the latest bolus over the small bolus exclusion - // Start with 0.0 bolus assuming there isn't one to cause a trigger and only add one if found - var lastBolus = 0.0 - var lastBolusTime = 0.0 - var i = 1 - // check the boluses in reverse order setting it only if the time is after the carb time minus prebolus time. - // This will make the loop stop at the most recent bolus that is over the minimum value or continue through all boluses - while lastBolus < UserDefaultsRepository.alertMissedBolusIgnoreBolus.value && i <= bolusData.count { - // Set the bolus if it's after the carb time minus prebolus time - if (bolusData[bolusData.count - i].date >= lastCarbTime - Double(UserDefaultsRepository.alertMissedBolusPrebolus.value * 60)) { - lastBolus = bolusData[bolusData.count - i].value - lastBolusTime = bolusData[bolusData.count - i].date + // Grab the latest carb entry + let lastCarb = carbData[carbData.count - 1].value + let lastCarbTime = carbData[carbData.count - 1].date + let now = dateTimeUtils.getNowTimeIntervalUTC() + + //Make sure carb entry is newer than 1 hour, has reached the time length, and is over the ignore limit + if lastCarbTime > (now - (60 * 60)) + && lastCarbTime < (now - Double((UserDefaultsRepository.alertMissedBolus.value * 60))) + && lastCarb > Double(UserDefaultsRepository.alertMissedBolusLowGrams.value) { + + // There is a current carb but no boluses data at all + if bolusData.count < 1 { + AlarmSound.whichAlarm = "Missed Bolus Alert" + if UserDefaultsRepository.alertMissedBolusRepeat.value { numLoops = -1 } + triggerAlarm(sound: UserDefaultsRepository.alertMissedBolusSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) + return + } + + // Get the latest bolus over the small bolus exclusion + // Start with 0.0 bolus assuming there isn't one to cause a trigger and only add one if found + var lastBolus = 0.0 + var lastBolusTime = 0.0 + var i = 1 + // check the boluses in reverse order setting it only if the time is after the carb time minus prebolus time. + // This will make the loop stop at the most recent bolus that is over the minimum value or continue through all boluses + while lastBolus < UserDefaultsRepository.alertMissedBolusIgnoreBolus.value && i <= bolusData.count { + // Set the bolus if it's after the carb time minus prebolus time + if (bolusData[bolusData.count - i].date >= lastCarbTime - Double(UserDefaultsRepository.alertMissedBolusPrebolus.value * 60)) { + lastBolus = bolusData[bolusData.count - i].value + lastBolusTime = bolusData[bolusData.count - i].date + } + i += 1 + } + + // This will trigger is no boluses were set above + if (lastBolus == 0.0) { + AlarmSound.whichAlarm = "Missed Bolus Alert" + if UserDefaultsRepository.alertMissedBolusRepeat.value { numLoops = -1 } + triggerAlarm(sound: UserDefaultsRepository.alertMissedBolusSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) + return } - i += 1 + } - // This will trigger is no boluses were set above - if (lastBolus == 0.0) { - AlarmSound.whichAlarm = "Missed Bolus Alert" - if UserDefaultsRepository.alertMissedBolusRepeat.value { numLoops = -1 } - triggerAlarm(sound: UserDefaultsRepository.alertMissedBolusSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) + } + + // Check Sage + if UserDefaultsRepository.alertSAGEActive.value && !UserDefaultsRepository.alertSAGEIsSnoozed.value { + let insertTime = Double(UserDefaultsRepository.alertSageInsertTime.value) + let alertDistance = Double(UserDefaultsRepository.alertSAGE.value * 60 * 60) + let delta = now - insertTime + let tenDays = 10 * 24 * 60 * 60 + if Double(tenDays) - Double(delta) <= alertDistance { + AlarmSound.whichAlarm = "Sensor Change Alert" + if UserDefaultsRepository.alertSAGERepeat.value { numLoops = -1 } + triggerAlarm(sound: UserDefaultsRepository.alertSAGESound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) return } - } + // Check Cage + if UserDefaultsRepository.alertCAGEActive.value && !UserDefaultsRepository.alertCAGEIsSnoozed.value { + let insertTime = Double(UserDefaultsRepository.alertCageInsertTime.value) + let alertDistance = Double(UserDefaultsRepository.alertCAGE.value * 60 * 60) + let delta = now - insertTime + let tenDays = 3 * 24 * 60 * 60 + if Double(tenDays) - Double(delta) <= alertDistance { + AlarmSound.whichAlarm = "Pump Change Alert" + if UserDefaultsRepository.alertCAGERepeat.value { numLoops = -1 } + triggerAlarm(sound: UserDefaultsRepository.alertCAGESound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) + return + } + } } - //check for missed reading alert - if UserDefaultsRepository.alertMissedReadingActive.value && !UserDefaultsRepository.alertMissedReadingIsSnoozed.value && (Double(now - currentBGTime) >= Double(UserDefaultsRepository.alertMissedReading.value * 60)) { - AlarmSound.whichAlarm = "Missed Reading Alert" - if UserDefaultsRepository.alertMissedReadingRepeat.value { numLoops = -1 } - triggerAlarm(sound: UserDefaultsRepository.alertMissedReadingSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) - return - } - // Check Sage - if UserDefaultsRepository.alertSAGEActive.value && !UserDefaultsRepository.alertSAGEIsSnoozed.value { - let insertTime = Double(UserDefaultsRepository.alertSageInsertTime.value) - let alertDistance = Double(UserDefaultsRepository.alertSAGE.value * 60 * 60) - let delta = now - insertTime - let tenDays = 10 * 24 * 60 * 60 - if Double(tenDays) - Double(delta) <= alertDistance { - AlarmSound.whichAlarm = "Sensor Change Alert" - if UserDefaultsRepository.alertSAGERepeat.value { numLoops = -1 } - triggerAlarm(sound: UserDefaultsRepository.alertSAGESound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) - return - } - } - // Check Cage - if UserDefaultsRepository.alertCAGEActive.value && !UserDefaultsRepository.alertCAGEIsSnoozed.value { - let insertTime = Double(UserDefaultsRepository.alertCageInsertTime.value) - let alertDistance = Double(UserDefaultsRepository.alertCAGE.value * 60 * 60) - let delta = now - insertTime - let tenDays = 3 * 24 * 60 * 60 - if Double(tenDays) - Double(delta) <= alertDistance { - AlarmSound.whichAlarm = "Pump Change Alert" - if UserDefaultsRepository.alertCAGERepeat.value { numLoops = -1 } - triggerAlarm(sound: UserDefaultsRepository.alertCAGESound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops) - return - } - } // still send persistent notification if no alarms trigger and persistent notification is on persistentNotification(bgTime: currentBGTime) diff --git a/LoopFollow/Controllers/AppStateController.swift b/LoopFollow/Controllers/AppStateController.swift new file mode 100644 index 000000000..eaa8f5246 --- /dev/null +++ b/LoopFollow/Controllers/AppStateController.swift @@ -0,0 +1,61 @@ +// +// AppStateController.swift +// LoopFollow +// +// Created by Jose Paredes on 7/17/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation + +// App Sate used used to changes to the app view controllers (Settings, for example) +// Recommended way of utilizing is when viewVillAppear(..) is called, +// look in the app state to see if further action must be t + +// Setup App States to comminicate between views + +// Graph Setup Flags +enum ChartSettingsChangeEnum: Int { + case chartScaleXChanged = 1 + case showDotsChanged = 2 + case showLinesChanged = 4 + case offsetCarbsBolusChanged = 8 + case hoursToLoadChanged = 16 + case predictionToLoadChanged = 32 + case minBasalScaleChanged = 64 + case minBGScaleChanged = 128 + case minBGValueChanged = 256 + case overrideDisplayLocationChanged = 512 + case lowLineChanged = 1024 + case highLineChanged = 2048 +} + +// General Settings Flags +enum GeneralSettingsChangeEnum: Int { + case colorBGTextChange = 1 + case speakBGChange = 2 + case backgroundRefreshFrequencyChange = 4 + case backgroundRefreshChange = 8 + case appBadgeChange = 16 + case dimScreenWhenIdleChange = 32 + case forceDarkModeChang = 64 + case persistentNotificationChange = 128 + case persistentNotificationLastBGTimeChange = 256 + case screenlockSwitchStateChange = 512 +} + +class AppStateController { + + // add app states & methods here + + // General Settings States + var generalSettingsChanged : Bool = false + var generalSettingsChanges : Int = 0 + + // Chart Settings State + var chartSettingsChanged : Bool = false // settings change has ocurred + var chartSettingsChanges: Int = 0 // what settings have changed + + // Info Data Settings State; no need for flags + var infoDataSettingsChanged: Bool = false +} diff --git a/LoopFollow/Controllers/Graphs.swift b/LoopFollow/Controllers/Graphs.swift index 5434e0155..a3ccf97d7 100644 --- a/LoopFollow/Controllers/Graphs.swift +++ b/LoopFollow/Controllers/Graphs.swift @@ -10,10 +10,9 @@ import Foundation import Charts import UIKit - +let ScaleXMax:Float = 150.0 extension MainViewController { - func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { if chartView == BGChartFull { BGChart.moveViewToX(entry.x) @@ -27,9 +26,22 @@ extension MainViewController { //BGChartFull.highlightValue(x: Double(currentMatrix.tx), y: Double(currentMatrix.ty), dataSetIndex: 0) } } + + func chartScaled(_ chartView: ChartViewBase, scaleX: CGFloat, scaleY: CGFloat) { + print("Chart Scaled: \(BGChart.scaleX), \(BGChart.scaleY)") + + // dont store huge values + var scale: Float = Float(BGChart.scaleX) + if(scale > ScaleXMax ) { + scale = ScaleXMax + } + UserDefaultsRepository.chartScaleX.value = Float(scale) + } + func createGraph(){ self.BGChart.clear() + // Create the BG Graph Data let entries = bgData var bgChartEntry = [ChartDataEntry]() @@ -211,11 +223,10 @@ extension MainViewController { BGChart.scaleYEnabled = false BGChart.drawGridBackgroundEnabled = false //BGChart.gridBackgroundColor = NSUIColor.secondarySystemBackground + BGChart.data = data BGChart.setExtraOffsets(left: 10, top: 10, right: 10, bottom: 10) - BGChart.setVisibleXRangeMinimum(10) - } @@ -255,7 +266,7 @@ extension MainViewController { ul.limit = Double(UserDefaultsRepository.highLine.value) ul.lineColor = NSUIColor.systemYellow.withAlphaComponent(0.5) BGChart.rightAxis.addLimitLine(ul) - + BGChart.data?.dataSets[dataIndex].notifyDataSetChanged() BGChart.data?.notifyDataChanged() BGChart.notifyDataSetChanged() @@ -293,7 +304,6 @@ extension MainViewController { } - // Set Colors let lineBG = BGChart.lineData!.dataSets[dataIndex] as! LineChartDataSet @@ -314,8 +324,7 @@ extension MainViewController { } BGChart.rightAxis.axisMaximum = Double(maxBG) - - + BGChart.setVisibleXRangeMinimum(600) BGChart.data?.dataSets[dataIndex].notifyDataSetChanged() BGChart.data?.notifyDataChanged() BGChart.notifyDataSetChanged() @@ -324,7 +333,13 @@ extension MainViewController { BGChartFull.notifyDataSetChanged() if firstGraphLoad { - BGChart.zoom(scaleX: 18, scaleY: 1, x: 1, y: 1) + var scaleX = CGFloat(UserDefaultsRepository.chartScaleX.value) + print("Scale: \(scaleX)") + if( scaleX > CGFloat(ScaleXMax) ) { + scaleX = CGFloat(ScaleXMax) + UserDefaultsRepository.chartScaleX.value = ScaleXMax + } + BGChart.zoom(scaleX: scaleX, scaleY: 1, x: 1, y: 1) firstGraphLoad = false } if BGChart.chartXMax > dateTimeUtils.getNowTimeIntervalUTC() { diff --git a/LoopFollow/Controllers/NightScout.swift b/LoopFollow/Controllers/NightScout.swift index 3b37438b6..98988b480 100644 --- a/LoopFollow/Controllers/NightScout.swift +++ b/LoopFollow/Controllers/NightScout.swift @@ -11,13 +11,7 @@ import UIKit extension MainViewController { -// -// //NS BG Struct -// struct sgvData: Codable { -// var sgv: Int -// var date: TimeInterval -// var direction: String? -// } + //NS Cage Struct struct cageData: Codable { @@ -76,11 +70,19 @@ extension MainViewController { if forceLoad { needsLoaded = true} // Only update if we don't have a current reading or forced to load if needsLoaded { - self.clearLastInfoData() - webLoadNSDeviceStatus() - webLoadNSBGData(onlyPullLastRecord: onlyPullLastRecord) - if !staleData { + if UserDefaultsRepository.url.value != "" { + webLoadNSDeviceStatus() + } + + if UserDefaultsRepository.shareUserName.value != "" && UserDefaultsRepository.sharePassword.value != "" { + webLoadDexShare(onlyPullLastRecord: onlyPullLastRecord) + } else { + webLoadNSBGData(onlyPullLastRecord: onlyPullLastRecord) + } + + + if !staleData && UserDefaultsRepository.url.value != "" { webLoadNSProfile() if UserDefaultsRepository.downloadBasal.value { WebLoadNSTempBasals() @@ -94,27 +96,53 @@ extension MainViewController { webLoadNSCage() webLoadNSSage() } - - + // Give the alarms and calendar 15 seconds delay to allow time for data to compile -// if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Start view timer") } self.startViewTimer(time: viewTimeInterval) } else { - // Things to do if we already have data and don't need a network call - // Leaving all downloads off for right now. - /* - webLoadNSDeviceStatus() - - if UserDefaultsRepository.downloadBolus.value { - webLoadNSBoluses() - } - if UserDefaultsRepository.downloadCarbs.value { - webLoadNSCarbs() - }*/ + if bgData.count > 0 { self.checkAlarms(bgs: bgData) } + if UserDefaultsRepository.url.value != "" { + if latestLoopTime == 0 { + webLoadNSDeviceStatus() + + webLoadNSBGData(onlyPullLastRecord: onlyPullLastRecord) + + webLoadNSProfile() + if UserDefaultsRepository.downloadBasal.value { + WebLoadNSTempBasals() + } + if UserDefaultsRepository.downloadBolus.value { + webLoadNSBoluses() + } + if UserDefaultsRepository.downloadCarbs.value { + webLoadNSCarbs() + } + webLoadNSCage() + webLoadNSSage() + } + } + + } + } + + // Dex Share Web Call + func webLoadDexShare(onlyPullLastRecord: Bool = false) { + var count = 288 + if onlyPullLastRecord { count = 1 } + dexShare?.fetchData(count) { (err, result) -> () in + + // TODO: add error checking + if(err == nil) { + var data = result! + self.ProcessNSBGData(data: data, onlyPullLastRecord: onlyPullLastRecord) + } else { + // If we get an error, immediately try to pull NS BG Data + self.webLoadNSBGData(onlyPullLastRecord: onlyPullLastRecord) + } } } @@ -154,11 +182,11 @@ extension MainViewController { } let decoder = JSONDecoder() - let entriesResponse = try? decoder.decode([DataStructs.sgvData].self, from: data) + let entriesResponse = try? decoder.decode([ShareGlucoseData].self, from: data) if let entriesResponse = entriesResponse { DispatchQueue.main.async { // trigger the processor for the data after downloading. - self.ProcessNSBGData(data: entriesResponse, onlyPullLastRecord: onlyPullLastRecord) + self.ProcessNSBGData(data: entriesResponse, onlyPullLastRecord: onlyPullLastRecord, isNS: true) } } else { @@ -170,11 +198,26 @@ extension MainViewController { } // NS BG Data Response processor - func ProcessNSBGData(data: [DataStructs.sgvData], onlyPullLastRecord: Bool){ + func ProcessNSBGData(data: [ShareGlucoseData], onlyPullLastRecord: Bool, isNS: Bool = false){ if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Process: BG") } - var pullDate = data[data.count - 1].date / 1000 - pullDate.round(FloatingPointRoundingRule.toNearestOrEven) + var pullDate = data[data.count - 1].date + if isNS { + pullDate = data[data.count - 1].date / 1000 + pullDate.round(FloatingPointRoundingRule.toNearestOrEven) + } + + var latestDate = data[0].date + if isNS { + latestDate = data[0].date / 1000 + latestDate.round(FloatingPointRoundingRule.toNearestOrEven) + } + + let now = dateTimeUtils.getNowTimeIntervalUTC() + if !isNS && (latestDate + 330) < now { + webLoadNSBGData(onlyPullLastRecord: onlyPullLastRecord) + return + } // If we already have data, we're going to pop it to the end and remove the first. If we have old or no data, we'll destroy the whole array and start over. This is simpler than determining how far back we need to get new data from in case Dex back-filled readings if !onlyPullLastRecord { @@ -195,73 +238,86 @@ extension MainViewController { // loop through the data so we can reverse the order to oldest first for the graph and convert the NS timestamp to seconds instead of milliseconds. Makes date comparisons easier for everything else. for i in 0..= dateTimeUtils.getTimeInterval24HoursAgo() { - let reading = DataStructs.sgvData(sgv: data[data.count - 1 - i].sgv, date: dateString, direction: data[data.count - 1 - i].direction) + let reading = ShareGlucoseData(sgv: data[data.count - 1 - i].sgv, date: dateString, direction: data[data.count - 1 - i].direction) bgData.append(reading) } } - viewUpdateNSBG() + viewUpdateNSBG(isNS: isNS) } // NS BG Data Front end updater - func viewUpdateNSBG () { - if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Display: BG") } - guard let snoozer = self.tabBarController!.viewControllers?[2] as? SnoozeViewController else { return } - let entries = bgData - if entries.count > 0 { - let latestEntryi = entries.count - 1 - let latestBG = entries[latestEntryi].sgv - let priorBG = entries[latestEntryi - 1].sgv - let deltaBG = latestBG - priorBG as Int - let lastBGTime = entries[latestEntryi].date - let deltaTime = (TimeInterval(Date().timeIntervalSince1970)-lastBGTime) / 60 - var userUnit = " mg/dL" - if mmol { - userUnit = " mmol/L" - } - - BGText.text = bgUnits.toDisplayUnits(String(latestBG)) - snoozer.BGLabel.text = bgUnits.toDisplayUnits(String(latestBG)) - setBGTextColor() - - if let directionBG = entries[latestEntryi].direction { - DirectionText.text = bgDirectionGraphic(directionBG) - snoozer.DirectionLabel.text = bgDirectionGraphic(directionBG) - latestDirectionString = bgDirectionGraphic(directionBG) - } - else - { - DirectionText.text = "" - snoozer.DirectionLabel.text = "" - latestDirectionString = "" - } - - if deltaBG < 0 { - self.DeltaText.text = bgUnits.toDisplayUnits(String(deltaBG)) - snoozer.DeltaLabel.text = bgUnits.toDisplayUnits(String(deltaBG)) - latestDeltaString = String(deltaBG) + func viewUpdateNSBG (isNS: Bool) { + DispatchQueue.main.async { + if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Display: BG") } + guard let snoozer = self.tabBarController!.viewControllers?[2] as? SnoozeViewController else { return } + let entries = self.bgData + if entries.count > 0 { + let latestEntryi = entries.count - 1 + let latestBG = entries[latestEntryi].sgv + let priorBG = entries[latestEntryi - 1].sgv + let deltaBG = latestBG - priorBG as Int + let lastBGTime = entries[latestEntryi].date + let deltaTime = (TimeInterval(Date().timeIntervalSince1970)-lastBGTime) / 60 + var userUnit = " mg/dL" + if self.mmol { + userUnit = " mmol/L" + } + + // TODO: remove testing feature to color code arrow based on NS vs Dex + if isNS { + self.serverText.text = "Nightscout" + } else { + self.serverText.text = "Dexcom" + } + + self.BGText.text = bgUnits.toDisplayUnits(String(latestBG)) + snoozer.BGLabel.text = bgUnits.toDisplayUnits(String(latestBG)) + self.setBGTextColor() + + if let directionBG = entries[latestEntryi].direction { + self.DirectionText.text = self.bgDirectionGraphic(directionBG) + snoozer.DirectionLabel.text = self.bgDirectionGraphic(directionBG) + self.latestDirectionString = self.bgDirectionGraphic(directionBG) + } + else + { + self.DirectionText.text = "" + snoozer.DirectionLabel.text = "" + self.latestDirectionString = "" + } + + if deltaBG < 0 { + self.DeltaText.text = bgUnits.toDisplayUnits(String(deltaBG)) + snoozer.DeltaLabel.text = bgUnits.toDisplayUnits(String(deltaBG)) + self.latestDeltaString = String(deltaBG) + } + else + { + self.DeltaText.text = "+" + bgUnits.toDisplayUnits(String(deltaBG)) + snoozer.DeltaLabel.text = "+" + bgUnits.toDisplayUnits(String(deltaBG)) + self.latestDeltaString = "+" + String(deltaBG) + } + self.updateBadge(val: latestBG) + } else { - self.DeltaText.text = "+" + bgUnits.toDisplayUnits(String(deltaBG)) - snoozer.DeltaLabel.text = "+" + bgUnits.toDisplayUnits(String(deltaBG)) - latestDeltaString = "+" + String(deltaBG) + + return } - self.updateBadge(val: latestBG) - + self.updateBGGraph() + self.updateMinAgo() + self.updateStats() } - else - { - - return - } - updateBGGraph() - updateMinAgo() - updateStats() + } // NS Device Status Web Call @@ -308,6 +364,11 @@ extension MainViewController { // NS Device Status Response Processor func updateDeviceStatusDisplay(jsonDeviceStatus: [[String:AnyObject]]) { + self.clearLastInfoData(index: 0) + self.clearLastInfoData(index: 1) + self.clearLastInfoData(index: 3) + self.clearLastInfoData(index: 4) + self.clearLastInfoData(index: 5) if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Process: device status") } if jsonDeviceStatus.count == 0 { return @@ -339,6 +400,7 @@ extension MainViewController { // Loop if let lastLoopRecord = lastDeviceStatus?["loop"] as! [String : AnyObject]? { + print("Loop: \(lastLoopRecord)") if let lastLoopTime = formatter.date(from: (lastLoopRecord["timestamp"] as! String))?.timeIntervalSince1970 { UserDefaultsRepository.alertLastLoopTime.value = lastLoopTime if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "lastLoopTime: " + String(lastLoopTime)) } @@ -352,7 +414,7 @@ extension MainViewController { if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Loop: Was Enacted") } wasEnacted = true if let lastTempBasal = enacted["rate"] as? Double { - // tableData[2].value = String(format:"%.1f", lastTempBasal) + } } if let iobdata = lastLoopRecord["iob"] as? [String:AnyObject] { @@ -374,7 +436,7 @@ extension MainViewController { var i = 1 while i <= toLoad { if i < prediction.count { - let prediction = DataStructs.sgvData(sgv: prediction[i], date: predictionTime, direction: "flat") + let prediction = ShareGlucoseData(sgv: prediction[i], date: predictionTime, direction: "flat") predictionData.append(prediction) predictionTime += 300 } @@ -385,6 +447,9 @@ extension MainViewController { updatePredictionGraph() } } + if let recBolus = lastLoopRecord["recommendedBolus"] as? Double { + tableData[8].value = String(format:"%.2fU", recBolus) + } if let loopStatus = lastLoopRecord["recommendedTempBasal"] as? [String:AnyObject] { if let tempBasalTime = formatter.date(from: (loopStatus["timestamp"] as! String))?.timeIntervalSince1970 { var lastBGTime = lastLoopTime @@ -521,6 +586,7 @@ extension MainViewController { // NS Cage Response Processor func updateCage(data: [cageData]) { + self.clearLastInfoData(index: 7) if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Process: CAGE") } if data.count == 0 { return @@ -590,6 +656,7 @@ extension MainViewController { // NS Sage Response Processor func updateSage(data: [cageData]) { + self.clearLastInfoData(index: 6) if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Process/Display: SAGE") } if data.count == 0 { return @@ -808,6 +875,7 @@ extension MainViewController { // NS Temp Basal Response Processor func updateBasals(entries: [[String:AnyObject]]) { + self.clearLastInfoData(index: 2) if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Process: Basal") } // due to temp basal durations, we're going to destroy the array and load everything each cycle for the time being. basalData.removeAll() @@ -952,9 +1020,11 @@ extension MainViewController { } tableData[2].value = latestBasal + infoTable.reloadData() if UserDefaultsRepository.graphBasal.value { updateBasalGraph() } + infoTable.reloadData() } // NS Bolus Web Call diff --git a/LoopFollow/Controllers/Stats.swift b/LoopFollow/Controllers/Stats.swift index 47bfe48a0..fa75e7d53 100644 --- a/LoopFollow/Controllers/Stats.swift +++ b/LoopFollow/Controllers/Stats.swift @@ -20,9 +20,10 @@ class StatsData { var totalGlucose: Int var avgBG: Float var a1C: Float + var stdDev: Float var pie: [DataStructs.pieData] - init(bgData: [DataStructs.sgvData]) { + init(bgData: [ShareGlucoseData]) { self.countLow = 0 self.countRange = 0 @@ -54,8 +55,6 @@ class StatsData { DataStructs.pieData(name: "range", value: Double(percentRange)), DataStructs.pieData(name: "high", value: Double(percentHigh))] - - // Set Average avgBG = Float(totalGlucose / bgData.count) @@ -67,6 +66,13 @@ class StatsData { // https://github.com/nightscout/nightguard/pull/72 // a1C = (((46.7 + Float(avgBG)) / 28.7) - 2.152) / 0.09148 } + + // compute std dev (sigma) + var partialSum: Float = 0; + for i in 0.. 0 { - var stats = StatsData(bgData: bgData) + let stats = StatsData(bgData: bgData) statsLowPercent.text = String(format:"%.1f%", stats.percentLow) + "%" statsInRangePercent.text = String(format:"%.1f%", stats.percentRange) + "%" statsHighPercent.text = String(format:"%.1f%", stats.percentHigh) + "%" statsAvgBG.text = bgUnits.toDisplayUnits(String(format:"%.0f%", stats.avgBG)) statsEstA1C.text = String(format:"%.1f%", stats.a1C) + statsStdDev.text = String(format:"%.2f%", stats.stdDev) createStatsPie(pieData: stats.pie) } diff --git a/LoopFollow/Extensions/ShareClientExtension.swift b/LoopFollow/Extensions/ShareClientExtension.swift new file mode 100644 index 000000000..c39f7f731 --- /dev/null +++ b/LoopFollow/Extensions/ShareClientExtension.swift @@ -0,0 +1,60 @@ +// +// ShareClientExtension.swift +// LoopFollow +// +// Created by Jose Paredes on 7/13/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation +import ShareClient + +public struct ShareGlucoseData: Codable { + var sgv: Int + var date: TimeInterval + var direction: String? +} + +private var TrendTable: [String] = [ + "NONE", // 0 + "DoubleUp", // 1 + "SingleUp", // 2 + "FortyFiveUp", // 3 + "Flat", // 4 + "FortyFiveDown", // 5 + "SingleDown", // 6 + "DoubleDown", // 7 + "NOT COMPUTABLE", // 8 + "RATE OUT OF RANGE" // 9 +] + +// TODO: probably better to make this an inherited class rather than an extension +extension ShareClient { + + public func fetchData(_ entries: Int, callback: @escaping (ShareError?, [ShareGlucoseData]?) -> Void) { + + self.fetchLast(entries) { (error, result) -> () in + guard error == nil || result != nil else { + return callback(error, nil) + } + + // parse data to conanical form + var shareData = [ShareGlucoseData]() + for i in 0.. TrendTable.count-1) { + trend = 0 + } + + let newShareData = ShareGlucoseData( + sgv: Int(result![i].glucose), + date: result![i].timestamp.timeIntervalSince1970, + direction: TrendTable[trend] + ) + shareData.append(newShareData) + } + callback(nil,shareData) + } + } +} diff --git a/LoopFollow/Extensions/UIViewExtension.swift b/LoopFollow/Extensions/UIViewExtension.swift new file mode 100644 index 000000000..dc9472f7f --- /dev/null +++ b/LoopFollow/Extensions/UIViewExtension.swift @@ -0,0 +1,29 @@ +// +// UIViewExtension.swift +// LoopFollow +// +// Created by Jose Paredes on 7/16/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation +import UIKit + +extension UIView { + enum ViewSide { + case Left, Right, Top, Bottom + } + + func addBorder(toSide side: ViewSide, withColor color: CGColor, andThickness thickness: CGFloat) { + let border = CALayer() + border.backgroundColor = color + + switch side { + case .Left: border.frame = CGRect(x:0, y: 0, width: thickness, height: frame.height); break + case .Right: border.frame = CGRect(x: frame.width-thickness, y: 0, width: thickness, height: frame.height); break + case .Top: border.frame = CGRect(x: 0, y: 0, width: frame.width, height: thickness); break + case .Bottom: border.frame = CGRect(x: 0, y: frame.height-thickness, width: frame.width, height: thickness); break + } + layer.addSublayer(border) + } +} diff --git a/LoopFollow/ViewControllers/AlarmViewController.swift b/LoopFollow/ViewControllers/AlarmViewController.swift index fa67dbe24..36e703652 100644 --- a/LoopFollow/ViewControllers/AlarmViewController.swift +++ b/LoopFollow/ViewControllers/AlarmViewController.swift @@ -11,6 +11,7 @@ import UIKit import Eureka class AlarmViewController: FormViewController { + var appStateController: AppStateController? var soundFiles: [String] = [ "Alarm_Buzzer", @@ -144,6 +145,8 @@ class AlarmViewController: FormViewController { } } + + // static let shared = AlarmViewController() @IBAction func unwindToAlarms(sender: UIStoryboardSegue) @@ -196,6 +199,10 @@ class AlarmViewController: FormViewController { <<< SegmentedRow("otherAlerts"){ row in row.title = "" row.options = ["Not Looping", "Missed Bolus", "SAGE", "CAGE"] + if UserDefaultsRepository.url.value == "" { + row.hidden = true + } + //row.value = "Not Looping" }.onChange { [weak self] row in guard let value = row.value else { return } @@ -213,6 +220,9 @@ class AlarmViewController: FormViewController { <<< SegmentedRow("overrideAlerts"){ row in row.title = "" row.options = ["Override Start", "Override End"] + if UserDefaultsRepository.url.value == "" { + row.hidden = true + } //row.value = "Not Looping" }.onChange { [weak self] row in guard let value = row.value else { return } @@ -258,6 +268,42 @@ class AlarmViewController: FormViewController { buildAlarmSettings() } + + override func viewDidAppear(_ animated: Bool) { + showHideNSDetails() + } + + func showHideNSDetails() { + var isHidden = false + var isEnabled = true + if UserDefaultsRepository.url.value == "" { + isHidden = true + isEnabled = false + } + + if let row1 = form.rowBy(tag: "otherAlerts") as? SegmentedRow { + row1.hidden = .function(["hide"], {form in + return isHidden + }) + row1.evaluateHidden() + } + if let row2 = form.rowBy(tag: "overrideAlerts") as? SegmentedRow { + row2.hidden = .function(["hide"], {form in + return isHidden + }) + row2.evaluateHidden() + } + if let row3 = form.sectionBy(tag: "quietHourSection") as? Section { + row3.hidden = .function(["hide"], {form in + return isHidden + }) + row3.evaluateHidden() + } + + guard let nightscoutTab = self.tabBarController?.tabBar.items![3] else { return } + nightscoutTab.isEnabled = isEnabled + + } func buildSnoozeAll(){ form @@ -1907,7 +1953,7 @@ class AlarmViewController: FormViewController { func buildAlarmSettings() { form - +++ Section(header: "Alarm Sound Settings", footer: "Quiet hours can be used to automatically snooze non-critical alerts that you do not wish to be awakened for such as a sensor change pre-alert that may happen during the night.") + +++ Section(header: "Alarm Sound Settings", footer: "") <<< SwitchRow("overrideSystemOutputVolume"){ row in row.title = "Override System Volume" @@ -1931,9 +1977,14 @@ class AlarmViewController: FormViewController { guard let value = row.value else { return } UserDefaultsRepository.forcedOutputVolume.value = Float(value) } + + +++ Section(header: "Quiet Hour Settings", footer: "Quiet hours can be used to automatically snooze non-critical alerts that you do not wish to be awakened for such as a sensor change pre-alert that may happen during the night.") { row in + row.tag = "quietHourSection" + } <<< TimeInlineRow("quietHourStart") { row in row.title = "Quiet Hours Start Today" row.value = UserDefaultsRepository.quietHourStart.value + }.onChange { [weak self] row in guard let value = row.value else { return } UserDefaultsRepository.quietHourStart.value = value @@ -1941,6 +1992,7 @@ class AlarmViewController: FormViewController { <<< TimeInlineRow("quietHourEnd") { row in row.title = "Quiet Hours End Tomorrow" row.value = UserDefaultsRepository.quietHourEnd.value + }.onChange { [weak self] row in guard let value = row.value else { return } UserDefaultsRepository.quietHourEnd.value = value diff --git a/LoopFollow/ViewControllers/AppStateViewController.swift b/LoopFollow/ViewControllers/AppStateViewController.swift new file mode 100644 index 000000000..199bbdce5 --- /dev/null +++ b/LoopFollow/ViewControllers/AppStateViewController.swift @@ -0,0 +1,13 @@ +// +// AppStateViewController.swift +// LoopFollow +// +// Created by Jose Paredes on 7/17/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation + +class AppStateViewController { + var appStateController: AppStateController? +} diff --git a/LoopFollow/ViewControllers/DebugSettingsViewController.swift b/LoopFollow/ViewControllers/DebugSettingsViewController.swift new file mode 100644 index 000000000..5f296dde6 --- /dev/null +++ b/LoopFollow/ViewControllers/DebugSettingsViewController.swift @@ -0,0 +1,113 @@ +// +// DebugSettingsViewController.swift +// LoopFollow +// +// Created by Jose Paredes on 7/16/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation +import Eureka +import EventKit +import EventKitUI + +class DebugSettingsViewController: FormViewController { + + var appStateController: AppStateController? + + override func viewDidLoad() { + super.viewDidLoad() + if UserDefaultsRepository.forceDarkMode.value { + overrideUserInterfaceStyle = .dark + } + buildDebugSettings() + } + private func buildDebugSettings() { + form + +++ Section("Debug Settings") + + <<< SwitchRow("downloadBasal"){ row in + row.title = "Download Basal" + row.value = UserDefaultsRepository.downloadBasal.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.downloadBasal.value = value + } + <<< SwitchRow("graphBasal"){ row in + row.title = "Graph Basal" + row.value = UserDefaultsRepository.graphBasal.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.graphBasal.value = value + } + <<< SwitchRow("downloadBolus"){ row in + row.title = "Download Bolus" + row.value = UserDefaultsRepository.downloadBolus.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.downloadBolus.value = value + } + <<< SwitchRow("graphBolus"){ row in + row.title = "Graph Bolus" + row.value = UserDefaultsRepository.graphBolus.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.graphBolus.value = value + } + <<< SwitchRow("downloadCarbs"){ row in + row.title = "Download Carbs" + row.value = UserDefaultsRepository.downloadCarbs.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.downloadCarbs.value = value + } + <<< SwitchRow("graphCarbs"){ row in + row.title = "Graph Carbs" + row.value = UserDefaultsRepository.graphCarbs.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.graphCarbs.value = value + } + + <<< SwitchRow("downloadPrediction"){ row in + row.title = "Download Prediction" + row.value = UserDefaultsRepository.downloadPrediction.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.downloadPrediction.value = value + } + <<< SwitchRow("graphPrediction"){ row in + row.title = "Graph Prediction" + row.value = UserDefaultsRepository.graphPrediction.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.graphPrediction.value = value + } + <<< SwitchRow("debugLog"){ row in + row.title = "Show Debug Log" + row.value = UserDefaultsRepository.debugLog.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.debugLog.value = value + } + <<< StepperRow("viewRefreshDelay") { row in + row.title = "View Refresh Delay" + row.cell.stepper.stepValue = 1 + row.cell.stepper.minimumValue = 5 + row.cell.stepper.maximumValue = 30 + row.value = Double(UserDefaultsRepository.viewRefreshDelay.value) + row.displayValueFor = { value in + guard let value = value else { return nil } + return "\(Int(value))" + } + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.viewRefreshDelay.value = Double(value) + } + +++ ButtonRow() { + $0.title = "DONE" + }.onCellSelection { (row, arg) in + self.dismiss(animated:true, completion: nil) + } + } +} diff --git a/LoopFollow/ViewControllers/DebugViewController.swift b/LoopFollow/ViewControllers/DebugViewController.swift index 3298f985e..bcf21d5f8 100644 --- a/LoopFollow/ViewControllers/DebugViewController.swift +++ b/LoopFollow/ViewControllers/DebugViewController.swift @@ -14,6 +14,8 @@ class debugViewController: UIViewController { @IBOutlet weak var debugLogTextView: UITextView! @IBOutlet weak var clearButton: UIButton! + var appStateController: AppStateController? + override func viewDidLoad() { super.viewDidLoad() debugLogTextView.isEditable = false diff --git a/LoopFollow/ViewControllers/GeneralSettingsViewController.swift b/LoopFollow/ViewControllers/GeneralSettingsViewController.swift new file mode 100644 index 000000000..dc1da001c --- /dev/null +++ b/LoopFollow/ViewControllers/GeneralSettingsViewController.swift @@ -0,0 +1,126 @@ +// +// GeneralSetingsViewController.swift +// LoopFollow +// +// Created by Jose Paredes on 7/16/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation +import Eureka +import EventKit +import EventKitUI + +class GeneralSettingsViewController: FormViewController { + + var appStateController: AppStateController? + + override func viewDidLoad() { + super.viewDidLoad() + + if UserDefaultsRepository.forceDarkMode.value { + overrideUserInterfaceStyle = .dark + } + buildGeneralSettings() + } + + private func buildGeneralSettings() { + form + +++ Section("General Settings") + <<< SwitchRow("colorBGText") { row in + row.title = "Color Main BG Text" + row.value = UserDefaultsRepository.colorBGText.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.colorBGText.value = value + // Force main screen update + //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } + //mainScreen.setBGTextColor() + + // set the appstate to indicate settings change and flags + if let appState = self!.appStateController { + appState.generalSettingsChanged = true + appState.generalSettingsChanges |= GeneralSettingsChangeEnum.colorBGTextChange.rawValue + } + } + <<< SwitchRow("forceDarkMode") { row in + row.title = "Force Dark Mode (Restart App)" + row.value = UserDefaultsRepository.forceDarkMode.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.forceDarkMode.value = value + + } + <<< SwitchRow("persistentNotification") { row in + row.title = "Persistent Notification" + row.value = UserDefaultsRepository.persistentNotification.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.persistentNotification.value = value + } + <<< SwitchRow("screenlockSwitchState") { row in + row.title = "Keep Screen Active" + row.value = UserDefaultsRepository.screenlockSwitchState.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + + if value { + UserDefaultsRepository.screenlockSwitchState.value = value + } + } + + <<< SwitchRow("backgroundRefresh"){ row in + row.title = "Background Refresh" + row.tag = "backgroundRefresh" + row.value = UserDefaultsRepository.backgroundRefresh.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.backgroundRefresh.value = value + } + <<< StepperRow("backgroundRefreshFrequency") { row in + row.title = "Refresh Minutes" + row.tag = "backgroundRefreshFrequency" + row.cell.stepper.stepValue = 0.25 + row.cell.stepper.minimumValue = 0.25 + row.cell.stepper.maximumValue = 10 + row.value = Double(UserDefaultsRepository.backgroundRefreshFrequency.value) + row.hidden = "$backgroundRefresh == false" + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.backgroundRefreshFrequency.value = value + } + + <<< SwitchRow("appBadge"){ row in + row.title = "Display App Badge" + row.tag = "appBadge" + row.value = UserDefaultsRepository.appBadge.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.appBadge.value = value + // Force main screen update + //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } + //mainScreen.nightscoutLoader(forceLoad: true) + + // set the appstate to indicate settings change and flags + if let appState = self!.appStateController { + appState.generalSettingsChanged = true + appState.generalSettingsChanges |= GeneralSettingsChangeEnum.appBadgeChange.rawValue + } + + } + <<< SwitchRow("speakBG"){ row in + row.title = "Speak BG" + row.value = UserDefaultsRepository.speakBG.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.speakBG.value = value + } + + +++ ButtonRow() { + $0.title = "DONE" + }.onCellSelection { (row, arg) in + self.dismiss(animated:true, completion: nil) + } + } + +} diff --git a/LoopFollow/ViewControllers/GraphSettingsViewController.swift b/LoopFollow/ViewControllers/GraphSettingsViewController.swift new file mode 100644 index 000000000..f06cea5e8 --- /dev/null +++ b/LoopFollow/ViewControllers/GraphSettingsViewController.swift @@ -0,0 +1,197 @@ +// +// GraphSettingsViewController.swift +// LoopFollow +// +// Created by Jose Paredes on 7/16/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation +import Eureka +import EventKit +import EventKitUI + +class GraphSettingsViewController: FormViewController { + + var appStateController: AppStateController? + + override func viewDidLoad() { + super.viewDidLoad() + if UserDefaultsRepository.forceDarkMode.value { + overrideUserInterfaceStyle = .dark + } + + buildGraphSettings() + } + + private func buildGraphSettings() { + form + +++ Section("Graph Settings") + + <<< SwitchRow("switchRowDots"){ row in + row.title = "Display Dots" + row.value = UserDefaultsRepository.showDots.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.showDots.value = value + // Force main screen update + // guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } + // mainScreen.updateBGGraphSettings() + + // tell main screen that grap needs updating + if let appState = self!.appStateController { + appState.chartSettingsChanged = true + appState.chartSettingsChanges |= ChartSettingsChangeEnum.showDotsChanged.rawValue + } + } + <<< SwitchRow("switchRowLines"){ row in + row.title = "Display Lines" + row.value = UserDefaultsRepository.showLines.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.showLines.value = value + // Force main screen update + //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } + //mainScreen.updateBGGraphSettings() + + if let appState = self!.appStateController { + appState.chartSettingsChanged = true + appState.chartSettingsChanges |= ChartSettingsChangeEnum.showLinesChanged.rawValue + } + + } + <<< SwitchRow("offsetCarbsBolus"){ row in + row.title = "Offset Carb/Bolus Dots" + row.value = UserDefaultsRepository.offsetCarbsBolus.value + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.offsetCarbsBolus.value = value + + } + <<< StepperRow("predictionToLoad") { row in + row.title = "Hours of Prediction" + row.cell.stepper.stepValue = 0.25 + row.cell.stepper.minimumValue = 0.0 + row.cell.stepper.maximumValue = 6.0 + row.value = Double(UserDefaultsRepository.predictionToLoad.value) + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.predictionToLoad.value = value + } + <<< StepperRow("minBGScale") { row in + row.title = "Min BG Scale" + row.cell.stepper.stepValue = 1 + row.cell.stepper.minimumValue = Double(UserDefaultsRepository.highLine.value) + row.cell.stepper.maximumValue = 400 + row.value = Double(UserDefaultsRepository.minBGScale.value) + row.displayValueFor = { value in + guard let value = value else { return nil } + return bgUnits.toDisplayUnits(String(value)) + + } + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.minBGScale.value = Float(value) + + } + <<< StepperRow("minBGValue") { row in + row.title = "Min BG Display" + row.cell.stepper.stepValue = 1 + row.cell.stepper.minimumValue = -40 + row.cell.stepper.maximumValue = 40 + row.value = Double(UserDefaultsRepository.minBGValue.value) + row.displayValueFor = { value in + guard let value = value else { return nil } + return bgUnits.toDisplayUnits(String(value)) + } + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.minBGValue.value = Float(value) + // Force main screen update + //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } + //mainScreen.updateBGGraphSettings() + + if let appState = self!.appStateController { + appState.chartSettingsChanged = true + appState.chartSettingsChanges |= ChartSettingsChangeEnum.minBGValueChanged.rawValue + } + + } + <<< StepperRow("minBasalScale") { row in + row.title = "Min Basal Scale" + row.cell.stepper.stepValue = 0.5 + row.cell.stepper.minimumValue = 0.5 + row.cell.stepper.maximumValue = 20 + row.value = Double(UserDefaultsRepository.minBasalScale.value) + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.minBasalScale.value = value + } + <<< StepperRow("lowLine") { row in + row.title = "Low BG Display Value" + row.cell.stepper.stepValue = 1 + row.cell.stepper.minimumValue = 40 + row.cell.stepper.maximumValue = 120 + row.value = Double(UserDefaultsRepository.lowLine.value) + row.displayValueFor = { value in + guard let value = value else { return nil } + return bgUnits.toDisplayUnits(String(value)) + } + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.lowLine.value = Float(value) + // Force main screen update + //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } + //mainScreen.updateBGGraphSettings() + + // tell main screen to update + if let appState = self!.appStateController { + appState.chartSettingsChanged = true + appState.chartSettingsChanges |= ChartSettingsChangeEnum.lowLineChanged.rawValue + } + } + <<< StepperRow("highLine") { row in + row.title = "High BG Display Value" + row.cell.stepper.stepValue = 1 + row.cell.stepper.minimumValue = 120 + row.cell.stepper.maximumValue = 400 + row.value = Double(UserDefaultsRepository.highLine.value) + row.displayValueFor = { value in + guard let value = value else { return nil } + return bgUnits.toDisplayUnits(String(value)) + } + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.highLine.value = Float(value) + // Force main screen update + //guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } + //mainScreen.updateBGGraphSettings() + + // let app state know of the change + if let appState = self!.appStateController { + appState.chartSettingsChanged = true + appState.chartSettingsChanges |= ChartSettingsChangeEnum.highLineChanged.rawValue + } + } + <<< StepperRow("overrideDisplayLocation") { row in + row.title = "Override BG Location" + row.cell.stepper.stepValue = 1 + row.cell.stepper.minimumValue = Double(UserDefaultsRepository.minBGValue.value) + row.cell.stepper.maximumValue = Double(UserDefaultsRepository.minBGScale.value) + row.value = Double(UserDefaultsRepository.overrideDisplayLocation.value) + row.displayValueFor = { value in + guard let value = value else { return nil } + return bgUnits.toDisplayUnits(String(value)) + } + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.overrideDisplayLocation.value = Float(value) + } + + +++ ButtonRow() { + $0.title = "DONE" + }.onCellSelection { (row, arg) in + self.dismiss(animated:true, completion: nil) + } + } +} diff --git a/LoopFollow/ViewControllers/InfoDisplaySettingsViewController.swift b/LoopFollow/ViewControllers/InfoDisplaySettingsViewController.swift new file mode 100644 index 000000000..d6fc2cbc4 --- /dev/null +++ b/LoopFollow/ViewControllers/InfoDisplaySettingsViewController.swift @@ -0,0 +1,124 @@ +// +// InfoDisplaySettingsViewController.swift +// LoopFollow +// +// Created by Jose Paredes on 7/16/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import UIKit +import Eureka +import EventKit +import EventKitUI + +class InfoDisplaySettingsViewController: FormViewController { + var appStateController: AppStateController? + + var infoNames: [String] = [] + var infoSort: [Int] = [] + var infoVisible: [Bool] = [] + + override func viewDidLoad() { + print("Display Load") + super.viewDidLoad() + if UserDefaultsRepository.forceDarkMode.value { + overrideUserInterfaceStyle = .dark + } + + // get the info table + let userDefaults = UserDefaults.standard + + // names + self.infoNames = userDefaults.stringArray(forKey:InfoNames) ?? [String]() + if(self.infoNames.count == 0) { + self.infoNames = DefaultInfoNames + userDefaults.set(self.infoNames, forKey:InfoNames) + } + + // sort + self.infoSort = userDefaults.array(forKey:InfoSort) as? [Int] ?? [Int]() + if(self.infoSort.count != self.infoNames.count) { + self.infoSort = [] + for i in 0.. Int { - return tableData.count + //return tableData.count + return derivedTableData.count + } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "LabelCell", for: indexPath) - let values = tableData[indexPath.row] + let values = derivedTableData[indexPath.row] cell.textLabel?.text = values.name cell.detailTextLabel?.text = values.value return cell @@ -284,6 +407,10 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele } + @objc override func viewDidAppear(_ animated: Bool) { + showHideNSDetails() + } + // Check for new data when timer ends @objc func timerDidEnd(_ timer:Timer) { // if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Main timer ended") } @@ -310,10 +437,8 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele } //Clear the info data before next pull. This ensures we aren't displaying old data if something fails. - func clearLastInfoData(){ - for i in 0.. String { @@ -323,7 +448,21 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele return String(format: "%02d:%02d", hours, minutes) } - + func showHideNSDetails() { + var isHidden = false + var isEnabled = true + if UserDefaultsRepository.url.value == "" { + isHidden = true + isEnabled = false + } + + LoopStatusLabel.isHidden = isHidden + PredictionLabel.isHidden = isHidden + infoTable.isHidden = isHidden + guard let nightscoutTab = self.tabBarController?.tabBar.items![3] else { return } + nightscoutTab.isEnabled = isEnabled + + } func updateBadge(val: Int) { if UserDefaultsRepository.appBadge.value { diff --git a/LoopFollow/ViewControllers/NightScoutViewController.swift b/LoopFollow/ViewControllers/NightScoutViewController.swift index ed37e4a43..913932ea8 100644 --- a/LoopFollow/ViewControllers/NightScoutViewController.swift +++ b/LoopFollow/ViewControllers/NightScoutViewController.swift @@ -15,6 +15,7 @@ class NightscoutViewController: UIViewController { @IBOutlet weak var webView: WKWebView! + var appStateController: AppStateController? override func viewDidLoad() { super.viewDidLoad() diff --git a/LoopFollow/ViewControllers/SettingsViewController.swift b/LoopFollow/ViewControllers/SettingsViewController.swift index 8da99531d..9b1a79bac 100644 --- a/LoopFollow/ViewControllers/SettingsViewController.swift +++ b/LoopFollow/ViewControllers/SettingsViewController.swift @@ -13,20 +13,14 @@ import EventKitUI class SettingsViewController: FormViewController { - struct cal { - var title: String - var identifier: String - } - - - override func viewDidLoad() { + var appStateController: AppStateController? + + override func viewDidLoad() { super.viewDidLoad() if UserDefaultsRepository.forceDarkMode.value { overrideUserInterfaceStyle = .dark } - - - + form +++ Section(header: "Nightscout Settings", footer: "Changing Nightscout settings requires an app restart.") <<< TextRow(){ row in @@ -36,7 +30,9 @@ class SettingsViewController: FormViewController { }.cellSetup { (cell, row) in cell.textField.autocorrectionType = .no }.onChange { row in - guard let value = row.value else { return } + guard let value = row.value else { + UserDefaultsRepository.url.value = "" + return } // check the format of the URL entered by the user and trim away any spaces or "/" at the end var urlNSInput = value.replacingOccurrences(of: "\\s+$", with: "", options: .regularExpression) if urlNSInput.last == "/" { @@ -67,373 +63,99 @@ class SettingsViewController: FormViewController { guard let value = row.value else { return } UserDefaultsRepository.units.value = value } - - - buildGeneralSettings() - buildGraphSettings() - buildWatchSettings() - buildDebugSettings() - - - - - } - - func buildGeneralSettings() { - form - +++ Section("General Settings") - <<< SwitchRow("colorBGText") { row in - row.title = "Color Main BG Text" - row.value = UserDefaultsRepository.colorBGText.value - }.onChange { [weak self] row in + +++ Section("Dexcom Settings") + <<< TextRow(){ row in + row.title = "User Name" + row.value = UserDefaultsRepository.shareUserName.value + }.cellSetup { (cell, row) in + cell.textField.autocorrectionType = .no + }.onChange { row in + if row.value == nil { + UserDefaultsRepository.shareUserName.value = "" + } guard let value = row.value else { return } - UserDefaultsRepository.colorBGText.value = value - // Force main screen update - guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } - mainScreen.setBGTextColor() + UserDefaultsRepository.shareUserName.value = value } - <<< SwitchRow("forceDarkMode") { row in - row.title = "Force Dark Mode (Restart App)" - row.value = UserDefaultsRepository.forceDarkMode.value - }.onChange { [weak self] row in + <<< TextRow(){ row in + row.title = "Password" + row.value = UserDefaultsRepository.sharePassword.value + }.cellSetup { (cell, row) in + cell.textField.autocorrectionType = .no + cell.textField.isSecureTextEntry = true + }.onChange { row in + if row.value == nil { + UserDefaultsRepository.sharePassword.value = "" + } guard let value = row.value else { return } - UserDefaultsRepository.forceDarkMode.value = value + UserDefaultsRepository.sharePassword.value = value } - <<< SwitchRow("persistentNotification") { row in - row.title = "Persistent Notification" - row.value = UserDefaultsRepository.persistentNotification.value - }.onChange { [weak self] row in + <<< SegmentedRow("shareServer") { row in + row.title = "Server" + row.options = ["US", "NON-US"] + row.value = UserDefaultsRepository.shareServer.value + }.onChange { row in guard let value = row.value else { return } - UserDefaultsRepository.persistentNotification.value = value + UserDefaultsRepository.shareServer.value = value } - <<< SwitchRow("screenlockSwitchState") { row in - row.title = "Keep Screen Active" - row.value = UserDefaultsRepository.screenlockSwitchState.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - - if value { - UserDefaultsRepository.screenlockSwitchState.value = value - } - } - <<< SwitchRow("backgroundRefresh"){ row in - row.title = "Background Refresh" - row.tag = "backgroundRefresh" - row.value = UserDefaultsRepository.backgroundRefresh.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.backgroundRefresh.value = value - } - <<< StepperRow("backgroundRefreshFrequency") { row in - row.title = "Refresh Minutes" - row.tag = "backgroundRefreshFrequency" - row.cell.stepper.stepValue = 0.25 - row.cell.stepper.minimumValue = 0.25 - row.cell.stepper.maximumValue = 10 - row.value = Double(UserDefaultsRepository.backgroundRefreshFrequency.value) - row.hidden = "$backgroundRefresh == false" - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.backgroundRefreshFrequency.value = value - } - - <<< SwitchRow("appBadge"){ row in - row.title = "Display App Badge" - row.tag = "appBadge" - row.value = UserDefaultsRepository.appBadge.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.appBadge.value = value - // Force main screen update - guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } - mainScreen.nightscoutLoader(forceLoad: true) - } - <<< SwitchRow("speakBG"){ row in - row.title = "Speak BG" - row.value = UserDefaultsRepository.speakBG.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.speakBG.value = value - } - } - - - func buildGraphSettings() { - form - +++ Section("Graph Settings") + +++ Section("App Settings") + <<< ButtonRow() { + $0.title = "General Settings" + $0.presentationMode = .show( + controllerProvider: .callback(builder: { + let controller = GeneralSettingsViewController() + controller.appStateController = self.appStateController + return controller + } + ), onDismiss: nil) + } + <<< ButtonRow() { + $0.title = "Graph Settings" + $0.presentationMode = .show( + controllerProvider: .callback(builder: { + let controller = GraphSettingsViewController() + controller.appStateController = self.appStateController + return controller + } + ), onDismiss: nil) + } + <<< ButtonRow() { + $0.title = "Information Display Settings" + $0.presentationMode = .show( + controllerProvider: .callback(builder: { + let controller = InfoDisplaySettingsViewController() + controller.appStateController = self.appStateController + return controller + } + ), onDismiss: nil) - <<< SwitchRow("switchRowDots"){ row in - row.title = "Display Dots" - row.value = UserDefaultsRepository.showDots.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.showDots.value = value - // Force main screen update - guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } - mainScreen.updateBGGraphSettings() - } - <<< SwitchRow("switchRowLines"){ row in - row.title = "Display Lines" - row.value = UserDefaultsRepository.showLines.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.showLines.value = value - // Force main screen update - guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } - mainScreen.updateBGGraphSettings() - - } - <<< SwitchRow("offsetCarbsBolus"){ row in - row.title = "Offset Carb/Bolus Dots" - row.value = UserDefaultsRepository.offsetCarbsBolus.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.offsetCarbsBolus.value = value - - } - <<< StepperRow("predictionToLoad") { row in - row.title = "Hours of Prediction" - row.cell.stepper.stepValue = 0.25 - row.cell.stepper.minimumValue = 0.0 - row.cell.stepper.maximumValue = 6.0 - row.value = Double(UserDefaultsRepository.predictionToLoad.value) - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.predictionToLoad.value = value - } - <<< StepperRow("minBGScale") { row in - row.title = "Min BG Scale" - row.cell.stepper.stepValue = 1 - row.cell.stepper.minimumValue = Double(UserDefaultsRepository.highLine.value) - row.cell.stepper.maximumValue = 400 - row.value = Double(UserDefaultsRepository.minBGScale.value) - row.displayValueFor = { value in - guard let value = value else { return nil } - return bgUnits.toDisplayUnits(String(value)) - } - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.minBGScale.value = Float(value) - } - <<< StepperRow("minBGValue") { row in - row.title = "Min BG Display" - row.cell.stepper.stepValue = 1 - row.cell.stepper.minimumValue = -40 - row.cell.stepper.maximumValue = 40 - row.value = Double(UserDefaultsRepository.minBGValue.value) - row.displayValueFor = { value in - guard let value = value else { return nil } - return bgUnits.toDisplayUnits(String(value)) - } - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.minBGValue.value = Float(value) - // Force main screen update - guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } - mainScreen.updateBGGraphSettings() - } - <<< StepperRow("minBasalScale") { row in - row.title = "Min Basal Scale" - row.cell.stepper.stepValue = 0.5 - row.cell.stepper.minimumValue = 0.5 - row.cell.stepper.maximumValue = 20 - row.value = Double(UserDefaultsRepository.minBasalScale.value) - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.minBasalScale.value = value } - <<< StepperRow("lowLine") { row in - row.title = "Low BG Display Value" - row.cell.stepper.stepValue = 1 - row.cell.stepper.minimumValue = 40 - row.cell.stepper.maximumValue = 120 - row.value = Double(UserDefaultsRepository.lowLine.value) - row.displayValueFor = { value in - guard let value = value else { return nil } - return bgUnits.toDisplayUnits(String(value)) - } - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.lowLine.value = Float(value) - // Force main screen update - guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } - mainScreen.updateBGGraphSettings() - } - <<< StepperRow("highLine") { row in - row.title = "High BG Display Value" - row.cell.stepper.stepValue = 1 - row.cell.stepper.minimumValue = 120 - row.cell.stepper.maximumValue = 400 - row.value = Double(UserDefaultsRepository.highLine.value) - row.displayValueFor = { value in - guard let value = value else { return nil } - return bgUnits.toDisplayUnits(String(value)) - } - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.highLine.value = Float(value) - // Force main screen update - guard let mainScreen = self?.tabBarController!.viewControllers?[0] as? MainViewController else { return } - mainScreen.updateBGGraphSettings() - } - <<< StepperRow("overrideDisplayLocation") { row in - row.title = "Override BG Location" - row.cell.stepper.stepValue = 1 - row.cell.stepper.minimumValue = Double(UserDefaultsRepository.minBGValue.value) - row.cell.stepper.maximumValue = Double(UserDefaultsRepository.minBGScale.value) - row.value = Double(UserDefaultsRepository.overrideDisplayLocation.value) - row.displayValueFor = { value in - guard let value = value else { return nil } - return bgUnits.toDisplayUnits(String(value)) - } - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.overrideDisplayLocation.value = Float(value) - } - } - - func buildWatchSettings(){ - //array of calendars - let store = EKEventStore() - let ekCalendars = store.calendars(for: EKEntityType.event) - var calendars: [cal] = [] - for i in 0..("calendarIdentifier") { row in - row.title = "Calendar" - row.options = calendars.map { $0.identifier } - row.hidden = "$writeCalendarEvent == false" - row.value = UserDefaultsRepository.calendarIdentifier.value - row.displayValueFor = { value in - guard let value = value else { return nil } - let matching = calendars - .flatMap { $0 } - .filter { $0.identifier.range(of: value) != nil || $0.title.range(of: value) != nil } - if matching.count > 0 { - - return "\(String(matching[0].title))" - } else { - return " - " - } - } - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.calendarIdentifier.value = value - } - <<< TextRow("watchLine1"){ row in - row.title = "Line 1" - row.hidden = "$writeCalendarEvent == false" - row.value = UserDefaultsRepository.watchLine1.value - }.onChange { row in - guard let value = row.value else { return } - UserDefaultsRepository.watchLine1.value = value - } - <<< TextRow("watchLine2"){ row in - row.title = "Line 2" - row.hidden = "$writeCalendarEvent == false" - row.value = UserDefaultsRepository.watchLine2.value - }.onChange { row in - guard let value = row.value else { return } - UserDefaultsRepository.watchLine2.value = value - } - } - - func buildDebugSettings() { - form - +++ Section("Debug Settings") - - <<< SwitchRow("downloadBasal"){ row in - row.title = "Download Basal" - row.value = UserDefaultsRepository.downloadBasal.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.downloadBasal.value = value - } - <<< SwitchRow("graphBasal"){ row in - row.title = "Graph Basal" - row.value = UserDefaultsRepository.graphBasal.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.graphBasal.value = value - } - <<< SwitchRow("downloadBolus"){ row in - row.title = "Download Bolus" - row.value = UserDefaultsRepository.downloadBolus.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.downloadBolus.value = value - } - <<< SwitchRow("graphBolus"){ row in - row.title = "Graph Bolus" - row.value = UserDefaultsRepository.graphBolus.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.graphBolus.value = value + +++ Section("Debug Settings") + <<< ButtonRow() { + $0.title = "Configure Debug" + $0.presentationMode = .show( + controllerProvider: .callback(builder: { + let controller = DebugSettingsViewController() + controller.appStateController = self.appStateController + return controller } - <<< SwitchRow("downloadCarbs"){ row in - row.title = "Download Carbs" - row.value = UserDefaultsRepository.downloadCarbs.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.downloadCarbs.value = value - } - <<< SwitchRow("graphCarbs"){ row in - row.title = "Graph Carbs" - row.value = UserDefaultsRepository.graphCarbs.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.graphCarbs.value = value - } + ), onDismiss: nil) - <<< SwitchRow("downloadPrediction"){ row in - row.title = "Download Prediction" - row.value = UserDefaultsRepository.downloadPrediction.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.downloadPrediction.value = value - } - <<< SwitchRow("graphPrediction"){ row in - row.title = "Graph Prediction" - row.value = UserDefaultsRepository.graphPrediction.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.graphPrediction.value = value - } - <<< SwitchRow("debugLog"){ row in - row.title = "Show Debug Log" - row.value = UserDefaultsRepository.debugLog.value - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.debugLog.value = value - } - <<< StepperRow("viewRefreshDelay") { row in - row.title = "View Refresh Delay" - row.cell.stepper.stepValue = 1 - row.cell.stepper.minimumValue = 5 - row.cell.stepper.maximumValue = 30 - row.value = Double(UserDefaultsRepository.viewRefreshDelay.value) - row.displayValueFor = { value in - guard let value = value else { return nil } - return "\(Int(value))" - } - }.onChange { [weak self] row in - guard let value = row.value else { return } - UserDefaultsRepository.viewRefreshDelay.value = Double(value) } + } - } diff --git a/LoopFollow/ViewControllers/SnoozeViewController.swift b/LoopFollow/ViewControllers/SnoozeViewController.swift index fa9e9d872..00ed62eeb 100644 --- a/LoopFollow/ViewControllers/SnoozeViewController.swift +++ b/LoopFollow/ViewControllers/SnoozeViewController.swift @@ -11,7 +11,7 @@ import UserNotifications class SnoozeViewController: UIViewController, UNUserNotificationCenterDelegate { - + var appStateController: AppStateController? var snoozeTabItem: UITabBarItem = UITabBarItem() var mainTabItem: UITabBarItem = UITabBarItem() diff --git a/LoopFollow/ViewControllers/WatchSettingsViewController.swift b/LoopFollow/ViewControllers/WatchSettingsViewController.swift new file mode 100644 index 000000000..a9594d0ff --- /dev/null +++ b/LoopFollow/ViewControllers/WatchSettingsViewController.swift @@ -0,0 +1,96 @@ +// +// WatchSettingsViewController.swift +// LoopFollow +// +// Created by Jose Paredes on 7/16/20. +// Copyright © 2020 Jon Fawcett. All rights reserved. +// + +import Foundation +import Eureka +import EventKit +import EventKitUI + +class WatchSettingsViewController: FormViewController { + + var appStateController: AppStateController? + + override func viewDidLoad() { + super.viewDidLoad() + if UserDefaultsRepository.forceDarkMode.value { + overrideUserInterfaceStyle = .dark + } + buildWatchSettings() + } + + private func buildWatchSettings(){ + + struct cal { + var title: String + var identifier: String + } + + //array of calendars + let store = EKEventStore() + let ekCalendars = store.calendars(for: EKEntityType.event) + var calendars: [cal] = [] + for i in 0..("calendarIdentifier") { row in + row.title = "Calendar" + row.options = calendars.map { $0.identifier } + row.hidden = "$writeCalendarEvent == false" + row.value = UserDefaultsRepository.calendarIdentifier.value + row.displayValueFor = { value in + guard let value = value else { return nil } + let matching = calendars + .flatMap { $0 } + .filter { $0.identifier.range(of: value) != nil || $0.title.range(of: value) != nil } + if matching.count > 0 { + + return "\(String(matching[0].title))" + } else { + return " - " + } + } + }.onChange { [weak self] row in + guard let value = row.value else { return } + UserDefaultsRepository.calendarIdentifier.value = value + } + <<< TextRow("watchLine1"){ row in + row.title = "Line 1" + row.hidden = "$writeCalendarEvent == false" + row.value = UserDefaultsRepository.watchLine1.value + }.onChange { row in + guard let value = row.value else { return } + UserDefaultsRepository.watchLine1.value = value + } + <<< TextRow("watchLine2"){ row in + row.title = "Line 2" + row.hidden = "$writeCalendarEvent == false" + row.value = UserDefaultsRepository.watchLine2.value + }.onChange { row in + guard let value = row.value else { return } + UserDefaultsRepository.watchLine2.value = value + } + +++ ButtonRow() { + $0.title = "DONE" + }.onCellSelection { (row, arg) in + self.dismiss(animated:true, completion: nil) + } + } + +} diff --git a/LoopFollow/helpers/DataStructs.swift b/LoopFollow/helpers/DataStructs.swift index b69167da0..5e9080c52 100644 --- a/LoopFollow/helpers/DataStructs.swift +++ b/LoopFollow/helpers/DataStructs.swift @@ -10,13 +10,6 @@ import Foundation class DataStructs { - //NS BG Struct - struct sgvData: Codable { - var sgv: Int - var date: TimeInterval - var direction: String? - } - // Pie Chart Data struct pieData: Codable { var name: String diff --git a/LoopFollow/helpers/carbBolusArrays.swift b/LoopFollow/helpers/carbBolusArrays.swift index 2881a0800..4b690f690 100644 --- a/LoopFollow/helpers/carbBolusArrays.swift +++ b/LoopFollow/helpers/carbBolusArrays.swift @@ -11,7 +11,7 @@ import Foundation extension MainViewController { - func findNearestBGbyTime(needle: TimeInterval, haystack: [DataStructs.sgvData], startingIndex: Int) -> (sgv: Double, foundIndex: Int) { + func findNearestBGbyTime(needle: TimeInterval, haystack: [ShareGlucoseData], startingIndex: Int) -> (sgv: Double, foundIndex: Int) { // If we can't find a match or things fail, put it at 100 BG for i in startingIndex..(key: "infoDataTotal", default: 0) - //Nightscout Settings + // Nightscout Settings static let url = UserDefaultsValue(key: "url", default: "") static let token = UserDefaultsValue(key: "token", default: "") static let units = UserDefaultsValue(key: "units", default: "mg/dL") + // Dexcom Share Settings + static let shareUserName = UserDefaultsValue(key: "shareUserName", default: "") + static let sharePassword = UserDefaultsValue(key: "sharePassword", default: "") + static let shareServer = UserDefaultsValue(key: "shareServer", default: "US") + // Graph Settings + static let chartScaleX = UserDefaultsValue(key: "chartScaleX", default: 18.0) static let showDots = UserDefaultsValue(key: "showDots", default: true) static let showLines = UserDefaultsValue(key: "showLines", default: true) static let offsetCarbsBolus = UserDefaultsValue(key: "offsetCarbsBolus", default: true) @@ -86,7 +95,6 @@ class UserDefaultsRepository { static let alertCageInsertTime = UserDefaultsValue(key: "alertCageInsertTime", default: 0) static let alertSageInsertTime = UserDefaultsValue(key: "alertSageInsertTime", default: 0) - static let alertSnoozeAllTime = UserDefaultsValue(key: "alertSnoozeAllTime", default: nil) static let alertSnoozeAllIsSnoozed = UserDefaultsValue(key: "alertSnoozeAllIsSnoozed", default: false) diff --git a/Podfile b/Podfile index 7d56523ec..ebcb5d378 100644 --- a/Podfile +++ b/Podfile @@ -3,5 +3,6 @@ target 'LoopFollow' do pod 'Charts' pod 'Eureka' - - end + pod 'ShareClient', :git => 'https://github.com/josep1972/dexcom-share-client-swift.git', :branch => 'dev' + +end diff --git a/Podfile.lock b/Podfile.lock index 691d4bf71..7629a4238 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -3,20 +3,33 @@ PODS: - Charts/Core (= 3.5.0) - Charts/Core (3.5.0) - Eureka (5.2.1) + - ShareClient (1.2) DEPENDENCIES: - Charts - Eureka + - ShareClient (from `https://github.com/josep1972/dexcom-share-client-swift.git`, branch `dev`) SPEC REPOS: trunk: - Charts - Eureka +EXTERNAL SOURCES: + ShareClient: + :branch: dev + :git: https://github.com/josep1972/dexcom-share-client-swift.git + +CHECKOUT OPTIONS: + ShareClient: + :commit: 815a1dbddd970a563e3b7fd22d88b23c164b026e + :git: https://github.com/josep1972/dexcom-share-client-swift.git + SPEC CHECKSUMS: Charts: 40a08591df1f8ad5c223ddedfb1a06da92f24f7c Eureka: c883105488e05bc65539f583246ecf9657cabbfe + ShareClient: 5937ff69b57c85c2004c915812f73cf7ae86549e -PODFILE CHECKSUM: 7665842405edac4f27ad84d4b66d6d57d5a4e5aa +PODFILE CHECKSUM: b5ee540f0ef2120e92d3b71909453c335d659552 COCOAPODS: 1.9.3 diff --git a/Pods/Local Podspecs/ShareClient.podspec.json b/Pods/Local Podspecs/ShareClient.podspec.json new file mode 100644 index 000000000..d763efe4c --- /dev/null +++ b/Pods/Local Podspecs/ShareClient.podspec.json @@ -0,0 +1,21 @@ +{ + "name": "ShareClient", + "version": "1.2", + "summary": "Dexcom Client Pod", + "swift_versions": "5.0", + "homepage": "https://github.com/josep1972/dexcom-share-client-swift", + "license": "MIT", + "authors": "josep1972", + "platforms": { + "ios": "13" + }, + "source": { + "git": "https://github.com/josep1972/dexcom-share-client-swift.git", + "tag": "v1.2" + }, + "source_files": [ + "ShareClient/ShareClient.h", + "ShareClient/ShareClient.swift" + ], + "swift_version": "5.0" +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 691d4bf71..7629a4238 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -3,20 +3,33 @@ PODS: - Charts/Core (= 3.5.0) - Charts/Core (3.5.0) - Eureka (5.2.1) + - ShareClient (1.2) DEPENDENCIES: - Charts - Eureka + - ShareClient (from `https://github.com/josep1972/dexcom-share-client-swift.git`, branch `dev`) SPEC REPOS: trunk: - Charts - Eureka +EXTERNAL SOURCES: + ShareClient: + :branch: dev + :git: https://github.com/josep1972/dexcom-share-client-swift.git + +CHECKOUT OPTIONS: + ShareClient: + :commit: 815a1dbddd970a563e3b7fd22d88b23c164b026e + :git: https://github.com/josep1972/dexcom-share-client-swift.git + SPEC CHECKSUMS: Charts: 40a08591df1f8ad5c223ddedfb1a06da92f24f7c Eureka: c883105488e05bc65539f583246ecf9657cabbfe + ShareClient: 5937ff69b57c85c2004c915812f73cf7ae86549e -PODFILE CHECKSUM: 7665842405edac4f27ad84d4b66d6d57d5a4e5aa +PODFILE CHECKSUM: b5ee540f0ef2120e92d3b71909453c335d659552 COCOAPODS: 1.9.3 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index b3b2e7207..0f4cf711e 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,233 +7,245 @@ objects = { /* Begin PBXBuildFile section */ - 00F52B5B3C90538FE25AEBD9DCC93249 /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC49C98470D53DA3649F1E5A95641514 /* ChartDataProvider.swift */; }; - 01618174B06DD11428CA21BD4F996704 /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82516DCE2680E4E28B019A35C1AA85E7 /* ComponentBase.swift */; }; - 01E1380B9DAEF7517AD42713A8CB716E /* ButtonRowWithPresent.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6C47970EE73E5F5C1C16EB032C7880 /* ButtonRowWithPresent.swift */; }; - 02DB3B5C782BC3DEF6B921B9D049201D /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575A3D70A90822811C6533EF48873537 /* BubbleChartDataEntry.swift */; }; - 0388D8402985CBE0DB060BB0D7CCB2ED /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000D3C28CD7966485DFAD40B2C9874B4 /* Description.swift */; }; - 03D8F8D16FAF2B28113DB82186DBC66F /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9157BC0B4AEB06D64AE7443A8BD5947D /* BarLineChartViewBase.swift */; }; - 052CDA13B29437A2FDCD9D19230AD39F /* FieldsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA682FA297006A934B23EEF8E8E3191 /* FieldsRow.swift */; }; - 05C88AAB95E98E3296996797706F19AF /* RuleRequired.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45FD6950945FE0889962B8261E67750E /* RuleRequired.swift */; }; - 07572F1826C958646848D4EF5DBF377E /* RuleRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EDC871696C42F364FF9E4FBF320D207 /* RuleRange.swift */; }; - 0769C281810E13C0985B2A414F20ADDE /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 929451489095A14748EE4AC0ECE015B3 /* XAxisRendererHorizontalBarChart.swift */; }; - 09D2EA12CED518BAA4BCB6A707FA3125 /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D89B6697D34583EEC038208D3A2CCC19 /* TriangleShapeRenderer.swift */; }; - 0A30CC2BF450A16F1F4C39C95CFA3A66 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A67B7A482098A7B6617635A36A70C54 /* BarChartDataProvider.swift */; }; - 0D7339D0D404F9C394637DDFE383A7A8 /* DecimalFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE64A695A7435B21BE9B760056208374 /* DecimalFormatter.swift */; }; - 0E7DC6451BEFB26E3A47621C0B7F1C16 /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB20702200078D6C342F044A7ACF647E /* ViewPortJob.swift */; }; - 1132976D856E1857C4CD9989B9A8EBCE /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CDFE98CDB50C3C14377F152923FF465 /* PieChartView.swift */; }; - 119C3D64BDFECAB92F4FFCEF9B4F135D /* CheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D88CE352A90F7E9AC65DFA6D8885891 /* CheckRow.swift */; }; - 12A718BC5CDEB44AA6B58C8EE7C13128 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F934EBBD0C767A7DA6DEB455943843 /* ChartColorTemplates.swift */; }; - 13D3AB43B01F6D78090806390BD29B7E /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012D858F75E53844C8DB0E8745A4245F /* BarChartDataSet.swift */; }; - 171D7FC46EC56CF9B16D97877A176C10 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2D900844C314E8262826754BCDB63E /* ChartUtils.swift */; }; - 1AF2A57E2B15E7DB326A38D8D8A4FBE2 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9640E3B61E9EB2E5999E6AF8A1E6D61A /* ChartViewBase.swift */; }; - 1BB933C505E10805A9E179E3DD2CA17E /* BaseRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BBDA9249CBAFE6EF9373177FF46337 /* BaseRow.swift */; }; - 1C2DB744A980164665CE687581222A12 /* Charts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 88E17727D64A26D166EA94F8B96ACAB4 /* Charts-dummy.m */; }; - 1D2BEF7D292100F700E00314C6FA6FAF /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF6F94A014222434C07CED041F1A6237 /* CandleStickChartView.swift */; }; - 1EA6964A5C78B205DFC45AFC08637DF8 /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A0B1AFF34D1CE8A4698D476DAE19D1 /* LegendEntry.swift */; }; - 1F33F0B7F8701E9A20F90C6A32B2CA03 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A83BF9B84A2500DB376EB0440F3177 /* Platform.swift */; }; - 1F91BEF50B63CA55CA641D3367FCA3F3 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62109DDC014868EF85EAAC5DEA89E792 /* CandleStickChartRenderer.swift */; }; - 22681421488F1E799B4C8FFC0A77F29B /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA35BC7CB0631FB6172FCC3939301CE /* ZoomViewJob.swift */; }; - 25D675B271C3E073CF2C27B945FAADBB /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E24A04789464015C22D87D5E3A60671 /* RadarChartView.swift */; }; - 2652DBC582FD2BF6AA5B2A40B66020EC /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB7F1FDCA25887A48D3D9A7FB615800 /* CircleShapeRenderer.swift */; }; - 26EFCEF521B95D2CCB19E5535408A1FA /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 254A6B4D102F8420A54512389166B1E8 /* Fill.swift */; }; - 27303BB4BDD2C456C1DEC36087E756B4 /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68FDCFBE5C019D26281F7A56CAAFBD4A /* ICandleChartDataSet.swift */; }; - 27A3F7981DF0B5CFCB2E56AABBEAA319 /* FieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE28E66678F0411EB23844644DD532A /* FieldRow.swift */; }; - 2AFDC0B52F5347C726EAAD89365E3978 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CF245263BA6245C01808ECB50BA7C48 /* PieChartDataSet.swift */; }; - 2D144E1543B0B44E364EFEC4E6CFE8D5 /* RuleRegExp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5C982FD8EADF008ED080533ECC61350 /* RuleRegExp.swift */; }; - 2E5AD5FC9F45A7F38F5F5BC6FF7570E9 /* RuleClosure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AAFAF1006DFD732C3559D661ABC07B /* RuleClosure.swift */; }; - 2E91A4CB83F9DC6BDDAE907A38FE4648 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8CE52191DADD0E86EFFB723F5C1F43 /* BubbleChartDataProvider.swift */; }; - 2F819FF7F7721DA042E977EF91BA545D /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F1DEC08F246688F6E7531A3395E9B1 /* CombinedChartRenderer.swift */; }; - 31918F06050D6445E06FEDF8E2183AF6 /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FB34C64CEA9EB76D25668DF5B911D0 /* XAxisRendererRadarChart.swift */; }; - 32B122E4A8FECD28F192174EA3A4C704 /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B352DD04711E5CD1288B6F43CA78EAD /* MarkerView.swift */; }; - 34BC5667BA39781B4F70C9AC0518E537 /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9DB5945996F90B2A9EE5243C6A1423F /* CombinedChartDataProvider.swift */; }; - 35C57ED01BE2D7FD6F4DACD96F5EDFE1 /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D20056B909D071B51B58A4EC7F9AF016 /* IFillFormatter.swift */; }; - 39E13C8ED0C32E9EC0B353CA45C70CF2 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CB81995CD9E3411271534F01DAD4592 /* AnimatedMoveViewJob.swift */; }; - 3A5078F021BB004E2F4463F360D41391 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C086384F94A6CED2FB0EC4DA22CF685 /* HorizontalBarChartView.swift */; }; + 00F52B5B3C90538FE25AEBD9DCC93249 /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7DA86EA696B87A80FF54CABA26548A /* ChartDataProvider.swift */; }; + 01618174B06DD11428CA21BD4F996704 /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC2735DCC80FD5BCE93B7D1D57A05FB /* ComponentBase.swift */; }; + 01E1380B9DAEF7517AD42713A8CB716E /* ButtonRowWithPresent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 937E34112E8DDE6B37ECE22A0BDC59E7 /* ButtonRowWithPresent.swift */; }; + 02DB3B5C782BC3DEF6B921B9D049201D /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCF71002CB08FA43477C09804AD8CF00 /* BubbleChartDataEntry.swift */; }; + 0388D8402985CBE0DB060BB0D7CCB2ED /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D57BEB61E5B0C8070F999D1C04F128 /* Description.swift */; }; + 03D8F8D16FAF2B28113DB82186DBC66F /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E9C61C3E7EBE33601F29273FD0610F /* BarLineChartViewBase.swift */; }; + 052CDA13B29437A2FDCD9D19230AD39F /* FieldsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E304C127B722E54D8A82C9CAD421A740 /* FieldsRow.swift */; }; + 05C88AAB95E98E3296996797706F19AF /* RuleRequired.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358D210738B60758170EEAB4EBFD35F7 /* RuleRequired.swift */; }; + 07572F1826C958646848D4EF5DBF377E /* RuleRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F6A8E2C6ECCAF59C045894E1F3DF8C5 /* RuleRange.swift */; }; + 0769C281810E13C0985B2A414F20ADDE /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94F34C60E8ABE81F99BFB0915A1517A0 /* XAxisRendererHorizontalBarChart.swift */; }; + 09D2EA12CED518BAA4BCB6A707FA3125 /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733827F65F5022C471A1447F04440570 /* TriangleShapeRenderer.swift */; }; + 0A30CC2BF450A16F1F4C39C95CFA3A66 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B155A2FCCFFC4A5633BA14B82C657F3 /* BarChartDataProvider.swift */; }; + 0D7339D0D404F9C394637DDFE383A7A8 /* DecimalFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B417B1F0CF4DCEC4917E71B8477B9E1 /* DecimalFormatter.swift */; }; + 0E7DC6451BEFB26E3A47621C0B7F1C16 /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D28AE94DD8B0CC673A577C731C03431 /* ViewPortJob.swift */; }; + 1132976D856E1857C4CD9989B9A8EBCE /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5284FBF634CFF42E384E18E1D82F111C /* PieChartView.swift */; }; + 119C3D64BDFECAB92F4FFCEF9B4F135D /* CheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB158EC4C258A5082D64122F7AF89500 /* CheckRow.swift */; }; + 12A718BC5CDEB44AA6B58C8EE7C13128 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F49CC163BE65B796CE8B4C654F0B221 /* ChartColorTemplates.swift */; }; + 13D3AB43B01F6D78090806390BD29B7E /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D5F14D7DBABC785E6B47E0AA271EE3 /* BarChartDataSet.swift */; }; + 171D7FC46EC56CF9B16D97877A176C10 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB3F85B18411852AC6F1EEBBB6D9DCA /* ChartUtils.swift */; }; + 1AF2A57E2B15E7DB326A38D8D8A4FBE2 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D9E3F84B8F3CDDF959B5457AC2CF6D9 /* ChartViewBase.swift */; }; + 1BB933C505E10805A9E179E3DD2CA17E /* BaseRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4010AF1B513BF04041A5432AF20E42B /* BaseRow.swift */; }; + 1C2DB744A980164665CE687581222A12 /* Charts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CA6A2727DA19123030277D8B0B6EAD4E /* Charts-dummy.m */; }; + 1D2BEF7D292100F700E00314C6FA6FAF /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C05AC94561A5051FEF33F481EC70E6 /* CandleStickChartView.swift */; }; + 1EA6964A5C78B205DFC45AFC08637DF8 /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03233AB6D94FE12321C740972ECDCC7C /* LegendEntry.swift */; }; + 1F33F0B7F8701E9A20F90C6A32B2CA03 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = B403CCDCB84443B5F5C2ACB7F05262F8 /* Platform.swift */; }; + 1F91BEF50B63CA55CA641D3367FCA3F3 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A3C6AB4C2213910B58D3A525336E5E /* CandleStickChartRenderer.swift */; }; + 22681421488F1E799B4C8FFC0A77F29B /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 653297DA1AAAEEFC0BF5642F6604CDDC /* ZoomViewJob.swift */; }; + 25D675B271C3E073CF2C27B945FAADBB /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EBF436B7501608AB33DA5DEF29C213A /* RadarChartView.swift */; }; + 2652DBC582FD2BF6AA5B2A40B66020EC /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91590B3C1B301C3DE53A488D68A81701 /* CircleShapeRenderer.swift */; }; + 26EFCEF521B95D2CCB19E5535408A1FA /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = D545BAE8C86C5021FAEB27D4C25D6F10 /* Fill.swift */; }; + 27303BB4BDD2C456C1DEC36087E756B4 /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3243DA31298D1FE6BEA4A606C0E0944 /* ICandleChartDataSet.swift */; }; + 27A3F7981DF0B5CFCB2E56AABBEAA319 /* FieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8A767A733062C597BA28637807CF6 /* FieldRow.swift */; }; + 2AFDC0B52F5347C726EAAD89365E3978 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D44178678937D7A1451FAB15F69C1D8E /* PieChartDataSet.swift */; }; + 2D144E1543B0B44E364EFEC4E6CFE8D5 /* RuleRegExp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99445AF2EFD84919074857FAE2171830 /* RuleRegExp.swift */; }; + 2E5AD5FC9F45A7F38F5F5BC6FF7570E9 /* RuleClosure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8BC5CA866C668A73EDFD53784DB4A4C /* RuleClosure.swift */; }; + 2E91A4CB83F9DC6BDDAE907A38FE4648 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC48B177FD06557DCB9C5C3583D5B87 /* BubbleChartDataProvider.swift */; }; + 2F819FF7F7721DA042E977EF91BA545D /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F12CC35F78CEC5436F967BCF50C5EF0 /* CombinedChartRenderer.swift */; }; + 3116B2E3FECFF3942AEA6BF17796CA37 /* ShareClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1F35E26A6B017DFE6EA7B2EEF34E01 /* ShareClient.swift */; }; + 31918F06050D6445E06FEDF8E2183AF6 /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFC29535908C42BB065B4E30585417A4 /* XAxisRendererRadarChart.swift */; }; + 32B122E4A8FECD28F192174EA3A4C704 /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CEC4ADA231B20F225A0C0800CF05406 /* MarkerView.swift */; }; + 34BC5667BA39781B4F70C9AC0518E537 /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F60B3D090DD53CC3BA96A41B6A0776C /* CombinedChartDataProvider.swift */; }; + 35C57ED01BE2D7FD6F4DACD96F5EDFE1 /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805B8ACDB7AF64D4B1EFF9695D06D6E7 /* IFillFormatter.swift */; }; + 39E13C8ED0C32E9EC0B353CA45C70CF2 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F3AC74EA385AD1FB48BB312B9A8D01 /* AnimatedMoveViewJob.swift */; }; + 3A5078F021BB004E2F4463F360D41391 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBB8BBD29DF85A11464A5ADA946CB94D /* HorizontalBarChartView.swift */; }; + 3A81072EB144BB6F03C7F5360EEEE03D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 3B86A25C5362FD2905831A10C4806500 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - 3BF29BEA4C1FF7360E93882C9D6C2A7C /* AlertRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 481AA3E635F1093F5AB7FD74ADA9BDD9 /* AlertRow.swift */; }; - 3D57709B53538839313AA6A6DC6E322C /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD2422A99038FA392E12DC40300CD5CC /* ILineRadarChartDataSet.swift */; }; - 3EAC9B9D96C569653EF71750289EB0D0 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 666AEAC030E22BD0BDE90830AF057310 /* CandleChartDataEntry.swift */; }; - 45D64D81FC93E350F19E7A28A8A8FDAC /* NavigationAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBF3FF6A0AA50E17997BE01E91A7B0E /* NavigationAccessoryView.swift */; }; - 474E946BEBC8E12EA9C8D766BDFCEEF5 /* Platform+Graphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B495707192AD3EB05D28B3FC41D3DE79 /* Platform+Graphics.swift */; }; - 4975CACC893A427910F64270C28E7275 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70230EF21C40FA0D1ED0CF3F82D0CCA5 /* RadarChartData.swift */; }; - 4994E7B2E69CF616E8E7ECD19014CAE0 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF8E5F90E48A1146DE536864603C6B1 /* CandleChartDataSet.swift */; }; - 4BA52D959C6AC78D2B641936C986D5BD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - 4BBFCE1FBB68AAFB91FF682CD80B9F69 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9ACCB5D9F822C2F7D0C1E84D401124D /* ChevronDownShapeRenderer.swift */; }; - 4D5CAEA66E12CA438CD7B4FA78BB6186 /* ListCheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C86B0118C269219B26CEB29BFEB2BE7 /* ListCheckRow.swift */; }; - 4D9563B240B9127EDF6FBA5A21180FD8 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 378C21F8B8F022E50AA5A54C32444EEA /* PieChartData.swift */; }; - 4DB24C948D1C4F4FB43DAA833D049885 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A414CED5CB27F40037F440A7B99A8181 /* LegendRenderer.swift */; }; - 5128310DB4D59B51642B2A13972C3434 /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C992A46C86EB9DE636AF70545363749 /* IAxisValueFormatter.swift */; }; - 53772EF4F22DD42A63551C4CD687E9A6 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16819173DF628B0FC53570AE9383A1E9 /* LineRadarChartDataSet.swift */; }; - 553F2C40EE9B6C0A1CC57FC2894455CD /* SelectableRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D25585170D6AB5308AE2A678B8A2AFD9 /* SelectableRowType.swift */; }; - 56EB318A58A511C6BE4098E8EAD6A7C0 /* MultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 742D75E835BBB864914066437E0F9AAF /* MultipleSelectorRow.swift */; }; - 57DA9857A10221E5D429C48B85BB0010 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF9EC3B5687C1269D9ACA71960B2722F /* Cell.swift */; }; - 58398B0E03224E5EBE7FCFAD62F8FB69 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053BA00FFC9D0CCCA874716694EF87DA /* ILineChartDataSet.swift */; }; - 5847AEA5F6021F082A9238BDD5801079 /* Platform+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF1521DEA9B23E85D6E3B390594B8386 /* Platform+Accessibility.swift */; }; - 5A02CFF7195D1A7592F777170D8FC6D9 /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D3208F76CADE6D8572D57C206C965D /* Protocols.swift */; }; - 5A1A55188705CB82F540F58D2910AB93 /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1AD9C87BF211B61583EFC0CDAAFD1FE /* Section.swift */; }; - 5A8396B9DDE887F7C397B7EEBC4163AA /* PickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDADC32BFF4DE543DCC8A0C9F33610B8 /* PickerRow.swift */; }; - 5B96DE0FB615C832ACB06B9E16B49740 /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4079FC6B8F8238BE5842EC9593970ED4 /* IValueFormatter.swift */; }; - 5C790091CB1B0D41E23A4AE5FA727983 /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ABEA1E706788F7FB4AEF5ABDA5884A2 /* IBubbleChartDataSet.swift */; }; - 5D79FD33591AEAEB1B9BF86EC4EA3EA6 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D7F12C82F13C5D254AFDD932BB189E2 /* BubbleChartRenderer.swift */; }; - 5DA6F4FC8413B90BD793D0AE181C2AA9 /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF2AAADC8530B44EFDAFDF76424ACB9 /* SquareShapeRenderer.swift */; }; - 5E27C6B54F72D3C34AB6605772DF7E70 /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8096CF97803FE35D19082B189F139D53 /* LineScatterCandleRadarChartDataSet.swift */; }; - 5F5515249E1A20C230755D2E8001F3FC /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = A76A34E9C02A6AE7AF665A056FC21385 /* Operators.swift */; }; - 5FA0AFCA94E1291506DC54D03765FA22 /* Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = 372778BB7FE2428A1F850F71B3BB5F37 /* Row.swift */; }; - 61B753A042411BCF77F768D958106A5C /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D25B6FD011B35288185B6EF33CDACC8 /* RadarHighlighter.swift */; }; - 61D928089445221BAB80A8DB76A68904 /* PopoverSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 877048B6F67A34C1FD3885CD20CF3AC6 /* PopoverSelectorRow.swift */; }; + 3BF29BEA4C1FF7360E93882C9D6C2A7C /* AlertRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F50F1D5643D6EBCA09E428806984608 /* AlertRow.swift */; }; + 3D57709B53538839313AA6A6DC6E322C /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF8B918AB264444686976350703223A /* ILineRadarChartDataSet.swift */; }; + 3EAC9B9D96C569653EF71750289EB0D0 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDBBC91348519BCFAF54CEB0F3A336E3 /* CandleChartDataEntry.swift */; }; + 45D64D81FC93E350F19E7A28A8A8FDAC /* NavigationAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0D30B8F618735D32A0FCFC52EB805D /* NavigationAccessoryView.swift */; }; + 474E946BEBC8E12EA9C8D766BDFCEEF5 /* Platform+Graphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDD26C0BFFFEF7E05816A85ED3048C1 /* Platform+Graphics.swift */; }; + 4975CACC893A427910F64270C28E7275 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B360F02EE859A284562621B5BC8061F /* RadarChartData.swift */; }; + 4994E7B2E69CF616E8E7ECD19014CAE0 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70FFA615C5AB19A462747668F6DFAE52 /* CandleChartDataSet.swift */; }; + 4BBFCE1FBB68AAFB91FF682CD80B9F69 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9057EE1840994798463E40010C5B2BC5 /* ChevronDownShapeRenderer.swift */; }; + 4D5CAEA66E12CA438CD7B4FA78BB6186 /* ListCheckRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C7ED3BDF9A49970B6D7F0C0BF8E2B3 /* ListCheckRow.swift */; }; + 4D9563B240B9127EDF6FBA5A21180FD8 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5027B3B59A4B57AD77A4D08FD35B4F5 /* PieChartData.swift */; }; + 4DB24C948D1C4F4FB43DAA833D049885 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13243CBC570EC1C4F0410EAB1D89DF92 /* LegendRenderer.swift */; }; + 5128310DB4D59B51642B2A13972C3434 /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00184B71D9C00EA8FDF24D6CE7E8617B /* IAxisValueFormatter.swift */; }; + 5160948170D313DCA6586CFADF3B2A6A /* ShareClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 88506EF0DE39A04D24F910A93C337EFD /* ShareClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53772EF4F22DD42A63551C4CD687E9A6 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49992CCA5AEFDD6B4059FA55B46719E2 /* LineRadarChartDataSet.swift */; }; + 553F2C40EE9B6C0A1CC57FC2894455CD /* SelectableRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94046F1B95DF94D6E175F891C3C315AD /* SelectableRowType.swift */; }; + 56EB318A58A511C6BE4098E8EAD6A7C0 /* MultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5C4B57627CE6A33CA5AFF28D7B4470 /* MultipleSelectorRow.swift */; }; + 57DA9857A10221E5D429C48B85BB0010 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 568C835AC8B764A0183271E99058B163 /* Cell.swift */; }; + 58398B0E03224E5EBE7FCFAD62F8FB69 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C1C37151607BD73B8CBF52A04A3C2A /* ILineChartDataSet.swift */; }; + 5847AEA5F6021F082A9238BDD5801079 /* Platform+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCB97DFE79BCFD22A9806F8AAE04749 /* Platform+Accessibility.swift */; }; + 5A02CFF7195D1A7592F777170D8FC6D9 /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9CD0FB1963D56F3399E0EF8469A0FA /* Protocols.swift */; }; + 5A1A55188705CB82F540F58D2910AB93 /* Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989650FD7F5122CA9AC857FF507D818E /* Section.swift */; }; + 5A8396B9DDE887F7C397B7EEBC4163AA /* PickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EEB10C82369CAF70178A725C299F81E /* PickerRow.swift */; }; + 5B96DE0FB615C832ACB06B9E16B49740 /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52777F38E94D175B30FD6CCE0503BE91 /* IValueFormatter.swift */; }; + 5C790091CB1B0D41E23A4AE5FA727983 /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C500690781B6631CE1C0946BDBDDAB /* IBubbleChartDataSet.swift */; }; + 5D79FD33591AEAEB1B9BF86EC4EA3EA6 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B31F4F15FC21AB2A91319F457B686A31 /* BubbleChartRenderer.swift */; }; + 5DA6F4FC8413B90BD793D0AE181C2AA9 /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F9B961D3E7671D04E9474A1C7A2194F /* SquareShapeRenderer.swift */; }; + 5E27C6B54F72D3C34AB6605772DF7E70 /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F38C6C77C1EDABA11F488AF0CB7113BC /* LineScatterCandleRadarChartDataSet.swift */; }; + 5F5515249E1A20C230755D2E8001F3FC /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55F11A5FF44761B6757A841E9A4FE3BD /* Operators.swift */; }; + 5F840ED834EBE06F641AA87BD7B7B178 /* ShareClient-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A047E01EAD49DCD01C6AE241C055B64E /* ShareClient-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FA0AFCA94E1291506DC54D03765FA22 /* Row.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20EACBD53E243A3F9DF8735D46C2460E /* Row.swift */; }; + 61B753A042411BCF77F768D958106A5C /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21FF0C890A9774E7FC5E8434FB5FDA41 /* RadarHighlighter.swift */; }; + 61D928089445221BAB80A8DB76A68904 /* PopoverSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A909150E97DC082367FC2960FCB633BA /* PopoverSelectorRow.swift */; }; 624CD096DCC639825FDB7372D5E5FF43 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - 62BEAD080E107195393F8ABBA8C81572 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD23361C3941A28A568A73F5E2A0C96 /* BarChartData.swift */; }; - 62C2F7F87CA413E2407F1F8DECA88949 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7A9E25022D8E2DE5F4B5ABCFF8073B /* IChartDataSet.swift */; }; - 62E99A538A3363A9013DCCBF519B876F /* CellType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD7FCF54BAD47CD0733E99A9318D846 /* CellType.swift */; }; - 640C152125D86F7A3C9BDD7D18563CBA /* Platform+Gestures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5FDCBCF25DC40CBD3324686E14C95A /* Platform+Gestures.swift */; }; - 644CBE15115BFEDB16BF372F81CFF076 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1BB70383AD3D2088BD979874E38FB12 /* PieRadarHighlighter.swift */; }; - 64A0821B4F9954E56639DAF9BD7E575C /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F3155FB4D74FAF71DACB796F6C37CF /* Transformer.swift */; }; - 66B829842549EECCE91E61D34FFABCBA /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BE1D35B7B996A40A09DBA627975CAD /* ScatterChartData.swift */; }; - 66FC952C43367208D641932AEB59DA8A /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAB210E66749830C126E32238CE2082D /* LineChartDataSet.swift */; }; - 6706FE594A5FC58BE59F7AA454982D93 /* SliderRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 604618765E9FC4A4C41502066047493A /* SliderRow.swift */; }; - 675D24D585A2506762D77E6052517E00 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D988C4498CD948B3BA26A653BC5F2BE1 /* IPieChartDataSet.swift */; }; - 6801E6D885988880F502EFA919360446 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F84715AE8809D6316FF9BCEAD20DCA /* DefaultAxisValueFormatter.swift */; }; - 683F5BAD171DD257F3EC9472323B4BC7 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071D24D80B9E2809386D89EE81F176E2 /* RadarChartRenderer.swift */; }; - 6A532F6858B2D5219D76BEFE1E74A5A6 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C11A72698F5A39FE67A8908256260F03 /* HorizontalBarChartRenderer.swift */; }; - 6D13C3C40D5F2B21B4491B81002F2894 /* RuleEmail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2275ABB30ED7FCACFB71FDEF947219F2 /* RuleEmail.swift */; }; - 6FDD5EA5214B8CDC0E747916F07D74C2 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE339BC445333F4277FCCF4B6E05248B /* YAxisRendererRadarChart.swift */; }; - 7005C904B5F05004C2BC6703E8B14F39 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D10EDF63A87D7BD2367F7E8DB62A50 /* Validation.swift */; }; - 709152D66394DCE1D7D3802C65090118 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FB31C7D459AACCCDAD58C4427C65B1F /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; - 7320CBA29BE1D473CA5BE26B1D226D04 /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E147C593487F41985DF252E8462F8E5 /* Animator.swift */; }; - 74D4DC9B702FBC147C03965E9F271128 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57B547D32213ED4ACD5121E873E08B63 /* CrossShapeRenderer.swift */; }; - 74EC68DA659219AB56A917312A73EA7D /* SelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480C03B7DF1E21E39BD90A9F76955F98 /* SelectorViewController.swift */; }; - 75B22CB8C580F73B117214B061436099 /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155737109C81D674801FCC3A99A51918 /* IMarker.swift */; }; - 7605565F28B5C078923EE0A3F5D7C86E /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15AE42BF26F6B49F108794BABAF01BE8 /* ChartData.swift */; }; - 7731319719C1878AE7AF9D78705712AF /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A801B59BAFE6387217B3B12162AFB /* Range.swift */; }; - 7ACE9E9A28CB14F6DB0D7218C8B50917 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168949456FDA5D72FC492981BF2AB55E /* BubbleChartDataSet.swift */; }; - 7C944D24CCF29DC5C1B8232C1DBE0340 /* Pods-LoopFollow-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E41188828C3ADE7A96C4DA6ED1CCDA2 /* Pods-LoopFollow-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CDE8FB3A24BA483F4D2AFB70D990F70 /* Eureka-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FE802B440E6EA22B84F90B2192E9C89C /* Eureka-dummy.m */; }; - 7D605E2EF1E737244832E3329AE89746 /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44AB25DFE6C3A06D58D49ED0CF5DB3EC /* BarChartRenderer.swift */; }; - 7EA6B81624538BCC292467DC0E7832D0 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F85FACC2016BEC51568E2DA039871BA /* BubbleChartData.swift */; }; + 62BEAD080E107195393F8ABBA8C81572 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D27C9E57D9FF2AF21780555D5ABAD72 /* BarChartData.swift */; }; + 62C2F7F87CA413E2407F1F8DECA88949 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14CC39F6C23F4D5D781A2C4B60DF765D /* IChartDataSet.swift */; }; + 62E99A538A3363A9013DCCBF519B876F /* CellType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33379FD8AB582363EBE9071C28E58575 /* CellType.swift */; }; + 640C152125D86F7A3C9BDD7D18563CBA /* Platform+Gestures.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1225F47304F13FF1AC7386400F4ED87 /* Platform+Gestures.swift */; }; + 644CBE15115BFEDB16BF372F81CFF076 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ACC330581B8B5D9791487A217968559 /* PieRadarHighlighter.swift */; }; + 64A0821B4F9954E56639DAF9BD7E575C /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E240AEA05F9F44EE97E2D31F32D155F8 /* Transformer.swift */; }; + 66B829842549EECCE91E61D34FFABCBA /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80D29F462EBAF9532A128EC200F45E9 /* ScatterChartData.swift */; }; + 66FC952C43367208D641932AEB59DA8A /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11084C60F774B99DECB61B35E3EC7DD3 /* LineChartDataSet.swift */; }; + 6706FE594A5FC58BE59F7AA454982D93 /* SliderRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263007DB32EB3A923F7839CBF8E121BA /* SliderRow.swift */; }; + 675D24D585A2506762D77E6052517E00 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C32A2598D7B44B2489E4DB9D0CEEA55 /* IPieChartDataSet.swift */; }; + 6801E6D885988880F502EFA919360446 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EFBA8CE68D4633D9089932B8A4E3871 /* DefaultAxisValueFormatter.swift */; }; + 683F5BAD171DD257F3EC9472323B4BC7 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B08418091F0B05BA6BDCC363F96B8C43 /* RadarChartRenderer.swift */; }; + 6A532F6858B2D5219D76BEFE1E74A5A6 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A139CB129780B5CE6CC6A7ABE85922E /* HorizontalBarChartRenderer.swift */; }; + 6D13C3C40D5F2B21B4491B81002F2894 /* RuleEmail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32A4B20180EE2205670B1B03813AD23E /* RuleEmail.swift */; }; + 6FDD5EA5214B8CDC0E747916F07D74C2 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9423746E4BC0AD1992F5D13E2E1F9E70 /* YAxisRendererRadarChart.swift */; }; + 7005C904B5F05004C2BC6703E8B14F39 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99AC4BCC8856578AC43D03573FADE196 /* Validation.swift */; }; + 709152D66394DCE1D7D3802C65090118 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69BD15D5856F4E84E769AFD9438BF861 /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; + 7320CBA29BE1D473CA5BE26B1D226D04 /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AF80E9E9FD2ABA19F783C1FE8CEDE21 /* Animator.swift */; }; + 74D4DC9B702FBC147C03965E9F271128 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2507ADB972377DD593EFFA943EA075D0 /* CrossShapeRenderer.swift */; }; + 74EC68DA659219AB56A917312A73EA7D /* SelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01022F6F2F1BF3E5C5F500A0650CC1BF /* SelectorViewController.swift */; }; + 75B22CB8C580F73B117214B061436099 /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E940C1BB7A0182B5BD9433DF9D6E040F /* IMarker.swift */; }; + 7605565F28B5C078923EE0A3F5D7C86E /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCD106D95076EE34EC2C06B62908D944 /* ChartData.swift */; }; + 7731319719C1878AE7AF9D78705712AF /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E3D7678445542747F9C16A8ADD7CC0 /* Range.swift */; }; + 7ACE9E9A28CB14F6DB0D7218C8B50917 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC6B766C4F4809D41B6E083F9A3F0AC /* BubbleChartDataSet.swift */; }; + 7CDE8FB3A24BA483F4D2AFB70D990F70 /* Eureka-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A9A56A406C5958A1B025AF2BEADEAB5E /* Eureka-dummy.m */; }; + 7D605E2EF1E737244832E3329AE89746 /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFF6A340445BB493577104B53D9A7588 /* BarChartRenderer.swift */; }; + 7EA6B81624538BCC292467DC0E7832D0 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A76791113E26FF4E2E0456B3AFBEB78B /* BubbleChartData.swift */; }; 7EEDCE629FA937973E081443AAEEF514 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */; }; - 8104AC0D8B60EEC6FB5C73EAFA1934AA /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC4C9132328F362E9C3125EA0BB30F7F /* PieRadarChartViewBase.swift */; }; - 81FCFDD76834B83BF46D3741C79FF29A /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53A8210C66064E3B8F1EC9B6453B323 /* MarkerImage.swift */; }; - 821C23BCC87386E7EDAAF97B3C4F1D5D /* RowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774E64F62D19C0B99410BBF3B8FE0555 /* RowType.swift */; }; - 83907D8546A31C4C4B1E31DA90A0CD77 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6ADC76EF0EE1AE0F7877BAE8AC3430 /* ChartLimitLine.swift */; }; - 83BBD232FE2EA04587B21C81B73AFC09 /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F342C0D599983866B101EAD57EE965BC /* ChartDataEntryBase.swift */; }; - 8606577BE49942FFBE9764F6BAC993A8 /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 714555686E18EFF7F47B8D5E49DBEA3F /* BarHighlighter.swift */; }; - 8A92D825C03E19810B5393EFDFE4502E /* MultipleSelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3FB5D0BD363FB7F09E40CBD6821E463 /* MultipleSelectorViewController.swift */; }; - 8AFA10B7F0591080EA6BCBCC9CB34BE1 /* GenericMultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA9B73786C8C3F0A227107004B92E8D5 /* GenericMultipleSelectorRow.swift */; }; - 8CBA559D0C2045A8E6F7F9922C553F0F /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C079A2B4457B189E14F7ACCDF6210CB2 /* CandleChartDataProvider.swift */; }; - 8CDD660210D5A535F6725F30259E629A /* PresenterRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B21D20DD89ABCD133C907484489A4E9 /* PresenterRowType.swift */; }; - 8D62FB3504F2C9B9E0910E493637F7BE /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55ED648BE5F5D63433355F4029BE846A /* BarChartDataEntry.swift */; }; - 8E01F38A1667D8B2C57E20400D6BB425 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6CAE7AC4CEE072EBCA52375CFE7EAC8 /* LineRadarRenderer.swift */; }; - 8EE80878B32207C5EC1712D83F04983A /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BA5667ABB00F921823EE8C11E0C596 /* ChartDataSet.swift */; }; - 91704461340ABFBEB88425DCC9867890 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A52112890B03A2230EA87DE2074EBF66 /* HorizontalBarHighlighter.swift */; }; - 91FA70B412F137846836139ED890FF6C /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4DC8D9C55731586FBF6CA8B50AE3C8 /* ChartBaseDataSet.swift */; }; - 930F4FD273BB41A8D1BB1F07608B3028 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71C85204757B1DFD665A234DDC2CB843 /* RadarChartDataSet.swift */; }; - 93966518847AB0F104DFCC9DC5B63197 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86F8AE08B613E8389A122C6ED38A14A2 /* ChartHighlighter.swift */; }; - 9400854C32DFF16FD068D280CD43176F /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FCDBD5310D634048A381DF6344DCB8 /* AxisBase.swift */; }; - 94921CD3D3FBA3D6572678B1F59AA957 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD46C920FCFDF92D97C5CE6DA55653C /* TransformerHorizontalBarChart.swift */; }; - 970B9C4530EA8ACC31B005CE4523C91B /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDA597AD98E041BDF72BECA4E7CC21C /* AnimatedZoomViewJob.swift */; }; - 991A4EA362C241D77DF184594E226E93 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFCB038F9DFF63DB1A66A0BA0DE2FF3 /* ScatterChartView.swift */; }; - 9C081B18BB1A54D953EB89605319AA77 /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F7D2159259306783652FFC35C5F4BB5 /* Legend.swift */; }; - 9F668D7B0F3CEA3608D305A013A7BE48 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 679725EAA7D6C233678CE91C58906413 /* Highlight.swift */; }; - A02F150A74062D9E29592D3EBD13B777 /* StepperRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE837191BE21D305F27EADE4736036C7 /* StepperRow.swift */; }; - A4C99CE4C6D89F2107F6A280A0A85688 /* HeaderFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF31146E46DDECAC6A65C804FDFB9567 /* HeaderFooterView.swift */; }; - A688509392FC14A799979CEA50908A2D /* DataApproximator+N.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FE0C9E36C7E4EA71A9C0915DCDE460 /* DataApproximator+N.swift */; }; - A710DCACFF8FFEA66D7ACC5D1BD95C1D /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5CF5AF933F10270B89A5C7DA4913A6D /* XAxisRenderer.swift */; }; - A77DA0652E7847FE296224EEB12F7EBD /* RuleLength.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D2D7BC97BBDFE8D04CF6B579F20125 /* RuleLength.swift */; }; - A86CEF7063CDF44017CBFC67DEA1168E /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3589AD577F14D9EF3C1B486E3AE9AD1 /* ChevronUpShapeRenderer.swift */; }; - A91D4F561E5C16644A5D3A389609ACD6 /* DoublePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C23603F603481C63472733E4703D0D /* DoublePickerRow.swift */; }; - A95748A4D50EEB26B6290061C34DAA6D /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 377C3CF3DE13B0EC7726913B2DA966C9 /* AnimatedViewPortJob.swift */; }; - AA39F0560285BF5448411D429ED9408D /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6E347B4EC0B71AFAC54530B584158B /* IScatterChartDataSet.swift */; }; - AAA33D7843F1F33E3F9D6F261AB5C2B3 /* PickerInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BE7167E3A24661ED73D8E4CF4833587 /* PickerInlineRow.swift */; }; - AADC2477F0EC2A446D3342DCA1E220C8 /* TriplePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64CA3F06341E9548CF06B61574FDE552 /* TriplePickerInputRow.swift */; }; - ABC6878E21B62261BBB4E1631E5EDAF1 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECEF07022B6C554B4E9802C221B95B9 /* ChartDataEntry.swift */; }; - AC795F2AEFA1C804BABDB1D4931FAAEB /* RowProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C7772421B5C0539F7DC061340FF69FC /* RowProtocols.swift */; }; - AD1E6E99CE3807BF3DEE1BEBE6E3CAF2 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C3392B488D1C70CE763BEC834C6E40 /* BarChartView.swift */; }; - AEAB95AFD2529CDAF3A10D90A165CF16 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83942BEC8B7DB3645C30D60937AF2652 /* BarLineScatterCandleBubbleChartDataSet.swift */; }; - AF34EC6CDB336F35ACD18C2CA8428251 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0888FBF51D984A19315B2B45406842AE /* PieChartDataEntry.swift */; }; - AFCEB645D509F679CE8FBCFFEDBB65BC /* SwitchRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7AE0E1C416BB967B5624D0ECADD53F8 /* SwitchRow.swift */; }; - B00A1568A89DD820BC9063DC6961540D /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86222F70DF9BA5C9FD5BC0C57B44516 /* XAxis.swift */; }; - B14341E138DC6D05193C2866864E9DEC /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DCD9F34ED2EFAB655BF84EB19BF0B03 /* AxisRendererBase.swift */; }; - B45CE2B91939EC0EA7898C1C6BA16367 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249597AD33DF9857FD7F304A78EBA7DF /* ILineScatterCandleRadarChartDataSet.swift */; }; - B466D5B2650B7521FBE653FC9B7A793D /* DateInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF603CBA0282655DE10AB2E64E38A78 /* DateInlineRow.swift */; }; - B490953386257F2C8E03C1D632AC361E /* OptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E613BE0BFFB09D55A3AD7BC1EEFD4823 /* OptionsRow.swift */; }; - B65DAD4280582DBED3A5A2C62185B389 /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD461674D07DC3CCE2C5289E94480677 /* YAxisRenderer.swift */; }; - B6DF9275361EA04A959E38F4133C33B7 /* SwipeActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB8EF9C425A89B975BEF843FFF552985 /* SwipeActions.swift */; }; - B7F7A44644C42AB4F5FD569F6B1EAD58 /* Pods-LoopFollow-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 28609CC9D3828C150821F3AA18752A77 /* Pods-LoopFollow-dummy.m */; }; - B87DABFAA95CDA5DFDDD2F409FDD5DF3 /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 950BD31462B45700CCB1D7EC3B5EFDCB /* YAxisRendererHorizontalBarChart.swift */; }; - BB75859BDCF578D67C08E6E6741701EB /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA54E592B656A55A540BF36DF17957A /* PieChartRenderer.swift */; }; - BCD42880A54D247B7A68AC06335D0AF5 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72076E17F40C394C421E55A1B2A5B5AB /* YAxis.swift */; }; - BDD367ED4BB5510C86658115EE6BE71E /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B024F185ECED75F48C085E205179B60 /* CombinedHighlighter.swift */; }; - BE93E023215A8B4A05A2AEC8B7FAE170 /* InlineRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F7E3D2928552D57E8FFCA76AE2898BA /* InlineRowType.swift */; }; - C031EFD3013B5803C3B7A6D07E4721C0 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CADE2DFAF271071EECD3C92248F2192 /* CombinedChartData.swift */; }; - C08713DF3DF904E55D8A3E3775A6F3EB /* TriplePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4C0C98D51FEC617960BEE2F5E7EC507 /* TriplePickerRow.swift */; }; - C0F073D21CF9CB5F87F3F21044E98BF0 /* DateRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A5BD0C4DDD7D499A7B4F756946AA449 /* DateRow.swift */; }; - C2012E1E9FD44B75ECF4B4B3D3782293 /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B946915CF4D343517B51D33FD3A04BCF /* IndexAxisValueFormatter.swift */; }; - C299DDF2CE31D8489EFFD0B9D086F9FE /* SelectableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E81B1BBAF0B43F0A7937AAA509040657 /* SelectableSection.swift */; }; - C2F5EF0076B32E28969F73229409F94E /* DatePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87994AC80B253089EC8951B0916B1C1D /* DatePickerRow.swift */; }; - C45A1A018758BC37A59C89114F9A4F75 /* Platform+Touch Handling.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA9B460BCA0242A40EEA3451ECEA392E /* Platform+Touch Handling.swift */; }; - C4EB1DE2CCEE60A99EB5AA718DD67105 /* Eureka-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BB6D1BC5E7576A4EE182F66FDB70135E /* Eureka-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5562E6984BB0FDC8358F2737187DC90 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7105F1BABE60EE081EBDC3478EBDF544 /* Helpers.swift */; }; - C5880AE977F94A1AE25E756A805B7B0B /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3154F080DAF844406EBAD792DD1F1AC /* LineChartDataProvider.swift */; }; - C5A3430178D9993D8A5A13864AE40A45 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E075D6FF5CADB79137C6C0F8BD9AD8 /* ScatterChartDataProvider.swift */; }; - C63B306D3FAA845771A0B1CEB3F0DC16 /* TextAreaRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 631A847995A0DF85FFC969F478E97199 /* TextAreaRow.swift */; }; - C6F4045EAF5410768B595ED98863A250 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B8D6F073E0C9F1D0DC0A4EF5F00D80 /* Renderer.swift */; }; - C72D7A57303FE4E7E25AB747DD3A85AC /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239824BA5FBE5BA1E6FB1E33773E251B /* RadarChartDataEntry.swift */; }; - C742D0AA9431960E21B6203AF6D2F62B /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E5488781769EC1BC666BD556553C613 /* PieHighlighter.swift */; }; - C74F50DD266F0933B137D16ACD76FB1A /* RuleURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A865F9D1855A690E30467224D40412 /* RuleURL.swift */; }; - C798D8F553DB176CD793E27B4C309DC6 /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 729A12A9B7F0A0EE6EEE33B5176F30BB /* ChartDataRendererBase.swift */; }; - C7F30DCF3631591639429F38CDA24EBC /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E76DAA9695B062B079865671555A198 /* BarLineScatterCandleBubbleRenderer.swift */; }; - C8092EC19C870273D18B562A7EE9CD0F /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 745E6248CAB2E4A068E95D95FA0F1440 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; - C831261CF70AECC8AC9DDFDBFC3F7172 /* LabelRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CFDCD79EE4C6A3EB03E710810887DE9 /* LabelRow.swift */; }; - C97BE76AAB5C7242509D8482EBA86AE9 /* Form.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA3B623F7078308F6C63E600530AD2EC /* Form.swift */; }; - CAE986D939019B7726C896B88AC34B82 /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F8D402409FDE04B9AA68921C87A582A /* ScatterChartDataSet.swift */; }; - CB6E235EB0A5B896F9D1815877757EF9 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E0F07C3184BEE9EE73A064412FB3969 /* CandleChartData.swift */; }; - CDABB0AA47F0EEE957FCE629F8D2DB6B /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 288F47791ECB7EED768B2B26F8DCB68A /* BubbleChartView.swift */; }; - CEC814CFD549BCDDAB65F5918969182E /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5376E6450A6747741DC5879E846A8D4 /* IHighlighter.swift */; }; - CEF27164EA8A8C1BCB66B7A75E287216 /* ActionSheetRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964ECD689E6D753A7D3EBE859C86AB18 /* ActionSheetRow.swift */; }; - D68F93293888B6776369185028CB60B0 /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47ECE07091D1F3FAD8674F1494B51FD /* IBarChartDataSet.swift */; }; - D6E011A7BA193945CEA69517E40CBD48 /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9F8D990EA4AB722F7E4DDB271FBDF07 /* XShapeRenderer.swift */; }; - D75CBD8D2B4526B7DE24212AB7B24D20 /* RowControllerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F94BB85650EA9A8A660C2DF565554364 /* RowControllerType.swift */; }; - D7663970356A7FBA65579C1EB951220C /* SelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15189F1DAD306A270886D315DA65038 /* SelectorRow.swift */; }; - D7B623CFD7231E00FB60419AA17A3E82 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE56B02AC87347DA9DB74C57E343848 /* MoveViewJob.swift */; }; - D885D137C7BBBBA479BDB92A72B7D04E /* Platform+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45034360BF273A6E100C7D34B21A68B7 /* Platform+Color.swift */; }; - D9687FA7E8A77056DC5C8444EEA904E5 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C381C388D31FC8085089D38D9F55A7AE /* BarLineScatterCandleBubbleChartData.swift */; }; - D9FAA26AD41D565773823B074F93D909 /* DateFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4D1CD2B50CF172C70D4C70E118CF2D6 /* DateFieldRow.swift */; }; - DC28EC495C8806D9B9C0CB0C2F8E8673 /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD37D5B6C9777C0410BD7981DFEECAA0 /* LineScatterCandleRadarRenderer.swift */; }; - DD3CC52D093C0DF2CF8109C55CFFCD85 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5333884384F3F0617A1755CB9C04EA9 /* DefaultValueFormatter.swift */; }; - DDCAF53B6EE94F6ADF428036C2A85244 /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02064BFFCDD93F0B2E28045C270091A4 /* DataApproximator.swift */; }; - DFD06D79C71CCAEFA59D7DFBD706C493 /* DoublePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68EEFBE89237E60B56F262C7E544E55D /* DoublePickerInputRow.swift */; }; - E0F369B772C5C8F0AF3A1C8BA5674628 /* ButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3FB45C36C40B6053CC640379ABFF09 /* ButtonRow.swift */; }; - E2FF6F533C0CFB1461BA3D7B76B48A9C /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CA67E3BD944650F1EED5FA0B16BF2A9 /* DefaultFillFormatter.swift */; }; - E3E2A605AF119D1F90CE77963E6CFD26 /* SelectorAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCCDA1A52389202D21A2C0CE07AE0975 /* SelectorAlertController.swift */; }; - E3EDB632F407232103226EB2AF8C239D /* Charts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB5771835E6170F384829884E2B9985 /* Charts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4131026AAE1E3333FB46E14CED55F2A /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D365EA8C2BD866565B9032143F883585 /* ViewPortHandler.swift */; }; - E73D9F2950182C774E50E891F75C1BB4 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E4A96D0B3D1148D579EBBBE4099B43D /* LineChartView.swift */; }; - E7DA4EBBBFFF3EB6992CA11B921DD211 /* SegmentedRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD5D404866482790244CEA58FC02516 /* SegmentedRow.swift */; }; - E987F386AA63D0DCD22642A475A8EFD7 /* PickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC07EA79DDA9EF6E69EC9529D4BFE371 /* PickerInputRow.swift */; }; - E999737BF0D21446B7FFE4DA783EACB2 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61129B8933ABD9C897F5F3D21BFB0DEB /* ScatterChartRenderer.swift */; }; - E9AB923FC704B44222C8A5DB4145113A /* Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80318751D82A1232D25FE42BE09D9FFA /* Core.swift */; }; - EB9E8E94E8877C33E88295D89CF5D9CC /* RuleEqualsToRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 805041F849AC6045DBA321E0CBE414ED /* RuleEqualsToRow.swift */; }; - ECC149B136D4D63AF251912E051A142F /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF8BB64B5949D2CAA9B7D84B20B679E7 /* IShapeRenderer.swift */; }; - ED58A23EB5289726B5D74EFEEA590BDD /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BCBA4882939D2562643379A8CCDF2E6 /* LineChartData.swift */; }; - F1B3693550BD159B7E910C182326A44B /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5018E78EF154B922DA8A314E96C8EFE /* ChartAnimationEasing.swift */; }; - F2279E1339CC1B6326AD6FF389D24F96 /* DateInlineFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606EA49EC0D70404AA0567511C66F093 /* DateInlineFieldRow.swift */; }; - F2C1EF0010084FA2B769B019EBD6D909 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD429C5F2105C02645A5B0C4404E6276 /* CombinedChartView.swift */; }; - F47D1993C006C374C634B04421484A4D /* AlertOptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0704DED0FDFDBECD5D672C8122D09D3 /* AlertOptionsRow.swift */; }; - FC378CAAA9FD5B4B156B982EBDB12BA3 /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AD25BE0988BE256D99C8BD37264BF92 /* IRadarChartDataSet.swift */; }; - FECC68B085B27878A5C1F2FECC9F088F /* PushRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C98A13EC67B78112EB25C6A7E85200A /* PushRow.swift */; }; - FEFD4F20D5515E1D596FCFA083EB05D7 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE0989B752944E4E267D4EC37EC8BEF /* LineChartRenderer.swift */; }; + 8104AC0D8B60EEC6FB5C73EAFA1934AA /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2DE04D0335A389EA6CFE06E46448744 /* PieRadarChartViewBase.swift */; }; + 81FCFDD76834B83BF46D3741C79FF29A /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20212CB9D6FB4BFF75889AFB3C5646FC /* MarkerImage.swift */; }; + 821C23BCC87386E7EDAAF97B3C4F1D5D /* RowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B2271519AA755EB5C69A7284CAA6F23 /* RowType.swift */; }; + 83907D8546A31C4C4B1E31DA90A0CD77 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A4C0D12FF704C57F2F34EADF00CE47 /* ChartLimitLine.swift */; }; + 83BBD232FE2EA04587B21C81B73AFC09 /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 205BB79BE6C1FCA776CE1D4293B9CDE3 /* ChartDataEntryBase.swift */; }; + 8606577BE49942FFBE9764F6BAC993A8 /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51133B95E04FCEF52CECCBA0FA2FB64C /* BarHighlighter.swift */; }; + 8A92D825C03E19810B5393EFDFE4502E /* MultipleSelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A92BA872BE33DE132E60FA393324DB1 /* MultipleSelectorViewController.swift */; }; + 8AFA10B7F0591080EA6BCBCC9CB34BE1 /* GenericMultipleSelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 548BE84DABD9800530A1C66FE902B9C7 /* GenericMultipleSelectorRow.swift */; }; + 8CBA559D0C2045A8E6F7F9922C553F0F /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AFCBD39119B8A39E3A0CA0B9CE6C4FB /* CandleChartDataProvider.swift */; }; + 8CDD660210D5A535F6725F30259E629A /* PresenterRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FBA401AF5B307DD562DF29F2CC80553 /* PresenterRowType.swift */; }; + 8D62FB3504F2C9B9E0910E493637F7BE /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = B31407514FCEAE451A67BFB01F99FD57 /* BarChartDataEntry.swift */; }; + 8E01F38A1667D8B2C57E20400D6BB425 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA7E136F2C50A7AAEFD8EE9EA59AA762 /* LineRadarRenderer.swift */; }; + 8EE80878B32207C5EC1712D83F04983A /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D118C0F313FDC57A29E6BBB205A3799 /* ChartDataSet.swift */; }; + 91704461340ABFBEB88425DCC9867890 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61C45B0A3EA48AEABB9B6979D820216 /* HorizontalBarHighlighter.swift */; }; + 91FA70B412F137846836139ED890FF6C /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71786812E4BA34CFE31958629790D981 /* ChartBaseDataSet.swift */; }; + 930F4FD273BB41A8D1BB1F07608B3028 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FCC0B2AAFCFDCD7682F7C52CA90AEBC /* RadarChartDataSet.swift */; }; + 93966518847AB0F104DFCC9DC5B63197 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C2E8914194091C19C13CB44C9C7EA80 /* ChartHighlighter.swift */; }; + 9400854C32DFF16FD068D280CD43176F /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57AAE9789B991F46EFCE58CE338AED41 /* AxisBase.swift */; }; + 94921CD3D3FBA3D6572678B1F59AA957 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B605529F8016666F6C3794D9768CA5 /* TransformerHorizontalBarChart.swift */; }; + 970B9C4530EA8ACC31B005CE4523C91B /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540C2AE657DFD33D82A5800A9A30E715 /* AnimatedZoomViewJob.swift */; }; + 991A4EA362C241D77DF184594E226E93 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F93BB1EE57468D56B0F2972A1F23E8E4 /* ScatterChartView.swift */; }; + 9C081B18BB1A54D953EB89605319AA77 /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCBC3E7CA177D591BC893AB3839AF87 /* Legend.swift */; }; + 9F668D7B0F3CEA3608D305A013A7BE48 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55D5F888EBF0F894D53C98C99A93C2DB /* Highlight.swift */; }; + A02F150A74062D9E29592D3EBD13B777 /* StepperRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF639FF42B23B13286D9199B2D7C556 /* StepperRow.swift */; }; + A4C99CE4C6D89F2107F6A280A0A85688 /* HeaderFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F124EF1DD30BEFB748316D6CE0709B2E /* HeaderFooterView.swift */; }; + A688509392FC14A799979CEA50908A2D /* DataApproximator+N.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990AA38654ECD509645583469ADAFB2E /* DataApproximator+N.swift */; }; + A710DCACFF8FFEA66D7ACC5D1BD95C1D /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE582A1AABA555CA7E4333D8A82A6D9 /* XAxisRenderer.swift */; }; + A77DA0652E7847FE296224EEB12F7EBD /* RuleLength.swift in Sources */ = {isa = PBXBuildFile; fileRef = B73122FF47D657B6EE798456F35C01B8 /* RuleLength.swift */; }; + A86CEF7063CDF44017CBFC67DEA1168E /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21406035541105CB111B7A60D6C8FE35 /* ChevronUpShapeRenderer.swift */; }; + A91D4F561E5C16644A5D3A389609ACD6 /* DoublePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067C4CFC921FC0C56F6C5B3B4240008 /* DoublePickerRow.swift */; }; + A95748A4D50EEB26B6290061C34DAA6D /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59CE156C94B888A75504D963FB95A5A7 /* AnimatedViewPortJob.swift */; }; + AA39F0560285BF5448411D429ED9408D /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A869216FA3AC6BF4E9E522958EEC835A /* IScatterChartDataSet.swift */; }; + AAA33D7843F1F33E3F9D6F261AB5C2B3 /* PickerInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 484636B2979047FB29E457F1E1725FD9 /* PickerInlineRow.swift */; }; + AADC2477F0EC2A446D3342DCA1E220C8 /* TriplePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ED88FD8F5C5DE12E98FA1F15BA06F85 /* TriplePickerInputRow.swift */; }; + AB53E15E90B6A71CAF72834B072D88D3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; + ABC6878E21B62261BBB4E1631E5EDAF1 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8520A7F8F8673F94B6DDE4B08E471B6 /* ChartDataEntry.swift */; }; + AC795F2AEFA1C804BABDB1D4931FAAEB /* RowProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0682A5A7DECA0B6B492499FF9E0BCE22 /* RowProtocols.swift */; }; + AD1E6E99CE3807BF3DEE1BEBE6E3CAF2 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A88AC66D4BA5F2606CBD23F8BC468D4 /* BarChartView.swift */; }; + AEAB95AFD2529CDAF3A10D90A165CF16 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8A8EC434DD8733B56039AB331048F1 /* BarLineScatterCandleBubbleChartDataSet.swift */; }; + AF34EC6CDB336F35ACD18C2CA8428251 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB789687F3D81D3F4CB82C2550645219 /* PieChartDataEntry.swift */; }; + AFCEB645D509F679CE8FBCFFEDBB65BC /* SwitchRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1396F9374A230FAADC599E8FA2CA92 /* SwitchRow.swift */; }; + B00A1568A89DD820BC9063DC6961540D /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35BFB3FED5774078472BE1B4BFB69E66 /* XAxis.swift */; }; + B14341E138DC6D05193C2866864E9DEC /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE9378CE08AC95D1C70F245CCC10937 /* AxisRendererBase.swift */; }; + B45CE2B91939EC0EA7898C1C6BA16367 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 914FD2A2403BAC9475234D3B9A7B13D4 /* ILineScatterCandleRadarChartDataSet.swift */; }; + B466D5B2650B7521FBE653FC9B7A793D /* DateInlineRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 082D9D903940DEE55728285DC66D61EB /* DateInlineRow.swift */; }; + B490953386257F2C8E03C1D632AC361E /* OptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E8F18420183616B27CA1A9863B96A94 /* OptionsRow.swift */; }; + B65DAD4280582DBED3A5A2C62185B389 /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A1B6FFE86F41186B23437AC8B0AD94 /* YAxisRenderer.swift */; }; + B66CAEA692B43131362E25A49DDF71EF /* Pods-LoopFollow-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E41188828C3ADE7A96C4DA6ED1CCDA2 /* Pods-LoopFollow-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B6DF9275361EA04A959E38F4133C33B7 /* SwipeActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F8A26F11880F80D57A284B6094FF410 /* SwipeActions.swift */; }; + B87DABFAA95CDA5DFDDD2F409FDD5DF3 /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52B736816C4134465DD07E7A3C6EE82 /* YAxisRendererHorizontalBarChart.swift */; }; + BB75859BDCF578D67C08E6E6741701EB /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89110FD8C719CD0408D733C769EECC7 /* PieChartRenderer.swift */; }; + BCD42880A54D247B7A68AC06335D0AF5 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9C9FC3F24D3132834031FBA0497B6 /* YAxis.swift */; }; + BDD367ED4BB5510C86658115EE6BE71E /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE34CABB424024A41851C39678BA5EF3 /* CombinedHighlighter.swift */; }; + BE93E023215A8B4A05A2AEC8B7FAE170 /* InlineRowType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7967D1617EF3687E7EA393DDFEBC8B31 /* InlineRowType.swift */; }; + C031EFD3013B5803C3B7A6D07E4721C0 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 919647803888A5B15DB3222FCDA56E0A /* CombinedChartData.swift */; }; + C08713DF3DF904E55D8A3E3775A6F3EB /* TriplePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D8EB04398FDB94F46498AD99A989CA8 /* TriplePickerRow.swift */; }; + C0F073D21CF9CB5F87F3F21044E98BF0 /* DateRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68406FC37BCF5DE56607C70BA1C3EBC5 /* DateRow.swift */; }; + C2012E1E9FD44B75ECF4B4B3D3782293 /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B780059D2B1759DB0B490F39320EF494 /* IndexAxisValueFormatter.swift */; }; + C299DDF2CE31D8489EFFD0B9D086F9FE /* SelectableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C0DC7BD82B4AEB6E245BAF4F6B3746 /* SelectableSection.swift */; }; + C2F5EF0076B32E28969F73229409F94E /* DatePickerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DAC497D7FAFA91FCC10B7463162949B /* DatePickerRow.swift */; }; + C45A1A018758BC37A59C89114F9A4F75 /* Platform+Touch Handling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527868253626F5726DA92BB29CCA64F5 /* Platform+Touch Handling.swift */; }; + C4EB1DE2CCEE60A99EB5AA718DD67105 /* Eureka-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 425EDA696831087CE695C0052A266AF7 /* Eureka-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5562E6984BB0FDC8358F2737187DC90 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00456494744A907EC58DC4BA16D53DD9 /* Helpers.swift */; }; + C5880AE977F94A1AE25E756A805B7B0B /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C515318E4A075DCC3455EA33F32672 /* LineChartDataProvider.swift */; }; + C5A3430178D9993D8A5A13864AE40A45 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 947C167AF75DD780C25483F12F12822B /* ScatterChartDataProvider.swift */; }; + C63B306D3FAA845771A0B1CEB3F0DC16 /* TextAreaRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 428FF5D0423FE20B4F82273AE39B347F /* TextAreaRow.swift */; }; + C6F4045EAF5410768B595ED98863A250 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F31DFAC4317F012937CBC2CDADF0B452 /* Renderer.swift */; }; + C72D7A57303FE4E7E25AB747DD3A85AC /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71A6113B0BF33B6BE24E733E54B29F11 /* RadarChartDataEntry.swift */; }; + C742D0AA9431960E21B6203AF6D2F62B /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2D931E90044D88802D3FD030161D3C8 /* PieHighlighter.swift */; }; + C74F50DD266F0933B137D16ACD76FB1A /* RuleURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99E407FE7A788430D697A04C2DDC4BE6 /* RuleURL.swift */; }; + C798D8F553DB176CD793E27B4C309DC6 /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5BDBD9C81A644553CCFCA2CEFF4633 /* ChartDataRendererBase.swift */; }; + C7F30DCF3631591639429F38CDA24EBC /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346C3FCE7CD5ADF791B7B4734B94FC6A /* BarLineScatterCandleBubbleRenderer.swift */; }; + C8092EC19C870273D18B562A7EE9CD0F /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DFB2F0E62325600A27627339CCDDDD /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; + C831261CF70AECC8AC9DDFDBFC3F7172 /* LabelRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2982FD762FA7E78B9C8674FDBF7C488 /* LabelRow.swift */; }; + C97BE76AAB5C7242509D8482EBA86AE9 /* Form.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5471DA369762341AFA788636BF5238B0 /* Form.swift */; }; + CAE986D939019B7726C896B88AC34B82 /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C61637BA5B312D410FE6D08195ECCE1 /* ScatterChartDataSet.swift */; }; + CB6E235EB0A5B896F9D1815877757EF9 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FABD11111F00FECAB5D76CA8D511540A /* CandleChartData.swift */; }; + CDABB0AA47F0EEE957FCE629F8D2DB6B /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92E073284CCFB590C93D4DC4AF39731B /* BubbleChartView.swift */; }; + CEC814CFD549BCDDAB65F5918969182E /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A13F8D0A0BEAE5837834E66A8B1AAB8B /* IHighlighter.swift */; }; + CEF27164EA8A8C1BCB66B7A75E287216 /* ActionSheetRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4579AB6A714D0B0145487000C5B95DD8 /* ActionSheetRow.swift */; }; + D68F93293888B6776369185028CB60B0 /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46FC3BFFBF3E488A77264AF9F2A376D3 /* IBarChartDataSet.swift */; }; + D6E011A7BA193945CEA69517E40CBD48 /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F61CC9BC348F45A50AD5AB2ED815BAB /* XShapeRenderer.swift */; }; + D75CBD8D2B4526B7DE24212AB7B24D20 /* RowControllerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63B59B19AC178737F69F4E653E3D3C3C /* RowControllerType.swift */; }; + D7663970356A7FBA65579C1EB951220C /* SelectorRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC18BFAFFF03439AE7FC5425BC06568 /* SelectorRow.swift */; }; + D7B623CFD7231E00FB60419AA17A3E82 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8539432E41C7FAB4F3E455D0FC889F /* MoveViewJob.swift */; }; + D7D17805603B1DD6F02D8108C31090E5 /* ShareClient-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F458F913F6215D5244FD4EFCE470807B /* ShareClient-dummy.m */; }; + D885D137C7BBBBA479BDB92A72B7D04E /* Platform+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C854F81EB4FC44FABBDCDA04740B70 /* Platform+Color.swift */; }; + D9687FA7E8A77056DC5C8444EEA904E5 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E329C10FB955618FAB19FE474DB7071E /* BarLineScatterCandleBubbleChartData.swift */; }; + D9FAA26AD41D565773823B074F93D909 /* DateFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE9F53293DA948FB69D6A7E95F323FB4 /* DateFieldRow.swift */; }; + DC28EC495C8806D9B9C0CB0C2F8E8673 /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97FE7FFB6C5E1BCD95EB806FAF00E4FC /* LineScatterCandleRadarRenderer.swift */; }; + DD3CC52D093C0DF2CF8109C55CFFCD85 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16C72CDF15178DB4843E0353D0DAD8AF /* DefaultValueFormatter.swift */; }; + DDCAF53B6EE94F6ADF428036C2A85244 /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E27A5743F40167D8B6E7F58FB53D7607 /* DataApproximator.swift */; }; + DFD06D79C71CCAEFA59D7DFBD706C493 /* DoublePickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E815F54AB4445B900090ACEE3A2FFF04 /* DoublePickerInputRow.swift */; }; + E0F369B772C5C8F0AF3A1C8BA5674628 /* ButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EE47C8EFAFB7A567F4AFF90304521 /* ButtonRow.swift */; }; + E2FF6F533C0CFB1461BA3D7B76B48A9C /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16F7E6A55623407EB9928C72D9EE3B5F /* DefaultFillFormatter.swift */; }; + E3E2A605AF119D1F90CE77963E6CFD26 /* SelectorAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F2849FC47AE118D4F91DF4314FFF6BB /* SelectorAlertController.swift */; }; + E3EDB632F407232103226EB2AF8C239D /* Charts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D753B6F3540FE6A7C56D2547C3EEF851 /* Charts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4131026AAE1E3333FB46E14CED55F2A /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B9AD34B61808B09D75C28FEB6901A0 /* ViewPortHandler.swift */; }; + E73D9F2950182C774E50E891F75C1BB4 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B632A9A6846FCE64A0A99A4D151E615 /* LineChartView.swift */; }; + E7DA4EBBBFFF3EB6992CA11B921DD211 /* SegmentedRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B137D762352C7744393FACFC24CC97 /* SegmentedRow.swift */; }; + E987F386AA63D0DCD22642A475A8EFD7 /* PickerInputRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF358AA0AFC2C0AF0152E704E7512517 /* PickerInputRow.swift */; }; + E999737BF0D21446B7FFE4DA783EACB2 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FD22F889858CF5ECBE1B37789BB2E68 /* ScatterChartRenderer.swift */; }; + E9AB923FC704B44222C8A5DB4145113A /* Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8183772B19A56CF748806153BF97D089 /* Core.swift */; }; + EB9E8E94E8877C33E88295D89CF5D9CC /* RuleEqualsToRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93DBEA6C1381CFA8F6B6DFD85A9A5A02 /* RuleEqualsToRow.swift */; }; + ECC149B136D4D63AF251912E051A142F /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DB219299A8A67D5EC1C43C6BF5A8EE4 /* IShapeRenderer.swift */; }; + ED58A23EB5289726B5D74EFEEA590BDD /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D365274AEF519C7E50E8567DEBC9CEF3 /* LineChartData.swift */; }; + F1B3693550BD159B7E910C182326A44B /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 254111998274AAAA1452EBD98043BD22 /* ChartAnimationEasing.swift */; }; + F1B37767979921C4758B54144610815D /* Pods-LoopFollow-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 28609CC9D3828C150821F3AA18752A77 /* Pods-LoopFollow-dummy.m */; }; + F2279E1339CC1B6326AD6FF389D24F96 /* DateInlineFieldRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDFAF86922EDD701C440B78809BA7858 /* DateInlineFieldRow.swift */; }; + F2C1EF0010084FA2B769B019EBD6D909 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B27115EBCC224F7D67778C26B1275B8 /* CombinedChartView.swift */; }; + F47D1993C006C374C634B04421484A4D /* AlertOptionsRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6153DD0B9FA40F02377E5F8A060E378 /* AlertOptionsRow.swift */; }; + FC378CAAA9FD5B4B156B982EBDB12BA3 /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16D4AC313CBD7A5E08DA0B52709B04CA /* IRadarChartDataSet.swift */; }; + FECC68B085B27878A5C1F2FECC9F088F /* PushRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 589103C5CFBCC41339AECEF41A55A87A /* PushRow.swift */; }; + FEFD4F20D5515E1D596FCFA083EB05D7 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB9DAFB27FC7A51349BE9255F640DCF /* LineChartRenderer.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 67241C8E1C4F3763EEFBE1158914CC77 /* PBXContainerItemProxy */ = { + 7272ABD8A5C4DE0FAA10777D4FE249DD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = BF03B0B2B8B052092CB5F90CC5FB3757; remoteInfo = Charts; }; - 6CD95FF1D5DAF8313F0757EB40F5C9A3 /* PBXContainerItemProxy */ = { + 768CF338A2BC484E9597CD398DFA4136 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 32507FDB9BAD6EF17DCB14A888ECA5D9; + remoteInfo = ShareClient; + }; + 87D6DD57B95016F1515B8CA873C52B51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -243,249 +255,259 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 000D3C28CD7966485DFAD40B2C9874B4 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = ""; }; - 012D858F75E53844C8DB0E8745A4245F /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; - 015C2D96C13D444803A9754ABE5B9F39 /* Charts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-prefix.pch"; sourceTree = ""; }; - 02064BFFCDD93F0B2E28045C270091A4 /* DataApproximator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataApproximator.swift; path = Source/Charts/Filters/DataApproximator.swift; sourceTree = ""; }; - 03A865F9D1855A690E30467224D40412 /* RuleURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleURL.swift; path = Source/Validations/RuleURL.swift; sourceTree = ""; }; - 053BA00FFC9D0CCCA874716694EF87DA /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; - 071D24D80B9E2809386D89EE81F176E2 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; + 00184B71D9C00EA8FDF24D6CE7E8617B /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; + 00456494744A907EC58DC4BA16D53DD9 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Source/Core/Helpers.swift; sourceTree = ""; }; + 01022F6F2F1BF3E5C5F500A0650CC1BF /* SelectorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorViewController.swift; path = Source/Rows/Controllers/SelectorViewController.swift; sourceTree = ""; }; + 017205CE9DD9404E68FC3A813A5BC6A4 /* Charts.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.debug.xcconfig; sourceTree = ""; }; + 01B137D762352C7744393FACFC24CC97 /* SegmentedRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SegmentedRow.swift; path = Source/Rows/SegmentedRow.swift; sourceTree = ""; }; + 02E9C61C3E7EBE33601F29273FD0610F /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; + 03233AB6D94FE12321C740972ECDCC7C /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = ""; }; + 059FA0BC581C628A7E67661ABCE587BD /* ShareClient.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ShareClient.modulemap; sourceTree = ""; }; + 0682A5A7DECA0B6B492499FF9E0BCE22 /* RowProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowProtocols.swift; path = Source/Core/RowProtocols.swift; sourceTree = ""; }; 082977F3777A7D434AB35C357B487F83 /* Eureka.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Eureka.framework; path = Eureka.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0888FBF51D984A19315B2B45406842AE /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = ""; }; - 0ABEA1E706788F7FB4AEF5ABDA5884A2 /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; - 0AD25BE0988BE256D99C8BD37264BF92 /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; - 0B024F185ECED75F48C085E205179B60 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; - 0B352DD04711E5CD1288B6F43CA78EAD /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = ""; }; - 0C86B0118C269219B26CEB29BFEB2BE7 /* ListCheckRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ListCheckRow.swift; path = Source/Rows/SelectableRows/ListCheckRow.swift; sourceTree = ""; }; - 0E4A96D0B3D1148D579EBBBE4099B43D /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; - 0F7E3D2928552D57E8FFCA76AE2898BA /* InlineRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InlineRowType.swift; path = Source/Core/InlineRowType.swift; sourceTree = ""; }; - 155737109C81D674801FCC3A99A51918 /* IMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IMarker.swift; path = Source/Charts/Components/IMarker.swift; sourceTree = ""; }; + 082D9D903940DEE55728285DC66D61EB /* DateInlineRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInlineRow.swift; path = Source/Rows/DateInlineRow.swift; sourceTree = ""; }; + 0A7DA86EA696B87A80FF54CABA26548A /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; + 0AB3F85B18411852AC6F1EEBBB6D9DCA /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = ""; }; + 0AB9DAFB27FC7A51349BE9255F640DCF /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; + 0C1F35E26A6B017DFE6EA7B2EEF34E01 /* ShareClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareClient.swift; path = ShareClient/ShareClient.swift; sourceTree = ""; }; + 0C2E8914194091C19C13CB44C9C7EA80 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = ""; }; + 0C32A2598D7B44B2489E4DB9D0CEEA55 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Source/Charts/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; + 0C61637BA5B312D410FE6D08195ECCE1 /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; + 0D9E3F84B8F3CDDF959B5457AC2CF6D9 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = ""; }; + 0DAC497D7FAFA91FCC10B7463162949B /* DatePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatePickerRow.swift; path = Source/Rows/DatePickerRow.swift; sourceTree = ""; }; + 0DB219299A8A67D5EC1C43C6BF5A8EE4 /* IShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/IShapeRenderer.swift; sourceTree = ""; }; + 0FD22F889858CF5ECBE1B37789BB2E68 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; + 11084C60F774B99DECB61B35E3EC7DD3 /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; + 11C0DC7BD82B4AEB6E245BAF4F6B3746 /* SelectableSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectableSection.swift; path = Source/Core/SelectableSection.swift; sourceTree = ""; }; + 11D57BEB61E5B0C8070F999D1C04F128 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = ""; }; + 13243CBC570EC1C4F0410EAB1D89DF92 /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = ""; }; + 14CC39F6C23F4D5D781A2C4B60DF765D /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Source/Charts/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; 1572E89B2070E8BDB7D3E2CBF51DE672 /* Pods-LoopFollow-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LoopFollow-acknowledgements.plist"; sourceTree = ""; }; - 15AE42BF26F6B49F108794BABAF01BE8 /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; - 16819173DF628B0FC53570AE9383A1E9 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; - 168949456FDA5D72FC492981BF2AB55E /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; + 16C72CDF15178DB4843E0353D0DAD8AF /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = ""; }; + 16D4AC313CBD7A5E08DA0B52709B04CA /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; 16D6C652182636AC8246D4751AEC2B19 /* Pods-LoopFollow-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LoopFollow-Info.plist"; sourceTree = ""; }; + 16F7E6A55623407EB9928C72D9EE3B5F /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = ""; }; 1955DA138EA7F33CEC4481481CBCD451 /* Pods-LoopFollow.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-LoopFollow.modulemap"; sourceTree = ""; }; - 1A67B7A482098A7B6617635A36A70C54 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; - 1B51FA0A7F212B5A0C265121FBB47A8F /* Charts.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.release.xcconfig; sourceTree = ""; }; - 1C7A9E25022D8E2DE5F4B5ABCFF8073B /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Source/Charts/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; - 1C992A46C86EB9DE636AF70545363749 /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; - 212BC3B1A39FD603CF008C6589F8D495 /* Eureka.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Eureka.modulemap; sourceTree = ""; }; - 21F934EBBD0C767A7DA6DEB455943843 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = ""; }; - 2275ABB30ED7FCACFB71FDEF947219F2 /* RuleEmail.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleEmail.swift; path = Source/Validations/RuleEmail.swift; sourceTree = ""; }; - 239824BA5FBE5BA1E6FB1E33773E251B /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = ""; }; - 249597AD33DF9857FD7F304A78EBA7DF /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 254A6B4D102F8420A54512389166B1E8 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = ""; }; + 1B155A2FCCFFC4A5633BA14B82C657F3 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; + 1B2271519AA755EB5C69A7284CAA6F23 /* RowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowType.swift; path = Source/Core/RowType.swift; sourceTree = ""; }; + 1B360F02EE859A284562621B5BC8061F /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; + 1CD849B795C7F3EE32C6353297C6F4CF /* Charts.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.release.xcconfig; sourceTree = ""; }; + 1EBF436B7501608AB33DA5DEF29C213A /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = ""; }; + 1F1396F9374A230FAADC599E8FA2CA92 /* SwitchRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchRow.swift; path = Source/Rows/SwitchRow.swift; sourceTree = ""; }; + 20212CB9D6FB4BFF75889AFB3C5646FC /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = ""; }; + 205BB79BE6C1FCA776CE1D4293B9CDE3 /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = ""; }; + 20EACBD53E243A3F9DF8735D46C2460E /* Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Row.swift; path = Source/Core/Row.swift; sourceTree = ""; }; + 21406035541105CB111B7A60D6C8FE35 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = ""; }; + 21FF0C890A9774E7FC5E8434FB5FDA41 /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = ""; }; + 2507ADB972377DD593EFFA943EA075D0 /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CrossShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift; sourceTree = ""; }; + 254111998274AAAA1452EBD98043BD22 /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Source/Charts/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; + 263007DB32EB3A923F7839CBF8E121BA /* SliderRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SliderRow.swift; path = Source/Rows/SliderRow.swift; sourceTree = ""; }; + 26A4C0D12FF704C57F2F34EADF00CE47 /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = ""; }; + 27E029128823B9D672A01E4BB4DAD95B /* ShareClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ShareClient.debug.xcconfig; sourceTree = ""; }; 28609CC9D3828C150821F3AA18752A77 /* Pods-LoopFollow-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LoopFollow-dummy.m"; sourceTree = ""; }; - 288F47791ECB7EED768B2B26F8DCB68A /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = ""; }; - 2AD23361C3941A28A568A73F5E2A0C96 /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; - 2AD46C920FCFDF92D97C5CE6DA55653C /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = ""; }; - 2C2A801B59BAFE6387217B3B12162AFB /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = ""; }; - 2C7772421B5C0539F7DC061340FF69FC /* RowProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowProtocols.swift; path = Source/Core/RowProtocols.swift; sourceTree = ""; }; - 2D7F12C82F13C5D254AFDD932BB189E2 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; - 2FB31C7D459AACCCDAD58C4427C65B1F /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + 28E3D7678445542747F9C16A8ADD7CC0 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = ""; }; + 29A3C6AB4C2213910B58D3A525336E5E /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; + 2C9CD0FB1963D56F3399E0EF8469A0FA /* Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protocols.swift; path = Source/Rows/Common/Protocols.swift; sourceTree = ""; }; + 2CE0760BAB5896395C25F90C2A921230 /* Charts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Charts.modulemap; sourceTree = ""; }; + 2CEC4ADA231B20F225A0C0800CF05406 /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = ""; }; + 2D27C9E57D9FF2AF21780555D5ABAD72 /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; + 2D5C4B57627CE6A33CA5AFF28D7B4470 /* MultipleSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipleSelectorRow.swift; path = Source/Rows/MultipleSelectorRow.swift; sourceTree = ""; }; + 2E8F18420183616B27CA1A9863B96A94 /* OptionsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionsRow.swift; path = Source/Rows/Common/OptionsRow.swift; sourceTree = ""; }; + 2ED88FD8F5C5DE12E98FA1F15BA06F85 /* TriplePickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriplePickerInputRow.swift; path = Source/Rows/TriplePickerInputRow.swift; sourceTree = ""; }; + 2EEB10C82369CAF70178A725C299F81E /* PickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerRow.swift; path = Source/Rows/PickerRow.swift; sourceTree = ""; }; + 2EFBA8CE68D4633D9089932B8A4E3871 /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = ""; }; + 2F2849FC47AE118D4F91DF4314FFF6BB /* SelectorAlertController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorAlertController.swift; path = Source/Rows/Controllers/SelectorAlertController.swift; sourceTree = ""; }; + 2F8A26F11880F80D57A284B6094FF410 /* SwipeActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActions.swift; path = Source/Core/SwipeActions.swift; sourceTree = ""; }; 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 31BA5667ABB00F921823EE8C11E0C596 /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; - 34F84715AE8809D6316FF9BCEAD20DCA /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = ""; }; - 372778BB7FE2428A1F850F71B3BB5F37 /* Row.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Row.swift; path = Source/Core/Row.swift; sourceTree = ""; }; - 377C3CF3DE13B0EC7726913B2DA966C9 /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; - 378C21F8B8F022E50AA5A54C32444EEA /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; - 37BE1D35B7B996A40A09DBA627975CAD /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; - 3B21D20DD89ABCD133C907484489A4E9 /* PresenterRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresenterRowType.swift; path = Source/Core/PresenterRowType.swift; sourceTree = ""; }; - 3CF2AAADC8530B44EFDAFDF76424ACB9 /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = ""; }; - 3CFDCD79EE4C6A3EB03E710810887DE9 /* LabelRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LabelRow.swift; path = Source/Rows/LabelRow.swift; sourceTree = ""; }; - 3D88CE352A90F7E9AC65DFA6D8885891 /* CheckRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckRow.swift; path = Source/Rows/CheckRow.swift; sourceTree = ""; }; - 3E24A04789464015C22D87D5E3A60671 /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = ""; }; - 4079FC6B8F8238BE5842EC9593970ED4 /* IValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IValueFormatter.swift; path = Source/Charts/Formatters/IValueFormatter.swift; sourceTree = ""; }; + 32A4B20180EE2205670B1B03813AD23E /* RuleEmail.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleEmail.swift; path = Source/Validations/RuleEmail.swift; sourceTree = ""; }; + 32C854F81EB4FC44FABBDCDA04740B70 /* Platform+Color.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Color.swift"; path = "Source/Charts/Utils/Platform+Color.swift"; sourceTree = ""; }; + 3310EBD9F2A5EB47D39A359FDA666961 /* ShareClient-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ShareClient-prefix.pch"; sourceTree = ""; }; + 33379FD8AB582363EBE9071C28E58575 /* CellType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CellType.swift; path = Source/Core/CellType.swift; sourceTree = ""; }; + 346C3FCE7CD5ADF791B7B4734B94FC6A /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; + 358D210738B60758170EEAB4EBFD35F7 /* RuleRequired.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRequired.swift; path = Source/Validations/RuleRequired.swift; sourceTree = ""; }; + 35BFB3FED5774078472BE1B4BFB69E66 /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = ""; }; + 38DFB2F0E62325600A27627339CCDDDD /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; + 3AF80E9E9FD2ABA19F783C1FE8CEDE21 /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = ""; }; + 3B417B1F0CF4DCEC4917E71B8477B9E1 /* DecimalFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecimalFormatter.swift; path = Source/Rows/Common/DecimalFormatter.swift; sourceTree = ""; }; + 3D5BDBD9C81A644553CCFCA2CEFF4633 /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; + 3DF639FF42B23B13286D9199B2D7C556 /* StepperRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StepperRow.swift; path = Source/Rows/StepperRow.swift; sourceTree = ""; }; + 3F9B961D3E7671D04E9474A1C7A2194F /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = ""; }; + 425EDA696831087CE695C0052A266AF7 /* Eureka-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Eureka-umbrella.h"; sourceTree = ""; }; + 428FF5D0423FE20B4F82273AE39B347F /* TextAreaRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAreaRow.swift; path = Source/Rows/TextAreaRow.swift; sourceTree = ""; }; 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 44AB25DFE6C3A06D58D49ED0CF5DB3EC /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = ""; }; - 45034360BF273A6E100C7D34B21A68B7 /* Platform+Color.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Color.swift"; path = "Source/Charts/Utils/Platform+Color.swift"; sourceTree = ""; }; - 45FD6950945FE0889962B8261E67750E /* RuleRequired.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRequired.swift; path = Source/Validations/RuleRequired.swift; sourceTree = ""; }; - 480C03B7DF1E21E39BD90A9F76955F98 /* SelectorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorViewController.swift; path = Source/Rows/Controllers/SelectorViewController.swift; sourceTree = ""; }; - 481AA3E635F1093F5AB7FD74ADA9BDD9 /* AlertRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlertRow.swift; path = Source/Rows/AlertRow.swift; sourceTree = ""; }; - 4A5BD0C4DDD7D499A7B4F756946AA449 /* DateRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateRow.swift; path = Source/Rows/DateRow.swift; sourceTree = ""; }; + 44A1B6FFE86F41186B23437AC8B0AD94 /* YAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRenderer.swift; path = Source/Charts/Renderers/YAxisRenderer.swift; sourceTree = ""; }; + 4579AB6A714D0B0145487000C5B95DD8 /* ActionSheetRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ActionSheetRow.swift; path = Source/Rows/ActionSheetRow.swift; sourceTree = ""; }; + 4582F709E55ADE01009D1DF37A0D1A2C /* Eureka-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Eureka-Info.plist"; sourceTree = ""; }; + 45D5F14D7DBABC785E6B47E0AA271EE3 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; + 46FC3BFFBF3E488A77264AF9F2A376D3 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; + 484636B2979047FB29E457F1E1725FD9 /* PickerInlineRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInlineRow.swift; path = Source/Rows/PickerInlineRow.swift; sourceTree = ""; }; + 49992CCA5AEFDD6B4059FA55B46719E2 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; + 49B9AD34B61808B09D75C28FEB6901A0 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = ""; }; + 4B632A9A6846FCE64A0A99A4D151E615 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; 4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods_LoopFollow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_LoopFollow.framework; path = "Pods-LoopFollow.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 4BE549356A9D91D4E5A4967405F362C5 /* Charts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Charts.modulemap; sourceTree = ""; }; - 4EA35BC7CB0631FB6172FCC3939301CE /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = ""; }; - 4FA682FA297006A934B23EEF8E8E3191 /* FieldsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldsRow.swift; path = Source/Rows/FieldsRow.swift; sourceTree = ""; }; - 55ED648BE5F5D63433355F4029BE846A /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; - 575A3D70A90822811C6533EF48873537 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; - 57B547D32213ED4ACD5121E873E08B63 /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CrossShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift; sourceTree = ""; }; - 5F7D2159259306783652FFC35C5F4BB5 /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = ""; }; - 604618765E9FC4A4C41502066047493A /* SliderRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SliderRow.swift; path = Source/Rows/SliderRow.swift; sourceTree = ""; }; - 606EA49EC0D70404AA0567511C66F093 /* DateInlineFieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInlineFieldRow.swift; path = Source/Rows/Common/DateInlineFieldRow.swift; sourceTree = ""; }; - 60A0B1AFF34D1CE8A4698D476DAE19D1 /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = ""; }; - 60D3208F76CADE6D8572D57C206C965D /* Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protocols.swift; path = Source/Rows/Common/Protocols.swift; sourceTree = ""; }; - 61129B8933ABD9C897F5F3D21BFB0DEB /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; - 62109DDC014868EF85EAAC5DEA89E792 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; - 631A847995A0DF85FFC969F478E97199 /* TextAreaRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAreaRow.swift; path = Source/Rows/TextAreaRow.swift; sourceTree = ""; }; - 64CA3F06341E9548CF06B61574FDE552 /* TriplePickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriplePickerInputRow.swift; path = Source/Rows/TriplePickerInputRow.swift; sourceTree = ""; }; - 65AD3DF61E7279E34430EAA394531696 /* Charts.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Charts.debug.xcconfig; sourceTree = ""; }; - 666AEAC030E22BD0BDE90830AF057310 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; - 679725EAA7D6C233678CE91C58906413 /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = ""; }; - 68D2D7BC97BBDFE8D04CF6B579F20125 /* RuleLength.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleLength.swift; path = Source/Validations/RuleLength.swift; sourceTree = ""; }; - 68EEFBE89237E60B56F262C7E544E55D /* DoublePickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoublePickerInputRow.swift; path = Source/Rows/DoublePickerInputRow.swift; sourceTree = ""; }; - 68FDCFBE5C019D26281F7A56CAAFBD4A /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Source/Charts/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; - 6BCBA4882939D2562643379A8CCDF2E6 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; - 6C5FDCBCF25DC40CBD3324686E14C95A /* Platform+Gestures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Gestures.swift"; path = "Source/Charts/Utils/Platform+Gestures.swift"; sourceTree = ""; }; - 6E6ADC76EF0EE1AE0F7877BAE8AC3430 /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = ""; }; - 6F8D402409FDE04B9AA68921C87A582A /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; - 70230EF21C40FA0D1ED0CF3F82D0CCA5 /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; - 7105F1BABE60EE081EBDC3478EBDF544 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Source/Core/Helpers.swift; sourceTree = ""; }; - 714555686E18EFF7F47B8D5E49DBEA3F /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = ""; }; - 71C85204757B1DFD665A234DDC2CB843 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; - 72076E17F40C394C421E55A1B2A5B5AB /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = ""; }; - 729A12A9B7F0A0EE6EEE33B5176F30BB /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; - 742D75E835BBB864914066437E0F9AAF /* MultipleSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipleSelectorRow.swift; path = Source/Rows/MultipleSelectorRow.swift; sourceTree = ""; }; - 745E6248CAB2E4A068E95D95FA0F1440 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; - 774E64F62D19C0B99410BBF3B8FE0555 /* RowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowType.swift; path = Source/Core/RowType.swift; sourceTree = ""; }; - 79AAFAF1006DFD732C3559D661ABC07B /* RuleClosure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleClosure.swift; path = Source/Validations/RuleClosure.swift; sourceTree = ""; }; - 7BDA597AD98E041BDF72BECA4E7CC21C /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; - 7CADE2DFAF271071EECD3C92248F2192 /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; - 7CB81995CD9E3411271534F01DAD4592 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; - 7CF245263BA6245C01808ECB50BA7C48 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; - 7D25B6FD011B35288185B6EF33CDACC8 /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = ""; }; - 7E0F07C3184BEE9EE73A064412FB3969 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; + 4D28AE94DD8B0CC673A577C731C03431 /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = ""; }; + 4EFCC91F90BD17AD567D57CE537F2268 /* ShareClient-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ShareClient-Info.plist"; sourceTree = ""; }; + 4FFBD63A349249CCAC76EAE17C6E540A /* Charts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Charts-Info.plist"; sourceTree = ""; }; + 5067C4CFC921FC0C56F6C5B3B4240008 /* DoublePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoublePickerRow.swift; path = Source/Rows/DoublePickerRow.swift; sourceTree = ""; }; + 51133B95E04FCEF52CECCBA0FA2FB64C /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = ""; }; + 52777F38E94D175B30FD6CCE0503BE91 /* IValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IValueFormatter.swift; path = Source/Charts/Formatters/IValueFormatter.swift; sourceTree = ""; }; + 527868253626F5726DA92BB29CCA64F5 /* Platform+Touch Handling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Touch Handling.swift"; path = "Source/Charts/Utils/Platform+Touch Handling.swift"; sourceTree = ""; }; + 5284FBF634CFF42E384E18E1D82F111C /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Source/Charts/Charts/PieChartView.swift; sourceTree = ""; }; + 540C2AE657DFD33D82A5800A9A30E715 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; + 5471DA369762341AFA788636BF5238B0 /* Form.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Form.swift; path = Source/Core/Form.swift; sourceTree = ""; }; + 548BE84DABD9800530A1C66FE902B9C7 /* GenericMultipleSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GenericMultipleSelectorRow.swift; path = Source/Rows/Common/GenericMultipleSelectorRow.swift; sourceTree = ""; }; + 55D5F888EBF0F894D53C98C99A93C2DB /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = ""; }; + 55F11A5FF44761B6757A841E9A4FE3BD /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Source/Core/Operators.swift; sourceTree = ""; }; + 568C835AC8B764A0183271E99058B163 /* Cell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cell.swift; path = Source/Core/Cell.swift; sourceTree = ""; }; + 57AAE9789B991F46EFCE58CE338AED41 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = ""; }; + 589103C5CFBCC41339AECEF41A55A87A /* PushRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushRow.swift; path = Source/Rows/PushRow.swift; sourceTree = ""; }; + 59CE156C94B888A75504D963FB95A5A7 /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; + 5A92BA872BE33DE132E60FA393324DB1 /* MultipleSelectorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipleSelectorViewController.swift; path = Source/Rows/Controllers/MultipleSelectorViewController.swift; sourceTree = ""; }; + 5ACC330581B8B5D9791487A217968559 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; + 5B27115EBCC224F7D67778C26B1275B8 /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = ""; }; + 5D0D30B8F618735D32A0FCFC52EB805D /* NavigationAccessoryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigationAccessoryView.swift; path = Source/Core/NavigationAccessoryView.swift; sourceTree = ""; }; + 5F50F1D5643D6EBCA09E428806984608 /* AlertRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlertRow.swift; path = Source/Rows/AlertRow.swift; sourceTree = ""; }; + 5F60B3D090DD53CC3BA96A41B6A0776C /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = ""; }; + 63B59B19AC178737F69F4E653E3D3C3C /* RowControllerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowControllerType.swift; path = Source/Core/RowControllerType.swift; sourceTree = ""; }; + 653297DA1AAAEEFC0BF5642F6604CDDC /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = ""; }; + 68406FC37BCF5DE56607C70BA1C3EBC5 /* DateRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateRow.swift; path = Source/Rows/DateRow.swift; sourceTree = ""; }; + 69BD15D5856F4E84E769AFD9438BF861 /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + 6FCBC3E7CA177D591BC893AB3839AF87 /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = ""; }; + 70FFA615C5AB19A462747668F6DFAE52 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; + 71786812E4BA34CFE31958629790D981 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; + 71A6113B0BF33B6BE24E733E54B29F11 /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = ""; }; + 720BAE67C4F9E996548ED7C3C156633E /* Eureka-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Eureka-prefix.pch"; sourceTree = ""; }; + 733827F65F5022C471A1447F04440570 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = ""; }; + 7967D1617EF3687E7EA393DDFEBC8B31 /* InlineRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InlineRowType.swift; path = Source/Core/InlineRowType.swift; sourceTree = ""; }; + 7AC48B177FD06557DCB9C5C3583D5B87 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; + 7D118C0F313FDC57A29E6BBB205A3799 /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; + 7D8EB04398FDB94F46498AD99A989CA8 /* TriplePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriplePickerRow.swift; path = Source/Rows/TriplePickerRow.swift; sourceTree = ""; }; 7E41188828C3ADE7A96C4DA6ED1CCDA2 /* Pods-LoopFollow-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LoopFollow-umbrella.h"; sourceTree = ""; }; - 7E5488781769EC1BC666BD556553C613 /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = ""; }; - 7E76DAA9695B062B079865671555A198 /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; - 7ECEF07022B6C554B4E9802C221B95B9 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; - 7EDC871696C42F364FF9E4FBF320D207 /* RuleRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRange.swift; path = Source/Validations/RuleRange.swift; sourceTree = ""; }; - 7F85FACC2016BEC51568E2DA039871BA /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; - 80318751D82A1232D25FE42BE09D9FFA /* Core.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Core.swift; path = Source/Core/Core.swift; sourceTree = ""; }; - 805041F849AC6045DBA321E0CBE414ED /* RuleEqualsToRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleEqualsToRow.swift; path = Source/Validations/RuleEqualsToRow.swift; sourceTree = ""; }; - 8096CF97803FE35D19082B189F139D53 /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 82516DCE2680E4E28B019A35C1AA85E7 /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = ""; }; - 82F1DEC08F246688F6E7531A3395E9B1 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; - 83942BEC8B7DB3645C30D60937AF2652 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 86F8AE08B613E8389A122C6ED38A14A2 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = ""; }; - 877048B6F67A34C1FD3885CD20CF3AC6 /* PopoverSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopoverSelectorRow.swift; path = Source/Rows/PopoverSelectorRow.swift; sourceTree = ""; }; - 87994AC80B253089EC8951B0916B1C1D /* DatePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatePickerRow.swift; path = Source/Rows/DatePickerRow.swift; sourceTree = ""; }; - 88E17727D64A26D166EA94F8B96ACAB4 /* Charts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Charts-dummy.m"; sourceTree = ""; }; - 8CA67E3BD944650F1EED5FA0B16BF2A9 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = ""; }; - 8CDFE98CDB50C3C14377F152923FF465 /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Source/Charts/Charts/PieChartView.swift; sourceTree = ""; }; - 8DB307AF5190BC0642C752B5DE6AEC4E /* Charts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Charts-Info.plist"; sourceTree = ""; }; - 8E147C593487F41985DF252E8462F8E5 /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = ""; }; - 8EF8E5F90E48A1146DE536864603C6B1 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; - 9157BC0B4AEB06D64AE7443A8BD5947D /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; - 929451489095A14748EE4AC0ECE015B3 /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 92D10EDF63A87D7BD2367F7E8DB62A50 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Core/Validation.swift; sourceTree = ""; }; - 950BD31462B45700CCB1D7EC3B5EFDCB /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 9640E3B61E9EB2E5999E6AF8A1E6D61A /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = ""; }; - 964ECD689E6D753A7D3EBE859C86AB18 /* ActionSheetRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ActionSheetRow.swift; path = Source/Rows/ActionSheetRow.swift; sourceTree = ""; }; - 972988CAA5B213B4B7E79E686D947066 /* Eureka.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Eureka.debug.xcconfig; sourceTree = ""; }; - 98C23603F603481C63472733E4703D0D /* DoublePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoublePickerRow.swift; path = Source/Rows/DoublePickerRow.swift; sourceTree = ""; }; - 9BE7167E3A24661ED73D8E4CF4833587 /* PickerInlineRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInlineRow.swift; path = Source/Rows/PickerInlineRow.swift; sourceTree = ""; }; - 9C086384F94A6CED2FB0EC4DA22CF685 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; - 9C98A13EC67B78112EB25C6A7E85200A /* PushRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushRow.swift; path = Source/Rows/PushRow.swift; sourceTree = ""; }; + 7FCC0B2AAFCFDCD7682F7C52CA90AEBC /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; + 805B8ACDB7AF64D4B1EFF9695D06D6E7 /* IFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IFillFormatter.swift; path = Source/Charts/Formatters/IFillFormatter.swift; sourceTree = ""; }; + 8183772B19A56CF748806153BF97D089 /* Core.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Core.swift; path = Source/Core/Core.swift; sourceTree = ""; }; + 87C515318E4A075DCC3455EA33F32672 /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; + 88506EF0DE39A04D24F910A93C337EFD /* ShareClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShareClient.h; path = ShareClient/ShareClient.h; sourceTree = ""; }; + 8A88AC66D4BA5F2606CBD23F8BC468D4 /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Source/Charts/Charts/BarChartView.swift; sourceTree = ""; }; + 8AFCBD39119B8A39E3A0CA0B9CE6C4FB /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; + 8F12CC35F78CEC5436F967BCF50C5EF0 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; + 8F49CC163BE65B796CE8B4C654F0B221 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = ""; }; + 9057EE1840994798463E40010C5B2BC5 /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = ""; }; + 914FD2A2403BAC9475234D3B9A7B13D4 /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + 91590B3C1B301C3DE53A488D68A81701 /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = ""; }; + 919647803888A5B15DB3222FCDA56E0A /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; + 92E073284CCFB590C93D4DC4AF39731B /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = ""; }; + 937E34112E8DDE6B37ECE22A0BDC59E7 /* ButtonRowWithPresent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonRowWithPresent.swift; path = Source/Rows/ButtonRowWithPresent.swift; sourceTree = ""; }; + 93DBEA6C1381CFA8F6B6DFD85A9A5A02 /* RuleEqualsToRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleEqualsToRow.swift; path = Source/Validations/RuleEqualsToRow.swift; sourceTree = ""; }; + 94046F1B95DF94D6E175F891C3C315AD /* SelectableRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectableRowType.swift; path = Source/Core/SelectableRowType.swift; sourceTree = ""; }; + 9423746E4BC0AD1992F5D13E2E1F9E70 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = ""; }; + 947C167AF75DD780C25483F12F12822B /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; + 94F34C60E8ABE81F99BFB0915A1517A0 /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + 97FE7FFB6C5E1BCD95EB806FAF00E4FC /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; + 989650FD7F5122CA9AC857FF507D818E /* Section.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Section.swift; path = Source/Core/Section.swift; sourceTree = ""; }; + 990AA38654ECD509645583469ADAFB2E /* DataApproximator+N.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DataApproximator+N.swift"; path = "Source/Charts/Filters/DataApproximator+N.swift"; sourceTree = ""; }; + 99445AF2EFD84919074857FAE2171830 /* RuleRegExp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRegExp.swift; path = Source/Validations/RuleRegExp.swift; sourceTree = ""; }; + 99A385B62C3482DFD4D1A6D9D36A48E8 /* Charts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-prefix.pch"; sourceTree = ""; }; + 99AC4BCC8856578AC43D03573FADE196 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Core/Validation.swift; sourceTree = ""; }; + 99E407FE7A788430D697A04C2DDC4BE6 /* RuleURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleURL.swift; path = Source/Validations/RuleURL.swift; sourceTree = ""; }; + 9A139CB129780B5CE6CC6A7ABE85922E /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9DCD9F34ED2EFAB655BF84EB19BF0B03 /* AxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRendererBase.swift; path = Source/Charts/Renderers/AxisRendererBase.swift; sourceTree = ""; }; - 9DD5D404866482790244CEA58FC02516 /* SegmentedRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SegmentedRow.swift; path = Source/Rows/SegmentedRow.swift; sourceTree = ""; }; - 9F2D900844C314E8262826754BCDB63E /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = ""; }; + 9F61CC9BC348F45A50AD5AB2ED815BAB /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = ""; }; + 9F6A8E2C6ECCAF59C045894E1F3DF8C5 /* RuleRange.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRange.swift; path = Source/Validations/RuleRange.swift; sourceTree = ""; }; + 9FBA401AF5B307DD562DF29F2CC80553 /* PresenterRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresenterRowType.swift; path = Source/Core/PresenterRowType.swift; sourceTree = ""; }; + A047E01EAD49DCD01C6AE241C055B64E /* ShareClient-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ShareClient-umbrella.h"; sourceTree = ""; }; A0878FA8411033349498923D4630B956 /* Pods-LoopFollow-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-LoopFollow-frameworks.sh"; sourceTree = ""; }; + A13F8D0A0BEAE5837834E66A8B1AAB8B /* IHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IHighlighter.swift; path = Source/Charts/Highlight/IHighlighter.swift; sourceTree = ""; }; A1C1B977ED8804E8AEEC884E7359EE58 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Charts.framework; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A3154F080DAF844406EBAD792DD1F1AC /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; - A414CED5CB27F40037F440A7B99A8181 /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = ""; }; - A4C0C98D51FEC617960BEE2F5E7EC507 /* TriplePickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriplePickerRow.swift; path = Source/Rows/TriplePickerRow.swift; sourceTree = ""; }; - A52112890B03A2230EA87DE2074EBF66 /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = ""; }; - A76A34E9C02A6AE7AF665A056FC21385 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Source/Core/Operators.swift; sourceTree = ""; }; - A7B8D6F073E0C9F1D0DC0A4EF5F00D80 /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = ""; }; - A9DB5945996F90B2A9EE5243C6A1423F /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = ""; }; - AA9B460BCA0242A40EEA3451ECEA392E /* Platform+Touch Handling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Touch Handling.swift"; path = "Source/Charts/Utils/Platform+Touch Handling.swift"; sourceTree = ""; }; - AAB5771835E6170F384829884E2B9985 /* Charts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-umbrella.h"; sourceTree = ""; }; - AB8EF9C425A89B975BEF843FFF552985 /* SwipeActions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeActions.swift; path = Source/Core/SwipeActions.swift; sourceTree = ""; }; - AC07EA79DDA9EF6E69EC9529D4BFE371 /* PickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInputRow.swift; path = Source/Rows/PickerInputRow.swift; sourceTree = ""; }; - ADE0989B752944E4E267D4EC37EC8BEF /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; - AE64A695A7435B21BE9B760056208374 /* DecimalFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecimalFormatter.swift; path = Source/Rows/Common/DecimalFormatter.swift; sourceTree = ""; }; - AE6E347B4EC0B71AFAC54530B584158B /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Source/Charts/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; - AEBF3FF6A0AA50E17997BE01E91A7B0E /* NavigationAccessoryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigationAccessoryView.swift; path = Source/Core/NavigationAccessoryView.swift; sourceTree = ""; }; - AF6F94A014222434C07CED041F1A6237 /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = ""; }; + A4010AF1B513BF04041A5432AF20E42B /* BaseRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseRow.swift; path = Source/Core/BaseRow.swift; sourceTree = ""; }; + A76791113E26FF4E2E0456B3AFBEB78B /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; + A869216FA3AC6BF4E9E522958EEC835A /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Source/Charts/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; + A909150E97DC082367FC2960FCB633BA /* PopoverSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PopoverSelectorRow.swift; path = Source/Rows/PopoverSelectorRow.swift; sourceTree = ""; }; + A9A56A406C5958A1B025AF2BEADEAB5E /* Eureka-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Eureka-dummy.m"; sourceTree = ""; }; + A9C7ED3BDF9A49970B6D7F0C0BF8E2B3 /* ListCheckRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ListCheckRow.swift; path = Source/Rows/SelectableRows/ListCheckRow.swift; sourceTree = ""; }; + AC8A8EC434DD8733B56039AB331048F1 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + ACC18BFAFFF03439AE7FC5425BC06568 /* SelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorRow.swift; path = Source/Rows/Common/SelectorRow.swift; sourceTree = ""; }; + AEC6B766C4F4809D41B6E083F9A3F0AC /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; + AF8539432E41C7FAB4F3E455D0FC889F /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = ""; }; + B08418091F0B05BA6BDCC363F96B8C43 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; B1DF43F4B1524F385F6090756FA3016A /* Pods-LoopFollow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LoopFollow.debug.xcconfig"; sourceTree = ""; }; - B2F3155FB4D74FAF71DACB796F6C37CF /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = ""; }; - B3589AD577F14D9EF3C1B486E3AE9AD1 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = ""; }; - B495707192AD3EB05D28B3FC41D3DE79 /* Platform+Graphics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Graphics.swift"; path = "Source/Charts/Utils/Platform+Graphics.swift"; sourceTree = ""; }; - B5CAA0775EDBAE161B5D0E7EA11FD6BC /* Eureka-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Eureka-prefix.pch"; sourceTree = ""; }; - B86222F70DF9BA5C9FD5BC0C57B44516 /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = ""; }; - B946915CF4D343517B51D33FD3A04BCF /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = ""; }; - B9ACCB5D9F822C2F7D0C1E84D401124D /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = ""; }; - BA3B623F7078308F6C63E600530AD2EC /* Form.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Form.swift; path = Source/Core/Form.swift; sourceTree = ""; }; - BB6D1BC5E7576A4EE182F66FDB70135E /* Eureka-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Eureka-umbrella.h"; sourceTree = ""; }; - BBE28E66678F0411EB23844644DD532A /* FieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldRow.swift; path = Source/Rows/Common/FieldRow.swift; sourceTree = ""; }; - BBF603CBA0282655DE10AB2E64E38A78 /* DateInlineRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInlineRow.swift; path = Source/Rows/DateInlineRow.swift; sourceTree = ""; }; - BD461674D07DC3CCE2C5289E94480677 /* YAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRenderer.swift; path = Source/Charts/Renderers/YAxisRenderer.swift; sourceTree = ""; }; - BDADC32BFF4DE543DCC8A0C9F33610B8 /* PickerRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerRow.swift; path = Source/Rows/PickerRow.swift; sourceTree = ""; }; - BDFCB038F9DFF63DB1A66A0BA0DE2FF3 /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = ""; }; - C079A2B4457B189E14F7ACCDF6210CB2 /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; - C11A72698F5A39FE67A8908256260F03 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; - C1BB70383AD3D2088BD979874E38FB12 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; - C381C388D31FC8085089D38D9F55A7AE /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; - C53A8210C66064E3B8F1EC9B6453B323 /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = ""; }; - C7AE0E1C416BB967B5624D0ECADD53F8 /* SwitchRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchRow.swift; path = Source/Rows/SwitchRow.swift; sourceTree = ""; }; - C9BBDA9249CBAFE6EF9373177FF46337 /* BaseRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseRow.swift; path = Source/Core/BaseRow.swift; sourceTree = ""; }; - CA4DC8D9C55731586FBF6CA8B50AE3C8 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; - CA9B73786C8C3F0A227107004B92E8D5 /* GenericMultipleSelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GenericMultipleSelectorRow.swift; path = Source/Rows/Common/GenericMultipleSelectorRow.swift; sourceTree = ""; }; - CAB210E66749830C126E32238CE2082D /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; - CB20702200078D6C342F044A7ACF647E /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = ""; }; - CD37D5B6C9777C0410BD7981DFEECAA0 /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; - CD429C5F2105C02645A5B0C4404E6276 /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = ""; }; - CF1521DEA9B23E85D6E3B390594B8386 /* Platform+Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Accessibility.swift"; path = "Source/Charts/Utils/Platform+Accessibility.swift"; sourceTree = ""; }; - CF31146E46DDECAC6A65C804FDFB9567 /* HeaderFooterView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HeaderFooterView.swift; path = Source/Core/HeaderFooterView.swift; sourceTree = ""; }; - CF9EC3B5687C1269D9ACA71960B2722F /* Cell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cell.swift; path = Source/Core/Cell.swift; sourceTree = ""; }; - D0704DED0FDFDBECD5D672C8122D09D3 /* AlertOptionsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlertOptionsRow.swift; path = Source/Rows/Common/AlertOptionsRow.swift; sourceTree = ""; }; - D0C3392B488D1C70CE763BEC834C6E40 /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Source/Charts/Charts/BarChartView.swift; sourceTree = ""; }; - D0FE0C9E36C7E4EA71A9C0915DCDE460 /* DataApproximator+N.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DataApproximator+N.swift"; path = "Source/Charts/Filters/DataApproximator+N.swift"; sourceTree = ""; }; - D20056B909D071B51B58A4EC7F9AF016 /* IFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IFillFormatter.swift; path = Source/Charts/Formatters/IFillFormatter.swift; sourceTree = ""; }; - D25585170D6AB5308AE2A678B8A2AFD9 /* SelectableRowType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectableRowType.swift; path = Source/Core/SelectableRowType.swift; sourceTree = ""; }; - D2A83BF9B84A2500DB376EB0440F3177 /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = ""; }; - D2E075D6FF5CADB79137C6C0F8BD9AD8 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; - D365EA8C2BD866565B9032143F883585 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = ""; }; - D4D1CD2B50CF172C70D4C70E118CF2D6 /* DateFieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateFieldRow.swift; path = Source/Rows/Common/DateFieldRow.swift; sourceTree = ""; }; - D5333884384F3F0617A1755CB9C04EA9 /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = ""; }; - D89B6697D34583EEC038208D3A2CCC19 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = ""; }; - D988C4498CD948B3BA26A653BC5F2BE1 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Source/Charts/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; - D9F8D990EA4AB722F7E4DDB271FBDF07 /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = ""; }; - D9FB34C64CEA9EB76D25668DF5B911D0 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = ""; }; - DA3FB45C36C40B6053CC640379ABFF09 /* ButtonRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonRow.swift; path = Source/Rows/ButtonRow.swift; sourceTree = ""; }; - DC49C98470D53DA3649F1E5A95641514 /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; - DCA54E592B656A55A540BF36DF17957A /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = ""; }; - DF8BB64B5949D2CAA9B7D84B20B679E7 /* IShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/IShapeRenderer.swift; sourceTree = ""; }; - DFB7F1FDCA25887A48D3D9A7FB615800 /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = ""; }; - E15189F1DAD306A270886D315DA65038 /* SelectorRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorRow.swift; path = Source/Rows/Common/SelectorRow.swift; sourceTree = ""; }; - E1AD9C87BF211B61583EFC0CDAAFD1FE /* Section.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Section.swift; path = Source/Core/Section.swift; sourceTree = ""; }; - E3FB5D0BD363FB7F09E40CBD6821E463 /* MultipleSelectorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipleSelectorViewController.swift; path = Source/Rows/Controllers/MultipleSelectorViewController.swift; sourceTree = ""; }; - E5376E6450A6747741DC5879E846A8D4 /* IHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IHighlighter.swift; path = Source/Charts/Highlight/IHighlighter.swift; sourceTree = ""; }; - E5C982FD8EADF008ED080533ECC61350 /* RuleRegExp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleRegExp.swift; path = Source/Validations/RuleRegExp.swift; sourceTree = ""; }; - E5CF5AF933F10270B89A5C7DA4913A6D /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = ""; }; - E613BE0BFFB09D55A3AD7BC1EEFD4823 /* OptionsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionsRow.swift; path = Source/Rows/Common/OptionsRow.swift; sourceTree = ""; }; - E6CAE7AC4CEE072EBCA52375CFE7EAC8 /* LineRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarRenderer.swift; path = Source/Charts/Renderers/LineRadarRenderer.swift; sourceTree = ""; }; - E81B1BBAF0B43F0A7937AAA509040657 /* SelectableSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectableSection.swift; path = Source/Core/SelectableSection.swift; sourceTree = ""; }; - EAE950ECC462BCF193C89D86EEB21977 /* Eureka.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Eureka.release.xcconfig; sourceTree = ""; }; - EBD7FCF54BAD47CD0733E99A9318D846 /* CellType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CellType.swift; path = Source/Core/CellType.swift; sourceTree = ""; }; + B28A2F7F1E6F57132EDC348E349719CA /* Eureka.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Eureka.debug.xcconfig; sourceTree = ""; }; + B2D931E90044D88802D3FD030161D3C8 /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = ""; }; + B3127CF0F6CFE1BEDAD6752A448E7D67 /* Eureka.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Eureka.release.xcconfig; sourceTree = ""; }; + B31407514FCEAE451A67BFB01F99FD57 /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; + B31F4F15FC21AB2A91319F457B686A31 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; + B3C500690781B6631CE1C0946BDBDDAB /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; + B403CCDCB84443B5F5C2ACB7F05262F8 /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = ""; }; + B5027B3B59A4B57AD77A4D08FD35B4F5 /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; + B73122FF47D657B6EE798456F35C01B8 /* RuleLength.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleLength.swift; path = Source/Validations/RuleLength.swift; sourceTree = ""; }; + B780059D2B1759DB0B490F39320EF494 /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = ""; }; + B9F3AC74EA385AD1FB48BB312B9A8D01 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; + BB2EE47C8EFAFB7A567F4AFF90304521 /* ButtonRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonRow.swift; path = Source/Rows/ButtonRow.swift; sourceTree = ""; }; + BCD106D95076EE34EC2C06B62908D944 /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; + BE34CABB424024A41851C39678BA5EF3 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; + BED228AF72ED5D323F30BAC261C5CD14 /* Eureka.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Eureka.modulemap; sourceTree = ""; }; + BF358AA0AFC2C0AF0152E704E7512517 /* PickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInputRow.swift; path = Source/Rows/PickerInputRow.swift; sourceTree = ""; }; + C0B605529F8016666F6C3794D9768CA5 /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = ""; }; + C2465E4C7B40A2D725278AEE6113E535 /* ShareClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ShareClient.framework; path = ShareClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C2982FD762FA7E78B9C8674FDBF7C488 /* LabelRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LabelRow.swift; path = Source/Rows/LabelRow.swift; sourceTree = ""; }; + C4D9C9FC3F24D3132834031FBA0497B6 /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = ""; }; + C4F8A767A733062C597BA28637807CF6 /* FieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldRow.swift; path = Source/Rows/Common/FieldRow.swift; sourceTree = ""; }; + C5C1C37151607BD73B8CBF52A04A3C2A /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; + C80D29F462EBAF9532A128EC200F45E9 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; + CA6A2727DA19123030277D8B0B6EAD4E /* Charts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Charts-dummy.m"; sourceTree = ""; }; + CBB8BBD29DF85A11464A5ADA946CB94D /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; + CCF71002CB08FA43477C09804AD8CF00 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; + CFF6A340445BB493577104B53D9A7588 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = ""; }; + D3243DA31298D1FE6BEA4A606C0E0944 /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Source/Charts/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; + D365274AEF519C7E50E8567DEBC9CEF3 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; + D44178678937D7A1451FAB15F69C1D8E /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; + D545BAE8C86C5021FAEB27D4C25D6F10 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = ""; }; + D61C45B0A3EA48AEABB9B6979D820216 /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = ""; }; + D753B6F3540FE6A7C56D2547C3EEF851 /* Charts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Charts-umbrella.h"; sourceTree = ""; }; + DB158EC4C258A5082D64122F7AF89500 /* CheckRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckRow.swift; path = Source/Rows/CheckRow.swift; sourceTree = ""; }; + E085DDC030F8EC270DBA2B97E1CBF58D /* ShareClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ShareClient.release.xcconfig; sourceTree = ""; }; + E1225F47304F13FF1AC7386400F4ED87 /* Platform+Gestures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Gestures.swift"; path = "Source/Charts/Utils/Platform+Gestures.swift"; sourceTree = ""; }; + E240AEA05F9F44EE97E2D31F32D155F8 /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = ""; }; + E27A5743F40167D8B6E7F58FB53D7607 /* DataApproximator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataApproximator.swift; path = Source/Charts/Filters/DataApproximator.swift; sourceTree = ""; }; + E304C127B722E54D8A82C9CAD421A740 /* FieldsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldsRow.swift; path = Source/Rows/FieldsRow.swift; sourceTree = ""; }; + E329C10FB955618FAB19FE474DB7071E /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; + E6153DD0B9FA40F02377E5F8A060E378 /* AlertOptionsRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlertOptionsRow.swift; path = Source/Rows/Common/AlertOptionsRow.swift; sourceTree = ""; }; + E815F54AB4445B900090ACEE3A2FFF04 /* DoublePickerInputRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoublePickerInputRow.swift; path = Source/Rows/DoublePickerInputRow.swift; sourceTree = ""; }; + E8520A7F8F8673F94B6DDE4B08E471B6 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; + E89110FD8C719CD0408D733C769EECC7 /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = ""; }; + E8BC5CA866C668A73EDFD53784DB4A4C /* RuleClosure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuleClosure.swift; path = Source/Validations/RuleClosure.swift; sourceTree = ""; }; + E940C1BB7A0182B5BD9433DF9D6E040F /* IMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IMarker.swift; path = Source/Charts/Components/IMarker.swift; sourceTree = ""; }; + EA7E136F2C50A7AAEFD8EE9EA59AA762 /* LineRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarRenderer.swift; path = Source/Charts/Renderers/LineRadarRenderer.swift; sourceTree = ""; }; + EAE582A1AABA555CA7E4333D8A82A6D9 /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = ""; }; + EBCB97DFE79BCFD22A9806F8AAE04749 /* Platform+Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Accessibility.swift"; path = "Source/Charts/Utils/Platform+Accessibility.swift"; sourceTree = ""; }; EBE2A8C176CC9C76279BE195BDA90B7F /* Pods-LoopFollow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LoopFollow.release.xcconfig"; sourceTree = ""; }; - ECE56B02AC87347DA9DB74C57E343848 /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = ""; }; + EBF8B918AB264444686976350703223A /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; + ECE9378CE08AC95D1C70F245CCC10937 /* AxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRendererBase.swift; path = Source/Charts/Renderers/AxisRendererBase.swift; sourceTree = ""; }; + EDBBC91348519BCFAF54CEB0F3A336E3 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; + EDDD26C0BFFFEF7E05816A85ED3048C1 /* Platform+Graphics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Platform+Graphics.swift"; path = "Source/Charts/Utils/Platform+Graphics.swift"; sourceTree = ""; }; + EE9F53293DA948FB69D6A7E95F323FB4 /* DateFieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateFieldRow.swift; path = Source/Rows/Common/DateFieldRow.swift; sourceTree = ""; }; F0EFA056547237258760018B2FE0CAD6 /* Pods-LoopFollow-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LoopFollow-acknowledgements.markdown"; sourceTree = ""; }; - F342C0D599983866B101EAD57EE965BC /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = ""; }; - F47ECE07091D1F3FAD8674F1494B51FD /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; - F5018E78EF154B922DA8A314E96C8EFE /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Source/Charts/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; - F7FCDBD5310D634048A381DF6344DCB8 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = ""; }; - F94BB85650EA9A8A660C2DF565554364 /* RowControllerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RowControllerType.swift; path = Source/Core/RowControllerType.swift; sourceTree = ""; }; - FA6C47970EE73E5F5C1C16EB032C7880 /* ButtonRowWithPresent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonRowWithPresent.swift; path = Source/Rows/ButtonRowWithPresent.swift; sourceTree = ""; }; - FBE65F23175ABAF0E3E490016F32A9F9 /* Eureka-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Eureka-Info.plist"; sourceTree = ""; }; - FC4C9132328F362E9C3125EA0BB30F7F /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; - FCCDA1A52389202D21A2C0CE07AE0975 /* SelectorAlertController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectorAlertController.swift; path = Source/Rows/Controllers/SelectorAlertController.swift; sourceTree = ""; }; - FD2422A99038FA392E12DC40300CD5CC /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; - FE339BC445333F4277FCCF4B6E05248B /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = ""; }; - FE802B440E6EA22B84F90B2192E9C89C /* Eureka-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Eureka-dummy.m"; sourceTree = ""; }; - FE837191BE21D305F27EADE4736036C7 /* StepperRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StepperRow.swift; path = Source/Rows/StepperRow.swift; sourceTree = ""; }; - FE8CE52191DADD0E86EFFB723F5C1F43 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; + F124EF1DD30BEFB748316D6CE0709B2E /* HeaderFooterView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HeaderFooterView.swift; path = Source/Core/HeaderFooterView.swift; sourceTree = ""; }; + F2DE04D0335A389EA6CFE06E46448744 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; + F31DFAC4317F012937CBC2CDADF0B452 /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = ""; }; + F38C6C77C1EDABA11F488AF0CB7113BC /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + F3C05AC94561A5051FEF33F481EC70E6 /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = ""; }; + F458F913F6215D5244FD4EFCE470807B /* ShareClient-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ShareClient-dummy.m"; sourceTree = ""; }; + F52B736816C4134465DD07E7A3C6EE82 /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + F93BB1EE57468D56B0F2972A1F23E8E4 /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = ""; }; + FABD11111F00FECAB5D76CA8D511540A /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; + FB789687F3D81D3F4CB82C2550645219 /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = ""; }; + FDFAF86922EDD701C440B78809BA7858 /* DateInlineFieldRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInlineFieldRow.swift; path = Source/Rows/Common/DateInlineFieldRow.swift; sourceTree = ""; }; + FEC2735DCC80FD5BCE93B7D1D57A05FB /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = ""; }; + FFC29535908C42BB065B4E30585417A4 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1745F82B3CC4880D8373C92843BD73A0 /* Frameworks */ = { + 1DC97817961139E7E35F2AE2C60B6E3C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA52D959C6AC78D2B641936C986D5BD /* Foundation.framework in Frameworks */, + 3A81072EB144BB6F03C7F5360EEEE03D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -506,30 +528,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + EABB43369342DBA322AEFCFCA32DCDF2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AB53E15E90B6A71CAF72834B072D88D3 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 08C34954AB9394F4BD1E0AE6B4BA1AD3 /* Support Files */ = { - isa = PBXGroup; - children = ( - 212BC3B1A39FD603CF008C6589F8D495 /* Eureka.modulemap */, - FE802B440E6EA22B84F90B2192E9C89C /* Eureka-dummy.m */, - FBE65F23175ABAF0E3E490016F32A9F9 /* Eureka-Info.plist */, - B5CAA0775EDBAE161B5D0E7EA11FD6BC /* Eureka-prefix.pch */, - BB6D1BC5E7576A4EE182F66FDB70135E /* Eureka-umbrella.h */, - 972988CAA5B213B4B7E79E686D947066 /* Eureka.debug.xcconfig */, - EAE950ECC462BCF193C89D86EEB21977 /* Eureka.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Eureka"; - sourceTree = ""; - }; - 10EF57FA96C8A6EB332E6830C11ACAC4 /* Products */ = { + 0B47EBF6CDD6919FDEC1F73BC48C0D48 /* Products */ = { isa = PBXGroup; children = ( A1C1B977ED8804E8AEEC884E7359EE58 /* Charts.framework */, 082977F3777A7D434AB35C357B487F83 /* Eureka.framework */, 4BACF8B4E5759037E1CC8A6423FF7B67 /* Pods_LoopFollow.framework */, + C2465E4C7B40A2D725278AEE6113E535 /* ShareClient.framework */, ); name = Products; sourceTree = ""; @@ -542,161 +558,29 @@ name = Frameworks; sourceTree = ""; }; - 22F2370240DE477187E6567CC446EF23 /* Core */ = { + 3142C223F4EB54E9A2E170B9D8ACA4BE /* Charts */ = { isa = PBXGroup; children = ( - 7CB81995CD9E3411271534F01DAD4592 /* AnimatedMoveViewJob.swift */, - 377C3CF3DE13B0EC7726913B2DA966C9 /* AnimatedViewPortJob.swift */, - 7BDA597AD98E041BDF72BECA4E7CC21C /* AnimatedZoomViewJob.swift */, - 8E147C593487F41985DF252E8462F8E5 /* Animator.swift */, - F7FCDBD5310D634048A381DF6344DCB8 /* AxisBase.swift */, - 9DCD9F34ED2EFAB655BF84EB19BF0B03 /* AxisRendererBase.swift */, - 2AD23361C3941A28A568A73F5E2A0C96 /* BarChartData.swift */, - 55ED648BE5F5D63433355F4029BE846A /* BarChartDataEntry.swift */, - 1A67B7A482098A7B6617635A36A70C54 /* BarChartDataProvider.swift */, - 012D858F75E53844C8DB0E8745A4245F /* BarChartDataSet.swift */, - 44AB25DFE6C3A06D58D49ED0CF5DB3EC /* BarChartRenderer.swift */, - D0C3392B488D1C70CE763BEC834C6E40 /* BarChartView.swift */, - 714555686E18EFF7F47B8D5E49DBEA3F /* BarHighlighter.swift */, - 9157BC0B4AEB06D64AE7443A8BD5947D /* BarLineChartViewBase.swift */, - C381C388D31FC8085089D38D9F55A7AE /* BarLineScatterCandleBubbleChartData.swift */, - 745E6248CAB2E4A068E95D95FA0F1440 /* BarLineScatterCandleBubbleChartDataProvider.swift */, - 83942BEC8B7DB3645C30D60937AF2652 /* BarLineScatterCandleBubbleChartDataSet.swift */, - 7E76DAA9695B062B079865671555A198 /* BarLineScatterCandleBubbleRenderer.swift */, - 7F85FACC2016BEC51568E2DA039871BA /* BubbleChartData.swift */, - 575A3D70A90822811C6533EF48873537 /* BubbleChartDataEntry.swift */, - FE8CE52191DADD0E86EFFB723F5C1F43 /* BubbleChartDataProvider.swift */, - 168949456FDA5D72FC492981BF2AB55E /* BubbleChartDataSet.swift */, - 2D7F12C82F13C5D254AFDD932BB189E2 /* BubbleChartRenderer.swift */, - 288F47791ECB7EED768B2B26F8DCB68A /* BubbleChartView.swift */, - 7E0F07C3184BEE9EE73A064412FB3969 /* CandleChartData.swift */, - 666AEAC030E22BD0BDE90830AF057310 /* CandleChartDataEntry.swift */, - C079A2B4457B189E14F7ACCDF6210CB2 /* CandleChartDataProvider.swift */, - 8EF8E5F90E48A1146DE536864603C6B1 /* CandleChartDataSet.swift */, - 62109DDC014868EF85EAAC5DEA89E792 /* CandleStickChartRenderer.swift */, - AF6F94A014222434C07CED041F1A6237 /* CandleStickChartView.swift */, - F5018E78EF154B922DA8A314E96C8EFE /* ChartAnimationEasing.swift */, - CA4DC8D9C55731586FBF6CA8B50AE3C8 /* ChartBaseDataSet.swift */, - 21F934EBBD0C767A7DA6DEB455943843 /* ChartColorTemplates.swift */, - 15AE42BF26F6B49F108794BABAF01BE8 /* ChartData.swift */, - 7ECEF07022B6C554B4E9802C221B95B9 /* ChartDataEntry.swift */, - F342C0D599983866B101EAD57EE965BC /* ChartDataEntryBase.swift */, - DC49C98470D53DA3649F1E5A95641514 /* ChartDataProvider.swift */, - 729A12A9B7F0A0EE6EEE33B5176F30BB /* ChartDataRendererBase.swift */, - 31BA5667ABB00F921823EE8C11E0C596 /* ChartDataSet.swift */, - 86F8AE08B613E8389A122C6ED38A14A2 /* ChartHighlighter.swift */, - 6E6ADC76EF0EE1AE0F7877BAE8AC3430 /* ChartLimitLine.swift */, - 9F2D900844C314E8262826754BCDB63E /* ChartUtils.swift */, - 9640E3B61E9EB2E5999E6AF8A1E6D61A /* ChartViewBase.swift */, - B9ACCB5D9F822C2F7D0C1E84D401124D /* ChevronDownShapeRenderer.swift */, - B3589AD577F14D9EF3C1B486E3AE9AD1 /* ChevronUpShapeRenderer.swift */, - DFB7F1FDCA25887A48D3D9A7FB615800 /* CircleShapeRenderer.swift */, - 7CADE2DFAF271071EECD3C92248F2192 /* CombinedChartData.swift */, - A9DB5945996F90B2A9EE5243C6A1423F /* CombinedChartDataProvider.swift */, - 82F1DEC08F246688F6E7531A3395E9B1 /* CombinedChartRenderer.swift */, - CD429C5F2105C02645A5B0C4404E6276 /* CombinedChartView.swift */, - 0B024F185ECED75F48C085E205179B60 /* CombinedHighlighter.swift */, - 82516DCE2680E4E28B019A35C1AA85E7 /* ComponentBase.swift */, - 57B547D32213ED4ACD5121E873E08B63 /* CrossShapeRenderer.swift */, - 02064BFFCDD93F0B2E28045C270091A4 /* DataApproximator.swift */, - D0FE0C9E36C7E4EA71A9C0915DCDE460 /* DataApproximator+N.swift */, - 34F84715AE8809D6316FF9BCEAD20DCA /* DefaultAxisValueFormatter.swift */, - 8CA67E3BD944650F1EED5FA0B16BF2A9 /* DefaultFillFormatter.swift */, - D5333884384F3F0617A1755CB9C04EA9 /* DefaultValueFormatter.swift */, - 000D3C28CD7966485DFAD40B2C9874B4 /* Description.swift */, - 254A6B4D102F8420A54512389166B1E8 /* Fill.swift */, - 679725EAA7D6C233678CE91C58906413 /* Highlight.swift */, - C11A72698F5A39FE67A8908256260F03 /* HorizontalBarChartRenderer.swift */, - 9C086384F94A6CED2FB0EC4DA22CF685 /* HorizontalBarChartView.swift */, - A52112890B03A2230EA87DE2074EBF66 /* HorizontalBarHighlighter.swift */, - 1C992A46C86EB9DE636AF70545363749 /* IAxisValueFormatter.swift */, - F47ECE07091D1F3FAD8674F1494B51FD /* IBarChartDataSet.swift */, - 2FB31C7D459AACCCDAD58C4427C65B1F /* IBarLineScatterCandleBubbleChartDataSet.swift */, - 0ABEA1E706788F7FB4AEF5ABDA5884A2 /* IBubbleChartDataSet.swift */, - 68FDCFBE5C019D26281F7A56CAAFBD4A /* ICandleChartDataSet.swift */, - 1C7A9E25022D8E2DE5F4B5ABCFF8073B /* IChartDataSet.swift */, - D20056B909D071B51B58A4EC7F9AF016 /* IFillFormatter.swift */, - E5376E6450A6747741DC5879E846A8D4 /* IHighlighter.swift */, - 053BA00FFC9D0CCCA874716694EF87DA /* ILineChartDataSet.swift */, - FD2422A99038FA392E12DC40300CD5CC /* ILineRadarChartDataSet.swift */, - 249597AD33DF9857FD7F304A78EBA7DF /* ILineScatterCandleRadarChartDataSet.swift */, - 155737109C81D674801FCC3A99A51918 /* IMarker.swift */, - B946915CF4D343517B51D33FD3A04BCF /* IndexAxisValueFormatter.swift */, - D988C4498CD948B3BA26A653BC5F2BE1 /* IPieChartDataSet.swift */, - 0AD25BE0988BE256D99C8BD37264BF92 /* IRadarChartDataSet.swift */, - AE6E347B4EC0B71AFAC54530B584158B /* IScatterChartDataSet.swift */, - DF8BB64B5949D2CAA9B7D84B20B679E7 /* IShapeRenderer.swift */, - 4079FC6B8F8238BE5842EC9593970ED4 /* IValueFormatter.swift */, - 5F7D2159259306783652FFC35C5F4BB5 /* Legend.swift */, - 60A0B1AFF34D1CE8A4698D476DAE19D1 /* LegendEntry.swift */, - A414CED5CB27F40037F440A7B99A8181 /* LegendRenderer.swift */, - 6BCBA4882939D2562643379A8CCDF2E6 /* LineChartData.swift */, - A3154F080DAF844406EBAD792DD1F1AC /* LineChartDataProvider.swift */, - CAB210E66749830C126E32238CE2082D /* LineChartDataSet.swift */, - ADE0989B752944E4E267D4EC37EC8BEF /* LineChartRenderer.swift */, - 0E4A96D0B3D1148D579EBBBE4099B43D /* LineChartView.swift */, - 16819173DF628B0FC53570AE9383A1E9 /* LineRadarChartDataSet.swift */, - E6CAE7AC4CEE072EBCA52375CFE7EAC8 /* LineRadarRenderer.swift */, - 8096CF97803FE35D19082B189F139D53 /* LineScatterCandleRadarChartDataSet.swift */, - CD37D5B6C9777C0410BD7981DFEECAA0 /* LineScatterCandleRadarRenderer.swift */, - C53A8210C66064E3B8F1EC9B6453B323 /* MarkerImage.swift */, - 0B352DD04711E5CD1288B6F43CA78EAD /* MarkerView.swift */, - ECE56B02AC87347DA9DB74C57E343848 /* MoveViewJob.swift */, - 378C21F8B8F022E50AA5A54C32444EEA /* PieChartData.swift */, - 0888FBF51D984A19315B2B45406842AE /* PieChartDataEntry.swift */, - 7CF245263BA6245C01808ECB50BA7C48 /* PieChartDataSet.swift */, - DCA54E592B656A55A540BF36DF17957A /* PieChartRenderer.swift */, - 8CDFE98CDB50C3C14377F152923FF465 /* PieChartView.swift */, - 7E5488781769EC1BC666BD556553C613 /* PieHighlighter.swift */, - FC4C9132328F362E9C3125EA0BB30F7F /* PieRadarChartViewBase.swift */, - C1BB70383AD3D2088BD979874E38FB12 /* PieRadarHighlighter.swift */, - D2A83BF9B84A2500DB376EB0440F3177 /* Platform.swift */, - CF1521DEA9B23E85D6E3B390594B8386 /* Platform+Accessibility.swift */, - 45034360BF273A6E100C7D34B21A68B7 /* Platform+Color.swift */, - 6C5FDCBCF25DC40CBD3324686E14C95A /* Platform+Gestures.swift */, - B495707192AD3EB05D28B3FC41D3DE79 /* Platform+Graphics.swift */, - AA9B460BCA0242A40EEA3451ECEA392E /* Platform+Touch Handling.swift */, - 70230EF21C40FA0D1ED0CF3F82D0CCA5 /* RadarChartData.swift */, - 239824BA5FBE5BA1E6FB1E33773E251B /* RadarChartDataEntry.swift */, - 71C85204757B1DFD665A234DDC2CB843 /* RadarChartDataSet.swift */, - 071D24D80B9E2809386D89EE81F176E2 /* RadarChartRenderer.swift */, - 3E24A04789464015C22D87D5E3A60671 /* RadarChartView.swift */, - 7D25B6FD011B35288185B6EF33CDACC8 /* RadarHighlighter.swift */, - 2C2A801B59BAFE6387217B3B12162AFB /* Range.swift */, - A7B8D6F073E0C9F1D0DC0A4EF5F00D80 /* Renderer.swift */, - 37BE1D35B7B996A40A09DBA627975CAD /* ScatterChartData.swift */, - D2E075D6FF5CADB79137C6C0F8BD9AD8 /* ScatterChartDataProvider.swift */, - 6F8D402409FDE04B9AA68921C87A582A /* ScatterChartDataSet.swift */, - 61129B8933ABD9C897F5F3D21BFB0DEB /* ScatterChartRenderer.swift */, - BDFCB038F9DFF63DB1A66A0BA0DE2FF3 /* ScatterChartView.swift */, - 3CF2AAADC8530B44EFDAFDF76424ACB9 /* SquareShapeRenderer.swift */, - B2F3155FB4D74FAF71DACB796F6C37CF /* Transformer.swift */, - 2AD46C920FCFDF92D97C5CE6DA55653C /* TransformerHorizontalBarChart.swift */, - D89B6697D34583EEC038208D3A2CCC19 /* TriangleShapeRenderer.swift */, - D365EA8C2BD866565B9032143F883585 /* ViewPortHandler.swift */, - CB20702200078D6C342F044A7ACF647E /* ViewPortJob.swift */, - B86222F70DF9BA5C9FD5BC0C57B44516 /* XAxis.swift */, - E5CF5AF933F10270B89A5C7DA4913A6D /* XAxisRenderer.swift */, - 929451489095A14748EE4AC0ECE015B3 /* XAxisRendererHorizontalBarChart.swift */, - D9FB34C64CEA9EB76D25668DF5B911D0 /* XAxisRendererRadarChart.swift */, - D9F8D990EA4AB722F7E4DDB271FBDF07 /* XShapeRenderer.swift */, - 72076E17F40C394C421E55A1B2A5B5AB /* YAxis.swift */, - BD461674D07DC3CCE2C5289E94480677 /* YAxisRenderer.swift */, - 950BD31462B45700CCB1D7EC3B5EFDCB /* YAxisRendererHorizontalBarChart.swift */, - FE339BC445333F4277FCCF4B6E05248B /* YAxisRendererRadarChart.swift */, - 4EA35BC7CB0631FB6172FCC3939301CE /* ZoomViewJob.swift */, + 9DBB6B5BA8A75BBF0E0EE3EDA0897BE9 /* Core */, + 98591E8B414C24014E0BBBC0232C3D41 /* Support Files */, ); - name = Core; + name = Charts; + path = Charts; sourceTree = ""; }; - 2A992A1E3B03450792DC85229803B825 /* Charts */ = { + 4BCC92DFEC2AF1A2792C20AA309B54F7 /* Support Files */ = { isa = PBXGroup; children = ( - 22F2370240DE477187E6567CC446EF23 /* Core */, - 65558019872A59570C54EEC30127F75E /* Support Files */, + BED228AF72ED5D323F30BAC261C5CD14 /* Eureka.modulemap */, + A9A56A406C5958A1B025AF2BEADEAB5E /* Eureka-dummy.m */, + 4582F709E55ADE01009D1DF37A0D1A2C /* Eureka-Info.plist */, + 720BAE67C4F9E996548ED7C3C156633E /* Eureka-prefix.pch */, + 425EDA696831087CE695C0052A266AF7 /* Eureka-umbrella.h */, + B28A2F7F1E6F57132EDC348E349719CA /* Eureka.debug.xcconfig */, + B3127CF0F6CFE1BEDAD6752A448E7D67 /* Eureka.release.xcconfig */, ); - name = Charts; - path = Charts; + name = "Support Files"; + path = "../Target Support Files/Eureka"; sourceTree = ""; }; 4F2B32159E3EA4B0DF32393843F9E975 /* Targets Support Files */ = { @@ -707,114 +591,288 @@ name = "Targets Support Files"; sourceTree = ""; }; - 5E9E1E43890A876C6EDEDBD1FD22FEFC /* Eureka */ = { + 4FE512F3B2184A5A5916DF9D4ADA2260 /* ShareClient */ = { + isa = PBXGroup; + children = ( + 88506EF0DE39A04D24F910A93C337EFD /* ShareClient.h */, + 0C1F35E26A6B017DFE6EA7B2EEF34E01 /* ShareClient.swift */, + 9EAE10647C1132BEA8591805CCE4B205 /* Support Files */, + ); + name = ShareClient; + path = ShareClient; + sourceTree = ""; + }; + 58A8F852B8FCFC7E73EA234EC77810F3 /* Pods */ = { isa = PBXGroup; children = ( - 964ECD689E6D753A7D3EBE859C86AB18 /* ActionSheetRow.swift */, - D0704DED0FDFDBECD5D672C8122D09D3 /* AlertOptionsRow.swift */, - 481AA3E635F1093F5AB7FD74ADA9BDD9 /* AlertRow.swift */, - C9BBDA9249CBAFE6EF9373177FF46337 /* BaseRow.swift */, - DA3FB45C36C40B6053CC640379ABFF09 /* ButtonRow.swift */, - FA6C47970EE73E5F5C1C16EB032C7880 /* ButtonRowWithPresent.swift */, - CF9EC3B5687C1269D9ACA71960B2722F /* Cell.swift */, - EBD7FCF54BAD47CD0733E99A9318D846 /* CellType.swift */, - 3D88CE352A90F7E9AC65DFA6D8885891 /* CheckRow.swift */, - 80318751D82A1232D25FE42BE09D9FFA /* Core.swift */, - D4D1CD2B50CF172C70D4C70E118CF2D6 /* DateFieldRow.swift */, - 606EA49EC0D70404AA0567511C66F093 /* DateInlineFieldRow.swift */, - BBF603CBA0282655DE10AB2E64E38A78 /* DateInlineRow.swift */, - 87994AC80B253089EC8951B0916B1C1D /* DatePickerRow.swift */, - 4A5BD0C4DDD7D499A7B4F756946AA449 /* DateRow.swift */, - AE64A695A7435B21BE9B760056208374 /* DecimalFormatter.swift */, - 68EEFBE89237E60B56F262C7E544E55D /* DoublePickerInputRow.swift */, - 98C23603F603481C63472733E4703D0D /* DoublePickerRow.swift */, - BBE28E66678F0411EB23844644DD532A /* FieldRow.swift */, - 4FA682FA297006A934B23EEF8E8E3191 /* FieldsRow.swift */, - BA3B623F7078308F6C63E600530AD2EC /* Form.swift */, - CA9B73786C8C3F0A227107004B92E8D5 /* GenericMultipleSelectorRow.swift */, - CF31146E46DDECAC6A65C804FDFB9567 /* HeaderFooterView.swift */, - 7105F1BABE60EE081EBDC3478EBDF544 /* Helpers.swift */, - 0F7E3D2928552D57E8FFCA76AE2898BA /* InlineRowType.swift */, - 3CFDCD79EE4C6A3EB03E710810887DE9 /* LabelRow.swift */, - 0C86B0118C269219B26CEB29BFEB2BE7 /* ListCheckRow.swift */, - 742D75E835BBB864914066437E0F9AAF /* MultipleSelectorRow.swift */, - E3FB5D0BD363FB7F09E40CBD6821E463 /* MultipleSelectorViewController.swift */, - AEBF3FF6A0AA50E17997BE01E91A7B0E /* NavigationAccessoryView.swift */, - A76A34E9C02A6AE7AF665A056FC21385 /* Operators.swift */, - E613BE0BFFB09D55A3AD7BC1EEFD4823 /* OptionsRow.swift */, - 9BE7167E3A24661ED73D8E4CF4833587 /* PickerInlineRow.swift */, - AC07EA79DDA9EF6E69EC9529D4BFE371 /* PickerInputRow.swift */, - BDADC32BFF4DE543DCC8A0C9F33610B8 /* PickerRow.swift */, - 877048B6F67A34C1FD3885CD20CF3AC6 /* PopoverSelectorRow.swift */, - 3B21D20DD89ABCD133C907484489A4E9 /* PresenterRowType.swift */, - 60D3208F76CADE6D8572D57C206C965D /* Protocols.swift */, - 9C98A13EC67B78112EB25C6A7E85200A /* PushRow.swift */, - 372778BB7FE2428A1F850F71B3BB5F37 /* Row.swift */, - F94BB85650EA9A8A660C2DF565554364 /* RowControllerType.swift */, - 2C7772421B5C0539F7DC061340FF69FC /* RowProtocols.swift */, - 774E64F62D19C0B99410BBF3B8FE0555 /* RowType.swift */, - 79AAFAF1006DFD732C3559D661ABC07B /* RuleClosure.swift */, - 2275ABB30ED7FCACFB71FDEF947219F2 /* RuleEmail.swift */, - 805041F849AC6045DBA321E0CBE414ED /* RuleEqualsToRow.swift */, - 68D2D7BC97BBDFE8D04CF6B579F20125 /* RuleLength.swift */, - 7EDC871696C42F364FF9E4FBF320D207 /* RuleRange.swift */, - E5C982FD8EADF008ED080533ECC61350 /* RuleRegExp.swift */, - 45FD6950945FE0889962B8261E67750E /* RuleRequired.swift */, - 03A865F9D1855A690E30467224D40412 /* RuleURL.swift */, - E1AD9C87BF211B61583EFC0CDAAFD1FE /* Section.swift */, - 9DD5D404866482790244CEA58FC02516 /* SegmentedRow.swift */, - D25585170D6AB5308AE2A678B8A2AFD9 /* SelectableRowType.swift */, - E81B1BBAF0B43F0A7937AAA509040657 /* SelectableSection.swift */, - FCCDA1A52389202D21A2C0CE07AE0975 /* SelectorAlertController.swift */, - E15189F1DAD306A270886D315DA65038 /* SelectorRow.swift */, - 480C03B7DF1E21E39BD90A9F76955F98 /* SelectorViewController.swift */, - 604618765E9FC4A4C41502066047493A /* SliderRow.swift */, - FE837191BE21D305F27EADE4736036C7 /* StepperRow.swift */, - AB8EF9C425A89B975BEF843FFF552985 /* SwipeActions.swift */, - C7AE0E1C416BB967B5624D0ECADD53F8 /* SwitchRow.swift */, - 631A847995A0DF85FFC969F478E97199 /* TextAreaRow.swift */, - 64CA3F06341E9548CF06B61574FDE552 /* TriplePickerInputRow.swift */, - A4C0C98D51FEC617960BEE2F5E7EC507 /* TriplePickerRow.swift */, - 92D10EDF63A87D7BD2367F7E8DB62A50 /* Validation.swift */, - 08C34954AB9394F4BD1E0AE6B4BA1AD3 /* Support Files */, + 3142C223F4EB54E9A2E170B9D8ACA4BE /* Charts */, + 5ADA1BEE684F64550F523D76A4349CD3 /* Eureka */, + 4FE512F3B2184A5A5916DF9D4ADA2260 /* ShareClient */, + ); + name = Pods; + sourceTree = ""; + }; + 5ADA1BEE684F64550F523D76A4349CD3 /* Eureka */ = { + isa = PBXGroup; + children = ( + 4579AB6A714D0B0145487000C5B95DD8 /* ActionSheetRow.swift */, + E6153DD0B9FA40F02377E5F8A060E378 /* AlertOptionsRow.swift */, + 5F50F1D5643D6EBCA09E428806984608 /* AlertRow.swift */, + A4010AF1B513BF04041A5432AF20E42B /* BaseRow.swift */, + BB2EE47C8EFAFB7A567F4AFF90304521 /* ButtonRow.swift */, + 937E34112E8DDE6B37ECE22A0BDC59E7 /* ButtonRowWithPresent.swift */, + 568C835AC8B764A0183271E99058B163 /* Cell.swift */, + 33379FD8AB582363EBE9071C28E58575 /* CellType.swift */, + DB158EC4C258A5082D64122F7AF89500 /* CheckRow.swift */, + 8183772B19A56CF748806153BF97D089 /* Core.swift */, + EE9F53293DA948FB69D6A7E95F323FB4 /* DateFieldRow.swift */, + FDFAF86922EDD701C440B78809BA7858 /* DateInlineFieldRow.swift */, + 082D9D903940DEE55728285DC66D61EB /* DateInlineRow.swift */, + 0DAC497D7FAFA91FCC10B7463162949B /* DatePickerRow.swift */, + 68406FC37BCF5DE56607C70BA1C3EBC5 /* DateRow.swift */, + 3B417B1F0CF4DCEC4917E71B8477B9E1 /* DecimalFormatter.swift */, + E815F54AB4445B900090ACEE3A2FFF04 /* DoublePickerInputRow.swift */, + 5067C4CFC921FC0C56F6C5B3B4240008 /* DoublePickerRow.swift */, + C4F8A767A733062C597BA28637807CF6 /* FieldRow.swift */, + E304C127B722E54D8A82C9CAD421A740 /* FieldsRow.swift */, + 5471DA369762341AFA788636BF5238B0 /* Form.swift */, + 548BE84DABD9800530A1C66FE902B9C7 /* GenericMultipleSelectorRow.swift */, + F124EF1DD30BEFB748316D6CE0709B2E /* HeaderFooterView.swift */, + 00456494744A907EC58DC4BA16D53DD9 /* Helpers.swift */, + 7967D1617EF3687E7EA393DDFEBC8B31 /* InlineRowType.swift */, + C2982FD762FA7E78B9C8674FDBF7C488 /* LabelRow.swift */, + A9C7ED3BDF9A49970B6D7F0C0BF8E2B3 /* ListCheckRow.swift */, + 2D5C4B57627CE6A33CA5AFF28D7B4470 /* MultipleSelectorRow.swift */, + 5A92BA872BE33DE132E60FA393324DB1 /* MultipleSelectorViewController.swift */, + 5D0D30B8F618735D32A0FCFC52EB805D /* NavigationAccessoryView.swift */, + 55F11A5FF44761B6757A841E9A4FE3BD /* Operators.swift */, + 2E8F18420183616B27CA1A9863B96A94 /* OptionsRow.swift */, + 484636B2979047FB29E457F1E1725FD9 /* PickerInlineRow.swift */, + BF358AA0AFC2C0AF0152E704E7512517 /* PickerInputRow.swift */, + 2EEB10C82369CAF70178A725C299F81E /* PickerRow.swift */, + A909150E97DC082367FC2960FCB633BA /* PopoverSelectorRow.swift */, + 9FBA401AF5B307DD562DF29F2CC80553 /* PresenterRowType.swift */, + 2C9CD0FB1963D56F3399E0EF8469A0FA /* Protocols.swift */, + 589103C5CFBCC41339AECEF41A55A87A /* PushRow.swift */, + 20EACBD53E243A3F9DF8735D46C2460E /* Row.swift */, + 63B59B19AC178737F69F4E653E3D3C3C /* RowControllerType.swift */, + 0682A5A7DECA0B6B492499FF9E0BCE22 /* RowProtocols.swift */, + 1B2271519AA755EB5C69A7284CAA6F23 /* RowType.swift */, + E8BC5CA866C668A73EDFD53784DB4A4C /* RuleClosure.swift */, + 32A4B20180EE2205670B1B03813AD23E /* RuleEmail.swift */, + 93DBEA6C1381CFA8F6B6DFD85A9A5A02 /* RuleEqualsToRow.swift */, + B73122FF47D657B6EE798456F35C01B8 /* RuleLength.swift */, + 9F6A8E2C6ECCAF59C045894E1F3DF8C5 /* RuleRange.swift */, + 99445AF2EFD84919074857FAE2171830 /* RuleRegExp.swift */, + 358D210738B60758170EEAB4EBFD35F7 /* RuleRequired.swift */, + 99E407FE7A788430D697A04C2DDC4BE6 /* RuleURL.swift */, + 989650FD7F5122CA9AC857FF507D818E /* Section.swift */, + 01B137D762352C7744393FACFC24CC97 /* SegmentedRow.swift */, + 94046F1B95DF94D6E175F891C3C315AD /* SelectableRowType.swift */, + 11C0DC7BD82B4AEB6E245BAF4F6B3746 /* SelectableSection.swift */, + 2F2849FC47AE118D4F91DF4314FFF6BB /* SelectorAlertController.swift */, + ACC18BFAFFF03439AE7FC5425BC06568 /* SelectorRow.swift */, + 01022F6F2F1BF3E5C5F500A0650CC1BF /* SelectorViewController.swift */, + 263007DB32EB3A923F7839CBF8E121BA /* SliderRow.swift */, + 3DF639FF42B23B13286D9199B2D7C556 /* StepperRow.swift */, + 2F8A26F11880F80D57A284B6094FF410 /* SwipeActions.swift */, + 1F1396F9374A230FAADC599E8FA2CA92 /* SwitchRow.swift */, + 428FF5D0423FE20B4F82273AE39B347F /* TextAreaRow.swift */, + 2ED88FD8F5C5DE12E98FA1F15BA06F85 /* TriplePickerInputRow.swift */, + 7D8EB04398FDB94F46498AD99A989CA8 /* TriplePickerRow.swift */, + 99AC4BCC8856578AC43D03573FADE196 /* Validation.swift */, + 4BCC92DFEC2AF1A2792C20AA309B54F7 /* Support Files */, ); name = Eureka; path = Eureka; sourceTree = ""; }; - 65558019872A59570C54EEC30127F75E /* Support Files */ = { + 98591E8B414C24014E0BBBC0232C3D41 /* Support Files */ = { isa = PBXGroup; children = ( - 4BE549356A9D91D4E5A4967405F362C5 /* Charts.modulemap */, - 88E17727D64A26D166EA94F8B96ACAB4 /* Charts-dummy.m */, - 8DB307AF5190BC0642C752B5DE6AEC4E /* Charts-Info.plist */, - 015C2D96C13D444803A9754ABE5B9F39 /* Charts-prefix.pch */, - AAB5771835E6170F384829884E2B9985 /* Charts-umbrella.h */, - 65AD3DF61E7279E34430EAA394531696 /* Charts.debug.xcconfig */, - 1B51FA0A7F212B5A0C265121FBB47A8F /* Charts.release.xcconfig */, + 2CE0760BAB5896395C25F90C2A921230 /* Charts.modulemap */, + CA6A2727DA19123030277D8B0B6EAD4E /* Charts-dummy.m */, + 4FFBD63A349249CCAC76EAE17C6E540A /* Charts-Info.plist */, + 99A385B62C3482DFD4D1A6D9D36A48E8 /* Charts-prefix.pch */, + D753B6F3540FE6A7C56D2547C3EEF851 /* Charts-umbrella.h */, + 017205CE9DD9404E68FC3A813A5BC6A4 /* Charts.debug.xcconfig */, + 1CD849B795C7F3EE32C6353297C6F4CF /* Charts.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/Charts"; sourceTree = ""; }; - CF1408CF629C7361332E53B88F7BD30C = { + 9DBB6B5BA8A75BBF0E0EE3EDA0897BE9 /* Core */ = { isa = PBXGroup; children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, - CFC778CFC3B05B1588C425DC4BFFBFE5 /* Pods */, - 10EF57FA96C8A6EB332E6830C11ACAC4 /* Products */, - 4F2B32159E3EA4B0DF32393843F9E975 /* Targets Support Files */, + B9F3AC74EA385AD1FB48BB312B9A8D01 /* AnimatedMoveViewJob.swift */, + 59CE156C94B888A75504D963FB95A5A7 /* AnimatedViewPortJob.swift */, + 540C2AE657DFD33D82A5800A9A30E715 /* AnimatedZoomViewJob.swift */, + 3AF80E9E9FD2ABA19F783C1FE8CEDE21 /* Animator.swift */, + 57AAE9789B991F46EFCE58CE338AED41 /* AxisBase.swift */, + ECE9378CE08AC95D1C70F245CCC10937 /* AxisRendererBase.swift */, + 2D27C9E57D9FF2AF21780555D5ABAD72 /* BarChartData.swift */, + B31407514FCEAE451A67BFB01F99FD57 /* BarChartDataEntry.swift */, + 1B155A2FCCFFC4A5633BA14B82C657F3 /* BarChartDataProvider.swift */, + 45D5F14D7DBABC785E6B47E0AA271EE3 /* BarChartDataSet.swift */, + CFF6A340445BB493577104B53D9A7588 /* BarChartRenderer.swift */, + 8A88AC66D4BA5F2606CBD23F8BC468D4 /* BarChartView.swift */, + 51133B95E04FCEF52CECCBA0FA2FB64C /* BarHighlighter.swift */, + 02E9C61C3E7EBE33601F29273FD0610F /* BarLineChartViewBase.swift */, + E329C10FB955618FAB19FE474DB7071E /* BarLineScatterCandleBubbleChartData.swift */, + 38DFB2F0E62325600A27627339CCDDDD /* BarLineScatterCandleBubbleChartDataProvider.swift */, + AC8A8EC434DD8733B56039AB331048F1 /* BarLineScatterCandleBubbleChartDataSet.swift */, + 346C3FCE7CD5ADF791B7B4734B94FC6A /* BarLineScatterCandleBubbleRenderer.swift */, + A76791113E26FF4E2E0456B3AFBEB78B /* BubbleChartData.swift */, + CCF71002CB08FA43477C09804AD8CF00 /* BubbleChartDataEntry.swift */, + 7AC48B177FD06557DCB9C5C3583D5B87 /* BubbleChartDataProvider.swift */, + AEC6B766C4F4809D41B6E083F9A3F0AC /* BubbleChartDataSet.swift */, + B31F4F15FC21AB2A91319F457B686A31 /* BubbleChartRenderer.swift */, + 92E073284CCFB590C93D4DC4AF39731B /* BubbleChartView.swift */, + FABD11111F00FECAB5D76CA8D511540A /* CandleChartData.swift */, + EDBBC91348519BCFAF54CEB0F3A336E3 /* CandleChartDataEntry.swift */, + 8AFCBD39119B8A39E3A0CA0B9CE6C4FB /* CandleChartDataProvider.swift */, + 70FFA615C5AB19A462747668F6DFAE52 /* CandleChartDataSet.swift */, + 29A3C6AB4C2213910B58D3A525336E5E /* CandleStickChartRenderer.swift */, + F3C05AC94561A5051FEF33F481EC70E6 /* CandleStickChartView.swift */, + 254111998274AAAA1452EBD98043BD22 /* ChartAnimationEasing.swift */, + 71786812E4BA34CFE31958629790D981 /* ChartBaseDataSet.swift */, + 8F49CC163BE65B796CE8B4C654F0B221 /* ChartColorTemplates.swift */, + BCD106D95076EE34EC2C06B62908D944 /* ChartData.swift */, + E8520A7F8F8673F94B6DDE4B08E471B6 /* ChartDataEntry.swift */, + 205BB79BE6C1FCA776CE1D4293B9CDE3 /* ChartDataEntryBase.swift */, + 0A7DA86EA696B87A80FF54CABA26548A /* ChartDataProvider.swift */, + 3D5BDBD9C81A644553CCFCA2CEFF4633 /* ChartDataRendererBase.swift */, + 7D118C0F313FDC57A29E6BBB205A3799 /* ChartDataSet.swift */, + 0C2E8914194091C19C13CB44C9C7EA80 /* ChartHighlighter.swift */, + 26A4C0D12FF704C57F2F34EADF00CE47 /* ChartLimitLine.swift */, + 0AB3F85B18411852AC6F1EEBBB6D9DCA /* ChartUtils.swift */, + 0D9E3F84B8F3CDDF959B5457AC2CF6D9 /* ChartViewBase.swift */, + 9057EE1840994798463E40010C5B2BC5 /* ChevronDownShapeRenderer.swift */, + 21406035541105CB111B7A60D6C8FE35 /* ChevronUpShapeRenderer.swift */, + 91590B3C1B301C3DE53A488D68A81701 /* CircleShapeRenderer.swift */, + 919647803888A5B15DB3222FCDA56E0A /* CombinedChartData.swift */, + 5F60B3D090DD53CC3BA96A41B6A0776C /* CombinedChartDataProvider.swift */, + 8F12CC35F78CEC5436F967BCF50C5EF0 /* CombinedChartRenderer.swift */, + 5B27115EBCC224F7D67778C26B1275B8 /* CombinedChartView.swift */, + BE34CABB424024A41851C39678BA5EF3 /* CombinedHighlighter.swift */, + FEC2735DCC80FD5BCE93B7D1D57A05FB /* ComponentBase.swift */, + 2507ADB972377DD593EFFA943EA075D0 /* CrossShapeRenderer.swift */, + E27A5743F40167D8B6E7F58FB53D7607 /* DataApproximator.swift */, + 990AA38654ECD509645583469ADAFB2E /* DataApproximator+N.swift */, + 2EFBA8CE68D4633D9089932B8A4E3871 /* DefaultAxisValueFormatter.swift */, + 16F7E6A55623407EB9928C72D9EE3B5F /* DefaultFillFormatter.swift */, + 16C72CDF15178DB4843E0353D0DAD8AF /* DefaultValueFormatter.swift */, + 11D57BEB61E5B0C8070F999D1C04F128 /* Description.swift */, + D545BAE8C86C5021FAEB27D4C25D6F10 /* Fill.swift */, + 55D5F888EBF0F894D53C98C99A93C2DB /* Highlight.swift */, + 9A139CB129780B5CE6CC6A7ABE85922E /* HorizontalBarChartRenderer.swift */, + CBB8BBD29DF85A11464A5ADA946CB94D /* HorizontalBarChartView.swift */, + D61C45B0A3EA48AEABB9B6979D820216 /* HorizontalBarHighlighter.swift */, + 00184B71D9C00EA8FDF24D6CE7E8617B /* IAxisValueFormatter.swift */, + 46FC3BFFBF3E488A77264AF9F2A376D3 /* IBarChartDataSet.swift */, + 69BD15D5856F4E84E769AFD9438BF861 /* IBarLineScatterCandleBubbleChartDataSet.swift */, + B3C500690781B6631CE1C0946BDBDDAB /* IBubbleChartDataSet.swift */, + D3243DA31298D1FE6BEA4A606C0E0944 /* ICandleChartDataSet.swift */, + 14CC39F6C23F4D5D781A2C4B60DF765D /* IChartDataSet.swift */, + 805B8ACDB7AF64D4B1EFF9695D06D6E7 /* IFillFormatter.swift */, + A13F8D0A0BEAE5837834E66A8B1AAB8B /* IHighlighter.swift */, + C5C1C37151607BD73B8CBF52A04A3C2A /* ILineChartDataSet.swift */, + EBF8B918AB264444686976350703223A /* ILineRadarChartDataSet.swift */, + 914FD2A2403BAC9475234D3B9A7B13D4 /* ILineScatterCandleRadarChartDataSet.swift */, + E940C1BB7A0182B5BD9433DF9D6E040F /* IMarker.swift */, + B780059D2B1759DB0B490F39320EF494 /* IndexAxisValueFormatter.swift */, + 0C32A2598D7B44B2489E4DB9D0CEEA55 /* IPieChartDataSet.swift */, + 16D4AC313CBD7A5E08DA0B52709B04CA /* IRadarChartDataSet.swift */, + A869216FA3AC6BF4E9E522958EEC835A /* IScatterChartDataSet.swift */, + 0DB219299A8A67D5EC1C43C6BF5A8EE4 /* IShapeRenderer.swift */, + 52777F38E94D175B30FD6CCE0503BE91 /* IValueFormatter.swift */, + 6FCBC3E7CA177D591BC893AB3839AF87 /* Legend.swift */, + 03233AB6D94FE12321C740972ECDCC7C /* LegendEntry.swift */, + 13243CBC570EC1C4F0410EAB1D89DF92 /* LegendRenderer.swift */, + D365274AEF519C7E50E8567DEBC9CEF3 /* LineChartData.swift */, + 87C515318E4A075DCC3455EA33F32672 /* LineChartDataProvider.swift */, + 11084C60F774B99DECB61B35E3EC7DD3 /* LineChartDataSet.swift */, + 0AB9DAFB27FC7A51349BE9255F640DCF /* LineChartRenderer.swift */, + 4B632A9A6846FCE64A0A99A4D151E615 /* LineChartView.swift */, + 49992CCA5AEFDD6B4059FA55B46719E2 /* LineRadarChartDataSet.swift */, + EA7E136F2C50A7AAEFD8EE9EA59AA762 /* LineRadarRenderer.swift */, + F38C6C77C1EDABA11F488AF0CB7113BC /* LineScatterCandleRadarChartDataSet.swift */, + 97FE7FFB6C5E1BCD95EB806FAF00E4FC /* LineScatterCandleRadarRenderer.swift */, + 20212CB9D6FB4BFF75889AFB3C5646FC /* MarkerImage.swift */, + 2CEC4ADA231B20F225A0C0800CF05406 /* MarkerView.swift */, + AF8539432E41C7FAB4F3E455D0FC889F /* MoveViewJob.swift */, + B5027B3B59A4B57AD77A4D08FD35B4F5 /* PieChartData.swift */, + FB789687F3D81D3F4CB82C2550645219 /* PieChartDataEntry.swift */, + D44178678937D7A1451FAB15F69C1D8E /* PieChartDataSet.swift */, + E89110FD8C719CD0408D733C769EECC7 /* PieChartRenderer.swift */, + 5284FBF634CFF42E384E18E1D82F111C /* PieChartView.swift */, + B2D931E90044D88802D3FD030161D3C8 /* PieHighlighter.swift */, + F2DE04D0335A389EA6CFE06E46448744 /* PieRadarChartViewBase.swift */, + 5ACC330581B8B5D9791487A217968559 /* PieRadarHighlighter.swift */, + B403CCDCB84443B5F5C2ACB7F05262F8 /* Platform.swift */, + EBCB97DFE79BCFD22A9806F8AAE04749 /* Platform+Accessibility.swift */, + 32C854F81EB4FC44FABBDCDA04740B70 /* Platform+Color.swift */, + E1225F47304F13FF1AC7386400F4ED87 /* Platform+Gestures.swift */, + EDDD26C0BFFFEF7E05816A85ED3048C1 /* Platform+Graphics.swift */, + 527868253626F5726DA92BB29CCA64F5 /* Platform+Touch Handling.swift */, + 1B360F02EE859A284562621B5BC8061F /* RadarChartData.swift */, + 71A6113B0BF33B6BE24E733E54B29F11 /* RadarChartDataEntry.swift */, + 7FCC0B2AAFCFDCD7682F7C52CA90AEBC /* RadarChartDataSet.swift */, + B08418091F0B05BA6BDCC363F96B8C43 /* RadarChartRenderer.swift */, + 1EBF436B7501608AB33DA5DEF29C213A /* RadarChartView.swift */, + 21FF0C890A9774E7FC5E8434FB5FDA41 /* RadarHighlighter.swift */, + 28E3D7678445542747F9C16A8ADD7CC0 /* Range.swift */, + F31DFAC4317F012937CBC2CDADF0B452 /* Renderer.swift */, + C80D29F462EBAF9532A128EC200F45E9 /* ScatterChartData.swift */, + 947C167AF75DD780C25483F12F12822B /* ScatterChartDataProvider.swift */, + 0C61637BA5B312D410FE6D08195ECCE1 /* ScatterChartDataSet.swift */, + 0FD22F889858CF5ECBE1B37789BB2E68 /* ScatterChartRenderer.swift */, + F93BB1EE57468D56B0F2972A1F23E8E4 /* ScatterChartView.swift */, + 3F9B961D3E7671D04E9474A1C7A2194F /* SquareShapeRenderer.swift */, + E240AEA05F9F44EE97E2D31F32D155F8 /* Transformer.swift */, + C0B605529F8016666F6C3794D9768CA5 /* TransformerHorizontalBarChart.swift */, + 733827F65F5022C471A1447F04440570 /* TriangleShapeRenderer.swift */, + 49B9AD34B61808B09D75C28FEB6901A0 /* ViewPortHandler.swift */, + 4D28AE94DD8B0CC673A577C731C03431 /* ViewPortJob.swift */, + 35BFB3FED5774078472BE1B4BFB69E66 /* XAxis.swift */, + EAE582A1AABA555CA7E4333D8A82A6D9 /* XAxisRenderer.swift */, + 94F34C60E8ABE81F99BFB0915A1517A0 /* XAxisRendererHorizontalBarChart.swift */, + FFC29535908C42BB065B4E30585417A4 /* XAxisRendererRadarChart.swift */, + 9F61CC9BC348F45A50AD5AB2ED815BAB /* XShapeRenderer.swift */, + C4D9C9FC3F24D3132834031FBA0497B6 /* YAxis.swift */, + 44A1B6FFE86F41186B23437AC8B0AD94 /* YAxisRenderer.swift */, + F52B736816C4134465DD07E7A3C6EE82 /* YAxisRendererHorizontalBarChart.swift */, + 9423746E4BC0AD1992F5D13E2E1F9E70 /* YAxisRendererRadarChart.swift */, + 653297DA1AAAEEFC0BF5642F6604CDDC /* ZoomViewJob.swift */, ); + name = Core; sourceTree = ""; }; - CFC778CFC3B05B1588C425DC4BFFBFE5 /* Pods */ = { + 9EAE10647C1132BEA8591805CCE4B205 /* Support Files */ = { isa = PBXGroup; children = ( - 2A992A1E3B03450792DC85229803B825 /* Charts */, - 5E9E1E43890A876C6EDEDBD1FD22FEFC /* Eureka */, + 059FA0BC581C628A7E67661ABCE587BD /* ShareClient.modulemap */, + F458F913F6215D5244FD4EFCE470807B /* ShareClient-dummy.m */, + 4EFCC91F90BD17AD567D57CE537F2268 /* ShareClient-Info.plist */, + 3310EBD9F2A5EB47D39A359FDA666961 /* ShareClient-prefix.pch */, + A047E01EAD49DCD01C6AE241C055B64E /* ShareClient-umbrella.h */, + 27E029128823B9D672A01E4BB4DAD95B /* ShareClient.debug.xcconfig */, + E085DDC030F8EC270DBA2B97E1CBF58D /* ShareClient.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/ShareClient"; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, + 58A8F852B8FCFC7E73EA234EC77810F3 /* Pods */, + 0B47EBF6CDD6919FDEC1F73BC48C0D48 /* Products */, + 4F2B32159E3EA4B0DF32393843F9E975 /* Targets Support Files */, ); - name = Pods; sourceTree = ""; }; DB261ABD9474868F278295D2D489B4C2 /* Pods-LoopFollow */ = { @@ -846,33 +904,60 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 2B1298CA8BA121230C125C3AA5DC112C /* Headers */ = { + 3C21E3A60B8D2063E4CC2A0220E45AFD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7C944D24CCF29DC5C1B8232C1DBE0340 /* Pods-LoopFollow-umbrella.h in Headers */, + E3EDB632F407232103226EB2AF8C239D /* Charts-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3C21E3A60B8D2063E4CC2A0220E45AFD /* Headers */ = { + 7DD3157FBDD386B4916158C875050C47 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E3EDB632F407232103226EB2AF8C239D /* Charts-umbrella.h in Headers */, + C4EB1DE2CCEE60A99EB5AA718DD67105 /* Eureka-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7DD3157FBDD386B4916158C875050C47 /* Headers */ = { + 9B9F97AA1CF9FB0787D2291A888A6C93 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C4EB1DE2CCEE60A99EB5AA718DD67105 /* Eureka-umbrella.h in Headers */, + B66CAEA692B43131362E25A49DDF71EF /* Pods-LoopFollow-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D276E430C7565D9317DDE8279F92EFEE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5F840ED834EBE06F641AA87BD7B7B178 /* ShareClient-umbrella.h in Headers */, + 5160948170D313DCA6586CFADF3B2A6A /* ShareClient.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 32507FDB9BAD6EF17DCB14A888ECA5D9 /* ShareClient */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7531FF23B45C520CA26A36BB717E6A4A /* Build configuration list for PBXNativeTarget "ShareClient" */; + buildPhases = ( + D276E430C7565D9317DDE8279F92EFEE /* Headers */, + 6DE4FB6CA9BD0140F71EFF0ABFBD9611 /* Sources */, + EABB43369342DBA322AEFCFCA32DCDF2 /* Frameworks */, + 3E36C65E5AE7F55E311769F98062FD33 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ShareClient; + productName = ShareClient; + productReference = C2465E4C7B40A2D725278AEE6113E535 /* ShareClient.framework */; + productType = "com.apple.product-type.framework"; + }; 88BE8BE7A2FE6CED4193CCD8FF3CBEF7 /* Eureka */ = { isa = PBXNativeTarget; buildConfigurationList = 36778B42AB96755AAFA8AF892C40E50E /* Build configuration list for PBXNativeTarget "Eureka" */; @@ -911,18 +996,19 @@ }; E187D4B9C2B76F773546AF1E39D2ECCD /* Pods-LoopFollow */ = { isa = PBXNativeTarget; - buildConfigurationList = 830FE489D447214A7D4DCC2CAABC8049 /* Build configuration list for PBXNativeTarget "Pods-LoopFollow" */; + buildConfigurationList = C296AD097A8FA560D79E90D3C22C96E9 /* Build configuration list for PBXNativeTarget "Pods-LoopFollow" */; buildPhases = ( - 2B1298CA8BA121230C125C3AA5DC112C /* Headers */, - 9F20CE21DDE5321968CCD575C6B5DA93 /* Sources */, - 1745F82B3CC4880D8373C92843BD73A0 /* Frameworks */, - 9162B137BEE54A89999E3A43FDAA8416 /* Resources */, + 9B9F97AA1CF9FB0787D2291A888A6C93 /* Headers */, + 5BEF58C702FDC74DAA08B265E0143D5B /* Sources */, + 1DC97817961139E7E35F2AE2C60B6E3C /* Frameworks */, + A35DC61B22F4A23E51FB4B97627ABCE9 /* Resources */, ); buildRules = ( ); dependencies = ( - 6D8B5D1B9AD70D9E733DB930598E647F /* PBXTargetDependency */, - F840E2A0A183442D217AE53080A7D3C3 /* PBXTargetDependency */, + AA3C18940D595C8ABAA899EE95469C91 /* PBXTargetDependency */, + 8B0A5134AC4ECFA08B720B20790FFA19 /* PBXTargetDependency */, + 94AF0CD3D1D2B1992DFCD0273D0F2387 /* PBXTargetDependency */, ); name = "Pods-LoopFollow"; productName = "Pods-LoopFollow"; @@ -947,19 +1033,27 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 10EF57FA96C8A6EB332E6830C11ACAC4 /* Products */; + productRefGroup = 0B47EBF6CDD6919FDEC1F73BC48C0D48 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( BF03B0B2B8B052092CB5F90CC5FB3757 /* Charts */, 88BE8BE7A2FE6CED4193CCD8FF3CBEF7 /* Eureka */, E187D4B9C2B76F773546AF1E39D2ECCD /* Pods-LoopFollow */, + 32507FDB9BAD6EF17DCB14A888ECA5D9 /* ShareClient */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 9162B137BEE54A89999E3A43FDAA8416 /* Resources */ = { + 3E36C65E5AE7F55E311769F98062FD33 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A35DC61B22F4A23E51FB4B97627ABCE9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1057,6 +1151,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 5BEF58C702FDC74DAA08B265E0143D5B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F1B37767979921C4758B54144610815D /* Pods-LoopFollow-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 6D366EFBB5EBF23E78291B1F4BFCECFA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1205,35 +1307,42 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9F20CE21DDE5321968CCD575C6B5DA93 /* Sources */ = { + 6DE4FB6CA9BD0140F71EFF0ABFBD9611 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B7F7A44644C42AB4F5FD569F6B1EAD58 /* Pods-LoopFollow-dummy.m in Sources */, + D7D17805603B1DD6F02D8108C31090E5 /* ShareClient-dummy.m in Sources */, + 3116B2E3FECFF3942AEA6BF17796CA37 /* ShareClient.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 6D8B5D1B9AD70D9E733DB930598E647F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Charts; - target = BF03B0B2B8B052092CB5F90CC5FB3757 /* Charts */; - targetProxy = 67241C8E1C4F3763EEFBE1158914CC77 /* PBXContainerItemProxy */; - }; - F840E2A0A183442D217AE53080A7D3C3 /* PBXTargetDependency */ = { + 8B0A5134AC4ECFA08B720B20790FFA19 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Eureka; target = 88BE8BE7A2FE6CED4193CCD8FF3CBEF7 /* Eureka */; - targetProxy = 6CD95FF1D5DAF8313F0757EB40F5C9A3 /* PBXContainerItemProxy */; + targetProxy = 87D6DD57B95016F1515B8CA873C52B51 /* PBXContainerItemProxy */; + }; + 94AF0CD3D1D2B1992DFCD0273D0F2387 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ShareClient; + target = 32507FDB9BAD6EF17DCB14A888ECA5D9 /* ShareClient */; + targetProxy = 768CF338A2BC484E9597CD398DFA4136 /* PBXContainerItemProxy */; + }; + AA3C18940D595C8ABAA899EE95469C91 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Charts; + target = BF03B0B2B8B052092CB5F90CC5FB3757 /* Charts */; + targetProxy = 7272ABD8A5C4DE0FAA10777D4FE249DD /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 006A8D074426E7178BCD5048F6EBC566 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EAE950ECC462BCF193C89D86EEB21977 /* Eureka.release.xcconfig */; + baseConfigurationReference = B3127CF0F6CFE1BEDAD6752A448E7D67 /* Eureka.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1269,7 +1378,7 @@ }; 13DF91FECD4EB2AAAF95405099441E29 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 65AD3DF61E7279E34430EAA394531696 /* Charts.debug.xcconfig */; + baseConfigurationReference = 017205CE9DD9404E68FC3A813A5BC6A4 /* Charts.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1302,83 +1411,6 @@ }; name = Debug; }; - 1D3649A307AC9B0A097467A55247CCF8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EBE2A8C176CC9C76279BE195BDA90B7F /* Pods-LoopFollow.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = 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-LoopFollow/Pods-LoopFollow-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-LoopFollow/Pods-LoopFollow.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; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 4F00B863FE0F61394DBDF2771B1F28C8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B1DF43F4B1524F385F6090756FA3016A /* Pods-LoopFollow.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = 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-LoopFollow/Pods-LoopFollow-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-LoopFollow/Pods-LoopFollow.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; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 6C61D818ACD3C2C116FED6A9C67E91B4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1443,6 +1475,43 @@ }; name = Debug; }; + 7445CE2DA3D731E7CC7B9F0E82576D87 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E085DDC030F8EC270DBA2B97E1CBF58D /* ShareClient.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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/ShareClient/ShareClient-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ShareClient/ShareClient-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ShareClient/ShareClient.modulemap"; + PRODUCT_MODULE_NAME = ShareClient; + PRODUCT_NAME = ShareClient; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 7DC5F11AFBEAE473E8D3C24A2D11338D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1503,9 +1572,45 @@ }; name = Release; }; + 872B91677D6C5E98109D15A182CD805F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 27E029128823B9D672A01E4BB4DAD95B /* ShareClient.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = 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/ShareClient/ShareClient-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ShareClient/ShareClient-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/ShareClient/ShareClient.modulemap"; + PRODUCT_MODULE_NAME = ShareClient; + PRODUCT_NAME = ShareClient; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 8843ACEAF275101A2F5739BFC13D4E90 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1B51FA0A7F212B5A0C265121FBB47A8F /* Charts.release.xcconfig */; + baseConfigurationReference = 1CD849B795C7F3EE32C6353297C6F4CF /* Charts.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1539,9 +1644,48 @@ }; name = Release; }; + A57D7F46620CEA8E6010E60F37AA1C40 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EBE2A8C176CC9C76279BE195BDA90B7F /* Pods-LoopFollow.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = 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-LoopFollow/Pods-LoopFollow-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LoopFollow/Pods-LoopFollow.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; D27C976E5A2F75B799103220B6FECE18 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 972988CAA5B213B4B7E79E686D947066 /* Eureka.debug.xcconfig */; + baseConfigurationReference = B28A2F7F1E6F57132EDC348E349719CA /* Eureka.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1574,6 +1718,44 @@ }; name = Debug; }; + E56FA54D604FEC313768CAB1F44761B8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B1DF43F4B1524F385F6090756FA3016A /* Pods-LoopFollow.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = 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-LoopFollow/Pods-LoopFollow-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LoopFollow/Pods-LoopFollow.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1595,11 +1777,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 830FE489D447214A7D4DCC2CAABC8049 /* Build configuration list for PBXNativeTarget "Pods-LoopFollow" */ = { + 7531FF23B45C520CA26A36BB717E6A4A /* Build configuration list for PBXNativeTarget "ShareClient" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 872B91677D6C5E98109D15A182CD805F /* Debug */, + 7445CE2DA3D731E7CC7B9F0E82576D87 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C296AD097A8FA560D79E90D3C22C96E9 /* Build configuration list for PBXNativeTarget "Pods-LoopFollow" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4F00B863FE0F61394DBDF2771B1F28C8 /* Debug */, - 1D3649A307AC9B0A097467A55247CCF8 /* Release */, + E56FA54D604FEC313768CAB1F44761B8 /* Debug */, + A57D7F46620CEA8E6010E60F37AA1C40 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Pods.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/ShareClient.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/ShareClient.xcscheme new file mode 100644 index 000000000..669728282 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/ShareClient.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist index 56c9680c4..f3c5e873d 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/jon.xcuserdatad/xcschemes/xcschememanagement.plist @@ -25,6 +25,13 @@ orderHint 2 + ShareClient.xcscheme + + isShown + + orderHint + 3 + SuppressBuildableAutocreation diff --git a/Pods/ShareClient/LICENSE b/Pods/ShareClient/LICENSE new file mode 100644 index 000000000..0d98a1db8 --- /dev/null +++ b/Pods/ShareClient/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Mark Wilson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pods/ShareClient/ShareClient/ShareClient.h b/Pods/ShareClient/ShareClient/ShareClient.h new file mode 100644 index 000000000..2d67034b0 --- /dev/null +++ b/Pods/ShareClient/ShareClient/ShareClient.h @@ -0,0 +1,19 @@ +// +// ShareClient.h +// ShareClient +// +// Created by Nathan Racklyeft on 5/8/16. +// Copyright © 2016 Mark Wilson. All rights reserved. +// + +#import + +//! Project version number for ShareClient. +FOUNDATION_EXPORT double ShareClientVersionNumber; + +//! Project version string for ShareClient. +FOUNDATION_EXPORT const unsigned char ShareClientVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/Pods/ShareClient/ShareClient/ShareClient.swift b/Pods/ShareClient/ShareClient/ShareClient.swift new file mode 100644 index 000000000..70d869c98 --- /dev/null +++ b/Pods/ShareClient/ShareClient/ShareClient.swift @@ -0,0 +1,222 @@ +// +// ShareClient.h +// ShareClient +// +// Created by Mark Wilson on 5/7/16. +// Copyright © 2016 Mark Wilson. All rights reserved. +// + +import Foundation + +public struct ShareGlucose { + public let glucose: UInt16 + public let trend: UInt8 + public let timestamp: Date +} + +public enum ShareError: Error { + case httpError(Error) + // some possible values of errorCode: + // SSO_AuthenticateAccountNotFound + // SSO_AuthenticatePasswordInvalid + // SSO_AuthenticateMaxAttemptsExceeed + case loginError(errorCode: String) + case fetchError + case dataError(reason: String) + case dateError +} + + +public enum KnownShareServers: String { + case US="https://share1.dexcom.com" + case NON_US="https://shareous1.dexcom.com" + +} + +// From the Dexcom Share iOS app, via @bewest and @shanselman: +// https://github.com/bewest/share2nightscout-bridge +private let dexcomUserAgent = "Dexcom Share/3.0.2.11 CFNetwork/711.2.23 Darwin/14.0.0" +private let dexcomApplicationId = "d89443d2-327c-4a6f-89e5-496bbb0317db" +private let dexcomLoginPath = "/ShareWebServices/Services/General/LoginPublisherAccountByName" +private let dexcomLatestGlucosePath = "/ShareWebServices/Services/Publisher/ReadPublisherLatestGlucoseValues" +private let maxReauthAttempts = 2 + +// TODO use an HTTP library which supports JSON and futures instead of callbacks. +// using cocoapods in a playground appears complicated +// ¯\_(ツ)_/¯ +private func dexcomPOST(_ url: URL, JSONData: [String: AnyObject]? = nil, callback: @escaping (Error?, String?) -> Void) { + var data: Data? + + if let JSONData = JSONData { + guard let encoded = try? JSONSerialization.data(withJSONObject: JSONData, options:[]) else { + return callback(ShareError.dataError(reason: "Failed to encode JSON for POST to " + url.absoluteString), nil) + } + + data = encoded + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.addValue("application/json", forHTTPHeaderField: "Content-Type") + request.addValue("application/json", forHTTPHeaderField: "Accept") + request.addValue(dexcomUserAgent, forHTTPHeaderField: "User-Agent") + request.httpBody = data + + URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in + if error != nil { + callback(error, nil) + } else { + callback(nil, String(data: data!, encoding: .utf8)) + } + }).resume() +} + +public class ShareClient { + public let username: String + public let password: String + + private let shareServer:String + private var token: String? + + public init(username: String, password: String, shareServer:String=KnownShareServers.US.rawValue) { + self.username = username + self.password = password + self.shareServer = shareServer + } + public convenience init(username: String, password: String, shareServer:KnownShareServers=KnownShareServers.US) { + + self.init(username: username, password: password, shareServer:shareServer.rawValue) + + } + + public func fetchLast(_ n: Int, callback: @escaping (ShareError?, [ShareGlucose]?) -> Void) { + fetchLastWithRetries(n, remaining: maxReauthAttempts, callback: callback) + } + + private func ensureToken(_ callback: @escaping (ShareError?) -> Void) { + if token != nil { + callback(nil) + } else { + fetchToken() { (error, token) in + if error != nil { + callback(error) + } else { + self.token = token + callback(nil) + } + } + } + } + + private func fetchToken(_ callback: @escaping (ShareError?, String?) -> Void) { + let data = [ + "accountName": username, + "password": password, + "applicationId": dexcomApplicationId + ] + + guard let url = URL(string: shareServer + dexcomLoginPath) else { + return callback(ShareError.fetchError, nil) + } + + dexcomPOST(url, JSONData: data as [String : AnyObject]?) { (error, response) in + if let error = error { + return callback(.httpError(error), nil) + } + + guard let response = response, + let data = response.data(using: .utf8), + let decoded = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) + else { + return callback(.loginError(errorCode: "unknown"), nil) + } + + if let token = decoded as? String { + // success is a JSON-encoded string containing the token + callback(nil, token) + } else { + // failure is a JSON object containing the error reason + let errorCode = (decoded as? [String: String])?["Code"] ?? "unknown" + callback(.loginError(errorCode: errorCode), nil) + } + } + } + + private func fetchLastWithRetries(_ n: Int, remaining: Int, callback: @escaping (ShareError?, [ShareGlucose]?) -> Void) { + ensureToken() { (error) in + guard error == nil else { + return callback(error, nil) + } + + guard var components = URLComponents(string: self.shareServer + dexcomLatestGlucosePath) else { + return callback(.fetchError, nil) + } + + components.queryItems = [ + URLQueryItem(name: "sessionId", value: self.token), + URLQueryItem(name: "minutes", value: String(1440)), + URLQueryItem(name: "maxCount", value: String(n)) + ] + + guard let url = components.url else { + return callback(.fetchError, nil) + } + + dexcomPOST(url) { (error, response) in + if let error = error { + return callback(.httpError(error), nil) + } + + do { + guard let response = response else { + throw ShareError.fetchError + } + + let decoded = try? JSONSerialization.jsonObject(with: response.data(using: .utf8)!, options: []) + guard let sgvs = decoded as? Array else { + if remaining > 0 { + self.token = nil + return self.fetchLastWithRetries(n, remaining: remaining - 1, callback: callback) + } else { + throw ShareError.dataError(reason: "Failed to decode SGVs as array after trying to reauth: " + response) + } + } + + var transformed: Array = [] + for sgv in sgvs { + if let glucose = sgv["Value"] as? Int, let trend = sgv["Trend"] as? Int, let wt = sgv["WT"] as? String { + transformed.append(ShareGlucose( + glucose: UInt16(glucose), + trend: UInt8(trend), + timestamp: try self.parseDate(wt) + )) + } else { + throw ShareError.dataError(reason: "Failed to decode an SGV record: " + response) + } + } + callback(nil, transformed) + } catch let error as ShareError { + callback(error, nil) + } catch { + callback(.fetchError, nil) + } + } + } + } + + private func parseDate(_ wt: String) throws -> Date { + // wt looks like "/Date(1462404576000)/" + let re = try NSRegularExpression(pattern: "\\((.*)\\)") + if let match = re.firstMatch(in: wt, range: NSMakeRange(0, wt.count)) { + #if swift(>=4) + let matchRange = match.range(at: 1) + #else + let matchRange = match.rangeAt(1) + #endif + let epoch = Double((wt as NSString).substring(with: matchRange))! / 1000 + return Date(timeIntervalSince1970: epoch) + } else { + throw ShareError.dateError + } + } +} diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.markdown b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.markdown index 3b12de8b5..e60386534 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.markdown @@ -231,4 +231,29 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +## ShareClient + +The MIT License (MIT) + +Copyright (c) 2016 Mark Wilson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.plist b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.plist index 3a8a4aee8..c3ef6992c 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-acknowledgements.plist @@ -255,6 +255,37 @@ SOFTWARE. Type PSGroupSpecifier + + FooterText + The MIT License (MIT) + +Copyright (c) 2016 Mark Wilson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + ShareClient + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-input-files.xcfilelist index 84c35777c..4dce4e416 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-input-files.xcfilelist @@ -1,3 +1,4 @@ ${PODS_ROOT}/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh ${BUILT_PRODUCTS_DIR}/Charts/Charts.framework -${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework \ No newline at end of file +${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework +${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-output-files.xcfilelist index 2f4c5a945..f37a0ae29 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Debug-output-files.xcfilelist @@ -1,2 +1,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Charts.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Eureka.framework \ No newline at end of file +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Eureka.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ShareClient.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-input-files.xcfilelist index 84c35777c..4dce4e416 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-input-files.xcfilelist @@ -1,3 +1,4 @@ ${PODS_ROOT}/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh ${BUILT_PRODUCTS_DIR}/Charts/Charts.framework -${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework \ No newline at end of file +${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework +${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-output-files.xcfilelist index 2f4c5a945..f37a0ae29 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks-Release-output-files.xcfilelist @@ -1,2 +1,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Charts.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Eureka.framework \ No newline at end of file +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Eureka.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ShareClient.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh index baa3c343b..92a2f2b23 100755 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow-frameworks.sh @@ -199,10 +199,12 @@ fi if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Charts/Charts.framework" install_framework "${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Charts/Charts.framework" install_framework "${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ShareClient/ShareClient.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.debug.xcconfig b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.debug.xcconfig index 982c690ec..3f1a812d8 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.debug.xcconfig +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.debug.xcconfig @@ -1,9 +1,9 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka/Eureka.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka/Eureka.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient/ShareClient.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Charts" -framework "Eureka" -framework "Foundation" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "Charts" -framework "Eureka" -framework "Foundation" -framework "ShareClient" -framework "UIKit" 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-LoopFollow/Pods-LoopFollow.release.xcconfig b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.release.xcconfig index 982c690ec..3f1a812d8 100644 --- a/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.release.xcconfig +++ b/Pods/Target Support Files/Pods-LoopFollow/Pods-LoopFollow.release.xcconfig @@ -1,9 +1,9 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka/Eureka.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Charts/Charts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Eureka/Eureka.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ShareClient/ShareClient.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Charts" -framework "Eureka" -framework "Foundation" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "Charts" -framework "Eureka" -framework "Foundation" -framework "ShareClient" -framework "UIKit" 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/ShareClient/ShareClient-Info.plist b/Pods/Target Support Files/ShareClient/ShareClient-Info.plist new file mode 100644 index 000000000..2a9158a0b --- /dev/null +++ b/Pods/Target Support Files/ShareClient/ShareClient-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.2.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/ShareClient/ShareClient-dummy.m b/Pods/Target Support Files/ShareClient/ShareClient-dummy.m new file mode 100644 index 000000000..d45c52caf --- /dev/null +++ b/Pods/Target Support Files/ShareClient/ShareClient-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ShareClient : NSObject +@end +@implementation PodsDummy_ShareClient +@end diff --git a/Pods/Target Support Files/ShareClient/ShareClient-prefix.pch b/Pods/Target Support Files/ShareClient/ShareClient-prefix.pch new file mode 100644 index 000000000..beb2a2441 --- /dev/null +++ b/Pods/Target Support Files/ShareClient/ShareClient-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/ShareClient/ShareClient-umbrella.h b/Pods/Target Support Files/ShareClient/ShareClient-umbrella.h new file mode 100644 index 000000000..578fbf572 --- /dev/null +++ b/Pods/Target Support Files/ShareClient/ShareClient-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "ShareClient.h" + +FOUNDATION_EXPORT double ShareClientVersionNumber; +FOUNDATION_EXPORT const unsigned char ShareClientVersionString[]; + diff --git a/Pods/Target Support Files/ShareClient/ShareClient.debug.xcconfig b/Pods/Target Support Files/ShareClient/ShareClient.debug.xcconfig new file mode 100644 index 000000000..5cc916227 --- /dev/null +++ b/Pods/Target Support Files/ShareClient/ShareClient.debug.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ShareClient +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}/ShareClient +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/ShareClient/ShareClient.modulemap b/Pods/Target Support Files/ShareClient/ShareClient.modulemap new file mode 100644 index 000000000..81b51f238 --- /dev/null +++ b/Pods/Target Support Files/ShareClient/ShareClient.modulemap @@ -0,0 +1,6 @@ +framework module ShareClient { + umbrella header "ShareClient-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/ShareClient/ShareClient.release.xcconfig b/Pods/Target Support Files/ShareClient/ShareClient.release.xcconfig new file mode 100644 index 000000000..5cc916227 --- /dev/null +++ b/Pods/Target Support Files/ShareClient/ShareClient.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ShareClient +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}/ShareClient +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES