Tutoriel

Deploying Your App to the App Store: EAS Build vs Fastlane

Vibe coding has democratized app creation. But once the app is built, how do you get it onto the App Store? Two approaches depending on whether your app is React Native or native Swift.

Vibe coding changes the game

In 2025, something changed in the world of development. Thousands of people - designers, entrepreneurs, makers - started building real mobile apps without having learned to code. That's vibe coding: describing what you want to an LLM, iterating in natural language, and watching the app take shape.

Claude, Cursor, Windsurf and others have made this possible. And the result is often stunning. A mapping app with real-time 3D shadow simulation? Built in a few sessions.

But vibe coding usually stops the moment the app runs locally. Deploying to the App Store is a different story. Apple has its own rules, its certificates, its formats, its review. And here, LLMs can't do everything for you - at least not yet.

This article explains the two main approaches for submitting an iOS app to the App Store, with their concrete advantages and limitations.

The iOS deployment pipeline - overview

Whatever tool is used, the pipeline stays the same:

  1. Compile the source code into an iOS binary (.ipa)
  2. Sign this binary with a valid Apple certificate
  3. Upload the binary to App Store Connect
  4. Fill in the metadata (description, screenshots, price, etc.)
  5. Submit for Apple review (2 to 7 days)

It's steps 1, 2 and 3 that differentiate the two approaches.

Approach 1 - EAS Build (for React Native / Expo)

If your app is built with React Native - which is the case for most apps coming out of vibe coding via Cursor or Claude - then EAS Build is the most direct route.

EAS (Expo Application Services) is Expo's cloud service. Instead of compiling on your Mac, you send your code to their servers. A virtual Mac on their end does all the work: installing dependencies, Xcode compilation, signing, producing the .ipa.

The diagram

Votre code local
      ↓ (push via CLI)
Serveurs Expo (Mac virtuel)
      ↓ (compile + signe)
Fichier .ipa
      ↓ (eas submit)
App Store Connect

The concrete advantages

No need for Xcode on your Mac. This is the main one. Xcode weighs 15 GB, requires a recent macOS, and its learning curve for deployment is real. With EAS, you don't need it.

Certificates are managed automatically. Apple requires every app to be signed with a distribution certificate. EAS can create it for you on the first build, store it on its servers, and reuse it for every new build.

A single command. Once configured, deploying a new version comes down to:

eas build --platform ios --profile production
eas submit --platform ios --latest

Free for personal projects. Expo's free tier includes a monthly build quota that's more than enough for a solo project or a small team.

The minimal configuration

Three files are enough to configure EAS:

app.json - your app's identity:

{
  "expo": {
    "name": "Mon App",
    "slug": "mon-app",
    "owner": "votre-compte-expo",
    "version": "1.0.0",
    "ios": {
      "bundleIdentifier": "com.votreentreprise.monapp",
      "infoPlist": {
        "ITSAppUsesNonExemptEncryption": false
      }
    }
  }
}

eas.json - the build profiles:

{
  "cli": {
    "version": ">= 16.0.0",
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {}
  }
}

And that's it. The rest (certificates, provisioning profiles, build numbers) is managed by EAS.

The limitations

The first build requires interaction: EAS must authenticate with Apple to create the certificates. You'll need to enter your Apple ID, password, and validate a 2FA code. This is a manual step that can't be fully automated.

EAS is also specific to the Expo/React Native ecosystem. If your app uses very custom native modules or pure Swift, you're out of scope.

Approach 2 - Fastlane (for native Swift and all Xcode projects)

If your app is in native Swift - built with Xcode, without React Native - then Fastlane is the reference tool for automating deployment.

Fastlane is an open source tool (written in Ruby) created in 2014, acquired by Google in 2017, and now fully open source. It automates every step of iOS (and Android) deployment from your Mac.

The diagram

Votre code local
      ↓
Fastlane (sur votre Mac)
      ↓ gym (compile via Xcode)
Fichier .ipa signé
      ↓ deliver (upload)
App Store Connect

