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

Three cards. Level 1, an iPhone and any computer, $0: Expo Go, Fast Refresh, most of the Expo SDK, no Apple account; limited to Expo Go's libraries. Level 2, an iPhone and a Mac, $0: a development build, any native library, your own native code; limited to 7 days, 3 apps per iPhone, your own iPhones, no paid capabilities. Paid, the Apple Developer Program, $99 a year: TestFlight and internal distribution, signing in the cloud, remote push, in-app purchases, Sign in with Apple, NFC, the App Store, builds that last up to a year

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.

Level 1 of the road map: install Expo Go, create and start a project with npx create-expo-app and npx expo start, scan the QR code, and the app runs on an iPhone. Spent so far: $0

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:

Expo CLI output: Your computer requires some additional setup before you can build onto physical iOS devices. Learn more. CommandError: No code signing certificates are available to use.

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.

Level 2 of the road map: plug in your iPhone, sign in to Xcode with a free Personal Team, and run npx expo run:ios --device. A sign lists the free signing limits: own devices, 7 days, 3 apps, no remote push

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.

The No Mac? frame of the road map: eas build -p ios from your computer, Expo Build compiles on a Mac in the cloud, then a certificate and a provisioning profile sign it for your iPhone. On your Mac, signing is free. In the cloud, it needs the $99 membership

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.

Every iPhone app is signed: your app, plus a certificate (who built it), plus a provisioning profile (which app, which iPhones, which capabilities, until when), goes to your iPhone, which opens the app only if both match

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.

Three kinds of signing. Development: free or paid account, made by Xcode on your Mac, development certificate, installs on your own iPhones, lasts 7 days free or up to a year paid. Ad hoc: paid account, made by Expo Build or Xcode, distribution certificate, installs on iPhones you register, up to 100 a year, used for internal distribution. App Store: paid account, made by Expo Build or Xcode, distribution certificate, anyone can install with TestFlight or the App Store, no device list

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.

What the $99 unlocks: five roads leading to Share it (TestFlight or Expo), Cloud signing (Expo Build for devices), Remote push (sent from your server), In-app purchases (and Sign in with Apple, NFC, more), and App Store (publish to everyone). A sign below reads Making money? Small Business Program, 15% instead of 30%

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?

A billboard that reads Pay on day one if you need: push notifications, in-app purchases, a real iPhone but no Mac. Everyone else: build first, pay when you share. And paid builds last a year, not 7 days

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?

The Android branch of the road map: build, run, and test for free, then a $25 once toll before the Google Play Store

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

The recap frame: Development is free. The $99 is for distribution. Build: $0, run: $0, test: $0. npx create-expo-app, start right here

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

This post is based on content from the Expo blog. Follow @expo for more React Native content.