Skip to content

Apple iOS Distribution

Vidori builds your iOS and iPadOS app, signs it, and uploads it to TestFlight. You need an Apple Developer account and one App Store Connect API key. You don’t need a Mac, a signing certificate or a provisioning profile: the build creates and manages those for you.

Before starting, make sure you’ve completed the shared Prerequisites in App Configuration.

If you haven’t already, enroll at developer.apple.com/programs. The annual membership ($99/year) is required to distribute apps through TestFlight and the App Store.

An App ID (bundle identifier) uniquely identifies your app. Apple asks for it when you create the app in the next step.

  1. Go to developer.apple.com/account/resources/identifiers

  2. Click the + button to register a new identifier

  3. Select App IDs and click Continue

  4. Select App as the type and click Continue

  5. Enter a Description (e.g., “My Streaming App”) and an Explicit Bundle ID (e.g., com.yourcompany.yourapp)

  6. Click Register

You can leave the capabilities as they are. The build turns on the ones the app needs (Push Notifications, Associated Domains and Access Wi-Fi Information).

This is the one Apple step that can’t be automated: Apple doesn’t allow an app to be created through its API.

  1. Go to appstoreconnect.apple.com/apps

  2. Click the + button and select New App

  3. Select iOS as the platform. Also select tvOS if you plan to publish an Apple TV app.

  4. Enter the app’s Name and Primary Language

  5. Under Bundle ID, choose the App ID you registered in step 2

  6. Enter an SKU (any reference of your own, e.g., yourapp-ios) and click Create

The API key lets the build sign your app and upload it to TestFlight.

  1. Go to appstoreconnect.apple.com/access/integrations/api (Users and Access → Integrations → App Store Connect API)

  2. On the Team Keys tab, click the + button to generate a new key. If this is your first key, the Account Holder has to click Request Access first.

  3. Enter a name (e.g., “Vidori builds”) and select the Admin role

  4. Click Generate

  5. Download the .p8 key file immediately. You can only download it once. Keep the name Apple gives it (AuthKey_XXXXXXXXXX.p8).

  6. Copy the Issuer ID shown at the top of the page

In the admin panel, go to App Studio → Distribution → iOS:

SettingValueExample
Bundle IDThe bundle identifier registered in step 2com.yourcompany.yourapp
API Key Issuer IDThe Issuer ID from step 412345678-...
API key (.p8 file)The key file downloaded in step 4AuthKey_ABC1234DEF.p8

The Key ID is read from the file name. If you renamed the file, an API Key ID field appears: enter the Key ID shown next to the key in App Store Connect.

Upload the iOS icon and splash logo on the same page.

  1. Click Verify. Within a few seconds it checks your settings with Apple and changes nothing in your Apple account:

    CheckWhat it confirms
    API key fileThe uploaded file is an App Store Connect API key
    Apple accepts the keyThe Key ID, Issuer ID and .p8 file belong together
    App record for the Bundle IDThe app from step 3 exists
    Access to signing certificatesThe key’s role is high enough to sign the app
  2. Fix anything that failed. Each failed check says what to change.

  3. Click Build.

A build takes about 20–30 minutes. During the build, Vidori:

  • turns on the capabilities your App ID needs;
  • creates an Apple Distribution certificate the first time, stores it, and reuses it for later builds;
  • fetches the provisioning profile;
  • sets the version and build number;
  • uploads the app to TestFlight.

After the upload, Apple processes the build, which usually takes a few minutes. The Distribution page follows it for you and shows the build number and its TestFlight status:

StatusMeaning
Uploaded, waiting for AppleThe upload finished and Apple is processing the build
Missing Export ComplianceApple is waiting for the export compliance answer for this build. Provide it in TestFlight.
Processing FailedApple could not process the build. The reason is shown in TestFlight and emailed to the Account Holder.
ExpiredThe build is older than 90 days and can no longer be installed

Click Open TestFlight to go to the app’s TestFlight page in App Store Connect. To install the build:

  1. In App Store Connect, open the TestFlight tab of your app

  2. Under Internal Testing, create a group and add testers (they must be users of your App Store Connect team)

  3. Each tester installs the TestFlight app on their iPhone or iPad and accepts the email invitation

The Apple TV app uses the same Bundle ID and API key as the iOS app.

  1. Go to App Studio → Distribution → AppleTV

  2. Upload the three tvOS images (app banner and the two Top Shelf images)

  3. Turn on Enabled

The next Apple build then builds the Apple TV app as well and uploads it to TestFlight together with the iOS app. A build with Apple TV takes about 50 minutes.

”Bundle ID is required for Apple distribution”

Section titled “”Bundle ID is required for Apple distribution””

The Bundle ID has not been set. Go to App Studio → Distribution → iOS and enter your Bundle ID (e.g., com.yourcompany.yourapp). See step 2 above.

The Key ID, Issuer ID and .p8 file don’t belong together, or the key was revoked. Check that:

  • the Issuer ID matches the one at the top of the App Store Connect API page;
  • the .p8 file still has the name Apple gave it, or the Key ID you entered matches the key;
  • the key is still listed as active in App Store Connect.

”The uploaded file is not an App Store Connect API key”

Section titled “”The uploaded file is not an App Store Connect API key””

Upload the .p8 file exactly as downloaded from App Store Connect. If you no longer have it, revoke the key and create a new one.

”App Store Connect has no app with the Bundle ID” / “There is no app for … in App Store Connect yet”

Section titled “”App Store Connect has no app with the Bundle ID” / “There is no app for … in App Store Connect yet””

The app from step 3 doesn’t exist yet, or it was created with a different Bundle ID. Create it, then verify or build again.

”The API key is not allowed to create a distribution certificate” / “The API key cannot read signing certificates and provisioning profiles”

Section titled “”The API key is not allowed to create a distribution certificate” / “The API key cannot read signing certificates and provisioning profiles””

The key’s role is too low. A key’s role can’t be changed: create a new key with the Admin role and upload it.

”Apple will not issue another distribution certificate for this team”

Section titled “”Apple will not issue another distribution certificate for this team””

Apple limits how many distribution certificates a team can have, and your team has reached the limit with certificates created outside Vidori. Revoke an unused Apple Distribution certificate at developer.apple.com/account/resources/certificates and start the build again. Revoking a certificate doesn’t affect apps already on the App Store or in TestFlight.