Skip to content

Commit 3efadb7

Browse files
authored
LOOP-4169 Store settings in CoreData (#515)
* Wip * Use delayed trigger alerts for workout override reminder * Tests passing * Saving using LoopSettings from CoreData * Migrate settings from UserDefaults * DosingStrategy -> AutomaticDosingStrategy * Updates from PR review * Learn fixes * Fix flakey test * Make recordIssued private
1 parent 79dc466 commit 3efadb7

25 files changed

+550
-753
lines changed

Common/FeatureFlags.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ struct FeatureFlagConfiguration: Decodable {
3434
let siriEnabled: Bool
3535
let simpleBolusCalculatorEnabled: Bool
3636
let usePositiveMomentumAndRCForManualBoluses: Bool
37+
let dynamicCarbAbsorptionEnabled: Bool
38+
3739

3840
fileprivate init() {
3941
// Swift compiler config is inverse, since the default state is enabled.
@@ -193,6 +195,8 @@ struct FeatureFlagConfiguration: Decodable {
193195
#else
194196
self.usePositiveMomentumAndRCForManualBoluses = true
195197
#endif
198+
199+
self.dynamicCarbAbsorptionEnabled = true
196200
}
197201
}
198202

@@ -223,6 +227,7 @@ extension FeatureFlagConfiguration : CustomDebugStringConvertible {
223227
"* allowDebugFeatures: \(allowDebugFeatures)",
224228
"* simpleBolusCalculatorEnabled: \(simpleBolusCalculatorEnabled)",
225229
"* usePositiveMomentumAndRCForManualBoluses: \(usePositiveMomentumAndRCForManualBoluses)",
230+
"* dynamicCarbAbsorptionEnabled: \(dynamicCarbAbsorptionEnabled)"
226231
].joined(separator: "\n")
227232
}
228233
}

