You've probably assumed you need an Apple Developer account before you can even open Xcode. So you either pay the $99 before writing a line of code, or you never try iOS at all because the fee feels like a wall between you and your first build.
Neither is true. You can build an Expo app and run it on your own iPhone for free, no Apple account required at all for the first stretch. The Apple Developer Program only becomes necessary at a specific, identifiable point: when you want to share the app with someone else, sign a build in the cloud, or use a handful of capabilities like push notifications.
This post walks the path from $0 to $99 in three levels: what each one needs, what it unlocks, and exactly where it stops. By the end you'll know whether to enroll on day one or build the whole thing first and pay only when you're ready to ship.
Video version
The short version
| What you have | What you can do | Cost |
|---|---|---|
| Any computer and an iPhone | Develop in Expo Go with Fast Refresh and most of the Expo SDK | $0 |
| A Mac and an iPhone | Build a development build with any native library and install it on your own iPhone | $0 |
| No Mac, and you want the app on a real iPhone | Build and sign in the cloud with Expo Build | $99 a year |
| An app you want other people to use | TestFlight, internal distribution, and the App Store | $99 a year |
Level 1: Expo Go, any computer, no Apple account
All you need is an iPhone and a computer, and it doesn't matter if that computer runs Windows, Linux, or macOS. Install Expo Go from the App Store, then create and start a project:
npx create-expo-app@latest npx expo start Scan the QR code with your iPhone's camera and the app opens inside Expo Go. Every time you save a file, Fast Refresh pushes the update straight to your phone.
No Apple account of any kind is needed here. Expo Go is an app that Expo itself builds, signs, and publishes to the App Store, so your phone treats it like any other installed app, no different from Instagram or Slack.
The catch is that Expo Go ships with a fixed set of native code baked in. Your JavaScript changes freely, but the native libraries available to you are whatever is already compiled into Expo Go. That covers most of the Expo SDK, including expo-camera, expo-maps, and @expo/ui, plus popular community packages like react-native-reanimated. A few things fall outside that set and need their own native code:
- Home screen widgets and Live Activities with
expo-widgets. - Siri and Shortcuts with
expo-app-intents. - Any library with native code that isn't already in Expo Go, plus any native modules you write yourself.
For those, you need a development build.
Level 2: a development build on your Mac
A development build is basically your own personal version of Expo Go. It includes the same expo-dev-client tooling, but the native code inside it is yours: any native library, any native config, any native module you've written. You still keep Fast Refresh. If you plan to ship an app to the app stores eventually, this is the setup we'd recommend building toward anyway.
If you have a Mac, building one and installing it on your iPhone costs nothing. Plug in your phone and run:
npx expo run:ios --device Xcode compiles the app locally, signs it, and installs it on the device. Signing needs an Apple Account, but not a paid one. Sign in to Xcode with a free Apple Account and it assigns you a signing team called a Personal Team.
The first run can stop before the build even starts:
That means your Mac doesn't have a signing certificate yet. The Learn more link opens a short setup guide that walks through signing in to Xcode with your Apple Account. Do that once, then rerun the command.
Where free signing stops
A free Personal Team comes with real limits, set by Apple, not by Expo:
- The app expires after 7 days. Free provisioning profiles expire a week after they're created, and after that the app just stops opening until you rebuild.
- 3 apps per device. That's the cap on how many apps you can install this way on a single iPhone.
- Your own devices only. You can register up to 3 devices, and there's no way to hand the build to anyone else.
- No paid capabilities. Remote push notifications, in-app purchases, Sign in with Apple, NFC, iCloud, Apple Pay, and associated domains all need a paid membership, even just to test them. You can add the library and write the code, but Xcode refuses to sign a build that requests a capability your free account isn't allowed to use.
Plenty of things do work on a free account, per Apple's capabilities table, including App Groups, Background Modes, HealthKit, HomeKit, Keychain Sharing, and Maps. expo-widgets relies on App Groups to share data between your app and its widget, so widgets work fine without paying.
One distinction worth keeping straight: local notifications, scheduled from the device itself, don't need the push capability at all. Only remote notifications sent from your server do.
No Mac? Cloud builds need the paid program
You can still build an iOS app from Windows or Linux. Expo Build compiles it on a Mac in the cloud for you:
eas build -p ios But to install that build on an actual iPhone, Expo Build has to sign it, and cloud signing requires the paid program.
What a certificate and a provisioning profile actually do
Every iOS app running on a real device carries two signed artifacts:
- A certificate identifies who built the app.
- A provisioning profile defines where it's allowed to run: which app it belongs to, which iPhones can install it, which capabilities it's allowed to use, and when it expires.
Your iPhone checks both before it'll even open the app. Once the profile expires, the app stops opening until a fresh build replaces it.
The type of signing determines who can install the result. A free Apple Account only ever gets you development signing. Ad hoc and App Store signing both require a distribution certificate, and only paid Apple Developer Program members can generate one.
On your Mac, Xcode mints development signing for your free Personal Team locally. In the cloud, Expo Build signs device builds using a distribution certificate and an ad hoc provisioning profile, which means without a Mac, getting a development build onto a real iPhone requires the paid program.
One free option remains regardless: building for the iOS Simulator. Simulator builds aren't signed for a device at all, so Expo Build can produce one with no Apple Developer account. You'll just need somewhere to run it, which in practice usually still means a Mac with Xcode installed.
What your $99 a year actually buys
The Apple Developer Program costs $99 a year, and it boils down to five things.
1. Sharing the app with other people
Free signing stops dead at your own devices. With the membership, there are two routes to someone else's phone:
- TestFlight. Apple's beta testing app lets you invite up to 10,000 external testers, or share a public link.
- Internal distribution via Expo Build. Testers install from a link. It uses ad hoc provisioning, so each device has to be registered first with
eas device:create, and adding a new device means a new build. Apple caps this at 100 iPhones per year.
2. Cloud signing
Expo Build can manage your iOS credentials and sign builds for devices on your behalf, which, as covered above, needs the membership.
3. Remote push notifications
Anything sent from your back end goes through Apple Push Notification service, which requires a paid account. Local, on-device notifications don't.
4. In-app purchases and friends
These are the same paid capabilities mentioned in the free signing limits: in-app purchases, Sign in with Apple, NFC, and the rest. A free account can't sign a build that requests any of them, so you need the membership to test them on a device, not just to ship them.
5. The App Store
Publishing requires the membership, full stop. Once the app starts making money, look into Apple's App Store Small Business Program. You qualify if you earned up to $1 million in proceeds last calendar year, or if you're new to the store, and Apple's commission drops from 30% to 15%. You have to actively enroll to get the lower rate.
A paid account also changes the lifespan of your own builds: development profiles from a paid team last up to a year instead of 7 days, so you stop rebuilding on a weekly timer.
So when should you actually pay?
Pay on day one if your app needs any of the following:
- Remote push notifications, since you'll want to test them while building, not after.
- In-app purchases, same reasoning.
- A real iPhone with no Mac in sight. Cloud signing is your only way onto the device.
Everyone else can build the whole thing for free first, and enroll whenever it's time to put the app in someone else's hands.
What about Android?
Android stays free the entire way until publishing. Build, install, and share builds without paying anyone a cent. A Google Play Console account is a one-time $25 fee, due only when you're ready for the Play Store.
Where to start
- Start at level 1 today. Run
npx create-expo-app@latestand open the project in Expo Go. - Move to a development build once you need native code. Read Introduction to development builds, then follow Local app development to get it running on your iPhone.
- Enroll when you're ready to share. Join the Apple Developer Program, then set up internal distribution or TestFlight.
Frequently asked questions
Do I need an Apple Developer account to use Expo? No. You can develop in Expo Go with no Apple account at all. The paid Apple Developer Program is only needed to share or publish your app, sign builds in the cloud, or use capabilities like remote push.
Can I run an Expo app on my iPhone for free? Yes. Expo Go runs your project on any iPhone for free. With a Mac and a free Apple Account, you can also install a development build with npx expo run:ios --device.
How long does a free iOS build last? 7 days. Free provisioning profiles expire a week after they're created, and you can install up to 3 apps this way per device. Profiles from a paid team last up to a year.
Can I build an iOS app with Expo without a Mac? Yes. Expo Build compiles iOS apps in the cloud from Windows or Linux. Installing that build on an iPhone requires the paid Apple Developer Program, since cloud signing uses a distribution certificate.
Can I test push notifications without a paid account? Local notifications, yes. Remote notifications sent from your server need the paid program.
How much does it cost to publish an Expo app? $99 a year on iOS for the Apple Developer Program. A one-time $25 on Android for a Google Play Console account.
Useful links
- Expo Go: https://expo.dev/go
- Introduction to development builds: https://docs.expo.dev/develop/development-builds/introduction/
- Local app development: https://docs.expo.dev/guides/local-app-development/
- Set up Xcode signing: https://expo.fyi/setup-xcode-signing
- Expo Build: https://docs.expo.dev/build/introduction/
- Internal distribution: https://docs.expo.dev/build/internal-distribution/
- Build for iOS Simulators: https://docs.expo.dev/build-reference/simulators/
- Apple: compare free and paid memberships: https://developer.apple.com/support/compare-memberships/
- Apple: supported capabilities: https://developer.apple.com/help/account/reference/supported-capabilities-ios/
- Apple Developer Program: https://developer.apple.com/programs/
- TestFlight: https://developer.apple.com/testflight/
- App Store Small Business Program: https://developer.apple.com/app-store/small-business-program/
This post is based on content from the Expo blog. Follow @expo for more React Native content.











