Rebrand entire project from Feels to Reflect

Complete rename across all bundle IDs, App Groups, CloudKit containers,
StoreKit product IDs, data store filenames, URL schemes, logger subsystems,
Swift identifiers, user-facing strings (7 languages), file names, directory
names, Xcode project, schemes, assets, and documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-02-26 11:47:16 -06:00
parent b1a54d2844
commit 0442eab1f8
380 changed files with 858 additions and 1077 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -1,6 +1,6 @@
//
// DataControllerDELETE.swift
// Feels
// Reflect
//
// SwiftData DELETE operations.
//

View File

@@ -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? {

View File

@@ -1,6 +1,6 @@
//
// DataControllerHelper.swift
// Feels
// Reflect
//
// SwiftData helper and test data operations.
//

View File

@@ -1,6 +1,6 @@
//
// DataControllerProtocol.swift
// Feels
// Reflect
//
// Protocol defining the data access interface for mood entries.
// Enables dependency injection and testability.

View File

@@ -1,6 +1,6 @@
//
// DataControllerUPDATE.swift
// Feels
// Reflect
//
// SwiftData UPDATE operations.
//

View File

@@ -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
}

View File

@@ -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
}
}