From ef8eab4a07fedd26923b5adda3a7ac4078e176de Mon Sep 17 00:00:00 2001 From: Trey t Date: Sat, 25 Apr 2026 09:24:40 -0500 Subject: [PATCH] iOS: complete bundle ID + team ID migration to com.myhoneydue.* MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .claude/settings.local.json | 3 +- iosApp/ExportOptions.plist | 2 +- iosApp/HoneyDue/AppIntent.swift | 2 +- iosApp/HoneyDue/HoneyDue.swift | 2 +- iosApp/HoneyDueUITests.xctestplan | 4 +- iosApp/honeyDue.xcodeproj/project.pbxproj | 66 ++++++++++--------- .../Background/BackgroundTaskManager.swift | 4 +- iosApp/iosApp/Helpers/ThemeManager.swift | 2 +- iosApp/iosApp/Helpers/WidgetDataManager.swift | 2 +- iosApp/iosApp/Info.plist | 20 ++---- iosApp/iosApp/Localizable.xcstrings | 43 ++++++------ .../Shared/Utilities/KeychainHelper.swift | 2 +- .../iosApp/Subscription/StoreKitManager.swift | 4 +- 13 files changed, 75 insertions(+), 81 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index cf7dbae..61a2dda 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -18,7 +18,8 @@ "Bash(ps:*)", "Bash(stdbuf:*)", "Bash(sysctl:*)", - "Bash(tee:*)" + "Bash(tee:*)", + "Bash(codesign -d --entitlements :- /Users/treyt/Library/Developer/Xcode/DerivedData/honeyDue-buvczbpttcfkxxcmxbnqkqrmujyh/Build/Products/Debug-iphonesimulator/honeyDue.app)" ] } } diff --git a/iosApp/ExportOptions.plist b/iosApp/ExportOptions.plist index 50b53a4..0a30d09 100644 --- a/iosApp/ExportOptions.plist +++ b/iosApp/ExportOptions.plist @@ -15,6 +15,6 @@ manageAppVersionAndBuildNumber teamID - V3PF3M6B6U + X86BR9WTLD diff --git a/iosApp/HoneyDue/AppIntent.swift b/iosApp/HoneyDue/AppIntent.swift index 5570cc4..10796d4 100644 --- a/iosApp/HoneyDue/AppIntent.swift +++ b/iosApp/HoneyDue/AppIntent.swift @@ -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" diff --git a/iosApp/HoneyDue/HoneyDue.swift b/iosApp/HoneyDue/HoneyDue.swift index 924e3c2..2e49928 100644 --- a/iosApp/HoneyDue/HoneyDue.swift +++ b/iosApp/HoneyDue/HoneyDue.swift @@ -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" diff --git a/iosApp/HoneyDueUITests.xctestplan b/iosApp/HoneyDueUITests.xctestplan index 550136a..aacf77d 100644 --- a/iosApp/HoneyDueUITests.xctestplan +++ b/iosApp/HoneyDueUITests.xctestplan @@ -9,13 +9,13 @@ } ], "defaultOptions" : { - "testTimeoutsEnabled" : true, "defaultTestExecutionTimeAllowance" : 300, "targetForVariableExpansion" : { "containerPath" : "container:honeyDue.xcodeproj", "identifier" : "D4ADB376A7A4CFB73469E173", "name" : "HoneyDue" - } + }, + "testTimeoutsEnabled" : true }, "testTargets" : [ { diff --git a/iosApp/honeyDue.xcodeproj/project.pbxproj b/iosApp/honeyDue.xcodeproj/project.pbxproj index 51d0397..fbe496f 100644 --- a/iosApp/honeyDue.xcodeproj/project.pbxproj +++ b/iosApp/honeyDue.xcodeproj/project.pbxproj @@ -661,7 +661,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; @@ -669,14 +669,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; @@ -686,7 +687,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"; @@ -696,14 +697,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; @@ -717,7 +718,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; @@ -732,14 +733,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; @@ -753,7 +754,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; @@ -772,12 +773,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; @@ -798,12 +799,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; @@ -823,7 +824,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; @@ -836,7 +837,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; @@ -854,7 +855,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; @@ -867,7 +868,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; @@ -885,7 +886,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; @@ -898,7 +899,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; @@ -916,7 +917,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; @@ -929,7 +930,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; @@ -946,13 +947,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; @@ -972,13 +973,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; @@ -1121,7 +1122,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; @@ -1129,14 +1130,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; @@ -1146,7 +1148,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"; diff --git a/iosApp/iosApp/Background/BackgroundTaskManager.swift b/iosApp/iosApp/Background/BackgroundTaskManager.swift index 4814c03..2d90bea 100644 --- a/iosApp/iosApp/Background/BackgroundTaskManager.swift +++ b/iosApp/iosApp/Background/BackgroundTaskManager.swift @@ -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: diff --git a/iosApp/iosApp/Helpers/ThemeManager.swift b/iosApp/iosApp/Helpers/ThemeManager.swift index 58cd76f..5bb11b3 100644 --- a/iosApp/iosApp/Helpers/ThemeManager.swift +++ b/iosApp/iosApp/Helpers/ThemeManager.swift @@ -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 { diff --git a/iosApp/iosApp/Helpers/WidgetDataManager.swift b/iosApp/iosApp/Helpers/WidgetDataManager.swift index 29e2895..c89847a 100644 --- a/iosApp/iosApp/Helpers/WidgetDataManager.swift +++ b/iosApp/iosApp/Helpers/WidgetDataManager.swift @@ -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" diff --git a/iosApp/iosApp/Info.plist b/iosApp/iosApp/Info.plist index 2b50435..bc057c5 100644 --- a/iosApp/iosApp/Info.plist +++ b/iosApp/iosApp/Info.plist @@ -6,14 +6,8 @@ $(APP_GROUP_IDENTIFIER) BGTaskSchedulerPermittedIdentifiers - com.tt.honeyDue.refresh + com.myhoneydue.honeyDue.refresh - HONEYDUE_IAP_ANNUAL_PRODUCT_ID - com.tt.honeyDue.pro.annual - HONEYDUE_IAP_MONTHLY_PRODUCT_ID - com.tt.honeyDue.pro.monthly - HONEYDUE_GOOGLE_WEB_CLIENT_ID - CFBundleDocumentTypes @@ -40,17 +34,17 @@ + HONEYDUE_GOOGLE_WEB_CLIENT_ID + + HONEYDUE_IAP_ANNUAL_PRODUCT_ID + com.myhoneydue.honeyDue.pro.annual + HONEYDUE_IAP_MONTHLY_PRODUCT_ID + com.myhoneydue.honeyDue.pro.monthly NSAppTransportSecurity NSAllowsLocalNetworking - NSCameraUsageDescription - honeyDue needs camera access to take photos of tasks, documents, and receipts. - NSPhotoLibraryUsageDescription - honeyDue needs photo library access to attach photos to tasks and documents. - NSPhotoLibraryAddUsageDescription - honeyDue needs permission to save photos to your library. UIBackgroundModes remote-notification diff --git a/iosApp/iosApp/Localizable.xcstrings b/iosApp/iosApp/Localizable.xcstrings index b2d91aa..1826e42 100644 --- a/iosApp/iosApp/Localizable.xcstrings +++ b/iosApp/iosApp/Localizable.xcstrings @@ -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 diff --git a/iosApp/iosApp/Shared/Utilities/KeychainHelper.swift b/iosApp/iosApp/Shared/Utilities/KeychainHelper.swift index 3562edf..96157c2 100644 --- a/iosApp/iosApp/Shared/Utilities/KeychainHelper.swift +++ b/iosApp/iosApp/Shared/Utilities/KeychainHelper.swift @@ -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 } diff --git a/iosApp/iosApp/Subscription/StoreKitManager.swift b/iosApp/iosApp/Subscription/StoreKitManager.swift index 44b2e83..f5561df 100644 --- a/iosApp/iosApp/Subscription/StoreKitManager.swift +++ b/iosApp/iosApp/Subscription/StoreKitManager.swift @@ -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] {