Prepare Android release artifacts and listing (#112)
Android ARM verification / rust (push) Failing after 49m41s
Android ARM verification / android (push) Failing after 8s
Dependency security audit / rustsec (push) Failing after 22s

Add Rust distribution auditing, pinned post-build AAB signing, complete offline third-party notices, an Android privacy policy and reviewable Play listing assets. Preserve the application ID and audit both ARM ABIs, native symbols, baseline profiles and R8 mapping.

Fix dialog focus ownership, navigation-triggered cleanup loops and stale authentication errors after first-run setup, with native and real-activity regressions.

Google Play publication is deferred by the user. Issue #112 remains open for production signing, Console declarations and actual Play install/update verification.
This commit is contained in:
hugo committed 2026-10-15 16:16:01 +02:00
1 parent b54636b7bc
commit bf83a0ba41
51 files changed
+1493 -41

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
# Google Play listing draft
`listing.toml` is the English text for publisher review. Nothing in this directory
has been uploaded to Google Play. Account enrollment, legal declarations,
production signing, the rating questionnaire and publication are still pending.
See `docs/android/distribution.md` for the release gate and remaining evidence.
## Graphics
- `graphics/icon.png`: 512×512, 32-bit PNG, using the existing vault artwork.
- `graphics/feature-graphic.png`: 1024×500, opaque 24-bit PNG. Its editable SVG
combines that same artwork with the app name and GPG/Git/TOTP description.
The source SVGs reference the existing Android vault image. Exports use the
system Arial font. No store badges, ratings or unsupported security claims are
included.
## Phone screenshots
The four numbered PNGs under `screenshots/` are opaque 24-bit, 1080×1920 images
captured from the actual optimized Android app on the retained ARM64 API 37
emulator on 15 October 2026. They contain only agent-managed demonstration data:
1. Home: a local Git branch, three commits and a clean working tree.
2. Passwords: a demonstration folder and a locked password entry.
3. TOTP: cached-entry search and the genuine empty-catalog state; no invented OTP.
4. Privacy: the offline Android privacy policy with its normal scrollable dialog.
These descriptions can also be used as screenshot alt text. No password,
passphrase, key, token, repository location or diagnostic transcript is shown.
Android Studio's native capture includes the physical 1080×2400 display. The
temporary logical display was 1080×1920, letterboxed with 240 pixels above and
below. Unmodified captures are retained in `screenshots/source/`; each SVG
exports exactly that logical viewport, without scaling or changing app pixels.
The emulator's original display size and Android Studio screenshot destination
were restored afterward. These are phone assets; tablet screenshots have not
been captured or submitted.
The exported PNG dimensions, bit depth, color type and file-size limits were
checked, and the visible captures were reviewed for blank/transient frames and
secrets. Recheck current Play requirements and the final app before submission.
Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

+10
View File
@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="500" viewBox="0 0 1024 500">
<title>IronStorage — local-first passwords with GPG, Git and TOTP</title>
<rect width="1024" height="500" fill="#191d26"/>
<image xlink:href="../../app/src/main/res/drawable-nodpi/ic_vault.png" width="500" height="500"/>
<rect x="500" width="1" height="500" fill="#444955"/>
<rect x="548" y="134" width="48" height="4" rx="2" fill="#d5c0f2"/>
<text x="545" y="216" fill="#faf8ff" font-family="Arial, sans-serif" font-size="54" font-weight="700">IronStorage</text>
<text x="548" y="272" fill="#d8dce5" font-family="Arial, sans-serif" font-size="27">Local-first passwords</text>
<text x="548" y="319" fill="#b3bac8" font-family="Arial, sans-serif" font-size="24">GPG · Git · TOTP</text>
</svg>

After

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512" height="512" viewBox="0 0 512 512">
<title>IronStorage vault icon</title>
<image xlink:href="../../app/src/main/res/drawable-nodpi/ic_vault.png" width="512" height="512"/>
</svg>

After

Width:  |  Height:  |  Size: 278 B

+37
View File
@@ -0,0 +1,37 @@
# Draft listing; publication and the IARC questionnaire are still pending.
locale = "en-US"
title = "IronStorage"
short_description = "Local-first pass-compatible passwords, TOTP, Autofill and HTTPS Git sync."
category = "PRODUCTIVITY"
contains_ads = false
support_url = "https://git.rfc1437.de/hugo/IronStorage/issues"
privacy_url = "https://git.rfc1437.de/hugo/IronStorage/src/branch/main/android/features/src/main/res/raw/privacy.txt"
full_description = """
Keep control of your password store. IronStorage works locally with the standard
pass repository format: GPG-encrypted entries in a Git repository.
Create a local store or connect your own HTTPS Git server. Browse folders, search
entries, generate passwords, edit credentials and synchronize changes. Configure
your own GPG recipients and Git identity. IronStorage does not require an
IronStorage account or operate a password-storage service.
Use time-based one-time passwords, including cached discovery and search while
the store is locked. Optional Android biometric unlock protects saved
passphrases with Android Keystore. Enable Autofill in Android settings or, on
Android 14 and later, select IronStorage as a Credential Manager provider.
Credential selection remains under your control.
Transfer compatible GPG key material through QR codes. Camera frames are
processed on your device. Review the warning before exporting private keys.
No advertising or analytics. Your optional HTTPS Git host receives your encrypted
repository and unencrypted Git metadata; its administrator controls retention.
Android cloud backup and device transfer are disabled. Uninstalling removes the
local store and protected records: keep independent copies of the repository,
GPG private keys and passphrases you need. Synchronization is not a substitute
for a recovery plan.
Requires Android 8.0 or later on ARM. Autofill and biometric availability depend
on Android and device configuration. Credential Manager requires Android 14 or
later. HTTPS Git is supported; SSH is not enabled in this Android release.
"""
Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1080" height="1920" viewBox="0 240 1080 1920"><image width="1080" height="2400" xlink:href="source/01-home.png"/></svg>

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1080" height="1920" viewBox="0 240 1080 1920"><image width="1080" height="2400" xlink:href="source/02-passwords.png"/></svg>

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1080" height="1920" viewBox="0 240 1080 1920"><image width="1080" height="2400" xlink:href="source/03-totp.png"/></svg>

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1080" height="1920" viewBox="0 240 1080 1920"><image width="1080" height="2400" xlink:href="source/04-privacy.png"/></svg>

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB