Rename iFeels to Feels across entire codebase

- Bundle IDs: com.tt.ifeel* → com.tt.feels*
- App Groups: group.com.tt.ifeel* → group.com.tt.feels*
- iCloud containers: iCloud.com.tt.ifeel* → iCloud.com.tt.feels*
- IAP product IDs: com.tt.ifeel.IAP.* → com.tt.feels.IAP.*
- URLs: ifeels.app → feels.app
- Logger subsystems and dispatch queues
- Product names and display names

🤖 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
2026-01-01 11:57:44 -06:00
parent fa937793d9
commit e5656f47fd
27 changed files with 12693 additions and 12677 deletions

View File

@@ -92,7 +92,7 @@
"locale" : "en_US"
}
],
"productID" : "com.tt.ifeel.IAP.subscriptions.monthly",
"productID" : "com.tt.feels.IAP.subscriptions.monthly",
"recurringSubscriptionPeriod" : "P1M",
"referenceName" : "Monthly",
"subscriptionGroupID" : "2CFE4C4F",
@@ -120,7 +120,7 @@
"locale" : "en_US"
}
],
"productID" : "com.tt.ifeel.IAP.subscriptions.yearly",
"productID" : "com.tt.feels.IAP.subscriptions.yearly",
"recurringSubscriptionPeriod" : "P1Y",
"referenceName" : "Yearly",
"subscriptionGroupID" : "2CFE4C4F",

View File

@@ -4,7 +4,7 @@
<dict>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.tt.ifeelDebug</string>
<string>iCloud.com.tt.feelsDebug</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
@@ -12,7 +12,7 @@
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.tt.ifeelDebug</string>
<string>group.com.tt.feelsDebug</string>
</array>
<key>com.apple.developer.healthkit</key>
<true/>

View File

@@ -6,7 +6,7 @@
<string>development</string>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.tt.ifeelDebug</string>
<string>iCloud.com.tt.feelsDebug</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
@@ -14,7 +14,7 @@
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.tt.ifeelDebug</string>
<string>group.com.tt.feelsDebug</string>
</array>
<key>com.apple.developer.healthkit</key>
<true/>

View File

@@ -4,7 +4,7 @@
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.tt.ifeel</string>
<string>group.com.tt.feels</string>
</array>
</dict>
</plist>

View File

@@ -4,7 +4,7 @@
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.tt.ifeelDebug</string>
<string>group.com.tt.feelsDebug</string>
</array>
</dict>
</plist>

View File

@@ -4,13 +4,13 @@
<dict>
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.tt.ifeel.dbUpdateMissing</string>
<string>com.tt.feels.dbUpdateMissing</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.tt.ifeel</string>
<string>com.tt.feels</string>
<key>CFBundleURLSchemes</key>
<array>
<string>feels</string>

View File

