Prepare Apple App Store distribution (#59)
This commit is contained in:
69
apple/AppStore/DISTRIBUTION.md
Normal file
69
apple/AppStore/DISTRIBUTION.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# 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:
|
||||
|
||||
```sh
|
||||
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 .
|
||||
```
|
||||
|
||||
2. 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.
|
||||
3. Create the production archive with normal App Store distribution signing:
|
||||
|
||||
```sh
|
||||
cd apple
|
||||
xcodegen generate
|
||||
xcodebuild -project IronStorage.xcodeproj -scheme IronStorage \
|
||||
-configuration Release -destination 'generic/platform=iOS' \
|
||||
-archivePath /private/tmp/IronStorage.xcarchive archive
|
||||
```
|
||||
|
||||
4. 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.
|
||||
5. Export and upload with the checked-in App Store Connect export options:
|
||||
|
||||
```sh
|
||||
xcodebuild -exportArchive \
|
||||
-archivePath /private/tmp/IronStorage.xcarchive \
|
||||
-exportPath /private/tmp/IronStorage-AppStore \
|
||||
-exportOptionsPlist AppStore/ExportOptions.plist
|
||||
```
|
||||
|
||||
6. 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.
|
||||
7. 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.
|
||||
8. 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.
|
||||
Reference in New Issue
Block a user