Consolidate extension data providers and add side effects catch-up

- Create unified ExtensionDataProvider for Widget and Watch targets
- Remove duplicate WatchDataProvider and WatchConnectivityManager from Watch App
- Add side effects catch-up mechanism in MoodLogger for widget votes
- Process pending side effects on app launch and midnight background task
- Reduce ~450 lines of duplicated code across targets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-12-21 22:50:23 -06:00
parent 83aad66f26
commit f7da61d6ca
12 changed files with 306 additions and 530 deletions

View File

@@ -9,8 +9,8 @@
/* Begin PBXBuildFile section */
1C0DAB51279DB0FB003B1F21 /* Feels/Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 1C0DAB50279DB0FB003B1F21 /* Feels/Localizable.xcstrings */; };
1C0DAB52279DB0FB003B1F22 /* Feels/Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 1C0DAB50279DB0FB003B1F21 /* Feels/Localizable.xcstrings */; };
1C2618FA2795E41D00FDC148 /* Charts in Frameworks */ = {isa = PBXBuildFile; productRef = 1C2618F92795E41D00FDC148 /* Charts */; };
1C747CC9279F06EB00762CBD /* CloudKitSyncMonitor in Frameworks */ = {isa = PBXBuildFile; productRef = 1C747CC8279F06EB00762CBD /* CloudKitSyncMonitor */; };
1C9566422EF8F5F70032E68F /* Charts in Frameworks */ = {isa = PBXBuildFile; productRef = 1C9566412EF8F5F70032E68F /* Charts */; };
1C9566442EF8F5F70032E68F /* Algorithms in Frameworks */ = {isa = PBXBuildFile; productRef = 1C9566432EF8F5F70032E68F /* Algorithms */; };
1CB4D0A028787D8A00902A56 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CB4D09F28787D8A00902A56 /* StoreKit.framework */; };
1CD90B07278C7DE0001C4FEA /* Tests_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B06278C7DE0001C4FEA /* Tests_iOS.swift */; };
1CD90B09278C7DE0001C4FEA /* Tests_iOSLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B08278C7DE0001C4FEA /* Tests_iOSLaunchTests.swift */; };
@@ -128,7 +128,9 @@
MoodStreakActivity.swift,
Onboarding/OnboardingData.swift,
Onboarding/views/OnboardingDay.swift,
Persisence/ExtensionDataProvider.swift,
Random.swift,
SharedMoodIntent.swift,
ShowBasedOnVoteLogics.swift,
Views/BGView.swift,
Views/CustomIcon/IconView.swift,
@@ -143,7 +145,10 @@
membershipExceptions = (
Models/Mood.swift,
Models/MoodEntryModel.swift,
Persisence/ExtensionDataProvider.swift,
Random.swift,
Services/WatchConnectivityManager.swift,
SharedMoodIntent.swift,
);
target = B1DB9E6543DE4A009DB00916 /* Feels Watch App */;
};
@@ -160,10 +165,10 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1C747CC9279F06EB00762CBD /* CloudKitSyncMonitor in Frameworks */,
1C9566442EF8F5F70032E68F /* Algorithms in Frameworks */,
1CD90B6C278C7F78001C4FEA /* CloudKit.framework in Frameworks */,
1C9566422EF8F5F70032E68F /* Charts in Frameworks */,
1CB4D0A028787D8A00902A56 /* StoreKit.framework in Frameworks */,
1C2618FA2795E41D00FDC148 /* Charts in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -306,8 +311,8 @@
);
name = "Feels (iOS)";
packageProductDependencies = (
1C2618F92795E41D00FDC148 /* Charts */,
1C747CC8279F06EB00762CBD /* CloudKitSyncMonitor */,
1C9566412EF8F5F70032E68F /* Charts */,
1C9566432EF8F5F70032E68F /* Algorithms */,
);
productName = "Feels (iOS)";
productReference = 1CD90AF5278C7DE0001C4FEA /* iFeels.app */;
@@ -458,8 +463,8 @@
);
mainGroup = 1CD90AE5278C7DDF001C4FEA;
packageReferences = (
1C2618F82795E41D00FDC148 /* XCRemoteSwiftPackageReference "ChartsPackage" */,
1C747CC7279F06EB00762CBD /* XCRemoteSwiftPackageReference "CloudKitSyncMonitor" */,
1C95663F2EF8F4A90032E68F /* XCRemoteSwiftPackageReference "ChartsPackage" */,
1C9566402EF8F4D30032E68F /* XCRemoteSwiftPackageReference "swift-algorithms" */,
);
productRefGroup = 1CD90AF6278C7DE0001C4FEA /* Products */;
projectDirPath = "";
@@ -1119,7 +1124,7 @@
/* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
1C2618F82795E41D00FDC148 /* XCRemoteSwiftPackageReference "ChartsPackage" */ = {
1C95663F2EF8F4A90032E68F /* XCRemoteSwiftPackageReference "ChartsPackage" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/akatreyt/ChartsPackage";
requirement = {
@@ -1127,26 +1132,26 @@
kind = branch;
};
};
1C747CC7279F06EB00762CBD /* XCRemoteSwiftPackageReference "CloudKitSyncMonitor" */ = {
1C9566402EF8F4D30032E68F /* XCRemoteSwiftPackageReference "swift-algorithms" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/ggruen/CloudKitSyncMonitor";
repositoryURL = "https://github.com/apple/swift-algorithms.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.0.0;
kind = exactVersion;
version = 0.2.1;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
1C2618F92795E41D00FDC148 /* Charts */ = {
1C9566412EF8F5F70032E68F /* Charts */ = {
isa = XCSwiftPackageProductDependency;
package = 1C2618F82795E41D00FDC148 /* XCRemoteSwiftPackageReference "ChartsPackage" */;
package = 1C95663F2EF8F4A90032E68F /* XCRemoteSwiftPackageReference "ChartsPackage" */;
productName = Charts;
};
1C747CC8279F06EB00762CBD /* CloudKitSyncMonitor */ = {
1C9566432EF8F5F70032E68F /* Algorithms */ = {
isa = XCSwiftPackageProductDependency;
package = 1C747CC7279F06EB00762CBD /* XCRemoteSwiftPackageReference "CloudKitSyncMonitor" */;
productName = CloudKitSyncMonitor;
package = 1C9566402EF8F4D30032E68F /* XCRemoteSwiftPackageReference "swift-algorithms" */;
productName = Algorithms;
};
/* End XCSwiftPackageProductDependency section */
};