Implement iPhone and Apple Watch preferences #53

Closed
opened 2026-08-09 20:00:45 +00:00 by hugo · 1 comment
Owner

Goal

Implement the Preferences tab for the iPhone- and Watch-specific choices in this milestone.

Scope

  • Use Gotcha-style inset-grouped native settings sections in the fourth tab.
  • Present non-secret repository/server identity, application-token replacement/removal, default GPG key identity, authentication inactivity timeout, biometric unlock toggle/status, appearance where supported, manual Lock, and Apple Watch pairing/sync status.
  • Read and persist ordinary settings through the shared config.toml contract owned by crates/storage; store tokens and key passphrases only through secure-secret APIs.
  • Enabling biometric unlock must perform capability checks and credential enrollment before the switch becomes active; disabling it removes the protected credential.
  • Provide entry points to QR key transfer and initial/recovery setup without displaying secret material in settings rows.
  • Validate changes in Rust and report errors without partially applying dependent settings.

Acceptance criteria

  • Settings remain consistent with CLI/TUI/shared configuration where the values overlap.
  • Secret values are never shown or persisted as ordinary settings.
  • Biometric, token, timeout, lock, key-transfer, and Watch status controls accurately reflect storage/platform state.
  • Settings are fully navigable with Dynamic Type and VoiceOver.
## Goal Implement the Preferences tab for the iPhone- and Watch-specific choices in this milestone. ## Scope - Use Gotcha-style inset-grouped native settings sections in the fourth tab. - Present non-secret repository/server identity, application-token replacement/removal, default GPG key identity, authentication inactivity timeout, biometric unlock toggle/status, appearance where supported, manual Lock, and Apple Watch pairing/sync status. - Read and persist ordinary settings through the shared `config.toml` contract owned by `crates/storage`; store tokens and key passphrases only through secure-secret APIs. - Enabling biometric unlock must perform capability checks and credential enrollment before the switch becomes active; disabling it removes the protected credential. - Provide entry points to QR key transfer and initial/recovery setup without displaying secret material in settings rows. - Validate changes in Rust and report errors without partially applying dependent settings. ## Acceptance criteria - Settings remain consistent with CLI/TUI/shared configuration where the values overlap. - Secret values are never shown or persisted as ordinary settings. - Biometric, token, timeout, lock, key-transfer, and Watch status controls accurately reflect storage/platform state. - Settings are fully navigable with Dynamic Type and VoiceOver.
hugo added this to the 04 - iPhone and Apple Watch apps milestone 2026-08-09 20:00:45 +00:00
hugo added the enhancement label 2026-08-09 20:00:45 +00:00
Author
Owner

Implemented in affdb55.

  • Added Rust-owned mobile preferences/config for repository and server identity, protected token status/removal, default GPG identity, inactivity timeout, appearance, authentication/lock, and typed Watch pairing/install/sync state.
  • Rebuilt the native inset-grouped accessible iPhone preferences and embedded an installable Watch companion.
  • Made iPhone and Watch derive their icons from the same canonical AppIcon.png asset.

Verified in isolation: cargo fmt/check/clippy/test; xcodegen; iPhone and Watch simulator builds; Xcode Analyze; biometric Lock -> Unlock -> Matching Face; Watch Not Paired -> App Not Installed -> Ready lifecycle; shared Watch AppIcon in the compiled asset catalog; signed Release deployed to the paired iPhone.

Implemented in affdb55. - Added Rust-owned mobile preferences/config for repository and server identity, protected token status/removal, default GPG identity, inactivity timeout, appearance, authentication/lock, and typed Watch pairing/install/sync state. - Rebuilt the native inset-grouped accessible iPhone preferences and embedded an installable Watch companion. - Made iPhone and Watch derive their icons from the same canonical AppIcon.png asset. Verified in isolation: cargo fmt/check/clippy/test; xcodegen; iPhone and Watch simulator builds; Xcode Analyze; biometric Lock -> Unlock -> Matching Face; Watch Not Paired -> App Not Installed -> Ready lifecycle; shared Watch AppIcon in the compiled asset catalog; signed Release deployed to the paired iPhone.
hugo closed this issue 2026-08-15 20:44:48 +00:00
Sign in to join this conversation.