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

# Publish to the App Store

> How to upload your Capwrapper-built IPA to App Store Connect, configure TestFlight, and avoid the most common Apple review rejections.

Capwrapper's iOS support is currently in public beta (available from v2.0.0). Starting with v2.1.0, you can submit directly to TestFlight from the Capwrapper dashboard without needing Xcode or Transporter. For production App Store releases, you use App Store Connect in the same way you would with any IPA built outside of Capwrapper.

<Note>
  iOS builds are in public beta as of v2.0.0. Direct TestFlight submission from the Capwrapper dashboard was added in v2.1.0. If you are on an earlier version, upload your IPA using Apple's Transporter app or Xcode Organizer instead.
</Note>

## What you need before you start

* An [Apple Developer account](https://developer.apple.com/programs/) — \$99/year
* Access to [App Store Connect](https://appstoreconnect.apple.com)
* A distribution certificate created in the Apple Developer portal
* A provisioning profile tied to your App ID and distribution certificate
* A signed IPA file downloaded from your Capwrapper dashboard

You supply your distribution certificate and provisioning profile when configuring your Capwrapper build under **Configuration > iOS Signing**. Capwrapper embeds them during the cloud build so the resulting IPA is ready for submission.

## Two paths to users

<Tabs>
  <Tab title="TestFlight (beta testing)">
    TestFlight lets you distribute your app to internal testers (up to 100 people in your Apple Developer team) or external testers (up to 10,000 people with a shorter review process) before submitting for public release. It is the fastest way to validate a build on real devices.

    If you are on Capwrapper v2.1.0 or later, you can submit directly to TestFlight from your dashboard after the build completes. For earlier versions, use [Transporter](https://apps.apple.com/app/transporter/id1450874784) or Xcode Organizer to upload the IPA.

    <Tip>
      Always run your app through TestFlight with a group of real testers before submitting to the App Store. Catching crashes or broken functionality at this stage avoids the cost of a full Apple review cycle.
    </Tip>
  </Tab>

  <Tab title="App Store (production)">
    A production App Store release makes your app publicly available (or available to specific regions) after Apple reviews and approves it. You upload the same IPA that you tested through TestFlight — there is no separate build required.

    New app submissions typically take 1–2 days for review. Updates to existing apps are usually faster.
  </Tab>
</Tabs>

## Submit to the App Store

<Steps>
  <Step title="Create an App ID">
    In the [Apple Developer portal](https://developer.apple.com/account), go to **Certificates, Identifiers & Profiles > Identifiers** and register a new App ID. Use the same bundle ID (`packageId`) that you set in your Capwrapper build config. Enable any capabilities your app needs (Push Notifications, Sign in with Apple, etc.) here.
  </Step>

  <Step title="Create a new app in App Store Connect">
    Go to [appstoreconnect.apple.com](https://appstoreconnect.apple.com), click **My Apps**, then the **+** button to create a new app. Select **iOS**, enter your app name, primary language, the Bundle ID you just registered, and an SKU. Click **Create**.
  </Step>

  <Step title="Fill in app metadata">
    Under the **App Store** tab, complete the required fields:

    * App name and subtitle
    * Description (up to 4,000 characters)
    * Keywords (up to 100 characters, comma-separated)
    * Support URL and marketing URL
    * Privacy policy URL (required for all apps)
    * Screenshots for every required device size (iPhone 6.9", 6.5", and 5.5" as a minimum)
    * Category and age rating
  </Step>

  <Step title="Upload your IPA">
    <Tabs>
      <Tab title="Capwrapper dashboard (v2.1.0+)">
        After your build completes, click **Submit to TestFlight** in your Capwrapper dashboard. Capwrapper uploads the IPA directly to App Store Connect using your credentials. The build will appear under TestFlight within a few minutes once Apple finishes processing.
      </Tab>

      <Tab title="Transporter">
        Download [Transporter](https://apps.apple.com/app/transporter/id1450874784) from the Mac App Store. Sign in with your Apple ID, drag in your IPA file, and click **Deliver**. The build will appear in App Store Connect once Apple finishes processing (usually 5–15 minutes).
      </Tab>

      <Tab title="Xcode Organizer">
        Open Xcode, go to **Window > Organizer**, select **Archives**, and click **Distribute App**. Choose **App Store Connect** as the distribution method and follow the prompts to upload the IPA directly.
      </Tab>
    </Tabs>
  </Step>

  <Step title="Select the build and submit for review">
    Back in App Store Connect, go to your app's **App Store** tab. Under the **Build** section, click the **+** button and select the build you just uploaded. Once all required metadata is complete and the build is attached, click **Submit for Review**.
  </Step>

  <Step title="Wait for Apple review">
    Apple typically reviews new app submissions within 1–2 business days. You will receive an email when the review is complete. If rejected, Apple provides specific feedback you can address before resubmitting.
  </Step>
</Steps>

## Common rejection reasons

| Reason                                  | How to avoid it                                                                                                                                                            |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Missing privacy policy                  | Every app must link to a privacy policy, even if you only collect crash data. Provide a publicly accessible URL in both App Store Connect and within the app itself        |
| App crashes or has broken functionality | Test thoroughly on TestFlight with real devices before submitting. Apple reviewers test the app manually and will reject it if they encounter crashes                      |
| Misleading metadata                     | Your app name, description, screenshots, and keywords must accurately represent what the app does. Do not include competitor names or unrelated keywords                   |
| Missing required device screenshots     | Apple requires screenshots for specific device sizes. Check the current requirements in App Store Connect — at minimum you need iPhone 6.9", 6.5", and 5.5" screenshots    |
| Use of private or restricted APIs       | Capwrapper only uses public Apple APIs, but if your web app calls native bridges that require special entitlements, ensure those are declared in your provisioning profile |
