> For the complete documentation index, see [llms.txt](https://doc.sysdevmobile.com/kalipso/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.sysdevmobile.com/kalipso/documentation/deploy/create-ipa/ipa-with-a-mac.md).

# IPA with a Mac

{% hint style="info" %}
Kalipso 6.1 also introduces a new way to build and publish iOS apps **without a Mac** — see [IPA Without a Mac](/kalipso/documentation/deploy/create-ipa/ipa-no-mac.md).
{% endhint %}

## Requirements

* A Macintosh or an online Mac VM (e.g. [MacinCloud](https://www.macincloud.com))
* Apple Developer account (paid)
* Xcode and Transporter installed on the Mac

## Process Overview

1. **Mac** — generate a Distribution Certificate in Xcode
2. **developer.apple.com** — register an App ID
3. **developer.apple.com** — create a Mobile Provisioning Profile
4. **Kalipso** — generate the IPA scripts
5. **Mac** — re-sign the IPA by running `Compile.sh`
6. **Mac** — upload the IPA to App Store Connect with Transporter

## Step 1 — Generate the Distribution Certificate (Mac)

Open Xcode and press **⌘ ;** to open Preferences. On the **Apple Accounts** tab, sign in with your Apple Developer account.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FvKYQxZH6EbJnsiLzNT2i%2FScreenshot%202026-04-24%20at%2014.18.56.png?alt=media&amp;token=208c50ca-2b56-4456-857e-b83459d3ceeb" alt=""><figcaption></figcaption></figure>

Once signed in your team is shown on the right side of the panel.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FBP3HHCcPqixmMPE4hOeS%2Fimage.png?alt=media&amp;token=fd2b0e78-e3c7-4955-84c7-3c599c8d11a0" alt=""><figcaption></figcaption></figure>

Click **Manage Certificates…**, then click the **+** button at the bottom-left and choose **Apple Distribution**.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FPrVZ0RmdY8eownwTZUJk%2Fimage.png?alt=media&amp;token=e71fe60e-dc13-450f-a5a9-777b58aed38c" alt=""><figcaption></figcaption></figure>

The new Apple Distribution certificate appears in the list.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FyxhynT0jUzP503vxjtxJ%2Fimage.png?alt=media&amp;token=a7f6b690-6443-43ba-9b86-e1c2db7e5fb6" alt=""><figcaption></figcaption></figure>

To confirm the certificate is installed correctly, open Terminal and run:

```bash
security find-identity -v -p codesigning
```

You should see `1 valid identities found` followed by the Apple Distribution certificate name and your Team ID.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FZJe3aouooYmEPGiTE4hk%2Fimage.png?alt=media&amp;token=85f20761-0afb-4f0c-9041-1c7d1df26ea5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If no valid identity is listed, return to Xcode → **Apple Accounts** and click **Download Manual Profiles**, then run the command again.
{% endhint %}

## Step 2 — Register the App ID (developer.apple.com)

Go to [developer.apple.com → Certificates, Identifiers & Profiles → Identifiers](https://developer.apple.com/account/resources/identifiers/list) and click the **+** button.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2Fgit-blob-fa30b04c88f0df9e2558134ad8693c7c8f621991%2Fipa_nomac_05.png?alt=media" alt=""><figcaption></figcaption></figure>

Choose **App IDs** and click **Continue**.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2Fgit-blob-d2b463b8b1b78f05a476fd5e15357d5788bd5dad%2Fipa_nomac_06.png?alt=media" alt=""><figcaption></figcaption></figure>

Select **App** on the next screen, then fill in:

* **Description** — a friendly name for the identifier (e.g. `BarcodeScanner`).
* **Bundle ID** — leave **Explicit** selected and use a reverse-domain identifier such as `com.sysdev.BarcodeScanner`.

Click **Continue**, then **Register**.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2Fgit-blob-b26cb4cfe12770f9d854d9e6ba551dce22b1e978%2Fipa_nomac_07.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
The Bundle ID **must match exactly** the Package shown on Kalipso's General tab. A mismatch will cause signing to fail.
{% endhint %}

## Step 3 — Create the Mobile Provisioning Profile (developer.apple.com)

Still on developer.apple.com, go to **Profiles** and click **+** to start a new profile. Under **Distribution** pick **App Store Connect** and click **Continue**.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FgO3EpArDtUdlzEub8vrF%2Fimage.png?alt=media&amp;token=6906580f-2602-4c1f-8fcd-e63c045a23e7" alt=""><figcaption></figcaption></figure>

Select the **App ID** you just registered.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2Fg6Vd461C0VbokZpo8aFk%2Fimage.png?alt=media&amp;token=027dcaf2-de7b-4e29-8643-2bf5f1081ae9" alt=""><figcaption></figcaption></figure>

Pick the **Distribution** certificate generated in Step 1.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FXn8wIrpaLURJ7QxHOnmD%2Fimage.png?alt=media&amp;token=54f2e0fb-b52f-437a-b8ca-14ee642b1585" alt=""><figcaption></figcaption></figure>

Give the profile a name (e.g. `BarcodeScanner AppStore`) and click **Generate**.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FGOpVEpnoYfS0kCjoe51o%2Fimage.png?alt=media&amp;token=3b78a335-e73f-40ad-93de-372b32dfc944" alt=""><figcaption></figcaption></figure>

Download the `.mobileprovision` file to the PC where Kalipso is installed.

## Step 4 — Generate the IPA Scripts in Kalipso

In Kalipso open **Deploy → Create IPA**. Make sure **Use GitHub for IPA signing** is **OFF** — that switch enables the [Mac-less flow](/kalipso/documentation/deploy/create-ipa/ipa-no-mac.md).

On the **General** tab fill in the IPA details (Domain, Company, Package Name, App Title, Version, Deploy Type, Deploy Folder). The **Package** field is auto-built from the first three fields and **must match the Bundle ID** registered in Step 2.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2F5dtYbYXzi6sOk3elHrL6%2Fimage.png?alt=media&amp;token=acfe5f81-9b26-4a53-b9f2-65ce6fb10b9a" alt=""><figcaption></figcaption></figure>

On the **Options** tab pick the target devices (iPhone / iPad), background location, file sharing, loading image and the GoogleService-info.plist file if the project uses Firebase push notifications.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FdT8EKop9DMdJgucmELSY%2Fimage.png?alt=media&amp;token=3d5ae961-87f3-4646-a69e-4de061cff385" alt=""><figcaption></figcaption></figure>

On the **Signing** tab:

* **Certificate Name** — exactly the name shown by `security find-identity` in Step 1, e.g. `Apple Distribution: Sysdev, Lda (8E226PU2P9)`.
* **Mobile Provisioning Profile** — the `.mobileprovision` file downloaded in Step 3.

Fill the **Sideloading** section, the **Store** section, or both, depending on the deploy types ticked on the General tab.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FnFZxfhzteJ0pLvPjqNKv%2Fimage.png?alt=media&amp;token=c62b58c7-ff17-4159-9f65-a80494cad7ab" alt=""><figcaption></figcaption></figure>

On the **Localization** tab toggle **Set Languages** on and tick the languages your app supports — these are advertised on the App Store listing.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2F9mKr2HTb57CwTep6K95v%2Fimage.png?alt=media&amp;token=3ee6f078-2e48-4472-b8ea-24ac2d77df95" alt=""><figcaption></figcaption></figure>

On the **Usage Description** tab provide a short sentence for every system capability the app uses (Camera, Location, Microphone, Motion Sensor, Photo Library, Bluetooth, Speech Recognition). Apple rejects builds that request a permission without a usage description.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FSwkOSt2ndffkBDLyPNKu%2Fimage.png?alt=media&amp;token=5effec06-4686-44bf-ac2d-1ca98af41424" alt=""><figcaption></figcaption></figure>

Click **Generate**. Kalipso writes a folder containing the unsigned IPA payload, the provisioning profile and the `Compile.sh` / `Compile.command` scripts. Copy this folder to your Mac.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FqM1U05iTOd7nJZT3V8qd%2FScreenshot%202026-04-24%20at%2012.28.41.png?alt=media&amp;token=13acda13-e83b-4a9b-800e-171e4f35dba1" alt=""><figcaption></figcaption></figure>

## Step 5 — Re-sign the IPA on the Mac

On the Mac, open **Terminal** in the folder you just copied (right-click the folder in Finder → **New Terminal at Folder**, or `cd` into it manually). A quick `ls -laG` confirms the build artefacts and the two compile scripts are in place:

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2F28KQnm9u8G1Mdfedzur8%2Fimage.png?alt=media&amp;token=56d4823a-de81-456b-9d77-ccab36549b62" alt=""><figcaption></figcaption></figure>

Make `Compile.sh` executable and run it:

```bash
chmod +x Compile.sh
./Compile.sh
```

{% hint style="info" %}
During the process you may be asked for your **Mac user password** — the password you use to log into the Mac, **not** your Apple Developer account password. The script needs Keychain access to use the signing identity.
{% endhint %}

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2Fuh6matCk5F4g7UyLiEHK%2FScreen%20Recording%202026-04-24%20at%2017.10.13.gif?alt=media&amp;token=b5842dc8-348d-4d5f-8a98-ab55cf7d6220" alt=""><figcaption></figcaption></figure>

When the script finishes you have a fully signed `.ipa` file ready to upload to the App Store.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2Fg5aqIfktd2bGbBqigaVr%2FScreenshot%202026-04-24%20at%2015.41.23.png?alt=media&amp;token=64f6cc65-3037-44ae-bc46-e5900b637f96" alt=""><figcaption></figcaption></figure>

## Step 6 — Upload to the App Store with Transporter

Open **Transporter** on the Mac and drag the signed `.ipa` onto the window (or use the **+** button to browse for it). Click **DELIVER** to upload the build to App Store Connect.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FKXBCZP8dAiYZRqFFk8CX%2Fimage.png?alt=media&amp;token=58dcf182-da29-4373-9e2e-2bc75ef26abd" alt=""><figcaption></figcaption></figure>

After a few minutes the build appears in **App Store Connect → TestFlight** with status **Complete**, ready for internal testing or submission for review.

<figure><img src="https://1614058754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ5vDGuBZwhJDeu5Rq7Wt%2Fuploads%2FzpG8MzgGDWh5xkxvNpwv%2Fimage.png?alt=media&amp;token=7c283496-a3df-47d5-a3ec-426f0831015d" alt=""><figcaption></figcaption></figure>
