iOS: complete bundle ID + team ID migration to com.myhoneydue.*
Carries the rebrand from the backend (APPLE_CLIENT_ID, APNS_TOPIC) all the way through the iOS targets: - All target PRODUCT_BUNDLE_IDENTIFIERs: com.tt.honeyDue.* → com.myhoneydue.honeyDue.* - DEVELOPMENT_TEAM: V3PF3M6B6U → X86BR9WTLD (across every target) - APP_GROUP_IDENTIFIER: group.com.tt.honeyDue.* → group.com.myhoneydue.honeyDue.* - BGTaskSchedulerPermittedIdentifiers + BackgroundTaskManager constant - KeychainHelper service identifier - StoreKit fallback product IDs + Info.plist IAP product ID keys - ExportOptions.plist teamID - NSCamera / NSPhotoLibrary usage descriptions reworded - Onboarding suggestion strings reworked (new %lld%% match copy, dropped old "Great match" / "Good match" / "Generating suggestions" strings — replaced by relevance-percentage labels) - xctestplan + settings.local.json housekeeping App-group rename means UserDefaults / shared-container data written to the old group ID is abandoned. Acceptable since this is pre-launch.
This commit is contained in:
@@ -15,6 +15,6 @@
|
||||
<key>manageAppVersionAndBuildNumber</key>
|
||||
<true/>
|
||||
<key>teamID</key>
|
||||
<string>V3PF3M6B6U</string>
|
||||
<string>X86BR9WTLD</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -148,7 +148,7 @@ final class WidgetActionManager {
|
||||
static let shared = WidgetActionManager()
|
||||
|
||||
private let appGroupIdentifier: String = {
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.tt.honeyDue.dev"
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.myhoneydue.honeyDue.dev"
|
||||
}()
|
||||
private let pendingTasksFileName = "widget_pending_tasks.json"
|
||||
private let tokenKey = "widget_auth_token"
|
||||
|
||||
@@ -111,7 +111,7 @@ class CacheManager {
|
||||
}
|
||||
|
||||
private static let appGroupIdentifier: String = {
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.tt.honeyDue.dev"
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.myhoneydue.honeyDue.dev"
|
||||
}()
|
||||
private static let tasksFileName = "widget_tasks.json"
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
}
|
||||
],
|
||||
"defaultOptions" : {
|
||||
"testTimeoutsEnabled" : true,
|
||||
"defaultTestExecutionTimeAllowance" : 300,
|
||||
"targetForVariableExpansion" : {
|
||||
"containerPath" : "container:honeyDue.xcodeproj",
|
||||
"identifier" : "D4ADB376A7A4CFB73469E173",
|
||||
"name" : "HoneyDue"
|
||||
}
|
||||
},
|
||||
"testTimeoutsEnabled" : true
|
||||
},
|
||||
"testTargets" : [
|
||||
{
|
||||
|
||||
@@ -663,7 +663,7 @@
|
||||
0248CABA5A5197845F2E5C26 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APP_GROUP_IDENTIFIER = group.com.tt.honeyDue;
|
||||
APP_GROUP_IDENTIFIER = group.com.myhoneydue.honeyDue;
|
||||
ARCHS = arm64;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
@@ -671,14 +671,15 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = iosApp/Info.plist;
|
||||
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
|
||||
INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = NO;
|
||||
INFOPLIST_KEY_NSCameraUsageDescription = "honeyDue needs access to your camera to take photos of completed tasks";
|
||||
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "honeyDue needs access to your photo library to select photos of completed tasks";
|
||||
INFOPLIST_KEY_NSCameraUsageDescription = "honeyDue needs camera access to take photos of tasks, documents, and receipts.";
|
||||
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "honeyDue needs permission to save photos to your library.";
|
||||
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "honeyDue needs photo library access to attach photos to tasks and documents.";
|
||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||
@@ -688,7 +689,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@@ -698,14 +699,14 @@
|
||||
1C0789552EBC218D00392B46 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APP_GROUP_IDENTIFIER = group.com.tt.honeyDue.dev;
|
||||
APP_GROUP_IDENTIFIER = group.com.myhoneydue.honeyDue.dev;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||
CODE_SIGN_ENTITLEMENTS = HoneyDueExtension.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = HoneyDue/Info.plist;
|
||||
@@ -719,7 +720,7 @@
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
OTHER_SWIFT_FLAGS = "-DWIDGET_EXTENSION";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue.dev.HoneyDueExtension;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue.dev.HoneyDueExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
@@ -734,14 +735,14 @@
|
||||
1C0789562EBC218D00392B46 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APP_GROUP_IDENTIFIER = group.com.tt.honeyDue;
|
||||
APP_GROUP_IDENTIFIER = group.com.myhoneydue.honeyDue;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||
CODE_SIGN_ENTITLEMENTS = HoneyDueExtension.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = HoneyDue/Info.plist;
|
||||
@@ -755,7 +756,7 @@
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
OTHER_SWIFT_FLAGS = "-DWIDGET_EXTENSION";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue.HoneyDueExtension;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue.HoneyDueExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
@@ -774,12 +775,12 @@
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.HoneyDueTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.HoneyDueTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = NO;
|
||||
SWIFT_APPROACHABLE_CONCURRENCY = YES;
|
||||
@@ -800,12 +801,12 @@
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.HoneyDueTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.HoneyDueTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = NO;
|
||||
SWIFT_APPROACHABLE_CONCURRENCY = YES;
|
||||
@@ -825,7 +826,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = HoneyDueQLPreview/Info.plist;
|
||||
@@ -838,7 +839,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue.dev.HoneyDueQLPreview;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue.dev.HoneyDueQLPreview;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
@@ -856,7 +857,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = HoneyDueQLPreview/Info.plist;
|
||||
@@ -869,7 +870,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue.HoneyDueQLPreview;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue.HoneyDueQLPreview;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
@@ -887,7 +888,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = HoneyDueQLThumbnail/Info.plist;
|
||||
@@ -900,7 +901,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue.dev.HoneyDueQLThumbnail;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue.dev.HoneyDueQLThumbnail;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
@@ -918,7 +919,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = HoneyDueQLThumbnail/Info.plist;
|
||||
@@ -931,7 +932,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue.HoneyDueQLThumbnail;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue.HoneyDueQLThumbnail;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
@@ -948,13 +949,13 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
|
||||
MACOSX_DEPLOYMENT_TARGET = 26.1;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.HoneyDueUITests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.HoneyDueUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = auto;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = NO;
|
||||
@@ -974,13 +975,13 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
|
||||
MACOSX_DEPLOYMENT_TARGET = 26.1;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.HoneyDueUITests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.HoneyDueUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = auto;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = NO;
|
||||
@@ -1123,7 +1124,7 @@
|
||||
E767E942685C7832D51FF978 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APP_GROUP_IDENTIFIER = group.com.tt.honeyDue.dev;
|
||||
APP_GROUP_IDENTIFIER = group.com.myhoneydue.honeyDue.dev;
|
||||
ARCHS = arm64;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
@@ -1131,14 +1132,15 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = V3PF3M6B6U;
|
||||
DEVELOPMENT_TEAM = X86BR9WTLD;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = iosApp/Info.plist;
|
||||
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
|
||||
INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = NO;
|
||||
INFOPLIST_KEY_NSCameraUsageDescription = "honeyDue needs access to your camera to take photos of completed tasks";
|
||||
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "honeyDue needs access to your photo library to select photos of completed tasks";
|
||||
INFOPLIST_KEY_NSCameraUsageDescription = "honeyDue needs camera access to take photos of tasks, documents, and receipts.";
|
||||
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "honeyDue needs permission to save photos to your library.";
|
||||
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "honeyDue needs photo library access to attach photos to tasks and documents.";
|
||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||
@@ -1148,7 +1150,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tt.honeyDue.dev;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.myhoneydue.honeyDue.dev;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
|
||||
@@ -16,7 +16,7 @@ final class BackgroundTaskManager {
|
||||
static let shared = BackgroundTaskManager()
|
||||
|
||||
/// Background task identifier - must match Info.plist BGTaskSchedulerPermittedIdentifiers
|
||||
static let taskIdentifier = "com.tt.honeyDue.refresh"
|
||||
static let taskIdentifier = "com.myhoneydue.honeyDue.refresh"
|
||||
|
||||
/// Time window for overnight refresh (12:00 AM - 4:00 AM)
|
||||
private let refreshWindowStartHour = 0 // 12:00 AM
|
||||
@@ -187,7 +187,7 @@ final class BackgroundTaskManager {
|
||||
|
||||
/// Force a background refresh for testing (only works in debug builds with Xcode)
|
||||
/// Usage: In Xcode debugger console:
|
||||
/// e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.tt.honeyDue.refresh"]
|
||||
/// e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.myhoneydue.honeyDue.refresh"]
|
||||
func debugInfo() -> String {
|
||||
return """
|
||||
Background Task Debug Info:
|
||||
|
||||
@@ -61,7 +61,7 @@ enum ThemeID: String, CaseIterable, Codable {
|
||||
|
||||
// MARK: - Shared App Group UserDefaults
|
||||
private let appGroupID: String = {
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.tt.honeyDue.dev"
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.myhoneydue.honeyDue.dev"
|
||||
}()
|
||||
private let sharedDefaults: UserDefaults = {
|
||||
guard let defaults = UserDefaults(suiteName: appGroupID) else {
|
||||
|
||||
@@ -21,7 +21,7 @@ final class WidgetDataManager {
|
||||
static let cancelledColumn = "cancelled_tasks"
|
||||
|
||||
private let appGroupIdentifier: String = {
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.tt.honeyDue.dev"
|
||||
Bundle.main.infoDictionary?["AppGroupIdentifier"] as? String ?? "group.com.myhoneydue.honeyDue.dev"
|
||||
}()
|
||||
private let tasksFileName = "widget_tasks.json"
|
||||
private let actionsFileName = "widget_pending_actions.json"
|
||||
|
||||
@@ -6,14 +6,8 @@
|
||||
<string>$(APP_GROUP_IDENTIFIER)</string>
|
||||
<key>BGTaskSchedulerPermittedIdentifiers</key>
|
||||
<array>
|
||||
<string>com.tt.honeyDue.refresh</string>
|
||||
<string>com.myhoneydue.honeyDue.refresh</string>
|
||||
</array>
|
||||
<key>HONEYDUE_IAP_ANNUAL_PRODUCT_ID</key>
|
||||
<string>com.tt.honeyDue.pro.annual</string>
|
||||
<key>HONEYDUE_IAP_MONTHLY_PRODUCT_ID</key>
|
||||
<string>com.tt.honeyDue.pro.monthly</string>
|
||||
<key>HONEYDUE_GOOGLE_WEB_CLIENT_ID</key>
|
||||
<string></string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
@@ -40,17 +34,17 @@
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>HONEYDUE_GOOGLE_WEB_CLIENT_ID</key>
|
||||
<string></string>
|
||||
<key>HONEYDUE_IAP_ANNUAL_PRODUCT_ID</key>
|
||||
<string>com.myhoneydue.honeyDue.pro.annual</string>
|
||||
<key>HONEYDUE_IAP_MONTHLY_PRODUCT_ID</key>
|
||||
<string>com.myhoneydue.honeyDue.pro.monthly</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsLocalNetworking</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>honeyDue needs camera access to take photos of tasks, documents, and receipts.</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>honeyDue needs photo library access to attach photos to tasks and documents.</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>honeyDue needs permission to save photos to your library.</string>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
|
||||
@@ -74,6 +74,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"%@, %@, %lld%% match" : {
|
||||
"comment" : "A row that displays a suggestion with a title, frequency, and relevance percentage.",
|
||||
"isCommentAutoGenerated" : true,
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "%1$@, %2$@, %3$lld%% match"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"%@, %@%@" : {
|
||||
"comment" : "A button that displays the name of a product and its price.",
|
||||
"isCommentAutoGenerated" : true,
|
||||
@@ -154,6 +166,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"%lld%%" : {
|
||||
"comment" : "A badge that shows the relevance of a suggestion. The argument is the relevance percentage.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"•" : {
|
||||
"comment" : "A separator between different pieces of information in a text.",
|
||||
"isCommentAutoGenerated" : true
|
||||
@@ -221,9 +237,6 @@
|
||||
},
|
||||
"Add document" : {
|
||||
|
||||
},
|
||||
"Add Most Popular" : {
|
||||
|
||||
},
|
||||
"Add new property" : {
|
||||
"comment" : "A label displayed as a button in the toolbar.",
|
||||
@@ -17684,10 +17697,6 @@
|
||||
"comment" : "A button that generates a new share code.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Generating suggestions..." : {
|
||||
"comment" : "Text displayed while the app is generating personalized task suggestions.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Get notified when someone joins your property" : {
|
||||
|
||||
},
|
||||
@@ -17710,16 +17719,8 @@
|
||||
"comment" : "A label for the back button.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Good match" : {
|
||||
"comment" : "A label describing a task's relevance.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Google Sign-In Error" : {
|
||||
|
||||
},
|
||||
"Great match" : {
|
||||
"comment" : "A label describing a high-relevance task.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Help improve honeyDue by sharing anonymous usage data" : {
|
||||
|
||||
@@ -17862,10 +17863,6 @@
|
||||
},
|
||||
"No personal data is collected. Analytics are fully anonymous." : {
|
||||
|
||||
},
|
||||
"No personalized suggestions yet" : {
|
||||
"comment" : "A message displayed when the user has not yet been personalized.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"No properties yet" : {
|
||||
|
||||
@@ -25444,6 +25441,10 @@
|
||||
"comment" : "A button label that allows users to skip the current onboarding step.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Skip for now" : {
|
||||
"comment" : "A button label that skips onboarding.",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Skip for Now" : {
|
||||
|
||||
},
|
||||
@@ -30617,10 +30618,6 @@
|
||||
"comment" : "A button label that says \"Try Again\".",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Try the Browse tab to explore tasks by category,\nor add home details for better suggestions." : {
|
||||
"comment" : "A description of the benefits of using the",
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Unarchive" : {
|
||||
"comment" : "A button that unarchives a task.",
|
||||
"isCommentAutoGenerated" : true
|
||||
|
||||
@@ -7,7 +7,7 @@ import ComposeApp
|
||||
final class KeychainHelper: NSObject, KeychainDelegate {
|
||||
static let shared = KeychainHelper()
|
||||
|
||||
private let service = "com.tt.honeyDue"
|
||||
private let service = "com.myhoneydue.honeyDue"
|
||||
|
||||
func save(key: String, value: String) -> Bool {
|
||||
guard let data = value.data(using: .utf8) else { return false }
|
||||
|
||||
@@ -14,8 +14,8 @@ class StoreKitManager: ObservableObject {
|
||||
// Canonical source: SubscriptionProducts in commonMain (Kotlin shared code).
|
||||
// Keep these in sync with SubscriptionProducts.MONTHLY / SubscriptionProducts.ANNUAL.
|
||||
private let fallbackProductIDs = [
|
||||
"com.tt.honeyDue.pro.monthly",
|
||||
"com.tt.honeyDue.pro.annual"
|
||||
"com.myhoneydue.honeyDue.pro.monthly",
|
||||
"com.myhoneydue.honeyDue.pro.annual"
|
||||
]
|
||||
|
||||
private var configuredProductIDs: [String] {
|
||||
|
||||
Reference in New Issue
Block a user