---
description: Build and sign a Cordova iOS app in the cloud without a Mac. Use Capawesome Cloud Native Builds to produce a signed .ipa from Windows or Linux in minutes.
title: How to Build a Cordova iOS App Without a Mac - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/build-cordova-ios-app-without-a-mac.png
---

<!doctype html> 

[Skip to content ](#how-to-build-a-cordova-ios-app-without-a-mac) 

[🖥️ Introducing the **Capacitor Electron Platform** — build desktop apps for macOS, Windows, and Linux. Free & open source. ](/blog/announcing-the-capacitor-electron-platform/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ What about config.xml and the build environment? ](#what-about-configxml-and-the-build-environment)
* [ Get Started ](#get-started)
* [ FAQ ](#faq)
* [ Related Posts ](#related-posts)
* [ Conclusion ](#conclusion)

# How to Build a Cordova iOS App Without a Mac[¶](#how-to-build-a-cordova-ios-app-without-a-mac "Permanent link")

You can build a Cordova iOS app without owning a Mac by running the build on a hosted macOS machine in the cloud. The catch every Cordova developer on Windows or Linux runs into is that `cordova build ios` needs Xcode, and Xcode only runs on macOS. The good news is that the Mac can live in a data center instead of on your desk.

This is a hands-on walkthrough. By the end you'll have connected a Cordova project to a cloud build service, uploaded your signing certificate, and pulled down a signed `.ipa`, all without a Mac in the room.

[ ![Build and deploy your Cordova app with Capawesome Cloud](../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://capawesome.io/) 

## Key Takeaways[¶](#key-takeaways "Permanent link")

* Building a Cordova iOS app requires macOS, because Apple's toolchain (Xcode, `xcodebuild`, `codesign`) is macOS-only.
* You don't have to own a Mac. [Capawesome Cloud](https://capawesome.io) builds Cordova apps on hosted Apple Silicon (M4) macOS instances and works from Windows, Linux, or macOS.
* To produce a signed build, you upload an iOS distribution certificate (a `.p12` with its private key) and a matching provisioning profile once.
* A single command, `apps:builds:create --platform ios`, returns a signed `.ipa`. iOS build types cover simulator, development, ad-hoc, app-store, and enterprise.
* There's no build YAML to write. Cordova projects are detected automatically, and signing credentials are injected at build time.

## Why does building a Cordova iOS app need a Mac?[¶](#why-does-building-a-cordova-ios-app-need-a-mac "Permanent link")

Apple's iOS build toolchain runs only on macOS. Xcode, `xcodebuild`, and `codesign` have no Linux or Windows equivalent, and there's no supported way to produce a real `.ipa` outside an Apple-controlled environment. When you run `cordova build ios`, Cordova generates an Xcode project and then hands off to that toolchain, so the final packaging and signing step always happens on a Mac.

That leaves three ways to get one: buy a Mac, rent a remote Mac by the hour, or use a mobile CI/CD service that gives you a managed macOS build on demand. Each trades cost against how much of the macOS box you have to manage yourself. We compared all three in [How to Build and Deploy iOS Apps Without Owning a Mac](/blog/how-to-build-and-deploy-ios-apps-without-a-mac/), so this post skips the comparison and goes straight to the managed-build approach for a Cordova project.

## What you need before you start[¶](#what-you-need-before-you-start "Permanent link")

Before triggering a cloud build, get three things in order. You'll need a Cordova app in a Git repository, an [Apple Developer Program](https://developer.apple.com/programs/) membership, and the signing assets that Apple requires for any installable iOS build.

For a signed build, that means an iOS distribution certificate exported as a `.p12` file that includes its private key, the password you set when exporting it, and a provisioning profile whose bundle identifier matches your app. If wrangling certificates in Keychain Access isn't appealing, the [iOS Certificate Generator](https://capawesome.io/tools/ios-certificate-generator/) creates a valid `.p12` for you. A simulator build skips signing entirely, which is useful for a first smoke test.

## Build a Cordova iOS app without a Mac, step by step[¶](#build-a-cordova-ios-app-without-a-mac-step-by-step "Permanent link")

The whole flow is four commands and one credential upload. Here's each step.

### Step 1: Create the app in Capawesome Cloud[¶](#step-1-create-the-app-in-capawesome-cloud "Permanent link")

Start by creating an app and telling the Cloud it's a Cordova project. The CLI prompts for the organization and name, then prints the new app ID:

`[](#%5F%5Fcodelineno-0-1)npx @capawesome/cli apps:create --type cordova
`

The `--type cordova` flag is what marks the project as Cordova rather than Capacitor or native. Keep the app ID handy for the commands below.

### Step 2: Connect your Git repository[¶](#step-2-connect-your-git-repository "Permanent link")

Cloud builds run from a Git reference, so the next step is linking your repository. Run the link command from inside your project and it detects the provider, owner, and repository name from your `origin` remote:

`[](#%5F%5Fcodelineno-1-1)npx @capawesome/cli apps:link --app-id <APP_ID>
`

Capawesome Cloud connects to GitHub, GitHub Enterprise, GitLab, GitLab Self-Managed, Bitbucket, and Azure DevOps. You can also link the repository from the [Console](https://console.cloud.capawesome.io) if you'd rather authorize the provider through a web flow.

### Step 3: Upload your iOS signing certificate[¶](#step-3-upload-your-ios-signing-certificate "Permanent link")

A signed iOS build needs your distribution certificate and provisioning profile available to the build machine. Upload them once on the [Signing Certificates](https://console.cloud.capawesome.io/apps/%5F/certificates) page: provide the `.p12` file, its password, and the matching `.mobileprovision` profile. They're stored encrypted and injected into the build automatically from then on.

The [iOS certificates documentation](/docs/cloud/native-builds/certificates/ios/) covers the details, including apps with extensions that need a separate profile per target.

### Step 4: Trigger a signed build[¶](#step-4-trigger-a-signed-build "Permanent link")

With the repository linked and the certificate uploaded, one command builds and signs the app. This produces an App Store build from the `main` branch and downloads the `.ipa` when it finishes:

`[](#%5F%5Fcodelineno-2-1)npx @capawesome/cli apps:builds:create \
[](#%5F%5Fcodelineno-2-2)  --platform ios \
[](#%5F%5Fcodelineno-2-3)  --type app-store \
[](#%5F%5Fcodelineno-2-4)  --certificate "My Distribution Certificate" \
[](#%5F%5Fcodelineno-2-5)  --git-ref main \
[](#%5F%5Fcodelineno-2-6)  --ipa
`

Swap `--type` for `development` or `ad-hoc` depending on where the build is headed, and pass the name of the certificate you uploaded in step 3 to `--certificate`. If you want to test a local change without committing first, replace `--git-ref` with `--path .` to upload your working copy instead.

### Step 5: Get the signed .ipa[¶](#step-5-get-the-signed-ipa "Permanent link")

The `--ipa` flag in the previous command downloads the artifact to your machine as soon as the build completes. If you triggered the build without it, you can pull the artifact from a finished build directly:

`[](#%5F%5Fcodelineno-3-1)npx @capawesome/cli apps:builds:download --ipa ./app.ipa
`

From the Console, the build's detail page has a **Download** button for the `.ipa` and an **Install** option that shows a QR code for side-loading onto a registered device.

## What about config.xml and the build environment?[¶](#what-about-configxml-and-the-build-environment "Permanent link")

There's no build configuration file to write. Capawesome Cloud detects a standard Cordova project from its `config.xml` and `platforms` layout, installs dependencies, and runs the build. Native Builds works with Capacitor, Cordova, and plain native projects without per-framework setup.

Two things are worth knowing. If your Cordova app lives in a subdirectory of a monorepo, add a `capawesome.config.json` at the repository root with a `baseDir` pointing at it, and optionally a `webBuildCommand` for your web build. And if you need a specific Xcode version, the build runs on a selectable macOS stack (Sequoia or Tahoe), each with a recent Xcode preinstalled, chosen with the `--stack` flag. The full set of options lives in the [Native Builds configuration](/docs/cloud/native-builds/configuration/) docs.

Android works the same way. Run the build with `--platform android` and provide an [Android keystore](https://capawesome.io/tools/android-keystore-generator/) instead of a `.p12`, and you get a signed `.aab` or `.apk` from the same pipeline.

## Get Started[¶](#get-started "Permanent link")

[Building a Cordova iOS app without a Mac](https://capawesome.io/solutions/build-without-mac/) comes down to creating an app, linking your repo, uploading a certificate, and running one build command. The [Native Builds setup guide](/docs/cloud/native-builds/setup/) walks through the full pipeline, and once you have a signed App Store build, [App Store Publishing](/docs/cloud/app-store-publishing/) can push it straight to TestFlight.

For the bigger picture beyond iOS builds, this short video tours Cordova support in Capawesome Cloud — native builds, store publishing, and live updates together.

[Try Capawesome Cloud Free](https://capawesome.io)

## FAQ[¶](#faq "Permanent link")

### Can I test my build before paying for an Apple Developer membership?[¶](#can-i-test-my-build-before-paying-for-an-apple-developer-membership "Permanent link")

Yes, with a simulator build. Running `apps:builds:create --platform ios --type simulator` skips signing entirely, so you can verify your Cordova project builds cleanly on the cloud macOS environment before you've bought a certificate or even joined the Apple Developer Program. Signing only becomes necessary once you need a build that installs on a real device or ships to TestFlight.

### What if my Cordova project isn't at the root of the repository?[¶](#what-if-my-cordova-project-isnt-at-the-root-of-the-repository "Permanent link")

Add a `capawesome.config.json` file at the repository root with a `baseDir` field pointing at the Cordova project's actual location, and optionally a `webBuildCommand` if your web assets need a build step first — see the [Monorepo](/docs/cloud/native-builds/monorepo/) documentation for the full configuration. Without this, Capawesome Cloud expects to find `config.xml` at the repo root.

### Does the cloud build replace needing a Mac entirely, even for debugging?[¶](#does-the-cloud-build-replace-needing-a-mac-entirely-even-for-debugging "Permanent link")

Not for interactive debugging. A cloud build hands off the compile-and-sign step, but running the app in the iOS Simulator with breakpoints and live inspection still needs a local macOS environment. For that specific case, a borrowed or rented Mac still has a role — the cloud build is for producing installable, signed artifacts, not for step-through debugging.

### Can the same setup build my Android version too?[¶](#can-the-same-setup-build-my-android-version-too "Permanent link")

Yes. Swap `--platform ios` for `--platform android` and provide an Android keystore instead of a `.p12` certificate — the same app, repository link, and CLI command produce a signed `.aab` or `.apk` through the identical pipeline.

### What Xcode version does the cloud build use?[¶](#what-xcode-version-does-the-cloud-build-use "Permanent link")

Whichever comes with the macOS stack you select via `--stack` — currently Sequoia or Tahoe, each preinstalled with a recent Xcode version. If you don't specify a stack, the build uses the default one.

## Related Posts[¶](#related-posts "Permanent link")

* [Announcing Cordova Support in Capawesome Cloud](/blog/announcing-cordova-support-in-capawesome-cloud/)
* [The Best CI/CD Platforms for Cordova Apps in 2026](/blog/comparing-ci-cd-platforms-for-cordova-apps/)
* [Cordova Hot Code Push Alternative for OTA Updates](/blog/cordova-hot-code-push-alternative/)
* [Cordova Live Updates: A Complete Guide to OTA Updates](/blog/cordova-live-updates-guide/)

## Conclusion[¶](#conclusion "Permanent link")

A Cordova iOS build needs macOS, but it no longer needs _your_ macOS. Hand the Xcode and signing work to a hosted Mac, keep writing your app on Windows or Linux, and let a single CLI command return the signed `.ipa`. The one thing a cloud build can't do is replace a local simulator for interactive debugging, so a borrowed or rented Mac still helps there.

If you're weighing the wider picture of where Cordova CI/CD is heading now that App Center is gone and Appflow is winding down, read [The Modern CI/CD Solution for Cordova Apps in 2026](/blog/ci-cd-for-cordova-apps/).

Stuck on a certificate or a build error? Ask in the [Capawesome Discord server](https://discord.gg/VCXxSVjefW), and subscribe to the [Capawesome newsletter](https://capawesome.io/newsletter/) to follow what's next for Cordova on Capawesome Cloud.

July 17, 2026 

Back to top

```json
{
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "How to Build a Cordova iOS App Without a Mac",
      "description": "Build and sign a Cordova iOS app in the cloud without a Mac. Use Capawesome Cloud Native Builds to produce a signed .ipa from Windows or Linux in minutes.",
      "image": "https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png",
      "datePublished": "2026-06-11T00:00:00+00:00",
      "dateModified": "2026-07-17T00:00:00+00:00",
      "author": [
        {
          "@type": "Person",
          "name": "Robin Genz",
          "url": "https://github.com/robingenz"
        }
      ],
      "publisher": {
        "@type": "Organization",
        "name": "Capawesome",
        "url": "https://capawesome.io",
        "logo": {
          "@type": "ImageObject",
          "url": "https://capawesome.io/assets/images/logo.svg"
        }
      },
      "articleSection": "Cloud",
      "keywords": ["Cloud", "Cordova", "Guides"],
      "isPartOf": {
        "@type": "Blog",
        "@id": "https://capawesome.io/blog/#blog"
      },
      "mainEntityOfPage": "https://capawesome.io/blog/build-cordova-ios-app-without-a-mac/",
      "url": "https://capawesome.io/blog/build-cordova-ios-app-without-a-mac/"
    }
{
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://capawesome.io/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Blog",
          "item": "https://capawesome.io/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "How to Build a Cordova iOS App Without a Mac",
          "item": "https://capawesome.io/blog/build-cordova-ios-app-without-a-mac/"
        }
      ]
    }
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Why does building a Cordova iOS app need a Mac?", "acceptedAnswer": {"@type": "Answer", "text": "Apple's iOS build toolchain runs only on macOS. Xcode, xcodebuild, and codesign have no Linux or Windows equivalent, and there's no supported way to produce a real.ipa outside an Apple-controlled environment. When you run cordova build ios, Cordova generates an Xcode project and then hands off to that toolchain, so the final packaging and signing step always happens on a Mac. That leaves three ways to get one: buy a Mac, rent a remote Mac by the hour, or use a mobile CI/CD service that gives you a managed macOS build on demand. Each trades cost against how much of the macOS box you have to manage yourself. We compared all three in How to Build and Deploy iOS Apps Without Owning a Mac, so this post skips the comparison and goes straight to the managed-build approach for a Cordova project."}}, {"@type": "Question", "name": "What about config.xml and the build environment?", "acceptedAnswer": {"@type": "Answer", "text": "There's no build configuration file to write. Capawesome Cloud detects a standard Cordova project from its config.xml and platforms layout, installs dependencies, and runs the build. Native Builds works with Capacitor, Cordova, and plain native projects without per-framework setup. Two things are worth knowing. If your Cordova app lives in a subdirectory of a monorepo, add a capawesome.config.json at the repository root with a baseDir pointing at it, and optionally a webBuildCommand for your web build. And if you need a specific Xcode version, the build runs on a selectable macOS stack (Sequoia or Tahoe), each with a recent Xcode preinstalled, chosen with the --stack flag. The full set of options lives in the Native Builds configuration docs. Android works the same way. Run the build with --platform android and provide an Android keystore instead of a.p12, and you get a signed.aab or.apk from the same pipeline."}}, {"@type": "Question", "name": "Can I test my build before paying for an Apple Developer membership?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, with a simulator build. Running apps:builds:create --platform ios --type simulator skips signing entirely, so you can verify your Cordova project builds cleanly on the cloud macOS environment before you've bought a certificate or even joined the Apple Developer Program. Signing only becomes necessary once you need a build that installs on a real device or ships to TestFlight."}}, {"@type": "Question", "name": "What if my Cordova project isn't at the root of the repository?", "acceptedAnswer": {"@type": "Answer", "text": "Add a capawesome.config.json file at the repository root with a baseDir field pointing at the Cordova project's actual location, and optionally a webBuildCommand if your web assets need a build step first — see the Monorepo documentation for the full configuration. Without this, Capawesome Cloud expects to find config.xml at the repo root."}}, {"@type": "Question", "name": "Does the cloud build replace needing a Mac entirely, even for debugging?", "acceptedAnswer": {"@type": "Answer", "text": "Not for interactive debugging. A cloud build hands off the compile-and-sign step, but running the app in the iOS Simulator with breakpoints and live inspection still needs a local macOS environment. For that specific case, a borrowed or rented Mac still has a role — the cloud build is for producing installable, signed artifacts, not for step-through debugging."}}, {"@type": "Question", "name": "Can the same setup build my Android version too?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. Swap --platform ios for --platform android and provide an Android keystore instead of a.p12 certificate — the same app, repository link, and CLI command produce a signed.aab or.apk through the identical pipeline."}}, {"@type": "Question", "name": "What Xcode version does the cloud build use?", "acceptedAnswer": {"@type": "Answer", "text": "Whichever comes with the macOS stack you select via --stack — currently Sequoia or Tahoe, each preinstalled with a recent Xcode version. If you don't specify a stack, the build uses the default one."}}], "url": "https://capawesome.io/blog/build-cordova-ios-app-without-a-mac/"}
```
