AppForShare

eas device:create: register testers' iPhones for EAS builds

· 6 min read

eas device:create: register testers' iPhones for EAS builds

Every iPhone that installs an ad hoc build has to be in the build's provisioning profile. With Expo, the command for that is eas device:create. It works well when the tester is a developer sitting next to you. It gets harder when the tester is a client, a QA contractor or a friend who has never heard of a UDID. This guide covers what the command does, the one rule people miss, the Apple sign in errors that fill the eas-cli issue tracker, and a way to collect devices from people who are not developers. Expo facts were read on docs.expo.dev and GitHub on November 4, 2026.

What eas device:create offers

Run eas device:create in your project. The eas-cli source on GitHub lists four ways to add a device:

  • Website: "generates a registration URL to be opened on your devices". You send the URL, the tester opens it on the iPhone and installs a profile that sends the UDID to Expo.
  • Developer Portal: "import devices already registered on Apple Developer Portal".
  • Input: you type the UDID and a name by hand.
  • Current Machine: adds the machine you are running the command on.

To see what Expo has stored, run eas device:list. It also has a --json output, which is handy for scripts.

The rule people miss: Expo is not Apple

Expo's internal distribution docs say it plainly: "Registering a device with Expo does not register it with Apple. The device is added to your Apple Developer Portal only when it's first included in a build." A new device needs a new build, or eas build:resign to sign an existing build again with a new profile.

So the order is always:

  1. Collect the device with eas device:create.
  2. Run a new internal build, for example eas build --profile preview --platform ios. If eas-cli asks whether to update the ad hoc profile with the new devices, say yes.
  3. Send the new build's link. The old link still opens the old build, which will not install on the new phone.

If you skip step 2, the tester sees the install start and then fail, or an "unable to install" message. The eas-cli issue "device:create seems to work but provisioning profile is missing" (#1722) is this exact situation.

Since June 15, 2026 there is also a --refresh-ad-hoc-provisioning-profile flag for builds that run without prompts, using an App Store Connect API key. Expo Workflows gained an apple-device-registration-request job that, in Expo's words, "enrolls a physical device (QR code plus approval), then exposes its details to downstream jobs". If you already live in Workflows, that job is worth a look.

Apple sign in errors

The interactive credential flow in eas-cli can sign in to Apple with your Apple ID. That path is where the most commented eas-cli issues sit, as read on GitHub on November 4, 2026:

IssueTitleComments
#1672Cookie not in this host's domain142
#2224Authentication with Apple Developer Portal failed!101
#2698Apple Authentication error93
#2639503 errors61

If you hit one of these, read the latest comments on the issue first, since the fixes change with eas-cli releases. Update eas-cli to the latest version and, where you can, use an App Store Connect API key instead of an Apple ID sign in for builds that run without prompts.

When testers are not developers

The Website option works, but the tester gets the link from you in a chat, opens it, installs a profile, and then waits. Nobody tells them when a build with their phone is ready. You have to remember to rebuild and send the new link. With five testers joining over a week, that becomes a lot of small manual steps.

AppForShare has an onboarding link per iOS project (Pro and Team). It is built for people who are not developers:

  1. You send one link that does not change, for example in a client email.
  2. The tester opens it on the iPhone, types a name and email, and installs a small profile that reads the UDID. No Apple ID, no account.
  3. The device lands on your Devices page and you get an email.
  4. An Admin registers it on Apple with one click, using your App Store Connect API key. No Apple ID sign in is involved.
  5. When a build that includes the device is uploaded, the tester gets one email with the install link.

On Team, Hands free device setup can do the Apple registration and remake the ad hoc profile on its own, in batches, with daily limits. It starts a build only for projects that use GitHub builds. With EAS you still run the build yourself.

Testers who only need their UDID, for example to send it to you, can use the free UDID finder. No account is needed.

Using AppForShare devices with EAS builds

Devices can flow both ways, so you do not have to pick one list.

From AppForShare to EAS

  1. Collect devices with the onboarding link and register them on Apple (iOS device registration).
  2. Run eas device:create and pick Developer Portal. Expo imports the devices that are now on your Apple account.
  3. Run a new internal build. EAS adds the devices to the ad hoc profile.
  4. Upload the build to AppForShare (by EAS webhook, Workflows job or npx appforshare upload --eas-latest --profile preview --platform ios). Testers who sent their device get their email.

From EAS to AppForShare

If your devices already live in Expo, export them and import the file:

eas device:list --json > eas-devices.json
npx appforshare devices import eas-devices.json

The CLI reads the eas-cli JSON as it is and needs an upload token (Pro and Team). npx appforshare devices export writes Apple's tab separated file, which the Apple portal accepts for bulk upload.

Apple's limit still applies

Apple allows 100 devices per device type per membership year. Removing a device does not free its slot until the membership renews. Whatever tool you use, keep the list to people who test. The full background is in iOS ad hoc device registration.

More for EAS teams: sharing eas build --local output and sending every build from Expo Workflows.

Common questions

I ran eas device:create but the build will not install. Why?

The device is stored in Expo but was not in the profile of the build the tester opened. Run a new build (or eas build:resign) and send the new link.

Can a tester register an iPhone without an Expo or Apple account?

Yes, with Expo's Website option or with the AppForShare onboarding link. Neither asks the tester to sign in. The difference is what happens after: AppForShare emails the tester when a build with their device is ready.

Does AppForShare re-sign my EAS build?

No. AppForShare never re-signs uploaded builds. After a device is registered, you build again on EAS. See the Expo internal distribution guide for how builds get from EAS to the install page.

Where does this fit with the rest of EAS?

Use AppForShare with Expo EAS covers builds, devices, updates and store steps in one place.

If collecting iPhones is the slow part of every test round, try the onboarding link on your next tester. Create an account, upload one EAS build and send the link.

Keep reading

App Distribution Platform · · 5 min read

AppForShare File Size and Upload Limits

AppForShare limits the size of each build you upload by plan: 50 MB without an account, 150 MB on the Free plan, 2 GB on Pro and 4 GB on Team. Accounts also have a storage total, and every plan...