@@ -65,7 +65,7 @@
1C0DAB50279DB0FB003B1F21 /* Feels/Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Feels/Localizable.xcstrings; sourceTree = "<group>"; };
1CB4D09E28787B3C00902A56 /* Configuration.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Configuration.storekit; sourceTree = "<group>"; };
1CB4D09F28787D8A00902A56 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.5.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; };
1CD90AF5278C7DE0001C4FEA /* iFeels.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iFeels.app; sourceTree = BUILT_PRODUCTS_DIR; };
1CD90AF5278C7DE0001C4FEA /* Feels.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Feels.app; sourceTree = BUILT_PRODUCTS_DIR; };
1CD90AFB278C7DE0001C4FEA /* Feels.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Feels.app; sourceTree = BUILT_PRODUCTS_DIR; };
1CD90AFD278C7DE0001C4FEA /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = "<group>"; };
1CD90B02278C7DE0001C4FEA /* Tests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Tests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -220,7 +220,7 @@
isa = PBXGroup;
children = (
1E594AEAB5F046E3B3ED7C47 /* Feels Watch App.app */,
1CD90AF5278C7DE0001C4FEA /* iFeels.app */,
1CD90AF5278C7DE0001C4FEA /* Feels.app */,
1CD90AFB278C7DE0001C4FEA /* Feels.app */,
1CD90B02278C7DE0001C4FEA /* Tests iOS.xctest */,
1CD90B0E278C7DE0001C4FEA /* Tests macOS.xctest */,
@@ -291,7 +291,7 @@
1C9566432EF8F5F70032E68F /* Algorithms */,
);
productName = "Feels (iOS)";
productReference = 1CD90AF5278C7DE0001C4FEA /* iFeels.app */;
productReference = 1CD90AF5278C7DE0001C4FEA /* Feels.app */;
productType = "com.apple.product-type.application";
};
1CD90AFA278C7DE0001C4FEA /* Feels (macOS) */ = {
@@ -582,14 +582,14 @@
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_CFBundleDisplayName = Feels;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.tt.ifeelDebug;
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.tt.feelsDebug;
INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeelDebug.watchkitapp;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feelsDebug.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
@@ -748,8 +748,8 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeelDebug;
PRODUCT_NAME = iFeels;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feelsDebug;
PRODUCT_NAME = Feels;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
SWIFT_EMIT_LOC_STRINGS = YES;
@@ -783,8 +783,8 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeelDebug;
PRODUCT_NAME = iFeels;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feelsDebug;
PRODUCT_NAME = Feels;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
SWIFT_EMIT_LOC_STRINGS = YES;
@@ -817,7 +817,7 @@
);
MACOSX_DEPLOYMENT_TARGET = 12.1;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeel;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feels;
PRODUCT_NAME = Feels;
SDKROOT = macosx;
SWIFT_EMIT_LOC_STRINGS = YES;
@@ -848,7 +848,7 @@
);
MACOSX_DEPLOYMENT_TARGET = 12.1;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeelDebug;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feelsDebug;
PRODUCT_NAME = Feels;
SDKROOT = macosx;
SWIFT_EMIT_LOC_STRINGS = YES;
@@ -940,7 +940,7 @@
CURRENT_PROJECT_VERSION = 23;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "FeelsWidgetExtension-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = iFeelsWidget;
INFOPLIST_KEY_CFBundleDisplayName = FeelsWidget;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -949,7 +949,7 @@
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeelDebug.FeelsWidgetDebug;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feelsDebug.FeelsWidgetDebug;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
@@ -972,7 +972,7 @@
CURRENT_PROJECT_VERSION = 23;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "FeelsWidgetExtension-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = iFeelsWidget;
INFOPLIST_KEY_CFBundleDisplayName = FeelsWidget;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -981,7 +981,7 @@
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeelDebug.FeelsWidget;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feelsDebug.FeelsWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
@@ -1006,14 +1006,14 @@
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_CFBundleDisplayName = Feels;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.tt.ifeel;
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.tt.feels;
INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.ifeel.watchkitapp;
PRODUCT_BUNDLE_IDENTIFIER = com.tt.feels.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;

View File

@@ -15,7 +15,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1CD90AF4278C7DE0001C4FEA"
BuildableName = "iFeels.app"
BuildableName = "Feels.app"
BlueprintName = "Feels (iOS)"
ReferencedContainer = "container:Feels.xcodeproj">
</BuildableReference>
@@ -55,7 +55,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1CD90AF4278C7DE0001C4FEA"
BuildableName = "iFeels.app"
BuildableName = "Feels.app"
BlueprintName = "Feels (iOS)"
ReferencedContainer = "container:Feels.xcodeproj">
</BuildableReference>
@@ -75,7 +75,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1CD90AF4278C7DE0001C4FEA"
BuildableName = "iFeels.app"
BuildableName = "Feels.app"
BlueprintName = "Feels (iOS)"
ReferencedContainer = "container:Feels.xcodeproj">
</BuildableReference>

View File

@@ -30,7 +30,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1CD90AF4278C7DE0001C4FEA"
BuildableName = "iFeels.app"
BuildableName = "Feels.app"
BlueprintName = "Feels (iOS)"
ReferencedContainer = "container:Feels.xcodeproj">
</BuildableReference>
@@ -72,7 +72,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1CD90AF4278C7DE0001C4FEA"
BuildableName = "iFeels.app"
BuildableName = "Feels.app"
BlueprintName = "Feels (iOS)"
ReferencedContainer = "container:Feels.xcodeproj">
</BuildableReference>
@@ -108,7 +108,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1CD90AF4278C7DE0001C4FEA"
BuildableName = "iFeels.app"
BuildableName = "Feels.app"
BlueprintName = "Feels (iOS)"
ReferencedContainer = "container:Feels.xcodeproj">
</BuildableReference>

View File

@@ -12,12 +12,12 @@
<key>Feels (macOS).xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
<integer>3</integer>
</dict>
<key>Feels Watch App.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>3</integer>
<integer>2</integer>
</dict>
<key>FeelsWidgetExtension.xcscheme_^#shared#^_</key>
<dict>

View File

@@ -1,7 +1,9 @@
{
"sourceLanguage" : "en",
"strings" : {
"": {},
"" : {
},
" " : {
"comment" : "A placeholder text used to create spacing between list items.",
"isCommentAutoGenerated" : true
@@ -670,8 +672,12 @@
"comment" : "A symbol that appears before a command in a terminal interface.",
"isCommentAutoGenerated" : true
},
"✨": {},
"🌈": {},
"✨" : {
},
"🌈" : {
},
"🎉" : {
"comment" : "A smiling face emoji.",
"isCommentAutoGenerated" : true
@@ -680,7 +686,9 @@
"comment" : "An emoji used as a preview for a theme in the CustomizeContentView.",
"isCommentAutoGenerated" : true
},
"💫": {},
"💫" : {
},
"😄" : {
"comment" : "A smiling face emoji.",
"isCommentAutoGenerated" : true
@@ -689,7 +697,9 @@
"comment" : "A playful emoji used in the lock screen view.",
"isCommentAutoGenerated" : true
},
"12": {},
"12" : {
},
"12 curated combinations of colors, icons, and layouts" : {
"comment" : "A description of the 12 color, icon, and layout combinations available in the theme picker.",
"isCommentAutoGenerated" : true,
@@ -732,7 +742,9 @@
}
}
},
"17": {},
"17" : {
},
"20" : {
"comment" : "A placeholder text that appears in place of a number.",
"isCommentAutoGenerated" : true
@@ -7321,6 +7333,47 @@
}
}
},
"How do you feel?" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Wie fühlst du dich?"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¿Cómo te sientes?"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Comment tu te sens ?"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "今どんな気分?"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "기분이 어때요?"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Como você está se sentindo?"
}
}
}
},
"How to add widgets" : {
"localizations" : {
"de" : {
@@ -8005,6 +8058,88 @@
}
}
},
"Log" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Eintragen"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Registrar"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Enregistrer"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "記録"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "기록"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Registrar"
}
}
}
},
"Log mood" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Stimmung eintragen"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Registrar estado de ánimo"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Enregistrer humeur"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "気分を記録"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "기분 기록"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Registrar humor"
}
}
}
},
"Log Mood" : {
"comment" : "A button that opens Feels to log a mood.",
"isCommentAutoGenerated" : true,
@@ -15667,6 +15802,47 @@
}
}
},
"Tap to log mood" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tippen, um Stimmung einzutragen"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Toca para registrar tu estado de ánimo"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Appuyer pour enregistrer l'humeur"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "タップして気分を記録"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "탭하여 기분 기록"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Toque para registrar o humor"
}
}
}
},
"Tap to log mood for this day" : {
"comment" : "A hint that appears when a user taps on a day with no mood logged, instructing them to log a mood.",
"isCommentAutoGenerated" : true,
@@ -18771,166 +18947,6 @@
}
}
}
},
"How do you feel?": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Wie fühlst du dich?"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "¿Cómo te sientes?"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Comment tu te sens ?"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "今どんな気分?"
}
},
"ko": {
"stringUnit": {
"state": "translated",
"value": "기분이 어때요?"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Como você está se sentindo?"
}
}
}
},
"Log": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Eintragen"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "Registrar"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Enregistrer"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "記録"
}
},
"ko": {
"stringUnit": {
"state": "translated",
"value": "기록"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Registrar"
}
}
}
},
"Log mood": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Stimmung eintragen"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "Registrar estado de ánimo"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Enregistrer humeur"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "気分を記録"
}
},
"ko": {
"stringUnit": {
"state": "translated",
"value": "기분 기록"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Registrar humor"
}
}
}
},
"Tap to log mood": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Tippen, um Stimmung einzutragen"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "Toca para registrar tu estado de ánimo"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Appuyer pour enregistrer l'humeur"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "タップして気分を記録"
}
},
"ko": {
"stringUnit": {
"state": "translated",
"value": "탭하여 기분 기록"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Toque para registrar o humor"
}
}
}
}
},
"version" : "1.1"

