Files
IronStorage/apple/AppStore/DISTRIBUTION.md

3.2 KiB

Apple App Store distribution

Use distribution/ only as ignored local staging. Never store Apple credentials, signing material, review credentials, GPG material, application tokens, or private diagnostics in the repository or release logs.

Release identity

  • iPhone application: de.rfc1437.ironstorage
  • AutoFill extension: de.rfc1437.ironstorage.autofill
  • Apple Watch companion: de.rfc1437.ironstorage.watch
  • Apple Developer team: MU22FMRGK8

The submitted archive must embed the Watch application beneath the iPhone application. An iPhone-only archive is not a releasable IronStorage build.

Prepare and submit

  1. Generate the project and release attribution, then run the release verifier:
cargo metadata --format-version 1 --filter-platform aarch64-apple-ios \
  > /private/tmp/ironstorage-ios-metadata.json
cargo run -p ironstorage-apple-release -- licenses \
  /private/tmp/ironstorage-ios-metadata.json \
  apple/Resources/App/ThirdPartyLicenses.txt
cargo run -p ironstorage-apple-release -- verify .
  1. Run the repository gates and build both simulator applications. Validate the local-first flow with synthetic data: generate or import a GPG key, create folders and encrypted entries, read TOTP codes, select Watch entries, and verify the Watch list and selected-code progress display.

  2. Create the production archive with normal App Store distribution signing:

    cd apple
    xcodegen generate
    xcodebuild -project IronStorage.xcodeproj -scheme IronStorage \
      -configuration Release -destination 'generic/platform=iOS' \
      -archivePath /private/tmp/IronStorage.xcarchive archive
    
  3. Inspect the archive before upload. The iPhone, AutoFill, and Watch bundle identifiers and versions must match the metadata; the Watch app must be embedded; privacy manifests and license resources must be present; the archive must use distribution signing and must not contain get-task-allow, simulator artifacts, synthetic demo data, private endpoints, or secrets.

  4. Export and upload with the checked-in App Store Connect export options:

    xcodebuild -exportArchive \
      -archivePath /private/tmp/IronStorage.xcarchive \
      -exportPath /private/tmp/IronStorage-AppStore \
      -exportOptionsPlist AppStore/ExportOptions.plist
    
  5. In App Store Connect, complete the listing from metadata.toml, upload the reviewed screenshots, answer privacy and encryption questions, provide local-first review instructions, select the processed build, and submit it for review. Do not provide a production password store or real credentials.

  6. After approval, install the public release from the App Store on the paired iPhone and Apple Watch. Verify local onboarding, key overwrite confirmation, local Git history, folders, encrypted entries, Face ID, TOTP, optional HTTPS pull and push, Watch snapshot delivery, the Watch entry-only list, and the larger selected code with its validity progress indicator.

  7. Verify an App Store update in place. Verify the documented uninstall and reinstall Keychain lifecycle only with disposable test data; never erase the paired physical device or its unrelated IronStorage data.