Ad-hoc Distribution

Ad-hoc distribution lets you install builds directly onto specific iPhones and iPads — no App Store, no TestFlight, no review. It's ideal for demoing work-in-progress to clients and running QA on real devices.

Bifrost automates the painful parts: collecting device identifiers, registering devices with Apple, regenerating provisioning profiles, and giving testers a tap-to-install link.

What Apple requires

  • A paid Apple Developer Program membership ($99/year). Free accounts can't create distribution certificates.
  • Every device must be registered in your Apple Developer account before the build is signed.
  • Apple allows 100 devices per device type per membership year (100 iPhones, 100 iPads, and so on), and device slots are only freed up when your membership renews. Register only devices you actually need.

Ad-hoc builds expire with their provisioning profile (at most one year) — after that the app stops launching and testers need a fresh build.

Set up an Ad-hoc credential

In your app's Credentials screen, click + Add Bundle Identifier under the iOS section and choose Ad-hoc as the distribution type. You'll need:

  • The same distribution certificate as App Store distribution — follow the iOS Credentials guide to create one.
  • An ad-hoc provisioning profile. You can create one manually in your Apple Developer account (choose Ad Hoc under Distribution), or upload any valid profile to start with and let Bifrost regenerate it for you once your devices are registered.
  • An App Store Connect API key (optional but recommended). For ad-hoc credentials, Bifrost uses it to register devices and regenerate profiles on your behalf — not to upload builds. Without one, you'll manage devices and profiles by hand in your Apple Developer account.

Register your testers' devices

On the credential page you'll find a Test Devices section:

  1. Invite a Device gives you a shareable registration link (valid 7 days). When a tester opens it on their iPhone or iPad, it walks them through a one-tap flow that captures their device identifier (UDID), model, and iOS version — nothing else. The temporary configuration profile it uses never stays installed and grants no access to their device.
  2. Captured devices appear as Pending. Nothing is sent to Apple until you click Register with Apple — each registration uses one of your 100 yearly device slots, so Bifrost always asks you to confirm.
  3. You can also Add Manually if you already know a device's UDID, or Sync from Apple to import devices already registered in your developer account.

Regenerate the profile

Registered devices only receive builds if they're included in the provisioning profile. After registering new devices, click Regenerate Profile. Bifrost creates a fresh ad-hoc profile in your Apple Developer account — using the exact certificate you uploaded and every registered device — stores it on the credential, and removes the previous Bifrost-created profile. Your next build picks it up automatically.

Ship and install

Create a build as usual. Ad-hoc builds don't upload to App Store Connect — instead, when the build completes, open it and choose Install on Device. You'll get a QR code and a shareable install link (valid 7 days): testers open it in Safari on a registered device and tap Install on this device.

If the app won't install on someone's device, the usual cause is that their device wasn't in the profile when the build was created — register the device, regenerate the profile, and ship a new build.

Good to know

  • Everything Bifrost does here uses Apple's official App Store Connect API with your own API key — the same operations you'd perform in the developer portal, just automated.
  • In-app purchases can't be transacted for real in ad-hoc builds (sandbox only), and there's no TestFlight-style crash reporting — wire up your own error reporting if you need it.
  • Install links are signed and expire; anyone with a valid link can download the build, so share links only with your testers.