iOS Beta (Ad Hoc) Developer Setup
Purposeβ
This guide explains how each developer gets the iOS beta app on a physical device using the beta ad hoc lane.
Use this when:
- you need to test native changes before TestFlight promotion
- you need quick internal device testing on the
betalane
Beta lane definitionβ
- Branch lane:
beta - EAS build profile:
beta - iOS distribution type: ad hoc/internal (non-App Store)
- Install target: registered developer/tester devices
Prerequisitesβ
Each developer needs:
- access to the mobile repo
- EAS CLI installed (
npm i -g eas-clior project-managed equivalent) - Expo account access to the
ferda-techproject - an iPhone (ad hoc installs do not use iOS simulator)
- device UDID registered with Apple via EAS device registration
One-time team setup (release owner)β
- Confirm
betaprofile is internal/ad hoc ineas.json. - Make sure the signing owner account can manage iOS devices/certificates.
- Decide build ownership:
- recommended: release owner queues beta builds
- optional: any approved developer can queue beta builds
- Share the install URL process with the team (EAS build page link).
Per-developer onboarding (required once per device)β
Step 1: Login to Expoβ
eas whoami
If not authenticated:
eas login
Step 2: Register iPhone device for ad hoc signingβ
eas device:create
Notes:
- Complete the browser/device profile flow when prompted.
- This adds the device UDID so ad hoc provisioning can include that device.
- If a developer changes phones, this step must be repeated.
Step 3: Verify the device is registeredβ
eas device:list
Confirm the new device appears and is enabled.
Step 4: Queue a beta iOS buildβ
From the mobile repo:
eas build --platform ios --profile beta
If your team uses build intent branches:
git push origin build/beta
The pre-push hook should queue:
eas build --profile beta --platform all --non-interactive --no-wait
Step 5: Install the build on deviceβ
- Open the completed build page URL from EAS output.
- Open the install link on the target iPhone.
- Follow iOS prompts to install the ad hoc build.
If install is blocked, check troubleshooting below.
Day-to-day developer flowβ
- Work on
feature/*. - Merge to
betathrough normal PR approvals. - Pull latest
beta. - Ensure your device is registered (
eas device:list). - Install latest beta ad hoc build from EAS build link.
- Validate on real device and report issues before
alphapromotion.
Troubleshootingβ
"I cannot install the beta build on my phone"β
Check in this order:
- Device UDID is registered (
eas device:list). - Build was created after your device was registered.
- Correct profile was used (
beta, notalphaorproduction). - You opened install link on the same physical device.
- iOS network/security settings are not blocking install.
If device was added after build creation, queue a new beta build.
"Build succeeded but app still not updated"β
- For JS changes, ensure latest OTA
betaupdate was published. - For native-impacting changes, install a newly built binary (OTA alone is not enough).
"Pre-push did not queue the build"β
Check:
SKIP_EAS_PREPUSHis not set to1- EAS CLI is installed
- non-interactive auth works (
eas whoami --non-interactive) - pushed branch matches
build/*
Operational remindersβ
- Beta ad hoc is for internal device testing, not broad tester distribution.
- TestFlight validation starts at
alpha. - Production App Store release starts from
main/production.