Unlike EAS, compilation happens on your own Mac. Xcode is therefore required.

Fastlane's tools

Fastlane is actually a collection of specialized tools, called "actions":

ActionWhat it does
gymCompiles and signs the app (replaces "Product → Archive" in Xcode)
deliverUploads the .ipa, the metadata and screenshots to App Store Connect
snapshotAutomatically takes screenshots on all iOS simulators
matchSyncs certificates in a git repo - ideal for teams
pilotManages TestFlight: upload, invitations, beta tester groups
cert + sighCreates and downloads certificates and provisioning profiles

A typical Fastfile

Fastlane configuration is done in a file Fastfile. A "lane" is a sequence of actions:

lane :release do
  # Incrémente le build number automatiquement
  increment_build_number

  # Compile et signe l'app
  gym(
    scheme: "MonApp",
    export_method: "app-store"
  )

  # Upload sur App Store Connect
  deliver(
    submit_for_review: true,
    automatic_release: false,
    force: true
  )
end

To launch the full deployment:

fastlane release

The killer feature: snapshot

One of Fastlane's most valuable features is automatic screenshot generation. The App Store requires screenshots in several formats (6.7", 6.5", 5.5" for iPhone, several sizes for iPad). Doing them manually takes time. Fastlane can generate them automatically on all simulators with one command:

fastlane snapshot

Fastlane launches your app on each configured simulator, automatically navigates through the defined screens, and takes screenshots. Result: 20-30 screenshots in a few minutes.

The limitations

Fastlane requires Ruby and Xcode on your Mac. The initial setup takes time, especially for match (team certificate management). It's an investment worth making if you deploy regularly or as a team.

Direct comparison

CriteriaEAS BuildFastlane
For which type of appReact Native / ExpoSwift, Flutter, React Native, anything
Compiles onExpo cloud serversYour Mac (Xcode required)
Xcode requiredNoYes
CertificatesManaged automaticallyMatch (git repo) or manual
Automatic screenshotsNoYes (snapshot)
Initial setupSimpleModerate
CostFree (free tier)Free (open source)
Ideal forSolo makers, vibe codersTeams, native Swift apps

What AI can - and can't - do

Vibe coding has its limits when facing the Apple and Google stores, and it's worth being clear-eyed about that.

What Claude or an LLM can do for you:

  • Configure app.json and eas.json correctly
  • Generate icons in all required formats
  • Write descriptions, keywords and metadata in several languages
  • Write the Fastfile , tailored to your project
  • Diagnose build errors
  • Fill in App Store Connect via a browser (with the right tools)

What remains manual:

  • Apple authentication (Apple ID, 2FA) - Apple blocks full automation
  • Screenshots - they must show your actual app, not a simulation
  • Apple review - a human at Apple examines your app
  • The Apple Developer account ($99/year) - you have to create it yourself

In practice, with EAS or Fastlane, deployment comes down to 3-4 manual interactions (authentication, certificate validation, screenshot upload). Everything else can be automated or delegated to an LLM.

My current workflow

For Sunny Terraces Brussels, a React Native app built through vibe coding with Claude Code, here's the workflow I use:

  1. Claude Code generates the icons (SVG → PNG in all sizes) from the code
  2. Claude Code writes all the App Store metadata in EN/FR/NL
  3. Claude Code configured app.json and eas.json
  4. I run eas build --platform ios --profile production in my terminal
  5. I validate the certificates in interactive mode (2 minutes)
  6. EAS compiles (~15 min on their servers)
  7. I run a prompt in Claude (with browser access) to fill in App Store Connect automatically
  8. I submit

The difference from a manual deployment two years ago: what used to take half a day (understanding certificates, configuring Xcode, writing text in several languages, generating assets) now takes 30 minutes.

Vibe coding doesn't stop at code. It now extends to the entire pipeline.

EAS Build - Official documentation

The complete reference for configuring EAS Build with your Expo / React Native project.

docs.expo.dev

Fastlane

The reference open source tool for automating iOS and Android deployment from Xcode.

fastlane.tools