- FileBookmarkService: hold a security scope while creating the bookmark,
fixing "file doesn't exist" on iCloud Drive-backed vaults (NSCocoaErrorDomain
Code=4), which only surfaced on a real device since the Simulator strips
entitlements needed to reproduce this.
- Fix Keychain access group missing the Team ID prefix, which silently broke
saving the master password so Face ID was never offered after backgrounding.
- Add the autofill-credential-provider entitlement to the main app target
(previously only on the extension) and declare ProvidesPasswords in the
extension's Info.plist, so MyPass now registers as a selectable AutoFill
Passwords provider.
- CredentialMatcher: fall back to a scheme-prefixed re-parse when extracting a
host, since KDBX entries commonly store bare domains (e.g. "allocine.fr")
that URL(string:).host can't parse without an authority component. Fixes
AutoFill suggestions being unranked/wrong for such entries.
Also fixes real bugs found while making Phase 4 build clean on both
platforms:
- FileBookmarkService used .withSecurityScope unconditionally, but
that bookmark option is macOS-only -- iOS grants scoped access
automatically once the user picks a file. Now conditional per platform.
- EntryEditViewModel's groupId was non-optional with no default, but
EntryDetailView's edit-sheet call site (Task 14) has no group
reference to pass -- only the "add new entry" path actually needs
it, so groupId is now optional and validated at save time instead.
- Missing `import Combine` in EntryDetailView (Timer.publish/autoconnect)
and UnlockViewModel/VaultViewModel/EntryEditViewModel (@Published).
- GroupBrowserView's `group: Group` property collided with SwiftUI's
own Group view type -- qualified as MyPassCore.Group.
- EntryEditView's .keyboardType(.URL) and .navigationBarTitleDisplayMode
are iOS-only APIs, guarded with #if os(iOS) for the macOS build.
Verified clean (aside from the known, expected ContentView.swift/Item
breakage) on both iOS Simulator and macOS destinations.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
Phase 3 (Tasks 10-11) app services: FileBookmarkService persists a
security-scoped bookmark for the KDBX file in the shared App Group;
BiometricAuthService wraps LAContext for Face ID/Touch ID; ClipboardService
copies text with an expiring clipboard entry on iOS/macOS.
Also fixes a real build issue found while verifying: the AutoFill
extension (iOS-only) was being embedded/signed unconditionally,
breaking macOS builds of the MyPass scheme with a bogus provisioning
error. Added platformFilters = (ios) to both the embed build file and
the target dependency so macOS builds skip it. Verified both iOS
Simulator and macOS builds now fail only on the known, expected
ContentView.swift/Item SwiftData breakage.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf