Skip to main content
Use revyl publish to upload .ipa files to App Store Connect, wait for processing, and distribute builds to TestFlight groups.

Prerequisites

  • App Store Connect API key (Key ID, Issuer ID, .p8 private key)
  • App already created in App Store Connect
  • Optional but recommended:
    • publish.ios.asc_app_id in .revyl/config.yaml
    • publish.ios.testflight_groups in .revyl/config.yaml
Generate API keys in App Store Connect: https://appstoreconnect.apple.com/access/integrations/api

1. Configure ASC Credentials

revyl publish auth ios \
  --key-id ABC123DEF4 \
  --issuer-id 00000000-0000-0000-0000-000000000000 \
  --private-key ./AuthKey_ABC123DEF4.p8
Credentials are stored in ~/.revyl/store-credentials.json. Verify:
revyl publish auth status

2. Upload + Distribute to TestFlight

revyl publish testflight \
  --ipa ./build/MyApp.ipa \
  --app-id 6758900172 \
  --group "Internal,External" \
  --whats-new "Fixes login crash on iOS 18"
Behavior:
  • Uploads the IPA to App Store Connect
  • Waits for processing by default (--wait=true)
  • Distributes to each group listed in --group

3. Distribute Existing Processed Builds

If the build is already processed in App Store Connect:
revyl publish testflight --app-id 6758900172 --group "Internal"

4. Check Build and Review Status

revyl publish status --app-id 6758900172
You can also target a specific build:
revyl publish status --build-id <build_id> --app-id 6758900172

CI / Non-Interactive Usage

revyl publish supports env-var driven credentials and defaults:
export REVYL_ASC_KEY_ID=ABC123DEF4
export REVYL_ASC_ISSUER_ID=00000000-0000-0000-0000-000000000000
export REVYL_ASC_PRIVATE_KEY_PATH=/secure/path/AuthKey_ABC123DEF4.p8
# or raw key:
# export REVYL_ASC_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----'

export REVYL_ASC_APP_ID=6758900172
export REVYL_TESTFLIGHT_GROUPS="Internal,External"

revyl publish testflight --ipa ./build/MyApp.ipa
Precedence:
  • Flags override environment variables
  • Environment variables override .revyl/config.yaml

Project Config Defaults

publish:
  ios:
    bundle_id: com.example.myapp
    asc_app_id: "6758900172"
    testflight_groups:
      - Internal
      - External
If asc_app_id is not set, Revyl attempts bundle-ID-based app lookup using bundle_id.

TUI Workflow

From the TUI (revyl with no subcommand):
  • Dashboard quick action: Publish to TestFlight
  • Manage Apps → app detail: press p for publish flow
  • Help/Setup guide includes an Configure App Store Connect step
The TUI flow guides through credentials, app ID, IPA path, groups, and publish confirmation.

Troubleshooting

  • app ID is required:
    • pass --app-id, or set REVYL_ASC_APP_ID, or set publish.ios.asc_app_id
  • no App Store Connect app found for bundle ID:
    • verify publish.ios.bundle_id / REVYL_ASC_BUNDLE_ID matches ASC
  • private key file not found:
    • verify absolute path and file permissions
  • Build not distributed after upload:
    • ensure processing completed (--wait=true, default) before distribution