From 8c4e0858905bd00c54e87187216a07205920eb0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20F=C3=B6rtsch?= Date: Sun, 15 Feb 2026 23:18:57 +0100 Subject: [PATCH] remove all iCloud/CloudKit to run purely local first - Delete entitlements file entirely - Remove remote-notification background mode - Simplify ModelContainer to plain local store - Fix bundle ID prefix to de.felixfoertsch per convention iCloud sync can be added back once the container is set up in the Apple Developer Portal. Co-Authored-By: Claude Opus 4.6 --- VoiceDiary.xcodeproj/project.pbxproj | 14 ++++---------- VoiceDiary/App/VoiceDiaryApp.swift | 18 +----------------- VoiceDiary/VoiceDiary.entitlements | 16 ---------------- project.yml | 15 +++------------ 4 files changed, 8 insertions(+), 55 deletions(-) delete mode 100644 VoiceDiary/VoiceDiary.entitlements diff --git a/VoiceDiary.xcodeproj/project.pbxproj b/VoiceDiary.xcodeproj/project.pbxproj index 3b15afe..567ee1c 100644 --- a/VoiceDiary.xcodeproj/project.pbxproj +++ b/VoiceDiary.xcodeproj/project.pbxproj @@ -49,7 +49,6 @@ D4431B77FD9EDB156C12BB19 /* DiaryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryViewModel.swift; sourceTree = ""; }; D4CCBA3B214071BEDD37CB6E /* DiaryEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryEntryView.swift; sourceTree = ""; }; E4B15363D4D0CAD8C0DD46D6 /* RecordingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordingView.swift; sourceTree = ""; }; - F18ECC39AB60EF3AFF82EB90 /* VoiceDiary.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = VoiceDiary.entitlements; sourceTree = ""; }; F30F8103F5AEAC26F1412FEC /* AudioRecorderService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecorderService.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -138,7 +137,6 @@ 142BDBF117BAFAC9CA20527E /* Services */, 88B119656D1AB183CCE625F9 /* ViewModels */, C12EA9E46E07D0BD5F8F9158 /* Views */, - F18ECC39AB60EF3AFF82EB90 /* VoiceDiary.entitlements */, ); path = VoiceDiary; sourceTree = ""; @@ -285,13 +283,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = VoiceDiary/VoiceDiary.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSMicrophoneUsageDescription = "Voice Diary needs microphone access to record your voice memos for diary entries."; INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "Voice Diary uses on-device speech recognition to transcribe your voice memos."; - INFOPLIST_KEY_UIBackgroundModes = "remote-notification"; INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; @@ -299,7 +295,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.felixfoertsch.VoiceDiary; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.VoiceDiary; SDKROOT = iphoneos; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -369,13 +365,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = VoiceDiary/VoiceDiary.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSMicrophoneUsageDescription = "Voice Diary needs microphone access to record your voice memos for diary entries."; INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "Voice Diary uses on-device speech recognition to transcribe your voice memos."; - INFOPLIST_KEY_UIBackgroundModes = "remote-notification"; INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; @@ -383,7 +377,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.felixfoertsch.VoiceDiary; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.VoiceDiary; SDKROOT = iphoneos; SWIFT_EMIT_LOC_STRINGS = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -399,7 +393,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.felixfoertsch.VoiceDiaryTests; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.VoiceDiaryTests; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VoiceDiary.app/VoiceDiary"; @@ -415,7 +409,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.felixfoertsch.VoiceDiaryTests; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.VoiceDiaryTests; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VoiceDiary.app/VoiceDiary"; diff --git a/VoiceDiary/App/VoiceDiaryApp.swift b/VoiceDiary/App/VoiceDiaryApp.swift index 878a246..a69af9d 100644 --- a/VoiceDiary/App/VoiceDiaryApp.swift +++ b/VoiceDiary/App/VoiceDiaryApp.swift @@ -3,26 +3,10 @@ import SwiftUI @main struct VoiceDiaryApp: App { - let modelContainer: ModelContainer - - init() { - let schema = Schema([DiaryEntry.self, VoiceMemo.self]) - let configuration = ModelConfiguration( - "VoiceDiary", - schema: schema, - cloudKitDatabase: .none - ) - do { - modelContainer = try ModelContainer(for: schema, configurations: [configuration]) - } catch { - fatalError("Failed to create ModelContainer: \(error)") - } - } - var body: some Scene { WindowGroup { ContentView() } - .modelContainer(modelContainer) + .modelContainer(for: [DiaryEntry.self, VoiceMemo.self]) } } diff --git a/VoiceDiary/VoiceDiary.entitlements b/VoiceDiary/VoiceDiary.entitlements deleted file mode 100644 index e2218a4..0000000 --- a/VoiceDiary/VoiceDiary.entitlements +++ /dev/null @@ -1,16 +0,0 @@ - - - - - com.apple.developer.icloud-container-identifiers - - iCloud.com.felixfoertsch.VoiceDiary - - com.apple.developer.icloud-services - - CloudKit - - com.apple.developer.ubiquity-kvstore-identifier - $(TeamIdentifierPrefix)com.felixfoertsch.VoiceDiary - - diff --git a/project.yml b/project.yml index 14e07d4..db7cb53 100644 --- a/project.yml +++ b/project.yml @@ -1,6 +1,6 @@ name: VoiceDiary options: - bundleIdPrefix: com.felixfoertsch + bundleIdPrefix: de.felixfoertsch deploymentTarget: iOS: "26.0" xcodeVersion: "26.2" @@ -27,7 +27,7 @@ targets: settings: base: GENERATE_INFOPLIST_FILE: true - PRODUCT_BUNDLE_IDENTIFIER: com.felixfoertsch.VoiceDiary + PRODUCT_BUNDLE_IDENTIFIER: de.felixfoertsch.VoiceDiary ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon ENABLE_PREVIEWS: true SWIFT_EMIT_LOC_STRINGS: true @@ -36,15 +36,6 @@ targets: INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad: "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight" INFOPLIST_KEY_NSMicrophoneUsageDescription: "Voice Diary needs microphone access to record your voice memos for diary entries." INFOPLIST_KEY_NSSpeechRecognitionUsageDescription: "Voice Diary uses on-device speech recognition to transcribe your voice memos." - INFOPLIST_KEY_UIBackgroundModes: remote-notification - entitlements: - path: VoiceDiary/VoiceDiary.entitlements - properties: - com.apple.developer.icloud-container-identifiers: - - iCloud.com.felixfoertsch.VoiceDiary - com.apple.developer.icloud-services: - - CloudKit - com.apple.developer.ubiquity-kvstore-identifier: $(TeamIdentifierPrefix)com.felixfoertsch.VoiceDiary VoiceDiaryTests: type: bundle.unit-test @@ -55,4 +46,4 @@ targets: - target: VoiceDiary settings: base: - PRODUCT_BUNDLE_IDENTIFIER: com.felixfoertsch.VoiceDiaryTests + PRODUCT_BUNDLE_IDENTIFIER: de.felixfoertsch.VoiceDiaryTests