appuploader-cli command manual

This manual lists every appuploader-cli command with its purpose, usage, every flag and examples. It is generated from the tool’s command definitions and matches the current version. New to the tool? Start with the getting started guide.

In a terminal, appuploader-cli <command> --help shows the same information.


Contents


Global flags

Every command accepts these flags.

Flag Description
--account string saved account to use: alias, Apple ID or API key id (APPUPLOADER_ACCOUNT)
--json machine-readable output: one JSON object on stdout, progress on stderr
--project string path to appuploader.yaml (default: the nearest one above the working directory)
--proxy string HTTP(S) proxy for this run
-q, --quiet no progress output
--team string developer team id (APPUPLOADER_TEAM_ID)
-v, --verbose show what the tool does behind the scenes
-y, --yes answer yes to confirmations (scripts must pass it for destructive commands)

Commands that act on an app also take --app (bundle ID or App Store Connect app ID; default: app.bundle_id in appuploader.yaml) and, where a version matters, --app-version (default: release.version, else the editable version).


Accounts and teams

appuploader-cli login

Sign in with an API key or an Apple ID and keep the session.

We recommend signing in with an Apple ID and an app-specific password: it never triggers two-factor authentication and can do everything, including what Apple’s API cannot (create apps, accept agreements, set prices and privacy labels).

An App Store Connect API key needs no password or code either, but cannot do those things; a free Apple ID (–free) can manage signing only.

Passwords come from an environment variable or stdin, never from a flag. With a regular password a two-factor code is asked for on the terminal; a script passes –2fa-code, or –2fa-from-file and writes the code there.

Usage

appuploader-cli login [flags]

Flags

Flag Description
--2fa-code string two-factor verification code (APPUPLOADER_2FA_CODE)
--2fa-from-file string wait for the verification code to appear in this file (deleted once read)
--2fa-stdin read the verification code from stdin
--alias string name for this account, usable with –account
--api-issuer-id string API key issuer id (APPUPLOADER_API_ISSUER_ID)
--api-key-file string App Store Connect API key as a JSON file {key_id, issuer_id, key} (APPUPLOADER_API_KEY_FILE)
--api-key-id string API key id (APPUPLOADER_API_KEY_ID)
--api-key-path string path to the AuthKey_*.p8 file (APPUPLOADER_API_KEY_PATH, or its content in APPUPLOADER_API_KEY_P8)
--apple-id string Apple ID email (APPUPLOADER_APPLE_ID)
--free the Apple ID has no paid Developer Program membership (signing only: certificates, bundle ids, profiles, devices)
--password-env string environment variable that holds the password (default APPUPLOADER_PASSWORD); an app-specific password goes here too
--password-stdin read the password from the first line of stdin
--save-key keep the .p8 with the account so later runs need no key material
--sms have the code sent by SMS instead of to trusted devices
--voice have the code read out in a phone call

Examples

1APPLE_PW='xxxx-xxxx-xxxx-xxxx' appuploader-cli login --apple-id dev@example.com --password-env APPLE_PW --alias me   # app-specific password, recommended
2appuploader-cli login --api-key-file AuthKey_ABC123.json --alias ci
3appuploader-cli login --apple-id dev@example.com --password-env APPLE_PW --2fa-from-file /tmp/code.txt
4appuploader-cli login --apple-id free@example.com --free

appuploader-cli logout

Sign the selected account out (it stays listed; account remove deletes it).

Usage

appuploader-cli logout

Examples

1appuploader-cli logout --account me

appuploader-cli account

Saved accounts.

Subcommands: list, remove

appuploader-cli account list

List the saved accounts.

Usage

appuploader-cli account list [flags]

Flags

Flag Description
--no-check do not check whether each session is still signed in

Examples

1appuploader-cli account list
2appuploader-cli account list --no-check   # faster: skip the session check

appuploader-cli account remove

Delete the selected account, its session and its certificates folder.

Usage

appuploader-cli account remove

Examples

1appuploader-cli account remove --account me --yes

appuploader-cli whoami

Show which account and team the commands act as.

Usage

appuploader-cli whoami

Examples

1appuploader-cli whoami
2appuploader-cli whoami --account ci --json

appuploader-cli team

Developer teams.

Subcommands: list, use

appuploader-cli team list

List the teams the account belongs to.

Usage

appuploader-cli team list

Examples

1appuploader-cli team list

appuploader-cli team use

Make a team the account’s default.

Usage

appuploader-cli team use <team-id>

Examples

1appuploader-cli team use ABCDE12345

appuploader-cli api-key

App Store Connect API keys (Apple ID only).

Subcommands: create, list, revoke

appuploader-cli api-key create

Create an App Store Connect API key (Apple ID with the Admin role).

Usage

appuploader-cli api-key create [flags]

Flags

Flag Description
--alias string name for the account created with –login
--login also sign the new key in as an account
--name string key name as shown in App Store Connect (default “appuploader-cli”)
--out string write the key to this JSON file (default AuthKey_.json in the working directory)

Examples

1appuploader-cli api-key create --name ci --login --alias ci-key

appuploader-cli api-key list

List the team’s API keys.

Usage

appuploader-cli api-key list

Examples

1appuploader-cli api-key list

appuploader-cli api-key revoke

Revoke an API key.

Usage

appuploader-cli api-key revoke <key-id>

Examples

1appuploader-cli api-key revoke ABC123DEFG --yes

appuploader-cli agreement

Apple developer agreements (Apple ID only).

Subcommands: accept, list

appuploader-cli agreement accept

Accept pending agreements (all of them when no id is given).

Usage

appuploader-cli agreement accept [agreement-id...]

Examples

1appuploader-cli agreement accept --yes
2appuploader-cli agreement accept 2ed0a77d-…

appuploader-cli agreement list

List the Apple agreements waiting to be accepted.

Tax and banking agreements can only be completed in App Store Connect → Business.

Usage

appuploader-cli agreement list

Examples

1appuploader-cli agreement list

Project and release pipeline

appuploader-cli init

Write a starter appuploader.yaml for the project.

The project file names the app, the version, the account and where the listing, screenshots and signing files live; every command reads it. –from-app also downloads the live listing.

Usage

appuploader-cli init [flags]

Flags

Flag Description
--bundle-id string the app’s bundle id
--dir string directory to write appuploader.yaml into (default “.”)
--force overwrite an existing file
--from-app also download the app’s current listing into the metadata folder (needs a signed-in account)
--name string the app’s name

Examples

1appuploader-cli init --bundle-id com.example.app --name "My App"
2appuploader-cli init --bundle-id com.example.app --from-app

appuploader-cli doctor

Check that the account, team, project file, package and listing are ready.

Read-only. Checks the account, team, agreements, project file, bundle id, app record, package, listing folder and licence, and says how to fix each problem.

Usage

appuploader-cli doctor [flags]

Flags

Flag Description
--for-release release also check everything release will need

Examples

1appuploader-cli doctor
2appuploader-cli doctor --for-release --json

appuploader-cli release

Run the whole pipeline from appuploader.yaml: signing → app → version → upload → metadata → submit.

Runs every step appuploader.yaml asks for, in order:

preflight → bundle → certs → profiles → app → version → upload → metadata → screenshots → custom-pages
→ build-wait → compliance → review-info → gamecenter → iap → pricing → privacy → submit → testflight

Each step is idempotent and recorded in .appuploader/release-state.json, so re-running after a failure continues where it stopped. Publishing an approved MANUAL version is never a step: run version publish.

Usage

appuploader-cli release [flags]

Flags

Flag Description
--build string ship this build (id or number) instead of uploading one
--dry-run change nothing; report what each step would do
--from string start at this step; steps: preflight, bundle, certs, profiles, app, version, upload, metadata, screenshots, custom-pages, build-wait, compliance, review-info, gamecenter, iap, pricing, privacy, submit, testflight
--ipa string package to upload (default: release.build.path)
--no-submit stop before submitting for review
--only strings run only these steps, comma separated
--p12-password-env string environment variable that holds the .p12 password (default APPUPLOADER_P12_PASSWORD)
--restart start from the first step instead of continuing after the last failure
--skip strings steps to skip, comma separated
--to string stop after this step

Examples

1appuploader-cli release --dry-run
2appuploader-cli release
3appuploader-cli release --from metadata --to submit
4appuploader-cli release --only screenshots,custom-pages
5appuploader-cli release --no-submit --json

appuploader-cli skill

Generate the skill file for AI agents.

Writes a Markdown skill generated from this binary’s commands: the rules an agent must follow (JSON output, secrets, what it must never do on its own), exit codes and retry policy, recipes and the full command index.

  • --format claude: SKILL.md with front matter for Claude Code skills (default)
  • --format agents: plain Markdown for AGENTS.md, CLAUDE.md or other agents’ instruction files
  • --install user: writes ~/.claude/skills/appuploader-cli/SKILL.md
  • --install project: writes ./.claude/skills/appuploader-cli/SKILL.md

Usage

appuploader-cli skill [flags]

Flags

Flag Description
--format string claude (SKILL.md with front matter) or agents (plain Markdown) (default “claude”)
--install string write it where Claude Code finds skills: user or project
--out string write it to this file instead of stdout

Examples

1appuploader-cli skill                      # print the skill to stdout
2appuploader-cli skill --install project    # ./.claude/skills/appuploader-cli/SKILL.md
3appuploader-cli skill --install user       # ~/.claude/skills/appuploader-cli/SKILL.md
4appuploader-cli skill --format agents >> AGENTS.md

appuploader-cli exit-codes

Print the exit codes and error codes this tool uses.

Usage

appuploader-cli exit-codes

Examples

1appuploader-cli exit-codes

Signing: Bundle IDs, certificates, devices and profiles

appuploader-cli bundle

Bundle ids (App IDs) and their capabilities.

Subcommands: capabilities, create, delete, get, list, set

appuploader-cli bundle capabilities

List the capabilities a bundle id can have.

Usage

appuploader-cli bundle capabilities

Examples

1appuploader-cli bundle capabilities

appuploader-cli bundle create

Register a bundle id, or bring an existing one’s capabilities up to date.

Usage

appuploader-cli bundle create [identifier] [flags]

Flags

Flag Description
--app-clip register an App Clip id (Apple ID accounts only)
--cap bundle capabilities capability to enable: ID or ID=SETTING:OPTION (repeatable; see bundle capabilities)
--name string name shown on the developer portal (default: app.name in appuploader.yaml, else the identifier)
--parent string the app’s bundle id an App Clip belongs to
--platform string IOS | MAC_OS | UNIVERSAL (API key accounts only)

Examples

1appuploader-cli bundle create com.example.app --name "My App" --cap PUSH_NOTIFICATIONS,GAME_CENTER
2appuploader-cli bundle create   # identifier, name and capabilities from appuploader.yaml

appuploader-cli bundle delete

Delete a bundle id.

Usage

appuploader-cli bundle delete <identifier|id>

Examples

1appuploader-cli bundle delete com.example.old --yes

appuploader-cli bundle get

Show a bundle id and its capabilities.

Usage

appuploader-cli bundle get <identifier|id>

Examples

1appuploader-cli bundle get com.example.app

appuploader-cli bundle list

List the team’s bundle ids.

Usage

appuploader-cli bundle list

Examples

1appuploader-cli bundle list

appuploader-cli bundle set

Enable (–cap) or disable (–remove) capabilities.

Usage

appuploader-cli bundle set <identifier|id> [flags]

Flags

Flag Description
--cap stringArray capability to enable: ID or ID=SETTING:OPTION (repeatable)
--remove stringArray capability to disable (repeatable)

Examples

1appuploader-cli bundle set com.example.app --cap PUSH_NOTIFICATIONS --remove ICLOUD

appuploader-cli cert

Signing certificates.

Subcommands: create, download, list, revoke, types

appuploader-cli cert create

Get a usable certificate of a type: reuse one whose .p12 is at hand, else issue a new one.

The certificate’s key is generated locally and the .p12 is saved to –out. Without –new, a valid certificate of the type whose .p12 can be produced (local key or appuploader.net backup) is reused.

Usage

appuploader-cli cert create [flags]

Flags

Flag Description
--backup also back the .p12 up to appuploader.net
--min-days-left int issue a new one when the best existing certificate expires sooner than this (default 30)
--new always issue a new certificate, even when a usable one exists
--out string directory to save .p12 into (default: signing.out_dir in appuploader.yaml)
--owner-id string app, pass type or merchant id the certificate is for (push, Pass Type and Apple Pay types)
--p12-password-env string environment variable that holds the .p12 password (default APPUPLOADER_P12_PASSWORD)
--type cert types certificate type, e.g. IOS_DISTRIBUTION, IOS_DEVELOPMENT, MAC_APP_DISTRIBUTION (see cert types; default: signing.certs in appuploader.yaml)

Examples

1P12_PW=… appuploader-cli cert create --type IOS_DISTRIBUTION --out ./signing --p12-password-env P12_PW
2appuploader-cli cert create --type IOS_DISTRIBUTION --new   # issue one even if a usable one exists

appuploader-cli cert download

Save a certificate’s .p12 (from the local key, else the appuploader.net backup).

Usage

appuploader-cli cert download <cert-id> [flags]

Flags

Flag Description
--out string directory to save .p12 into (default “.”)

Examples

1appuploader-cli cert download 7ABC123DEF --out ./signing

appuploader-cli cert list

List the team’s certificates.

Usage

appuploader-cli cert list [flags]

Flags

Flag Description
--type string only this type, e.g. IOS_DISTRIBUTION
--valid hide expired and revoked certificates

Examples

1appuploader-cli cert list --type IOS_DISTRIBUTION --valid

appuploader-cli cert revoke

Revoke a certificate and delete its local key.

Usage

appuploader-cli cert revoke <cert-id>

Examples

1appuploader-cli cert revoke 7ABC123DEF --yes

appuploader-cli cert types

List the certificate types this account can issue.

Usage

appuploader-cli cert types

Examples

1appuploader-cli cert types

appuploader-cli device

Registered test devices.

Subcommands: add, import, list, set

appuploader-cli device add

Register a device (an already registered UDID is reported, not an error).

Usage

appuploader-cli device add <udid> [flags]

Flags

Flag Description
--name string device name (required)
--platform string IOS | MAC_OS | TV_OS | … (default “IOS”)

Examples

1appuploader-cli device add 00008110-000A1B2C3D4E5F6 --name "QA iPhone"

appuploader-cli device import

Register devices from a devices.txt (TSV) or .deviceids file.

Usage

appuploader-cli device import <file>

Examples

1appuploader-cli device import devices.txt

appuploader-cli device list

List registered devices.

Usage

appuploader-cli device list [flags]

Flags

Flag Description
--enabled hide disabled devices
--platform string only this platform: IOS, MAC_OS, …

Examples

1appuploader-cli device list --enabled

appuploader-cli device set

Rename, enable or disable a device.

Usage

appuploader-cli device set <device-id> [flags]

Flags

Flag Description
--enabled –enabled=false disables the device, –enabled enables it (default true)
--name string new name

Examples

1appuploader-cli device set ABCD1234 --name "QA iPhone 2"
2appuploader-cli device set ABCD1234 --enabled=false

appuploader-cli profile

Provisioning profiles.

Subcommands: clean, create, delete, download, list

appuploader-cli profile clean

Delete expired and/or invalid profiles.

Usage

appuploader-cli profile clean [flags]

Flags

Flag Description
--dry-run only list what would be deleted
--expired delete expired profiles
--invalid delete invalid profiles
--prefix string only profiles whose name starts with this

Examples

1appuploader-cli profile clean --expired --invalid --dry-run

appuploader-cli profile create

Get a working profile of this name: reuse it, rebuild it when stale, or create it.

Picks every valid certificate of the right kind and (for development and ad-hoc profiles) the devices asked for, creates the profile or rebuilds it when its certificates or devices have changed, and saves the file to –out.

Usage

appuploader-cli profile create [name] [flags]

Flags

Flag Description
--all-devices include every enabled device (development and ad-hoc profiles)
--bundle-id string bundle id (default: app.bundle_id in appuploader.yaml)
--cert stringArray certificate id to include (repeatable; default: every valid certificate of the right kind)
--device stringArray device id to include (repeatable; development and ad-hoc profiles)
--force rebuild even when the current profile already matches
--out string directory to save the profile file into (default: signing.out_dir in appuploader.yaml)
--type string profile type: IOS_APP_STORE, IOS_APP_DEVELOPMENT, IOS_APP_ADHOC, MAC_APP_STORE, … (required with a name)

Examples

1appuploader-cli profile create "App AppStore" --type IOS_APP_STORE --out ./signing
2appuploader-cli profile create "App Dev" --type IOS_APP_DEVELOPMENT --all-devices
3appuploader-cli profile create   # every profile in appuploader.yaml

appuploader-cli profile delete

Delete a profile.

Usage

appuploader-cli profile delete <name|id|uuid>

Examples

1appuploader-cli profile delete "App Old" --yes

appuploader-cli profile download

Save a profile’s .mobileprovision file.

Usage

appuploader-cli profile download <name|id|uuid> [flags]

Flags

Flag Description
--out string directory to save into (default “.”)

Examples

1appuploader-cli profile download "App AppStore" --out ./signing

appuploader-cli profile list

List provisioning profiles.

Usage

appuploader-cli profile list [flags]

Flags

Flag Description
--bundle-id string only profiles of this bundle id
--state string only this state: ACTIVE, EXPIRED, INVALID
--type string only this profile type

Examples

1appuploader-cli profile list --bundle-id com.example.app

appuploader-cli signing

Get every certificate and profile appuploader.yaml lists, saved with a manifest.json.

The one-shot for a build machine: registers the bundle id and devices, gets every certificate and profile signing.certs / signing.profiles list, and writes them with a manifest.json (ids, paths, expiry) to signing.out_dir.

Usage

appuploader-cli signing [flags]

Flags

Flag Description
--force rebuild profiles even when they already match
--out string directory to save into (default: signing.out_dir)
--p12-password-env string environment variable that holds the .p12 password (default APPUPLOADER_P12_PASSWORD)

Examples

1appuploader-cli signing
2appuploader-cli signing --force   # rebuild profiles even when they look fine

Apps, versions and builds

appuploader-cli app

Apps on App Store Connect.

Subcommands: create, get, list, ratings, set

appuploader-cli app create

Create the App Store Connect app record (Apple ID only); an existing app is reported, not an error.

Usage

appuploader-cli app create [bundle-id] [flags]

Flags

Flag Description
--company-name string seller name, asked only for a team’s first app
--name string App Store name, up to 30 characters, unique store-wide (default: app.name in appuploader.yaml)
--platform stringArray IOS | MAC_OS | TV_OS | VISION_OS (repeatable; default: app.platforms)
--primary-locale string primary language, e.g. en-US (default: app.primary_locale, else en-US)
--sku string SKU, unique within the team (default: the bundle id)
--version string first version number (default 1.0)

Examples

1appuploader-cli app create com.example.app --name "My App" --sku myapp01 --primary-locale en-US
2appuploader-cli app create   # values from appuploader.yaml

appuploader-cli app get

Show an app.

Usage

appuploader-cli app get [bundle-id|app-id]

Examples

1appuploader-cli app get com.example.app
2appuploader-cli app get 6822110130

appuploader-cli app list

List the team’s apps.

Usage

appuploader-cli app list

Examples

1appuploader-cli app list

appuploader-cli app ratings

List customers’ ratings and reviews of the version.

Usage

appuploader-cli app ratings

Examples

1appuploader-cli app ratings --json

appuploader-cli app set

Change app-level settings (content rights declaration).

Usage

appuploader-cli app set [flags]

Flags

Flag Description
--content-rights string none | third_party: whether the app contains, shows or accesses third-party content (default: app.content_rights)

Examples

1appuploader-cli app set --content-rights none

appuploader-cli version

App Store versions.

Subcommands: create, get, list, publish, set

appuploader-cli version create

Get an editable version with this number: create it, renumber the open one, or reuse it; then apply the settings.

Apple allows one editable version at a time: an open version with another number is renumbered, one with this number is reused.

Usage

appuploader-cli version create [version] [flags]

Flags

Flag Description
--copyright string copyright line
--phased 7-day phased release (–phased=false turns it off)
--platform string IOS | MAC_OS | TV_OS | VISION_OS (default: release.platform in appuploader.yaml, else IOS)
--release-date string release date for SCHEDULED, RFC 3339
--release-type string MANUAL | AFTER_APPROVAL | SCHEDULED

Examples

1appuploader-cli version create 1.2.0 --release-type MANUAL --copyright "2026 Example Ltd"
2appuploader-cli version create   # release.version from appuploader.yaml

appuploader-cli version get

Show a version, its phased release and the build it ships (default: the editable version).

Usage

appuploader-cli version get [version]

Examples

1appuploader-cli version get
2appuploader-cli version get 1.2.0

appuploader-cli version list

List the app’s App Store versions.

Usage

appuploader-cli version list

Examples

1appuploader-cli version list

appuploader-cli version publish

Publish a version that App Review approved.

Releases a version that App Review approved and that waits for its developer (release type MANUAL, state PENDING_DEVELOPER_RELEASE). This makes it public and cannot be undone, so it is a separate command the user runs: the release pipeline never calls it, and the version number must be given explicitly and match.

Usage

appuploader-cli version publish <version>

Examples

1appuploader-cli version publish 1.2.0   # asks for confirmation

appuploader-cli version set

Change a version’s copyright, release type, phased release or build.

–build attaches a build without submitting (Apple needs one before the version can join a review submission).

Usage

appuploader-cli version set [version] [flags]

Flags

Flag Description
--build string build to ship: build id, build number, or latest (attaches it without submitting)
--copyright string copyright line
--phased 7-day phased release (–phased=false turns it off)
--release-date string release date for SCHEDULED, RFC 3339
--release-type string MANUAL | AFTER_APPROVAL | SCHEDULED

Examples

1appuploader-cli version set --phased --release-type AFTER_APPROVAL
2appuploader-cli version set --build latest

appuploader-cli build

Builds: upload, inspect, wait.

Subcommands: compliance, get, info, list, upload, wait

appuploader-cli build compliance

Answer the export compliance (encryption) question for a build.

Usage

appuploader-cli build compliance [build] [flags]

Flags

Flag Description
--exempt the build uses no encryption, or only exempt encryption (–exempt=false: it uses non-exempt encryption)

Examples

1appuploader-cli build compliance --exempt
2appuploader-cli build compliance 42 --exempt=false

appuploader-cli build get

Show a build: build id, build number, or latest (the default).

Usage

appuploader-cli build get [build]

Examples

1appuploader-cli build get
2appuploader-cli build get 42

appuploader-cli build info

Generate the App Store asset description plist (AppStoreInfo.plist) of an .ipa / .pkg (uses your App Uploader license).

Usage

appuploader-cli build info <file> [flags]

Flags

Flag Description
--format string plist format: xml | binary (default “xml”)
-o, --output string write the plist to this file instead of stdout
-u, --username string Apple ID the license belongs to (default: the selected account’s Apple ID)

Examples

1appuploader-cli build info ./build/App.ipa -o AppStoreInfo.plist

appuploader-cli build list

List the app’s builds, newest first.

Usage

appuploader-cli build list [flags]

Flags

Flag Description
--limit int how many to show (default 20)

Examples

1appuploader-cli build list --limit 5

appuploader-cli build upload

Upload a signed .ipa / .pkg to App Store Connect (uses your App Uploader license).

Uses the Apple ID’s App Uploader license; when uploading with an API key account, name the license holder with -u. A build number already on App Store Connect is reported, not uploaded twice.

Usage

appuploader-cli build upload [file] [flags]

Flags

Flag Description
--timeout string how long –wait waits (default 30m)
--type string package type: ios | osx | appletvos | xros (default: release.build.type, else ios)
-u, --username string Apple ID the license belongs to (needed with an API key account)
--wait wait until Apple has processed the build

Examples

1appuploader-cli build upload ./build/App.ipa --wait
2appuploader-cli build upload ./build/App.ipa --account ci -u owner@example.com

appuploader-cli build wait

Wait until a build has been processed: build id, build number, or latest (the default).

Usage

appuploader-cli build wait [build] [flags]

Flags

Flag Description
--timeout string give up after this long (default 30m)

Examples

1appuploader-cli build wait --timeout 45m
2appuploader-cli build wait 42

Store listing, screenshots and assets

appuploader-cli metadata

Store listing text, as a folder of files per locale.

Subcommands: export, import, translate, validate

appuploader-cli metadata export

Save the version’s listing text (and optionally its media) to a folder.

Usage

appuploader-cli metadata export [flags]

Flags

Flag Description
--dir string folder to write (default: metadata.dir in appuploader.yaml)
--previews also download app previews
--screenshots also download screenshots

Examples

1appuploader-cli metadata export --dir ./store --screenshots --previews

appuploader-cli metadata import

Upload a listing folder to the version (only what the folder contains; an empty file never clears a value).

The folder layout is deliver-style: one sub-folder per locale with one text file per field (see cli-config.md). Only what exists on disk is uploaded; an empty file never clears Apple’s value; each locale × device slot of screenshots and previews is replaced as a whole.

Usage

appuploader-cli metadata import [flags]

Flags

Flag Description
--dir string folder to read (default: metadata.dir in appuploader.yaml)
--only strings only these parts: config, review, locales, screenshots, previews (default: everything present)

Examples

1appuploader-cli metadata import --dir ./store
2appuploader-cli metadata import --only locales

appuploader-cli metadata translate

Machine-translate listing text into other locales (uses appuploader.net AI credits).

Usage

appuploader-cli metadata translate [flags]

Flags

Flag Description
--dir string folder whose files to translate (default: metadata.dir)
--from string source locale, e.g. en-US (default: metadata.translate.from in appuploader.yaml)
--remote translate the version’s text on App Store Connect instead of local files
--to strings target locales (default: metadata.translate.to)

Examples

1appuploader-cli metadata translate --dir ./store --from en-US --to zh-Hans,ja

appuploader-cli metadata validate

Check a listing folder offline: text limits, locale names, screenshot sizes and file names.

Usage

appuploader-cli metadata validate [flags]

Flags

Flag Description
--dir string folder to check (default: metadata.dir in appuploader.yaml)
--strict treat warnings as errors

Examples

1appuploader-cli metadata validate --dir ./store --strict

appuploader-cli screenshot

App Store screenshots.

Subcommands: clear, copy, list, upload

appuploader-cli screenshot clear

Delete a locale’s screenshots (all device slots, or one).

Usage

appuploader-cli screenshot clear [flags]

Flags

Flag Description
--display-type string only this device slot, e.g. APP_IPHONE_67
--locale string locale (required)

Examples

1appuploader-cli screenshot clear --locale en-US --display-type APP_IPHONE_67 --yes

appuploader-cli screenshot copy

Copy one locale’s screenshots to other locales.

Usage

appuploader-cli screenshot copy [flags]

Flags

Flag Description
--from string source locale (required)
--overwrite replace what the target locales already have in those device slots
--to strings target locales (required)

Examples

1appuploader-cli screenshot copy --from en-US --to de-DE,fr-FR --overwrite

appuploader-cli screenshot list

List a locale’s screenshots by device slot.

Usage

appuploader-cli screenshot list [flags]

Flags

Flag Description
--locale string locale (required)

Examples

1appuploader-cli screenshot list --locale en-US

appuploader-cli screenshot upload

Upload screenshots from a folder; each file goes to the device slot its pixel size fits.

PNG / JPEG files; each goes to the device slot its pixel size matches (iPhone Duo sizes go through the asset library). Without –replace the files are added to what the slot already shows.

Usage

appuploader-cli screenshot upload <dir> [flags]

Flags

Flag Description
--locale string the folder holds one locale’s files (default: one sub-folder per locale, //…)
--replace replace each affected device slot instead of adding to it

Examples

1appuploader-cli screenshot upload ./store/screenshots --replace
2appuploader-cli screenshot upload ./shots/en --locale en-US

appuploader-cli preview

App preview videos.

Subcommands: clear, list, upload

appuploader-cli preview clear

Delete a locale’s preview videos.

Usage

appuploader-cli preview clear [flags]

Flags

Flag Description
--locale string locale (required)

Examples

1appuploader-cli preview clear --locale en-US --yes

appuploader-cli preview list

List a locale’s preview videos by device slot.

Usage

appuploader-cli preview list [flags]

Flags

Flag Description
--locale string locale (required)

Examples

1appuploader-cli preview list --locale en-US

appuploader-cli preview upload

Upload app preview videos from

//, replacing each affected device slot.

Videos named <DISPLAY_TYPE>_.mp4, or any name sorted into device slots by resolution.

Usage

appuploader-cli preview upload <dir> [flags]

Flags

Flag Description
--locale string only this locale’s sub-folder

Examples

1appuploader-cli preview upload ./store/previews
2appuploader-cli preview upload ./store/previews --locale zh-Hans

appuploader-cli asset

Asset library: upload once, show on any locale, page or test (also iPhone Duo screenshots, header and search results).

Subcommands: delete, list, place, placements, specs, unplace, upload

appuploader-cli asset delete

Delete assets from the library.

Usage

appuploader-cli asset delete <asset-id>... [flags]

Flags

Flag Description
--purge also remove the asset from every place that still shows it

Examples

1appuploader-cli asset delete 84400019-… --yes
2appuploader-cli asset delete 84400019-… --purge --yes   # remove it from every place first

appuploader-cli asset list

List the app’s asset library.

Usage

appuploader-cli asset list [flags]

Flags

Flag Description
--category string screenshots or creative
--media string image or video
--state strings only these states, e.g. FAILED,AWAITING_UPLOAD
--unused only assets nothing shows any more

Examples

1appuploader-cli asset list --category creative
2appuploader-cli asset list --unused   # candidates for asset delete

appuploader-cli asset place

Screenshots and previews: the group is the device slot, detected from the first file’s size unless –group is given. Header (–type header): one 3840x1646 or 5244x2950 image, or a 3840x1646 video of 5-30 s; on iPhone only the middle two thirds show, so keep text there. Search results (–type search): one 3:2 image from 1920x1280 to 3840x2560, or 5244x2950, or a 3:2 video. Header and search results show on iOS 27 and later. Files already in the library are reused, not uploaded again.

Usage

appuploader-cli asset place <file|dir>... [flags]

Flags

Flag Description
--append add after what the group already shows instead of replacing it
--group asset specs placement group (default: detected from the first file’s size; see asset specs)
--locale strings locale(s) (required); created when missing; the same files are placed on each, uploaded once
--type string screenshot, preview, header or search (default “screenshot”)

Examples

1appuploader-cli asset place --locale en-US ./duo/01.png ./duo/02.png
2appuploader-cli asset place --locale en-US,zh-Hans --type header ./header.png
3appuploader-cli asset place --locale en-US --type search ./search.png
4appuploader-cli asset place --locale en-US --type preview --group IPHONE_DUO_PROFILE ./duo.mp4

appuploader-cli asset placements

List what a locale of the version shows: screenshots, previews, header, search results.

Usage

appuploader-cli asset placements [flags]

Flags

Flag Description
--group string only this placement group
--locale string locale (required)
--type string only this placement type: screenshot, preview, header, search

Examples

1appuploader-cli asset placements --locale en-US
2appuploader-cli asset placements --locale en-US --type header

appuploader-cli asset specs

Show the placement groups Apple accepts, with their sizes and limits.

Apple’s current catalog of placement groups with the accepted sizes and the per-surface limits (version / custom page / page test).

Usage

appuploader-cli asset specs [flags]

Flags

Flag Description
--group string only this placement group, e.g. IPHONE_DUO_PROFILE
--type string only this placement type: screenshot, preview, header, search

Examples

1appuploader-cli asset specs --type screenshot --group IPHONE_DUO_PROFILE
2appuploader-cli asset specs --type header

appuploader-cli asset unplace

Stop showing a placement group on the version’s locale(s); the files stay in the library.

Usage

appuploader-cli asset unplace [flags]

Flags

Flag Description
--group string only this group (default: every group of the type)
--locale strings locale(s) (required)
--type string screenshot, preview, header or search (required)

Examples

1appuploader-cli asset unplace --locale en-US --type header --yes
2appuploader-cli asset unplace --locale en-US --type screenshot --group IPHONE_DUO_PROFILE --yes

appuploader-cli asset upload

Upload files into the asset library without showing them anywhere yet.

Usage

appuploader-cli asset upload <file|dir>... [flags]

Flags

Flag Description
--creative the files are creative assets (header, search results) rather than screenshots or previews
--timeout string how long to wait for Apple to process the files (0 = do not wait) (default “2m”)

Examples

1appuploader-cli asset upload ./header.png --creative
2appuploader-cli asset upload ./shots/

appuploader-cli custom-page

Custom product pages: extra product pages with their own URL, for ads and campaigns.

Subcommands: create, delete, get, import, list, place, set

appuploader-cli custom-page create

Create a custom product page (an existing page of that name is reused).

Usage

appuploader-cli custom-page create <name> [flags]

Flags

Flag Description
--deep-link string URL the page opens in the app
--from-version copy the App Store version’s product page as the starting point
--locale strings locales to start with (default: the app’s primary locale)

Examples

1appuploader-cli custom-page create "Spring Sale" --from-version --locale en-US,zh-Hans

appuploader-cli custom-page delete

Delete a custom product page.

Usage

appuploader-cli custom-page delete <page>

Examples

1appuploader-cli custom-page delete "Spring Sale" --yes

appuploader-cli custom-page get

Show a page’s versions, locales and media.

Usage

appuploader-cli custom-page get <page>

Examples

1appuploader-cli custom-page get "Spring Sale" --json

appuploader-cli custom-page import

Create or update custom product pages from a folder of pages.

One folder per page: config.yaml, metadata//promotional_text.txt, screenshots/, previews/, creative/ (see cli-config.md).

Usage

appuploader-cli custom-page import [flags]

Flags

Flag Description
--dir string folder with one sub-folder per page (default: custom_pages.dir in appuploader.yaml)
--dry-run only report what would change
--submit also put each page on the draft review submission (default: custom_pages.submit)

Examples

1appuploader-cli custom-page import --dry-run
2appuploader-cli custom-page import --dir ./store/custom_pages --submit

appuploader-cli custom-page list

List the app’s custom product pages.

Usage

appuploader-cli custom-page list

Examples

1appuploader-cli custom-page list

appuploader-cli custom-page place

Make one placement group of a page locale show exactly these files.

Usage

appuploader-cli custom-page place <page> <file|dir>... [flags]

Flags

Flag Description
--group asset specs placement group (default: detected from the first file’s size; see asset specs)
--locale string locale (required); added to the page when missing
--type string screenshot, preview, header or search (default “screenshot”)

Examples

1appuploader-cli custom-page place "Spring Sale" --locale en-US ./sale/iphone/*.png
2appuploader-cli custom-page place "Spring Sale" --locale en-US --type header ./sale/header.png

appuploader-cli custom-page set

Change a page’s name, visibility or deep link, or a locale’s promotional text.

Usage

appuploader-cli custom-page set <page> [flags]

Flags

Flag Description
--deep-link string URL the page opens in the app
--locale string locale to add to the page or to give the promotional text
--name string new name
--promotional-text string promotional text for –locale, up to 170 characters
--visible whether the page is live at its URL (–visible=false hides it) (default true)

Examples

1appuploader-cli custom-page set "Spring Sale" --visible=false
2appuploader-cli custom-page set "Spring Sale" --deep-link myapp://sale
3appuploader-cli custom-page set "Spring Sale" --locale ja --promotional-text "…"

appuploader-cli page-test

Product page tests: A/B test icons, screenshots, previews and creative assets of a live app.

Subcommands: create, delete, get, list, place, start, stop, treatment

appuploader-cli page-test create

Create a test with its treatments (an existing test of that name is reused).

Usage

appuploader-cli page-test create <name> [flags]

Flags

Flag Description
--platform string platform (default “IOS”)
--traffic int percentage of eligible visitors that see a treatment, 1-100 (required)
--treatment strings treatment names, up to 3, e.g. B,C

Examples

1appuploader-cli page-test create "Header test" --traffic 30 --treatment B,C

appuploader-cli page-test delete

Delete a test that has not started.

Usage

appuploader-cli page-test delete <test>

Examples

1appuploader-cli page-test delete "Header test" --yes

appuploader-cli page-test get

Show a test’s treatments, locales and media.

Usage

appuploader-cli page-test get <test>

Examples

1appuploader-cli page-test get "Header test"

appuploader-cli page-test list

List the app’s product page tests.

Usage

appuploader-cli page-test list

Examples

1appuploader-cli page-test list

appuploader-cli page-test place

Make one placement group of a treatment locale show exactly these files.

Usage

appuploader-cli page-test place <test> <file|dir>... [flags]

Flags

Flag Description
--group asset specs placement group (default: detected from the first file’s size; see asset specs)
--locale string locale (required); added to the treatment when missing
--treatment string treatment name or id (required)
--type string screenshot, preview, header or search (default “screenshot”)

Examples

1appuploader-cli page-test place "Header test" --treatment B --locale en-US --type header ./b-header.png

appuploader-cli page-test start

Start an approved test.

Usage

appuploader-cli page-test start <test>

Examples

1appuploader-cli page-test start "Header test"   # once App Review approved it

appuploader-cli page-test stop

Stop a running test.

Usage

appuploader-cli page-test stop <test>

Examples

1appuploader-cli page-test stop "Header test" --yes

appuploader-cli page-test treatment

Add a treatment to a test (an existing one of that name is reused).

Usage

appuploader-cli page-test treatment <test> <name> [flags]

Flags

Flag Description
--icon string alternate app icon name shipped in the build

Examples

1appuploader-cli page-test treatment "Header test" D --icon AppIconDark

App Review and TestFlight

appuploader-cli review

App Review: what to review, submitting, status.

Subcommands: add, cancel, info, remove, status, submit

appuploader-cli review add

Put items on the draft review submission.

What can go on the draft:

  • version: the App Store version (it needs a build: version set –build)
  • iap <product-id>: an in-app purchase; the app’s first one is reviewed only together with a version
  • game-center: every leaderboard waiting for review
  • asset <asset-id>...: library assets, so they are approved ahead of a page update or an Apple Ads campaign
  • custom-page <page>: a custom product page’s editable version
  • page-test <test>: a product page test

Usage

appuploader-cli review add <version|iap|game-center|asset|custom-page|page-test> [name|id...] [flags]

Flags

Flag Description
--platform string platform of the draft when one has to be created (default “IOS”)

Examples

1appuploader-cli review add version
2appuploader-cli review add iap com.example.app.full
3appuploader-cli review add game-center
4appuploader-cli review add asset 84400019-…   # approve ahead of a page update or an Apple Ads campaign
5appuploader-cli review add custom-page "Spring Sale"
6appuploader-cli review add page-test "Header test"

appuploader-cli review cancel

Withdraw the submission that is with App Review.

Without an id it picks the submission with Apple, never the unsent draft; when several are with Apple, name one (see review status).

Usage

appuploader-cli review cancel [submission-id]

Examples

1appuploader-cli review cancel --yes
2appuploader-cli review cancel 6c4eccf6-… --yes

appuploader-cli review info

App Review contact and demo account.

Subcommands: get, set

appuploader-cli review info get

Show the App Review contact, demo account and notes of the version.

Usage

appuploader-cli review info get

Examples

1appuploader-cli review info get

appuploader-cli review info set

Set App Review information; fields left out keep their value.

Usage

appuploader-cli review info set [flags]

Flags

Flag Description
--demo-password-env string environment variable that holds the demo account password
--demo-required the reviewer needs the demo account (–demo-required=false: not needed)
--demo-user string demo account user name
--email string contact email
--first-name string contact first name
--from string read the fields from a review_information.yaml (default: the one in metadata.dir)
--last-name string contact last name
--notes string notes for the reviewer
--phone string contact phone

Examples

1DEMO_PW=… appuploader-cli review info set --first-name Ann --last-name Lee --email ann@example.com --phone "+1 555 0100" --demo-user demo --demo-password-env DEMO_PW
2appuploader-cli review info set --from ./store/review_information.yaml

appuploader-cli review remove

Take items off the draft review submission.

Names what to remove the way review add does, or gives an item id from review status. Items on a submission that is with Apple are withdrawn with review cancel.

Usage

appuploader-cli review remove <version|iap|asset|custom-page|page-test|item-id> [name|id...]

Examples

1appuploader-cli review remove version
2appuploader-cli review remove custom-page "Spring Sale"
3appuploader-cli review remove ZDM5OWEw…   # an item id from review status

appuploader-cli review status

Show the version’s state and every open submission (the draft and any with Apple) with what is on it.

Usage

appuploader-cli review status

Examples

1appuploader-cli review status
2appuploader-cli review status --json

appuploader-cli review submit

Attach a build and send the version (with everything on the draft) to App Review.

Attaches the build, puts the version on the draft review submission next to whatever is already on it, and sends the submission to App Review. Already submitted is reported, not repeated.

Usage

appuploader-cli review submit [flags]

Flags

Flag Description
--build string build id, build number, or latest (default “latest”)
--skip-iap-check submit even when the app’s first in-app purchase is not on the draft

Examples

1appuploader-cli review submit
2appuploader-cli review submit --build 42

appuploader-cli testflight

TestFlight beta groups and testers.

Subcommands: distribute, group, tester

appuploader-cli testflight distribute

Give a build to beta groups.

Usage

appuploader-cli testflight distribute [flags]

Flags

Flag Description
--build string build id, build number, or latest (default “latest”)
--group strings group names or ids (default: testflight.groups in appuploader.yaml)

Examples

1appuploader-cli testflight distribute --group "Internal QA"
2appuploader-cli testflight distribute --build 42 --group "Internal QA",Beta

appuploader-cli testflight group

Beta groups.

Subcommands: create, delete, list

appuploader-cli testflight group create

Create a beta group (an existing group of that name is reused).

Usage

appuploader-cli testflight group create <name>

Examples

1appuploader-cli testflight group create "Internal QA"

appuploader-cli testflight group delete

Delete a beta group.

Usage

appuploader-cli testflight group delete <group>

Examples

1appuploader-cli testflight group delete "Old group" --yes

appuploader-cli testflight group list

List beta groups.

Usage

appuploader-cli testflight group list

Examples

1appuploader-cli testflight group list

appuploader-cli testflight tester

Beta testers.

Subcommands: invite, list, remove

appuploader-cli testflight tester invite

Invite testers to a group: one –email, or a CSV file.

Usage

appuploader-cli testflight tester invite [flags]

Flags

Flag Description
--csv string CSV file: email,first_name,last_name per line
--email string tester email
--first-name string tester first name
--group string group name or id (required)
--last-name string tester last name

Examples

1appuploader-cli testflight tester invite --group "Internal QA" --email qa@example.com
2appuploader-cli testflight tester invite --group "Internal QA" --csv testers.csv   # email,first_name,last_name per line

appuploader-cli testflight tester list

List a group’s testers.

Usage

appuploader-cli testflight tester list [flags]

Flags

Flag Description
--group string group name or id (required)

Examples

1appuploader-cli testflight tester list --group "Internal QA"

appuploader-cli testflight tester remove

Remove a tester from a group.

Usage

appuploader-cli testflight tester remove <tester-id|email> [flags]

Flags

Flag Description
--group string group name or id (required)

Examples

1appuploader-cli testflight tester remove qa@example.com --group "Internal QA"

In-app purchases, pricing, privacy and Game Center

appuploader-cli iap

In-app purchases.

Subcommands: create, delete, export, get, import, list, set

appuploader-cli iap create

Create a product (an existing product with that id is reused).

Usage

appuploader-cli iap create <product-id> [flags]

Flags

Flag Description
--reference-name string internal name (required)
--review-note string note for App Review
--type string CONSUMABLE | NON_CONSUMABLE | NON_RENEWING_SUBSCRIPTION (required)

Examples

1appuploader-cli iap create com.example.app.full --type NON_CONSUMABLE --reference-name "Full game"

appuploader-cli iap delete

Delete a product (Apple keeps its product id reserved).

Usage

appuploader-cli iap delete <product-id|id>

Examples

1appuploader-cli iap delete com.example.app.old --yes

appuploader-cli iap export

Save every product to the listing folder’s in_app_purchases/.

Usage

appuploader-cli iap export [flags]

Flags

Flag Description
--dir string listing folder (default: metadata.dir in appuploader.yaml)
--include-images also download review screenshots and promo images

Examples

1appuploader-cli iap export --dir ./store --include-images

appuploader-cli iap get

Show a product.

Usage

appuploader-cli iap get <product-id|id>

Examples

1appuploader-cli iap get com.example.app.coins100

appuploader-cli iap import

Create or update products from the listing folder’s in_app_purchases/ (never deletes).

Reads one folder per product under in_app_purchases/ (see cli-config.md); products are created or updated, never deleted. A product’s first review goes with the next review submit: see review add iap.

Usage

appuploader-cli iap import [flags]

Flags

Flag Description
--dir string listing folder (default: metadata.dir in appuploader.yaml)
--include-images also upload review screenshots and promo images

Examples

1appuploader-cli iap import --dir ./store --include-images

appuploader-cli iap list

List the app’s in-app purchases.

Usage

appuploader-cli iap list

Examples

1appuploader-cli iap list

appuploader-cli iap set

Change a product’s name, review note, family sharing or price.

Usage

appuploader-cli iap set <product-id|id> [flags]

Flags

Flag Description
--family-sharable share with the family (non-consumables; –family-sharable=false turns it off)
--price float customer price in the base territory’s currency
--reference-name string internal name
--review-note string note for App Review
--territory string base territory for –price, ISO 3166-1 alpha-3 (default “USA”)

Examples

1appuploader-cli iap set com.example.app.full --price 2.99 --territory USA
2appuploader-cli iap set com.example.app.full --family-sharable

appuploader-cli pricing

App price and where it is sold.

Subcommands: get, set, territories

appuploader-cli pricing get

Show the app’s price.

Usage

appuploader-cli pricing get

Examples

1appuploader-cli pricing get

appuploader-cli pricing set

Set the app’s price and / or where it is sold.

Apple’s price tiers are chosen by the customer price in the base territory; the other territories follow Apple’s equalization. Setting what is already set changes nothing.

Usage

appuploader-cli pricing set [flags]

Flags

Flag Description
--exclude strings with –territories all: sell everywhere except these
--free make the app free
--price float customer price in the base territory’s currency (default: pricing.customer_price in appuploader.yaml)
--territories string where to sell: all, or a list like USA,GBR,JPN (default: pricing.territories in appuploader.yaml)
--territory string base territory for –price (default: pricing.base_territory, else USA)

Examples

1appuploader-cli pricing set --free
2appuploader-cli pricing set --price 4.99 --territory USA
3appuploader-cli pricing set --territories all --exclude CHN
4appuploader-cli pricing set   # pricing section of appuploader.yaml

appuploader-cli pricing territories

List where the app can be sold and where it is.

Usage

appuploader-cli pricing territories

Examples

1appuploader-cli pricing territories

appuploader-cli privacy

App privacy label (Apple ID only).

Subcommands: catalog, export, import, publish, status, unpublish

appuploader-cli privacy catalog

List the data types and purposes a privacy label can declare.

Usage

appuploader-cli privacy catalog

Examples

1appuploader-cli privacy catalog

appuploader-cli privacy export

Save the app’s privacy label as a YAML file.

Usage

appuploader-cli privacy export [flags]

Flags

Flag Description
--out string file to write (default: privacy.file in appuploader.yaml, else stdout)

Examples

1appuploader-cli privacy export --out privacy.yaml

appuploader-cli privacy import

Apply a privacy label from a YAML file (and publish it when the file says so).

Usage

appuploader-cli privacy import [privacy.yaml]

Examples

1appuploader-cli privacy import privacy.yaml

appuploader-cli privacy publish

Publish the privacy label.

Usage

appuploader-cli privacy publish

Examples

1appuploader-cli privacy publish

appuploader-cli privacy status

Show whether the privacy label is published.

Usage

appuploader-cli privacy status

Examples

1appuploader-cli privacy status

appuploader-cli privacy unpublish

Unpublish the privacy label.

Usage

appuploader-cli privacy unpublish

Examples

1appuploader-cli privacy unpublish --yes

appuploader-cli game-center

Game Center and leaderboards.

Subcommands: status, sync

appuploader-cli game-center status

Show whether Game Center is on and list the app’s leaderboards.

Usage

appuploader-cli game-center status

Examples

1appuploader-cli game-center status

appuploader-cli game-center sync

Turn Game Center on and create or update the leaderboards appuploader.yaml lists (never deletes).

Usage

appuploader-cli game-center sync [flags]

Flags

Flag Description
--dry-run only report what would change

Examples

1appuploader-cli game-center sync --dry-run
2appuploader-cli game-center sync

Exit codes

With --json, a failure carries a stable code and exit_code. Errors with retryable: true can be retried after a back-off.

exit_code code Description
0 ok Success
1 internal_error Unexpected failure
2 bad_input Usage or flag error
3 not_found Not found
4 conflict Already exists, or the current state does not allow it
5 capability_not_supported This kind of account cannot do it; use another --account
6 forbidden 等 program_inactive / not_enrolled / unpaid_account
7 agreement_required Accept the Apple agreement first
8 rate_limited Rate limited; retry later
9 upstream_error 等 Apple-side error, timeout or unreachable; retryable
10 needs_2fa A two-factor code is needed
11 bad_credentials 等 bad_api_key / verify_refused / account_locked
12 session_expired Session expired; run login again
13 license_required An App Uploader license is needed
14 wait_timeout Timed out waiting for Apple; retryable
15 team_required / account_ambiguous Pass --team or --account
130 interrupted Interrupted

Environment variables

These environment variables are equivalent to the matching flags and suit CI and scripts.

Environment variables Description
APPUPLOADER_ACCOUNT / APPUPLOADER_TEAM_ID Choose the account / team
APPUPLOADER_APPLE_ID / APPUPLOADER_PASSWORD Apple ID sign-in; put an app-specific password in APPUPLOADER_PASSWORD
APPUPLOADER_API_KEY_ID / APPUPLOADER_API_ISSUER_ID API key ID and issuer ID
APPUPLOADER_API_KEY_PATH / APPUPLOADER_API_KEY_P8 / APPUPLOADER_API_KEY_FILE .p8 path / .p8 content / JSON key file
APPUPLOADER_2FA_CODE Two-factor code for sign-in
APPUPLOADER_P12_PASSWORD .p12 password
APPUPLOADER_CONFIG Path to appuploader.yaml
APPUPLOADER_DATA_DIR Data folder, default ~/appuploader-data-v6