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 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 23:18:57 +01:00
parent 8892f658f8
commit 8c4e085890
4 changed files with 8 additions and 55 deletions

View File

@@ -49,7 +49,6 @@
D4431B77FD9EDB156C12BB19 /* DiaryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryViewModel.swift; sourceTree = "<group>"; };
D4CCBA3B214071BEDD37CB6E /* DiaryEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryEntryView.swift; sourceTree = "<group>"; };
E4B15363D4D0CAD8C0DD46D6 /* RecordingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordingView.swift; sourceTree = "<group>"; };
F18ECC39AB60EF3AFF82EB90 /* VoiceDiary.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = VoiceDiary.entitlements; sourceTree = "<group>"; };
F30F8103F5AEAC26F1412FEC /* AudioRecorderService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecorderService.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -138,7 +137,6 @@
142BDBF117BAFAC9CA20527E /* Services */,
88B119656D1AB183CCE625F9 /* ViewModels */,
C12EA9E46E07D0BD5F8F9158 /* Views */,
F18ECC39AB60EF3AFF82EB90 /* VoiceDiary.entitlements */,
);
path = VoiceDiary;
sourceTree = "<group>";
@@ -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";

View File

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

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.felixfoertsch.VoiceDiary</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
<string>CloudKit</string>
</array>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)com.felixfoertsch.VoiceDiary</string>
</dict>
</plist>

View File

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