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

# Get & Share Your App

When your app is ready to leave the chat panel, the **Deploy & Share** button at the top right of your project opens a dropdown with four options. There's also a fifth path — **Expo Go** — that lives in the preview panel itself, not in the dropdown. Each option targets a different audience and surface.

| Option                                            | Who it's for                                           | What you need                                            |
| ------------------------------------------------- | ------------------------------------------------------ | -------------------------------------------------------- |
| [Share link](#share-link)                         | Friends, testers, stakeholders previewing in a browser | Nothing — link only                                      |
| [Open Full-Size Preview](#open-full-size-preview) | You, when you want the preview out of the side panel   | Nothing                                                  |
| [Expo Go on your phone](#expo-go-on-your-phone)   | You or anyone, previewing on a real phone in seconds   | Phone with Expo Go installed                             |
| [Build on iPhone](#build-on-iphone)               | You, installing the real native app on your own iPhone | Mac with Xcode + iPhone with USB                         |
| [Publish](#publish)                               | Real public release                                    | Apple Developer account or Google Play developer account |

## Share link

Generates a short public link anyone can open in a browser to preview your app. Recipients can also open the same link on their phone and scan a QR code to launch it in **Expo Go** for a near-native experience.

<Steps>
  <Step title="Click Deploy & Share → Share link">
    A dialog opens with the link.
  </Step>

  <Step title="If your project is private, make it public">
    Share links require the project to be public. The dialog will prompt you with **Make public** — clicking it flips the visibility instantly.
  </Step>

  <Step title="Copy the link">
    Click **Copy** next to the URL and share it however you like.
  </Step>
</Steps>

The dialog also shows a **Link clicks** counter so you can see how many people have opened it.

To stop sharing, reopen the dialog and click **Stop sharing**. Your own preview keeps working — only the public link is revoked.

<Note>
  When a recipient opens the share link on their phone, they'll see a QR code that opens the app in **Expo Go** (a free app from the iOS App Store / Google Play Store). The browser preview works without Expo Go; the QR is just for a more app-like feel on phones.
</Note>

## Open Full-Size Preview

Opens the same preview that lives in your side panel as a full browser tab. Useful if You're also looking to launch Your App as a website as well.

This option only appears once a preview is available — if it's missing from the dropdown, your build hasn't produced a preview yet.

## Expo Go on your phone

Expo Go is a free app from the iOS App Store and Google Play Store that runs your Bilt app on your real phone over a tunnel — no Mac, no Xcode, no install command. The app loads in seconds and updates live as you change it in chat. It's the fastest way to feel your app on a real device.

<Note>
  Expo Go is **not** in the Deploy & Share dropdown. The QR code lives in the preview panel — the same panel that shows your in-browser preview.
</Note>

### First time: install Expo Go on your phone

<Tabs>
  <Tab title="iPhone">
    1. Open this link on your iPhone: [Expo Go on the App Store](https://apps.apple.com/app/expo-go/id982107779).
    2. Tap **Get** to install.
    3. You don't need to sign in — just having it installed is enough.
  </Tab>

  <Tab title="Android">
    1. Open this link on your Android phone: [Expo Go on Google Play](https://play.google.com/store/apps/details?id=host.exp.exponent).
    2. Tap **Install**.
    3. Open Expo Go once so it's ready to receive scans.
  </Tab>
</Tabs>

### Open your app in Expo Go

<Steps>
  <Step title="Find the QR code in the preview panel">
    Look at the right panel of your project — below the preview, there's a section labeled **Scan to preview on mobile** with a QR code.
  </Step>

  <Step title="Scan the QR code">
    On **iPhone**, open the built-in **Camera** app and point it at the QR code. A notification banner appears — tap it to open in Expo Go.

    On **Android**, open **Expo Go** itself and tap **Scan QR code**.
  </Step>

  <Step title="Wait for the bundle to load">
    The first load takes 10–30 seconds while Expo Go fetches the JavaScript bundle. Subsequent loads are nearly instant because most of the bundle is cached.
  </Step>
</Steps>

### Sharing Expo Go with someone else

The QR code in the preview panel is yours alone. To let someone else preview on **their** phone, use [Share link](#share-link) instead — the share link page shows a QR code that anyone can scan to open in Expo Go.

### Expo Go vs. Build on iPhone — which is right?

<CardGroup cols={2}>
  <Card title="Expo Go" icon="bolt">
    Seconds to load. Works on iPhone or Android. Updates live. Best for iteration and showing it off. Limited: some native APIs (push notifications, custom native modules) don't work inside Expo Go.
  </Card>

  <Card title="Build on iPhone" icon="hammer">
    Minutes to build. iPhone only, requires a Mac with Xcode. Real native binary, full APIs, your own app icon on the home screen. Best for pre-launch testing.
  </Card>
</CardGroup>

### Expo Go troubleshooting

<AccordionGroup>
  <Accordion title="Camera scans the QR but nothing happens">
    On iPhone, make sure the iOS Camera app's "Scan QR Codes" feature is enabled (Settings → Camera → Scan QR Codes). On Android, scanning with the camera app won't work — you have to scan from inside Expo Go.
  </Accordion>

  <Accordion title="Expo Go opens but shows a red error screen">
    Usually a JavaScript error in the latest build. Open your project in Bilt, look for build errors in the chat, and let the agent fix them. Once the next build succeeds, pull-to-refresh in Expo Go. These errors can also be caused by a cross-compatibility issue, ask the Bilt agent for further clarification if needed.
  </Accordion>

  <Accordion title="App loads but a feature doesn't work">
    Some features can't run inside Expo Go — push notifications, in-app purchases, deep links and custom native modules. To test these, use [Build on iPhone](#build-on-iphone) or [Publish](#publish).
  </Accordion>

  <Accordion title="Bundle keeps reloading or 'unable to connect'">
    The tunnel between your phone and Bilt's preview server has dropped. Force-quit Expo Go, reopen the app from the QR code, and let it reconnect. If your phone and the preview are on different networks, that's fine — Expo Go uses a public tunnel, not local Wi-Fi.
  </Accordion>
</AccordionGroup>

## Build on iPhone

Builds your app **natively** and installs it directly on a connected iPhone via Xcode. This is closer to a real shipped app than Expo Go — full performance, full APIs, your own app icon — without going through the App Store.

<Warning>
  Requires **macOS with Xcode** installed and an iPhone connected via USB. This won't work from a Windows or Linux machine.
</Warning>

<Steps>
  <Step title="Click Deploy & Share → Build on iPhone">
    A dialog appears with a one-line install command. The command contains a temporary code that **expires in 5 minutes**.
  </Step>

  <Step title="Open Terminal on your Mac">
    Spotlight → "Terminal" or open it from Applications.
  </Step>

  <Step title="Paste the command and press Enter">
    The command looks like:

    ```bash theme={null}
    curl -fsSL https://app.bilt.me/install.sh | sh -s -- build <code>
    ```

    On first run, this installs the **Bilt CLI** to `/usr/local/bin/bilt`. On subsequent runs, it reuses the existing binary. The CLI then builds your project and pushes it to your connected iPhone.
  </Step>

  <Step title="Trust the developer profile on your iPhone">
    The first time you install a Bilt-built app on a given phone, iOS asks you to trust the developer. Open **Settings → General → VPN & Device Management** on the phone and tap **Trust**.
  </Step>
</Steps>

Each build uses a fresh 5-minute code. If you wait too long before pasting, regenerate by reopening the dialog.

### Build on iPhone — troubleshooting

<AccordionGroup>
  <Accordion title="Code expired before I could paste it">
    Codes are good for 5 minutes. Reopen **Deploy & Share → Build on iPhone** to generate a new one.
  </Accordion>

  <Accordion title="'xcrun: error: unable to find utility' or similar">
    Xcode isn't installed, or the command-line tools are missing. Install Xcode from the Mac App Store, open it once to accept the license, then run `xcode-select --install`.
  </Accordion>

  <Accordion title="iPhone not detected">
    Connect via USB, unlock the phone, and tap **Trust This Computer** when prompted. If you've connected before, open Finder → your iPhone in the sidebar to confirm Mac and phone see each other.
  </Accordion>

  <Accordion title="Install fails with provisioning errors">
    Sign in to Xcode with your Apple ID under **Xcode → Settings → Accounts**. The Bilt CLI uses your local Apple ID to sign the build for personal install — no Apple Developer subscription needed for this path.
  </Accordion>

  <Accordion title="I'm on Windows / Linux">
    The Build on iPhone path requires macOS with Xcode. Use **Share link** + Expo Go instead, or [Publish](#publish) when you're ready to ship.
  </Accordion>
</AccordionGroup>

## Publish

Opens Bilt's publish settings for App Store and Google Play builds. Bilt handles the cloud build, signing, and store package generation.

Click **Deploy & Share → Publish** to open **Settings → Publish**.

For iOS, see the [Publish to App Store guide](/docs/guides/publish-to-app-store) for enrollment, signing, TestFlight, and App Store review.

For Android, see the [Publish to Google Play guide](/docs/guides/publish-to-google-play) for Play Console setup, service accounts, signing, and release tracks.

## Which option should I use?

<CardGroup cols={2}>
  <Card title="Just want to show someone" icon="link">
    **Share link.** Fastest path. They open it in a browser or scan the QR for Expo Go on their phone.
  </Card>

  <Card title="Testing on my own phone" icon="mobile">
    **Expo Go** for fast iteration on iPhone or Android. **Build on iPhone** if you need real native APIs and have a Mac with Xcode.
  </Card>

  <Card title="Demoing to a room or screen-sharing" icon="display">
    **Open Full-Size Preview** for maximum pixels and a website viewport of Your app
  </Card>

  <Card title="Ready for real users" icon="rocket">
    **Publish.** Use the App Store guide for iOS and the Google Play guide for Android.
  </Card>
</CardGroup>

## Where's the Deploy & Share button on mobile?

On a phone, the button is at the top right of the project chat. The label collapses to just **Share** with a rocket icon to save space — same dropdown, same four options.

## Still can't get your app onto a device?

If none of the four options work, the underlying build may have failed. Check the chat for error messages, or see [AI Chat](/docs/features/ai-chat) for guidance on recovering from stuck builds.
