diff --git a/.gitignore b/.gitignore index 52986df..d9a3a31 100644 --- a/.gitignore +++ b/.gitignore @@ -77,4 +77,4 @@ Secrets.swift # Screenshots and promo assets /screens/ -feels-promo/ +reflect-promo/ diff --git a/AGENTS.md b/AGENTS.md index 499bac4..702f752 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,4 +1,4 @@ -# Feels Agent Instructions +# Reflect Agent Instructions ## XCUITest Workflows (Required) diff --git a/CLAUDE.md b/CLAUDE.md index c73da07..5b5aece 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,4 +1,4 @@ -# Feels +# Reflect iOS mood tracking app. Users rate their day on a 5-point scale (Horrible to Great) and view patterns via Day, Month, Year, and Insights views. Includes watchOS companion, widgets, Live Activities, and AI-powered insights. @@ -6,16 +6,16 @@ iOS mood tracking app. Users rate their day on a 5-point scale (Horrible to Grea ```bash # Build -xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' build +xcodebuild -project Reflect.xcodeproj -scheme "Reflect (iOS)" -destination 'platform=iOS Simulator,name=iPhone 17 Pro' build # Run all tests -xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' test +xcodebuild -project Reflect.xcodeproj -scheme "Reflect (iOS)" -destination 'platform=iOS Simulator,name=iPhone 17 Pro' test # Run a single test suite -xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -only-testing:"Tests iOS/Tests_iOS" test +xcodebuild -project Reflect.xcodeproj -scheme "Reflect (iOS)" -destination 'platform=iOS Simulator,name=iPhone 17 Pro' -only-testing:"Tests iOS/Tests_iOS" test # Run a single test -xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -only-testing:"Tests iOS/Tests_iOS/testDatesBetween" test +xcodebuild -project Reflect.xcodeproj -scheme "Reflect (iOS)" -destination 'platform=iOS Simulator,name=iPhone 17 Pro' -only-testing:"Tests iOS/Tests_iOS/testDatesBetween" test ``` ## Architecture Overview @@ -236,7 +236,7 @@ DataController.shared.add(mood: .good, forDate: date, entryType: .listView) ### Startup Flow -1. `FeelsApp.init()` — Configure `AnalyticsManager`, register `BGTaskScheduler`, reset `FeelsTipsManager`, initialize `LiveActivityScheduler`, initialize `WatchConnectivityManager` +1. `ReflectApp.init()` — Configure `AnalyticsManager`, register `BGTaskScheduler`, reset `ReflectTipsManager`, initialize `LiveActivityScheduler`, initialize `WatchConnectivityManager` 2. `MainTabView` receives `DataController.shared.container` as `modelContainer` 3. `IAPManager`, `BiometricAuthManager`, `HealthKitManager` injected as `@EnvironmentObject` 4. On `scenePhase` change to `.active` — `DataController.shared.refreshFromDisk()` picks up widget/watch changes @@ -247,7 +247,9 @@ DataController.shared.add(mood: .good, forDate: date, entryType: .listView) ### Framework & Location - **Framework**: XCTest -- **Test directory**: `Tests iOS/` (iOS), `Tests macOS/` (macOS — template only) +- **UI test directory**: `Tests iOS/` (XCUITest suites) +- **Unit test directory**: `ReflectTests/` (XCTest unit tests) +- **macOS tests**: `Tests macOS/` (template only) - **File naming**: `{SuiteName}Tests.swift` ### UI Test Architecture (XCUITest) @@ -277,10 +279,10 @@ Mandatory UI test rules: ```bash # Run one suite -xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -only-testing:"Tests iOS/" test +xcodebuild -project Reflect.xcodeproj -scheme "Reflect (iOS)" -destination 'platform=iOS Simulator,name=iPhone 17 Pro' -only-testing:"Tests iOS/" test # Run all iOS UI tests -xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -only-testing:"Tests iOS" test +xcodebuild -project Reflect.xcodeproj -scheme "Reflect (iOS)" -destination 'platform=iOS Simulator,name=iPhone 17 Pro' -only-testing:"Tests iOS" test ``` ### Unit Test Guidance @@ -343,7 +345,7 @@ When fixing a bug: | Background Tasks | `BGTask` | System scheduler | System may not run task, task killed by system, insufficient time | | Apple Foundation Models | `FoundationModelsInsightService` | On-device AI | Model not available on device, generation failure, unexpected output | | PostHog | `AnalyticsManager` | Network | analytics.88oakapps.com unreachable, event queue overflow | -| Deep Links | `FeelsApp.onOpenURL` | URL scheme `feels://` | Malformed URL, unknown host/path | +| Deep Links | `ReflectApp.onOpenURL` | URL scheme `reflect://` | Malformed URL, unknown host/path | | App Shortcuts / Siri | `AppShortcuts.swift` | SiriKit | Intent not recognized, missing parameter | ## Analytics @@ -373,13 +375,16 @@ AnalyticsManager.shared.trackScreen(.day) ## Environment Configuration -- **Debug**: Uses `iCloud.com.88oakapps.feels.debug` CloudKit container, `group.com.88oakapps.feels.debug` App Group, `Feels-Debug.store` filename -- **Production**: Uses `iCloud.com.88oakapps.feels` CloudKit container, `group.com.88oakapps.feels` App Group, `Feels.store` filename +- **Debug**: Uses `iCloud.com.88oakapps.reflect.debug` CloudKit container, `group.com.88oakapps.reflect.debug` App Group, `Reflect-Debug.store` filename +- **Production**: Uses `iCloud.com.88oakapps.reflect` CloudKit container, `group.com.88oakapps.reflect` App Group, `Reflect.store` filename - **Toggle**: `#if DEBUG` preprocessor directive in `SharedModelContainer` and throughout codebase - **StoreKit Testing**: `IAPManager.bypassSubscription` flag (DEBUG only) — set to `true` to bypass paywall during development - **Subscription Group ID**: `21914363` -- **Product IDs**: `com.88oakapps.feels.IAP.subscriptions.monthly`, `com.88oakapps.feels.IAP.subscriptions.yearly` +- **Product IDs**: `com.88oakapps.reflect.IAP.subscriptions.monthly`, `com.88oakapps.reflect.IAP.subscriptions.yearly` - **Trial**: 30-day free trial tracked via `firstLaunchDate` in `GroupUserDefaults` +- **URL Scheme**: `reflect://` (deep links: `reflect://subscribe`) +- **BGTask ID**: `com.88oakapps.reflect.dbUpdateMissing` +- **Logger Subsystem**: `com.88oakapps.reflect` ## Directory Conventions @@ -389,9 +394,10 @@ When adding new files: - New models: `Shared/Models/` - New services/managers: `Shared/Services/` - New persistence operations: `Shared/Persisence/DataController{OPERATION}.swift` (note directory typo) -- New widget code: `FeelsWidget2/` -- New watch code: `Feels Watch App/` -- New tests: `Tests iOS/` +- New widget code: `ReflectWidget/` +- New watch code: `Reflect Watch App/` +- New UI tests: `Tests iOS/` +- New unit tests: `ReflectTests/` ### Naming Conventions @@ -404,9 +410,10 @@ When adding new files: ## Localization -- English: `en.lproj/Localizable.strings` -- Spanish: `es.lproj/Localizable.strings` +- **Format**: String Catalogs (`Reflect/Localizable.xcstrings`) +- **Languages**: English (en), German (de), Spanish (es), French (fr), Japanese (ja), Korean (ko), Portuguese-Brazil (pt-BR) - Use `String(localized:)` for all user-facing strings +- "Reflect" is a brand name — keep it untranslated in all languages ## Dependencies diff --git a/Configuration.storekit b/Configuration.storekit index dfac922..fb3721f 100644 --- a/Configuration.storekit +++ b/Configuration.storekit @@ -39,7 +39,7 @@ "localizations" : [ ], - "name" : "Feels Premium", + "name" : "Reflect Premium", "subscriptions" : [ { "adHocOffers" : [ @@ -95,7 +95,7 @@ "locale" : "ko" } ], - "productID" : "com.88oakapps.feels.IAP.subscriptions.monthly", + "productID" : "com.88oakapps.reflect.IAP.subscriptions.monthly", "recurringSubscriptionPeriod" : "P1M", "referenceName" : "Monthly", "subscriptionGroupID" : "21914363", @@ -158,7 +158,7 @@ "locale" : "ko" } ], - "productID" : "com.88oakapps.feels.IAP.subscriptions.yearly", + "productID" : "com.88oakapps.reflect.IAP.subscriptions.yearly", "recurringSubscriptionPeriod" : "P1Y", "referenceName" : "Yearly", "subscriptionGroupID" : "21914363", diff --git a/Feels.xcodeproj/xcuserdata/treyt.xcuserdatad/xcschemes/xcschememanagement.plist b/Feels.xcodeproj/xcuserdata/treyt.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index cb40cc7..0000000 --- a/Feels.xcodeproj/xcuserdata/treyt.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,194 +0,0 @@ - - - - - SchemeUserState - - Feels (iOS).xcscheme_^#shared#^_ - - orderHint - 1 - - Feels (macOS).xcscheme_^#shared#^_ - - orderHint - 2 - - Feels Watch App.xcscheme_^#shared#^_ - - orderHint - 3 - - FeelsWidgetExtension.xcscheme_^#shared#^_ - - orderHint - 0 - - PlaygroundChart (Playground) 1.xcscheme - - isShown - - orderHint - 7 - - PlaygroundChart (Playground) 10.xcscheme - - isShown - - orderHint - 13 - - PlaygroundChart (Playground) 11.xcscheme - - isShown - - orderHint - 14 - - PlaygroundChart (Playground) 12.xcscheme - - isShown - - orderHint - 15 - - PlaygroundChart (Playground) 13.xcscheme - - isShown - - orderHint - 16 - - PlaygroundChart (Playground) 14.xcscheme - - isShown - - orderHint - 17 - - PlaygroundChart (Playground) 2.xcscheme - - isShown - - orderHint - 8 - - PlaygroundChart (Playground) 3.xcscheme - - isShown - - orderHint - 7 - - PlaygroundChart (Playground) 4.xcscheme - - isShown - - orderHint - 8 - - PlaygroundChart (Playground) 5.xcscheme - - isShown - - orderHint - 9 - - PlaygroundChart (Playground) 6.xcscheme - - isShown - - orderHint - 2 - - PlaygroundChart (Playground) 7.xcscheme - - isShown - - orderHint - 10 - - PlaygroundChart (Playground) 8.xcscheme - - isShown - - orderHint - 11 - - PlaygroundChart (Playground) 9.xcscheme - - isShown - - orderHint - 12 - - PlaygroundChart (Playground).xcscheme - - isShown - - orderHint - 6 - - Promises (Playground) 1.xcscheme - - isShown - - orderHint - 4 - - Promises (Playground) 2.xcscheme - - isShown - - orderHint - 5 - - Promises (Playground) 3.xcscheme - - isShown - - orderHint - 9 - - Promises (Playground) 4.xcscheme - - isShown - - orderHint - 10 - - Promises (Playground) 5.xcscheme - - isShown - - orderHint - 11 - - Promises (Playground).xcscheme - - isShown - - orderHint - 2 - - - SuppressBuildableAutocreation - - 1CD90AF4278C7DE0001C4FEA - - primary - - - 1CD90B01278C7DE0001C4FEA - - primary - - - 1CD90B44278C7E7A001C4FEA - - primary - - - - - diff --git a/FeelsWidget2/WidgetBundle.swift b/FeelsWidget2/WidgetBundle.swift deleted file mode 100644 index b0f2b2c..0000000 --- a/FeelsWidget2/WidgetBundle.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// WidgetBundle.swift -// FeelsWidget -// -// Main widget bundle that registers all Feels widgets -// - -import WidgetKit -import SwiftUI - -@main -struct FeelsBundle: WidgetBundle { - var body: some Widget { - FeelsWidget() -// FeelsGraphicWidget() - FeelsIconWidget() - FeelsVoteWidget() - FeelsMoodControlWidget() - MoodStreakLiveActivity() - } -} diff --git a/PROJECT_OVERVIEW.md b/PROJECT_OVERVIEW.md index 5f08d95..00aa587 100644 --- a/PROJECT_OVERVIEW.md +++ b/PROJECT_OVERVIEW.md @@ -1,8 +1,8 @@ -# Feels - iOS Mood Tracking App +# Reflect - iOS Mood Tracking App ## Overview -**Feels** is a daily mood tracking iOS application that allows users to rate their emotional state each day on a 5-point scale (Horrible, Bad, Average, Good, Great) and visualize patterns over time through multiple view modes. +**Reflect** is a daily mood tracking iOS application that allows users to rate their emotional state each day on a 5-point scale (Horrible, Bad, Average, Good, Great) and visualize patterns over time through multiple view modes. ## Core Features @@ -24,7 +24,7 @@ ### Project Structure ``` -Feels/ +Reflect/ ├── Shared/ # Core app code │ ├── Models/ # Data models (Mood, Theme, MoodTintable, etc.) │ ├── Views/ # SwiftUI views organized by feature @@ -36,7 +36,7 @@ Feels/ │ ├── Persisence/ # Core Data persistence layer │ ├── Onboarding/ # First-run experience │ └── Protocols/ # Protocol definitions -├── FeelsWidget/ # iOS Widget Extension (3 widget types) +├── ReflectWidget/ # iOS Widget Extension (3 widget types) ├── en.lproj/ # English localization ├── es.lproj/ # Spanish localization └── Tests iOS/ # Test targets @@ -49,12 +49,12 @@ Feels/ ### App Entry | File | Purpose | |------|---------| -| `FeelsApp.swift` | Main app entry, Core Data setup, IAP manager, tab navigation | +| `ReflectApp.swift` | Main app entry, Core Data setup, IAP manager, tab navigation | ### Data Layer | File | Purpose | |------|---------| -| `Feels.xcdatamodeld` | Core Data model with `MoodEntry` entity | +| `Reflect.xcdatamodeld` | Core Data model with `MoodEntry` entity | | `Persistence.swift` | Core Data stack, App Group container | | `PersistenceGET.swift` | Fetch operations | | `PersistenceADD.swift` | Create/fill missing entries | @@ -132,12 +132,12 @@ enum Mood: Int { ## Widget System -Three widget types in `FeelsWidget/`: -1. **FeelsWidget**: Small/Medium/Large showing recent moods -2. **FeelsGraphicWidget**: Small widget with mood graphic -3. **FeelsIconWidget**: Custom icon widget +Three widget types in `ReflectWidget/`: +1. **ReflectWidget**: Small/Medium/Large showing recent moods +2. **ReflectGraphicWidget**: Small widget with mood graphic +3. **ReflectIconWidget**: Custom icon widget -Data shared via App Groups: `group.com.88oakapps.feels` +Data shared via App Groups: `group.com.88oakapps.reflect` --- @@ -155,11 +155,11 @@ Data shared via App Groups: `group.com.88oakapps.feels` ## Configuration ### App Groups -- Production: `group.com.88oakapps.feels` -- Debug: `group.com.88oakapps.feels.debug` +- Production: `group.com.88oakapps.reflect` +- Debug: `group.com.88oakapps.reflect.debug` ### Background Tasks -- Identifier: `com.88oak.Feels.dbUpdateMissing` +- Identifier: `com.88oak.Reflect.dbUpdateMissing` ### StoreKit Products - Monthly subscription diff --git a/Feels (iOS).entitlements b/Reflect (iOS).entitlements similarity index 87% rename from Feels (iOS).entitlements rename to Reflect (iOS).entitlements index 7fd9805..55683bc 100644 --- a/Feels (iOS).entitlements +++ b/Reflect (iOS).entitlements @@ -12,7 +12,7 @@ com.apple.developer.icloud-container-identifiers - iCloud.com.88oakapps.feels + iCloud.com.88oakapps.reflect com.apple.developer.icloud-services @@ -20,7 +20,7 @@ com.apple.security.application-groups - group.com.88oakapps.feels + group.com.88oakapps.reflect diff --git a/Feels (iOS)Dev.entitlements b/Reflect (iOS)Dev.entitlements similarity index 84% rename from Feels (iOS)Dev.entitlements rename to Reflect (iOS)Dev.entitlements index 384b378..77a9e83 100644 --- a/Feels (iOS)Dev.entitlements +++ b/Reflect (iOS)Dev.entitlements @@ -10,7 +10,7 @@ com.apple.developer.icloud-container-identifiers - iCloud.com.88oakapps.feels.debug + iCloud.com.88oakapps.reflect.debug com.apple.developer.icloud-services @@ -18,7 +18,7 @@ com.apple.security.application-groups - group.com.88oakapps.feels.debug + group.com.88oakapps.reflect.debug diff --git a/Feels Watch App/Assets.xcassets/AppIcon.appiconset/AppIcon.png b/Reflect Watch App/Assets.xcassets/AppIcon.appiconset/AppIcon.png similarity index 100% rename from Feels Watch App/Assets.xcassets/AppIcon.appiconset/AppIcon.png rename to Reflect Watch App/Assets.xcassets/AppIcon.appiconset/AppIcon.png diff --git a/Feels Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json b/Reflect Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Feels Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Reflect Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Feels Watch App/Assets.xcassets/Contents.json b/Reflect Watch App/Assets.xcassets/Contents.json similarity index 100% rename from Feels Watch App/Assets.xcassets/Contents.json rename to Reflect Watch App/Assets.xcassets/Contents.json diff --git a/Feels Watch App/ContentView.swift b/Reflect Watch App/ContentView.swift similarity index 99% rename from Feels Watch App/ContentView.swift rename to Reflect Watch App/ContentView.swift index b9f5638..614d25e 100644 --- a/Feels Watch App/ContentView.swift +++ b/Reflect Watch App/ContentView.swift @@ -1,6 +1,6 @@ // // ContentView.swift -// Feels Watch App +// Reflect Watch App // // Main voting interface for logging moods on Apple Watch. // diff --git a/FeelsWidgetExtension.entitlements b/Reflect Watch App/Reflect Watch App.entitlements similarity index 83% rename from FeelsWidgetExtension.entitlements rename to Reflect Watch App/Reflect Watch App.entitlements index 43871d5..70a2e1c 100644 --- a/FeelsWidgetExtension.entitlements +++ b/Reflect Watch App/Reflect Watch App.entitlements @@ -6,7 +6,7 @@ development com.apple.developer.icloud-container-identifiers - iCloud.com.88oakapps.feels + iCloud.com.88oakapps.reflect com.apple.developer.icloud-services @@ -14,7 +14,7 @@ com.apple.security.application-groups - group.com.88oakapps.feels + group.com.88oakapps.reflect diff --git a/FeelsWidgetExtensionDev.entitlements b/Reflect Watch App/Reflect Watch AppDebug.entitlements similarity index 82% rename from FeelsWidgetExtensionDev.entitlements rename to Reflect Watch App/Reflect Watch AppDebug.entitlements index 0a2a3fd..88e3d63 100644 --- a/FeelsWidgetExtensionDev.entitlements +++ b/Reflect Watch App/Reflect Watch AppDebug.entitlements @@ -6,7 +6,7 @@ development com.apple.developer.icloud-container-identifiers - iCloud.com.88oakapps.feels.debug + iCloud.com.88oakapps.reflect.debug com.apple.developer.icloud-services @@ -14,7 +14,7 @@ com.apple.security.application-groups - group.com.88oakapps.feels.debug + group.com.88oakapps.reflect.debug diff --git a/Feels Watch App/FeelsComplication.swift b/Reflect Watch App/ReflectComplication.swift similarity index 80% rename from Feels Watch App/FeelsComplication.swift rename to Reflect Watch App/ReflectComplication.swift index 01e0acd..dad57f7 100644 --- a/Feels Watch App/FeelsComplication.swift +++ b/Reflect Watch App/ReflectComplication.swift @@ -1,6 +1,6 @@ // -// FeelsComplication.swift -// Feels Watch App +// ReflectComplication.swift +// Reflect Watch App // // WidgetKit complications for Apple Watch. // @@ -10,19 +10,19 @@ import SwiftUI // MARK: - Timeline Provider -struct FeelsTimelineProvider: TimelineProvider { - func placeholder(in context: Context) -> FeelsEntry { - FeelsEntry(date: Date(), mood: nil, streak: 0) +struct ReflectTimelineProvider: TimelineProvider { + func placeholder(in context: Context) -> ReflectEntry { + ReflectEntry(date: Date(), mood: nil, streak: 0) } - func getSnapshot(in context: Context, completion: @escaping (FeelsEntry) -> Void) { + func getSnapshot(in context: Context, completion: @escaping (ReflectEntry) -> Void) { Task { @MainActor in let entry = createEntry() completion(entry) } } - func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { Task { @MainActor in let entry = createEntry() @@ -37,11 +37,11 @@ struct FeelsTimelineProvider: TimelineProvider { } @MainActor - private func createEntry() -> FeelsEntry { + private func createEntry() -> ReflectEntry { let todayEntry = ExtensionDataProvider.shared.getTodayEntry() let streak = ExtensionDataProvider.shared.getCurrentStreak() - return FeelsEntry( + return ReflectEntry( date: Date(), mood: todayEntry?.mood, streak: streak @@ -51,7 +51,7 @@ struct FeelsTimelineProvider: TimelineProvider { // MARK: - Timeline Entry -struct FeelsEntry: TimelineEntry { +struct ReflectEntry: TimelineEntry { let date: Date let mood: Mood? let streak: Int @@ -59,8 +59,8 @@ struct FeelsEntry: TimelineEntry { // MARK: - Complication Views -struct FeelsComplicationEntryView: View { - var entry: FeelsEntry +struct ReflectComplicationEntryView: View { + var entry: ReflectEntry @Environment(\.widgetFamily) var family var body: some View { @@ -82,7 +82,7 @@ struct FeelsComplicationEntryView: View { // MARK: - Circular Complication struct CircularView: View { - let entry: FeelsEntry + let entry: ReflectEntry var body: some View { ZStack { @@ -106,7 +106,7 @@ struct CircularView: View { // MARK: - Corner Complication struct CornerView: View { - let entry: FeelsEntry + let entry: ReflectEntry var body: some View { if let mood = entry.mood { @@ -128,7 +128,7 @@ struct CornerView: View { // MARK: - Inline Complication struct InlineView: View { - let entry: FeelsEntry + let entry: ReflectEntry var body: some View { if entry.streak > 0 { @@ -144,7 +144,7 @@ struct InlineView: View { // MARK: - Rectangular Complication struct RectangularView: View { - let entry: FeelsEntry + let entry: ReflectEntry var body: some View { HStack { @@ -170,7 +170,7 @@ struct RectangularView: View { .font(.system(size: 24)) VStack(alignment: .leading, spacing: 2) { - Text("Feels") + Text("Reflect") .font(.system(size: 14, weight: .semibold)) Text("Tap to log mood") .font(.system(size: 12)) @@ -185,15 +185,15 @@ struct RectangularView: View { // MARK: - Widget Configuration -struct FeelsComplication: Widget { - let kind: String = "FeelsComplication" +struct ReflectComplication: Widget { + let kind: String = "ReflectComplication" var body: some WidgetConfiguration { - StaticConfiguration(kind: kind, provider: FeelsTimelineProvider()) { entry in - FeelsComplicationEntryView(entry: entry) + StaticConfiguration(kind: kind, provider: ReflectTimelineProvider()) { entry in + ReflectComplicationEntryView(entry: entry) .containerBackground(.fill.tertiary, for: .widget) } - .configurationDisplayName("Feels") + .configurationDisplayName("Reflect") .description("See today's mood and streak.") .supportedFamilies([ .accessoryCircular, @@ -207,26 +207,26 @@ struct FeelsComplication: Widget { // MARK: - Preview #Preview("Circular - Mood") { - CircularView(entry: FeelsEntry(date: Date(), mood: .great, streak: 5)) + CircularView(entry: ReflectEntry(date: Date(), mood: .great, streak: 5)) .previewContext(WidgetPreviewContext(family: .accessoryCircular)) } #Preview("Circular - Empty") { - CircularView(entry: FeelsEntry(date: Date(), mood: nil, streak: 0)) + CircularView(entry: ReflectEntry(date: Date(), mood: nil, streak: 0)) .previewContext(WidgetPreviewContext(family: .accessoryCircular)) } #Preview("Rectangular - Mood") { - RectangularView(entry: FeelsEntry(date: Date(), mood: .good, streak: 7)) + RectangularView(entry: ReflectEntry(date: Date(), mood: .good, streak: 7)) .previewContext(WidgetPreviewContext(family: .accessoryRectangular)) } #Preview("Inline - Streak") { - InlineView(entry: FeelsEntry(date: Date(), mood: .great, streak: 5)) + InlineView(entry: ReflectEntry(date: Date(), mood: .great, streak: 5)) .previewContext(WidgetPreviewContext(family: .accessoryInline)) } #Preview("Corner - Mood") { - CornerView(entry: FeelsEntry(date: Date(), mood: .average, streak: 3)) + CornerView(entry: ReflectEntry(date: Date(), mood: .average, streak: 3)) .previewContext(WidgetPreviewContext(family: .accessoryCorner)) } diff --git a/Feels Watch App/FeelsWatchApp.swift b/Reflect Watch App/ReflectWatchApp.swift similarity index 80% rename from Feels Watch App/FeelsWatchApp.swift rename to Reflect Watch App/ReflectWatchApp.swift index 4cad729..6febdbe 100644 --- a/Feels Watch App/FeelsWatchApp.swift +++ b/Reflect Watch App/ReflectWatchApp.swift @@ -1,6 +1,6 @@ // -// FeelsWatchApp.swift -// Feels Watch App +// ReflectWatchApp.swift +// Reflect Watch App // // Entry point for the Apple Watch companion app. // @@ -8,7 +8,7 @@ import SwiftUI @main -struct FeelsWatchApp: App { +struct ReflectWatchApp: App { init() { // Initialize Watch Connectivity for cross-device widget updates diff --git a/Feels--iOS--Info.plist b/Reflect--iOS--Info.plist similarity index 81% rename from Feels--iOS--Info.plist rename to Reflect--iOS--Info.plist index 6b0dfca..aaeefa3 100644 --- a/Feels--iOS--Info.plist +++ b/Reflect--iOS--Info.plist @@ -4,16 +4,16 @@ BGTaskSchedulerPermittedIdentifiers - com.tt.feels.dbUpdateMissing + com.88oakapps.reflect.dbUpdateMissing CFBundleURLTypes CFBundleURLName - com.tt.feels + com.88oakapps.reflect CFBundleURLSchemes - feels + reflect diff --git a/Feels.xcodeproj/project.pbxproj b/Reflect.xcodeproj/project.pbxproj similarity index 86% rename from Feels.xcodeproj/project.pbxproj rename to Reflect.xcodeproj/project.pbxproj index c07210f..d73f817 100644 --- a/Feels.xcodeproj/project.pbxproj +++ b/Reflect.xcodeproj/project.pbxproj @@ -11,8 +11,8 @@ 141C5C51CA0658F682E984F5 /* ReduceMotionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C8D04ACF01F539EA572EEB8 /* ReduceMotionTests.swift */; }; 19F8D7CA5D384E82A4BB4BCA /* YearViewHeatmapTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9475CC3818201762FA57D91 /* YearViewHeatmapTests.swift */; }; 1AB245144C89927264D16645 /* InsightsEmptyStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6988985985DE9C29CFDFA96 /* InsightsEmptyStateTests.swift */; }; - 1C0DAB51279DB0FB003B1F21 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 1C0DAB50279DB0FB003B1F21 /* Localizable.xcstrings */; }; - 1C0DAB52279DB0FB003B1F22 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 1C0DAB50279DB0FB003B1F21 /* Localizable.xcstrings */; }; + 1C0DAB51279DB0FB003B1F21 /* Reflect/Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 1C0DAB50279DB0FB003B1F21 /* Reflect/Localizable.xcstrings */; }; + 1C0DAB52279DB0FB003B1F22 /* Reflect/Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 1C0DAB50279DB0FB003B1F21 /* Reflect/Localizable.xcstrings */; }; 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 */; }; @@ -21,7 +21,7 @@ 1CD90B15278C7DE0001C4FEA /* Tests_macOSLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B14278C7DE0001C4FEA /* Tests_macOSLaunchTests.swift */; }; 1CD90B48278C7E7A001C4FEA /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CD90B47278C7E7A001C4FEA /* WidgetKit.framework */; platformFilter = maccatalyst; }; 1CD90B4A278C7E7A001C4FEA /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CD90B49278C7E7A001C4FEA /* SwiftUI.framework */; platformFilter = maccatalyst; }; - 1CD90B56278C7E7A001C4FEA /* FeelsWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1CD90B45278C7E7A001C4FEA /* FeelsWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 1CD90B56278C7E7A001C4FEA /* ReflectWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1CD90B45278C7E7A001C4FEA /* ReflectWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 1CD90B6C278C7F78001C4FEA /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CD90B6B278C7F78001C4FEA /* CloudKit.framework */; }; 1CD90B6E278C7F8B001C4FEA /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CD90B6B278C7F78001C4FEA /* CloudKit.framework */; }; 1CDE000F2F3BBD26006AE6A1 /* PostHog in Frameworks */ = {isa = PBXBuildFile; productRef = 1CA00002300000000000002A /* PostHog */; }; @@ -96,28 +96,28 @@ containerPortal = 1CD90AE6278C7DDF001C4FEA /* Project object */; proxyType = 1; remoteGlobalIDString = 1CD90AF4278C7DE0001C4FEA; - remoteInfo = "Feels (iOS)"; + remoteInfo = "Reflect (iOS)"; }; 1CD90B0F278C7DE0001C4FEA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1CD90AE6278C7DDF001C4FEA /* Project object */; proxyType = 1; remoteGlobalIDString = 1CD90AFA278C7DE0001C4FEA; - remoteInfo = "Feels (macOS)"; + remoteInfo = "Reflect (macOS)"; }; 1CD90B54278C7E7A001C4FEA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1CD90AE6278C7DDF001C4FEA /* Project object */; proxyType = 1; remoteGlobalIDString = 1CD90B44278C7E7A001C4FEA; - remoteInfo = FeelsWidgetExtension; + remoteInfo = ReflectWidgetExtension; }; A0B973C7674930232515563A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1CD90AE6278C7DDF001C4FEA /* Project object */; proxyType = 1; remoteGlobalIDString = 1CD90AF4278C7DE0001C4FEA; - remoteInfo = "Feels (iOS)"; + remoteInfo = "Reflect (iOS)"; }; /* End PBXContainerItemProxy section */ @@ -128,7 +128,7 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - 1CD90B56278C7E7A001C4FEA /* FeelsWidgetExtension.appex in Embed Foundation Extensions */, + 1CD90B56278C7E7A001C4FEA /* ReflectWidgetExtension.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -139,10 +139,10 @@ 0246E9F406F872E5DEEB7269 /* YearViewDisplayTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YearViewDisplayTests.swift; sourceTree = ""; }; 0359E1D32D936859E5A0C9F3 /* AppResumeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppResumeTests.swift; sourceTree = ""; }; 17DC4C498A1185DC831F4593 /* LocalizationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationTests.swift; sourceTree = ""; }; - 1C0DAB50279DB0FB003B1F21 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Feels/Localizable.xcstrings; sourceTree = ""; }; + 1C0DAB50279DB0FB003B1F21 /* Reflect/Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Reflect/Localizable.xcstrings; sourceTree = ""; }; 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 /* 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; }; + 1CD90AF5278C7DE0001C4FEA /* Reflect.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Reflect.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1CD90AFB278C7DE0001C4FEA /* Reflect.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Reflect.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1CD90AFD278C7DE0001C4FEA /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = ""; }; 1CD90B02278C7DE0001C4FEA /* Tests iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Tests iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1CD90B06278C7DE0001C4FEA /* Tests_iOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_iOS.swift; sourceTree = ""; }; @@ -150,17 +150,17 @@ 1CD90B0E278C7DE0001C4FEA /* Tests macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Tests macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1CD90B12278C7DE0001C4FEA /* Tests_macOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_macOS.swift; sourceTree = ""; }; 1CD90B14278C7DE0001C4FEA /* Tests_macOSLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_macOSLaunchTests.swift; sourceTree = ""; }; - 1CD90B45278C7E7A001C4FEA /* FeelsWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = FeelsWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 1CD90B45278C7E7A001C4FEA /* ReflectWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ReflectWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 1CD90B47278C7E7A001C4FEA /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; 1CD90B49278C7E7A001C4FEA /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; - 1CD90B69278C7F65001C4FEA /* Feels--iOS--Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Feels--iOS--Info.plist"; sourceTree = ""; }; - 1CD90B6A278C7F75001C4FEA /* Feels (iOS).entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Feels (iOS).entitlements"; sourceTree = ""; }; + 1CD90B69278C7F65001C4FEA /* Reflect--iOS--Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Reflect--iOS--Info.plist"; sourceTree = ""; }; + 1CD90B6A278C7F75001C4FEA /* Reflect (iOS).entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Reflect (iOS).entitlements"; sourceTree = ""; }; 1CD90B6B278C7F78001C4FEA /* CloudKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CloudKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CloudKit.framework; sourceTree = DEVELOPER_DIR; }; - 1CD90B6D278C7F89001C4FEA /* FeelsWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = FeelsWidgetExtension.entitlements; sourceTree = ""; }; - 1CD90B6F278C8000001C4FEA /* FeelsWidgetExtensionDev.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = FeelsWidgetExtensionDev.entitlements; sourceTree = ""; }; - 1CD90B70278C8000001C4FEA /* Feels (iOS)Dev.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = "Feels (iOS)Dev.entitlements"; sourceTree = ""; }; + 1CD90B6D278C7F89001C4FEA /* ReflectWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ReflectWidgetExtension.entitlements; sourceTree = ""; }; + 1CD90B6F278C8000001C4FEA /* ReflectWidgetExtensionDev.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = ReflectWidgetExtensionDev.entitlements; sourceTree = ""; }; + 1CD90B70278C8000001C4FEA /* Reflect (iOS)Dev.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = "Reflect (iOS)Dev.entitlements"; sourceTree = ""; }; 1CDEFBBE2F3B8736006AE6A1 /* Configuration.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Configuration.storekit; sourceTree = ""; }; - 1E594AEAB5F046E3B3ED7C47 /* Feels Watch App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Feels Watch App.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E594AEAB5F046E3B3ED7C47 /* Reflect Watch App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Reflect Watch App.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 21CD463209E0909393545D62 /* TrialBannerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrialBannerTests.swift; sourceTree = ""; }; 29CE4110A0D8FBBAD7F92BDF /* BaseUITestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseUITestCase.swift; sourceTree = ""; }; 29E2A2FC314F88244CA946BF /* StreakTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StreakTests.swift; sourceTree = ""; }; @@ -191,8 +191,8 @@ B0C1D2E3F4A5B6C7D8E9FA0B /* AllDayViewStylesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllDayViewStylesTests.swift; sourceTree = ""; }; B2C3D4E5F6A7B8C9D0E1F2A3 /* CustomizeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomizeScreen.swift; sourceTree = ""; }; B4C5D6E7F8A9B0C1D2E3F4A5 /* PaywallGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaywallGateTests.swift; sourceTree = ""; }; - B60015D02A064FF582E232FD /* Feels Watch AppDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Feels Watch App/Feels Watch AppDebug.entitlements"; sourceTree = ""; }; - B8AB4CD73C2B4DC89C6FE84D /* Feels Watch App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Feels Watch App/Feels Watch App.entitlements"; sourceTree = ""; }; + B60015D02A064FF582E232FD /* Reflect Watch App/Reflect Watch AppDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Reflect Watch App/Reflect Watch AppDebug.entitlements"; sourceTree = ""; }; + B8AB4CD73C2B4DC89C6FE84D /* Reflect Watch App/Reflect Watch App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Reflect Watch App/Reflect Watch App.entitlements"; sourceTree = ""; }; B8C9D0E1F2A3B4C5D6E7F8A9 /* MonthViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonthViewTests.swift; sourceTree = ""; }; BB22222222222222BBBBBBBB /* MoodLoggingEmptyStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoodLoggingEmptyStateTests.swift; sourceTree = ""; }; BE4D06D4E7188339DE8BC040 /* SettingsLegalLinksTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsLegalLinksTests.swift; sourceTree = ""; }; @@ -208,7 +208,7 @@ D4E5F6A7B8C9D0E1F2A3B4C5 /* MoodReplacementTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoodReplacementTests.swift; sourceTree = ""; }; D6E7F8A9B0C1D2E3F4A5B6C7 /* IconPackTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconPackTests.swift; sourceTree = ""; }; D9475CC3818201762FA57D91 /* YearViewHeatmapTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YearViewHeatmapTests.swift; sourceTree = ""; }; - DA0D74ACDD741CFA1F14F50F /* FeelsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FeelsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + DA0D74ACDD741CFA1F14F50F /* ReflectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReflectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; DA7E6C56A47EB49419BFA77C /* LongTranslationTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LongTranslationTests.swift; sourceTree = ""; }; DD44444444444444DDDDDDDD /* EntryDetailTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntryDetailTests.swift; sourceTree = ""; }; DD717F91BD65382B7DDFE3C4 /* VoteLogicsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VoteLogicsTests.swift; sourceTree = ""; }; @@ -228,7 +228,7 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ - 1C000C162EE93AE3009C9ED5 /* Exceptions for "Shared" folder in "FeelsWidgetExtension" target */ = { + 1C000C162EE93AE3009C9ED5 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( AccessibilityIdentifiers.swift, @@ -257,9 +257,9 @@ Views/CustomWidget/CustomWidgetModel.swift, Views/CustomWidget/CustomWidgetView.swift, ); - target = 1CD90B44278C7E7A001C4FEA /* FeelsWidgetExtension */; + target = 1CD90B44278C7E7A001C4FEA /* ReflectWidgetExtension */; }; - 2166CE8AA7264FC2B4BFAAAC /* Exceptions for "Shared" folder in "Feels Watch App" target */ = { + 2166CE8AA7264FC2B4BFAAAC /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( Models/Mood.swift, @@ -269,46 +269,14 @@ Services/WatchConnectivityManager.swift, SharedMoodIntent.swift, ); - target = B1DB9E6543DE4A009DB00916 /* Feels Watch App */; + target = B1DB9E6543DE4A009DB00916 /* Reflect Watch App */; }; /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - 1C00073D2EE9388A009C9ED5 /* Shared */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - 2166CE8AA7264FC2B4BFAAAC /* Exceptions for "Shared" folder in "Feels Watch App" target */, - 1C000C162EE93AE3009C9ED5 /* Exceptions for "Shared" folder in "FeelsWidgetExtension" target */, - ); - explicitFileTypes = { - }; - explicitFolders = ( - ); - path = Shared; - sourceTree = ""; - }; - 1C0009922EE938FC009C9ED5 /* FeelsWidget2 */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - ); - explicitFileTypes = { - }; - explicitFolders = ( - ); - path = FeelsWidget2; - sourceTree = ""; - }; - 579031D619ED4B989145EEB1 /* Feels Watch App */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - ); - explicitFileTypes = { - }; - explicitFolders = ( - ); - path = "Feels Watch App"; - sourceTree = ""; - }; + 1C00073D2EE9388A009C9ED5 /* Shared */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (2166CE8AA7264FC2B4BFAAAC /* PBXFileSystemSynchronizedBuildFileExceptionSet */, 1C000C162EE93AE3009C9ED5 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Shared; sourceTree = ""; }; + 1C0009922EE938FC009C9ED5 /* ReflectWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = ReflectWidget; sourceTree = ""; }; + 579031D619ED4B989145EEB1 /* Reflect Watch App */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "Reflect Watch App"; sourceTree = ""; }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -376,37 +344,37 @@ 1CD90AE5278C7DDF001C4FEA = { isa = PBXGroup; children = ( - B8AB4CD73C2B4DC89C6FE84D /* Feels Watch App.entitlements */, - B60015D02A064FF582E232FD /* Feels Watch AppDebug.entitlements */, - 1C0DAB50279DB0FB003B1F21 /* Localizable.xcstrings */, + B8AB4CD73C2B4DC89C6FE84D /* Reflect Watch App/Reflect Watch App.entitlements */, + B60015D02A064FF582E232FD /* Reflect Watch App/Reflect Watch AppDebug.entitlements */, + 1C0DAB50279DB0FB003B1F21 /* Reflect/Localizable.xcstrings */, 1CDEFBBE2F3B8736006AE6A1 /* Configuration.storekit */, - 1CD90B6A278C7F75001C4FEA /* Feels (iOS).entitlements */, - 1CD90B70278C8000001C4FEA /* Feels (iOS)Dev.entitlements */, - 1CD90B6D278C7F89001C4FEA /* FeelsWidgetExtension.entitlements */, - 1CD90B6F278C8000001C4FEA /* FeelsWidgetExtensionDev.entitlements */, - 1CD90B69278C7F65001C4FEA /* Feels--iOS--Info.plist */, - 579031D619ED4B989145EEB1 /* Feels Watch App */, + 1CD90B6A278C7F75001C4FEA /* Reflect (iOS).entitlements */, + 1CD90B70278C8000001C4FEA /* Reflect (iOS)Dev.entitlements */, + 1CD90B6D278C7F89001C4FEA /* ReflectWidgetExtension.entitlements */, + 1CD90B6F278C8000001C4FEA /* ReflectWidgetExtensionDev.entitlements */, + 1CD90B69278C7F65001C4FEA /* Reflect--iOS--Info.plist */, + 579031D619ED4B989145EEB1 /* Reflect Watch App */, 1C00073D2EE9388A009C9ED5 /* Shared */, - 1C0009922EE938FC009C9ED5 /* FeelsWidget2 */, + 1C0009922EE938FC009C9ED5 /* ReflectWidget */, 1CD90AFC278C7DE0001C4FEA /* macOS */, 1CD90B05278C7DE0001C4FEA /* Tests iOS */, 1CD90B11278C7DE0001C4FEA /* Tests macOS */, 1CD90B46278C7E7A001C4FEA /* Frameworks */, 1CD90AF6278C7DE0001C4FEA /* Products */, - 38D005587E22737DC6291955 /* FeelsTests */, + 38D005587E22737DC6291955 /* ReflectTests */, ); sourceTree = ""; }; 1CD90AF6278C7DE0001C4FEA /* Products */ = { isa = PBXGroup; children = ( - 1E594AEAB5F046E3B3ED7C47 /* Feels Watch App.app */, - 1CD90AF5278C7DE0001C4FEA /* Feels.app */, - 1CD90AFB278C7DE0001C4FEA /* Feels.app */, + 1E594AEAB5F046E3B3ED7C47 /* Reflect Watch App.app */, + 1CD90AF5278C7DE0001C4FEA /* Reflect.app */, + 1CD90AFB278C7DE0001C4FEA /* Reflect.app */, 1CD90B02278C7DE0001C4FEA /* Tests iOS.xctest */, 1CD90B0E278C7DE0001C4FEA /* Tests macOS.xctest */, - 1CD90B45278C7E7A001C4FEA /* FeelsWidgetExtension.appex */, - DA0D74ACDD741CFA1F14F50F /* FeelsTests.xctest */, + 1CD90B45278C7E7A001C4FEA /* ReflectWidgetExtension.appex */, + DA0D74ACDD741CFA1F14F50F /* ReflectTests.xctest */, ); name = Products; sourceTree = ""; @@ -500,7 +468,7 @@ name = Frameworks; sourceTree = ""; }; - 38D005587E22737DC6291955 /* FeelsTests */ = { + 38D005587E22737DC6291955 /* ReflectTests */ = { isa = PBXGroup; children = ( 5566271983AEDF1D33C34FE6 /* DataControllerCRUDTests.swift */, @@ -509,7 +477,7 @@ 29E2A2FC314F88244CA946BF /* StreakTests.swift */, DD717F91BD65382B7DDFE3C4 /* VoteLogicsTests.swift */, ); - path = FeelsTests; + path = ReflectTests; sourceTree = ""; }; 3A62ED77167DA212DE1CCB7D /* Helpers */ = { @@ -546,9 +514,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 1CD90AF4278C7DE0001C4FEA /* Feels (iOS) */ = { + 1CD90AF4278C7DE0001C4FEA /* Reflect (iOS) */ = { isa = PBXNativeTarget; - buildConfigurationList = 1CD90B22278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Feels (iOS)" */; + buildConfigurationList = 1CD90B22278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Reflect (iOS)" */; buildPhases = ( 1CD90AF1278C7DE0001C4FEA /* Sources */, 1CD90AF2278C7DE0001C4FEA /* Frameworks */, @@ -563,18 +531,18 @@ fileSystemSynchronizedGroups = ( 1C00073D2EE9388A009C9ED5 /* Shared */, ); - name = "Feels (iOS)"; + name = "Reflect (iOS)"; packageProductDependencies = ( 1C9566432EF8F5F70032E68F /* Algorithms */, 1CA00002300000000000002A /* PostHog */, ); - productName = "Feels (iOS)"; - productReference = 1CD90AF5278C7DE0001C4FEA /* Feels.app */; + productName = "Reflect (iOS)"; + productReference = 1CD90AF5278C7DE0001C4FEA /* Reflect.app */; productType = "com.apple.product-type.application"; }; - 1CD90AFA278C7DE0001C4FEA /* Feels (macOS) */ = { + 1CD90AFA278C7DE0001C4FEA /* Reflect (macOS) */ = { isa = PBXNativeTarget; - buildConfigurationList = 1CD90B25278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Feels (macOS)" */; + buildConfigurationList = 1CD90B25278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Reflect (macOS)" */; buildPhases = ( 1CD90AF7278C7DE0001C4FEA /* Sources */, 1CD90AF8278C7DE0001C4FEA /* Frameworks */, @@ -584,9 +552,9 @@ ); dependencies = ( ); - name = "Feels (macOS)"; - productName = "Feels (macOS)"; - productReference = 1CD90AFB278C7DE0001C4FEA /* Feels.app */; + name = "Reflect (macOS)"; + productName = "Reflect (macOS)"; + productReference = 1CD90AFB278C7DE0001C4FEA /* Reflect.app */; productType = "com.apple.product-type.application"; }; 1CD90B01278C7DE0001C4FEA /* Tests iOS */ = { @@ -625,9 +593,9 @@ productReference = 1CD90B0E278C7DE0001C4FEA /* Tests macOS.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; - 1CD90B44278C7E7A001C4FEA /* FeelsWidgetExtension */ = { + 1CD90B44278C7E7A001C4FEA /* ReflectWidgetExtension */ = { isa = PBXNativeTarget; - buildConfigurationList = 1CD90B57278C7E7A001C4FEA /* Build configuration list for PBXNativeTarget "FeelsWidgetExtension" */; + buildConfigurationList = 1CD90B57278C7E7A001C4FEA /* Build configuration list for PBXNativeTarget "ReflectWidgetExtension" */; buildPhases = ( 1CD90B41278C7E7A001C4FEA /* Sources */, 1CD90B42278C7E7A001C4FEA /* Frameworks */, @@ -638,16 +606,16 @@ dependencies = ( ); fileSystemSynchronizedGroups = ( - 1C0009922EE938FC009C9ED5 /* FeelsWidget2 */, + 1C0009922EE938FC009C9ED5 /* ReflectWidget */, ); - name = FeelsWidgetExtension; - productName = FeelsWidgetExtension; - productReference = 1CD90B45278C7E7A001C4FEA /* FeelsWidgetExtension.appex */; + name = ReflectWidgetExtension; + productName = ReflectWidgetExtension; + productReference = 1CD90B45278C7E7A001C4FEA /* ReflectWidgetExtension.appex */; productType = "com.apple.product-type.app-extension"; }; - B1DB9E6543DE4A009DB00916 /* Feels Watch App */ = { + B1DB9E6543DE4A009DB00916 /* Reflect Watch App */ = { isa = PBXNativeTarget; - buildConfigurationList = 1B7D3790BF564C5392D480B2 /* Build configuration list for PBXNativeTarget "Feels Watch App" */; + buildConfigurationList = 1B7D3790BF564C5392D480B2 /* Build configuration list for PBXNativeTarget "Reflect Watch App" */; buildPhases = ( 0C4FBA03AAF5412783DD72AF /* Sources */, 28189547ACED4EA2B5842F91 /* Frameworks */, @@ -658,16 +626,16 @@ dependencies = ( ); fileSystemSynchronizedGroups = ( - 579031D619ED4B989145EEB1 /* Feels Watch App */, + 579031D619ED4B989145EEB1 /* Reflect Watch App */, ); - name = "Feels Watch App"; - productName = "Feels Watch App"; - productReference = 1E594AEAB5F046E3B3ED7C47 /* Feels Watch App.app */; + name = "Reflect Watch App"; + productName = "Reflect Watch App"; + productReference = 1E594AEAB5F046E3B3ED7C47 /* Reflect Watch App.app */; productType = "com.apple.product-type.application"; }; - B375A511826E3AB53E2CF51A /* FeelsTests */ = { + B375A511826E3AB53E2CF51A /* ReflectTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 611E0B1E1241C11626465A8D /* Build configuration list for PBXNativeTarget "FeelsTests" */; + buildConfigurationList = 611E0B1E1241C11626465A8D /* Build configuration list for PBXNativeTarget "ReflectTests" */; buildPhases = ( 681C769809C145ECC6A2AE8B /* Sources */, 0DC68E3188164EBC373A6BF3 /* Frameworks */, @@ -678,9 +646,9 @@ dependencies = ( 946F2D1B29B91CD7DB732908 /* PBXTargetDependency */, ); - name = FeelsTests; - productName = FeelsTests; - productReference = DA0D74ACDD741CFA1F14F50F /* FeelsTests.xctest */; + name = ReflectTests; + productName = ReflectTests; + productReference = DA0D74ACDD741CFA1F14F50F /* ReflectTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ @@ -719,7 +687,7 @@ }; }; }; - buildConfigurationList = 1CD90AE9278C7DDF001C4FEA /* Build configuration list for PBXProject "Feels" */; + buildConfigurationList = 1CD90AE9278C7DDF001C4FEA /* Build configuration list for PBXProject "Reflect" */; compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -742,13 +710,13 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 1CD90AF4278C7DE0001C4FEA /* Feels (iOS) */, - B1DB9E6543DE4A009DB00916 /* Feels Watch App */, - 1CD90B44278C7E7A001C4FEA /* FeelsWidgetExtension */, - 1CD90AFA278C7DE0001C4FEA /* Feels (macOS) */, + 1CD90AF4278C7DE0001C4FEA /* Reflect (iOS) */, + B1DB9E6543DE4A009DB00916 /* Reflect Watch App */, + 1CD90B44278C7E7A001C4FEA /* ReflectWidgetExtension */, + 1CD90AFA278C7DE0001C4FEA /* Reflect (macOS) */, 1CD90B01278C7DE0001C4FEA /* Tests iOS */, 1CD90B0D278C7DE0001C4FEA /* Tests macOS */, - B375A511826E3AB53E2CF51A /* FeelsTests */, + B375A511826E3AB53E2CF51A /* ReflectTests */, ); }; /* End PBXProject section */ @@ -765,7 +733,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1C0DAB51279DB0FB003B1F21 /* Localizable.xcstrings in Resources */, + 1C0DAB51279DB0FB003B1F21 /* Reflect/Localizable.xcstrings in Resources */, 1CDEFBBF2F3B8736006AE6A1 /* Configuration.storekit in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -796,7 +764,7 @@ buildActionMask = 2147483647; files = ( 1CDEFBC02F3B8736006AE6A1 /* Configuration.storekit in Resources */, - 1C0DAB52279DB0FB003B1F22 /* Localizable.xcstrings in Resources */, + 1C0DAB52279DB0FB003B1F22 /* Reflect/Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -931,23 +899,23 @@ /* Begin PBXTargetDependency section */ 1CD90B04278C7DE0001C4FEA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 1CD90AF4278C7DE0001C4FEA /* Feels (iOS) */; + target = 1CD90AF4278C7DE0001C4FEA /* Reflect (iOS) */; targetProxy = 1CD90B03278C7DE0001C4FEA /* PBXContainerItemProxy */; }; 1CD90B10278C7DE0001C4FEA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 1CD90AFA278C7DE0001C4FEA /* Feels (macOS) */; + target = 1CD90AFA278C7DE0001C4FEA /* Reflect (macOS) */; targetProxy = 1CD90B0F278C7DE0001C4FEA /* PBXContainerItemProxy */; }; 1CD90B55278C7E7A001C4FEA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 1CD90B44278C7E7A001C4FEA /* FeelsWidgetExtension */; + target = 1CD90B44278C7E7A001C4FEA /* ReflectWidgetExtension */; targetProxy = 1CD90B54278C7E7A001C4FEA /* PBXContainerItemProxy */; }; 946F2D1B29B91CD7DB732908 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Feels (iOS)"; - target = 1CD90AF4278C7DE0001C4FEA /* Feels (iOS) */; + name = "Reflect (iOS)"; + target = 1CD90AF4278C7DE0001C4FEA /* Reflect (iOS) */; targetProxy = A0B973C7674930232515563A /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -958,22 +926,22 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = "Feels Watch App/Feels Watch AppDebug.entitlements"; + CODE_SIGN_ENTITLEMENTS = "Reflect Watch App/Reflect Watch AppDebug.entitlements"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = QND55P4443; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_CFBundleDisplayName = Feels; + INFOPLIST_KEY_CFBundleDisplayName = Reflect; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.88oakapps.feels.debug; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.88oakapps.reflect.debug; INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.debug.watch; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.debug.watch; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; SKIP_INSTALL = YES; @@ -1113,20 +1081,20 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; - CODE_SIGN_ENTITLEMENTS = "Feels (iOS)Dev.entitlements"; + CODE_SIGN_ENTITLEMENTS = "Reflect (iOS)Dev.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = QND55P4443; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Feels--iOS--Info.plist"; + INFOPLIST_FILE = "Reflect--iOS--Info.plist"; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - INFOPLIST_KEY_NSCameraUsageDescription = "Feels uses the camera to take photos for your mood journal entries."; - INFOPLIST_KEY_NSFaceIDUsageDescription = "Feels uses Face ID to protect your private mood data."; - INFOPLIST_KEY_NSHealthShareUsageDescription = "Feels uses your health data to find correlations between your activity, sleep, and mood patterns to provide personalized insights."; - INFOPLIST_KEY_NSHealthUpdateUsageDescription = "Feels syncs your mood data to Apple Health so you can see how your emotions correlate with sleep, exercise, and other health metrics."; - INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Feels accesses your photo library to attach photos to your mood journal entries."; + INFOPLIST_KEY_NSCameraUsageDescription = "Reflect uses the camera to take photos for your mood journal entries."; + INFOPLIST_KEY_NSFaceIDUsageDescription = "Reflect uses Face ID to protect your private mood data."; + INFOPLIST_KEY_NSHealthShareUsageDescription = "Reflect uses your health data to find correlations between your activity, sleep, and mood patterns to provide personalized insights."; + INFOPLIST_KEY_NSHealthUpdateUsageDescription = "Reflect syncs your mood data to Apple Health so you can see how your emotions correlate with sleep, exercise, and other health metrics."; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Reflect accesses your photo library to attach photos to your mood journal entries."; INFOPLIST_KEY_NSSupportsLiveActivities = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -1139,8 +1107,8 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.debug; - PRODUCT_NAME = Feels; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.debug; + PRODUCT_NAME = Reflect; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SWIFT_EMIT_LOC_STRINGS = YES; @@ -1155,20 +1123,20 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; - CODE_SIGN_ENTITLEMENTS = "Feels (iOS).entitlements"; + CODE_SIGN_ENTITLEMENTS = "Reflect (iOS).entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = QND55P4443; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Feels--iOS--Info.plist"; + INFOPLIST_FILE = "Reflect--iOS--Info.plist"; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - INFOPLIST_KEY_NSCameraUsageDescription = "Feels uses the camera to take photos for your mood journal entries."; - INFOPLIST_KEY_NSFaceIDUsageDescription = "Feels uses Face ID to protect your private mood data."; - INFOPLIST_KEY_NSHealthShareUsageDescription = "Feels uses your health data to find correlations between your activity, sleep, and mood patterns to provide personalized insights."; - INFOPLIST_KEY_NSHealthUpdateUsageDescription = "Feels syncs your mood data to Apple Health so you can see how your emotions correlate with sleep, exercise, and other health metrics."; - INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Feels accesses your photo library to attach photos to your mood journal entries."; + INFOPLIST_KEY_NSCameraUsageDescription = "Reflect uses the camera to take photos for your mood journal entries."; + INFOPLIST_KEY_NSFaceIDUsageDescription = "Reflect uses Face ID to protect your private mood data."; + INFOPLIST_KEY_NSHealthShareUsageDescription = "Reflect uses your health data to find correlations between your activity, sleep, and mood patterns to provide personalized insights."; + INFOPLIST_KEY_NSHealthUpdateUsageDescription = "Reflect syncs your mood data to Apple Health so you can see how your emotions correlate with sleep, exercise, and other health metrics."; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Reflect accesses your photo library to attach photos to your mood journal entries."; INFOPLIST_KEY_NSSupportsLiveActivities = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -1181,8 +1149,8 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels; - PRODUCT_NAME = Feels; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect; + PRODUCT_NAME = Reflect; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SWIFT_EMIT_LOC_STRINGS = YES; @@ -1215,8 +1183,8 @@ ); MACOSX_DEPLOYMENT_TARGET = 12.1; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels; - PRODUCT_NAME = Feels; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect; + PRODUCT_NAME = Reflect; SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -1246,8 +1214,8 @@ ); MACOSX_DEPLOYMENT_TARGET = 12.1; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.debug; - PRODUCT_NAME = Feels; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.debug; + PRODUCT_NAME = Reflect; SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -1268,7 +1236,7 @@ SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = "Feels (iOS)"; + TEST_TARGET_NAME = "Reflect (iOS)"; }; name = Debug; }; @@ -1286,7 +1254,7 @@ SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = "Feels (iOS)"; + TEST_TARGET_NAME = "Reflect (iOS)"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -1305,7 +1273,7 @@ SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; - TEST_TARGET_NAME = "Feels (macOS)"; + TEST_TARGET_NAME = "Reflect (macOS)"; }; name = Debug; }; @@ -1323,7 +1291,7 @@ SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; - TEST_TARGET_NAME = "Feels (macOS)"; + TEST_TARGET_NAME = "Reflect (macOS)"; }; name = Release; }; @@ -1332,14 +1300,14 @@ buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; - CODE_SIGN_ENTITLEMENTS = FeelsWidgetExtensionDev.entitlements; + CODE_SIGN_ENTITLEMENTS = ReflectWidgetExtensionDev.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = QND55P4443; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "FeelsWidgetExtension-Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = FeelsWidget; + INFOPLIST_FILE = "ReflectWidgetExtension-Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = ReflectWidget; INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSSupportsLiveActivities = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.6; @@ -1349,7 +1317,7 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.debug.widget; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.debug.widget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; @@ -1366,14 +1334,14 @@ buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; - CODE_SIGN_ENTITLEMENTS = FeelsWidgetExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = ReflectWidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = QND55P4443; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "FeelsWidgetExtension-Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = FeelsWidget; + INFOPLIST_FILE = "ReflectWidgetExtension-Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = ReflectWidget; INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSSupportsLiveActivities = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.6; @@ -1383,7 +1351,7 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.widget; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.widget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; @@ -1404,13 +1372,13 @@ DEVELOPMENT_TEAM = QND55P4443; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.0; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.tests; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.tests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Feels.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Feels"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Reflect.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Reflect"; }; name = Debug; }; @@ -1419,22 +1387,22 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = "Feels Watch App/Feels Watch App.entitlements"; + CODE_SIGN_ENTITLEMENTS = "Reflect Watch App/Reflect Watch App.entitlements"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = QND55P4443; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_CFBundleDisplayName = Feels; + INFOPLIST_KEY_CFBundleDisplayName = Reflect; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.88oakapps.feels; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.88oakapps.reflect; INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.watch; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.watch; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; SKIP_INSTALL = YES; @@ -1454,13 +1422,13 @@ DEVELOPMENT_TEAM = QND55P4443; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.0; - PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.feels.tests; + PRODUCT_BUNDLE_IDENTIFIER = com.88oakapps.reflect.tests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Feels.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Feels"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Reflect.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Reflect"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -1468,7 +1436,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1B7D3790BF564C5392D480B2 /* Build configuration list for PBXNativeTarget "Feels Watch App" */ = { + 1B7D3790BF564C5392D480B2 /* Build configuration list for PBXNativeTarget "Reflect Watch App" */ = { isa = XCConfigurationList; buildConfigurations = ( 1AA0E790DCE44476924A23BB /* Debug */, @@ -1477,7 +1445,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1CD90AE9278C7DDF001C4FEA /* Build configuration list for PBXProject "Feels" */ = { + 1CD90AE9278C7DDF001C4FEA /* Build configuration list for PBXProject "Reflect" */ = { isa = XCConfigurationList; buildConfigurations = ( 1CD90B20278C7DE0001C4FEA /* Debug */, @@ -1486,7 +1454,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1CD90B22278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Feels (iOS)" */ = { + 1CD90B22278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Reflect (iOS)" */ = { isa = XCConfigurationList; buildConfigurations = ( 1CD90B23278C7DE0001C4FEA /* Debug */, @@ -1495,7 +1463,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1CD90B25278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Feels (macOS)" */ = { + 1CD90B25278C7DE0001C4FEA /* Build configuration list for PBXNativeTarget "Reflect (macOS)" */ = { isa = XCConfigurationList; buildConfigurations = ( 1CD90B26278C7DE0001C4FEA /* Debug */, @@ -1522,7 +1490,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1CD90B57278C7E7A001C4FEA /* Build configuration list for PBXNativeTarget "FeelsWidgetExtension" */ = { + 1CD90B57278C7E7A001C4FEA /* Build configuration list for PBXNativeTarget "ReflectWidgetExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( 1CD90B58278C7E7A001C4FEA /* Debug */, @@ -1531,7 +1499,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 611E0B1E1241C11626465A8D /* Build configuration list for PBXNativeTarget "FeelsTests" */ = { + 611E0B1E1241C11626465A8D /* Build configuration list for PBXNativeTarget "ReflectTests" */ = { isa = XCConfigurationList; buildConfigurations = ( C9B28244C1A36D4F2FE7E61A /* Release */, diff --git a/Feels.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Reflect.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Feels.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Reflect.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Feels.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Reflect.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Feels.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Reflect.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Feels.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Reflect.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from Feels.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to Reflect.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/Feels.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Reflect.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved similarity index 100% rename from Feels.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to Reflect.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/Feels.xcodeproj/xcshareddata/xcschemes/Feels (iOS).xcscheme b/Reflect.xcodeproj/xcshareddata/xcschemes/Reflect (iOS).xcscheme similarity index 81% rename from Feels.xcodeproj/xcshareddata/xcschemes/Feels (iOS).xcscheme rename to Reflect.xcodeproj/xcshareddata/xcschemes/Reflect (iOS).xcscheme index a172623..d2cad85 100644 --- a/Feels.xcodeproj/xcshareddata/xcschemes/Feels (iOS).xcscheme +++ b/Reflect.xcodeproj/xcshareddata/xcschemes/Reflect (iOS).xcscheme @@ -15,9 +15,9 @@ + BuildableName = "Reflect.app" + BlueprintName = "Reflect (iOS)" + ReferencedContainer = "container:Reflect.xcodeproj"> @@ -33,9 +33,9 @@ + BuildableName = "ReflectTests.xctest" + BlueprintName = "ReflectTests" + ReferencedContainer = "container:Reflect.xcodeproj"> + ReferencedContainer = "container:Reflect.xcodeproj"> @@ -65,9 +65,9 @@ + BuildableName = "Reflect.app" + BlueprintName = "Reflect (iOS)" + ReferencedContainer = "container:Reflect.xcodeproj"> + BuildableName = "Reflect.app" + BlueprintName = "Reflect (iOS)" + ReferencedContainer = "container:Reflect.xcodeproj"> diff --git a/Feels.xcodeproj/xcshareddata/xcschemes/FeelsWidgetExtension.xcscheme b/Reflect.xcodeproj/xcshareddata/xcschemes/ReflectWidgetExtension.xcscheme similarity index 81% rename from Feels.xcodeproj/xcshareddata/xcschemes/FeelsWidgetExtension.xcscheme rename to Reflect.xcodeproj/xcshareddata/xcschemes/ReflectWidgetExtension.xcscheme index b4c824c..c4f82a9 100644 --- a/Feels.xcodeproj/xcshareddata/xcschemes/FeelsWidgetExtension.xcscheme +++ b/Reflect.xcodeproj/xcshareddata/xcschemes/ReflectWidgetExtension.xcscheme @@ -16,9 +16,9 @@ + BuildableName = "ReflectWidgetExtension.appex" + BlueprintName = "ReflectWidgetExtension" + ReferencedContainer = "container:Reflect.xcodeproj"> + BuildableName = "Reflect.app" + BlueprintName = "Reflect (iOS)" + ReferencedContainer = "container:Reflect.xcodeproj"> @@ -63,24 +63,24 @@ + BuildableName = "ReflectWidgetExtension.appex" + BlueprintName = "ReflectWidgetExtension" + ReferencedContainer = "container:Reflect.xcodeproj"> + BuildableName = "Reflect.app" + BlueprintName = "Reflect (iOS)" + ReferencedContainer = "container:Reflect.xcodeproj"> + BuildableName = "Reflect.app" + BlueprintName = "Reflect (iOS)" + ReferencedContainer = "container:Reflect.xcodeproj"> diff --git a/Feels/Localizable.xcstrings b/Reflect/Localizable.xcstrings similarity index 98% rename from Feels/Localizable.xcstrings rename to Reflect/Localizable.xcstrings index 048a1e6..09e8ead 100644 --- a/Feels/Localizable.xcstrings +++ b/Reflect/Localizable.xcstrings @@ -8169,170 +8169,170 @@ } } }, - "Feels": { + "Reflect": { "comment": "The name of the widget.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Feels" + "value": "Reflect" } }, "es": { "stringUnit": { "state": "translated", - "value": "Feels" + "value": "Reflect" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Feels" + "value": "Reflect" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feels" + "value": "Reflect" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels" + "value": "Reflect" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Feels" + "value": "Reflect" } } } }, - "FEELS": { + "REFLECT": { "comment": "The name of the app.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "FEELS" + "value": "REFLECT" } }, "es": { "stringUnit": { "state": "translated", - "value": "FEELS" + "value": "REFLECT" } }, "fr": { "stringUnit": { "state": "translated", - "value": "FEELS" + "value": "REFLECT" } }, "ja": { "stringUnit": { "state": "translated", - "value": "FEELS" + "value": "REFLECT" } }, "ko": { "stringUnit": { "state": "translated", - "value": "FEELS" + "value": "REFLECT" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "FEELS" + "value": "REFLECT" } } } }, - "Feels Icon": { + "Reflect Icon": { "comment": "Name of the widget configuration.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Feels-Symbol" + "value": "Reflect-Symbol" } }, "es": { "stringUnit": { "state": "translated", - "value": "Icono de Feels" + "value": "Icono de Reflect" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Icône Feels" + "value": "Icône Reflect" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feelsアイコン" + "value": "Reflectアイコン" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels 아이콘" + "value": "Reflect 아이콘" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ícone do Feels" + "value": "Ícone do Reflect" } } } }, - "FEELS MIXTAPE": { + "REFLECT MIXTAPE": { "comment": "The name of the premium subscription experience.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "FEELS MIXTAPE" + "value": "REFLECT MIXTAPE" } }, "es": { "stringUnit": { "state": "translated", - "value": "FEELS MIXTAPE" + "value": "REFLECT MIXTAPE" } }, "fr": { "stringUnit": { "state": "translated", - "value": "FEELS MIXTAPE" + "value": "REFLECT MIXTAPE" } }, "ja": { "stringUnit": { "state": "translated", - "value": "FEELS MIXTAPE" + "value": "REFLECT MIXTAPE" } }, "ko": { "stringUnit": { "state": "translated", - "value": "FEELS MIXTAPE" + "value": "REFLECT MIXTAPE" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "FEELS MIXTAPE" + "value": "REFLECT MIXTAPE" } } } @@ -8921,44 +8921,44 @@ } } }, - "Help improve Feels by sharing anonymous usage data": { + "Help improve Reflect by sharing anonymous usage data": { "comment": "A description of the analytics toggle.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Hilf Feels zu verbessern, indem du anonyme Nutzungsdaten teilst" + "value": "Hilf Reflect zu verbessern, indem du anonyme Nutzungsdaten teilst" } }, "es": { "stringUnit": { "state": "translated", - "value": "Ayuda a mejorar Feels compartiendo datos de uso anónimos" + "value": "Ayuda a mejorar Reflect compartiendo datos de uso anónimos" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Aidez à améliorer Feels en partageant des données d'utilisation anonymes" + "value": "Aidez à améliorer Reflect en partageant des données d'utilisation anonymes" } }, "ja": { "stringUnit": { "state": "translated", - "value": "匿名の使用データを共有してFeelsの改善に協力" + "value": "匿名の使用データを共有してReflectの改善に協力" } }, "ko": { "stringUnit": { "state": "translated", - "value": "익명 사용 데이터를 공유하여 Feels 개선에 도움을 주세요" + "value": "익명 사용 데이터를 공유하여 Reflect 개선에 도움을 주세요" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Ajude a melhorar o Feels compartilhando dados de uso anônimos" + "value": "Ajude a melhorar o Reflect compartilhando dados de uso anônimos" } } } @@ -9891,7 +9891,7 @@ } }, "Log Mood": { - "comment": "A button that opens Feels to log a mood.", + "comment": "A button that opens Reflect to log a mood.", "isCommentAutoGenerated": true, "localizations": { "de": { @@ -12212,128 +12212,128 @@ } } }, - "Open Feels": { - "comment": "Title of the app intent to open the Feels app.", + "Open Reflect": { + "comment": "Title of the app intent to open the Reflect app.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Feels öffnen" + "value": "Reflect öffnen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abrir Feels" + "value": "Abrir Reflect" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvrir Feels" + "value": "Ouvrir Reflect" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feelsを開く" + "value": "Reflectを開く" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels 열기" + "value": "Reflect 열기" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abrir Feels" + "value": "Abrir Reflect" } } } }, - "Open Feels to log your mood": { + "Open Reflect to log your mood": { "comment": "Description of the \"Log Mood\" control widget.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Öffne Feels, um deine Stimmung zu erfassen" + "value": "Öffne Reflect, um deine Stimmung zu erfassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abre Feels para registrar tu estado de ánimo" + "value": "Abre Reflect para registrar tu estado de ánimo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvre Feels pour enregistrer ton humeur" + "value": "Ouvre Reflect pour enregistrer ton humeur" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feelsを開いて気分を記録しよう" + "value": "Reflectを開いて気分を記録しよう" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels를 열어 기분을 기록하세요" + "value": "Reflect를 열어 기분을 기록하세요" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra o Feels para registrar seu humor" + "value": "Abra o Reflect para registrar seu humor" } } } }, - "Open the Feels app to log your mood": { - "comment": "A user-visible description of the intent to open the Feels app to log your mood.", + "Open the Reflect app to log your mood": { + "comment": "A user-visible description of the intent to open the Reflect app to log your mood.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Öffne die Feels-App, um deine Stimmung zu erfassen" + "value": "Öffne die Reflect-App, um deine Stimmung zu erfassen" } }, "es": { "stringUnit": { "state": "translated", - "value": "Abre la app Feels para registrar tu estado de ánimo" + "value": "Abre la app Reflect para registrar tu estado de ánimo" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Ouvre l'app Feels pour enregistrer ton humeur" + "value": "Ouvre l'app Reflect pour enregistrer ton humeur" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feelsアプリを開いて気分を記録しよう" + "value": "Reflectアプリを開いて気分を記録しよう" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels 앱을 열어 기분을 기록하세요" + "value": "Reflect 앱을 열어 기분을 기록하세요" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Abra o app Feels para registrar seu humor" + "value": "Abra o app Reflect para registrar seu humor" } } } @@ -13520,43 +13520,43 @@ "de": { "stringUnit": { "state": "translated", - "value": "Ein iFeels-Abo gibt dir Zugang zu all deinen historischen Daten und den Monats- und Jahresdiagrammen." + "value": "Ein iReflect-Abo gibt dir Zugang zu all deinen historischen Daten und den Monats- und Jahresdiagrammen." } }, "en": { "stringUnit": { "state": "translated", - "value": "An iFeels subscription gives you access to all of your historical data, and both Month and Year charts." + "value": "An iReflect subscription gives you access to all of your historical data, and both Month and Year charts." } }, "es": { "stringUnit": { "state": "translated", - "value": "Una suscripción a iFeels te da acceso a todos tus datos históricos, y a los gráficos de Mes y Año." + "value": "Una suscripción a iReflect te da acceso a todos tus datos históricos, y a los gráficos de Mes y Año." } }, "fr": { "stringUnit": { "state": "translated", - "value": "Un abonnement iFeels vous donne accès à toutes vos données historiques, ainsi qu'aux graphiques Mois et Année." + "value": "Un abonnement iReflect vous donne accès à toutes vos données historiques, ainsi qu'aux graphiques Mois et Année." } }, "ja": { "stringUnit": { "state": "translated", - "value": "iFeelsサブスクリプションで、すべての過去データと月・年チャートにアクセスできます。" + "value": "iReflectサブスクリプションで、すべての過去データと月・年チャートにアクセスできます。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "iFeels 구독으로 모든 과거 데이터와 월별, 연도별 차트에 액세스할 수 있습니다." + "value": "iReflect 구독으로 모든 과거 데이터와 월별, 연도별 차트에 액세스할 수 있습니다." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Uma assinatura iFeels dá acesso a todos os seus dados históricos e aos gráficos de Mês e Ano." + "value": "Uma assinatura iReflect dá acesso a todos os seus dados históricos e aos gráficos de Mês e Ano." } } } @@ -13974,44 +13974,44 @@ } } }, - "Record your mood for today in Feels": { + "Record your mood for today in Reflect": { "comment": "Title of the \"Log Mood\" app intent.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Erfasse deine Stimmung für heute in Feels" + "value": "Erfasse deine Stimmung für heute in Reflect" } }, "es": { "stringUnit": { "state": "translated", - "value": "Registra tu estado de ánimo de hoy en Feels" + "value": "Registra tu estado de ánimo de hoy en Reflect" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Enregistre ton humeur du jour dans Feels" + "value": "Enregistre ton humeur du jour dans Reflect" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feelsで今日の気分を記録" + "value": "Reflectで今日の気分を記録" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels에서 오늘의 기분을 기록하세요" + "value": "Reflect에서 오늘의 기분을 기록하세요" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Registre seu humor de hoje no Feels" + "value": "Registre seu humor de hoje no Reflect" } } } @@ -15247,44 +15247,44 @@ } } }, - "See what mood you logged today in Feels": { + "See what mood you logged today in Reflect": { "comment": "Title of an intent that allows the user to check their logged mood for the current day.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Sieh dir an, welche Stimmung du heute in Feels erfasst hast" + "value": "Sieh dir an, welche Stimmung du heute in Reflect erfasst hast" } }, "es": { "stringUnit": { "state": "translated", - "value": "Mira qué estado de ánimo registraste hoy en Feels" + "value": "Mira qué estado de ánimo registraste hoy en Reflect" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Vois quelle humeur tu as enregistrée aujourd'hui dans Feels" + "value": "Vois quelle humeur tu as enregistrée aujourd'hui dans Reflect" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feelsで今日記録した気分を確認" + "value": "Reflectで今日記録した気分を確認" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels에서 오늘 기록한 기분 확인" + "value": "Reflect에서 오늘 기록한 기분 확인" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Veja qual humor você registrou hoje no Feels" + "value": "Veja qual humor você registrou hoje no Reflect" } } } @@ -15909,43 +15909,43 @@ "de": { "stringUnit": { "state": "translated", - "value": "Die Hintergrundaktualisierung ermöglicht es iFeels, dir rechtzeitig Benachrichtigungen zu senden, auch wenn die App nicht geöffnet ist. So verpasst du nie deinen täglichen Stimmungs-Check-in." + "value": "Die Hintergrundaktualisierung ermöglicht es iReflect, dir rechtzeitig Benachrichtigungen zu senden, auch wenn die App nicht geöffnet ist. So verpasst du nie deinen täglichen Stimmungs-Check-in." } }, "en": { "stringUnit": { "state": "translated", - "value": "Background App Refresh allows iFeels to send you timely notifications even when the app isn't open. This ensures you never miss your daily mood check-in." + "value": "Background App Refresh allows iReflect to send you timely notifications even when the app isn't open. This ensures you never miss your daily mood check-in." } }, "es": { "stringUnit": { "state": "translated", - "value": "La actualización en segundo plano permite que iFeels te envíe notificaciones oportunas incluso cuando la app no está abierta. Esto asegura que nunca te pierdas tu registro diario de estado de ánimo." + "value": "La actualización en segundo plano permite que iReflect te envíe notificaciones oportunas incluso cuando la app no está abierta. Esto asegura que nunca te pierdas tu registro diario de estado de ánimo." } }, "fr": { "stringUnit": { "state": "translated", - "value": "L'actualisation en arrière-plan permet à iFeels de t'envoyer des notifications à temps même lorsque l'app n'est pas ouverte. Cela garantit que tu ne manques jamais ton enregistrement quotidien d'humeur." + "value": "L'actualisation en arrière-plan permet à iReflect de t'envoyer des notifications à temps même lorsque l'app n'est pas ouverte. Cela garantit que tu ne manques jamais ton enregistrement quotidien d'humeur." } }, "ja": { "stringUnit": { "state": "translated", - "value": "バックグラウンド更新により、アプリを開いていなくてもiFeelsからタイムリーな通知を受け取れます。毎日の気分チェックインを見逃すことがありません。" + "value": "バックグラウンド更新により、アプリを開いていなくてもiReflectからタイムリーな通知を受け取れます。毎日の気分チェックインを見逃すことがありません。" } }, "ko": { "stringUnit": { "state": "translated", - "value": "백그라운드 앱 새로고침을 사용하면 앱이 열려 있지 않아도 iFeels에서 적시에 알림을 보낼 수 있습니다. 이를 통해 매일 기분 체크인을 놓치지 않습니다." + "value": "백그라운드 앱 새로고침을 사용하면 앱이 열려 있지 않아도 iReflect에서 적시에 알림을 보낼 수 있습니다. 이를 통해 매일 기분 체크인을 놓치지 않습니다." } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "A atualização em segundo plano permite que o iFeels envie notificações no momento certo, mesmo quando o app não está aberto. Isso garante que você nunca perca seu registro diário de humor." + "value": "A atualização em segundo plano permite que o iReflect envie notificações no momento certo, mesmo quando o app não está aberto. Isso garante que você nunca perca seu registro diário de humor." } } } @@ -19425,44 +19425,44 @@ } } }, - "Welcome to Feels": { + "Welcome to Reflect": { "comment": "The title of the welcome screen in the onboarding flow.", "isCommentAutoGenerated": true, "localizations": { "de": { "stringUnit": { "state": "translated", - "value": "Willkommen bei Feels" + "value": "Willkommen bei Reflect" } }, "es": { "stringUnit": { "state": "translated", - "value": "Bienvenido a Feels" + "value": "Bienvenido a Reflect" } }, "fr": { "stringUnit": { "state": "translated", - "value": "Bienvenue dans Feels" + "value": "Bienvenue dans Reflect" } }, "ja": { "stringUnit": { "state": "translated", - "value": "Feelsへようこそ" + "value": "Reflectへようこそ" } }, "ko": { "stringUnit": { "state": "translated", - "value": "Feels에 오신 것을 환영합니다" + "value": "Reflect에 오신 것을 환영합니다" } }, "pt-BR": { "stringUnit": { "state": "translated", - "value": "Bem-vindo ao Feels" + "value": "Bem-vindo ao Reflect" } } } diff --git a/FeelsTests/DataControllerCRUDTests.swift b/ReflectTests/DataControllerCRUDTests.swift similarity index 99% rename from FeelsTests/DataControllerCRUDTests.swift rename to ReflectTests/DataControllerCRUDTests.swift index 25c0549..d5b1136 100644 --- a/FeelsTests/DataControllerCRUDTests.swift +++ b/ReflectTests/DataControllerCRUDTests.swift @@ -1,13 +1,13 @@ // // DataControllerCRUDTests.swift -// FeelsTests +// ReflectTests // // Tests for DataController create, read, update, and delete operations. // import XCTest import SwiftData -@testable import Feels +@testable import Reflect @MainActor final class DataControllerCreateTests: XCTestCase { diff --git a/FeelsTests/DayViewViewModelTests.swift b/ReflectTests/DayViewViewModelTests.swift similarity index 97% rename from FeelsTests/DayViewViewModelTests.swift rename to ReflectTests/DayViewViewModelTests.swift index 5e8de99..2101829 100644 --- a/FeelsTests/DayViewViewModelTests.swift +++ b/ReflectTests/DayViewViewModelTests.swift @@ -1,6 +1,6 @@ // // DayViewViewModelTests.swift -// FeelsTests +// ReflectTests // // Unit tests for DayViewViewModel.countEntries — verifies safe counting // across various grouped dictionary shapes (TDD for force-unwrap fix). @@ -8,7 +8,7 @@ import XCTest import SwiftData -@testable import Feels +@testable import Reflect @MainActor final class DayViewViewModelTests: XCTestCase { diff --git a/FeelsTests/IntegrationTests.swift b/ReflectTests/IntegrationTests.swift similarity index 99% rename from FeelsTests/IntegrationTests.swift rename to ReflectTests/IntegrationTests.swift index 07e284f..70ceded 100644 --- a/FeelsTests/IntegrationTests.swift +++ b/ReflectTests/IntegrationTests.swift @@ -1,13 +1,13 @@ // // IntegrationTests.swift -// FeelsTests +// ReflectTests // // Integration tests verifying full lifecycle pipelines. // import XCTest import SwiftData -@testable import Feels +@testable import Reflect @MainActor final class IntegrationTests: XCTestCase { diff --git a/FeelsTests/StreakTests.swift b/ReflectTests/StreakTests.swift similarity index 99% rename from FeelsTests/StreakTests.swift rename to ReflectTests/StreakTests.swift index dbeccda..aa76390 100644 --- a/FeelsTests/StreakTests.swift +++ b/ReflectTests/StreakTests.swift @@ -1,13 +1,13 @@ // // StreakTests.swift -// FeelsTests +// ReflectTests // // Tests for DataController streak calculation. // import XCTest import SwiftData -@testable import Feels +@testable import Reflect @MainActor final class StreakTests: XCTestCase { diff --git a/FeelsTests/VoteLogicsTests.swift b/ReflectTests/VoteLogicsTests.swift similarity index 99% rename from FeelsTests/VoteLogicsTests.swift rename to ReflectTests/VoteLogicsTests.swift index fcf2775..974da33 100644 --- a/FeelsTests/VoteLogicsTests.swift +++ b/ReflectTests/VoteLogicsTests.swift @@ -1,13 +1,13 @@ // // VoteLogicsTests.swift -// FeelsTests +// ReflectTests // // Tests for ShowBasedOnVoteLogics vote status and timing. // import XCTest import SwiftData -@testable import Feels +@testable import Reflect @MainActor final class VoteLogicsTests: XCTestCase { diff --git a/FeelsWatch WatchKit Extension/DebugInfo.plist b/ReflectWatch WatchKit Extension/DebugInfo.plist similarity index 87% rename from FeelsWatch WatchKit Extension/DebugInfo.plist rename to ReflectWatch WatchKit Extension/DebugInfo.plist index 602d4b4..f5bd62b 100644 --- a/FeelsWatch WatchKit Extension/DebugInfo.plist +++ b/ReflectWatch WatchKit Extension/DebugInfo.plist @@ -7,7 +7,7 @@ NSExtensionAttributes WKAppBundleIdentifier - com.88oak.FeelsDebug.watchkitapp + com.88oak.ReflectDebug.watchkitapp NSExtensionPointIdentifier com.apple.watchkit diff --git a/FeelsWidget2/Assets.xcassets/AccentColor.colorset/Contents.json b/ReflectWidget/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/AccentColor.colorset/Contents.json rename to ReflectWidget/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/AppIcon.appiconset/Contents.json b/ReflectWidget/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 87% rename from FeelsWidget2/Assets.xcassets/AppIcon.appiconset/Contents.json rename to ReflectWidget/Assets.xcassets/AppIcon.appiconset/Contents.json index 075f343..3e9501f 100644 --- a/FeelsWidget2/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ReflectWidget/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "FeelsAppIcon.png", + "filename" : "ReflectAppIcon.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" @@ -13,7 +13,7 @@ "value" : "dark" } ], - "filename" : "FeelsAppIcon 1.png", + "filename" : "ReflectAppIcon 1.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" diff --git a/FeelsWidget2/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon 1.png b/ReflectWidget/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon 1.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon 1.png rename to ReflectWidget/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon 1.png diff --git a/FeelsWidget2/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon.png b/ReflectWidget/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon.png rename to ReflectWidget/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon.png diff --git a/FeelsWidget2/Assets.xcassets/Contents.json b/ReflectWidget/Assets.xcassets/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/Contents.json rename to ReflectWidget/Assets.xcassets/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/WidgetBackground.colorset/Contents.json b/ReflectWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/WidgetBackground.colorset/Contents.json rename to ReflectWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/android-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/android-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/android-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/android-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/android-brands.imageset/android-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/android-brands.imageset/android-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/android-brands.imageset/android-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/android-brands.imageset/android-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/apple-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/apple-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/apple-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/apple-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/apple-brands.imageset/apple-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/apple-brands.imageset/apple-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/apple-brands.imageset/apple-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/apple-brands.imageset/apple-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/arrow-up-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/arrow-up-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/arrow-up-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/arrow-up-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/arrow-up-solid.imageset/arrow-up-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/arrow-up-solid.imageset/arrow-up-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/arrow-up-solid.imageset/arrow-up-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/arrow-up-solid.imageset/arrow-up-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/baby-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/baby-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/baby-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/baby-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/baby-solid.imageset/baby-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/baby-solid.imageset/baby-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/baby-solid.imageset/baby-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/baby-solid.imageset/baby-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/ban-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/ban-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/ban-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/ban-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/ban-solid.imageset/ban-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/ban-solid.imageset/ban-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/ban-solid.imageset/ban-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/ban-solid.imageset/ban-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/baseball-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/baseball-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/baseball-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/baseball-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/baseball-solid.imageset/baseball-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/baseball-solid.imageset/baseball-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/baseball-solid.imageset/baseball-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/baseball-solid.imageset/baseball-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-empty-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/battery-empty-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-empty-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/battery-empty-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-empty-solid.imageset/battery-empty-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/battery-empty-solid.imageset/battery-empty-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-empty-solid.imageset/battery-empty-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/battery-empty-solid.imageset/battery-empty-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-full-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/battery-full-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-full-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/battery-full-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-full-solid.imageset/battery-full-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/battery-full-solid.imageset/battery-full-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-full-solid.imageset/battery-full-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/battery-full-solid.imageset/battery-full-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-half-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/battery-half-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-half-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/battery-half-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-half-solid.imageset/battery-half-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/battery-half-solid.imageset/battery-half-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-half-solid.imageset/battery-half-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/battery-half-solid.imageset/battery-half-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/battery-quarter-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/battery-quarter-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/battery-quarter-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/battery-quarter-solid.imageset/battery-quarter-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/battery-three-quarters-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/battery-three-quarters-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/battery-three-quarters-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/battery-three-quarters-solid.imageset/battery-three-quarters-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bitcoin-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/bitcoin-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bitcoin-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/bitcoin-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bitcoin-brands.imageset/bitcoin-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/bitcoin-brands.imageset/bitcoin-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bitcoin-brands.imageset/bitcoin-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/bitcoin-brands.imageset/bitcoin-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/bolt-lightning-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/bolt-lightning-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/bolt-lightning-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/bolt-lightning-solid.imageset/bolt-lightning-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bolt-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/bolt-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bolt-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/bolt-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bolt-solid.imageset/bolt-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/bolt-solid.imageset/bolt-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bolt-solid.imageset/bolt-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/bolt-solid.imageset/bolt-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bomb-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/bomb-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bomb-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/bomb-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bomb-solid.imageset/bomb-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/bomb-solid.imageset/bomb-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bomb-solid.imageset/bomb-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/bomb-solid.imageset/bomb-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/btc-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/btc-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/btc-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/btc-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/btc-brands.imageset/btc-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/btc-brands.imageset/btc-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/btc-brands.imageset/btc-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/btc-brands.imageset/btc-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bullhorn-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/bullhorn-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bullhorn-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/bullhorn-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bullhorn-solid.imageset/bullhorn-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/bullhorn-solid.imageset/bullhorn-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bullhorn-solid.imageset/bullhorn-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/bullhorn-solid.imageset/bullhorn-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bullseye-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/bullseye-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bullseye-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/bullseye-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/bullseye-solid.imageset/bullseye-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/bullseye-solid.imageset/bullseye-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/bullseye-solid.imageset/bullseye-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/bullseye-solid.imageset/bullseye-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/burger-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/burger-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/burger-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/burger-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/burger-solid.imageset/burger-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/burger-solid.imageset/burger-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/burger-solid.imageset/burger-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/burger-solid.imageset/burger-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/cannabis-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/cannabis-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/cannabis-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/cannabis-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/cannabis-solid.imageset/cannabis-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/cannabis-solid.imageset/cannabis-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/cannabis-solid.imageset/cannabis-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/cannabis-solid.imageset/cannabis-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-down-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/caret-down-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-down-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/caret-down-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-down-solid.imageset/caret-down-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/caret-down-solid.imageset/caret-down-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-down-solid.imageset/caret-down-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/caret-down-solid.imageset/caret-down-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-left-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/caret-left-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-left-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/caret-left-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-left-solid.imageset/caret-left-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/caret-left-solid.imageset/caret-left-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-left-solid.imageset/caret-left-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/caret-left-solid.imageset/caret-left-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-right-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/caret-right-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-right-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/caret-right-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-right-solid.imageset/caret-right-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/caret-right-solid.imageset/caret-right-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-right-solid.imageset/caret-right-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/caret-right-solid.imageset/caret-right-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-up-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/caret-up-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-up-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/caret-up-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/caret-up-solid.imageset/caret-up-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/caret-up-solid.imageset/caret-up-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/caret-up-solid.imageset/caret-up-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/caret-up-solid.imageset/caret-up-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/chess-king-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/chess-king-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/chess-king-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/chess-king-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/chess-king-solid.imageset/chess-king-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/chess-king-solid.imageset/chess-king-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/chess-king-solid.imageset/chess-king-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/chess-king-solid.imageset/chess-king-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/chess-queen-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/chess-queen-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/chess-queen-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/chess-queen-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/chess-queen-solid.imageset/chess-queen-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/chess-queen-solid.imageset/chess-queen-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/chess-queen-solid.imageset/chess-queen-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/chess-queen-solid.imageset/chess-queen-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/circle-xmark-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/circle-xmark-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/circle-xmark-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/circle-xmark-solid.imageset/circle-xmark-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/clock-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/clock-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/clock-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/clock-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/clock-solid.imageset/clock-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/clock-solid.imageset/clock-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/clock-solid.imageset/clock-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/clock-solid.imageset/clock-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/code-compare-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/code-compare-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/code-compare-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/code-compare-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/code-compare-solid.imageset/code-compare-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/code-compare-solid.imageset/code-compare-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/code-compare-solid.imageset/code-compare-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/code-compare-solid.imageset/code-compare-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/code-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/code-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/code-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/code-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/code-solid.imageset/code-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/code-solid.imageset/code-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/code-solid.imageset/code-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/code-solid.imageset/code-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/cross-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/cross-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/cross-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/cross-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/cross-solid.imageset/cross-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/cross-solid.imageset/cross-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/cross-solid.imageset/cross-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/cross-solid.imageset/cross-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/crosshairs-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/crosshairs-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/crosshairs-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/crosshairs-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/crosshairs-solid.imageset/crosshairs-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/crosshairs-solid.imageset/crosshairs-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/crosshairs-solid.imageset/crosshairs-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/crosshairs-solid.imageset/crosshairs-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/crown-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/crown-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/crown-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/crown-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/crown-solid.imageset/crown-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/crown-solid.imageset/crown-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/crown-solid.imageset/crown-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/crown-solid.imageset/crown-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/dharmachakra-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/dharmachakra-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/dharmachakra-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/dharmachakra-solid.imageset/dharmachakra-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dice-d20-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/dice-d20-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dice-d20-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/dice-d20-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dice-d20-solid.imageset/dice-d20-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/dice-d20-solid.imageset/dice-d20-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dice-d20-solid.imageset/dice-d20-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/dice-d20-solid.imageset/dice-d20-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dice-one-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/dice-one-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dice-one-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/dice-one-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dice-one-solid.imageset/dice-one-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/dice-one-solid.imageset/dice-one-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dice-one-solid.imageset/dice-one-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/dice-one-solid.imageset/dice-one-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/divide-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/divide-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/divide-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/divide-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/divide-solid.imageset/divide-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/divide-solid.imageset/divide-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/divide-solid.imageset/divide-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/divide-solid.imageset/divide-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/dollar-sign-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/dollar-sign-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/dollar-sign-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/dollar-sign-solid.imageset/dollar-sign-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dragon-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/dragon-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dragon-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/dragon-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/dragon-solid.imageset/dragon-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/dragon-solid.imageset/dragon-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/dragon-solid.imageset/dragon-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/dragon-solid.imageset/dragon-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/egg-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/egg-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/egg-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/egg-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/egg-solid.imageset/egg-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/egg-solid.imageset/egg-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/egg-solid.imageset/egg-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/egg-solid.imageset/egg-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/empire-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/empire-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/empire-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/empire-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/empire-brands.imageset/empire-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/empire-brands.imageset/empire-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/empire-brands.imageset/empire-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/empire-brands.imageset/empire-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/exclamation-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/exclamation-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/exclamation-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/exclamation-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/exclamation-solid.imageset/exclamation-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/exclamation-solid.imageset/exclamation-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/exclamation-solid.imageset/exclamation-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/exclamation-solid.imageset/exclamation-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/eye-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/eye-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/eye-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/eye-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/eye-solid.imageset/eye-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/eye-solid.imageset/eye-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/eye-solid.imageset/eye-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/eye-solid.imageset/eye-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fan-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/fan-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fan-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/fan-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fan-solid.imageset/fan-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/fan-solid.imageset/fan-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fan-solid.imageset/fan-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/fan-solid.imageset/fan-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fire-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/fire-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fire-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/fire-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fire-solid.imageset/fire-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/fire-solid.imageset/fire-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fire-solid.imageset/fire-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/fire-solid.imageset/fire-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/floppy-disk-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/floppy-disk-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/floppy-disk-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/floppy-disk-solid.imageset/floppy-disk-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fly-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/fly-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fly-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/fly-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fly-brands.imageset/fly-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/fly-brands.imageset/fly-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fly-brands.imageset/fly-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/fly-brands.imageset/fly-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/fort-awesome-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/fort-awesome-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/fort-awesome-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/fort-awesome-brands.imageset/fort-awesome-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/frown-regular.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/frown-regular.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/frown-regular.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/frown-regular.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/frown-regular.imageset/frown-regular.png b/ReflectWidget/Assets.xcassets/custom_icon/frown-regular.imageset/frown-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/frown-regular.imageset/frown-regular.png rename to ReflectWidget/Assets.xcassets/custom_icon/frown-regular.imageset/frown-regular.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/futbol-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/futbol-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/futbol-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/futbol-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/futbol-solid.imageset/futbol-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/futbol-solid.imageset/futbol-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/futbol-solid.imageset/futbol-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/futbol-solid.imageset/futbol-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/gem-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/gem-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/gem-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/gem-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/gem-solid.imageset/gem-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/gem-solid.imageset/gem-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/gem-solid.imageset/gem-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/gem-solid.imageset/gem-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/grin-regular.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/grin-regular.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/grin-regular.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/grin-regular.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/grin-regular.imageset/grin-regular.png b/ReflectWidget/Assets.xcassets/custom_icon/grin-regular.imageset/grin-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/grin-regular.imageset/grin-regular.png rename to ReflectWidget/Assets.xcassets/custom_icon/grin-regular.imageset/grin-regular.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/heart-crack-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/heart-crack-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/heart-crack-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/heart-crack-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/heart-crack-solid.imageset/heart-crack-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/heart-crack-solid.imageset/heart-crack-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/heart-crack-solid.imageset/heart-crack-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/heart-crack-solid.imageset/heart-crack-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/heart-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/heart-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/heart-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/heart-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/heart-solid.imageset/heart-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/heart-solid.imageset/heart-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/heart-solid.imageset/heart-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/heart-solid.imageset/heart-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/hotjar-brands.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/hotjar-brands.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/hotjar-brands.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/hotjar-brands.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/hotjar-brands.imageset/hotjar-brands.png b/ReflectWidget/Assets.xcassets/custom_icon/hotjar-brands.imageset/hotjar-brands.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/hotjar-brands.imageset/hotjar-brands.png rename to ReflectWidget/Assets.xcassets/custom_icon/hotjar-brands.imageset/hotjar-brands.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/jet-fighter-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/jet-fighter-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/jet-fighter-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/jet-fighter-solid.imageset/jet-fighter-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/lemon-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/lemon-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/lemon-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/lemon-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/lemon-solid.imageset/lemon-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/lemon-solid.imageset/lemon-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/lemon-solid.imageset/lemon-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/lemon-solid.imageset/lemon-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/life-ring-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/life-ring-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/life-ring-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/life-ring-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/life-ring-solid.imageset/life-ring-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/life-ring-solid.imageset/life-ring-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/life-ring-solid.imageset/life-ring-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/life-ring-solid.imageset/life-ring-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/lightbulb-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/lightbulb-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/lightbulb-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/lightbulb-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/lightbulb-solid.imageset/lightbulb-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/lightbulb-solid.imageset/lightbulb-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/lightbulb-solid.imageset/lightbulb-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/lightbulb-solid.imageset/lightbulb-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/location-crosshairs-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/location-crosshairs-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/location-crosshairs-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/location-crosshairs-solid.imageset/location-crosshairs-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/meh-regular.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/meh-regular.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/meh-regular.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/meh-regular.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/meh-regular.imageset/meh-regular.png b/ReflectWidget/Assets.xcassets/custom_icon/meh-regular.imageset/meh-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/meh-regular.imageset/meh-regular.png rename to ReflectWidget/Assets.xcassets/custom_icon/meh-regular.imageset/meh-regular.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/meteor-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/meteor-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/meteor-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/meteor-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/meteor-solid.imageset/meteor-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/meteor-solid.imageset/meteor-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/meteor-solid.imageset/meteor-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/meteor-solid.imageset/meteor-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/microphone-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/microphone-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/microphone-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/microphone-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/microphone-solid.imageset/microphone-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/microphone-solid.imageset/microphone-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/microphone-solid.imageset/microphone-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/microphone-solid.imageset/microphone-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/moon-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/moon-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/moon-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/moon-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/moon-solid.imageset/moon-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/moon-solid.imageset/moon-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/moon-solid.imageset/moon-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/moon-solid.imageset/moon-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/peace-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/peace-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/peace-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/peace-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/peace-solid.imageset/peace-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/peace-solid.imageset/peace-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/peace-solid.imageset/peace-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/peace-solid.imageset/peace-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/pizza-slice-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/pizza-slice-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/pizza-slice-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/pizza-slice-solid.imageset/pizza-slice-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/poo-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/poo-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/poo-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/poo-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/poo-solid.imageset/poo-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/poo-solid.imageset/poo-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/poo-solid.imageset/poo-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/poo-solid.imageset/poo-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/poo-storm-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/poo-storm-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/poo-storm-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/poo-storm-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/poo-storm-solid.imageset/poo-storm-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/poo-storm-solid.imageset/poo-storm-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/poo-storm-solid.imageset/poo-storm-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/poo-storm-solid.imageset/poo-storm-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/rainbow-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/rainbow-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/rainbow-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/rainbow-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/rainbow-solid.imageset/rainbow-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/rainbow-solid.imageset/rainbow-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/rainbow-solid.imageset/rainbow-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/rainbow-solid.imageset/rainbow-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/sad-tear-regular.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/sad-tear-regular.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/sad-tear-regular.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/sad-tear-regular.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/sad-tear-regular.imageset/sad-tear-regular.png b/ReflectWidget/Assets.xcassets/custom_icon/sad-tear-regular.imageset/sad-tear-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/sad-tear-regular.imageset/sad-tear-regular.png rename to ReflectWidget/Assets.xcassets/custom_icon/sad-tear-regular.imageset/sad-tear-regular.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/shuttle-space-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/shuttle-space-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/shuttle-space-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/shuttle-space-solid.imageset/shuttle-space-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/skull-crossbones-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/skull-crossbones-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/skull-crossbones-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/skull-crossbones-solid.imageset/skull-crossbones-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/skull-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/skull-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/skull-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/skull-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/skull-solid.imageset/skull-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/skull-solid.imageset/skull-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/skull-solid.imageset/skull-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/skull-solid.imageset/skull-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/smile-beam-regular.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/smile-beam-regular.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/smile-beam-regular.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/smile-beam-regular.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/smile-beam-regular.imageset/smile-beam-regular.png b/ReflectWidget/Assets.xcassets/custom_icon/smile-beam-regular.imageset/smile-beam-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/smile-beam-regular.imageset/smile-beam-regular.png rename to ReflectWidget/Assets.xcassets/custom_icon/smile-beam-regular.imageset/smile-beam-regular.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/star-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/star-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/star-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/star-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/star-solid.imageset/star-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/star-solid.imageset/star-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/star-solid.imageset/star-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/star-solid.imageset/star-solid.png diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/virus-covid-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/custom_icon/virus-covid-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/virus-covid-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/custom_icon/virus-covid-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/custom_icon/virus-covid-solid.imageset/virus-covid-solid.png b/ReflectWidget/Assets.xcassets/custom_icon/virus-covid-solid.imageset/virus-covid-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/custom_icon/virus-covid-solid.imageset/virus-covid-solid.png rename to ReflectWidget/Assets.xcassets/custom_icon/virus-covid-solid.imageset/virus-covid-solid.png diff --git a/FeelsWidget2/Assets.xcassets/default_image/Contents.json b/ReflectWidget/Assets.xcassets/default_image/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/average.imageset/Contents.json b/ReflectWidget/Assets.xcassets/default_image/average.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/average.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/average.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/average.imageset/meh-regular.png b/ReflectWidget/Assets.xcassets/default_image/average.imageset/meh-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/average.imageset/meh-regular.png rename to ReflectWidget/Assets.xcassets/default_image/average.imageset/meh-regular.png diff --git a/FeelsWidget2/Assets.xcassets/default_image/bad.imageset/Contents.json b/ReflectWidget/Assets.xcassets/default_image/bad.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/bad.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/bad.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/bad.imageset/frown-regular.png b/ReflectWidget/Assets.xcassets/default_image/bad.imageset/frown-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/bad.imageset/frown-regular.png rename to ReflectWidget/Assets.xcassets/default_image/bad.imageset/frown-regular.png diff --git a/FeelsWidget2/Assets.xcassets/default_image/good.imageset/Contents.json b/ReflectWidget/Assets.xcassets/default_image/good.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/good.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/good.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/good.imageset/grin-regular.png b/ReflectWidget/Assets.xcassets/default_image/good.imageset/grin-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/good.imageset/grin-regular.png rename to ReflectWidget/Assets.xcassets/default_image/good.imageset/grin-regular.png diff --git a/FeelsWidget2/Assets.xcassets/default_image/great.imageset/Contents.json b/ReflectWidget/Assets.xcassets/default_image/great.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/great.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/great.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/great.imageset/smile-beam-regular.png b/ReflectWidget/Assets.xcassets/default_image/great.imageset/smile-beam-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/great.imageset/smile-beam-regular.png rename to ReflectWidget/Assets.xcassets/default_image/great.imageset/smile-beam-regular.png diff --git a/FeelsWidget2/Assets.xcassets/default_image/horrible.imageset/Contents.json b/ReflectWidget/Assets.xcassets/default_image/horrible.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/horrible.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/horrible.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/horrible.imageset/sad-tear-regular.png b/ReflectWidget/Assets.xcassets/default_image/horrible.imageset/sad-tear-regular.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/horrible.imageset/sad-tear-regular.png rename to ReflectWidget/Assets.xcassets/default_image/horrible.imageset/sad-tear-regular.png diff --git a/FeelsWidget2/Assets.xcassets/default_image/missing.imageset/Contents.json b/ReflectWidget/Assets.xcassets/default_image/missing.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/missing.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/missing.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/missing.imageset/xmark-solid.png b/ReflectWidget/Assets.xcassets/default_image/missing.imageset/xmark-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/missing.imageset/xmark-solid.png rename to ReflectWidget/Assets.xcassets/default_image/missing.imageset/xmark-solid.png diff --git a/FeelsWidget2/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json b/ReflectWidget/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json rename to ReflectWidget/Assets.xcassets/default_image/xmark-solid.imageset/Contents.json diff --git a/FeelsWidget2/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png b/ReflectWidget/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png similarity index 100% rename from FeelsWidget2/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png rename to ReflectWidget/Assets.xcassets/default_image/xmark-solid.imageset/xmark-solid.png diff --git a/FeelsWidget2/FeelsGraphicWidget.swift b/ReflectWidget/ReflectGraphicWidget.swift similarity index 90% rename from FeelsWidget2/FeelsGraphicWidget.swift rename to ReflectWidget/ReflectGraphicWidget.swift index ceb69d0..64dbb37 100644 --- a/FeelsWidget2/FeelsGraphicWidget.swift +++ b/ReflectWidget/ReflectGraphicWidget.swift @@ -1,6 +1,6 @@ // -// FeelsGraphicWidget.swift -// FeelsWidget +// ReflectGraphicWidget.swift +// ReflectWidget // // Graphic mood widget (small only) // @@ -11,14 +11,14 @@ import Intents // MARK: - Widget Configuration -struct FeelsGraphicWidget: Widget { - let kind: String = "FeelsGraphicWidget" +struct ReflectGraphicWidget: Widget { + let kind: String = "ReflectGraphicWidget" var body: some WidgetConfiguration { IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in - FeelsGraphicWidgetEntryView(entry: entry) + ReflectGraphicWidgetEntryView(entry: entry) } .configurationDisplayName("Mood Graphic") .description("") @@ -29,7 +29,7 @@ struct FeelsGraphicWidget: Widget { // MARK: - Entry View -struct FeelsGraphicWidgetEntryView: View { +struct ReflectGraphicWidgetEntryView: View { @Environment(\.sizeCategory) var sizeCategory @Environment(\.widgetFamily) var family @@ -81,7 +81,7 @@ struct SmallGraphicWidgetView: View { // MARK: - Previews #Preview("Graphic - Great", as: .systemSmall) { - FeelsGraphicWidget() + ReflectGraphicWidget() } timeline: { SimpleEntry( date: Date(), diff --git a/FeelsWidget2/FeelsIconWidget.swift b/ReflectWidget/ReflectIconWidget.swift similarity index 82% rename from FeelsWidget2/FeelsIconWidget.swift rename to ReflectWidget/ReflectIconWidget.swift index d5d636b..33c5bc7 100644 --- a/FeelsWidget2/FeelsIconWidget.swift +++ b/ReflectWidget/ReflectIconWidget.swift @@ -1,6 +1,6 @@ // -// FeelsIconWidget.swift -// FeelsWidget +// ReflectIconWidget.swift +// ReflectWidget // // Custom icon widget (small only) // @@ -11,16 +11,16 @@ import Intents // MARK: - Widget Configuration -struct FeelsIconWidget: Widget { - let kind: String = "FeelsIconWidget" +struct ReflectIconWidget: Widget { + let kind: String = "ReflectIconWidget" var body: some WidgetConfiguration { IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in - FeelsIconWidgetEntryView(entry: entry) + ReflectIconWidgetEntryView(entry: entry) } - .configurationDisplayName("Feels Icon") + .configurationDisplayName("Reflect Icon") .description("") .supportedFamilies([.systemSmall]) .contentMarginsDisabled() @@ -29,7 +29,7 @@ struct FeelsIconWidget: Widget { // MARK: - Entry View -struct FeelsIconWidgetEntryView: View { +struct ReflectIconWidgetEntryView: View { @Environment(\.sizeCategory) var sizeCategory @Environment(\.widgetFamily) var family @@ -63,7 +63,7 @@ struct SmallIconView: View { // MARK: - Preview #Preview("Custom Icon", as: .systemSmall) { - FeelsIconWidget() + ReflectIconWidget() } timeline: { SimpleEntry( date: Date(), diff --git a/FeelsWidget2/FeelsLiveActivity.swift b/ReflectWidget/ReflectLiveActivity.swift similarity index 99% rename from FeelsWidget2/FeelsLiveActivity.swift rename to ReflectWidget/ReflectLiveActivity.swift index 58aa9d2..81fe316 100644 --- a/FeelsWidget2/FeelsLiveActivity.swift +++ b/ReflectWidget/ReflectLiveActivity.swift @@ -1,6 +1,6 @@ // -// FeelsLiveActivity.swift -// FeelsWidget +// ReflectLiveActivity.swift +// ReflectWidget // // Live Activity for mood streak tracking (Dynamic Island + Lock Screen) // diff --git a/FeelsWidget2/FeelsMoodControlWidget.swift b/ReflectWidget/ReflectMoodControlWidget.swift similarity index 50% rename from FeelsWidget2/FeelsMoodControlWidget.swift rename to ReflectWidget/ReflectMoodControlWidget.swift index 1613d2b..7ceb031 100644 --- a/FeelsWidget2/FeelsMoodControlWidget.swift +++ b/ReflectWidget/ReflectMoodControlWidget.swift @@ -1,6 +1,6 @@ // -// FeelsMoodControlWidget.swift -// FeelsWidget +// ReflectMoodControlWidget.swift +// ReflectWidget // // Control Center widget for quick mood logging // @@ -11,23 +11,23 @@ import AppIntents // MARK: - Control Center Widget -struct FeelsMoodControlWidget: ControlWidget { +struct ReflectMoodControlWidget: ControlWidget { var body: some ControlWidgetConfiguration { - StaticControlConfiguration(kind: "FeelsMoodControl") { - ControlWidgetButton(action: OpenFeelsIntent()) { + StaticControlConfiguration(kind: "ReflectMoodControl") { + ControlWidgetButton(action: OpenReflectIntent()) { Label("Log Mood", systemImage: "face.smiling") } } .displayName("Log Mood") - .description("Open Feels to log your mood") + .description("Open Reflect to log your mood") } } // MARK: - Open App Intent -struct OpenFeelsIntent: AppIntent { - static var title: LocalizedStringResource = "Open Feels" - static var description = IntentDescription("Open the Feels app to log your mood") +struct OpenReflectIntent: AppIntent { + static var title: LocalizedStringResource = "Open Reflect" + static var description = IntentDescription("Open the Reflect app to log your mood") static var openAppWhenRun: Bool = true func perform() async throws -> some IntentResult { diff --git a/FeelsWidget2/FeelsTimelineWidget.swift b/ReflectWidget/ReflectTimelineWidget.swift similarity index 97% rename from FeelsWidget2/FeelsTimelineWidget.swift rename to ReflectWidget/ReflectTimelineWidget.swift index fa46567..c293c39 100644 --- a/FeelsWidget2/FeelsTimelineWidget.swift +++ b/ReflectWidget/ReflectTimelineWidget.swift @@ -1,6 +1,6 @@ // -// FeelsTimelineWidget.swift -// FeelsWidget +// ReflectTimelineWidget.swift +// ReflectWidget // // Timeline widget showing mood history (small, medium, large) // @@ -11,16 +11,16 @@ import Intents // MARK: - Widget Configuration -struct FeelsWidget: Widget { - let kind: String = "FeelsWidget" +struct ReflectWidget: Widget { + let kind: String = "ReflectWidget" var body: some WidgetConfiguration { IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in - FeelsWidgetEntryView(entry: entry) + ReflectWidgetEntryView(entry: entry) } - .configurationDisplayName("Feels") + .configurationDisplayName("Reflect") .description("") .supportedFamilies([.systemSmall, .systemMedium, .systemLarge]) } @@ -28,7 +28,7 @@ struct FeelsWidget: Widget { // MARK: - Entry View Router -struct FeelsWidgetEntryView: View { +struct ReflectWidgetEntryView: View { @Environment(\.sizeCategory) var sizeCategory @Environment(\.widgetFamily) var family @@ -495,84 +495,84 @@ private enum WidgetPreviewHelpers { // Small - Logged States #Preview("Timeline Small - Great", as: .systemSmall) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 1, startMood: .great) } #Preview("Timeline Small - Good", as: .systemSmall) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 1, startMood: .good) } #Preview("Timeline Small - Average", as: .systemSmall) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 1, startMood: .average) } #Preview("Timeline Small - Bad", as: .systemSmall) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 1, startMood: .bad) } #Preview("Timeline Small - Horrible", as: .systemSmall) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 1, startMood: .horrible) } // Small - Voting States #Preview("Timeline Small - Voting", as: .systemSmall) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 1, hasVotedToday: false) } #Preview("Timeline Small - Non-Subscriber", as: .systemSmall) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 1, hasVotedToday: false, hasSubscription: false) } // Medium - Logged States #Preview("Timeline Medium - Logged", as: .systemMedium) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 5) } // Medium - Voting States #Preview("Timeline Medium - Voting", as: .systemMedium) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 5, hasVotedToday: false) } #Preview("Timeline Medium - Non-Subscriber", as: .systemMedium) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 5, hasVotedToday: false, hasSubscription: false) } // Large - Logged States #Preview("Timeline Large - Logged", as: .systemLarge) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 10) } // Large - Voting States #Preview("Timeline Large - Voting", as: .systemLarge) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 10, hasVotedToday: false) } #Preview("Timeline Large - Non-Subscriber", as: .systemLarge) { - FeelsWidget() + ReflectWidget() } timeline: { WidgetPreviewHelpers.sampleEntry(timelineCount: 10, hasVotedToday: false, hasSubscription: false) } diff --git a/FeelsWidget2/FeelsVoteWidget.swift b/ReflectWidget/ReflectVoteWidget.swift similarity index 95% rename from FeelsWidget2/FeelsVoteWidget.swift rename to ReflectWidget/ReflectVoteWidget.swift index dbf1092..6c3315c 100644 --- a/FeelsWidget2/FeelsVoteWidget.swift +++ b/ReflectWidget/ReflectVoteWidget.swift @@ -1,6 +1,6 @@ // -// FeelsVoteWidget.swift -// FeelsWidget +// ReflectVoteWidget.swift +// ReflectWidget // // Interactive widget for mood voting (iOS 17+) // @@ -11,12 +11,12 @@ import AppIntents // MARK: - Widget Configuration -struct FeelsVoteWidget: Widget { - let kind: String = "FeelsVoteWidget" +struct ReflectVoteWidget: Widget { + let kind: String = "ReflectVoteWidget" var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: VoteWidgetProvider()) { entry in - FeelsVoteWidgetEntryView(entry: entry) + ReflectVoteWidgetEntryView(entry: entry) } .configurationDisplayName("Mood Vote") .description("Quickly rate your mood for today") @@ -26,7 +26,7 @@ struct FeelsVoteWidget: Widget { // MARK: - Entry View -struct FeelsVoteWidgetEntryView: View { +struct ReflectVoteWidgetEntryView: View { @Environment(\.widgetFamily) var family var entry: VoteWidgetProvider.Entry @@ -194,7 +194,7 @@ struct VotedStatsView: View { struct NonSubscriberView: View { var body: some View { - Link(destination: URL(string: "feels://subscribe")!) { + Link(destination: URL(string: "reflect://subscribe")!) { VStack(spacing: 8) { Image(systemName: "heart.fill") .font(.largeTitle) @@ -234,7 +234,7 @@ private enum VoteWidgetPreviewHelpers { // MARK: - Small Widget Previews #Preview("Vote Small - Not Voted", as: .systemSmall) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -248,7 +248,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Small - Voted Great", as: .systemSmall) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -262,7 +262,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Small - Voted Good", as: .systemSmall) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -276,7 +276,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Small - Voted Average", as: .systemSmall) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -290,7 +290,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Small - Voted Bad", as: .systemSmall) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -304,7 +304,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Small - Voted Horrible", as: .systemSmall) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -318,7 +318,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Small - Non-Subscriber", as: .systemSmall) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -334,7 +334,7 @@ private enum VoteWidgetPreviewHelpers { // MARK: - Medium Widget Previews #Preview("Vote Medium - Not Voted", as: .systemMedium) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -348,7 +348,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Medium - Voted Great", as: .systemMedium) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -362,7 +362,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Medium - Voted Good", as: .systemMedium) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -376,7 +376,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Medium - Voted Average", as: .systemMedium) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -390,7 +390,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Medium - Voted Bad", as: .systemMedium) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -404,7 +404,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Medium - Voted Horrible", as: .systemMedium) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), @@ -418,7 +418,7 @@ private enum VoteWidgetPreviewHelpers { } #Preview("Vote Medium - Non-Subscriber", as: .systemMedium) { - FeelsVoteWidget() + ReflectVoteWidget() } timeline: { VoteWidgetEntry( date: Date(), diff --git a/FeelsWidget2/FeelsWidget.intentdefinition b/ReflectWidget/ReflectWidget.intentdefinition similarity index 100% rename from FeelsWidget2/FeelsWidget.intentdefinition rename to ReflectWidget/ReflectWidget.intentdefinition diff --git a/ReflectWidget/WidgetBundle.swift b/ReflectWidget/WidgetBundle.swift new file mode 100644 index 0000000..777761d --- /dev/null +++ b/ReflectWidget/WidgetBundle.swift @@ -0,0 +1,21 @@ +// +// WidgetBundle.swift +// ReflectWidget +// +// Main widget bundle that registers all Reflect widgets +// + +import WidgetKit +import SwiftUI + +@main +struct ReflectBundle: WidgetBundle { + var body: some Widget { + ReflectWidget() +// ReflectGraphicWidget() + ReflectIconWidget() + ReflectVoteWidget() + ReflectMoodControlWidget() + MoodStreakLiveActivity() + } +} diff --git a/FeelsWidget2/WidgetDataProvider.swift b/ReflectWidget/WidgetDataProvider.swift similarity index 93% rename from FeelsWidget2/WidgetDataProvider.swift rename to ReflectWidget/WidgetDataProvider.swift index 9e129ee..d569ba9 100644 --- a/FeelsWidget2/WidgetDataProvider.swift +++ b/ReflectWidget/WidgetDataProvider.swift @@ -1,6 +1,6 @@ // // WidgetDataProvider.swift -// FeelsWidget +// ReflectWidget // // Typealias to ExtensionDataProvider for backward compatibility. // diff --git a/FeelsWidget2/WidgetModels.swift b/ReflectWidget/WidgetModels.swift similarity index 99% rename from FeelsWidget2/WidgetModels.swift rename to ReflectWidget/WidgetModels.swift index 283a510..f9db098 100644 --- a/FeelsWidget2/WidgetModels.swift +++ b/ReflectWidget/WidgetModels.swift @@ -1,6 +1,6 @@ // // WidgetModels.swift -// FeelsWidget +// ReflectWidget // // Data models for widget timeline entries // diff --git a/FeelsWidget2/WidgetProviders.swift b/ReflectWidget/WidgetProviders.swift similarity index 99% rename from FeelsWidget2/WidgetProviders.swift rename to ReflectWidget/WidgetProviders.swift index efaec73..bc6ca5d 100644 --- a/FeelsWidget2/WidgetProviders.swift +++ b/ReflectWidget/WidgetProviders.swift @@ -1,6 +1,6 @@ // // WidgetProviders.swift -// FeelsWidget +// ReflectWidget // // Timeline providers for widget data // diff --git a/FeelsWidget2/WidgetSharedViews.swift b/ReflectWidget/WidgetSharedViews.swift similarity index 96% rename from FeelsWidget2/WidgetSharedViews.swift rename to ReflectWidget/WidgetSharedViews.swift index 3cf59c3..b24c2a7 100644 --- a/FeelsWidget2/WidgetSharedViews.swift +++ b/ReflectWidget/WidgetSharedViews.swift @@ -1,6 +1,6 @@ // // WidgetSharedViews.swift -// FeelsWidget +// ReflectWidget // // Shared voting views used across multiple widgets // @@ -94,7 +94,7 @@ struct VotingView: View { .accessibilityLabel(mood.strValue) .accessibilityHint(String(localized: "Log this mood")) } else { - Link(destination: URL(string: "feels://subscribe")!) { + Link(destination: URL(string: "reflect://subscribe")!) { moodIcon(for: mood, size: size) .frame(minWidth: touchSize, minHeight: touchSize) } @@ -120,7 +120,7 @@ struct VotingView: View { .accessibilityLabel(mood.strValue) .accessibilityHint(String(localized: "Log this mood")) } else { - Link(destination: URL(string: "feels://subscribe")!) { + Link(destination: URL(string: "reflect://subscribe")!) { content } .accessibilityLabel(mood.strValue) @@ -197,7 +197,7 @@ struct LargeVotingView: View { .accessibilityLabel(mood.strValue) .accessibilityHint(String(localized: "Log this mood")) } else { - Link(destination: URL(string: "feels://subscribe")!) { + Link(destination: URL(string: "reflect://subscribe")!) { moodButtonContent(for: mood) } .accessibilityLabel(mood.strValue) @@ -262,7 +262,7 @@ struct InlineVotingView: View { .accessibilityLabel(mood.strValue) .accessibilityHint(String(localized: "Log this mood")) } else { - Link(destination: URL(string: "feels://subscribe")!) { + Link(destination: URL(string: "reflect://subscribe")!) { moodIcon(for: mood) } .accessibilityLabel(mood.strValue) diff --git a/FeelsWidgetExtension-Info.plist b/ReflectWidgetExtension-Info.plist similarity index 100% rename from FeelsWidgetExtension-Info.plist rename to ReflectWidgetExtension-Info.plist diff --git a/Feels Watch App/Feels Watch App.entitlements b/ReflectWidgetExtension.entitlements similarity index 83% rename from Feels Watch App/Feels Watch App.entitlements rename to ReflectWidgetExtension.entitlements index 43871d5..70a2e1c 100644 --- a/Feels Watch App/Feels Watch App.entitlements +++ b/ReflectWidgetExtension.entitlements @@ -6,7 +6,7 @@ development com.apple.developer.icloud-container-identifiers - iCloud.com.88oakapps.feels + iCloud.com.88oakapps.reflect com.apple.developer.icloud-services @@ -14,7 +14,7 @@ com.apple.security.application-groups - group.com.88oakapps.feels + group.com.88oakapps.reflect diff --git a/Feels Watch App/Feels Watch AppDebug.entitlements b/ReflectWidgetExtensionDev.entitlements similarity index 82% rename from Feels Watch App/Feels Watch AppDebug.entitlements rename to ReflectWidgetExtensionDev.entitlements index 0a2a3fd..88e3d63 100644 --- a/Feels Watch App/Feels Watch AppDebug.entitlements +++ b/ReflectWidgetExtensionDev.entitlements @@ -6,7 +6,7 @@ development com.apple.developer.icloud-container-identifiers - iCloud.com.88oakapps.feels.debug + iCloud.com.88oakapps.reflect.debug com.apple.developer.icloud-services @@ -14,7 +14,7 @@ com.apple.security.application-groups - group.com.88oakapps.feels.debug + group.com.88oakapps.reflect.debug diff --git a/Shared/AccessibilityIdentifiers.swift b/Shared/AccessibilityIdentifiers.swift index d612b3f..110b838 100644 --- a/Shared/AccessibilityIdentifiers.swift +++ b/Shared/AccessibilityIdentifiers.swift @@ -1,6 +1,6 @@ // // AccessibilityIdentifiers.swift -// Feels (iOS) +// Reflect (iOS) // // Centralized accessibility identifiers for XCUITest targeting. // diff --git a/Shared/Analytics.swift b/Shared/Analytics.swift index 54bf6cc..3765fe4 100644 --- a/Shared/Analytics.swift +++ b/Shared/Analytics.swift @@ -1,6 +1,6 @@ // // Analytics.swift -// Feels +// Reflect // // Singleton analytics manager wrapping PostHog SDK. // All analytics events flow through this single manager. diff --git a/Shared/AppDelegate.swift b/Shared/AppDelegate.swift index 73c0c69..2ce9fc7 100644 --- a/Shared/AppDelegate.swift +++ b/Shared/AppDelegate.swift @@ -1,6 +1,6 @@ // // AppDelegate.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/10/22. // diff --git a/Shared/AppShortcuts.swift b/Shared/AppShortcuts.swift index 6d09e94..1d230a2 100644 --- a/Shared/AppShortcuts.swift +++ b/Shared/AppShortcuts.swift @@ -1,6 +1,6 @@ // // AppShortcuts.swift -// Feels +// Reflect // // App Intents and Siri Shortcuts for voice-activated mood logging // @@ -50,7 +50,7 @@ struct MoodEntityQuery: EntityQuery { struct LogMoodIntent: AppIntent { static var title: LocalizedStringResource = "Log Mood" - static var description = IntentDescription("Record your mood for today in Feels") + static var description = IntentDescription("Record your mood for today in Reflect") static var openAppWhenRun: Bool = false @Parameter(title: "Mood") @@ -81,7 +81,7 @@ struct LogMoodIntent: AppIntent { struct CheckTodaysMoodIntent: AppIntent { static var title: LocalizedStringResource = "Check Today's Mood" - static var description = IntentDescription("See what mood you logged today in Feels") + static var description = IntentDescription("See what mood you logged today in Reflect") static var openAppWhenRun: Bool = false @MainActor @@ -176,7 +176,7 @@ struct MoodLoggedSnippetView: View { // MARK: - App Shortcuts Provider -struct FeelsShortcuts: AppShortcutsProvider { +struct ReflectShortcuts: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { AppShortcut( intent: LogMoodIntent(), diff --git a/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json b/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json index 075f343..3e9501f 100644 --- a/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "FeelsAppIcon.png", + "filename" : "ReflectAppIcon.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" @@ -13,7 +13,7 @@ "value" : "dark" } ], - "filename" : "FeelsAppIcon 1.png", + "filename" : "ReflectAppIcon 1.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" diff --git a/Shared/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon 1.png b/Shared/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon 1.png similarity index 100% rename from Shared/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon 1.png rename to Shared/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon 1.png diff --git a/Shared/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon.png b/Shared/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon.png similarity index 100% rename from Shared/Assets.xcassets/AppIcon.appiconset/FeelsAppIcon.png rename to Shared/Assets.xcassets/AppIcon.appiconset/ReflectAppIcon.png diff --git a/Shared/Assets.xcassets/FeelsAppIcon.imageset/Contents.json b/Shared/Assets.xcassets/ReflectAppIcon.imageset/Contents.json similarity index 86% rename from Shared/Assets.xcassets/FeelsAppIcon.imageset/Contents.json rename to Shared/Assets.xcassets/ReflectAppIcon.imageset/Contents.json index a6ae92c..bd893f3 100644 --- a/Shared/Assets.xcassets/FeelsAppIcon.imageset/Contents.json +++ b/Shared/Assets.xcassets/ReflectAppIcon.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "FeelsAppIcon.png", + "filename" : "ReflectAppIcon.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/Shared/Assets.xcassets/FeelsAppIcon.imageset/FeelsAppIcon.png b/Shared/Assets.xcassets/ReflectAppIcon.imageset/ReflectAppIcon.png similarity index 100% rename from Shared/Assets.xcassets/FeelsAppIcon.imageset/FeelsAppIcon.png rename to Shared/Assets.xcassets/ReflectAppIcon.imageset/ReflectAppIcon.png diff --git a/Shared/BGTask.swift b/Shared/BGTask.swift index 1d72e34..78a5191 100644 --- a/Shared/BGTask.swift +++ b/Shared/BGTask.swift @@ -1,6 +1,6 @@ // // BGTask.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/12/22. // @@ -9,7 +9,7 @@ import Foundation import BackgroundTasks class BGTask { - static let updateDBMissingID = "com.tt.feels.dbUpdateMissing" + static let updateDBMissingID = "com.88oakapps.reflect.dbUpdateMissing" @MainActor class func runFillInMissingDatesTask(task: BGProcessingTask) { diff --git a/Shared/Date+Extensions.swift b/Shared/Date+Extensions.swift index a2923b6..ef26b0e 100644 --- a/Shared/Date+Extensions.swift +++ b/Shared/Date+Extensions.swift @@ -1,6 +1,6 @@ // // Date+Extensions.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/19/22. // diff --git a/Shared/DemoAnimationManager.swift b/Shared/DemoAnimationManager.swift index f373256..d2d05de 100644 --- a/Shared/DemoAnimationManager.swift +++ b/Shared/DemoAnimationManager.swift @@ -1,6 +1,6 @@ // // DemoAnimationManager.swift -// Feels +// Reflect // // Manages demo animation mode for promotional videos. // Animates filling mood entries from top-left to bottom-right. diff --git a/Shared/GoogleService-Info.plist b/Shared/GoogleService-Info.plist index 4453b48..6df8a65 100644 --- a/Shared/GoogleService-Info.plist +++ b/Shared/GoogleService-Info.plist @@ -15,9 +15,9 @@ BUNDLE_ID com.tt.ifeel PROJECT_ID - ifeels + ireflect STORAGE_BUCKET - ifeels.appspot.com + ireflect.appspot.com IS_ADS_ENABLED IS_ANALYTICS_ENABLED diff --git a/Shared/HealthKitManager.swift b/Shared/HealthKitManager.swift index 6fef7b4..817bf9b 100644 --- a/Shared/HealthKitManager.swift +++ b/Shared/HealthKitManager.swift @@ -1,6 +1,6 @@ // // HealthKitManager.swift -// Feels +// Reflect // // HealthKit State of Mind API integration for syncing mood data with Apple Health // @@ -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.feels", category: "HealthKit") + private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.88oakapps.reflect", category: "HealthKit") @Published var isAuthorized = false @Published var authorizationError: Error? @@ -132,7 +132,7 @@ class HealthKitManager: ObservableObject { throw HealthKitError.notAuthorized } - // Convert Feels mood to HealthKit valence (-1 to 1 scale) + // Convert Reflect mood to HealthKit valence (-1 to 1 scale) let valence = moodToValence(mood) // Create State of Mind sample @@ -384,7 +384,7 @@ class HealthKitManager: ObservableObject { // MARK: - Conversion Helpers - /// Convert Feels Mood to HealthKit valence (-1 to 1) + /// Convert Reflect Mood to HealthKit valence (-1 to 1) private func moodToValence(_ mood: Mood) -> Double { switch mood { case .horrible: return -1.0 @@ -396,7 +396,7 @@ class HealthKitManager: ObservableObject { } } - /// Convert HealthKit valence to Feels Mood + /// Convert HealthKit valence to Reflect Mood func valenceToMood(_ valence: Double) -> Mood { switch valence { case ..<(-0.75): return .horrible diff --git a/Shared/IAPManager.swift b/Shared/IAPManager.swift index b8debba..6f4bf3e 100644 --- a/Shared/IAPManager.swift +++ b/Shared/IAPManager.swift @@ -1,6 +1,6 @@ // // IAPManager.swift -// Feels +// Reflect // // Refactored StoreKit 2 subscription manager with clean state model. // @@ -50,8 +50,8 @@ class IAPManager: ObservableObject { static let subscriptionGroupID = "21914363" private let productIdentifiers: Set = [ - "com.88oakapps.feels.IAP.subscriptions.monthly", - "com.88oakapps.feels.IAP.subscriptions.yearly" + "com.88oakapps.reflect.IAP.subscriptions.monthly", + "com.88oakapps.reflect.IAP.subscriptions.yearly" ] private let trialDays = 30 diff --git a/Shared/LocalNotification.swift b/Shared/LocalNotification.swift index 97c27e2..bfad30d 100644 --- a/Shared/LocalNotification.swift +++ b/Shared/LocalNotification.swift @@ -1,6 +1,6 @@ // // LocalNotification.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/8/22. // diff --git a/Shared/Models/AIInsight.swift b/Shared/Models/AIInsight.swift index 99b21db..d999bd3 100644 --- a/Shared/Models/AIInsight.swift +++ b/Shared/Models/AIInsight.swift @@ -1,6 +1,6 @@ // // AIInsight.swift -// Feels +// Reflect // // Created by Claude Code on 12/13/24. // diff --git a/Shared/Models/AppTheme.swift b/Shared/Models/AppTheme.swift index 936cf53..df18a03 100644 --- a/Shared/Models/AppTheme.swift +++ b/Shared/Models/AppTheme.swift @@ -1,6 +1,6 @@ // // AppTheme.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Claude Code on 12/26/24. // diff --git a/Shared/Models/CustomWidgetStateViewModel.swift b/Shared/Models/CustomWidgetStateViewModel.swift index 5f27ad2..f0ac296 100644 --- a/Shared/Models/CustomWidgetStateViewModel.swift +++ b/Shared/Models/CustomWidgetStateViewModel.swift @@ -1,6 +1,6 @@ // // CustomWidgetStateViewModel.swift -// Feels +// Reflect // // Created by Trey Tartt on 3/31/22. // diff --git a/Shared/Models/DaysFilterClass.swift b/Shared/Models/DaysFilterClass.swift index bc70b61..8cec72b 100644 --- a/Shared/Models/DaysFilterClass.swift +++ b/Shared/Models/DaysFilterClass.swift @@ -1,6 +1,6 @@ // // DaysFilterClass.swift -// Feels +// Reflect // // Created by Trey Tartt on 3/31/22. // diff --git a/Shared/Models/DiamondView.swift b/Shared/Models/DiamondView.swift index 3f642c0..a7b9552 100644 --- a/Shared/Models/DiamondView.swift +++ b/Shared/Models/DiamondView.swift @@ -1,6 +1,6 @@ // // DiamondView.swift -// Feels +// Reflect // // Created by Trey Tartt on 3/20/22. // diff --git a/Shared/Models/Mood.swift b/Shared/Models/Mood.swift index b89ad5d..3b3e4cc 100644 --- a/Shared/Models/Mood.swift +++ b/Shared/Models/Mood.swift @@ -1,6 +1,6 @@ // // Mood.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/5/22. // diff --git a/Shared/Models/MoodEntryModel.swift b/Shared/Models/MoodEntryModel.swift index c585cc0..0eb5479 100644 --- a/Shared/Models/MoodEntryModel.swift +++ b/Shared/Models/MoodEntryModel.swift @@ -1,6 +1,6 @@ // // MoodEntryModel.swift -// Feels +// Reflect // // SwiftData model replacing Core Data MoodEntry // diff --git a/Shared/Models/MoodImagable.swift b/Shared/Models/MoodImagable.swift index f2eb235..a66cf7f 100644 --- a/Shared/Models/MoodImagable.swift +++ b/Shared/Models/MoodImagable.swift @@ -1,6 +1,6 @@ // // MoodImagable.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/19/22. // diff --git a/Shared/Models/MoodMetrics.swift b/Shared/Models/MoodMetrics.swift index a3cead9..49649be 100644 --- a/Shared/Models/MoodMetrics.swift +++ b/Shared/Models/MoodMetrics.swift @@ -1,6 +1,6 @@ // // MoodMetrics.swift -// Feels +// Reflect // // Created by Trey Tartt on 2/12/22. // diff --git a/Shared/Models/MoodTintable.swift b/Shared/Models/MoodTintable.swift index c2d24a0..ef02883 100644 --- a/Shared/Models/MoodTintable.swift +++ b/Shared/Models/MoodTintable.swift @@ -1,6 +1,6 @@ // // MoodTintable.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/19/22. // diff --git a/Shared/Models/OnboardingDataDataManager.swift b/Shared/Models/OnboardingDataDataManager.swift index 31f0345..b6b0896 100644 --- a/Shared/Models/OnboardingDataDataManager.swift +++ b/Shared/Models/OnboardingDataDataManager.swift @@ -1,6 +1,6 @@ // // OnboardingDataDataManager.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/18/22. // diff --git a/Shared/Models/PersonalityPackable.swift b/Shared/Models/PersonalityPackable.swift index c5a7794..2014742 100644 --- a/Shared/Models/PersonalityPackable.swift +++ b/Shared/Models/PersonalityPackable.swift @@ -1,6 +1,6 @@ // // NotificationTitles.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/19/22. // diff --git a/Shared/Models/Shapes.swift b/Shared/Models/Shapes.swift index 16ecd17..ecc19b4 100644 --- a/Shared/Models/Shapes.swift +++ b/Shared/Models/Shapes.swift @@ -1,6 +1,6 @@ // // Shapes.swift -// Feels +// Reflect // // Created by Trey Tartt on 3/20/22. // diff --git a/Shared/Models/SharingImageModels.swift b/Shared/Models/SharingImageModels.swift index 367038f..63fd8bf 100644 --- a/Shared/Models/SharingImageModels.swift +++ b/Shared/Models/SharingImageModels.swift @@ -1,6 +1,6 @@ // // SharingImageModels.swift -// Feels +// Reflect // // Created by Trey Tartt on 2/24/22. // diff --git a/Shared/Models/Theme.swift b/Shared/Models/Theme.swift index 5ef0211..0bc7a2c 100644 --- a/Shared/Models/Theme.swift +++ b/Shared/Models/Theme.swift @@ -1,6 +1,6 @@ // // theme.currentTheme.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/4/22. // diff --git a/Shared/Models/UserDefaultsStore.swift b/Shared/Models/UserDefaultsStore.swift index e3d4efd..3b4ade1 100644 --- a/Shared/Models/UserDefaultsStore.swift +++ b/Shared/Models/UserDefaultsStore.swift @@ -1,6 +1,6 @@ // // UserDefaultsStore.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/22/22. // diff --git a/Shared/MoodEntryFunctions.swift b/Shared/MoodEntryFunctions.swift index 7da8668..1985a44 100644 --- a/Shared/MoodEntryFunctions.swift +++ b/Shared/MoodEntryFunctions.swift @@ -1,6 +1,6 @@ // // MoodEntryFunctions.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/19/22. // diff --git a/Shared/MoodLogger.swift b/Shared/MoodLogger.swift index 7aeca10..b9c1d92 100644 --- a/Shared/MoodLogger.swift +++ b/Shared/MoodLogger.swift @@ -1,6 +1,6 @@ // // MoodLogger.swift -// Feels +// Reflect // // Centralized mood logging service that handles all side effects // @@ -15,7 +15,7 @@ import os.log final class MoodLogger { static let shared = MoodLogger() - private static let logger = Logger(subsystem: "com.tt.feels", category: "MoodLogger") + private static let logger = Logger(subsystem: "com.88oakapps.reflect", category: "MoodLogger") /// Key for tracking the last date side effects were applied private static let lastSideEffectsDateKey = "lastSideEffectsAppliedDate" @@ -86,8 +86,8 @@ final class MoodLogger { // 4. Update tips parameters if requested if updateTips { - FeelsTipsManager.shared.onMoodLogged() - FeelsTipsManager.shared.updateStreak(streak) + ReflectTipsManager.shared.onMoodLogged() + ReflectTipsManager.shared.updateStreak(streak) } // 5. Request app review at moments of delight diff --git a/Shared/MoodStreakActivity.swift b/Shared/MoodStreakActivity.swift index d150bd1..c5d19ae 100644 --- a/Shared/MoodStreakActivity.swift +++ b/Shared/MoodStreakActivity.swift @@ -1,6 +1,6 @@ // // MoodStreakActivity.swift -// Feels +// Reflect // // Live Activity for mood streak tracking on Lock Screen and Dynamic Island // diff --git a/Shared/Onboarding/OnboardingData.swift b/Shared/Onboarding/OnboardingData.swift index 87b815c..99844d1 100644 --- a/Shared/Onboarding/OnboardingData.swift +++ b/Shared/Onboarding/OnboardingData.swift @@ -1,6 +1,6 @@ // // OnboardingData.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/22/22. // diff --git a/Shared/Onboarding/views/OnboardingCustomizeOne.swift b/Shared/Onboarding/views/OnboardingCustomizeOne.swift index 1ae537c..602fc22 100644 --- a/Shared/Onboarding/views/OnboardingCustomizeOne.swift +++ b/Shared/Onboarding/views/OnboardingCustomizeOne.swift @@ -1,6 +1,6 @@ // // OnboardingCustomizeOne.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/5/22. // diff --git a/Shared/Onboarding/views/OnboardingCustomizeTwo.swift b/Shared/Onboarding/views/OnboardingCustomizeTwo.swift index 5a99d90..310e942 100644 --- a/Shared/Onboarding/views/OnboardingCustomizeTwo.swift +++ b/Shared/Onboarding/views/OnboardingCustomizeTwo.swift @@ -1,6 +1,6 @@ // // OnboardingCustomizeTwo.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/5/22. // diff --git a/Shared/Onboarding/views/OnboardingDay.swift b/Shared/Onboarding/views/OnboardingDay.swift index 0b92a0b..87fa22f 100644 --- a/Shared/Onboarding/views/OnboardingDay.swift +++ b/Shared/Onboarding/views/OnboardingDay.swift @@ -1,6 +1,6 @@ // // OnboardingDay.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/20/22. // diff --git a/Shared/Onboarding/views/OnboardingMain.swift b/Shared/Onboarding/views/OnboardingMain.swift index c1c59f7..5788412 100644 --- a/Shared/Onboarding/views/OnboardingMain.swift +++ b/Shared/Onboarding/views/OnboardingMain.swift @@ -1,6 +1,6 @@ // // OnboardingMain.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/20/22. // diff --git a/Shared/Onboarding/views/OnboardingStyle.swift b/Shared/Onboarding/views/OnboardingStyle.swift index f5f376d..6620d49 100644 --- a/Shared/Onboarding/views/OnboardingStyle.swift +++ b/Shared/Onboarding/views/OnboardingStyle.swift @@ -1,6 +1,6 @@ // // OnboardingStyle.swift -// Feels +// Reflect // // Created by Claude Code on 12/10/24. // diff --git a/Shared/Onboarding/views/OnboardingSubscription.swift b/Shared/Onboarding/views/OnboardingSubscription.swift index 6360cb0..6627b8e 100644 --- a/Shared/Onboarding/views/OnboardingSubscription.swift +++ b/Shared/Onboarding/views/OnboardingSubscription.swift @@ -1,6 +1,6 @@ // // OnboardingSubscription.swift -// Feels +// Reflect // // Created by Claude Code on 12/10/24. // @@ -143,7 +143,7 @@ struct OnboardingSubscription: View { AnalyticsManager.shared.track(.onboardingCompleted(dayId: nil)) completionClosure(onboardingData) }) { - FeelsSubscriptionStoreView(source: "onboarding") + ReflectSubscriptionStoreView(source: "onboarding") } } } diff --git a/Shared/Onboarding/views/OnboardingTime.swift b/Shared/Onboarding/views/OnboardingTime.swift index bef0bdc..47e5249 100644 --- a/Shared/Onboarding/views/OnboardingTime.swift +++ b/Shared/Onboarding/views/OnboardingTime.swift @@ -1,6 +1,6 @@ // // OnboardingTime.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/20/22. // diff --git a/Shared/Onboarding/views/OnboardingTitle.swift b/Shared/Onboarding/views/OnboardingTitle.swift index b86041d..959a5ff 100644 --- a/Shared/Onboarding/views/OnboardingTitle.swift +++ b/Shared/Onboarding/views/OnboardingTitle.swift @@ -1,6 +1,6 @@ // // OnboardingTitle.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/20/22. // diff --git a/Shared/Onboarding/views/OnboardingWelcome.swift b/Shared/Onboarding/views/OnboardingWelcome.swift index 1e36e2e..82676cf 100644 --- a/Shared/Onboarding/views/OnboardingWelcome.swift +++ b/Shared/Onboarding/views/OnboardingWelcome.swift @@ -1,6 +1,6 @@ // // OnboardingWelcome.swift -// Feels +// Reflect // // Created by Claude Code on 12/10/24. // @@ -38,7 +38,7 @@ struct OnboardingWelcome: View { .padding(.bottom, 40) // Title - Text("Welcome to Feels") + Text("Welcome to Reflect") .font(.largeTitle.weight(.bold)) .foregroundColor(.white) .padding(.bottom, 12) diff --git a/Shared/Onboarding/views/OnboardingWrapup.swift b/Shared/Onboarding/views/OnboardingWrapup.swift index 93f1e10..02dfe9b 100644 --- a/Shared/Onboarding/views/OnboardingWrapup.swift +++ b/Shared/Onboarding/views/OnboardingWrapup.swift @@ -1,6 +1,6 @@ // // OnboardingWrapup.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/21/22. // diff --git a/Shared/Persisence/DataController.swift b/Shared/Persisence/DataController.swift index 250dcae..8152310 100644 --- a/Shared/Persisence/DataController.swift +++ b/Shared/Persisence/DataController.swift @@ -1,6 +1,6 @@ // // DataController.swift -// Feels +// Reflect // // SwiftData controller replacing Core Data PersistenceController. // @@ -11,7 +11,7 @@ import os.log @MainActor final class DataController: ObservableObject { - private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "DataController") + private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.88oakapps.reflect", category: "DataController") static let shared = DataController() private(set) var container: ModelContainer diff --git a/Shared/Persisence/DataControllerADD.swift b/Shared/Persisence/DataControllerADD.swift index 82b9497..e475a2b 100644 --- a/Shared/Persisence/DataControllerADD.swift +++ b/Shared/Persisence/DataControllerADD.swift @@ -1,6 +1,6 @@ // // DataControllerADD.swift -// Feels +// Reflect // // SwiftData CREATE operations. // @@ -9,7 +9,7 @@ import SwiftData import Foundation import os.log -private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "DataControllerADD") +private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.88oakapps.reflect", category: "DataControllerADD") extension DataController { func add(mood: Mood, forDate date: Date, entryType: EntryType) { diff --git a/Shared/Persisence/DataControllerDELETE.swift b/Shared/Persisence/DataControllerDELETE.swift index 7c754de..e6f2b12 100644 --- a/Shared/Persisence/DataControllerDELETE.swift +++ b/Shared/Persisence/DataControllerDELETE.swift @@ -1,6 +1,6 @@ // // DataControllerDELETE.swift -// Feels +// Reflect // // SwiftData DELETE operations. // diff --git a/Shared/Persisence/DataControllerGET.swift b/Shared/Persisence/DataControllerGET.swift index c849fef..6da7706 100644 --- a/Shared/Persisence/DataControllerGET.swift +++ b/Shared/Persisence/DataControllerGET.swift @@ -1,6 +1,6 @@ // // DataControllerGET.swift -// Feels +// Reflect // // SwiftData READ operations. // @@ -9,7 +9,7 @@ import SwiftData import Foundation import os.log -private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "DataControllerGET") +private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.88oakapps.reflect", category: "DataControllerGET") extension DataController { func getEntry(byDate date: Date) -> MoodEntryModel? { diff --git a/Shared/Persisence/DataControllerHelper.swift b/Shared/Persisence/DataControllerHelper.swift index 60c5161..7c6fe42 100644 --- a/Shared/Persisence/DataControllerHelper.swift +++ b/Shared/Persisence/DataControllerHelper.swift @@ -1,6 +1,6 @@ // // DataControllerHelper.swift -// Feels +// Reflect // // SwiftData helper and test data operations. // diff --git a/Shared/Persisence/DataControllerProtocol.swift b/Shared/Persisence/DataControllerProtocol.swift index e3825a7..9f5659f 100644 --- a/Shared/Persisence/DataControllerProtocol.swift +++ b/Shared/Persisence/DataControllerProtocol.swift @@ -1,6 +1,6 @@ // // DataControllerProtocol.swift -// Feels +// Reflect // // Protocol defining the data access interface for mood entries. // Enables dependency injection and testability. diff --git a/Shared/Persisence/DataControllerUPDATE.swift b/Shared/Persisence/DataControllerUPDATE.swift index 7d7ded2..d0a5427 100644 --- a/Shared/Persisence/DataControllerUPDATE.swift +++ b/Shared/Persisence/DataControllerUPDATE.swift @@ -1,6 +1,6 @@ // // DataControllerUPDATE.swift -// Feels +// Reflect // // SwiftData UPDATE operations. // diff --git a/Shared/Persisence/ExtensionDataProvider.swift b/Shared/Persisence/ExtensionDataProvider.swift index d742c1b..3c8a2fe 100644 --- a/Shared/Persisence/ExtensionDataProvider.swift +++ b/Shared/Persisence/ExtensionDataProvider.swift @@ -1,12 +1,12 @@ // // ExtensionDataProvider.swift -// Feels +// Reflect // // Unified data provider for Widget and Watch extensions. // - Watch: Uses CloudKit for automatic sync with iPhone // - Widget: Uses local App Group storage (widgets can't use CloudKit) // -// Add this file to: FeelsWidgetExtension, Feels Watch App +// Add this file to: ReflectWidgetExtension, Reflect Watch App // import Foundation @@ -22,7 +22,7 @@ final class ExtensionDataProvider { static let shared = ExtensionDataProvider() - private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "ExtensionDataProvider") + private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.88oakapps.reflect", category: "ExtensionDataProvider") private var _container: ModelContainer? @@ -47,9 +47,9 @@ final class ExtensionDataProvider { // Watch uses CloudKit for automatic sync with iPhone let cloudKitContainerID: String #if DEBUG - cloudKitContainerID = "iCloud.com.88oakapps.feels.debug" + cloudKitContainerID = "iCloud.com.88oakapps.reflect.debug" #else - cloudKitContainerID = "iCloud.com.88oakapps.feels" + cloudKitContainerID = "iCloud.com.88oakapps.reflect" #endif let configuration = ModelConfiguration( @@ -89,9 +89,9 @@ final class ExtensionDataProvider { throw NSError(domain: "ExtensionDataProvider", code: 1, userInfo: [NSLocalizedDescriptionKey: "App Group not available"]) } #if DEBUG - return containerURL.appendingPathComponent("Feels-Debug.store") + return containerURL.appendingPathComponent("Reflect-Debug.store") #else - return containerURL.appendingPathComponent("Feels.store") + return containerURL.appendingPathComponent("Reflect.store") #endif } diff --git a/Shared/Persisence/SharedModelContainer.swift b/Shared/Persisence/SharedModelContainer.swift index a3fc649..fb466d5 100644 --- a/Shared/Persisence/SharedModelContainer.swift +++ b/Shared/Persisence/SharedModelContainer.swift @@ -1,6 +1,6 @@ // // SharedModelContainer.swift -// Feels +// Reflect // // Factory for creating ModelContainer shared between main app and widget extension. // @@ -25,7 +25,7 @@ enum SharedModelContainerError: LocalizedError { } enum SharedModelContainer { - private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.tt.feels", category: "SharedModelContainer") + private static let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "com.88oakapps.reflect", category: "SharedModelContainer") /// Indicates whether the app is running with in-memory storage due to a failed App Group container. /// When `true`, all data will be lost on app restart. @@ -116,18 +116,18 @@ enum SharedModelContainer { /// CloudKit container identifier based on build configuration static var cloudKitContainerID: String { #if DEBUG - return "iCloud.com.88oakapps.feels.debug" + return "iCloud.com.88oakapps.reflect.debug" #else - return "iCloud.com.88oakapps.feels" + return "iCloud.com.88oakapps.reflect" #endif } /// Store file name based on build configuration static var storeFileName: String { #if DEBUG - return "Feels-Debug.store" + return "Reflect-Debug.store" #else - return "Feels.store" + return "Reflect.store" #endif } } diff --git a/Shared/Protocols/ChartDataBuildable.swift b/Shared/Protocols/ChartDataBuildable.swift index e41ed6c..c0fd9ab 100644 --- a/Shared/Protocols/ChartDataBuildable.swift +++ b/Shared/Protocols/ChartDataBuildable.swift @@ -1,6 +1,6 @@ // // ChartDataBuildable.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/17/22. // diff --git a/Shared/Protocols/ChartViewItemBuildable.swift b/Shared/Protocols/ChartViewItemBuildable.swift index b7e2f8e..d896ce8 100644 --- a/Shared/Protocols/ChartViewItemBuildable.swift +++ b/Shared/Protocols/ChartViewItemBuildable.swift @@ -1,6 +1,6 @@ // // ChartViewItemBuildable.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/17/22. // diff --git a/Shared/Protocols/SharingTemplate.swift b/Shared/Protocols/SharingTemplate.swift index 334954e..7876c9b 100644 --- a/Shared/Protocols/SharingTemplate.swift +++ b/Shared/Protocols/SharingTemplate.swift @@ -1,6 +1,6 @@ // // SharingTemplate.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/6/22. // diff --git a/Shared/Random.swift b/Shared/Random.swift index 0608f90..c0cecb1 100644 --- a/Shared/Random.swift +++ b/Shared/Random.swift @@ -1,6 +1,6 @@ // // Random.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/9/22. // @@ -10,8 +10,8 @@ import SwiftUI import SwiftData struct Constants { - static let groupShareId = "group.com.88oakapps.feels" - static let groupShareIdDebug = "group.com.88oakapps.feels.debug" + static let groupShareId = "group.com.88oakapps.reflect" + static let groupShareIdDebug = "group.com.88oakapps.reflect.debug" static var currentGroupShareId: String { #if DEBUG diff --git a/Shared/FeelsApp.swift b/Shared/ReflectApp.swift similarity index 96% rename from Shared/FeelsApp.swift rename to Shared/ReflectApp.swift index 258dd4f..9753619 100644 --- a/Shared/FeelsApp.swift +++ b/Shared/ReflectApp.swift @@ -1,5 +1,5 @@ // -// FeelsApp.swift +// ReflectApp.swift // Shared // // Created by Trey Tartt on 1/5/22. @@ -11,7 +11,7 @@ import BackgroundTasks import WidgetKit @main -struct FeelsApp: App { +struct ReflectApp: App { @Environment(\.scenePhase) private var scenePhase @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @@ -38,7 +38,7 @@ struct FeelsApp: App { UNUserNotificationCenter.current().setBadgeCount(0) // Reset tips session on app launch - FeelsTipsManager.shared.resetSession() + ReflectTipsManager.shared.resetSession() // Initialize Live Activity scheduler LiveActivityScheduler.shared.scheduleBasedOnCurrentTime() @@ -59,7 +59,7 @@ struct FeelsApp: App { .environmentObject(authManager) .environmentObject(healthKitManager) .sheet(isPresented: $showSubscriptionFromWidget) { - FeelsSubscriptionStoreView(source: "widget_deeplink") + ReflectSubscriptionStoreView(source: "widget_deeplink") .environmentObject(iapManager) } .onOpenURL { url in @@ -147,7 +147,7 @@ struct FeelsApp: App { } private func handleDeepLink(_ url: URL) { - if url.scheme == "feels" && url.host == "subscribe" { + if url.scheme == "reflect" && url.host == "subscribe" { showSubscriptionFromWidget = true } } diff --git a/Shared/FeelsTips.swift b/Shared/ReflectTips.swift similarity index 75% rename from Shared/FeelsTips.swift rename to Shared/ReflectTips.swift index 4cb3bfd..0593801 100644 --- a/Shared/FeelsTips.swift +++ b/Shared/ReflectTips.swift @@ -1,16 +1,16 @@ // -// FeelsTips.swift -// Feels +// ReflectTips.swift +// Reflect // // Custom tips system for feature discovery and onboarding // import SwiftUI -// MARK: - FeelsTip Protocol +// MARK: - ReflectTip Protocol @MainActor -protocol FeelsTip: Identifiable { +protocol ReflectTip: Identifiable { var id: String { get } var title: String { get } var message: String { get } @@ -21,7 +21,7 @@ protocol FeelsTip: Identifiable { // MARK: - Tip Definitions @MainActor -struct CustomizeLayoutTip: FeelsTip { +struct CustomizeLayoutTip: ReflectTip { let id = "customizeLayout" let title = "Personalize Your Experience" let message = "Customize mood icons, colors, and layouts to make the app truly yours." @@ -30,51 +30,51 @@ struct CustomizeLayoutTip: FeelsTip { } @MainActor -struct AIInsightsTip: FeelsTip { +struct AIInsightsTip: ReflectTip { let id = "aiInsights" let title = "Discover AI Insights" let message = "Get personalized insights about your mood patterns powered by Apple Intelligence." let icon = "brain.head.profile" var isEligible: Bool { - FeelsTipsManager.shared.moodLogCount >= 7 + ReflectTipsManager.shared.moodLogCount >= 7 } } @MainActor -struct SiriShortcutTip: FeelsTip { +struct SiriShortcutTip: ReflectTip { let id = "siriShortcut" let title = "Use Siri to Log Moods" - let message = "Say \"Hey Siri, log my mood as great in Feels\" for hands-free logging." + let message = "Say \"Hey Siri, log my mood as great in Reflect\" for hands-free logging." let icon = "mic.fill" var isEligible: Bool { - FeelsTipsManager.shared.moodLogCount >= 3 + ReflectTipsManager.shared.moodLogCount >= 3 } } @MainActor -struct HealthKitSyncTip: FeelsTip { +struct HealthKitSyncTip: ReflectTip { let id = "healthKitSync" let title = "Sync with Apple Health" let message = "Connect to Apple Health to see your mood data alongside sleep, exercise, and more." let icon = "heart.fill" var isEligible: Bool { - FeelsTipsManager.shared.hasSeenSettings + ReflectTipsManager.shared.hasSeenSettings } } @MainActor -struct WidgetVotingTip: FeelsTip { +struct WidgetVotingTip: ReflectTip { let id = "widgetVoting" let title = "Vote from Your Home Screen" let message = "Add the Mood Vote widget to quickly log your mood without opening the app." let icon = "square.grid.2x2.fill" var isEligible: Bool { - FeelsTipsManager.shared.daysUsingApp >= 2 + ReflectTipsManager.shared.daysUsingApp >= 2 } } @MainActor -struct TimeViewTip: FeelsTip { +struct TimeViewTip: ReflectTip { let id = "timeView" let title = "View Your History" let message = "Switch between Day, Month, and Year views to see your mood patterns over time." @@ -83,20 +83,20 @@ struct TimeViewTip: FeelsTip { } @MainActor -struct MoodStreakTip: FeelsTip { +struct MoodStreakTip: ReflectTip { let id = "moodStreak" let title = "Build Your Streak!" let message = "Log your mood daily to build a streak. Consistency helps you understand your patterns." let icon = "flame.fill" var isEligible: Bool { - FeelsTipsManager.shared.currentStreak >= 3 + ReflectTipsManager.shared.currentStreak >= 3 } } // MARK: - All Tips @MainActor -enum FeelsTips { +enum ReflectTips { static let customizeLayout = CustomizeLayoutTip() static let aiInsights = AIInsightsTip() static let siriShortcut = SiriShortcutTip() @@ -109,21 +109,21 @@ enum FeelsTips { // MARK: - Tips Manager @MainActor -class FeelsTipsManager: ObservableObject { - static let shared = FeelsTipsManager() +class ReflectTipsManager: ObservableObject { + static let shared = ReflectTipsManager() // MARK: - Keys private enum Keys { - static let tipsEnabled = "feels.tips.enabled" - static let shownTipIDs = "feels.tips.shownIDs" - static let moodLogCount = "feels.tips.moodLogCount" - static let hasSeenSettings = "feels.tips.hasSeenSettings" - static let daysUsingApp = "feels.tips.daysUsingApp" - static let currentStreak = "feels.tips.currentStreak" + static let tipsEnabled = "reflect.tips.enabled" + static let shownTipIDs = "reflect.tips.shownIDs" + static let moodLogCount = "reflect.tips.moodLogCount" + static let hasSeenSettings = "reflect.tips.hasSeenSettings" + static let daysUsingApp = "reflect.tips.daysUsingApp" + static let currentStreak = "reflect.tips.currentStreak" } // MARK: - Published State - @Published var currentTip: (any FeelsTip)? + @Published var currentTip: (any ReflectTip)? @Published var showTipModal = false // MARK: - Global Toggle (configurable) @@ -178,7 +178,7 @@ class FeelsTipsManager: ObservableObject { // MARK: - Public API /// Check if a tip should be shown - func shouldShowTip(_ tip: any FeelsTip) -> Bool { + func shouldShowTip(_ tip: any ReflectTip) -> Bool { guard tipsEnabled else { return false } guard !hasShownTipThisSession else { return false } guard !shownTipIDs.contains(tip.id) else { return false } @@ -187,14 +187,14 @@ class FeelsTipsManager: ObservableObject { } /// Show a tip if eligible - func showTipIfEligible(_ tip: any FeelsTip) { + func showTipIfEligible(_ tip: any ReflectTip) { guard shouldShowTip(tip) else { return } currentTip = tip showTipModal = true } /// Mark a tip as shown (called when dismissed) - func markTipAsShown(_ tip: any FeelsTip) { + func markTipAsShown(_ tip: any ReflectTip) { shownTipIDs.insert(tip.id) hasShownTipThisSession = true currentTip = nil @@ -237,8 +237,8 @@ class FeelsTipsManager: ObservableObject { // MARK: - View Modifier for Easy Integration -struct FeelsTipModifier: ViewModifier { - let tip: any FeelsTip +struct ReflectTipModifier: ViewModifier { + let tip: any ReflectTip let gradientColors: [Color] // Use local state for sheet to avoid interference from other manager state changes @@ -255,7 +255,7 @@ struct FeelsTipModifier: ViewModifier { // Delay tip presentation to ensure view hierarchy is fully established // This prevents "presenting from detached view controller" errors DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - if FeelsTipsManager.shared.shouldShowTip(tip) { + if ReflectTipsManager.shared.shouldShowTip(tip) { showSheet = true } } @@ -268,7 +268,7 @@ struct FeelsTipModifier: ViewModifier { gradientColors: gradientColors, onDismiss: { showSheet = false - FeelsTipsManager.shared.markTipAsShown(tip) + ReflectTipsManager.shared.markTipAsShown(tip) } ) .presentationDetents([.height(340)]) @@ -280,8 +280,8 @@ struct FeelsTipModifier: ViewModifier { extension View { /// Attach a tip that shows as a themed modal when eligible - func feelsTip(_ tip: any FeelsTip, gradientColors: [Color]) -> some View { - modifier(FeelsTipModifier(tip: tip, gradientColors: gradientColors)) + func reflectTip(_ tip: any ReflectTip, gradientColors: [Color]) -> some View { + modifier(ReflectTipModifier(tip: tip, gradientColors: gradientColors)) } // MARK: - Convenience Modifiers @@ -292,30 +292,30 @@ extension View { } func customizeLayoutTip() -> some View { - feelsTip(FeelsTips.customizeLayout, gradientColors: [Color(hex: "667eea"), Color(hex: "764ba2")]) + reflectTip(ReflectTips.customizeLayout, gradientColors: [Color(hex: "667eea"), Color(hex: "764ba2")]) } func aiInsightsTip() -> some View { - feelsTip(FeelsTips.aiInsights, gradientColors: [.purple, .blue]) + reflectTip(ReflectTips.aiInsights, gradientColors: [.purple, .blue]) } func siriShortcutTip() -> some View { - feelsTip(FeelsTips.siriShortcut, gradientColors: [Color(hex: "f093fb"), Color(hex: "f5576c")]) + reflectTip(ReflectTips.siriShortcut, gradientColors: [Color(hex: "f093fb"), Color(hex: "f5576c")]) } func healthKitSyncTip() -> some View { - feelsTip(FeelsTips.healthKitSync, gradientColors: [.red, .pink]) + reflectTip(ReflectTips.healthKitSync, gradientColors: [.red, .pink]) } func widgetVotingTip() -> some View { - feelsTip(FeelsTips.widgetVoting, gradientColors: [Color(hex: "11998e"), Color(hex: "38ef7d")]) + reflectTip(ReflectTips.widgetVoting, gradientColors: [Color(hex: "11998e"), Color(hex: "38ef7d")]) } func timeViewTip() -> some View { - feelsTip(FeelsTips.timeView, gradientColors: [.blue, .cyan]) + reflectTip(ReflectTips.timeView, gradientColors: [.blue, .cyan]) } func moodStreakTip() -> some View { - feelsTip(FeelsTips.moodStreak, gradientColors: [.orange, .red]) + reflectTip(ReflectTips.moodStreak, gradientColors: [.orange, .red]) } } diff --git a/Shared/Services/AppLogger.swift b/Shared/Services/AppLogger.swift index 52e130a..3683ae7 100644 --- a/Shared/Services/AppLogger.swift +++ b/Shared/Services/AppLogger.swift @@ -1,6 +1,6 @@ // // AppLogger.swift -// Feels +// Reflect // // Centralized logging using OSLog for production-ready logging. // @@ -29,6 +29,6 @@ enum AppLogger { // MARK: - Private private static var subsystem: String { - Bundle.main.bundleIdentifier ?? "com.tt.feels" + Bundle.main.bundleIdentifier ?? "com.88oakapps.reflect" } } diff --git a/Shared/Services/BiometricAuthManager.swift b/Shared/Services/BiometricAuthManager.swift index 68aefc6..3834f98 100644 --- a/Shared/Services/BiometricAuthManager.swift +++ b/Shared/Services/BiometricAuthManager.swift @@ -1,6 +1,6 @@ // // BiometricAuthManager.swift -// Feels +// Reflect // // Manages Face ID / Touch ID authentication for app privacy lock. // @@ -93,7 +93,7 @@ class BiometricAuthManager: ObservableObject { do { let success = try await context.evaluatePolicy( policy, - localizedReason: "Unlock Feels to access your mood data" + localizedReason: "Unlock Reflect to access your mood data" ) isUnlocked = success @@ -120,7 +120,7 @@ class BiometricAuthManager: ObservableObject { do { let success = try await context.evaluatePolicy( .deviceOwnerAuthentication, - localizedReason: "Unlock Feels to access your mood data" + localizedReason: "Unlock Reflect to access your mood data" ) isUnlocked = success diff --git a/Shared/Services/ExportService.swift b/Shared/Services/ExportService.swift index 139058d..8717335 100644 --- a/Shared/Services/ExportService.swift +++ b/Shared/Services/ExportService.swift @@ -1,6 +1,6 @@ // // ExportService.swift -// Feels +// Reflect // // Handles exporting mood data to CSV and PDF formats with beautiful visualizations. // @@ -76,7 +76,7 @@ class ExportService { func exportCSV(entries: [MoodEntryModel]) -> URL? { let csv = generateCSV(entries: entries) - let filename = "Feels-Export-\(formattedDate()).csv" + let filename = "Reflect-Export-\(formattedDate()).csv" let tempURL = FileManager.default.temporaryDirectory.appendingPathComponent(filename) do { @@ -107,7 +107,7 @@ class ExportService { let contentWidth = pageWidth - (margin * 2) let pdfMetaData = [ - kCGPDFContextCreator: "Feels App", + kCGPDFContextCreator: "Reflect App", kCGPDFContextTitle: title ] @@ -167,7 +167,7 @@ class ExportService { return nil } - let filename = "Feels-Report-\(formattedDate()).pdf" + let filename = "Reflect-Report-\(formattedDate()).pdf" let tempURL = FileManager.default.temporaryDirectory.appendingPathComponent(filename) do { @@ -624,7 +624,7 @@ class ExportService { .font: footerFont, .foregroundColor: UIColor.lightGray ] - let footerString = NSAttributedString(string: "Generated by Feels - Your Mood Tracking Companion", attributes: footerAttributes) + let footerString = NSAttributedString(string: "Generated by Reflect - Your Mood Tracking Companion", attributes: footerAttributes) let footerSize = footerString.size() footerString.draw(at: CGPoint(x: (pageWidth - footerSize.width) / 2, y: footerY)) } diff --git a/Shared/Services/ExportableInsightsViews.swift b/Shared/Services/ExportableInsightsViews.swift index c9e3997..d83c1a5 100644 --- a/Shared/Services/ExportableInsightsViews.swift +++ b/Shared/Services/ExportableInsightsViews.swift @@ -1,6 +1,6 @@ // // ExportableInsightsViews.swift -// Feels +// Reflect // // Exportable insights views with sample AI-generated insights for screenshots. // diff --git a/Shared/Services/ExportableWatchViews.swift b/Shared/Services/ExportableWatchViews.swift index 0382d8d..f8478fa 100644 --- a/Shared/Services/ExportableWatchViews.swift +++ b/Shared/Services/ExportableWatchViews.swift @@ -1,6 +1,6 @@ // // ExportableWatchViews.swift -// Feels +// Reflect // // Exportable watch views that match the real watchOS layouts. // These views accept tint/icon configuration as parameters for batch export. @@ -292,7 +292,7 @@ struct ExportableRectangularComplication: View { .font(.system(size: 24)) VStack(alignment: .leading, spacing: 2) { - Text("Feels") + Text("Reflect") .font(.system(size: 14, weight: .semibold)) Text("Tap to log mood") .font(.system(size: 12)) diff --git a/Shared/Services/ExportableWidgetViews.swift b/Shared/Services/ExportableWidgetViews.swift index 835cb4e..ff6a5a9 100644 --- a/Shared/Services/ExportableWidgetViews.swift +++ b/Shared/Services/ExportableWidgetViews.swift @@ -1,6 +1,6 @@ // // ExportableWidgetViews.swift -// Feels +// Reflect // // Exportable widget views that match the real WidgetKit widgets pixel-for-pixel. // These views accept tint/icon configuration as parameters for batch export. @@ -180,7 +180,7 @@ struct ExportableVotingView: View { } } -// MARK: - Exportable Voted Stats View (matches VotedStatsView from FeelsVoteWidget.swift) +// MARK: - Exportable Voted Stats View (matches VotedStatsView from ReflectVoteWidget.swift) struct ExportableVotedStatsView: View { enum Size { @@ -303,7 +303,7 @@ struct ExportableVotedStatsView: View { } } -// MARK: - Exportable Timeline Small View (matches SmallWidgetView from FeelsTimelineWidget.swift) +// MARK: - Exportable Timeline Small View (matches SmallWidgetView from ReflectTimelineWidget.swift) struct ExportableTimelineSmallView: View { let config: WidgetExportConfig @@ -359,7 +359,7 @@ struct ExportableTimelineSmallView: View { } } -// MARK: - Exportable Timeline Medium View (matches MediumWidgetView from FeelsTimelineWidget.swift) +// MARK: - Exportable Timeline Medium View (matches MediumWidgetView from ReflectTimelineWidget.swift) struct ExportableTimelineMediumView: View { let config: WidgetExportConfig @@ -469,7 +469,7 @@ struct ExportableMediumDayCell: View { } } -// MARK: - Exportable Timeline Large View (matches LargeWidgetView from FeelsTimelineWidget.swift) +// MARK: - Exportable Timeline Large View (matches LargeWidgetView from ReflectTimelineWidget.swift) struct ExportableTimelineLargeView: View { let config: WidgetExportConfig diff --git a/Shared/Services/FoundationModelsInsightService.swift b/Shared/Services/FoundationModelsInsightService.swift index a4ba793..ca0381e 100644 --- a/Shared/Services/FoundationModelsInsightService.swift +++ b/Shared/Services/FoundationModelsInsightService.swift @@ -1,6 +1,6 @@ // // FoundationModelsInsightService.swift -// Feels +// Reflect // // Created by Claude Code on 12/13/24. // @@ -112,7 +112,7 @@ class FoundationModelsInsightService: ObservableObject { private var defaultSystemInstructions: String { """ - You are a supportive mood analyst for the Feels app. Analyze mood data and provide warm, actionable insights. + You are a supportive mood analyst for the Reflect app. Analyze mood data and provide warm, actionable insights. Style: Encouraging, empathetic, concise (1-2 sentences per insight). Reference specific data. diff --git a/Shared/Services/HealthService.swift b/Shared/Services/HealthService.swift index a94fdb1..0bcfa4a 100644 --- a/Shared/Services/HealthService.swift +++ b/Shared/Services/HealthService.swift @@ -1,6 +1,6 @@ // // HealthService.swift -// Feels +// Reflect // // Manages Apple Health integration for mood correlation insights. // diff --git a/Shared/Services/ImageCache.swift b/Shared/Services/ImageCache.swift index 80a4c09..0e03bbf 100644 --- a/Shared/Services/ImageCache.swift +++ b/Shared/Services/ImageCache.swift @@ -1,6 +1,6 @@ // // ImageCache.swift -// Feels +// Reflect // // In-memory image cache for thumbnail images to improve scrolling performance. // @@ -13,7 +13,7 @@ final class ImageCache { static let shared = ImageCache() private let cache = NSCache() - private let queue = DispatchQueue(label: "com.tt.feels.imagecache", qos: .userInitiated) + private let queue = DispatchQueue(label: "com.88oakapps.reflect.imagecache", qos: .userInitiated) private var memoryWarningToken: NSObjectProtocol? diff --git a/Shared/Services/InsightsExporter.swift b/Shared/Services/InsightsExporter.swift index 79df8a4..3fc5f9c 100644 --- a/Shared/Services/InsightsExporter.swift +++ b/Shared/Services/InsightsExporter.swift @@ -1,6 +1,6 @@ // // InsightsExporter.swift -// Feels +// Reflect // // Debug utility to export insights view screenshots with sample AI data. // diff --git a/Shared/Services/MoodDataSummarizer.swift b/Shared/Services/MoodDataSummarizer.swift index be8960b..a60af4d 100644 --- a/Shared/Services/MoodDataSummarizer.swift +++ b/Shared/Services/MoodDataSummarizer.swift @@ -1,6 +1,6 @@ // // MoodDataSummarizer.swift -// Feels +// Reflect // // Created by Claude Code on 12/13/24. // diff --git a/Shared/Services/PhotoManager.swift b/Shared/Services/PhotoManager.swift index d0dabee..86091cd 100644 --- a/Shared/Services/PhotoManager.swift +++ b/Shared/Services/PhotoManager.swift @@ -1,6 +1,6 @@ // // PhotoManager.swift -// Feels +// Reflect // // Manages photo storage for mood entries. // Photos are stored as JPEG files in the app group Documents directory. diff --git a/Shared/Services/ReviewRequestManager.swift b/Shared/Services/ReviewRequestManager.swift index f3e6788..4417f46 100644 --- a/Shared/Services/ReviewRequestManager.swift +++ b/Shared/Services/ReviewRequestManager.swift @@ -1,6 +1,6 @@ // // ReviewRequestManager.swift -// Feels +// Reflect // // Manages in-app review requests using StoreKit. // Follows Apple's guidelines: requests at moments of delight, @@ -28,10 +28,10 @@ final class ReviewRequestManager { // MARK: - UserDefaults Keys private enum Keys: String { - case lastReviewRequestDate = "feels_lastReviewRequestDate" - case totalReviewRequests = "feels_totalReviewRequests" - case totalMoodEntriesLogged = "feels_totalMoodEntriesLogged" - case lastReviewRequestVersion = "feels_lastReviewRequestVersion" + case lastReviewRequestDate = "reflect_lastReviewRequestDate" + case totalReviewRequests = "reflect_totalReviewRequests" + case totalMoodEntriesLogged = "reflect_totalMoodEntriesLogged" + case lastReviewRequestVersion = "reflect_lastReviewRequestVersion" } private init() {} diff --git a/Shared/Services/SharingScreenshotExporter.swift b/Shared/Services/SharingScreenshotExporter.swift index 5f7ca32..ad9675a 100644 --- a/Shared/Services/SharingScreenshotExporter.swift +++ b/Shared/Services/SharingScreenshotExporter.swift @@ -1,6 +1,6 @@ // // SharingScreenshotExporter.swift -// Feels +// Reflect // // Debug utility to export sharing template screenshots. // diff --git a/Shared/Services/WatchConnectivityManager.swift b/Shared/Services/WatchConnectivityManager.swift index 43afc94..1204040 100644 --- a/Shared/Services/WatchConnectivityManager.swift +++ b/Shared/Services/WatchConnectivityManager.swift @@ -1,6 +1,6 @@ // // WatchConnectivityManager.swift -// Feels +// Reflect // // Central coordinator for Watch Connectivity. // Used for immediate UI updates (Live Activity, widget refresh). @@ -18,7 +18,7 @@ final class WatchConnectivityManager: NSObject, ObservableObject { static let shared = WatchConnectivityManager() - private static let logger = Logger(subsystem: "com.tt.feels", category: "WatchConnectivity") + private static let logger = Logger(subsystem: "com.88oakapps.reflect", category: "WatchConnectivity") private var session: WCSession? diff --git a/Shared/Services/WatchExporter.swift b/Shared/Services/WatchExporter.swift index 7f3fc0c..b1d0aed 100644 --- a/Shared/Services/WatchExporter.swift +++ b/Shared/Services/WatchExporter.swift @@ -1,6 +1,6 @@ // // WatchExporter.swift -// Feels +// Reflect // // Debug utility to export all watch view previews to PNG files. // Uses the exportable watch views from ExportableWatchViews.swift. diff --git a/Shared/Services/WidgetExporter.swift b/Shared/Services/WidgetExporter.swift index 01c1455..05ce11c 100644 --- a/Shared/Services/WidgetExporter.swift +++ b/Shared/Services/WidgetExporter.swift @@ -1,6 +1,6 @@ // // WidgetExporter.swift -// Feels +// Reflect // // Debug utility to export all widget previews to PNG files. // Uses the real widget view layouts from ExportableWidgetViews.swift. diff --git a/Shared/SharedMoodIntent.swift b/Shared/SharedMoodIntent.swift index de28be2..65e36ec 100644 --- a/Shared/SharedMoodIntent.swift +++ b/Shared/SharedMoodIntent.swift @@ -1,11 +1,11 @@ // // SharedMoodIntent.swift -// Feels +// Reflect // // Single VoteMoodIntent for all targets. // Main app uses ForegroundContinuableIntent to run widget intents in app process. // -// Add this file to ALL targets: Feels (iOS), FeelsWidgetExtension, Feels Watch App +// Add this file to ALL targets: Reflect (iOS), ReflectWidgetExtension, Reflect Watch App // import AppIntents @@ -72,7 +72,7 @@ extension VoteMoodIntent: ForegroundContinuableIntent {} #if WIDGET_EXTENSION enum WidgetMoodSaver { - private static let logger = Logger(subsystem: "com.tt.feels.widget", category: "WidgetMoodSaver") + private static let logger = Logger(subsystem: "com.88oakapps.reflect.widget", category: "WidgetMoodSaver") private static var cachedContainer: ModelContainer? @MainActor @@ -107,9 +107,9 @@ enum WidgetMoodSaver { } #if DEBUG - let storeURL = containerURL.appendingPathComponent("Feels-Debug.store") + let storeURL = containerURL.appendingPathComponent("Reflect-Debug.store") #else - let storeURL = containerURL.appendingPathComponent("Feels.store") + let storeURL = containerURL.appendingPathComponent("Reflect.store") #endif let config = ModelConfiguration(schema: schema, url: storeURL, cloudKitDatabase: .none) diff --git a/Shared/ShowBasedOnVoteLogics.swift b/Shared/ShowBasedOnVoteLogics.swift index 085ab69..68e74a1 100644 --- a/Shared/ShowBasedOnVoteLogics.swift +++ b/Shared/ShowBasedOnVoteLogics.swift @@ -1,6 +1,6 @@ // // ShowBasedOnVoteLogics.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/17/22. // diff --git a/Shared/Stats.swift b/Shared/Stats.swift index 8f14b51..ec38a1f 100644 --- a/Shared/Stats.swift +++ b/Shared/Stats.swift @@ -1,6 +1,6 @@ // // Stats.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/14/22. // diff --git a/Shared/UITestMode.swift b/Shared/UITestMode.swift index 3289504..1653689 100644 --- a/Shared/UITestMode.swift +++ b/Shared/UITestMode.swift @@ -1,6 +1,6 @@ // // UITestMode.swift -// Feels (iOS) +// Reflect (iOS) // // Handles launch arguments for UI testing mode. // When --ui-testing is passed, the app uses deterministic settings. @@ -78,7 +78,7 @@ enum UITestMode { #if DEBUG IAPManager.shared.bypassSubscription = bypassSubscription // Reset subscription state to discard stale cached state from previous test runs. - // IAPManager.shared was already initialized (as @StateObject in FeelsApp) before + // IAPManager.shared was already initialized (as @StateObject in ReflectApp) before // configureIfNeeded runs, so it may have restored stale subscription data. IAPManager.shared.resetForTesting() #endif diff --git a/Shared/Utilities/AccessibilityHelpers.swift b/Shared/Utilities/AccessibilityHelpers.swift index 2792601..524e4ae 100644 --- a/Shared/Utilities/AccessibilityHelpers.swift +++ b/Shared/Utilities/AccessibilityHelpers.swift @@ -1,6 +1,6 @@ // // AccessibilityHelpers.swift -// Feels +// Reflect // // Accessibility utilities for supporting VoiceOver, Dynamic Type, and Reduce Motion. // diff --git a/Shared/View+Extensions.swift b/Shared/View+Extensions.swift index 0805257..2827c04 100644 --- a/Shared/View+Extensions.swift +++ b/Shared/View+Extensions.swift @@ -1,6 +1,6 @@ // // View+Extensions.swift -// Feels +// Reflect // // Created by Trey Tartt on 7/7/22. // diff --git a/Shared/Views/AddMoodHeaderView.swift b/Shared/Views/AddMoodHeaderView.swift index ee2cb9e..e9f7b24 100644 --- a/Shared/Views/AddMoodHeaderView.swift +++ b/Shared/Views/AddMoodHeaderView.swift @@ -1,6 +1,6 @@ // // AddMoodHeaderView.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/5/22. // diff --git a/Shared/Views/BGView.swift b/Shared/Views/BGView.swift index 13942d3..b36353b 100644 --- a/Shared/Views/BGView.swift +++ b/Shared/Views/BGView.swift @@ -1,6 +1,6 @@ // // IconView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/20/22. // diff --git a/Shared/Views/CelebrationAnimations.swift b/Shared/Views/CelebrationAnimations.swift index 95dfb00..10e3a37 100644 --- a/Shared/Views/CelebrationAnimations.swift +++ b/Shared/Views/CelebrationAnimations.swift @@ -1,6 +1,6 @@ // // CelebrationAnimations.swift -// Feels +// Reflect // // Full-view celebration animations that play after voting. // diff --git a/Shared/Views/CustomIcon/CreateWidgetView.swift b/Shared/Views/CustomIcon/CreateWidgetView.swift index 43c7305..8c2037f 100644 --- a/Shared/Views/CustomIcon/CreateWidgetView.swift +++ b/Shared/Views/CustomIcon/CreateWidgetView.swift @@ -1,6 +1,6 @@ // // CreateIconView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/13/22. // diff --git a/Shared/Views/CustomIcon/IconView.swift b/Shared/Views/CustomIcon/IconView.swift index be1af86..dc5ffe0 100644 --- a/Shared/Views/CustomIcon/IconView.swift +++ b/Shared/Views/CustomIcon/IconView.swift @@ -1,6 +1,6 @@ // // IconView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/20/22. // diff --git a/Shared/Views/CustomIcon/IconViewModel.swift b/Shared/Views/CustomIcon/IconViewModel.swift index db5feb6..1f9c106 100644 --- a/Shared/Views/CustomIcon/IconViewModel.swift +++ b/Shared/Views/CustomIcon/IconViewModel.swift @@ -1,6 +1,6 @@ // // CustomIcon.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/20/22. // diff --git a/Shared/Views/CustomWidget/CustomWidgetModel.swift b/Shared/Views/CustomWidget/CustomWidgetModel.swift index 8bf2510..4bcec9b 100644 --- a/Shared/Views/CustomWidget/CustomWidgetModel.swift +++ b/Shared/Views/CustomWidget/CustomWidgetModel.swift @@ -1,6 +1,6 @@ // // CustomIcon.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/13/22. // diff --git a/Shared/Views/CustomWidget/CustomWidgetView.swift b/Shared/Views/CustomWidget/CustomWidgetView.swift index 30ca9b6..57c5db2 100644 --- a/Shared/Views/CustomWidget/CustomWidgetView.swift +++ b/Shared/Views/CustomWidget/CustomWidgetView.swift @@ -1,6 +1,6 @@ // // IconView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/13/22. // diff --git a/Shared/Views/CustomizeView/CustomizeView.swift b/Shared/Views/CustomizeView/CustomizeView.swift index dbefd6f..6a153a8 100644 --- a/Shared/Views/CustomizeView/CustomizeView.swift +++ b/Shared/Views/CustomizeView/CustomizeView.swift @@ -1,6 +1,6 @@ // // CustomizeView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/19/22. // @@ -189,7 +189,7 @@ struct CustomizeView: View { AnalyticsManager.shared.trackScreen(.customize) }) .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "customize") + ReflectSubscriptionStoreView(source: "customize") } .background( theme.currentTheme.bg diff --git a/Shared/Views/CustomizeView/SubViews/AppThemePickerView.swift b/Shared/Views/CustomizeView/SubViews/AppThemePickerView.swift index 807c38d..023e181 100644 --- a/Shared/Views/CustomizeView/SubViews/AppThemePickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/AppThemePickerView.swift @@ -1,6 +1,6 @@ // // AppThemePickerView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Claude Code on 12/26/24. // diff --git a/Shared/Views/CustomizeView/SubViews/CustomWigetView.swift b/Shared/Views/CustomizeView/SubViews/CustomWigetView.swift index e9acd8a..a79d4f0 100644 --- a/Shared/Views/CustomizeView/SubViews/CustomWigetView.swift +++ b/Shared/Views/CustomizeView/SubViews/CustomWigetView.swift @@ -1,6 +1,6 @@ // // CustomWigetView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // diff --git a/Shared/Views/CustomizeView/SubViews/DayFilterPickerView.swift b/Shared/Views/CustomizeView/SubViews/DayFilterPickerView.swift index bb7807c..80a9c0d 100644 --- a/Shared/Views/CustomizeView/SubViews/DayFilterPickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/DayFilterPickerView.swift @@ -1,6 +1,6 @@ // // DayFilterPickerView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // diff --git a/Shared/Views/CustomizeView/SubViews/IconPickerView.swift b/Shared/Views/CustomizeView/SubViews/IconPickerView.swift index e0af28a..98040f0 100644 --- a/Shared/Views/CustomizeView/SubViews/IconPickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/IconPickerView.swift @@ -1,6 +1,6 @@ // // IconPickerView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // diff --git a/Shared/Views/CustomizeView/SubViews/ImagePackPickerView.swift b/Shared/Views/CustomizeView/SubViews/ImagePackPickerView.swift index e8a5ef9..e279d5a 100644 --- a/Shared/Views/CustomizeView/SubViews/ImagePackPickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/ImagePackPickerView.swift @@ -1,6 +1,6 @@ // // ImagePackPickerView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // diff --git a/Shared/Views/CustomizeView/SubViews/PersonalityPackPickerView.swift b/Shared/Views/CustomizeView/SubViews/PersonalityPackPickerView.swift index 0670992..5b60844 100644 --- a/Shared/Views/CustomizeView/SubViews/PersonalityPackPickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/PersonalityPackPickerView.swift @@ -1,6 +1,6 @@ // // PersonalityPackPickerView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // diff --git a/Shared/Views/CustomizeView/SubViews/ShapePickerView.swift b/Shared/Views/CustomizeView/SubViews/ShapePickerView.swift index 28f1d76..9266249 100644 --- a/Shared/Views/CustomizeView/SubViews/ShapePickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/ShapePickerView.swift @@ -1,6 +1,6 @@ // // ShapePickerView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // diff --git a/Shared/Views/CustomizeView/SubViews/ThemePickerView.swift b/Shared/Views/CustomizeView/SubViews/ThemePickerView.swift index 8efc30b..6201dd7 100644 --- a/Shared/Views/CustomizeView/SubViews/ThemePickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/ThemePickerView.swift @@ -1,6 +1,6 @@ // // ThemePicker.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // diff --git a/Shared/Views/CustomizeView/SubViews/VotingLayoutPickerView.swift b/Shared/Views/CustomizeView/SubViews/VotingLayoutPickerView.swift index 08c453a..9028354 100644 --- a/Shared/Views/CustomizeView/SubViews/VotingLayoutPickerView.swift +++ b/Shared/Views/CustomizeView/SubViews/VotingLayoutPickerView.swift @@ -1,6 +1,6 @@ // // VotingLayoutPickerView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Claude Code on 12/9/24. // diff --git a/Shared/Views/DayChartView.swift b/Shared/Views/DayChartView.swift index 88b550c..61edfb1 100644 --- a/Shared/Views/DayChartView.swift +++ b/Shared/Views/DayChartView.swift @@ -1,6 +1,6 @@ // // CircleView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/13/22. // diff --git a/Shared/Views/DayView/DayViewViewModel.swift b/Shared/Views/DayView/DayViewViewModel.swift index fca5565..99146a1 100644 --- a/Shared/Views/DayView/DayViewViewModel.swift +++ b/Shared/Views/DayView/DayViewViewModel.swift @@ -1,6 +1,6 @@ // // ContentModeViewModel.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/20/22. // diff --git a/Shared/Views/EmptyView.swift b/Shared/Views/EmptyView.swift index fc56da1..cf37c54 100644 --- a/Shared/Views/EmptyView.swift +++ b/Shared/Views/EmptyView.swift @@ -1,6 +1,6 @@ // // EmptyView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/10/22. // diff --git a/Shared/Views/EntryListView.swift b/Shared/Views/EntryListView.swift index 2ddd9cc..4d2b8e2 100644 --- a/Shared/Views/EntryListView.swift +++ b/Shared/Views/EntryListView.swift @@ -1,6 +1,6 @@ // // EntryListView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 3/6/22. // diff --git a/Shared/Views/ExportView.swift b/Shared/Views/ExportView.swift index cf27b14..c1cf8ad 100644 --- a/Shared/Views/ExportView.swift +++ b/Shared/Views/ExportView.swift @@ -1,6 +1,6 @@ // // ExportView.swift -// Feels +// Reflect // // Export mood data to CSV or PDF formats. // @@ -306,7 +306,7 @@ struct ExportView: View { case .csv: url = ExportService.shared.exportCSV(entries: validEntries) case .pdf: - url = ExportService.shared.exportPDF(entries: validEntries, title: "Feels Mood Report") + url = ExportService.shared.exportPDF(entries: validEntries, title: "Reflect Mood Report") } await MainActor.run { diff --git a/Shared/Views/HeaderPercView.swift b/Shared/Views/HeaderPercView.swift index b7ebee2..0674196 100644 --- a/Shared/Views/HeaderPercView.swift +++ b/Shared/Views/HeaderPercView.swift @@ -1,6 +1,6 @@ // // HeaderPercView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/29/22. // diff --git a/Shared/Views/HeaderStatsView.swift b/Shared/Views/HeaderStatsView.swift index 14e626d..e9e0f11 100644 --- a/Shared/Views/HeaderStatsView.swift +++ b/Shared/Views/HeaderStatsView.swift @@ -1,6 +1,6 @@ // // HeaderStatsView.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/8/22. // diff --git a/Shared/Views/IAPWarningView.swift b/Shared/Views/IAPWarningView.swift index cc59923..f716ddc 100644 --- a/Shared/Views/IAPWarningView.swift +++ b/Shared/Views/IAPWarningView.swift @@ -1,6 +1,6 @@ // // IAPWarningView.swift -// Feels +// Reflect // // Trial warning banner shown at bottom of Month/Year views. // @@ -53,7 +53,7 @@ struct IAPWarningView: View { .padding() .background(theme.currentTheme.secondaryBGColor) .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "iap_warning") + ReflectSubscriptionStoreView(source: "iap_warning") } } } diff --git a/Shared/Views/ImagePickerGridView.swift b/Shared/Views/ImagePickerGridView.swift index e99b448..ff30a0e 100644 --- a/Shared/Views/ImagePickerGridView.swift +++ b/Shared/Views/ImagePickerGridView.swift @@ -1,6 +1,6 @@ // // ImagePickerGrid.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 3/12/22. // diff --git a/Shared/Views/InsightsView/InsightsView.swift b/Shared/Views/InsightsView/InsightsView.swift index 4f8c085..96a4c6a 100644 --- a/Shared/Views/InsightsView/InsightsView.swift +++ b/Shared/Views/InsightsView/InsightsView.swift @@ -1,6 +1,6 @@ // // InsightsView.swift -// Feels +// Reflect // // Created by Claude Code on 12/9/24. // @@ -176,7 +176,7 @@ struct InsightsView: View { } } .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "insights_gate") + ReflectSubscriptionStoreView(source: "insights_gate") } .background( theme.currentTheme.bg diff --git a/Shared/Views/InsightsView/InsightsViewModel.swift b/Shared/Views/InsightsView/InsightsViewModel.swift index 03dffce..2ae9a31 100644 --- a/Shared/Views/InsightsView/InsightsViewModel.swift +++ b/Shared/Views/InsightsView/InsightsViewModel.swift @@ -1,6 +1,6 @@ // // InsightsViewModel.swift -// Feels +// Reflect // // Created by Claude Code on 12/9/24. // diff --git a/Shared/Views/LockScreenView.swift b/Shared/Views/LockScreenView.swift index 47228c8..34ebb30 100644 --- a/Shared/Views/LockScreenView.swift +++ b/Shared/Views/LockScreenView.swift @@ -1,6 +1,6 @@ // // LockScreenView.swift -// Feels +// Reflect // // Lock screen shown when privacy lock is enabled and app needs authentication. // Supports multiple themed styles that match app themes. diff --git a/Shared/Views/MainTabView.swift b/Shared/Views/MainTabView.swift index 9a00585..816dfc5 100644 --- a/Shared/Views/MainTabView.swift +++ b/Shared/Views/MainTabView.swift @@ -1,6 +1,6 @@ // // MainTabView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/18/22. // diff --git a/Shared/Views/MonthView/MonthDetailView.swift b/Shared/Views/MonthView/MonthDetailView.swift index 5f24f68..55e75c5 100644 --- a/Shared/Views/MonthView/MonthDetailView.swift +++ b/Shared/Views/MonthView/MonthDetailView.swift @@ -1,6 +1,6 @@ // // MonthDetailView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/18/22. // diff --git a/Shared/Views/MonthView/MonthView.swift b/Shared/Views/MonthView/MonthView.swift index 6acb153..e3c775b 100644 --- a/Shared/Views/MonthView/MonthView.swift +++ b/Shared/Views/MonthView/MonthView.swift @@ -1,6 +1,6 @@ // // HomeViewTwo.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/18/22. // @@ -339,7 +339,7 @@ struct MonthView: View { } } .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "month_gate") + ReflectSubscriptionStoreView(source: "month_gate") } .onAppear(perform: { AnalyticsManager.shared.trackScreen(.month) diff --git a/Shared/Views/NoteEditorView.swift b/Shared/Views/NoteEditorView.swift index 11ada31..931e594 100644 --- a/Shared/Views/NoteEditorView.swift +++ b/Shared/Views/NoteEditorView.swift @@ -1,6 +1,6 @@ // // NoteEditorView.swift -// Feels +// Reflect // // Editor for adding/editing journal notes on mood entries. // diff --git a/Shared/Views/PhotoPickerView.swift b/Shared/Views/PhotoPickerView.swift index 1ef04fa..7013080 100644 --- a/Shared/Views/PhotoPickerView.swift +++ b/Shared/Views/PhotoPickerView.swift @@ -1,6 +1,6 @@ // // PhotoPickerView.swift -// Feels +// Reflect // // Photo picker and gallery for mood entry attachments. // diff --git a/Shared/Views/PurchaseButtonView.swift b/Shared/Views/PurchaseButtonView.swift index a9c6a02..1e7edf7 100644 --- a/Shared/Views/PurchaseButtonView.swift +++ b/Shared/Views/PurchaseButtonView.swift @@ -1,6 +1,6 @@ // // PurchaseButtonView.swift -// Feels +// Reflect // // Subscription status and purchase view for settings. // @@ -32,7 +32,7 @@ struct PurchaseButtonView: View { .background(theme.currentTheme.secondaryBGColor) .cornerRadius(10) .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "purchase_button") + ReflectSubscriptionStoreView(source: "purchase_button") } .manageSubscriptionsSheet(isPresented: $showManageSubscriptions) } diff --git a/Shared/Views/FeelsSubscriptionStoreView.swift b/Shared/Views/ReflectSubscriptionStoreView.swift similarity index 99% rename from Shared/Views/FeelsSubscriptionStoreView.swift rename to Shared/Views/ReflectSubscriptionStoreView.swift index d1e7dc4..1f03b20 100644 --- a/Shared/Views/FeelsSubscriptionStoreView.swift +++ b/Shared/Views/ReflectSubscriptionStoreView.swift @@ -1,6 +1,6 @@ // -// FeelsSubscriptionStoreView.swift -// Feels +// ReflectSubscriptionStoreView.swift +// Reflect // // Premium subscription experience with multiple theme options. // @@ -8,7 +8,7 @@ import SwiftUI import StoreKit -struct FeelsSubscriptionStoreView: View { +struct ReflectSubscriptionStoreView: View { @Environment(\.dismiss) private var dismiss @EnvironmentObject var iapManager: IAPManager @@ -478,7 +478,7 @@ struct EditorialMarketingContent: View { .tracking(8) .foregroundColor(Color(red: 0.4, green: 0.4, blue: 0.45)) - Text("FEELS") + Text("REFLECT") .font(.system(size: 52, weight: .bold, design: .serif)) .tracking(2) .foregroundColor(Color(red: 0.15, green: 0.15, blue: 0.2)) @@ -1761,7 +1761,7 @@ struct CassetteTapeView: View { } // Label - Text("FEELS MIXTAPE") + Text("REFLECT MIXTAPE") .font(.system(size: 8, weight: .bold, design: .monospaced)) .foregroundColor(Color(red: 0.9, green: 0.8, blue: 0.6)) .offset(y: 32) @@ -2373,25 +2373,25 @@ struct SocialProofBadge: View { // MARK: - Preview #Preview("Celestial") { - FeelsSubscriptionStoreView(style: .celestial) + ReflectSubscriptionStoreView(style: .celestial) .environmentObject(IAPManager()) .preferredColorScheme(.dark) } #Preview("Garden") { - FeelsSubscriptionStoreView(style: .garden) + ReflectSubscriptionStoreView(style: .garden) .environmentObject(IAPManager()) .preferredColorScheme(.dark) } #Preview("Neon") { - FeelsSubscriptionStoreView(style: .neon) + ReflectSubscriptionStoreView(style: .neon) .environmentObject(IAPManager()) .preferredColorScheme(.dark) } #Preview("Minimal") { - FeelsSubscriptionStoreView(style: .minimal) + ReflectSubscriptionStoreView(style: .minimal) .environmentObject(IAPManager()) .preferredColorScheme(.light) } diff --git a/Shared/Views/SampleEntryView.swift b/Shared/Views/SampleEntryView.swift index d7fa572..73b5e2a 100644 --- a/Shared/Views/SampleEntryView.swift +++ b/Shared/Views/SampleEntryView.swift @@ -1,6 +1,6 @@ // // SampleEntryView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 4/5/22. // diff --git a/Shared/Views/SettingsView/DebugAnimationSettingsView.swift b/Shared/Views/SettingsView/DebugAnimationSettingsView.swift index 5d2ce71..4e9dfb6 100644 --- a/Shared/Views/SettingsView/DebugAnimationSettingsView.swift +++ b/Shared/Views/SettingsView/DebugAnimationSettingsView.swift @@ -1,6 +1,6 @@ // // DebugAnimationSettingsView.swift -// Feels +// Reflect // // Debug-only view for experimenting with vote celebration animations. // diff --git a/Shared/Views/SettingsView/LiveActivityPreviewView.swift b/Shared/Views/SettingsView/LiveActivityPreviewView.swift index 5431577..67457f3 100644 --- a/Shared/Views/SettingsView/LiveActivityPreviewView.swift +++ b/Shared/Views/SettingsView/LiveActivityPreviewView.swift @@ -1,6 +1,6 @@ // // LiveActivityPreviewView.swift -// Feels +// Reflect // // Preview Live Activity with animated streak counter for promotional videos. // diff --git a/Shared/Views/SettingsView/PaywallPreviewSettingsView.swift b/Shared/Views/SettingsView/PaywallPreviewSettingsView.swift index d9bfc1c..0097714 100644 --- a/Shared/Views/SettingsView/PaywallPreviewSettingsView.swift +++ b/Shared/Views/SettingsView/PaywallPreviewSettingsView.swift @@ -1,6 +1,6 @@ // // PaywallPreviewSettingsView.swift -// Feels +// Reflect // // Debug view for previewing and switching paywall styles. // @@ -38,7 +38,7 @@ struct PaywallPreviewSettingsView: View { } } .sheet(isPresented: $showFullPreview) { - FeelsSubscriptionStoreView(source: "paywall_preview", style: selectedStyle) + ReflectSubscriptionStoreView(source: "paywall_preview", style: selectedStyle) .environmentObject(iapManager) } } diff --git a/Shared/Views/SettingsView/SettingsTabView.swift b/Shared/Views/SettingsView/SettingsTabView.swift index 6a9bc63..20fc229 100644 --- a/Shared/Views/SettingsView/SettingsTabView.swift +++ b/Shared/Views/SettingsView/SettingsTabView.swift @@ -1,6 +1,6 @@ // // SettingsTabView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 12/13/25. // @@ -76,7 +76,7 @@ struct SettingsTabView: View { WhyUpgradeView() } .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "settings_tab") + ReflectSubscriptionStoreView(source: "settings_tab") .environmentObject(iapManager) } } diff --git a/Shared/Views/SettingsView/SettingsView.swift b/Shared/Views/SettingsView/SettingsView.swift index 9699480..8a3cbef 100644 --- a/Shared/Views/SettingsView/SettingsView.swift +++ b/Shared/Views/SettingsView/SettingsView.swift @@ -1,6 +1,6 @@ // // SettingsView.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/8/22. // @@ -109,7 +109,7 @@ struct SettingsContentView: View { } .onAppear(perform: { AnalyticsManager.shared.trackScreen(.settings) - FeelsTipsManager.shared.onSettingsViewed() + ReflectTipsManager.shared.onSettingsViewed() }) } @@ -953,7 +953,7 @@ struct SettingsContentView: View { .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) .healthKitSyncTip() .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "settings") + ReflectSubscriptionStoreView(source: "settings") } } @@ -1078,7 +1078,7 @@ struct SettingsContentView: View { Text("Share Analytics") .foregroundColor(textColor) - Text("Help improve Feels by sharing anonymous usage data") + Text("Help improve Reflect by sharing anonymous usage data") .font(.caption) .foregroundStyle(.secondary) } @@ -1520,7 +1520,7 @@ struct SettingsView: View { .background(theme.currentTheme.secondaryBGColor) .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "settings") + ReflectSubscriptionStoreView(source: "settings") } } @@ -1795,7 +1795,7 @@ struct SettingsView: View { Text("Share Analytics") .foregroundColor(textColor) - Text("Help improve Feels by sharing anonymous usage data") + Text("Help improve Reflect by sharing anonymous usage data") .font(.caption) .foregroundStyle(.secondary) } diff --git a/Shared/Views/Sharing/SharingListView.swift b/Shared/Views/Sharing/SharingListView.swift index 7a10744..a1a710a 100644 --- a/Shared/Views/Sharing/SharingListView.swift +++ b/Shared/Views/Sharing/SharingListView.swift @@ -1,6 +1,6 @@ // // SharingView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/6/22. // diff --git a/Shared/Views/Sharing/SharingStylePickerView.swift b/Shared/Views/Sharing/SharingStylePickerView.swift index 522e413..9e5a2d1 100644 --- a/Shared/Views/Sharing/SharingStylePickerView.swift +++ b/Shared/Views/Sharing/SharingStylePickerView.swift @@ -1,6 +1,6 @@ // // SharingStylePickerView.swift -// Feels +// Reflect // // A horizontal pager that lets users swipe between design variations // for a sharing template, then export the selected design. diff --git a/Shared/Views/SharingTemplates/AllMoodsTotalTemplate.swift b/Shared/Views/SharingTemplates/AllMoodsTotalTemplate.swift index 1a91ecc..15c3b65 100644 --- a/Shared/Views/SharingTemplates/AllMoodsTotalTemplate.swift +++ b/Shared/Views/SharingTemplates/AllMoodsTotalTemplate.swift @@ -1,6 +1,6 @@ // // AllMoods.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/6/22. // diff --git a/Shared/Views/SharingTemplates/CurrentStreakTemplate.swift b/Shared/Views/SharingTemplates/CurrentStreakTemplate.swift index 14ee72e..33a77f2 100644 --- a/Shared/Views/SharingTemplates/CurrentStreakTemplate.swift +++ b/Shared/Views/SharingTemplates/CurrentStreakTemplate.swift @@ -1,6 +1,6 @@ // // CurrentStreakTemplate.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/9/22. // diff --git a/Shared/Views/SharingTemplates/LongestStreakTemplate.swift b/Shared/Views/SharingTemplates/LongestStreakTemplate.swift index 335f39a..a2859b0 100644 --- a/Shared/Views/SharingTemplates/LongestStreakTemplate.swift +++ b/Shared/Views/SharingTemplates/LongestStreakTemplate.swift @@ -1,6 +1,6 @@ // // AllMoods.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/6/22. // diff --git a/Shared/Views/SharingTemplates/MonthTotalTemplate.swift b/Shared/Views/SharingTemplates/MonthTotalTemplate.swift index 5e07e1a..7022f25 100644 --- a/Shared/Views/SharingTemplates/MonthTotalTemplate.swift +++ b/Shared/Views/SharingTemplates/MonthTotalTemplate.swift @@ -1,6 +1,6 @@ // // MonthTotalTemplate.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/9/22. // diff --git a/Shared/Views/SharingTemplates/Variations/AllMoodsVariations.swift b/Shared/Views/SharingTemplates/Variations/AllMoodsVariations.swift index 11cd6fc..25fd894 100644 --- a/Shared/Views/SharingTemplates/Variations/AllMoodsVariations.swift +++ b/Shared/Views/SharingTemplates/Variations/AllMoodsVariations.swift @@ -1,6 +1,6 @@ // // AllMoodsVariations.swift -// Feels +// Reflect // // 3 design variations for the All Moods Total sharing template. // @@ -106,13 +106,13 @@ struct AllMoodsV2: View { Spacer().frame(height: 50) VStack(spacing: 10) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 96, height: 96) .clipShape(RoundedRectangle(cornerRadius: 22)) - Text("Feels") + Text("Reflect") .font(.system(size: 28, weight: .semibold, design: .rounded)) .foregroundColor(Color(hex: "8B5E3C").opacity(0.4)) } @@ -192,13 +192,13 @@ struct AllMoodsV5: View { Color(hex: "1C1C1E") VStack(spacing: 10) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 96, height: 96) .clipShape(RoundedRectangle(cornerRadius: 22)) - Text("Feels") + Text("Reflect") .font(.system(size: 28, weight: .bold, design: .rounded)) .foregroundColor(.white.opacity(0.3)) } diff --git a/Shared/Views/SharingTemplates/Variations/CurrentStreakVariations.swift b/Shared/Views/SharingTemplates/Variations/CurrentStreakVariations.swift index 3f6007f..167dc67 100644 --- a/Shared/Views/SharingTemplates/Variations/CurrentStreakVariations.swift +++ b/Shared/Views/SharingTemplates/Variations/CurrentStreakVariations.swift @@ -1,6 +1,6 @@ // // CurrentStreakVariations.swift -// Feels +// Reflect // // 2 design variations for the Current Streak (Last 10 Days) sharing template. // @@ -90,13 +90,13 @@ struct CurrentStreakV2: View { Spacer() VStack(spacing: 10) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 96, height: 96) .clipShape(RoundedRectangle(cornerRadius: 22)) - Text("Feels") + Text("Reflect") .font(.system(size: 28, weight: .semibold, design: .rounded)) .foregroundColor(Color(hex: "8B5E3C").opacity(0.4)) } @@ -188,13 +188,13 @@ struct CurrentStreakV5: View { // Footer VStack(spacing: 10) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 96, height: 96) .clipShape(RoundedRectangle(cornerRadius: 22)) - Text("Feels") + Text("Reflect") .font(.system(size: 28, weight: .bold, design: .rounded)) .foregroundColor(.white.opacity(0.3)) } diff --git a/Shared/Views/SharingTemplates/Variations/LongestStreakVariations.swift b/Shared/Views/SharingTemplates/Variations/LongestStreakVariations.swift index f868d6c..4161b15 100644 --- a/Shared/Views/SharingTemplates/Variations/LongestStreakVariations.swift +++ b/Shared/Views/SharingTemplates/Variations/LongestStreakVariations.swift @@ -1,6 +1,6 @@ // // LongestStreakVariations.swift -// Feels +// Reflect // // 2 design variations for the Longest Streak sharing template. // @@ -111,13 +111,13 @@ struct LongestStreakV2: View { Spacer() VStack(spacing: 6) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 72, height: 72) .clipShape(RoundedRectangle(cornerRadius: 16)) - Text("Feels") + Text("Reflect") .font(.system(size: 22, weight: .medium, design: .rounded)) .foregroundColor(Color(hex: "8B5E3C").opacity(0.4)) } @@ -217,13 +217,13 @@ struct LongestStreakV3: View { } VStack(spacing: 6) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 72, height: 72) .clipShape(RoundedRectangle(cornerRadius: 16)) - Text("Feels") + Text("Reflect") .font(.system(size: 22, weight: .medium)) .foregroundColor(Color(hex: "3A3A4A")) } diff --git a/Shared/Views/SharingTemplates/Variations/MonthTotalVariations.swift b/Shared/Views/SharingTemplates/Variations/MonthTotalVariations.swift index 3deb837..cf72c1b 100644 --- a/Shared/Views/SharingTemplates/Variations/MonthTotalVariations.swift +++ b/Shared/Views/SharingTemplates/Variations/MonthTotalVariations.swift @@ -1,6 +1,6 @@ // // MonthTotalVariations.swift -// Feels +// Reflect // // 3 design variations for the Month Total sharing template. // @@ -93,13 +93,13 @@ struct MonthTotalV1: View { Spacer() VStack(spacing: 10) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 96, height: 96) .clipShape(RoundedRectangle(cornerRadius: 22)) - Text("Feels") + Text("Reflect") .font(.system(size: 28, weight: .medium, design: .rounded)) .foregroundColor(Color(hex: "C7C7CC")) } @@ -200,13 +200,13 @@ struct MonthTotalV5: View { Color(hex: "1C1C1E") VStack(spacing: 10) { - Image("FeelsAppIcon") + Image("ReflectAppIcon") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 96, height: 96) .clipShape(RoundedRectangle(cornerRadius: 22)) - Text("Feels") + Text("Reflect") .font(.system(size: 28, weight: .bold, design: .rounded)) .foregroundColor(.white.opacity(0.3)) } diff --git a/Shared/Views/SharingTemplates/WeekTotalTemplate.swift b/Shared/Views/SharingTemplates/WeekTotalTemplate.swift index f4c65ec..34ad908 100644 --- a/Shared/Views/SharingTemplates/WeekTotalTemplate.swift +++ b/Shared/Views/SharingTemplates/WeekTotalTemplate.swift @@ -1,6 +1,6 @@ // // WeekTotalTemplate.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 2/9/22. // diff --git a/Shared/Views/SmallRollUpHeaderView.swift b/Shared/Views/SmallRollUpHeaderView.swift index 30781d1..b8c58da 100644 --- a/Shared/Views/SmallRollUpHeaderView.swift +++ b/Shared/Views/SmallRollUpHeaderView.swift @@ -1,6 +1,6 @@ // // SmallHeaderView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/28/22. // diff --git a/Shared/Views/SwitchableView.swift b/Shared/Views/SwitchableView.swift index 0207372..9f4acef 100644 --- a/Shared/Views/SwitchableView.swift +++ b/Shared/Views/SwitchableView.swift @@ -1,6 +1,6 @@ // // SwitchableView.swift -// Feels (iOS) +// Reflect (iOS) // // Created by Trey Tartt on 1/30/22. // diff --git a/Shared/Views/TipModalView.swift b/Shared/Views/TipModalView.swift index ef04751..2d2f776 100644 --- a/Shared/Views/TipModalView.swift +++ b/Shared/Views/TipModalView.swift @@ -1,6 +1,6 @@ // // TipModalView.swift -// Feels +// Reflect // // Custom tip modal that adapts to the user's chosen theme // @@ -250,14 +250,14 @@ struct TipsPreviewView: View { @Environment(\.dismiss) private var dismiss @State private var selectedTipIndex: Int? - private let allTips: [(tip: any FeelsTip, colors: [Color], rule: String)] = [ - (FeelsTips.customizeLayout, [Color(hex: "667eea"), Color(hex: "764ba2")], "Always eligible"), - (FeelsTips.aiInsights, [.purple, .blue], "moodLogCount >= 7"), - (FeelsTips.siriShortcut, [Color(hex: "f093fb"), Color(hex: "f5576c")], "moodLogCount >= 3"), - (FeelsTips.healthKitSync, [.red, .pink], "hasSeenSettings == true"), - (FeelsTips.widgetVoting, [Color(hex: "11998e"), Color(hex: "38ef7d")], "daysUsingApp >= 2"), - (FeelsTips.timeView, [.blue, .cyan], "Always eligible"), - (FeelsTips.moodStreak, [.orange, .red], "currentStreak >= 3") + private let allTips: [(tip: any ReflectTip, colors: [Color], rule: String)] = [ + (ReflectTips.customizeLayout, [Color(hex: "667eea"), Color(hex: "764ba2")], "Always eligible"), + (ReflectTips.aiInsights, [.purple, .blue], "moodLogCount >= 7"), + (ReflectTips.siriShortcut, [Color(hex: "f093fb"), Color(hex: "f5576c")], "moodLogCount >= 3"), + (ReflectTips.healthKitSync, [.red, .pink], "hasSeenSettings == true"), + (ReflectTips.widgetVoting, [Color(hex: "11998e"), Color(hex: "38ef7d")], "daysUsingApp >= 2"), + (ReflectTips.timeView, [.blue, .cyan], "Always eligible"), + (ReflectTips.moodStreak, [.orange, .red], "currentStreak >= 3") ] var body: some View { @@ -317,24 +317,24 @@ struct TipsPreviewView: View { Section { Button("Reset All Tips") { - FeelsTipsManager.shared.resetAllTips() + ReflectTipsManager.shared.resetAllTips() } .foregroundColor(.red) Toggle("Tips Enabled", isOn: Binding( - get: { FeelsTipsManager.shared.tipsEnabled }, - set: { FeelsTipsManager.shared.tipsEnabled = $0 } + get: { ReflectTipsManager.shared.tipsEnabled }, + set: { ReflectTipsManager.shared.tipsEnabled = $0 } )) } header: { Text("Settings") } Section { - LabeledContent("Mood Log Count", value: "\(FeelsTipsManager.shared.moodLogCount)") - LabeledContent("Days Using App", value: "\(FeelsTipsManager.shared.daysUsingApp)") - LabeledContent("Current Streak", value: "\(FeelsTipsManager.shared.currentStreak)") - LabeledContent("Has Seen Settings", value: FeelsTipsManager.shared.hasSeenSettings ? "Yes" : "No") - LabeledContent("Shown This Session", value: FeelsTipsManager.shared.hasShownTipThisSession ? "Yes" : "No") + LabeledContent("Mood Log Count", value: "\(ReflectTipsManager.shared.moodLogCount)") + LabeledContent("Days Using App", value: "\(ReflectTipsManager.shared.daysUsingApp)") + LabeledContent("Current Streak", value: "\(ReflectTipsManager.shared.currentStreak)") + LabeledContent("Has Seen Settings", value: ReflectTipsManager.shared.hasSeenSettings ? "Yes" : "No") + LabeledContent("Shown This Session", value: ReflectTipsManager.shared.hasShownTipThisSession ? "Yes" : "No") } header: { Text("Current Parameters") } diff --git a/Shared/Views/YearView/YearView.swift b/Shared/Views/YearView/YearView.swift index 43ec8ae..6bda27b 100644 --- a/Shared/Views/YearView/YearView.swift +++ b/Shared/Views/YearView/YearView.swift @@ -1,6 +1,6 @@ // // FilterView.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/12/22. // @@ -275,7 +275,7 @@ struct YearView: View { } } .sheet(isPresented: $showSubscriptionStore) { - FeelsSubscriptionStoreView(source: "year_gate") + ReflectSubscriptionStoreView(source: "year_gate") } .sheet(item: $sharePickerData) { data in SharingStylePickerView(title: data.title, designs: data.designs) diff --git a/Shared/Views/YearView/YearViewModel.swift b/Shared/Views/YearView/YearViewModel.swift index 6c83bc4..f1b0e5a 100644 --- a/Shared/Views/YearView/YearViewModel.swift +++ b/Shared/Views/YearView/YearViewModel.swift @@ -1,6 +1,6 @@ // // FilterViewModel.swift -// Feels +// Reflect // // Created by Trey Tartt on 1/17/22. // diff --git a/Tests iOS/DeepLinkTests.swift b/Tests iOS/DeepLinkTests.swift index 809b691..7cbcb02 100644 --- a/Tests iOS/DeepLinkTests.swift +++ b/Tests iOS/DeepLinkTests.swift @@ -22,7 +22,7 @@ final class DeepLinkTests: BaseUITestCase { ) // Send a malformed deep link - let malformedURL = URL(string: "feels://invalidpath")! + let malformedURL = URL(string: "reflect://invalidpath")! app.open(malformedURL) // App should still be running and responsive — verify Day tab still exists @@ -41,7 +41,7 @@ final class DeepLinkTests: BaseUITestCase { captureScreenshot(name: "deeplink_malformed_no_crash") } - /// TC-125: feels://subscribe opens subscription view. + /// TC-125: reflect://subscribe opens subscription view. func testDeepLink_Subscribe_OpensPaywall() { // Verify app launched let tabBar = TabBarScreen(app: app) @@ -53,13 +53,13 @@ final class DeepLinkTests: BaseUITestCase { captureScreenshot(name: "deeplink_before_subscribe") // Send subscribe deep link - let subscribeURL = URL(string: "feels://subscribe")! + let subscribeURL = URL(string: "reflect://subscribe")! app.open(subscribeURL) // Subscription view should appear as a sheet. // Look for common subscription UI elements. let subscribeText = app.staticTexts.matching( - NSPredicate(format: "label CONTAINS[c] 'subscribe' OR label CONTAINS[c] 'premium' OR label CONTAINS[c] 'upgrade' OR label CONTAINS[c] 'Feels+'") + NSPredicate(format: "label CONTAINS[c] 'subscribe' OR label CONTAINS[c] 'premium' OR label CONTAINS[c] 'upgrade' OR label CONTAINS[c] 'Reflect+'") ).firstMatch let found = subscribeText.waitForExistence(timeout: 8) @@ -67,7 +67,7 @@ final class DeepLinkTests: BaseUITestCase { captureScreenshot(name: "deeplink_subscribe_result") XCTAssertTrue(found, - "Subscription view should appear after feels://subscribe deep link" + "Subscription view should appear after reflect://subscribe deep link" ) } } diff --git a/Tests iOS/PremiumCustomizationTests.swift b/Tests iOS/PremiumCustomizationTests.swift index 9452380..828befe 100644 --- a/Tests iOS/PremiumCustomizationTests.swift +++ b/Tests iOS/PremiumCustomizationTests.swift @@ -58,7 +58,7 @@ final class PremiumCustomizationTests: BaseUITestCase { // Verify the subscription sheet appears — look for common subscription // sheet elements (subscription store view or paywall content). - // The FeelsSubscriptionStoreView should appear as a sheet. + // The ReflectSubscriptionStoreView should appear as a sheet. // Give extra time for StoreKit to load products. let subscriptionSheet = app.otherElements.firstMatch _ = subscriptionSheet.waitForExistence(timeout: 5) diff --git a/Tests iOS/Tests_iOS.swift b/Tests iOS/Tests_iOS.swift index 1defeed..f9eeff2 100644 --- a/Tests iOS/Tests_iOS.swift +++ b/Tests iOS/Tests_iOS.swift @@ -7,7 +7,7 @@ import XCTest -// Local copy — UI test target cannot @testable import Feels +// Local copy — UI test target cannot @testable import Reflect private extension Date { static func dates(from fromDate: Date, toDate: Date, includingToDate: Bool = false) -> [Date] { var dates: [Date] = [] diff --git a/docs/ASO-Keywords.md b/docs/ASO-Keywords.md index 88f1ca1..a433888 100644 --- a/docs/ASO-Keywords.md +++ b/docs/ASO-Keywords.md @@ -1,4 +1,4 @@ -# Feels App - Keyword Research & Strategy +# Reflect App - Keyword Research & Strategy ## iOS App Store Keyword Strategy @@ -196,7 +196,7 @@ diario,humor,emocoes,bem-estar,ansiedade,rastreador,saude mental,sentimentos,hab Based on analysis of Daylio, Moodistory, and Moodnotes: -| Keyword | Daylio | Moodistory | Feels Opportunity | +| Keyword | Daylio | Moodistory | Reflect Opportunity | |---------|--------|------------|-------------------| | mood tracker | #1 | #8 | Target Top 10 | | mood journal | #2 | #5 | Target Top 10 | @@ -209,7 +209,7 @@ Based on analysis of Daylio, Moodistory, and Moodnotes: ### Blue Ocean Keywords (Low Competition) -These keywords have low competition and Feels can potentially rank quickly: +These keywords have low competition and Reflect can potentially rank quickly: 1. **live activity mood** - No major competitors 2. **mood streak tracker** - Unique positioning diff --git a/docs/ASO-Metadata.md b/docs/ASO-Metadata.md index cb76828..82e0203 100644 --- a/docs/ASO-Metadata.md +++ b/docs/ASO-Metadata.md @@ -1,11 +1,11 @@ -# Feels App - Optimized App Store Metadata +# Reflect App - Optimized App Store Metadata ## App Name Options ### iOS App Store Constraints - **Character Limit**: 30 characters - **Best Practice**: Brand + Primary Keyword -- **Current Name**: iFeels / Feels +- **Current Name**: Reflect --- @@ -13,7 +13,7 @@ #### Primary Recommendation ``` -Feels: Mood Tracker & Journal +Reflect: Mood Tracker & Journal ``` **Characters**: 28/30 **Rationale**: Includes brand, primary keyword (mood tracker), and secondary keyword (journal) @@ -22,11 +22,11 @@ Feels: Mood Tracker & Journal | Option | Characters | Pros | Cons | |--------|------------|------|------| -| `Feels - Daily Mood Tracker` | 26 | Clear value prop | Less unique | -| `Feels: Mood Diary & Streak` | 27 | Highlights streak feature | "Diary" less searched than "tracker" | -| `Feels - Mood Journal` | 20 | Simple, clean | Missing "tracker" keyword | -| `Feels: Track Your Mood` | 23 | Action-oriented | Generic phrasing | -| `Feels - Mood & Wellness Log` | 28 | Wellness angle | May be too broad | +| `Reflect - Daily Mood Tracker` | 26 | Clear value prop | Less unique | +| `Reflect: Mood Diary & Streak` | 27 | Highlights streak feature | "Diary" less searched than "tracker" | +| `Reflect - Mood Journal` | 20 | Simple, clean | Missing "tracker" keyword | +| `Reflect: Track Your Mood` | 23 | Action-oriented | Generic phrasing | +| `Reflect - Mood & Wellness Log` | 28 | Wellness angle | May be too broad | --- @@ -101,9 +101,9 @@ Take care of your mental health one day at a time. Track moods from Lock Screen ``` Understand your emotions. One tap at a time. -Feels makes mood tracking effortless. Log how you're feeling in just one second from your Lock Screen, Widget, Apple Watch, Control Center, or through Siri. No friction, no complicated forms - just quick check-ins that build into powerful insights. +Reflect makes mood tracking effortless. Log how you're feeling in just one second from your Lock Screen, Widget, Apple Watch, Control Center, or through Siri. No friction, no complicated forms - just quick check-ins that build into powerful insights. -WHY FEELS? +WHY REFLECT? Log Moods From Anywhere - Live Activity on your Lock Screen @@ -148,7 +148,7 @@ FEATURES AT A GLANCE START YOUR WELLNESS JOURNEY -Download Feels today and take the first step toward understanding your emotional patterns. Whether you're tracking for mental wellness, building better habits, or simply curious about your emotional life - Feels is your companion. +Download Reflect today and take the first step toward understanding your emotional patterns. Whether you're tracking for mental wellness, building better habits, or simply curious about your emotional life - Reflect is your companion. Premium Subscription: - Unlock all customization options @@ -165,7 +165,7 @@ Questions or feedback? We'd love to hear from you! ### German (DE) -**Title**: `Feels: Stimmungstracker` +**Title**: `Reflect: Stimmungstracker` **Subtitle**: `Widget, Streaks & Tagebuch` **Promotional Text**: ``` @@ -174,7 +174,7 @@ Tracke deine Stimmung in Sekunden - vom Sperrbildschirm, Widget oder der Apple W ### Spanish (ES) -**Title**: `Feels: Estado de Animo` +**Title**: `Reflect: Estado de Animo` **Subtitle**: `Widget, Rachas y Diario` **Promotional Text**: ``` @@ -183,7 +183,7 @@ Registra tu estado de animo en segundos desde cualquier lugar - pantalla de bloq ### French (FR) -**Title**: `Feels: Suivi d'Humeur` +**Title**: `Reflect: Suivi d'Humeur` **Subtitle**: `Widget, Series et Journal` **Promotional Text**: ``` @@ -192,7 +192,7 @@ Suivez votre humeur en quelques secondes depuis l'ecran de verrouillage, le widg ### Japanese (JA) -**Title**: `Feels: 気分トラッカー` +**Title**: `Reflect: 気分トラッカー` **Subtitle**: `ウィジェット&日記` **Promotional Text**: ``` @@ -201,7 +201,7 @@ Suivez votre humeur en quelques secondes depuis l'ecran de verrouillage, le widg ### Korean (KO) -**Title**: `Feels: 기분 트래커` +**Title**: `Reflect: 기분 트래커` **Subtitle**: `위젯, 연속기록 및 일기` **Promotional Text**: ``` @@ -210,7 +210,7 @@ Suivez votre humeur en quelques secondes depuis l'ecran de verrouillage, le widg ### Portuguese - Brazil (PT-BR) -**Title**: `Feels: Rastreador Humor` +**Title**: `Reflect: Rastreador Humor` **Subtitle**: `Widget, Sequencias e Diario` **Promotional Text**: ``` @@ -224,7 +224,7 @@ Registre seu humor em segundos de qualquer lugar - tela de bloqueio, widget ou A ### Version 1.0.2 Template ``` -Thank you for using Feels! +Thank you for using Reflect! This update includes: - Improved widget layout for small size @@ -235,7 +235,7 @@ This update includes: - Better text contrast for mood colors - Full-screen theme preview -We're constantly improving Feels based on your feedback. If you enjoy the app, please consider leaving a review - it helps others discover us! +We're constantly improving Reflect based on your feedback. If you enjoy the app, please consider leaving a review - it helps others discover us! ``` --- @@ -243,8 +243,8 @@ We're constantly improving Feels based on your feedback. If you enjoy the app, p ## A/B Testing Priorities ### Test 1: App Name -- A: `Feels: Mood Tracker & Journal` -- B: `Feels - Daily Mood Tracker` +- A: `Reflect: Mood Tracker & Journal` +- B: `Reflect - Daily Mood Tracker` ### Test 2: Subtitle - A: `Widget, Streaks & Live Activity` diff --git a/docs/ASO-Strategy.md b/docs/ASO-Strategy.md index 52efdf5..ead8e6f 100644 --- a/docs/ASO-Strategy.md +++ b/docs/ASO-Strategy.md @@ -1,8 +1,8 @@ -# Feels App - App Store Optimization Strategy +# Reflect App - App Store Optimization Strategy ## Executive Summary -Feels is a mood tracking app for iOS, watchOS, and macOS with strong differentiating features including Live Activities, customizable widgets, multiple entry points (Siri, Control Center, Watch), streak tracking, and journaling capabilities. This document outlines a comprehensive ASO strategy to maximize organic visibility and conversions. +Reflect is a mood tracking app for iOS, watchOS, and macOS with strong differentiating features including Live Activities, customizable widgets, multiple entry points (Siri, Control Center, Watch), streak tracking, and journaling capabilities. This document outlines a comprehensive ASO strategy to maximize organic visibility and conversions. --- @@ -25,8 +25,8 @@ Feels is a mood tracking app for iOS, watchOS, and macOS with strong differentia ### Current Positioning -- **App Name**: iFeels / Feels -- **Bundle ID**: com.tt.ifeel +- **App Name**: Reflect +- **Bundle ID**: com.88oakapps.reflect - **Version**: 1.0.2 - **Monetization**: Subscription ($0.99/month or $9.99/year) @@ -36,7 +36,7 @@ Feels is a mood tracking app for iOS, watchOS, and macOS with strong differentia ### Direct Competitors -| App | Key Strength | Weakness vs. Feels | +| App | Key Strength | Weakness vs. Reflect | |-----|-------------|-------------------| | Daylio | Market leader, no-typing interface | No Live Activities, limited customization | | Moodistory | Beautiful design, PDF export | Less entry points | @@ -44,7 +44,7 @@ Feels is a mood tracking app for iOS, watchOS, and macOS with strong differentia | Reflectly | AI journaling | Heavy on journaling, less on tracking | | Bearable | Comprehensive health tracking | Overwhelming for simple mood tracking | -### Competitive Advantages of Feels +### Competitive Advantages of Reflect 1. **Live Activities** - Unique differentiator (few/no competitors have this) 2. **Control Center integration** - Fastest logging possible diff --git a/docs/ASO-Visual-Assets.md b/docs/ASO-Visual-Assets.md index 5f89614..e10fd72 100644 --- a/docs/ASO-Visual-Assets.md +++ b/docs/ASO-Visual-Assets.md @@ -1,4 +1,4 @@ -# Feels App - Visual Asset Optimization Guide +# Reflect App - Visual Asset Optimization Guide ## Overview @@ -100,7 +100,7 @@ Visual assets account for a significant portion of App Store conversion. This gu **Goal**: Showcase ecosystem integration **Visual Elements**: -- Apple Watch showing the Feels app +- Apple Watch showing the Reflect app - Mood logging interface on watch - iPhone optional in background - Caption: "Log moods from your wrist" @@ -180,7 +180,7 @@ Visual assets account for a significant portion of App Store conversion. This gu ``` [0-3s] -Visual: Feels logo animates in +Visual: Reflect logo animates in Text: "Track moods in seconds" [3-8s] @@ -201,7 +201,7 @@ Text: "Make it yours" [22-25s] Visual: App icon with download CTA -Text: "Download Feels today" +Text: "Download Reflect today" ``` ### Audio Recommendations @@ -231,7 +231,7 @@ The app likely uses a mood-related icon. Key considerations: |---------|-------------|-----------------| | A | Abstract smiley face | Broad appeal | | B | Gradient orb/circle | Modern/minimal | -| C | "F" with mood colors | Brand-focused | +| C | "R" with mood colors | Brand-focused | | D | Calendar with mood | Feature-focused | ### Color Psychology diff --git a/docs/AppStoreScreens.pxd b/docs/AppStoreScreens.pxd index 2c20217..a98462f 100644 Binary files a/docs/AppStoreScreens.pxd and b/docs/AppStoreScreens.pxd differ diff --git a/docs/Apple-Features.md b/docs/Apple-Features.md index 79b64b4..a7345d0 100644 --- a/docs/Apple-Features.md +++ b/docs/Apple-Features.md @@ -1,30 +1,30 @@ # Apple Platform Features -This document covers the new Apple-specific features integrated into Feels, including how to trigger and test each one. +This document covers the new Apple-specific features integrated into Reflect, including how to trigger and test each one. --- ## 1. Control Center Widget -**File:** `FeelsWidget2/FeelsWidget.swift` (FeelsMoodControlWidget) +**File:** `ReflectWidget/ReflectMoodControlWidget.swift` (ReflectMoodControlWidget) -**What it does:** Adds a quick-access button to Control Center that opens Feels to log your mood. +**What it does:** Adds a quick-access button to Control Center that opens Reflect to log your mood. ### How to Add to Control Center 1. Open **Settings** > **Control Center** -2. Scroll down to find **Feels - Log Mood** +2. Scroll down to find **Reflect - Log Mood** 3. Tap the **+** button to add it -4. Alternatively: Swipe down from top-right, tap **+** button, find Feels +4. Alternatively: Swipe down from top-right, tap **+** button, find Reflect ### How to Test 1. Add the widget to Control Center (steps above) 2. Open Control Center (swipe down from top-right corner) 3. Tap the "Log Mood" button -4. Feels app should open +4. Reflect app should open ### Implementation Details - Uses `ControlWidget` and `StaticControlConfiguration` -- `OpenFeelsIntent` (AppIntent) handles the button tap +- `OpenReflectIntent` (AppIntent) handles the button tap - `openAppWhenRun = true` ensures the app opens --- @@ -36,11 +36,11 @@ This document covers the new Apple-specific features integrated into Feels, incl **What it does:** Syncs mood entries to Apple Health using the State of Mind API, allowing users to see mood correlations with sleep, exercise, and other health metrics. ### Setup Required -1. Enable HealthKit in **Settings** > **Feels** > **Health** +1. Enable HealthKit in **Settings** > **Reflect** > **Health** 2. Grant write permission for "State of Mind" ### How to Test -1. Go to Feels settings and enable HealthKit sync +1. Go to Reflect settings and enable HealthKit sync 2. Log a mood entry 3. Open **Apple Health** app 4. Go to **Browse** > **Mental Wellbeing** > **State of Mind** @@ -72,26 +72,26 @@ This document covers the new Apple-specific features integrated into Feels, incl #### Log Mood - **Phrases:** - - "Log my mood in Feels" - - "Log mood as [mood] in Feels" - - "Record my mood in Feels" - - "I'm feeling [mood] in Feels" - - "Track my mood in Feels" + - "Log my mood in Reflect" + - "Log mood as [mood] in Reflect" + - "Record my mood in Reflect" + - "I'm feeling [mood] in Reflect" + - "Track my mood in Reflect" #### Check Today's Mood - **Phrases:** - - "What's my mood today in Feels" - - "Check today's mood in Feels" - - "How am I feeling in Feels" + - "What's my mood today in Reflect" + - "Check today's mood in Reflect" + - "How am I feeling in Reflect" #### Get Mood Streak - **Phrases:** - - "What's my mood streak in Feels" - - "Check my streak in Feels" - - "How many days in a row in Feels" + - "What's my mood streak in Reflect" + - "Check my streak in Reflect" + - "How many days in a row in Reflect" ### How to Test -1. Say "Hey Siri, log my mood in Feels" +1. Say "Hey Siri, log my mood in Reflect" 2. Siri will prompt you to select a mood (Horrible, Bad, Average, Good, Great) 3. Confirm selection 4. Siri responds with confirmation and shows a visual snippet @@ -99,7 +99,7 @@ This document covers the new Apple-specific features integrated into Feels, incl ### How to Add to Shortcuts App 1. Open **Shortcuts** app 2. Tap **+** to create new shortcut -3. Search for "Feels" +3. Search for "Reflect" 4. Available actions: Log Mood, Check Today's Mood, Get Mood Streak ### Implementation Details @@ -112,7 +112,7 @@ This document covers the new Apple-specific features integrated into Feels, incl ## 4. Custom Tips System **Files:** -- `Shared/FeelsTips.swift` (Tips definitions and manager) +- `Shared/ReflectTips.swift` (Tips definitions and manager) - `Shared/Views/TipModalView.swift` (Modal UI) **What it does:** Shows themed modal tips to help users discover features throughout the app. Tips appear as beautiful sheets that match the app's current theme. @@ -133,15 +133,15 @@ This document covers the new Apple-specific features integrated into Feels, incl 1. Tips appear automatically based on conditions (one per session) 2. To reset tips for testing: ```swift -FeelsTipsManager.shared.resetAllTips() +ReflectTipsManager.shared.resetAllTips() ``` 3. To disable tips globally: ```swift -FeelsTipsManager.shared.tipsEnabled = false +ReflectTipsManager.shared.tipsEnabled = false ``` ### Implementation Details -- `FeelsTipsManager.shared.resetSession()` called in `FeelsApp.init()` +- `ReflectTipsManager.shared.resetSession()` called in `ReflectApp.init()` - Each tip has `isEligible` property based on user activity parameters - Tips show as themed modal sheets with gradient headers - Only one tip shown per app session @@ -152,7 +152,7 @@ FeelsTipsManager.shared.tipsEnabled = false **Files:** - `Shared/MoodStreakActivity.swift` (Manager + Attributes) -- `FeelsWidget2/FeelsWidget.swift` (Widget views) +- `ReflectWidget/ReflectMoodControlWidget.swift` (Widget views) **What it does:** Shows mood streak progress on the Lock Screen and Dynamic Island. @@ -192,7 +192,7 @@ await LiveActivityManager.shared.endAllActivities() - **Minimal:** Flame icon only ### How to Test -1. Ensure Live Activities are enabled: **Settings** > **Feels** > **Live Activities** +1. Ensure Live Activities are enabled: **Settings** > **Reflect** > **Live Activities** 2. Start a Live Activity (see code above) 3. Lock your phone to see Lock Screen view 4. On iPhone 14 Pro+, check Dynamic Island @@ -223,16 +223,16 @@ New entry types added to track mood entry sources: ## Entitlements & Info.plist -### Entitlements (`Feels (iOS).entitlements`) +### Entitlements (`Reflect (iOS).entitlements`) - `com.apple.developer.healthkit` - HealthKit access - `com.apple.developer.healthkit.access` - health-records -### Info.plist (`Feels--iOS--Info.plist`) +### Info.plist (`Reflect--iOS--Info.plist`) - `NSSupportsLiveActivities` - Enables Live Activities - `NSHealthShareUsageDescription` - HealthKit read permission description - `NSHealthUpdateUsageDescription` - HealthKit write permission description -### Widget Info.plist (`FeelsWidgetExtension-Info.plist`) +### Widget Info.plist (`ReflectWidgetExtension-Info.plist`) - `NSSupportsLiveActivities` - Enables Live Activity widget --- @@ -240,7 +240,7 @@ New entry types added to track mood entry sources: ## Testing Checklist - [ ] Control Center widget appears and opens app -- [ ] Siri responds to "Log my mood in Feels" +- [ ] Siri responds to "Log my mood in Reflect" - [ ] Siri shows mood options and confirms selection - [ ] HealthKit sync writes State of Mind entries - [ ] Tips appear at appropriate times diff --git a/docs/Competitive-Analysis.md b/docs/Competitive-Analysis.md index 73d4620..56923e3 100644 --- a/docs/Competitive-Analysis.md +++ b/docs/Competitive-Analysis.md @@ -307,7 +307,7 @@ Analysis of 8 direct competitors in the iOS mood tracking/journaling category. K --- -## Competitive Gaps & Opportunities for Feels +## Competitive Gaps & Opportunities for Reflect ### Underserved Areas 1. **Simplicity** - Most apps are feature-heavy; simple "vote your mood" is rare diff --git a/docs/Feels_QA_Test_Plan.xlsx b/docs/Reflect_QA_Test_Plan.xlsx similarity index 100% rename from docs/Feels_QA_Test_Plan.xlsx rename to docs/Reflect_QA_Test_Plan.xlsx diff --git a/docs/TipKit-Tips.md b/docs/TipKit-Tips.md index 20578cd..00df030 100644 --- a/docs/TipKit-Tips.md +++ b/docs/TipKit-Tips.md @@ -1,10 +1,10 @@ # Custom Tips System Documentation -This document describes all tips implemented in the Feels app, including their display conditions and locations. +This document describes all tips implemented in the Reflect app, including their display conditions and locations. ## Overview -Tips are displayed as themed modal sheets that match the user's chosen app theme. The system is managed by `FeelsTipsManager` (singleton) and configured with: +Tips are displayed as themed modal sheets that match the user's chosen app theme. The system is managed by `ReflectTipsManager` (singleton) and configured with: - **Display Frequency**: One tip per app session - **Global Toggle**: `tipsEnabled` boolean in UserDefaults - **Persistence**: Shown tip IDs stored in UserDefaults @@ -34,7 +34,7 @@ Tips are displayed as themed modal sheets that match the user's chosen app theme **Display Conditions**: - User has logged at least **7 moods** -**Parameter**: `moodLogCount: Int` (incremented via `FeelsTipsManager.shared.onMoodLogged()`) +**Parameter**: `moodLogCount: Int` (incremented via `ReflectTipsManager.shared.onMoodLogged()`) **Location**: InsightsView (via `.aiInsightsTip()`) @@ -43,13 +43,13 @@ Tips are displayed as themed modal sheets that match the user's chosen app theme ### 3. SiriShortcutTip **Title**: "Use Siri to Log Moods" -**Message**: "Say 'Hey Siri, log my mood as great in Feels' for hands-free logging." +**Message**: "Say 'Hey Siri, log my mood as great in Reflect' for hands-free logging." **Icon**: `mic.fill` **Display Conditions**: - User has logged at least **3 moods** -**Parameter**: `moodLogCount: Int` (incremented via `FeelsTipsManager.shared.onMoodLogged()`) +**Parameter**: `moodLogCount: Int` (incremented via `ReflectTipsManager.shared.onMoodLogged()`) **Location**: SettingsContentView (Features section header, via `.siriShortcutTip()`) @@ -64,7 +64,7 @@ Tips are displayed as themed modal sheets that match the user's chosen app theme **Display Conditions**: - User has viewed the Settings screen -**Parameter**: `hasSeenSettings: Bool` (set via `FeelsTipsManager.shared.onSettingsViewed()`) +**Parameter**: `hasSeenSettings: Bool` (set via `ReflectTipsManager.shared.onSettingsViewed()`) **Location**: SettingsContentView (Health Kit toggle, via `.healthKitSyncTip()`) @@ -106,29 +106,29 @@ Tips are displayed as themed modal sheets that match the user's chosen app theme **Display Conditions**: - User has a current streak of at least **3 days** -**Parameter**: `currentStreak: Int` (updated via `FeelsTipsManager.shared.updateStreak(_:)`) +**Parameter**: `currentStreak: Int` (updated via `ReflectTipsManager.shared.updateStreak(_:)`) **Location**: DayView (via `.moodStreakTip()`) --- -## FeelsTipsManager API +## ReflectTipsManager API ```swift // Reset session flag (call on app launch) -FeelsTipsManager.shared.resetSession() +ReflectTipsManager.shared.resetSession() // Reset all tips (for testing) -FeelsTipsManager.shared.resetAllTips() +ReflectTipsManager.shared.resetAllTips() // Update parameters -FeelsTipsManager.shared.onMoodLogged() // Increments mood log count -FeelsTipsManager.shared.onSettingsViewed() // Marks settings as viewed -FeelsTipsManager.shared.updateDaysUsingApp(_:) // Updates days using app -FeelsTipsManager.shared.updateStreak(_:) // Updates current streak +ReflectTipsManager.shared.onMoodLogged() // Increments mood log count +ReflectTipsManager.shared.onSettingsViewed() // Marks settings as viewed +ReflectTipsManager.shared.updateDaysUsingApp(_:) // Updates days using app +ReflectTipsManager.shared.updateStreak(_:) // Updates current streak // Global toggle -FeelsTipsManager.shared.tipsEnabled = true/false +ReflectTipsManager.shared.tipsEnabled = true/false ``` --- @@ -147,7 +147,7 @@ Tips can be attached to views using these convenience modifiers: .moodStreakTip() // Or use the generic modifier with custom gradient colors: -.feelsTip(FeelsTips.customizeLayout, gradientColors: [.purple, .blue]) +.reflectTip(ReflectTips.customizeLayout, gradientColors: [.purple, .blue]) ``` --- @@ -165,6 +165,6 @@ Tips are displayed as themed modal sheets with: ## Files -- **Tips & Manager**: `Shared/FeelsTips.swift` +- **Tips & Manager**: `Shared/ReflectTips.swift` - **Modal View**: `Shared/Views/TipModalView.swift` -- **Configuration**: `FeelsTipsManager.shared.resetSession()` called in `FeelsApp.swift` +- **Configuration**: `ReflectTipsManager.shared.resetSession()` called in `ReflectApp.swift` diff --git a/docs/XCUITest-Authoring.md b/docs/XCUITest-Authoring.md index bca96c0..9cd3ed5 100644 --- a/docs/XCUITest-Authoring.md +++ b/docs/XCUITest-Authoring.md @@ -50,8 +50,8 @@ Override launch behavior when needed: Targeted suite: ```bash -xcodebuild -project Feels.xcodeproj \ - -scheme "Feels (iOS)" \ +xcodebuild -project Reflect.xcodeproj \ + -scheme "Reflect (iOS)" \ -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \ -only-testing:"Tests iOS/" \ test @@ -60,8 +60,8 @@ xcodebuild -project Feels.xcodeproj \ Full iOS UI suite: ```bash -xcodebuild -project Feels.xcodeproj \ - -scheme "Feels (iOS)" \ +xcodebuild -project Reflect.xcodeproj \ + -scheme "Reflect (iOS)" \ -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \ -only-testing:"Tests iOS" \ test diff --git a/docs/_App-Store-Optimization-Complete-Guide.md b/docs/_App-Store-Optimization-Complete-Guide.md index 30c7f65..09ee45c 100644 --- a/docs/_App-Store-Optimization-Complete-Guide.md +++ b/docs/_App-Store-Optimization-Complete-Guide.md @@ -134,7 +134,7 @@ ASO is the process of optimizing your app's visibility and conversion rate in th │ │ │ HIGHEST WEIGHT: App Title (30 chars) │ │ ├─ Brand name + 1-2 most important keywords │ -│ └─ Example: "Feels - Mood Journal & Tracker" │ +│ └─ Example: "Reflect - Mood Journal & Tracker" │ │ │ │ HIGH WEIGHT: Subtitle (30 chars) │ │ ├─ Secondary keywords & value proposition │ diff --git a/docs/competitors/README.md b/docs/competitors/README.md index c332a32..0d900e2 100644 --- a/docs/competitors/README.md +++ b/docs/competitors/README.md @@ -80,7 +80,7 @@ Analysis of top 5 mood tracking app competitors on the iOS App Store. --- -## Key Takeaways for Feels +## Key Takeaways for Reflect 1. **Quick logging is valued** - Daylio and Moodistory emphasize speed 2. **Privacy is a differentiator** - Moodistory's privacy-first approach stands out diff --git a/uiTestPrompt.md b/uiTestPrompt.md index 875075b..678ab74 100644 --- a/uiTestPrompt.md +++ b/uiTestPrompt.md @@ -8,7 +8,7 @@ Create 3 solid iOS UI tests from the QA plan that compile and run reliably using Project: - Root: /Users/treyt/Desktop/code/Feels -- QA source: /Users/treyt/Desktop/code/Feels/docs/Feels_QA_Test_Plan.xlsx +- QA source: /Users/treyt/Desktop/code/Feels/docs/Reflect_QA_Test_Plan.xlsx Optional explicit test IDs/names from me (if provided, prioritize these): @@ -56,7 +56,7 @@ Deliverable shape: Validation gates (required before done): 1. Run only the 3 new tests (not full suite), e.g.: - - `xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -only-testing:"Tests iOS//testA" -only-testing:"Tests iOS//testB" -only-testing:"Tests iOS//testC" test` + - `xcodebuild -project Reflect.xcodeproj -scheme "Reflect (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -only-testing:"Tests iOS//testA" -only-testing:"Tests iOS//testB" -only-testing:"Tests iOS//testC" test` 2. If failures occur, fix and rerun until green. 3. Run the same targeted command a second time to check flakiness. 4. Only mark complete if both runs pass.