Skip to content

Commit bcebb99

Browse files
authored
performance improvements (#117)
1 parent ec2f41e commit bcebb99

8 files changed

Lines changed: 158 additions & 76 deletions

File tree

MyHeartCounts.xcodeproj/project.pbxproj

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@
7777
8052B87F2EB9FFDF005E2D8C /* SpeziStudyDefinition in Frameworks */ = {isa = PBXBuildFile; productRef = 80471E1D2E144A180049798B /* SpeziStudyDefinition */; };
7878
8052B8822EB9FFDF005E2D8C /* SpeziStudy in Frameworks */ = {isa = PBXBuildFile; productRef = 806EFDE72E87F8B200F57B0F /* SpeziStudy */; };
7979
8052B8832EB9FFDF005E2D8C /* SpeziStudyDefinition in Frameworks */ = {isa = PBXBuildFile; productRef = 806EFDE92E87F8B200F57B0F /* SpeziStudyDefinition */; };
80-
8052B8882EB9FFDF005E2D8C /* SpeziSensorKit in Frameworks */ = {isa = PBXBuildFile; productRef = 8044FD2D2EB61B340081314B /* SpeziSensorKit */; };
8180
8054D98E2DE54F8900458CD9 /* MyHeartCountsWatchApp.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 8054D9842DE54F8800458CD9 /* MyHeartCountsWatchApp.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
8281
806EFDED2E87F8BD00F57B0F /* SpeziStudyDefinition in Frameworks */ = {isa = PBXBuildFile; productRef = 806EFDEC2E87F8BD00F57B0F /* SpeziStudyDefinition */; };
8382
807093742EBB48C90038A27F /* MyHeartCountsShared in Frameworks */ = {isa = PBXBuildFile; productRef = 807093732EBB48C90038A27F /* MyHeartCountsShared */; };
@@ -104,16 +103,19 @@
104103
80B8A2382EC1336F00F0E453 /* ModelsR4 in Frameworks */ = {isa = PBXBuildFile; productRef = 80B8A2372EC1336F00F0E453 /* ModelsR4 */; };
105104
80BE06542DCF3A6D00171114 /* SwiftPackageList in Frameworks */ = {isa = PBXBuildFile; productRef = 80BE06532DCF3A6D00171114 /* SwiftPackageList */; };
106105
80D41BE92E25A9BC00D5EAAB /* ResearchKitOnFHIR in Frameworks */ = {isa = PBXBuildFile; productRef = 80D41BE82E25A9BC00D5EAAB /* ResearchKitOnFHIR */; };
107-
80DE5E182EB7BFB500510363 /* SpeziHealthKitUI in Frameworks */ = {isa = PBXBuildFile; productRef = 80DE5E172EB7BFB500510363 /* SpeziHealthKitUI */; };
108106
80E08A742DD32D9F00E80C11 /* SpeziHealthKitBulkExport in Frameworks */ = {isa = PBXBuildFile; productRef = 80E08A732DD32D9F00E80C11 /* SpeziHealthKitBulkExport */; };
109107
80E0E3162EB27C4A00F445B6 /* SpeziSensorKit in Frameworks */ = {isa = PBXBuildFile; productRef = 80E0E3152EB27C4A00F445B6 /* SpeziSensorKit */; };
108+
80E6B9342EFAC1960037D4BB /* SpeziHealthKit in Frameworks */ = {isa = PBXBuildFile; productRef = 80E6B9332EFAC1960037D4BB /* SpeziHealthKit */; };
109+
80E6B9362EFAC1960037D4BB /* SpeziHealthKitBulkExport in Frameworks */ = {isa = PBXBuildFile; productRef = 80E6B9352EFAC1960037D4BB /* SpeziHealthKitBulkExport */; };
110+
80E6B9382EFAC1960037D4BB /* SpeziHealthKitUI in Frameworks */ = {isa = PBXBuildFile; productRef = 80E6B9372EFAC1960037D4BB /* SpeziHealthKitUI */; };
110111
80E6EFC72D83502000D513D4 /* SpeziOnboarding in Frameworks */ = {isa = PBXBuildFile; productRef = 80E6EFC62D83502000D513D4 /* SpeziOnboarding */; };
111112
80E774A02D81B4B20035A0EE /* SpeziFirebaseAccountStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 80E7749F2D81B4B20035A0EE /* SpeziFirebaseAccountStorage */; };
112113
80E774A22D81B4B20035A0EE /* SpeziFirebaseConfiguration in Frameworks */ = {isa = PBXBuildFile; productRef = 80E774A12D81B4B20035A0EE /* SpeziFirebaseConfiguration */; };
113114
80E774A42D81B4B20035A0EE /* SpeziFirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 80E774A32D81B4B20035A0EE /* SpeziFirebaseStorage */; };
114115
80E774A62D81B4B20035A0EE /* SpeziFirestore in Frameworks */ = {isa = PBXBuildFile; productRef = 80E774A52D81B4B20035A0EE /* SpeziFirestore */; };
115116
80E982FB2EBA463500202499 /* SpeziConsent in Frameworks */ = {isa = PBXBuildFile; productRef = 805BE3CE2E060B3A001E5CA4 /* SpeziConsent */; };
116117
80E982FC2EBA463500202499 /* SpeziConsent in Frameworks */ = {isa = PBXBuildFile; productRef = 808A92CA2E47E159007046E0 /* SpeziConsent */; };
118+
80F410E62F08146B00D7EB12 /* SpeziSensorKit in Frameworks */ = {isa = PBXBuildFile; productRef = 80F410E52F08146B00D7EB12 /* SpeziSensorKit */; };
117119
9739A0C62AD7B5730084BEA5 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 9739A0C52AD7B5730084BEA5 /* FirebaseStorage */; };
118120
A94DDFFD2CBD1190004930BD /* SpeziNotifications in Frameworks */ = {isa = PBXBuildFile; productRef = A94DDFFC2CBD1190004930BD /* SpeziNotifications */; };
119121
A9947BF42CC142BD0068AA8A /* XCTSpeziNotifications in Frameworks */ = {isa = PBXBuildFile; productRef = A9947BF32CC142BD0068AA8A /* XCTSpeziNotifications */; };
@@ -233,7 +235,6 @@
233235
files = (
234236
80E982FC2EBA463500202499 /* SpeziConsent in Frameworks */,
235237
80E982FB2EBA463500202499 /* SpeziConsent in Frameworks */,
236-
8052B8882EB9FFDF005E2D8C /* SpeziSensorKit in Frameworks */,
237238
8004746D2EF066E100585753 /* SpeziFirebaseConfiguration in Frameworks */,
238239
804C11E42ECA380D004783C3 /* MHCStudyDefinition in Frameworks */,
239240
8052B8832EB9FFDF005E2D8C /* SpeziStudyDefinition in Frameworks */,
@@ -250,6 +251,7 @@
250251
8052B8762EB9FFDF005E2D8C /* SpeziStudy in Frameworks */,
251252
8052B8752EB9FFDF005E2D8C /* SpeziHealthKitUI in Frameworks */,
252253
8052B8742EB9FFDF005E2D8C /* SpeziHealthKitBulkExport in Frameworks */,
254+
80E6B9342EFAC1960037D4BB /* SpeziHealthKit in Frameworks */,
253255
8052B8732EB9FFDF005E2D8C /* SpeziHealthKit in Frameworks */,
254256
8004746F2EF066E100585753 /* SpeziFirebaseStorage in Frameworks */,
255257
8052B8722EB9FFDF005E2D8C /* SpeziHealthKitUI in Frameworks */,
@@ -263,6 +265,7 @@
263265
8052B86B2EB9FFDF005E2D8C /* SpeziStudy in Frameworks */,
264266
8052B86A2EB9FFDF005E2D8C /* SpeziOnboarding in Frameworks */,
265267
800474692EF066E100585753 /* SpeziFirebaseAccount in Frameworks */,
268+
80F410E62F08146B00D7EB12 /* SpeziSensorKit in Frameworks */,
266269
8052B8692EB9FFDF005E2D8C /* SpeziFirebaseAccount in Frameworks */,
267270
8052B8682EB9FFDF005E2D8C /* SpeziStudy in Frameworks */,
268271
8052B8672EB9FFDF005E2D8C /* SpeziOnboarding in Frameworks */,
@@ -271,9 +274,11 @@
271274
8052B8652EB9FFDF005E2D8C /* SpeziHealthKit in Frameworks */,
272275
8052B8642EB9FFDF005E2D8C /* SpeziStudy in Frameworks */,
273276
8052B8632EB9FFDF005E2D8C /* SpeziSchedulerUI in Frameworks */,
277+
80E6B9362EFAC1960037D4BB /* SpeziHealthKitBulkExport in Frameworks */,
274278
8052B8622EB9FFDF005E2D8C /* SpeziOnboarding in Frameworks */,
275279
800DF2412EBB4645001B9993 /* MyHeartCountsShared in Frameworks */,
276280
8052B8612EB9FFDF005E2D8C /* SpeziStudy in Frameworks */,
281+
80E6B9382EFAC1960037D4BB /* SpeziHealthKitUI in Frameworks */,
277282
804C11D82ECA371A004783C3 /* SpeziViews in Frameworks */,
278283
8052B8602EB9FFDF005E2D8C /* SpeziOnboarding in Frameworks */,
279284
8052B85F2EB9FFDF005E2D8C /* SpeziStudy in Frameworks */,
@@ -283,7 +288,6 @@
283288
80B8A2152EC106A100F0E453 /* SpeziFHIRHealthKit in Frameworks */,
284289
8052B85B2EB9FFDF005E2D8C /* SpeziScheduler in Frameworks */,
285290
8086001D2D75133B0044A054 /* SFSafeSymbols in Frameworks */,
286-
80DE5E182EB7BFB500510363 /* SpeziHealthKitUI in Frameworks */,
287291
80713BE52D93F48C00A2DB0A /* SpeziStudy in Frameworks */,
288292
804C11E92ECA382D004783C3 /* SpeziScheduler in Frameworks */,
289293
80E6EFC72D83502000D513D4 /* SpeziOnboarding in Frameworks */,
@@ -508,8 +512,6 @@
508512
8015C3592EB22EE400CA845E /* NIOCore */,
509513
8015C35B2EB22EE400CA845E /* NIOFoundationCompat */,
510514
80E0E3152EB27C4A00F445B6 /* SpeziSensorKit */,
511-
8044FD2D2EB61B340081314B /* SpeziSensorKit */,
512-
80DE5E172EB7BFB500510363 /* SpeziHealthKitUI */,
513515
800DF2402EBB4645001B9993 /* MyHeartCountsShared */,
514516
80B8A2122EC106A100F0E453 /* SpeziFHIR */,
515517
80B8A2142EC106A100F0E453 /* SpeziFHIRHealthKit */,
@@ -528,6 +530,10 @@
528530
8004746E2EF066E100585753 /* SpeziFirebaseStorage */,
529531
800474702EF066E100585753 /* SpeziFirestore */,
530532
804D89392EF4C0030037E431 /* SpeziAccount */,
533+
80E6B9332EFAC1960037D4BB /* SpeziHealthKit */,
534+
80E6B9352EFAC1960037D4BB /* SpeziHealthKitBulkExport */,
535+
80E6B9372EFAC1960037D4BB /* SpeziHealthKitUI */,
536+
80F410E52F08146B00D7EB12 /* SpeziSensorKit */,
531537
);
532538
productName = MyHeartCounts;
533539
productReference = 653A254D283387FE005D4D48 /* MyHeartCounts.app */;
@@ -674,8 +680,6 @@
674680
806EFDE62E87F8B200F57B0F /* XCRemoteSwiftPackageReference "SpeziStudy" */,
675681
809AEC372EA2BC8500997484 /* XCRemoteSwiftPackageReference "SpeziStorage" */,
676682
8015C3582EB22EE400CA845E /* XCRemoteSwiftPackageReference "swift-nio" */,
677-
8044FD2C2EB61B340081314B /* XCRemoteSwiftPackageReference "SpeziSensorKit" */,
678-
80DE5E122EB7BFB500510363 /* XCRemoteSwiftPackageReference "SpeziHealthKit" */,
679683
80B8A1D82EC0B70600F0E453 /* XCRemoteSwiftPackageReference "XCTHealthKit" */,
680684
80B8A2112EC106A100F0E453 /* XCRemoteSwiftPackageReference "SpeziFHIR" */,
681685
80B8A2342EC1336F00F0E453 /* XCRemoteSwiftPackageReference "FHIRModels" */,
@@ -685,6 +689,8 @@
685689
807229A52ED747BC00999926 /* XCRemoteSwiftPackageReference "SpeziFoundation" */,
686690
800474672EF066E100585753 /* XCRemoteSwiftPackageReference "SpeziFirebase" */,
687691
804D89382EF4C0030037E431 /* XCRemoteSwiftPackageReference "SpeziAccount" */,
692+
80E6B9322EFAC1960037D4BB /* XCRemoteSwiftPackageReference "SpeziHealthKit" */,
693+
80F410E42F08146B00D7EB12 /* XCRemoteSwiftPackageReference "SpeziSensorKit" */,
688694
);
689695
productRefGroup = 653A254E283387FE005D4D48 /* Products */;
690696
projectDirPath = "";
@@ -1348,14 +1354,6 @@
13481354
minimumVersion = 2.4.1;
13491355
};
13501356
};
1351-
8044FD2C2EB61B340081314B /* XCRemoteSwiftPackageReference "SpeziSensorKit" */ = {
1352-
isa = XCRemoteSwiftPackageReference;
1353-
repositoryURL = "https://github.com/StanfordSpezi/SpeziSensorKit.git";
1354-
requirement = {
1355-
kind = upToNextMinorVersion;
1356-
minimumVersion = 0.5.1;
1357-
};
1358-
};
13591357
804C11D42ECA371A004783C3 /* XCRemoteSwiftPackageReference "SpeziViews" */ = {
13601358
isa = XCRemoteSwiftPackageReference;
13611359
repositoryURL = "https://github.com/StanfordSpezi/SpeziViews.git";
@@ -1508,12 +1506,20 @@
15081506
minimumVersion = 2.0.3;
15091507
};
15101508
};
1511-
80DE5E122EB7BFB500510363 /* XCRemoteSwiftPackageReference "SpeziHealthKit" */ = {
1509+
80E6B9322EFAC1960037D4BB /* XCRemoteSwiftPackageReference "SpeziHealthKit" */ = {
15121510
isa = XCRemoteSwiftPackageReference;
15131511
repositoryURL = "https://github.com/StanfordSpezi/SpeziHealthKit.git";
15141512
requirement = {
15151513
kind = upToNextMajorVersion;
1516-
minimumVersion = 1.3.1;
1514+
minimumVersion = 1.3.2;
1515+
};
1516+
};
1517+
80F410E42F08146B00D7EB12 /* XCRemoteSwiftPackageReference "SpeziSensorKit" */ = {
1518+
isa = XCRemoteSwiftPackageReference;
1519+
repositoryURL = "https://github.com/StanfordSpezi/SpeziSensorKit.git";
1520+
requirement = {
1521+
kind = upToNextMinorVersion;
1522+
minimumVersion = 0.6.0;
15171523
};
15181524
};
15191525
A94DDFFB2CBD1190004930BD /* XCRemoteSwiftPackageReference "SpeziNotifications" */ = {
@@ -1700,11 +1706,6 @@
17001706
package = 8043E0092DC2348600E0DF01 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */;
17011707
productName = MarkdownUI;
17021708
};
1703-
8044FD2D2EB61B340081314B /* SpeziSensorKit */ = {
1704-
isa = XCSwiftPackageProductDependency;
1705-
package = 8044FD2C2EB61B340081314B /* XCRemoteSwiftPackageReference "SpeziSensorKit" */;
1706-
productName = SpeziSensorKit;
1707-
};
17081709
80471E192E144A180049798B /* SpeziLocalization */ = {
17091710
isa = XCSwiftPackageProductDependency;
17101711
productName = SpeziLocalization;
@@ -1969,11 +1970,6 @@
19691970
package = 80DCC0F42E060FAA008B6E01 /* XCRemoteSwiftPackageReference "SpeziOnboarding" */;
19701971
productName = SpeziOnboarding;
19711972
};
1972-
80DE5E172EB7BFB500510363 /* SpeziHealthKitUI */ = {
1973-
isa = XCSwiftPackageProductDependency;
1974-
package = 80DE5E122EB7BFB500510363 /* XCRemoteSwiftPackageReference "SpeziHealthKit" */;
1975-
productName = SpeziHealthKitUI;
1976-
};
19771973
80E08A712DD32D9F00E80C11 /* SpeziHealthKit */ = {
19781974
isa = XCSwiftPackageProductDependency;
19791975
productName = SpeziHealthKit;
@@ -1990,6 +1986,21 @@
19901986
isa = XCSwiftPackageProductDependency;
19911987
productName = SpeziSensorKit;
19921988
};
1989+
80E6B9332EFAC1960037D4BB /* SpeziHealthKit */ = {
1990+
isa = XCSwiftPackageProductDependency;
1991+
package = 80E6B9322EFAC1960037D4BB /* XCRemoteSwiftPackageReference "SpeziHealthKit" */;
1992+
productName = SpeziHealthKit;
1993+
};
1994+
80E6B9352EFAC1960037D4BB /* SpeziHealthKitBulkExport */ = {
1995+
isa = XCSwiftPackageProductDependency;
1996+
package = 80E6B9322EFAC1960037D4BB /* XCRemoteSwiftPackageReference "SpeziHealthKit" */;
1997+
productName = SpeziHealthKitBulkExport;
1998+
};
1999+
80E6B9372EFAC1960037D4BB /* SpeziHealthKitUI */ = {
2000+
isa = XCSwiftPackageProductDependency;
2001+
package = 80E6B9322EFAC1960037D4BB /* XCRemoteSwiftPackageReference "SpeziHealthKit" */;
2002+
productName = SpeziHealthKitUI;
2003+
};
19932004
80E6EFC62D83502000D513D4 /* SpeziOnboarding */ = {
19942005
isa = XCSwiftPackageProductDependency;
19952006
productName = SpeziOnboarding;
@@ -2022,6 +2033,11 @@
20222033
isa = XCSwiftPackageProductDependency;
20232034
productName = SpeziStudyDefinition;
20242035
};
2036+
80F410E52F08146B00D7EB12 /* SpeziSensorKit */ = {
2037+
isa = XCSwiftPackageProductDependency;
2038+
package = 80F410E42F08146B00D7EB12 /* XCRemoteSwiftPackageReference "SpeziSensorKit" */;
2039+
productName = SpeziSensorKit;
2040+
};
20252041
9739A0C52AD7B5730084BEA5 /* FirebaseStorage */ = {
20262042
isa = XCSwiftPackageProductDependency;
20272043
package = 2FE5DC9029EDD9C3004B9AB4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;

MyHeartCounts.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

MyHeartCounts/Health Import/HistoricalHealthSamplesExportManager.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ final class HistoricalHealthSamplesExportManager: Module, EnvironmentAccessible,
5959
/// - Note: This is intended primarily for debugging purposes
6060
func fullyResetSession(restart: Bool = true) async throws {
6161
try await bulkExporter.deleteSessionRestorationInfo(for: .mhcHistoricalDataExport)
62+
try? managedFileUpload.clearPendingUploads(for: .historicalHealthUpload)
6263
self.session = nil
6364
if restart {
6465
await self.setupAndStartExportSession()
@@ -80,7 +81,7 @@ final class HistoricalHealthSamplesExportManager: Module, EnvironmentAccessible,
8081
logger.notice("Will start BulkHealthExport session")
8182
let results = try session.start(
8283
retryFailedBatches: true,
83-
concurrencyLevel: .limit(3)
84+
concurrencyLevel: .limit(ProcessInfo.isProDevice ? 4 : 2)
8485
)
8586
managedFileUpload.scheduleForUpload(results.compactMap { $0 }, category: .historicalHealthUpload)
8687
return true

MyHeartCounts/Modules/ManagedFileUpload.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@ extension ManagedFileUpload {
9090
try fileManager.removeItem(at: Self.directory)
9191
createStagingDirs(for: categories)
9292
}
93+
94+
@MainActor
95+
func clearPendingUploads(for category: Category) throws {
96+
try fileManager.removeItem(at: category.stagingDirUrl)
97+
createStagingDirs(for: CollectionOfOne(category))
98+
}
9399
}
94100

95101

0 commit comments

Comments
 (0)