The TOTP cache already lived in iPhone Application Support and survived installs, but its store identity hashed the absolute app-container vault path. iOS relocates that container during installation, so Rust rejected the surviving cache as belonging to another store.
Storage now derives the catalog identity from the canonical vault path relative to the cache directory, preserving store isolation while remaining stable when the complete application container moves. Swift remains presentation-only.
Added a regression that creates a real cache, relocates the complete application container, opens the cached page without decryption, and verifies a subsequent discovery is 100% cache hits with zero secret requests.
Read-only paired-iPhone inspection confirmed config.toml, the vault, and the 76 KB totp-catalog.toml are all in Library/Application Support/ironstorage.
Implemented in e45ad07.
Root cause and implementation:
- The TOTP cache already lived in iPhone Application Support and survived installs, but its store identity hashed the absolute app-container vault path. iOS relocates that container during installation, so Rust rejected the surviving cache as belonging to another store.
- Storage now derives the catalog identity from the canonical vault path relative to the cache directory, preserving store isolation while remaining stable when the complete application container moves. Swift remains presentation-only.
- Added a regression that creates a real cache, relocates the complete application container, opens the cached page without decryption, and verifies a subsequent discovery is 100% cache hits with zero secret requests.
Verification passed:
- cargo fmt --all -- --check
- RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
- cargo clippy --workspace --all-targets -- -D warnings
- cargo test --workspace
- cargo test -p ironstorage --test mobile_totp
- git diff --check
- Read-only paired-iPhone inspection confirmed config.toml, the vault, and the 76 KB totp-catalog.toml are all in Library/Application Support/ironstorage.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The cache must residents a place that survives installs, because otherwise users have to go through the rebuild with every release.
Cache for Toto on iPhone must survive installsto Cache for Totp on iPhone must survive installsImplemented in
e45ad07.Root cause and implementation:
Verification passed: