> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shipnative.app/llms.txt
> Use this file to discover all available pages before exploring further.

# iOS Deployment

> Build and submit your app to the Apple App Store

Ship your app to the App Store using EAS Build. This guide covers building, signing, and submitting your iOS app.

## Prerequisites

Before you begin, ensure you have:

* An **Apple Developer Program** membership.
* **Xcode** installed on a macOS machine (required for local builds and simulator testing).
* **EAS CLI** installed (`yarn global add eas-cli` or `npm install -g eas-cli`).
* Your app's **Bundle Identifier** configured (e.g., `com.yourcompany.yourapp`) during `yarn setup`.

## 1. Configure `app.json`

Ensure your `app.json` file (located in `apps/app/app.json`) is correctly configured for iOS. Key properties include:

* `expo.name`: Your app's display name.
* `expo.slug`: A URL-friendly name for your app.
* `expo.version`: Your app's version string (e.g., "1.0.0").
* `expo.ios.bundleIdentifier`: Your unique iOS bundle ID (e.g., `com.yourcompany.yourapp`).
* `expo.ios.buildNumber`: Your app's build number (increment this for each new build).

```json theme={null}
{
  "expo": {
    "name": "My Shipnative App",
    "slug": "my-shipnative-app",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "automatic",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.yourcompany.yourapp", // IMPORTANT: Your unique bundle ID
      "buildNumber": "1" // Increment this for each new build
    },
    "android": {
      // ... Android specific configurations
    },
    "web": {
      // ... Web specific configurations
    },
    "plugins": [
      [
        "expo-notifications",
        {
          "icon": "./assets/notification-icon.png",
          "color": "#000000"
        }
      ]
    ],
    "extra": {
      "router": {
        "origin": false
      },
      "eas": {
        "projectId": "YOUR_EAS_PROJECT_ID" // Replace with your EAS Project ID
      }
    }
  }
}
```

<Tip>
  If you ran `yarn setup`, your `bundleIdentifier` and other basic iOS settings should already be configured.
</Tip>

## 2. Create an EAS Build Profile

EAS Build uses profiles to define how your app is built. You'll typically have `development`, `preview`, and `production` profiles.

Open `eas.json` (in your `shipnativeapp/` directory) and ensure you have a `production` profile for iOS:

```json theme={null}
{
  "cli": {
    "version": ">= 3.15.1"
  },
  "build": {
    "production": {
      "node": "20.19.0"
    },
    "development": {
      "extends": "production",
      "distribution": "internal",
      "ios": {
        "buildConfiguration": "Debug",
        "simulator": true
      }
    },
    "preview": {
      "extends": "production",
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "your-apple-id@example.com", // Your Apple ID email
        "ascAppId": "YOUR_APP_STORE_CONNECT_APP_ID", // Optional: Your App Store Connect App ID
        "sku": "com.yourcompany.yourapp", // Your app's SKU
        "teamId": "YOUR_APPLE_DEVELOPER_TEAM_ID" // Your Apple Developer Team ID
      }
    }
  }
}
```

<Tip>
  The `node: "20.19.0"` setting ensures consistent Node.js version across all EAS builds. Shipnative also bundles Yarn 4.x in `.yarn/releases/` for reliable builds without corepack conflicts.
</Tip>

## 3. Generate an iOS Build

To create a production-ready `.ipa` file for the App Store, use the EAS CLI:

```bash theme={null}
cd shipnative
eas build --platform ios --profile production
```

This command will:

1. Start a new build on EAS servers.
2. Handle code signing, provisioning profiles, and certificates automatically (if configured in EAS).
3. Produce an `.ipa` file upon successful completion.

You can monitor the build status in your terminal or on the [EAS Dashboard](https://expo.dev/accounts/YOUR_USERNAME/projects/YOUR_PROJECT_SLUG/builds).

## 4. Submit to App Store Connect

Once your build is complete and you have the `.ipa` file, you can submit it to App Store Connect using EAS Submit:

```bash theme={null}
cd shipnative
eas submit --platform ios --latest --profile production
```

This command will:

1. Prompt you for your Apple Developer credentials (if not already configured in `eas.json`).
2. Upload the latest successful production build to App Store Connect.
3. Create a new version in App Store Connect if one doesn't exist.

<Tip>
  Alternatively, you can download the `.ipa` file from the EAS Dashboard and upload it manually using Xcode's Organizer or Transporter app.
</Tip>

## 5. Prepare for Review in App Store Connect

After successful submission, log in to [App Store Connect](https://appstoreconnect.apple.com/) to:

* Add metadata (app description, keywords, screenshots).
* Configure pricing and availability.
* Select the build you just uploaded for review.
* Provide any necessary review notes.

## Troubleshooting

* **Build Failures:** Check the EAS build logs carefully for error messages. Common issues include incorrect bundle identifiers, missing credentials, or syntax errors in `app.json`.
* **Submission Errors:** Ensure your `eas.json` submit profile is correctly configured with your Apple ID, team ID, and SKU. Verify that your app version and build number are incremented for new submissions.
* **Push Notifications:** If you're using push notifications, ensure you've enabled the capability in your Apple Developer account and configured your `app.json` as described in the [Push Notifications](/core-features/push-notifications) guide.

## Resources

* **Expo Application Services (EAS) Documentation:** [https://docs.expo.dev/eas/build/](https://docs.expo.dev/eas/build/)
* **EAS Submit Documentation:** [https://docs.expo.dev/eas/submit/](https://docs.expo.dev/eas/submit/)
* **Apple Developer Program:** [https://developer.apple.com/programs/](https://developer.apple.com/programs/)
* **App Store Connect:** [https://appstoreconnect.apple.com/](https://appstoreconnect.apple.com/)
