Commit Graph
11 Commits
Author SHA1 Message Date
krissandClaude Sonnet 5 82cc800415 fix: don't attempt unlock with an empty password on first file pick
UnlockViewModel.openFile(url:) called unlockWithPassword() immediately
after saving the bookmark, but the first-open UI (openFileSection) has
no password field yet -- password is still "" at that point, so every
first file pick failed before the user could type anything. Picking a
file now only saves the bookmark; the view naturally switches to the
password-entry state for the user to unlock explicitly.

Also makes KDBXError conform to LocalizedError with readable messages
per case, so any error path that reaches the generic catch clause
shows something useful instead of the default
"The operation couldn't be completed (MyPassCore.KDBXError error N)".

Found while testing the Phase 4 UI against a real KDBX file in the
simulator.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
2026-09-19 16:14:10 +02:00
krissandClaude Sonnet 5 ed6e4ab9ab feat: wire ContentView router, macOS 3-column layout, scene lifecycle lock
Completes Phase 4 (Task 17) -- ContentView now routes between UnlockView
and the vault UI (NavigationStack on iOS, 3-column NavigationSplitView on
macOS) instead of the leftover SwiftData template, finally resolving the
long-standing "cannot find type Item" build break. Vault locks on
scene-background (iOS) / resign-active (macOS).

Fixes two more real bugs surfaced now that everything actually links
together: EntryEditViewModel.save's dismiss closure needed @escaping
(used inside Task {}), and UnlockView's UTType(filenameExtension:)
needed `import UniformTypeIdentifiers`.

Also restores MyPass.entitlements, which had regressed to an empty
App Group array with Keychain Sharing missing entirely since the
"wire up AutoFill extension target" commit -- likely clobbered by
Xcode reconciling capabilities at some point without a rebuild in
between to catch it. Verified clean `xcodebuild` on both iOS Simulator
and macOS destinations, and `swift test` still passes all 18 tests.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
2026-09-19 16:02:23 +02:00
krissandClaude Sonnet 5 1f7ee90882 feat: add SearchView
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
2026-09-19 16:00:53 +02:00
krissandClaude Sonnet 5 a48e8baf7a feat: add EntryEditView for add/edit 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
2026-09-19 16:00:37 +02:00
krissandClaude Sonnet 5 347f9a99c4 feat: add EntryDetailView with TOTP countdown
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
2026-09-19 15:59:07 +02:00
krissandClaude Sonnet 5 66a01b3c80 feat: add GroupBrowserView with search and group navigation
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
2026-09-19 15:58:41 +02:00
krissandClaude Sonnet 5 543a063528 feat: add UnlockView with biometric and password unlock
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
2026-09-19 15:58:15 +02:00
krissandClaude Sonnet 5 ef52cb9804 feat: add FileBookmarkService, BiometricAuthService, ClipboardService
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
2026-09-19 15:52:16 +02:00
krissandClaude Sonnet 5 6279488416 chore: wire up AutoFill extension target and rebrand bundle prefix
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
2026-09-19 15:33:23 +02:00
krissandClaude Sonnet 4.6 32c37c6f30 feat: scaffold MyPassCore Swift Package
- Add MyPassCore local Swift Package with directory structure for
  Models, KDBX, TOTP, Keychain, AutoFill, and Session modules
- Add KeePassKit as git submodule (Vendor/KeePassKit) with SPM wrapper
  Package.swift since upstream has no native SPM support
- Delete SwiftData boilerplate Item.swift from main app target

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 12:19:36 +02:00
kriss 2c4138ddb3 Initial Commit 2026-05-21 22:04:13 +02:00