Implement the structured iPhone entry viewer #48

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

Goal

Present an authenticated, structured password-entry viewer suited to iPhone.

Scope

  • Render the storage-provided structured entry document as native sections for password, named fields, notes, OTP metadata, and unknown/repeated fields.
  • Hide sensitive values by default and provide explicit reveal/hide and copy controls with clear feedback.
  • Trigger authentication only when decrypted content is requested, then respect the shared lease and immediately mask on expiry or app lock.
  • Support long and multiline values, Dynamic Type, VoiceOver labels, text selection where safe, and compact/large device layouts.
  • Offer Edit and applicable storage actions through native navigation/overflow controls without parsing or normalizing entry content in Swift.
  • Show storage-provided diagnostics for malformed or partially understood entries without losing fields.

Acceptance criteria

  • Ordinary, dynamic, repeated, multiline, OTP-bearing, and partially malformed fixtures display losslessly.
  • Sensitive content is unavailable before authentication and after relock/background policy takes effect.
  • Reveal and copy require explicit action and operate only on values returned by storage.
  • The viewer contains no entry parser, serialization logic, or secret policy.
## Goal Present an authenticated, structured password-entry viewer suited to iPhone. ## Scope - Render the storage-provided structured entry document as native sections for password, named fields, notes, OTP metadata, and unknown/repeated fields. - Hide sensitive values by default and provide explicit reveal/hide and copy controls with clear feedback. - Trigger authentication only when decrypted content is requested, then respect the shared lease and immediately mask on expiry or app lock. - Support long and multiline values, Dynamic Type, VoiceOver labels, text selection where safe, and compact/large device layouts. - Offer Edit and applicable storage actions through native navigation/overflow controls without parsing or normalizing entry content in Swift. - Show storage-provided diagnostics for malformed or partially understood entries without losing fields. ## Acceptance criteria - Ordinary, dynamic, repeated, multiline, OTP-bearing, and partially malformed fixtures display losslessly. - Sensitive content is unavailable before authentication and after relock/background policy takes effect. - Reveal and copy require explicit action and operate only on values returned by storage. - The viewer contains no entry parser, serialization logic, or secret policy.
hugo added this to the 04 - iPhone and Apple Watch apps milestone 2026-08-09 20:00:31 +00:00
hugo added the enhancement label 2026-08-09 20:00:31 +00:00
Author
Owner

Implemented in commit 900e62e.

The Rust storage crate now projects lossless entry documents into typed iPhone sections for passwords, named/repeated fields, OTP metadata, notes, unknown fields, empty fields, and storage diagnostics. Sensitivity policy, reveal/copy values, authenticated lease checks, recoverable edits, serialization, and automatic Git commits remain storage-owned; the UniFFI/UIKit layer only presents those records and invokes typed actions.

The native viewer masks password and OTP secrets, leaves tags/comments/notes visible, preserves multiline and long values, supports Dynamic Type/VoiceOver/selection, aligns a fixed action rail, provides eye/edit controls, and copies on row tap with Apple-native row highlight, haptic/VoiceOver feedback, and a stable navigation-bar checkmark. It masks immediately on lock/background and discards decrypted page state.

Verified in isolation:

  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace (including 9 entry-document tests)
  • xcodegen generate
  • iPhone 17 Pro simulator build and Xcode Analyze
  • simulator visual checks for long/multiline comments, sensitive reveal/hide, copy feedback, aligned actions, Dynamic Type, and background relock
  • signed physical iPhone build and successful install with bundle ID de.rfc1437.ironstorage
Implemented in commit `900e62e`. The Rust storage crate now projects lossless entry documents into typed iPhone sections for passwords, named/repeated fields, OTP metadata, notes, unknown fields, empty fields, and storage diagnostics. Sensitivity policy, reveal/copy values, authenticated lease checks, recoverable edits, serialization, and automatic Git commits remain storage-owned; the UniFFI/UIKit layer only presents those records and invokes typed actions. The native viewer masks password and OTP secrets, leaves tags/comments/notes visible, preserves multiline and long values, supports Dynamic Type/VoiceOver/selection, aligns a fixed action rail, provides eye/edit controls, and copies on row tap with Apple-native row highlight, haptic/VoiceOver feedback, and a stable navigation-bar checkmark. It masks immediately on lock/background and discards decrypted page state. Verified in isolation: - `cargo fmt --all -- --check` - `RUSTFLAGS="-D warnings" cargo check --workspace --all-targets` - `cargo clippy --workspace --all-targets -- -D warnings` - `cargo test --workspace` (including 9 entry-document tests) - `xcodegen generate` - iPhone 17 Pro simulator build and Xcode Analyze - simulator visual checks for long/multiline comments, sensitive reveal/hide, copy feedback, aligned actions, Dynamic Type, and background relock - signed physical iPhone build and successful install with bundle ID `de.rfc1437.ironstorage`
hugo closed this issue 2026-08-11 18:00:06 +00:00
Sign in to join this conversation.