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

# Set up Xcode

> Modaal builds and runs your iOS app with Apple's Xcode. This guide takes you from zero to a working setup — install Xcode, download the iOS simulators, and let Modaal confirm everything's ready.

<Info>
  **Xcode** is Apple's development environment for building and running iOS apps. Modaal drives it for you behind the scenes — you never have to write Swift in Xcode or wire up a project there. You just need it installed, opened once, and with the iOS simulators downloaded. Modaal does the rest.
</Info>

## Before you start

<CardGroup cols={2}>
  <Card title="A Mac running macOS" icon="apple">
    Xcode only runs on macOS. A reasonably recent Mac (Apple Silicon recommended) makes builds much faster.
  </Card>

  <Card title="~50 GB of free disk space" icon="hard-drive">
    Xcode plus the iOS simulators are large. Check under  **→ System Settings → General → Storage** and free up space first if you're tight.
  </Card>

  <Card title="A stable internet connection" icon="wifi">
    Xcode is a multi-gigabyte download, and the iOS simulators download separately on first launch. Plan for a coffee break.
  </Card>

  <Card title="An Apple Account (optional)" icon="user">
    You only need one to run on a **real iPhone** or to publish to TestFlight / the App Store. The simulator needs nothing.
  </Card>
</CardGroup>

***

## Open the Xcode setup panel in Modaal

Everything is driven from one place inside Modaal. Click your **profile avatar** in the top-right corner to open the **User Menu**, then choose **Set up Xcode**.

<Frame caption="User Menu → Set up Xcode. The colored dot shows your current status — green when Xcode is ready, orange when it still needs attention.">
  <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-0-user-menu.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=3bc8e8059a7b24fb880450193b00af52" alt="Modaal User Menu with the Set up Xcode item highlighted" style={{ width: "300px" }} width="231" height="373" data-path="images/xcode-setup-0-user-menu.png" />
</Frame>

<Tip>
  Keep this panel open while you work through the steps below. After each step you'll come back to it and press **Check** / **Re-check** to let Modaal re-detect your setup.
</Tip>

The panel reports one of three states:

