---
updatedAt: 2025-11-24T20:16:52.000Z
agentTools:
  projectIndex: https://docs.appery.io/llms.txt
---

# iOS

iOS app export.

You have 2 options when exporting your app for iOS: [Binary IPA](https://docs.appery.io/docs/appexport-android#binary-app) or [xCode](https://docs.appery.io/docs/appexport-ios#building-an-ios-app-with-xcode) (source code):

<Image align="center" border={true} width="50% " src="https://files.readme.io/54984dc6d0a87c270b973302ff1b44831d8597488ee326c66f0b0bb381db6177-Export_IPA.png" className="border" />

* [Binary](https://docs.appery.io/docs/appexport-ios#binary-app) app (you can select to build **Release** or **[Release and Publish](https://docs.appery.io/docs/appexport-ios#release-and-publish-building)** type `.ipa`) – this app version can be [published](#publishing-for-ios) to the *[App Store](https://www.apple.com/app-store/)*.

> 👍 *Release and Publish* Builds
>
> If the **[Release and Publish](https://docs.appery.io/docs/appexport-ios#release-and-publish-building)** type is selected under the **iOS binary** tab, building the release app version will be performed together with publishing it to the *[App Store](https://www.apple.com/app-store/)*.\
> Please check this step-by-step [Appery.io YouTube Education Guide](https://www.youtube.com/playlist?list=PLdUnWwhvJspb9QkQ5gGjK8qz3zzkpb6y3) video to learn how you can develop an iOS mobile app with [Appery.io](https://appery.io) right in the browser using a Windows desktop.\
> Also, you will learn how to install it on an iPhone for testing and then publish it to the *[App Store](https://www.apple.com/app-store/)*:

<HTMLBlock>{`
<iframe width="610" height="315" src="https://www.youtube.com/embed/RsdhQes0A5Y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
`}</HTMLBlock>

When ready, your binary package will look like this:

<Image align="center" border={true} src="https://files.readme.io/3cac28b-ipa_release.png" className="border" />

* [xCode project (source code)](https://docs.appery.io/docs/appexport-ios#building-an-ios-app-with-xcode) – you get **HTML/CSS/JS + the PhoneGap** library configured as an **xCode** projects. If you decide to build for **xCode**, you will get the `.zip` file:

<Image align="center" border={true} src="https://files.readme.io/6f68307-Screenshot_17.png" className="border" />

Once your project is generated, the QR-Code can be used to upload the application to your device or save the file for further use.

> 🚧 Important!
>
> Before you start your build, make sure your account has at least one [iOS certificate file](https://docs.appery.io/docs/appexport-ios#ios-certificate-file). Otherwise, you will get an error notification.

# Binary App

The [Appery.io](https://appery.io) platform provides a cloud-based building app service that is programmed as a Cordova app for iOS, which you can publish to the [App Store](https://www.apple.com/app-store/). Since iOS is more demanding in terms of certificates, some additional actions are required to build an `.ipa`.

You can select between two types when building the release version that is to be submitted to *Apple*: **Release** or **Release and Publish**. Both build types are similar with the only difference that when building the **Release and Publish** will automatically submit your app to the [App Store](https://www.apple.com/app-store/) for publishing.

> 🚧 Important!
>
> Before you start building the [iOS binary](#ios-binary-settings) file, make sure you have the following:
>
> * Apple certificate (`.p12`).
> * Apple provisioning profile (`.provision`).
> * Bundle ID (`com.company.`) – can be found in your *Apple* certificate.
>
> Check [A Beginner’s Guide to iOS Provisioning Profiles](http://www.theodo.fr/blog/2017/02/a-beginners-guide-to-ios-provisioning-profiles/) for details.

## iOS Binary Settings

[Appery.io](https://appery.io) comes with iOS binary file settings where you can configure everything you need to package the app for iOS.\
Among other binary settings, app label, bundle ID, Cordova iOS version, and [build type](https://docs.appery.io/docs/appexport-ios#build-type-setting) can be defined.\
Also, enabling the [automatic app update](https://docs.appery.io/docs/appexport-auto-update) feature is available from under this tab.

### Build Type Setting

To build your app binary, go to your project, click **App Settings > [iOS binary](https://docs.appery.io/docs/appbuilder-app-settings#ios-binary) > Build type** and select the **Release** or **[Release and Publish](https://docs.appery.io/docs/appexport-ios#release-and-publish-building)** option from the drop-down (by default, the **Debug** type is set that is used for testing purposes only. Also, the **[Live Debug](https://docs.appery.io/docs/using-live-debug)** option is designed for quick testing and/or debugging your project and cannot be used for publishing):

<Image align="center" border={true} src="https://files.readme.io/73dcc7e-2022-11-28_15-46-09.png" className="border" />

> 🚧 *Release and Publish* Builds
>
> If you build your app with publishing for iOS, please make sure you provide your **Bundle Id**, **Version**, **Build**, **Apple Id** and add the [app-specific password](#example-generating--app-specific-password) that is generated on the *Apple* side.\
> Read more [here](https://docs.appery.io/docs/appexport-ios#publishing-for-ios).

With the **Release**/**Release and Publish** options selected, JavaScript assets will be minified to reduce the binary size.

# Publishing for iOS

## *Release and Publish* Building

Publishing [Appery.io](https://appery.io) apps for iOS is made easy with the integrated **Release and Publish** option, so before you can start building your release app with further publishing it, select this type under **[App settings > iOS Binary](https://docs.appery.io/docs/appbuilder-app-settings#ios-binary)** tab:

<Image align="center" border={true} src="https://files.readme.io/ae267ae-2022-11-25_22-21-21.png" className="border" />

> 🚧 Important Note!
>
> The *Release and Publish* building option is available for the projects built with **[Ionic](https://docs.appery.io/docs/ionic-5-overview)** only!

Also, to build your app with publishing for iOS, you will need to provide your **Bundle Id** (ID you provided for the uploaded certificate (you made it when registering the app on the *Apple* website)), **Version**, **Build**.\
Also, you will need to make sure you specified the correct **Apple Id** and added the [app-specific password](#example-generating--app-specific-password) generated on the *Apple* side:

<Image align="center" border={true} src="https://files.readme.io/62cbb82-2022-11-28_15-46-09.png" className="border" />

> 🚧 Important!
>
> Make sure you also provided the correct **Bundle Id**, **Version** and **Build** data.

### Example: Generating  App-Specific Password

Below are the sample steps for generating the app-specific password.

1. First of all, sign in to [appleid.apple.com](https://appleid.apple.com/).
2. In the **Sign-In and Security** section, select **App-Specific Passwords**:

<Image align="center" border={true} src="https://files.readme.io/4e994c2-2022-11-25_21-37-11.png" className="border" />

3. Click **Generate an app-specific password** or select the blue plus sign icon (shown if you already have some passwords):

<Image align="center" border={true} src="https://files.readme.io/6d78822-2022-11-25_23-05-43.png" className="border" />

4. You will be asked to confirm the password by reentering your **Apple Id** pass:

<Image align="center" border={true} src="https://files.readme.io/078670f-2022-11-25_21-39-29.png" className="border" />

5. After you click **Continue**, the app-specific password is generated so that you can copy it to clipboard and then paste for your [Appery.io](https://appery.io) app (under the **[App settings > iOS Binary](https://docs.appery.io/docs/appbuilder-app-settings#ios-binary)** tab):

<Image align="center" border={true} src="https://files.readme.io/ed522f0-2022-11-25_21-39-57.png" className="border" />

> 📘 Want to know more?
>
> [Here](https://support.apple.com/en-us/HT204397) is the document from *Apple* with more details on how to generate an app-specific password.

## iOS Certificate File

Another important prerequisite for building an [iOS binary](#ios-binary-settings) file: your account should have at least one iOS certificate file:

<Image align="center" border={true} src="https://files.readme.io/0158943-2022-11-29_19-01-43.png" className="border" />

You can select to [import](https://docs.appery.io/docs/appexport-certificate-management#importing-certificates) the iOS certificates or [generate](https://docs.appery.io/docs/appexport-certificate-management#for-ios) them under the **[App Builder](https://docs.appery.io/docs/apperyio-visual-builder)** **[Resources](https://docs.appery.io/docs/general-platform-overview#managing-account-resources)** tab in three simple steps and then used for generation of a binary file.

### Importing iOS Certificate

> 👍 Before You Get Started
>
> Before you can build an iOS binary, you need to sign up for the [iOS Developer Program](https://developer.apple.com/programs/) and provide all of the developer information and certificates below. If you are new to this, here is a good link to get you started: [Managing Your Signing And Provisioning Assets](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html). You also will need a Mac to submit the binary to the *[App Store](https://www.apple.com/app-store/)*.

1. Go to the **[Resources](https://docs.appery.io/docs/general-platform-overview#managing-account-resources) > Certificates** tab.
2. Click **Import Certificates > iOS**.
3. Click **Choose** file and select your **iOS Distribution .p12 file**.
4. Type your password for this certificate and click **Import** certificate:

<Image align="center" border={true} width="50% " src="https://files.readme.io/8348824-Screenshot_25.jpg" className="border" />

5. Go to **App Settings >[iOS binary](https://docs.appery.io/docs/appbuilder-app-settings#ios-binary)**.

> 👍 Generating iOS Certificates
>
> iOS certificates can also be [automatically generated](https://docs.appery.io/docs/appexport-certificate-management#for-ios).

6. For **Bundle ID**, make sure you type the bundle ID that you provided for the uploaded certificate (you made it when registering the app on the *Apple* website). For example, ***io.appery.app.QuizApp***.
7. Scroll down the page and under the **Distribution certificate** section, select the earlier uploaded `.p12` certificate from the drop-down menu.

> 🚧 Important!
>
> Make sure you upload the `.p12` file otherwise you will get an error notification.

8. Click **Change** in the **Provisioning profile** section and upload the `.mobileprovision` file:

<Image align="center" border={true} src="https://files.readme.io/24e6eaf-Screenshot_15.png" className="border" />

> 🚧 Important: *Release and Publish* Builds
>
> If you are building the **[Release and Publish](https://docs.appery.io/docs/appexport-ios#release-and-publish-building)** type, please double check that the *[Apple Distribution](https://developer.apple.com/account/resources/certificates/list)* certificate type is provided for the **Distribution certificate** value:

<Image align="center" border={true} width="smart" src="https://files.readme.io/4b1144d-2022-11-25_23-33-31.png" className="border" />

Click **Save**.

9. To publish the app for iOS, click **EXPORT > Binary IPA**:

<Image align="center" border={true} width="50% " src="https://files.readme.io/c86e0f1643260a78316f528ee234797718018bfcd92a3811a42ce19c7c40b2d7-Binary_IPA.png" className="border" />

Note that building the `.ipa` file could take a while.\
Also, when started, your build progress should be shown for the project in your <https://appstoreconnect.apple.com/> account:

<Image align="center" border={true} src="https://files.readme.io/5671c3a-2022-11-28_15-48-41.png" className="border" />

10. After the build is completed, the `.ipa` file can be downloaded and you’ll also see a QR code:

<Image align="center" border={true} src="https://files.readme.io/e33ef33-2022-11-28_15-54-29.png" className="border" />

Now, you can scan this QR code (use the [Qrafter](https://itunes.apple.com/us/app/qrafter-qr-code-barcode-reader/id416098700?mt=8) app, for example) to download the file directly on your iOS device and install it.

11. Also, in your <https://appstoreconnect.apple.com/> account, the build progress  (takes some time to update) should finalize with the possibility to manage it according to your needs:

<Image align="center" border={true} width="smart" src="https://files.readme.io/6f605c5-2022-11-29_11-15-46.png" className="border" />

#### Troubleshooting *certificate is not valid* Error

> 🚧 Error: *Certificate is not valid* / *Certificate is not valid or trusted*
>
> Export will be successful only when valid certificates are used.\
> If you get the *certificate is not valid* / *certificate is not valid or trusted* error, please make sure you have the corresponding *Apple Root* and *Intermediate Certificates* (*G3*, *G4*, and/or *G5*) from the [Apple certificate authority](https://www.apple.com/certificateauthority/) installed.

### Generating iOS Certificates

Please follow the steps from [this](https://docs.appery.io/docs/appexport-certificate-management#for-ios) document to get your iOS certificates generated for submitting the app to the *[App Store](https://www.apple.com/app-store/)*.

#### More References on Generating iOS Certificates

The following links can also be helpful if you select to generate iOS certificates outside [Appery.io](https://appery.io) .

#### Windows

* [How to Create a Provisioning Profile and p12 for iOS in Windows](https://youtu.be/v2PB3egShMU)

#### Mac OS

* [App distribution guide](https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html#//apple_ref/doc/uid/TP40012582-CH31-SW1) (from Apple).

> 🚧 Publishing Apps to App Store
>
> Publishing your app to the *[App Store](https://www.apple.com/app-store/)* is outside the scope of our support.

### Keys and Settings

> ❗️ Important Information about the Camera Plug-in
>
> The keys variables are currently not working, please refer to our workaround hint here:\
> <https://docs.appery.io/docs/known-issues#camera-plugin-variables-for-ios-projects->

> 📘 iOS 10> requirement
>
> Starting from iOS 10 it's mandatory that `NSCameraUsageDescription` and `NSPhotoLibraryUsageDescription` be added to the ***info.plist***.
>
> There is no need to add such settings manually in project **Source files**, instead, you can add them in **App Settings > iOS keys** options as a key value.
>
> If you don't pass the variable, the plug-in will add an empty string as value.

The latest Cordova plug-ins (starting from the Libraries version *4.1* JQM and *1.1* Ionic) require adding keys and values when the app is being approved by the *[App Store](https://www.apple.com/app-store/)*. The plug-ins that come bundled with your app, the keys are set by default. To view or modify the settings, click the **Options** button.

Here are some examples.

| Plug-in | Key                                   | Value                                            |
| :------ | :------------------------------------ | :----------------------------------------------- |
| Camera  | CAMERA\_USAGE\_DESCRIPTION            | This app uses the camera to scan QR code.        |
| Camera  | PHOTOLIBRARY\_USAGE\_DESCRIPTION      | This app needs to access the photo library.      |
| Camera  | LOCATION\_IN\_USE\_USAGE\_DESCRIPTION | This app will use your device location services. |

<Callout icon="🚧" theme="warn">
  The `NSPhotoLibraryUsageDescription` field can be cleared/replaced by some Cordova plug-ins if they are used in an app. To avoid this, the related plug-ins should be additionally redefined with the parameters needed.
</Callout>

> ❗️ Keys Redefinition Cases
>
> There is a set of plug-ins that uses `CAMERA_USAGE_DESCRIPTION` parameter to set `NSCameraUsageDescription` key.\
> They are:
>
> * phonegap-plugin-barcodescanner
> * cordova-plugin-media-capture
> * cordova-plugin-camera
>
> Just add `CAMERA_USAGE_DESCRIPTION` to all plug-ins from the list which are enabled in the App Settings.
>
> The same is true for `LOCATION_IN_USE_USAGE_DESCRIPTION` parameter for these plug-ins:
>
> * cordova-plugin-camera
> * cordova-plugin-geolocation

<Image align="center" alt={916} border={true} caption="Camera options." title="cordova_camera_plugin_options.png" src="https://files.readme.io/184a3bd-cordova_camera_plugin_options.png" />

| Plug-in         | Key                        | Value                                                |
| :-------------- | :------------------------- | :--------------------------------------------------- |
| Barcode Scanner | CAMERA\_USAGE\_DESCRIPTION | This app uses the camera to scan QR code as a value. |

<Image align="center" alt={867} border={true} caption="Barcode Scanner options." title="cordova_barcode_plugin_options.png" src="https://files.readme.io/2fb2502-cordova_barcode_plugin_options.png" />

> 📘 iOS 10 < requirement
>
> Starting from iOS 10 it's mandatory that the `NSLocationWhenInUseUsageDescription` entry be added to the ***info.plist***.
>
> There is no need to add such settings manually in project **Source files**, instead, you can add them in **App Settings > iOS keys** options as a key value.
>
> If you don't pass the variable, the plug-in will add an empty string as value.

| Plug-in     | Key                                   | Value                                                |
| :---------- | :------------------------------------ | :--------------------------------------------------- |
| Geolocation | GEOLOCATION\_USAGE\_DESCRIPTION       | This app will use your device location services.     |
| Geolocation | LOCATION\_IN\_USE\_USAGE\_DESCRIPTION | This app will use your device location when running. |

# Building an iOS App with Xcode

To publish the app for iOS with Xcode, click **EXPORT > Binary IPA**:

<Image align="center" border={true} width="50% " src="https://files.readme.io/d0fa32d0a172e067290ec03fab50e41da512890ab7f5816e14e4e56eba4c679e-xCode.png" className="border" />

> 📘 Before You Begin
>
> You will need the following before you start this process:
>
> * Mac macOS 10.12+ or higher
> * Xcode 9+ or higher with iOS SDK installed.
> * You should be enrolled in the iOS development program and have the correct certificates and provisioning profiles. You can get Xcode, iOS SDK, certificates, and profiles from <http://developer.apple.com>.

## Running in an iOS Simulator

> 📘 Source Archive File
>
> Extract the **ZIP** archive file that you've downloaded from [Appery.io](https://appery.io) and after archive extraction open folder `/platforms/ios/` there you can find files for Xcode with extensions `.xcodeproj` and `.xcworkspace` - if you using a Push notification in your project then it is preferable to open a `.xcworkspace` file.

If you want to run an [Appery.io](https://appery.io) app in the iOS Simulator:

1. Open ***\[app\_name].xcodeproj*** with Xcode.
2. Select the correct scheme to run: **\[app\_name] > iPhone X** or **\[app\_name] > iPad X** in the top-left part of the Xcode window.
3. Click **Run** in the top-left corner of the Xcode window (***PushApp*** is the app name).

> 👍 Launched App
>
> You should see a ***Build Successful*** message. With the iOS Simulator running the app is launched.

## Running on a Mobile iOS Device

Running the Appery.io app on an iOS device is a more involved procedure than running it in the simulator. Notice that steps #1 and #2 are optional if you have already completed them for a different app.

1. Add the certificate to the keychain. Double-click on the `.cer` file and confirm adding the certificate. You can now see the certificate in the keychain window. Repeat this process for the distribution certificate.
2. Open the **\[app\_name].xcodeproj** with Xcode.
3. Select the **\[app\_name]** project file at the top of the project navigator.
4. Select the **Build Settings** tab, and proceed to the **Code Signing** section (PushApp is the app name).
5. Find the **Code Signing Identity** group and open it. If you use the app source code you built and exported from Appery.io, there should be 2 sub-items – **Debug** and **Release**.

> 📘 Different Certificate Purposes
>
> If you have a developer’s certificate, you should ensure that the values for **Debug > Any iOS SDK** and **Release > Any iOS SDK** are set to your developer’s certificate. We recommend setting the iOS Developer value there, this enables automatic profile selection. However, you can click the value and see the certificate and profile that can be used by Xcode for code signing.

7. Open the **General** tab of the **\[app\_name].xcodeproj**. Find the **Bundle Identifier** parameter, and set its value to the corresponding value of the allowed application identifiers for your provisioning profile.
8. Select the correct scheme to run: **\[app\_name] > \[Your connected device's name]** and click **Run**.

# Submitting your App to the *App Store*

This section lists a number of helpful hints when submitting your app to the *[App Store](https://www.apple.com/app-store/)*.

> 👍 Tip: *Release and Publish* Builds
>
> We highly recommend publishing your [Appery.io](https://appery.io) apps for iOS using our integrated **[Release and Publish](https://docs.appery.io/docs/appexport-ios#release-and-publish-building)** option.

> 🚧 Submitting to App Store
>
> Please note that submitting your iOS to the *[App Store](https://www.apple.com/app-store/)* is outside the scope of our standard support but is included in our paid [support packs](http://appery.io/services).

Since the recent Xcode version 11 update, the Application Loader had been deprecated as a separate tool for IPA file submissions. The *Apple* approach is changed and we suggest following this tutorial for IPA files submission to the *[App Store](https://www.apple.com/app-store/)* (please note that the Xcode is now mandatory).

Please, check these articles that can be useful:

* **[Submitting your iOS and iPadOS apps to the App Store](https://developer.apple.com/ios/submit/)**
* **[App Store Connect workflow](https://help.apple.com/app-store-connect/#/dev300c2c5bf)**
* **[Upload your app binary files](https://help.apple.com/app-store-connect/#/devb1c185036)** (*Transporter* app is most often used by our customers)
* **[How to submit App to App Store](https://instabug.com/blog/how-to-submit-app-to-app-store/)**.

When submitting your app for review you might need to answer the following questions:

**Question**

* Is your app designed to use cryptography or does it contain or incorporate cryptography? (Select ***Yes*** even if your app is only utilizing the encryption available in iOS or OS X.)
* Does your app qualify for any of the exemptions provided in Category 5, Part 2 of the U.S. Export Administration Regulations?

**Answer**\
[Appery.io](https://appery.io) **[Database](https://appery.io/database/)** is not encrypted by default. If you encrypt the database data by any means in your app (by either iOS frameworks or any third-party), then you should consider answering ***Yes*** to both questions.

**Question**\
Does this app use the Advertising Identifier (*IDFA*) is a unique ID for each iOS device and is the only way to offer targeted ads. Users can choose to limit ad targeting on their iOS device."

**Answer**\
By default, an [Appery.io ](\[Appery.io]\(https://appery.io\))app does not use an Advertising identifier.

## Known Issues

### Troubleshooting iOS Build

The following is a list of the most common reasons the iOS build might fail. Please review them and try to export again if you come across any issues:

1. **Provisioning profile doesn’t match the Bundle ID** – Make sure you are using the correct (and valid) provisioning profile for the [environment](https://docs.appery.io/docs/appexport-ios#ios-binary-settings) that you use as described in the [troubleshooting guide](https://docs.appery.io/docs/pushnotifications-configuration#ios-settings).
2. **Bundle ID incorrect format** – The Bundle ID provided has an incorrect format.\
   The Bundle ID correct format is: `com.companyName.appName`.\
   This is **NOT** a valid Bundle ID: `XZCSDF.com.companyName.appName`.
3. **Expired certificate** – Make sure your certificate hasn’t expired.
4. **No certificate uploaded** – Make sure you have uploaded a valid [certificate](https://docs.appery.io/docs/appexport-ios#certificate-management).
5. **Certificate is not valid** / **Certificate is not valid or trusted** - Make sure you have the corresponding valid *Apple Root* and *Intermediate Certificates* (*G3*, *G4*, and/or *G5*) from the [Apple certificate authority](https://www.apple.com/certificateauthority/) installed.

> 📘 Useful Links
>
> Please read <http://stackoverflow.com/questions/3436260/bundle-id-suffix-what-is-it> for more information on bundle IDs.

### Troubleshooting iOS Mobile Submissions

Check the app permissions. For instance, if you have **telephony** selected in **UIRequiredDeviceCapabilities** (**Project > App settings > iOS keys**) and are submitting the app for the iPad as well, the *[App Store](https://www.apple.com/app-store/)* will not accept the app as you cannot make calls from an iPad.

> 📘 Will My App Still Work?
>
> When testing your app you will still be able to install and work it, but the *[App Store](https://www.apple.com/app-store/)* will not accept your app as it cannot make calls.