feat: update bundle ID config, CloudKit container, and add landing page
- Update CloudKit container ID to iCloud.com.88oakapps.SportsTime across all services - Update IAP product IDs to match new bundle ID (com.88oakapps.SportsTime) - Add app landing page with light, welcoming design matching app aesthetic - Update entitlements and project configuration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -18,10 +18,10 @@ final class BackgroundSyncManager {
|
||||
// MARK: - Task Identifiers
|
||||
|
||||
/// Background app refresh task - runs periodically (system decides frequency)
|
||||
static let refreshTaskIdentifier = "com.sportstime.app.refresh"
|
||||
static let refreshTaskIdentifier = "com.88oakapps.SportsTime.refresh"
|
||||
|
||||
/// Background processing task - runs during optimal conditions (plugged in, overnight)
|
||||
static let processingTaskIdentifier = "com.sportstime.app.db-cleanup"
|
||||
static let processingTaskIdentifier = "com.88oakapps.SportsTime.db-cleanup"
|
||||
|
||||
// MARK: - Singleton
|
||||
|
||||
@@ -31,7 +31,7 @@ final class BackgroundSyncManager {
|
||||
|
||||
private var modelContainer: ModelContainer?
|
||||
private var currentCancellationToken: BackgroundTaskCancellationToken?
|
||||
private let logger = Logger(subsystem: "com.sportstime.app", category: "BackgroundSyncManager")
|
||||
private let logger = Logger(subsystem: "com.88oakapps.SportsTime", category: "BackgroundSyncManager")
|
||||
|
||||
private init() {}
|
||||
|
||||
@@ -332,16 +332,16 @@ final class BackgroundSyncManager {
|
||||
#if DEBUG
|
||||
extension BackgroundSyncManager {
|
||||
/// Manually trigger refresh task for testing.
|
||||
/// Run in debugger: `e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.sportstime.app.refresh"]`
|
||||
/// Run in debugger: `e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.88oakapps.SportsTime.refresh"]`
|
||||
func debugTriggerRefresh() {
|
||||
print("Debug: Use lldb command to trigger background refresh:")
|
||||
print("e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@\"com.sportstime.app.refresh\"]")
|
||||
print("e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@\"com.88oakapps.SportsTime.refresh\"]")
|
||||
}
|
||||
|
||||
/// Manually trigger processing task for testing.
|
||||
func debugTriggerProcessing() {
|
||||
print("Debug: Use lldb command to trigger background processing:")
|
||||
print("e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@\"com.sportstime.app.db-cleanup\"]")
|
||||
print("e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@\"com.88oakapps.SportsTime.db-cleanup\"]")
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -69,7 +69,7 @@ actor CloudKitService {
|
||||
private let recordsPerPage = 400
|
||||
|
||||
private init() {
|
||||
self.container = CKContainer(identifier: "iCloud.com.sportstime.app")
|
||||
self.container = CKContainer(identifier: "iCloud.com.88oakapps.SportsTime")
|
||||
self.publicDatabase = container.publicCloudDatabase
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import CloudKit
|
||||
actor ItineraryItemService {
|
||||
static let shared = ItineraryItemService()
|
||||
|
||||
private let container = CKContainer(identifier: "iCloud.com.sportstime.app")
|
||||
private let container = CKContainer(identifier: "iCloud.com.88oakapps.SportsTime")
|
||||
private var database: CKDatabase { container.privateCloudDatabase }
|
||||
|
||||
private let recordType = "ItineraryItem"
|
||||
|
||||
@@ -17,8 +17,8 @@ final class NetworkMonitor {
|
||||
// MARK: - Properties
|
||||
|
||||
private let monitor = NWPathMonitor()
|
||||
private let queue = DispatchQueue(label: "com.sportstime.networkmonitor")
|
||||
private let logger = Logger(subsystem: "com.sportstime.app", category: "NetworkMonitor")
|
||||
private let queue = DispatchQueue(label: "com.88oakapps.SportsTime.networkmonitor")
|
||||
private let logger = Logger(subsystem: "com.88oakapps.SportsTime", category: "NetworkMonitor")
|
||||
|
||||
/// Current network status
|
||||
private(set) var isConnected: Bool = false
|
||||
|
||||
@@ -52,7 +52,7 @@ actor PollService {
|
||||
private var pollSubscriptionID: CKSubscription.ID?
|
||||
|
||||
private init() {
|
||||
self.container = CKContainer(identifier: "iCloud.com.sportstime.app")
|
||||
self.container = CKContainer(identifier: "iCloud.com.88oakapps.SportsTime")
|
||||
self.publicDatabase = container.publicCloudDatabase
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ final class SyncLogger {
|
||||
|
||||
private let fileURL: URL
|
||||
private let maxLines = 500
|
||||
private let queue = DispatchQueue(label: "com.sportstime.synclogger")
|
||||
private let queue = DispatchQueue(label: "com.88oakapps.SportsTime.synclogger")
|
||||
|
||||
private init() {
|
||||
let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
|
||||
|
||||
@@ -63,7 +63,7 @@ final class VisitPhotoService {
|
||||
|
||||
init(modelContext: ModelContext) {
|
||||
self.modelContext = modelContext
|
||||
self.container = CKContainer(identifier: "iCloud.com.sportstime.app")
|
||||
self.container = CKContainer(identifier: "iCloud.com.88oakapps.SportsTime")
|
||||
self.privateDatabase = container.privateCloudDatabase
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,8 @@ final class StoreManager {
|
||||
// MARK: - Constants
|
||||
|
||||
static let proProductIDs: Set<String> = [
|
||||
"com.sportstime.pro.monthly",
|
||||
"com.sportstime.pro.annual"
|
||||
"com.88oakapps.SportsTime.pro.monthly",
|
||||
"com.88oakapps.SportsTime.pro.annual2"
|
||||
]
|
||||
|
||||
static let freeTripLimit = 1
|
||||
@@ -59,11 +59,11 @@ final class StoreManager {
|
||||
}
|
||||
|
||||
var monthlyProduct: Product? {
|
||||
products.first { $0.id == "com.sportstime.pro.monthly" }
|
||||
products.first { $0.id == "com.88oakapps.SportsTime.pro.monthly" }
|
||||
}
|
||||
|
||||
var annualProduct: Product? {
|
||||
products.first { $0.id == "com.sportstime.pro.annual" }
|
||||
products.first { $0.id == "com.88oakapps.SportsTime.pro.annual2" }
|
||||
}
|
||||
|
||||
// MARK: - Initialization
|
||||
|
||||
Reference in New Issue
Block a user