Learn/Managers/DataManager.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ final class DataManager {
2121
let settings: LoopSettings
2222

2323
init(
24-
basalRateSchedule: BasalRateSchedule? = UserDefaults.appGroup?.basalRateSchedule,
25-
carbRatioSchedule: CarbRatioSchedule? = UserDefaults.appGroup?.carbRatioSchedule,
26-
defaultRapidActingModel: ExponentialInsulinModelPreset? = UserDefaults.appGroup?.defaultRapidActingModel,
27-
insulinSensitivitySchedule: InsulinSensitivitySchedule? = UserDefaults.appGroup?.insulinSensitivitySchedule,
28-
settings: LoopSettings = UserDefaults.appGroup?.loopSettings ?? LoopSettings()
24+
basalRateSchedule: BasalRateSchedule? = UserDefaults.appGroup?.legacyBasalRateSchedule,
25+
carbRatioSchedule: CarbRatioSchedule? = UserDefaults.appGroup?.legacyCarbRatioSchedule,
26+
defaultRapidActingModel: ExponentialInsulinModelPreset? = UserDefaults.appGroup?.legacyDefaultRapidActingModel,
27+
insulinSensitivitySchedule: InsulinSensitivitySchedule? = UserDefaults.appGroup?.legacyInsulinSensitivitySchedule,
28+
settings: LoopSettings = UserDefaults.appGroup?.legacyLoopSettings ?? LoopSettings()
2929
) {
3030
self.settings = settings
3131

Loop Status Extension/StatusViewController.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ class StatusViewController: UIViewController, NCWidgetProviding {
7777

7878
lazy var cacheStore = PersistenceController.controllerInAppGroupDirectory()
7979

80+
lazy var localCacheDuration = Bundle.main.localCacheDuration
81+
82+
lazy var settingsStore: SettingsStore = SettingsStore(
83+
store: cacheStore,
84+
expireAfter: localCacheDuration)
85+
8086
lazy var glucoseStore = GlucoseStore(
8187
healthStore: healthStore,
8288
observeHealthKitSamplesFromOtherApps: FeatureFlags.observeHealthKitGlucoseSamplesFromOtherApps,
@@ -92,10 +98,10 @@ class StatusViewController: UIViewController, NCWidgetProviding {
9298
storeSamplesToHealthKit: false,
9399
cacheStore: cacheStore,
94100
observationEnabled: false,
95-
insulinModelProvider: PresetInsulinModelProvider(defaultRapidActingModel: defaults?.defaultRapidActingModel),
101+
insulinModelProvider: PresetInsulinModelProvider(defaultRapidActingModel: settingsStore.latestSettings?.defaultRapidActingModel?.presetForRapidActingInsulin),
96102
longestEffectDuration: ExponentialInsulinModelPreset.rapidActingAdult.effectDuration,
97-
basalProfile: defaults?.basalRateSchedule,
98-
insulinSensitivitySchedule: defaults?.insulinSensitivitySchedule,
103+
basalProfile: settingsStore.latestSettings?.basalRateSchedule,
104+
insulinSensitivitySchedule: settingsStore.latestSettings?.insulinSensitivitySchedule,
99105
provenanceIdentifier: HKSource.default().bundleIdentifier
100106
)
101107

@@ -313,7 +319,7 @@ class StatusViewController: UIViewController, NCWidgetProviding {
313319
self.charts.predictedGlucose.setPredictedGlucoseValues([])
314320
}
315321

316-
self.charts.predictedGlucose.targetGlucoseSchedule = defaults.loopSettings?.glucoseTargetRangeSchedule
322+
self.charts.predictedGlucose.targetGlucoseSchedule = self.settingsStore.latestSettings?.glucoseTargetRangeSchedule
317323
self.charts.invalidateChart(atIndex: 0)
318324
self.charts.prerender()
319325
self.glucoseChartContentView.reloadChart()

Loop.xcodeproj/project.pbxproj

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
1D05219D2469F1F5000EBBDE /* AlertStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D05219C2469F1F5000EBBDE /* AlertStore.swift */; };
1212
1D080CBD2473214A00356610 /* AlertStore.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1D080CBB2473214A00356610 /* AlertStore.xcdatamodeld */; };
1313
1D12D3B92548EFDD00B53E8B /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D12D3B82548EFDD00B53E8B /* main.swift */; };
14-
1D2609AD248EEB9900A6F258 /* LoopAlertsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D2609AC248EEB9900A6F258 /* LoopAlertsManager.swift */; };
1514
1D3F0F7526D59B6C004A5960 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892A5D58222F0A27008961AB /* Debug.swift */; };
1615
1D3F0F7626D59DCD004A5960 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892A5D58222F0A27008961AB /* Debug.swift */; };
1716
1D3F0F7726D59DCE004A5960 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892A5D58222F0A27008961AB /* Debug.swift */; };
@@ -415,7 +414,6 @@
415414
B4AC0D3F24B9005300CDB0A1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEE31CDE5C0A003C8C80 /* UIImage.swift */; };
416415
B4BC56382518DEA900373647 /* CGMStatusHUDViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4BC56372518DEA900373647 /* CGMStatusHUDViewModelTests.swift */; };
417416
B4C9859425D5A3BB009FD9CA /* StatusBadgeHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C9859325D5A3BB009FD9CA /* StatusBadgeHUDView.swift */; };
418-
B4CAD8612549D1530057946B /* LoopSettingsAlerter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CAD8502549D02D0057946B /* LoopSettingsAlerter.swift */; };
419417
B4CAD8792549D2540057946B /* LoopCompletionFreshnessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CAD8782549D2540057946B /* LoopCompletionFreshnessTests.swift */; };
420418
B4D620D424D9EDB900043B3C /* GuidanceColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D620D324D9EDB900043B3C /* GuidanceColors.swift */; };
421419
B4E202302661063E009421B5 /* ClosedLoopStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E2022F2661063E009421B5 /* ClosedLoopStatus.swift */; };
@@ -428,7 +426,6 @@
428426
B4E96D5B248A8229002DABAD /* StatusBarHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E96D5A248A8229002DABAD /* StatusBarHUDView.swift */; };
429427
B4E96D5D248A82A2002DABAD /* StatusBarHUDView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B4E96D5C248A82A2002DABAD /* StatusBarHUDView.xib */; };
430428
B4F3D25124AF890C0095CE44 /* BluetoothStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4F3D25024AF890C0095CE44 /* BluetoothStateManager.swift */; };
431-
B4FACBB12541FAB700199981 /* LoopSettingsAlerterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4FACBB02541FAB700199981 /* LoopSettingsAlerterTests.swift */; };
432429
B4FEEF7D24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4FEEF7C24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift */; };
433430
C10B28461EA9BA5E006EA1FC /* far_future_high_bg_forecast.json in Resources */ = {isa = PBXBuildFile; fileRef = C10B28451EA9BA5E006EA1FC /* far_future_high_bg_forecast.json */; };
434431
C11BD0552523CFED00236B08 /* SimpleBolusViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C11BD0542523CFED00236B08 /* SimpleBolusViewModel.swift */; };
@@ -440,7 +437,6 @@
440437
C13BAD941E8009B000050CB5 /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0B31E45C1BE00FF19A9 /* NumberFormatter.swift */; };
441438
C13DA2B024F6C7690098BB29 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C13DA2AF24F6C7690098BB29 /* UIViewController.swift */; };
442439
C148CEE724FD91BD00711B3B /* DeliveryUncertaintyAlertManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C148CEE624FD91BD00711B3B /* DeliveryUncertaintyAlertManager.swift */; };
443-
C1549B782837DF4E002B190C /* LoopAlertManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1549B772837DF4E002B190C /* LoopAlertManagerTests.swift */; };
444440
C165756F2534C468004AE16E /* SimpleBolusViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C165756E2534C468004AE16E /* SimpleBolusViewModelTests.swift */; };
445441
C16575712538A36B004AE16E /* CGMStalenessMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C16575702538A36B004AE16E /* CGMStalenessMonitor.swift */; };
446442
C16575732538AFF6004AE16E /* CGMStalenessMonitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C16575722538AFF6004AE16E /* CGMStalenessMonitorTests.swift */; };
@@ -783,7 +779,6 @@
783779
1D05219C2469F1F5000EBBDE /* AlertStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertStore.swift; sourceTree = "<group>"; };
784780
1D080CBC2473214A00356610 /* AlertStore.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = AlertStore.xcdatamodel; sourceTree = "<group>"; };
785781
1D12D3B82548EFDD00B53E8B /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
786-
1D2609AC248EEB9900A6F258 /* LoopAlertsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopAlertsManager.swift; sourceTree = "<group>"; };
787782
1D49795724E7289700948F05 /* ServicesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesViewModel.swift; sourceTree = "<group>"; };
788783
1D4A3E2B2478628500FD601B /* StoredAlert+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StoredAlert+CoreDataClass.swift"; sourceTree = "<group>"; };
789784
1D4A3E2C2478628500FD601B /* StoredAlert+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StoredAlert+CoreDataProperties.swift"; sourceTree = "<group>"; };
@@ -1363,7 +1358,6 @@
13631358
B490A04224D055D900F509FA /* DeviceStatusHighlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceStatusHighlight.swift; sourceTree = "<group>"; };
13641359
B4BC56372518DEA900373647 /* CGMStatusHUDViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMStatusHUDViewModelTests.swift; sourceTree = "<group>"; };
13651360
B4C9859325D5A3BB009FD9CA /* StatusBadgeHUDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusBadgeHUDView.swift; sourceTree = "<group>"; };
1366-
B4CAD8502549D02D0057946B /* LoopSettingsAlerter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopSettingsAlerter.swift; sourceTree = "<group>"; };
13671361
B4CAD8782549D2540057946B /* LoopCompletionFreshnessTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopCompletionFreshnessTests.swift; sourceTree = "<group>"; };
13681362
B4D620D324D9EDB900043B3C /* GuidanceColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuidanceColors.swift; sourceTree = "<group>"; };
13691363
B4E2022F2661063E009421B5 /* ClosedLoopStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClosedLoopStatus.swift; sourceTree = "<group>"; };
@@ -1376,7 +1370,6 @@
13761370
B4E96D5A248A8229002DABAD /* StatusBarHUDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusBarHUDView.swift; sourceTree = "<group>"; };
13771371
B4E96D5C248A82A2002DABAD /* StatusBarHUDView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StatusBarHUDView.xib; sourceTree = "<group>"; };
13781372
B4F3D25024AF890C0095CE44 /* BluetoothStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BluetoothStateManager.swift; sourceTree = "<group>"; };
1379-
B4FACBB02541FAB700199981 /* LoopSettingsAlerterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopSettingsAlerterTests.swift; sourceTree = "<group>"; };
13801373
B4FEEF7C24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DeviceDataManager+DeviceStatus.swift"; sourceTree = "<group>"; };
13811374
C101947127DD473C004E7EB8 /* MockKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
13821375
C10B28451EA9BA5E006EA1FC /* far_future_high_bg_forecast.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = far_future_high_bg_forecast.json; sourceTree = "<group>"; };
@@ -1394,7 +1387,6 @@
13941387
C12F21A61DFA79CB00748193 /* recommend_temp_basal_very_low_end_in_range.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = recommend_temp_basal_very_low_end_in_range.json; sourceTree = "<group>"; };
13951388
C13DA2AF24F6C7690098BB29 /* UIViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewController.swift; sourceTree = "<group>"; };
13961389
C148CEE624FD91BD00711B3B /* DeliveryUncertaintyAlertManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeliveryUncertaintyAlertManager.swift; sourceTree = "<group>"; };
1397-
C1549B772837DF4E002B190C /* LoopAlertManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopAlertManagerTests.swift; sourceTree = "<group>"; };
13981390
C165756E2534C468004AE16E /* SimpleBolusViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleBolusViewModelTests.swift; sourceTree = "<group>"; };
13991391
C16575702538A36B004AE16E /* CGMStalenessMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMStalenessMonitor.swift; sourceTree = "<group>"; };
14001392
C16575722538AFF6004AE16E /* CGMStalenessMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMStalenessMonitorTests.swift; sourceTree = "<group>"; };
@@ -1659,7 +1651,6 @@
16591651
1D05219C2469F1F5000EBBDE /* AlertStore.swift */,
16601652
1D080CBB2473214A00356610 /* AlertStore.xcdatamodeld */,
16611653
1DA649A8244126DA00F61E75 /* InAppModalAlertIssuer.swift */,
1662-
B4CAD8502549D02D0057946B /* LoopSettingsAlerter.swift */,
16631654
1D05219A2469E9DF000EBBDE /* StoredAlert.swift */,
16641655
1D4A3E2B2478628500FD601B /* StoredAlert+CoreDataClass.swift */,
16651656
1D4A3E2C2478628500FD601B /* StoredAlert+CoreDataProperties.swift */,
@@ -1690,7 +1681,6 @@
16901681
1DA7A84324477698008257F0 /* InAppModalAlertIssuerTests.swift */,
16911682
1DFE9E162447B6270082C280 /* UserNotificationAlertIssuerTests.swift */,
16921683
A91E4C2024F867A700BE9213 /* StoredAlertTests.swift */,
1693-
C1549B772837DF4E002B190C /* LoopAlertManagerTests.swift */,
16941684
);
16951685
path = Alerts;
16961686
sourceTree = "<group>";
@@ -2131,7 +2121,6 @@
21312121
43F78D251C8FC000002152D1 /* DoseMath.swift */,
21322122
89CA2B3C226E6B13004D9350 /* LocalTestingScenariosManager.swift */,
21332123
A9C62D862331703000535612 /* LoggingServicesManager.swift */,
2134-
1D2609AC248EEB9900A6F258 /* LoopAlertsManager.swift */,
21352124
A9D5C5B525DC6C6A00534873 /* LoopAppManager.swift */,
21362125
43A567681C94880B00334FAC /* LoopDataManager.swift */,
21372126
43C094491CACCC73001F6403 /* NotificationManager.swift */,
@@ -2169,7 +2158,6 @@
21692158
A9DF02CA24F72B9E00B7C988 /* CriticalEventLogTests.swift */,
21702159
A96DAC292838EF8A00D94E38 /* DiagnosticLogTests.swift */,
21712160
A9DAE7CF2332D77F006AE942 /* LoopTests.swift */,
2172-
B4FACBB02541FAB700199981 /* LoopSettingsAlerterTests.swift */,
21732161
8968B113240C55F10074BB48 /* LoopSettingsTests.swift */,
21742162
E93E86AC24DDE02C00FF40C8 /* Mock Stores */,
21752163
);
@@ -3446,7 +3434,6 @@
34463434
E9BB27AB23B85C3500FB4987 /* SleepStore.swift in Sources */,
34473435
C1F7822627CC056900C0919A /* SettingsManager.swift in Sources */,
34483436
C16575712538A36B004AE16E /* CGMStalenessMonitor.swift in Sources */,
3449-
B4CAD8612549D1530057946B /* LoopSettingsAlerter.swift in Sources */,
34503437
1D080CBD2473214A00356610 /* AlertStore.xcdatamodeld in Sources */,
34513438
C11BD0552523CFED00236B08 /* SimpleBolusViewModel.swift in Sources */,
34523439
C19008FE25225D3900721625 /* SimpleBolusCalculator.swift in Sources */,
@@ -3550,7 +3537,6 @@
35503537
437D9BA31D7BC977007245E8 /* PredictionTableViewController.swift in Sources */,
35513538
A987CD4924A58A0100439ADC /* ZipArchive.swift in Sources */,
35523539
43F41C371D3BF32400C11ED6 /* UIAlertController.swift in Sources */,
3553-
1D2609AD248EEB9900A6F258 /* LoopAlertsManager.swift in Sources */,
35543540
A9CBE45C248ACC03008E7BA2 /* SettingsStore+SimulatedCoreData.swift in Sources */,
35553541
433EA4C41D9F71C800CD78FB /* CommandResponseViewController.swift in Sources */,
35563542
C16DA84222E8E112008624C2 /* PluginManager.swift in Sources */,
@@ -3804,11 +3790,9 @@
38043790
A91E4C2324F86F1000BE9213 /* CriticalEventLogExportManagerTests.swift in Sources */,
38053791
E9C58A7324DB4A2700487A17 /* LoopDataManagerTests.swift in Sources */,
38063792
E98A55F324EDD9530008715D /* MockSettingsStore.swift in Sources */,
3807-
C1549B782837DF4E002B190C /* LoopAlertManagerTests.swift in Sources */,
38083793
C165756F2534C468004AE16E /* SimpleBolusViewModelTests.swift in Sources */,
38093794
A96DAC2A2838EF8A00D94E38 /* DiagnosticLogTests.swift in Sources */,
38103795
A9DAE7D02332D77F006AE942 /* LoopTests.swift in Sources */,
3811-
B4FACBB12541FAB700199981 /* LoopSettingsAlerterTests.swift in Sources */,
38123796
E93E86B024DDE1BD00FF40C8 /* MockGlucoseStore.swift in Sources */,
38133797
1DFE9E172447B6270082C280 /* UserNotificationAlertIssuerTests.swift in Sources */,
38143798
B4BC56382518DEA900373647 /* CGMStatusHUDViewModelTests.swift in Sources */,

