Building for iOS
Want to ship an iPhone app? Here's what you actually need in 2026: whether you really need a Mac, the modern Expo workflow, the Apple Developer Program, and how to get from idea to TestFlight with an AI assistant doing most of the typing.
1The Reality Check: Do You Need a Mac?
Short answer: it depends on your path
Apple's own tools (Xcode Xcode Apple's IDE for developing iOS, macOS, watchOS, and tvOS apps. Required for Apple development. Includes Interface Builder, simulators, and Instruments for profiling. "Like Apple's walled garden has its own construction tools. You need this to build for iPhone." Expo / React Native A framework for building native iOS and Android apps with React. `npx create-expo-app@latest` gives you Expo Router out of the box, EAS Build compiles your app in the cloud, and `npx expo prebuild` generates native projects when you need them (the old "eject" and managed-vs-bare split are gone). "Like React for your phone. Write JavaScript, get native apps."
You need a Mac for
- • Native Swift / SwiftUI development in Xcode
- • The iOS Simulator
- • Local iOS builds (
npx expo run:ios) - • Deep native debugging and profiling
You can skip the Mac with
- • Expo + EAS Build (cloud iOS builds)
- • A real iPhone for testing instead of the Simulator
- • EAS Submit to push builds to App Store Connect
- • Trade-off: slower feedback loop than a local Simulator
Budget advice: If you're serious about iOS, a used Apple Silicon Mac mini is the cheapest comfortable setup. If you're testing an idea, start with Expo + EAS + your own iPhone and buy hardware only once the app earns it.
2Your Options: Expo, Bare React Native, or Swift
If you already write React for the web, Expo lets you reuse those skills for iOS and Android from one codebase. It's the path React Native itself recommends for new apps.
Expo (Recommended)
Pros
- • Current release: Expo SDK 57
- • Expo Router: file-based routing, like the Next.js
app/folder - • Cloud builds and store submission (EAS)
- • Over-the-air JS updates
- • Custom native code via config plugins and prebuild
Cons
- • Another platform (EAS) to learn and budget for
- • Very unusual native needs take extra work
Best for: Almost everyone reading this. MVPs, side projects, and plenty of production apps.
Native SwiftSwift
Apple's modern language for building iOS, macOS, watchOS, and tvOS apps. Fast, safe, and the go-to for iPhone app development.
"Like Apple's secret sauce. If you want to build for iPhone, you speak Swift."
/ SwiftUI
Swift
Apple's modern language for building iOS, macOS, watchOS, and tvOS apps. Fast, safe, and the go-to for iPhone app development.
"Like Apple's secret sauce. If you want to build for iPhone, you speak Swift."
Pros
- • Day-one access to every new Apple API
- • Best possible performance and polish
- • Widgets, watchOS, visionOS without bridges
Cons
- • Requires a Mac and Xcode
- • iOS only: Android is a second codebase
- • New language if you come from the web
Best for: Apple-only products and apps that live on the newest platform features.
"Ejecting" is gone. Old tutorials say to start with Expo and "eject" to bare React Native if you need native code. Expo now calls the managed-vs-bare split a deprecated concept. Instead it uses Continuous Native Generation (CNG): your app.json and config plugins describe the native project, and npx expo prebuild generates the ios/ and android/ folders whenever you need them.
In practice: add the native library, add its config plugin, rebuild. You never leave Expo.
3Apple Developer Program
$99 USD per year
You need a paid Apple Developer Program membership to publish on the App Store, use TestFlight, and (for most Expo workflows) put your app on a real iPhone at all. Google Play, for comparison, is a one-time $25 fee.
What membership unlocks
- • App Store distribution
- • TestFlight beta testing
- • App Store Connect access
- • Push notifications and in-app purchases
- • Installing Expo Go or a development build on your iPhone
What works without it
- • Writing code and learning
- • Running the iOS Simulator (Mac required)
- • Building and testing the Android version
- • Previewing the web version of an Expo app
Heads up on Expo Go: On iOS, Expo's docs now have you build your own copy of Expo Go with npx eas-cli@latest go and install it through TestFlight, which needs an active membership. No Mac and no membership yet? Prototype on Android or in the browser first, then join when you're ready to test on an iPhone.
4Testing Your App
iOS Simulator (Mac only, free)
Ships with Xcode from the Mac App Store
Advantages
- • Free and instant
- • Every iPhone and iPad screen size
- • Fastest iteration loop
- • No membership needed
Limitations
- • Camera and some sensors aren't real
- • Performance doesn't match a phone
- • Gestures feel different with a mouse
After installing Xcode, add the command line tools too:
Terminal (macOS)
xcode-select --installPhysical iPhone or iPad
Real hardware for accurate results
Advantages
- • Real performance, camera, GPS, sensors
- • Accurate touch and gestures
- • Works without a Mac via EAS builds
Two ways to run your app
- • Expo Go: quick sandbox for standard Expo libraries
- • Development build: your own app shell, needed once you add custom native code
Build a development build in the cloud
eas build --platform ios --profile development5Cloud Builds with EAS
EAS (Expo Application Services) is to mobile what Vercel is to web: you push, it builds on their machines, and it hands you something installable. EAS Build handles code signing and certificates, which is the part of iOS development that burns the most beginner hours.
One-time setup
npm install --global eas-cli
eas login
eas build:configureBuild
eas build --platform ios # or: android, allPricing: EAS has a free plan with limited build capacity plus paid tiers. Limits change, so check expo.dev/pricing. With a Mac you can also build locally for free.
6What It Really Costs
Apple Developer Program
Required for TestFlight, App Store, and on-device testing
$99/year
Google Play Console (if you ship Android too)
One-time registration
$25 once
Xcode + Simulator
Mac App Store
Free
Expo + Expo Router
Open source
Free
EAS Build / Submit
Free plan with limits; paid tiers for more builds
Free to start
A Mac
Optional with EAS; a used Apple Silicon Mac mini is the budget pick
Varies
A test iPhone
Strongly recommended before launch; your own phone counts
Varies
Cheapest real path to the App Store: the phone you already own + Expo + EAS's free plan + the $99/year membership. No Mac required.
7Quick Start Guide
Create the app
You'll need Node.js Node.js A runtime that lets you run JavaScript outside of a web browser. It's the engine that powers most modern dev tools, including Claude Code. "Like installing a game console. You need the console (Node) before you can play any games (run tools)."
Terminal
npx create-expo-app@latest my-app
cd my-appStart the dev server
Terminal
npx expo startOn a Mac, press i to open the iOS Simulator. Otherwise press a for an Android emulator, w for the web, or scan the QR code with Expo Go.
Build screens with your AI
Routes live in the app/ folder, just like Next.js. Try: "Add a tab layout with Home and Settings screens using Expo Router, and a settings toggle that persists." Tell Claude Code you're on Expo SDK 57 so it doesn't reach for outdated APIs.
Build for iOS in the cloud
Terminal
npm install --global eas-cli
eas login
eas build:configure
eas build --platform iosEAS walks you through signing in to your Apple Developer account and creating certificates.
8Common Traps
Following "eject" tutorials
Anything that tells you to eject is out of date. Use config plugins and npx expo prebuild (Continuous Native Generation).
Editing ios/ by hand, then running prebuild
With CNG, the ios/ folder is generated. Manual edits get overwritten. Put native changes in app.json or a config plugin instead.
AI code for an old SDK
Assistants trained on older Expo versions suggest deprecated packages. State your SDK version in CLAUDE.md and point the AI at docs.expo.dev.
Leaving signing to the last day
Apple account enrollment, certificates, and App Store review all take time. Do a TestFlight build early, not the night before launch.
Secrets in the app bundle
Anything shipped in a mobile app can be extracted. Keep API keys on your server (a Next.js API route or FastAPI backend) and call that instead.
Need a backend? Your Expo app can call the same API as your website. Build it in Next.js on Vercel, or in Python with the Python stack.
Ready to build for iOS?
Start with Expo, build in the cloud, and buy hardware only when the app earns it.