| Status                  | What it means                                                                                       | What to do                                              |
| ----------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
| 🔴 **Not detected**     | Modaal can't find any Xcode installation.                                                           | Install Xcode — [Step 1](#step-1).                      |
| 🟠 **Attention needed** | Xcode is installed, but it isn't finished — usually the iOS simulators haven't been downloaded yet. | Open Xcode and download simulators — [Step 2](#step-2). |
| 🟢 **Installed**        | Xcode is installed, set up, and has iOS simulators. You're ready to build.                          | Nothing — you're done.                                  |

***

<h2 id="step-1">
  Step 1 — Install Xcode
</h2>

If the panel says **Not detected**, Xcode isn't installed yet.

<Frame caption="“Not detected” — Xcode isn't installed. Download it from one of the two links shown.">
  <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-1-not-detected.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=754fcfbd85c28169150a32bf377c3969" alt="Set up Xcode panel showing Not detected" style={{ width: "600px" }} width="747" height="591" data-path="images/xcode-setup-1-not-detected.png" />
</Frame>

Install Xcode from either source:

<CardGroup cols={2}>
  <Card title="Mac App Store" icon="apple" href="https://apps.apple.com/app/xcode/id497799835">
    The easiest option. Search for **Xcode**, click **Get**, and it installs and updates automatically.
  </Card>

  <Card title="Apple Developer Program" icon="download" href="https://developer.apple.com/download/all/?q=xcode">
    Download a specific Xcode version directly. Useful if you need an exact release. Sign in with a free Apple Account.
  </Card>
</CardGroup>

<Warning>
  Xcode is a large download (15+ GB) and can take a while to install — let it finish completely before moving on.
</Warning>

For the latest features — **iOS 26**, the **Liquid Glass** design system, and the newest simulators — install **Xcode 26 or newer**.

***

<h2 id="step-2">
  Step 2 — Open Xcode once and download the simulators
</h2>

This is the step that trips most people up. **Installing Xcode is not enough** — you have to launch it once so it can finish its own setup and download the iOS simulators. Until you do, Modaal shows **Attention needed**:

<Frame caption="“Attention needed” — Xcode is installed (note the path and version), but Runtimes show “None” and there are no iOS Simulators yet.">
  <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-2-attention-needed.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=35ec1b29aca80dc2e96cdc71c2878d8c" alt="Set up Xcode panel showing Attention needed with no simulators" style={{ width: "600px" }} width="743" height="585" data-path="images/xcode-setup-2-attention-needed.png" />
</Frame>

<Steps>
  <Step title="Launch Xcode and accept the license">
    Open **Xcode** from your Applications folder. The first time it runs, it asks you to agree to the **Xcode and Apple SDKs Agreement**. Read it, then click **Agree** (you'll be asked for your Mac password).

    <Frame caption="First launch asks you to accept the license agreement.">
      <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-3-license.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=3848c9290ff6ba6132cfb72f0e5f6d6c" alt="Xcode and Apple SDKs Agreement dialog" style={{ width: "500px" }} width="511" height="445" data-path="images/xcode-setup-3-license.png" />
    </Frame>
  </Step>

  <Step title="Choose the iOS platform and download it">
    Xcode then offers to install platform components. Make sure **iOS** is checked and click **Download & Install**. You can leave watchOS, tvOS, and visionOS unchecked — Modaal only needs **iOS** to build and run iPhone apps.

    <Frame caption="Tick iOS, then Download & Install. iOS is the only platform Modaal needs.">
      <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-4-components.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=0e7d90dd4183f1c1ea30abb69c8c075a" alt="Xcode component selection with iOS checked" style={{ width: "440px" }} width="507" height="661" data-path="images/xcode-setup-4-components.png" />
    </Frame>

    <Note>
      If Xcode doesn't show this screen on launch, you can trigger it any time from **Xcode → Settings… → Components**, then download an **iOS** simulator runtime.
    </Note>
  </Step>

  <Step title="Wait for the simulator runtime to download">
    The iOS simulator runtime is several gigabytes and downloads in the background. You can watch progress in Xcode's **Downloads** window.

    <Frame caption="The iOS simulator runtime downloading. Let it finish completely.">
      <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-5-download-progress.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=329b32da622407f456f252071f218d11" alt="iOS simulator download in progress" style={{ width: "440px" }} width="468" height="566" data-path="images/xcode-setup-5-download-progress.png" />
    </Frame>
  </Step>

  <Step title="Confirm it finished">
    When the download completes, the runtime shows a checkmark and Xcode opens its welcome window. Xcode is now fully set up.

    <Frame caption="Download complete — the iOS simulator runtime is installed.">
      <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-6-download-done.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=7cdec89829bb68425b3d945775e94c39" alt="iOS simulator download complete, Xcode welcome window" style={{ width: "600px" }} width="749" height="470" data-path="images/xcode-setup-6-download-done.png" />
    </Frame>

    You can quit Xcode now — Modaal launches it on its own when it needs to build.
  </Step>
</Steps>

***

<h2 id="step-3">
  Step 3 — Re-check in Modaal
</h2>

Go back to Modaal's **Set up Xcode** panel and click **Re-check**. Modaal probes your installation and, when everything's in place, switches to **Installed** (green) and lists the iOS simulators it found.

<Frame caption="“Installed” — Xcode is set up with iOS simulators. You're ready to build and run.">
  <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-8-complete.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=379acd55e1dfb7b67f639794e315613e" alt="Set up Xcode panel showing Installed and ready" style={{ width: "600px" }} width="728" height="557" data-path="images/xcode-setup-8-complete.png" />
</Frame>

That's it — you can now ask Modaal to build and run your app, and it'll launch it on the iOS simulator for you.

<Tip>
  You can also re-validate from the User Menu via **Run system check**, which re-checks Xcode along with Modaal's other prerequisites.
</Tip>

***

<h2 id="multiple-xcode">
  Have more than one Xcode installed?
</h2>

If you keep several Xcode versions (for example a stable release and a beta), Modaal lists each one and marks which is **active** — the one macOS will use for builds. To switch, click **Set as active** on the version you want.

<Frame caption="With multiple Xcodes installed, click “Set as active” on the one you want Modaal to build with.">
  <img src="https://mintcdn.com/modaal/XlqSOtN6T6Qmy64H/images/xcode-setup-7-set-as-active.png?fit=max&auto=format&n=XlqSOtN6T6Qmy64H&q=85&s=642421d33317feb41675474e711aadae" alt="An Xcode installation card with a Set as active button" style={{ width: "560px" }} width="674" height="269" data-path="images/xcode-setup-7-set-as-active.png" />
</Frame>

macOS asks for your administrator password to make the switch (it runs Apple's `xcode-select` under the hood). If the button ever fails, the panel shows the exact command you can run yourself in **Terminal**:

```bash theme={null}
sudo xcode-select -s /path/to/Xcode.app/Contents/Developer
```

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="Modaal still says “Attention needed” after installing Xcode">
    You almost certainly skipped [Step 2](#step-2). Installing Xcode is not enough — open it once, accept the license, and download an **iOS** simulator runtime from **Xcode → Settings… → Components**. Then click **Re-check** in Modaal.
  </Accordion>

  <Accordion title="“Runtimes: None” / no iOS Simulators listed">
    The simulator runtime hasn't been downloaded. In Xcode, go to **Settings… → Components**, download an **iOS** runtime, wait for it to finish, then **Re-check** in Modaal.
  </Accordion>

  <Accordion title="The build succeeded but no simulator window appeared">
    On recent Xcode versions the simulator viewer can't launch when **Xcode is installed on an external or ownership-disabled volume**. Move Xcode to your internal **/Applications** folder, or re-enable ownership on the volume with `sudo diskutil enableOwnership <volume>`. The build itself still ran — this only affects showing the window.
  </Accordion>

  <Accordion title="“Set as active” keeps failing">
    Make sure you entered the correct **administrator** password. As a fallback, copy the `sudo xcode-select -s …` command the panel shows and run it directly in **Terminal**.
  </Accordion>

  <Accordion title="I'm running low on disk space">
    Xcode plus simulators can easily use 30–50 GB. Remove old simulator runtimes you don't need from **Xcode → Settings… → Components**, and check **→ System Settings → General → Storage** for other large items.
  </Accordion>
</AccordionGroup>

<Note>
  **Still stuck?** Join our [community on Discord](https://discord.gg/KyQzDXxgU3) — we're happy to help you get set up.
</Note>