View File

@@ -4,7 +4,7 @@
<dict>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.tt.ifeelDebug</string>
<string>iCloud.com.tt.feelsDebug</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
@@ -12,7 +12,7 @@
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.tt.ifeelDebug</string>
<string>group.com.tt.feelsDebug</string>
</array>
</dict>
</plist>

View File

@@ -6,7 +6,7 @@
<string>development</string>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.tt.ifeelDebug</string>
<string>iCloud.com.tt.feelsDebug</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
@@ -14,7 +14,7 @@
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.tt.ifeelDebug</string>
<string>group.com.tt.feelsDebug</string>
</array>
</dict>
</plist>

View File

@@ -9,7 +9,7 @@ import Foundation
import BackgroundTasks
class BGTask {
static let updateDBMissingID = "com.tt.ifeel.dbUpdateMissing"
static let updateDBMissingID = "com.tt.feels.dbUpdateMissing"
@MainActor
class func runFillInMissingDatesTask(task: BGProcessingTask) {

View File

@@ -14,7 +14,7 @@ class HealthKitManager: ObservableObject {
static let shared = HealthKitManager()
private let healthStore = HKHealthStore()
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.ifeel", category: "HealthKit")
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "HealthKit")
@Published var isAuthorized = false
@Published var authorizationError: Error?

View File

@@ -45,8 +45,8 @@ class IAPManager: ObservableObject {
static let subscriptionGroupID = "2CFE4C4F"
private let productIdentifiers: Set<String> = [
"com.tt.ifeel.IAP.subscriptions.monthly",
"com.tt.ifeel.IAP.subscriptions.yearly"
"com.tt.feels.IAP.subscriptions.monthly",
"com.tt.feels.IAP.subscriptions.yearly"
]
private let trialDays = 30

View File

@@ -15,7 +15,7 @@ import os.log
final class MoodLogger {
static let shared = MoodLogger()
private static let logger = Logger(subsystem: "com.tt.ifeel", category: "MoodLogger")
private static let logger = Logger(subsystem: "com.tt.feels", category: "MoodLogger")
/// Key for tracking the last date side effects were applied
private static let lastSideEffectsDateKey = "lastSideEffectsAppliedDate"

View File

@@ -11,7 +11,7 @@ import os.log
@MainActor
final class DataController: ObservableObject {
private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.ifeel", category: "DataController")
private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "DataController")
static let shared = DataController()
private(set) var container: ModelContainer

View File

@@ -20,7 +20,7 @@ final class ExtensionDataProvider {
static let shared = ExtensionDataProvider()
private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.ifeel", category: "ExtensionDataProvider")
private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "ExtensionDataProvider")
private var _container: ModelContainer?

View File

@@ -25,7 +25,7 @@ enum SharedModelContainerError: LocalizedError {
}
enum SharedModelContainer {
private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.ifeel", category: "SharedModelContainer")
private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "SharedModelContainer")
/// Creates a ModelContainer with the appropriate configuration for app group sharing
/// - Parameter useCloudKit: Whether to enable CloudKit sync (defaults to true)
@@ -107,9 +107,9 @@ enum SharedModelContainer {
/// CloudKit container identifier based on build configuration
static var cloudKitContainerID: String {
#if DEBUG
return "iCloud.com.tt.ifeelDebug"
return "iCloud.com.tt.feelsDebug"
#else
return "iCloud.com.tt.ifeel"
return "iCloud.com.tt.feels"
#endif
}

View File

@@ -10,8 +10,8 @@ import SwiftUI
import SwiftData
struct Constants {
static let groupShareId = "group.com.tt.ifeel"
static let groupShareIdDebug = "group.com.tt.ifeelDebug"
static let groupShareId = "group.com.tt.feels"
static let groupShareIdDebug = "group.com.tt.feelsDebug"
static var currentGroupShareId: String {
#if DEBUG

View File

@@ -29,6 +29,6 @@ enum AppLogger {
// MARK: - Private
private static var subsystem: String {
Bundle.main.bundleIdentifier ?? "com.tt.ifeel"
Bundle.main.bundleIdentifier ?? "com.tt.feels"
}
}

View File

@@ -13,7 +13,7 @@ final class ImageCache {
static let shared = ImageCache()
private let cache = NSCache<NSString, UIImage>()
private let queue = DispatchQueue(label: "com.tt.ifeel.imagecache", qos: .userInitiated)
private let queue = DispatchQueue(label: "com.tt.feels.imagecache", qos: .userInitiated)
private init() {
// Configure cache limits

View File

@@ -17,7 +17,7 @@ final class WatchConnectivityManager: NSObject, ObservableObject {
static let shared = WatchConnectivityManager()
private static let logger = Logger(subsystem: "com.tt.ifeel", category: "WatchConnectivity")
private static let logger = Logger(subsystem: "com.tt.feels", category: "WatchConnectivity")
private var session: WCSession?

View File

@@ -72,7 +72,7 @@ extension VoteMoodIntent: ForegroundContinuableIntent {}
#if WIDGET_EXTENSION
enum WidgetMoodSaver {
private static let logger = Logger(subsystem: "com.tt.ifeel.widget", category: "WidgetMoodSaver")
private static let logger = Logger(subsystem: "com.tt.feels.widget", category: "WidgetMoodSaver")
@MainActor
static func save(mood: Mood, date: Date) {

View File

@@ -683,7 +683,7 @@ struct SettingsContentView: View {
theme.currentTheme.secondaryBGColor
Button(action: {
EventLogger.log(event: "show_eula")
if let url = URL(string: "https://ifeels.app/eula.html") {
if let url = URL(string: "https://feels.app/eula.html") {
UIApplication.shared.open(url)
}
}, label: {
@@ -702,7 +702,7 @@ struct SettingsContentView: View {
theme.currentTheme.secondaryBGColor
Button(action: {
EventLogger.log(event: "show_privacy")
if let url = URL(string: "https://ifeels.app/privacy.html") {
if let url = URL(string: "https://feels.app/privacy.html") {
UIApplication.shared.open(url)
}
}, label: {
@@ -1367,7 +1367,7 @@ struct SettingsView: View {
theme.currentTheme.secondaryBGColor
Button(action: {
EventLogger.log(event: "show_eula")
openURL(URL(string: "https://ifeels.app/eula.html")!)
openURL(URL(string: "https://feels.app/eula.html")!)
}, label: {
Text(String(localized: "settings_view_show_eula"))
.foregroundColor(textColor)
@@ -1383,7 +1383,7 @@ struct SettingsView: View {
theme.currentTheme.secondaryBGColor
Button(action: {
EventLogger.log(event: "show_privacy")
openURL(URL(string: "https://ifeels.app/privacy.html")!)
openURL(URL(string: "https://feels.app/privacy.html")!)
}, label: {
Text(String(localized: "settings_view_show_privacy"))
.foregroundColor(textColor)