Loop.xcodeproj/xcshareddata/xcschemes/WatchApp.xcscheme

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,18 @@
8888
debugServiceExtension = "internal"
8989
allowLocationSimulation = "YES"
9090
notificationPayloadFile = "WatchApp Extension/PushNotificationPayload.apns">
91-
<BuildableProductRunnable
92-
runnableDebuggingMode = "0">
91+
<RemoteRunnable
92+
runnableDebuggingMode = "2"
93+
BundleIdentifier = "com.apple.Carousel"
94+
RemotePath = "/$(MAIN_APP_DISPLAY_NAME)">
9395
<BuildableReference
9496
BuildableIdentifier = "primary"
9597
BlueprintIdentifier = "43A943711B926B7B0051FA24"
9698
BuildableName = "WatchApp.app"
9799
BlueprintName = "WatchApp"
98100
ReferencedContainer = "container:Loop.xcodeproj">
99101
</BuildableReference>
100-
</BuildableProductRunnable>
102+
</RemoteRunnable>
101103
</LaunchAction>
102104
<ProfileAction
103105
buildConfiguration = "Release"
@@ -106,16 +108,27 @@
106108
useCustomWorkingDirectory = "NO"
107109
debugDocumentVersioning = "YES"
108110
notificationPayloadFile = "WatchApp Extension/PushNotificationPayload.apns">
109-
<BuildableProductRunnable
110-
runnableDebuggingMode = "0">
111+
<RemoteRunnable
112+
runnableDebuggingMode = "2"
113+
BundleIdentifier = "com.apple.Carousel"
114+
RemotePath = "/$(MAIN_APP_DISPLAY_NAME)">
111115
<BuildableReference
112116
BuildableIdentifier = "primary"
113117
BlueprintIdentifier = "43A943711B926B7B0051FA24"
114118
BuildableName = "WatchApp.app"
115119
BlueprintName = "WatchApp"
116120
ReferencedContainer = "container:Loop.xcodeproj">
117121
</BuildableReference>
118-
</BuildableProductRunnable>
122+
</RemoteRunnable>
123+
<MacroExpansion>
124+
<BuildableReference
125+
BuildableIdentifier = "primary"
126+
BlueprintIdentifier = "43A943711B926B7B0051FA24"
127+
BuildableName = "WatchApp.app"
128+
BlueprintName = "WatchApp"
129+
ReferencedContainer = "container:Loop.xcodeproj">
130+
</BuildableReference>
131+
</MacroExpansion>
119132
</ProfileAction>
120133
<AnalyzeAction
121134
buildConfiguration = "Debug">

0 commit comments

Comments
 (0)