Root-caused the "MyPass doesn't appear in Settings > AutoFill Passwords"
issue: entitlements embed correctly on a real device build but are
silently stripped to empty on every Simulator build in this
environment (confirmed identically via CLI xcodebuild and Xcode's own
GUI build/run, before and after multiple rounds of removing/re-adding
capabilities in Signing & Capabilities). This is a Simulator/SDK-level
limitation in this environment, not a project misconfiguration --
verified by comparing against a real iphoneos device build, which
embeds the full App Group / Keychain Sharing / AutoFill Credential
Provider entitlements correctly.
While diagnosing, found and fixed a real, separate bug: AutoFill's
Keychain Sharing group had been set (via Xcode's capability re-add
flow, which defaults to the target's own bundle ID) to
org.antiloop222.mypass.autofill, while the main app uses
org.antiloop222.mypass -- a mismatch that would have prevented the
extension from ever reading the shared master password from Keychain,
even on a real device where entitlements embed correctly. Now aligned
to org.antiloop222.mypass on both targets, matching what
KeychainStore's hardcoded accessGroup expects in both AutoFill/
CredentialProviderViewController.swift and MyPass/ViewModels/
UnlockViewModel.swift.
Also includes the user's own Signing & Capabilities re-add (repopulated
App Group selections) and a bundle-identifier lowercase normalization
(org.antiloop222.MyPass -> org.antiloop222.mypass, matching the
already-lowercase App Group/Keychain group strings) made via Xcode's
GUI.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
Sets ENTITLEMENTS_REQUIRED = YES for both targets' build configurations.
Found while investigating why Settings > AutoFill & Passwords doesn't
list MyPass: Xcode's automatic-signing build step (ProcessProductPackaging)
silently produces an EMPTY entitlements blob for both the AutoFill
extension and the main app on this environment's Simulator builds,
despite AutoFill.entitlements/MyPass.entitlements being valid and
correctly referenced (verified with plutil, and confirmed manually
invoking codesign with the same file embeds the entitlements
correctly). This setting alone doesn't fix the underlying issue --
still investigating -- but is a correct, harmless hardening on its own
(surfaces an error if entitlements are ever genuinely missing, instead
of silently signing without them).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
- Remove dead provideCredentialWithoutUserInteraction override and
unlockSilently() helper (nothing registers credential identities,
so it could never run, and it was a footgun for future inline
QuickType work).
- Surface non-cancellation biometric unlock failures into
errorMessage instead of swallowing them, matching
UnlockViewModel.unlockWithBiometrics().
- Forward VaultSession.objectWillChange into ExtensionViewModel via
Combine so the lock/unlock UI transition no longer depends on an
accidental isUnlocking side effect, matching VaultViewModel's
pattern.
- Show the "Open MyPass" deep-link escape hatch whenever unlock
fails (errorMessage set), not only when there's no bookmark yet,
per the extension constraints spec.
- Add INFOPLIST_KEY_NSFaceIDUsageDescription to the MyPass and
AutoFill targets' Debug/Release build configs.
Also folds in pre-existing alphabetical reordering of two
PBXBuildFile/PBXFileReference entries in project.pbxproj from an
earlier task, since this same file is already being touched here.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
Replace the Xcode boilerplate in AutoFill/CredentialProviderViewController.swift
with real logic: prepareCredentialList(for:) builds ExtensionRootView (added in
Task 19) inside a UIHostingController, provideCredentialWithoutUserInteraction(for:)
silently unlocks via the shared Keychain token and completes/cancels the request.
Strip the storyboard's now-unused static nav-bar/button/actions, keeping the same
customClass so the system still instantiates this exact class.
Also add AutoFill target membership for MyPass/Services/FileBookmarkService.swift
and BiometricAuthService.swift (app-target files, referenced directly by the
extension per the plan) via explicit PBXFileReference/PBXBuildFile entries, since
Xcode's synchronized-group file system only auto-includes them in the MyPass
target by default.
Expected build state: exactly one error, "cannot find 'ExtensionRootView' in
scope" (reported once per simulator architecture), until Task 19 adds that type.
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
Adds App Groups + Keychain Sharing entitlements to the AutoFill
target (matching the main app's group.org.antiloop222.mypass /
org.antiloop222.mypass), sets REGISTER_APP_GROUPS so automatic
signing registers the capability, and links MyPassCore as a
framework dependency by reusing the existing local package product
reference. Verified with `xcodebuild -scheme AutoFill build` for the
iOS Simulator: the AutoFill.appex target builds, signs, and embeds
cleanly (the only build failure is the pre-existing, expected
ContentView.swift/Item SwiftData breakage in the MyPass app target,
unrelated to this change).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
Also drops the stray empty AutoFillExtension/ directory left over from
an earlier abandoned attempt at creating this target, and cleans up
duplicate/stale scheme entries in xcschememanagement.plist.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
Adds the AutoFill Credential Provider Extension target (App Group +
Keychain Sharing capabilities, autofill-credential-provider
entitlement), removes the leftover SwiftData bootstrap from
MyPassApp.swift now that Item.swift is gone, and switches the bundle
ID / App Group / Keychain group prefix from com.christophevila to
org.antiloop222 to match the project's existing identifier.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf