When to use: First time setting up asc — install the tool, configure an API key, and scaffold your project directory.
- macOS (build/deploy commands are macOS-only; metadata upload works on Linux/Windows too)
- Python 3.9 or higher
- An app already created in App Store Connect (you need the App ID)
Option A — one-line curl install (recommended)
curl -fsSL https://raw.githubusercontent.com/yinghuiwang/AppStoreTools/main/install.sh | bashInstall a specific branch for testing:
curl -fsSL https://raw.githubusercontent.com/yinghuiwang/AppStoreTools/main/install.sh | bash -s -- --branch feat/web-build-interactive-release-optionsOption B — clone and install
git clone https://github.com/yinghuiwang/AppStoreTools.git
cd AppStoreTools
bash install.shOption C — PyPI
pip install asc-appstore-tools
# or latest from GitHub
pip install git+https://github.com/yinghuiwang/AppStoreTools.gitVerify:
asc --versionTip: If you see
asc: command not found, runsource ~/.zshrc(orsource ~/.bash_profilefor bash).
- Open App Store Connect → Users and Access → Integrations → API Keys
- Click + to create a new key; choose App Manager role (or higher)
- Note the Issuer ID and Key ID
- Download the
.p8private key file (one-time download only — save it securely)
Open your app in App Store Connect. The numeric ID appears in the URL:
https://appstoreconnect.apple.com/apps/1234567890/...
^^^^^^^^^^
This is your App ID
Run this from your Xcode project root:
cd /path/to/MyXcodeProject
asc initThis creates an AppStore/ directory tree:
AppStore/
├── Config/
│ └── .env ← fill in your credentials
└── data/
├── appstore_info.csv
├── screenshots/
│ ├── cn/
│ └── en-US/
└── iap_packages.example.json
Edit AppStore/Config/.env:
ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
KEY_ID=XXXXXXXXXX
KEY_FILE=/path/to/AuthKey_XXXXXXXXXX.p8
APP_ID=1234567890Option A — import from .env (recommended after asc init)
asc app importReads AppStore/Config/.env in the current directory and creates the profile automatically.
Option B — import from a specific path
asc app import --path /path/to/MyProject --name myappOption C — interactive setup
asc app add myappFollow the prompts to enter Issuer ID, Key ID, .p8 path, App ID, and data paths.
Verify the profile was created:
asc app listasc --app myapp checkExpected output:
✅ Credentials valid
✅ Found editable version: 1.2.0 (PREPARE_FOR_SUBMISSION)
✅ CSV file exists: data/appstore_info.csv
✅ Screenshots directory exists: data/screenshots
asc app default myappOr add to .asc/config.toml:
[defaults]
default_app = "myapp"asc: command not found
Run source ~/.zshrc to reload PATH.
❌ Key file not found
Check the .p8 path — tilde expansion (~/Downloads/AuthKey_...p8) is supported.
asc check says "no editable App Store version found"
Create a new version in App Store Connect first (status PREPARE_FOR_SUBMISSION). asc does not create versions automatically.
What's the difference between install.sh, asc install, and asc init?
install.sh— installs the CLI tool itself (Python env +asccommand)asc install— guided setup wizard: checks environment and configures an app profileasc init— scaffolds theAppStore/template directory in an Xcode project (run once per project)
- 02 Metadata & Screenshots — fill the CSV and upload content
- 06 Multi-App Profiles — manage multiple apps