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:
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// ExportableInsightsViews.swift
|
||||
// Feels
|
||||
// Reflect
|
||||
//
|
||||
// Exportable insights views with sample AI-generated insights for screenshots.
|
||||
//
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// HealthService.swift
|
||||
// Feels
|
||||
// Reflect
|
||||
//
|
||||
// Manages Apple Health integration for mood correlation insights.
|
||||
//
|
||||
|
||||
@@ -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<NSString, UIImage>()
|
||||
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?
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// InsightsExporter.swift
|
||||
// Feels
|
||||
// Reflect
|
||||
//
|
||||
// Debug utility to export insights view screenshots with sample AI data.
|
||||
//
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// MoodDataSummarizer.swift
|
||||
// Feels
|
||||
// Reflect
|
||||
//
|
||||
// Created by Claude Code on 12/13/24.
|
||||
//
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// SharingScreenshotExporter.swift
|
||||
// Feels
|
||||
// Reflect
|
||||
//
|
||||
// Debug utility to export sharing template screenshots.
|
||||
//
|
||||
|
||||
@@ -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?
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user