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

# Devices

> Cloud simulators and emulators, physical iPhones and Android phones assigned to your workspace, and how each run picks one.

> [!NOTE]
>
> **Beta.** Physical phones are in beta and enabled per workspace: ask for them from the device picker, as shown in [Get physical phones](#get-physical-phones).

Every run of a mobile app happens on a device: a cloud simulator or emulator, or a physical phone assigned to your workspace. This page shows what each one runs, how a run picks its device, and when you need a physical phone. Testing a web app? Browsers are covered in [Web apps](https://www.minitap.ai/docs/minitest/setup/web-apps.md).

| | Cloud device | Physical phone |
| - | - | - |
| **iOS** | iOS simulator. Runs simulator builds, including the ones Mini builds from your repository. | iPhone assigned to your workspace. Installs from a TestFlight link or an Ad Hoc or Development `.ipa`. |
| **Android** | Android emulator. Runs `.aab`, `.apk` and `.apks` builds with `x86_64` or `arm64` code, uploaded or built from your repository. | Android phone assigned to your workspace. Runs `.aab` builds and `arm64` APKs, uploaded or built from your repository. |
| **Availability** | Always available, several at once. | One scenario at a time per phone. A run waits for a busy phone to free up. |

Which file fits which device is detailed in [Upload a build](https://www.minitap.ai/docs/minitest/setup/upload-a-build.md#which-file-for-which-device).

## How a run picks its device

In **Run tests**, pick the tests and a build per platform, then click **Choose devices**. Each platform lists its devices in two groups:

* **Simulators** on iOS (iPhone and iPad) and **Emulators** on Android (Android phone and Android tablet), each with the OS versions you can pick. A cloud device is selected by default.
* **Real devices**: the phones assigned to your workspace, each with its OS version and how many are free right now. **Request another model** asks the Minitap team for a model you don't have yet.

Pick one or more devices per platform. **This run** lists each target with its build and the number of scenarios it runs. Click **Run on** to start, or **Schedule this…** to turn the same choice into a [schedule](https://www.minitap.ai/docs/minitest/runs/schedules.md).

![Choose devices step with iPhone and iPad simulators, four physical iPhone models, Android phone and tablet emulators, one physical Android phone, and the This run summary with Run on 2 targets](https://mintcdn.com/minitap-30239763/QCLbAMcddko_3eZy/minitest/images/app/choose-devices.png?fit=max\&auto=format\&n=QCLbAMcddko_3eZy\&q=85\&s=03348287717dadb1ddfd156afeec21a3)

Choose devices: cloud simulators and emulators, or the real phones assigned to your workspace.

A physical iPhone needs a device build. When the version you picked only has a simulator build, **This run** says so in red and the run can't start until you pick another build:

![This run summary showing iPhone 13 in red with the message iOS has no device build in this version](https://mintcdn.com/minitap-30239763/QCLbAMcddko_3eZy/minitest/images/app/choose-devices-device-build.png?fit=max\&auto=format\&n=QCLbAMcddko_3eZy\&q=85\&s=d24ff2aa32982cb9a89e09c770229447)

A physical iPhone picked with a simulator-only build.

If none of your phones is free, the run starts as soon as enough of them free up.

From the CLI, add `--ios-physical` or `--android-physical` to a run with its build:

```bash theme={"theme":{"light":"github-light","dark":"vesper"}}
minitest --app <app_id> run all --ios-build <build_id> --ios-physical
minitest --app <app_id> run all --android-build <build_id> --android-physical
```

A [schedule](https://www.minitap.ai/docs/minitest/runs/schedules.md) picks its devices the same way, in its **Devices** step. A scheduled run waits up to 4 hours for a busy phone.

## Phones assigned to your workspace

Physical phones are real iPhones and Android phones from Minitap's device farm, assigned to your workspace. Other workspaces don't run on them. Each phone runs one scenario at a time, so the number of phones sets how many scenarios run in parallel on physical devices.

The run report names the phone a run used, like `iPhone 13 mini · iOS 27.0`, under the recording.

### Get physical phones

**1. Ask for access**

In **Run tests**, open **Run on** and click **Physical device** (marked **Request access** while your workspace has none). The **Request physical devices** dialog asks for a model and an OS version (both optional), how many, and why you need them, for example Face ID flows, NFC or a specific carrier.

**2. The Minitap team reviews it**

Nothing is provisioned until the request is approved. Pending requests show in the picker under **Requested, pending with the farm team**.

**3. Ask for more later**

Once your workspace has phones, **Request another model…** in the same picker asks for another model or more units.

## When you need a physical phone

* **TestFlight builds.** They only run on physical iPhones. See [TestFlight and Ad Hoc](https://www.minitap.ai/docs/minitest/setup/upload-a-build.md#physical-iphones-testflight-and-ad-hoc).
* **Device builds.** A device `.ipa`, signed for real iPhones, can't install on the iOS simulator. An Android build with only 32-bit ARM code can't run on emulators.
* **In-app purchases on Android.** Cloud emulators run without Google Play, so they can't show its purchase sheet: scenarios that buy run on your physical Android phones. Cloud iOS simulators buy with no setup. On physical iPhones, Mini buys with a Sandbox Apple Account, one per iPhone.
* **Real hardware and real-world conditions**, such as the flows you'd name in the request: Face ID, NFC, a carrier.

Everything else runs on cloud devices, which are always available and run several scenarios at once.

## Known limits

* **Logs on physical iPhones.** Device logs aren't captured on physical iPhones yet. Physical Android phones and cloud devices keep their logs.
* **iOS builds from your repository** are simulator builds, so they run on cloud simulators only. For a physical iPhone, use TestFlight or an Ad Hoc build.
* **Simulator-only patches.** **Patch the camera for simulators** and **Mock Apple Family Controls** change simulator builds only. On a physical iPhone, the camera and Screen Time frameworks are the real ones. See [Build options](https://www.minitap.ai/docs/minitest/setup/builds-from-repo.md#build-options).
* **TestFlight device limit.** Apple lets one account install TestFlight builds on a limited number of devices, and each iPhone of your workspace uses one. Simulators don't count.
* **In-app purchase scenarios** are skipped on physical phones that aren't set up for purchases, and the run dialog warns you before launch.

## Next steps

> [card] [Upload a build](https://www.minitap.ai/docs/minitest/setup/upload-a-build.md)
>
> The right file for each device, TestFlight links and Ad Hoc builds.

> [card] [Builds from your repository](https://www.minitap.ai/docs/minitest/setup/builds-from-repo.md)
>
> Let Mini compile your app from the commit each run needs.

> [card] [Web apps](https://www.minitap.ai/docs/minitest/setup/web-apps.md)
>
> Browsers and screen sizes for web apps.

> [card] [Start a run](https://www.minitap.ai/docs/minitest/runs/triggering-a-run.md)
>
> From the dashboard, a pull request, Slack or the CLI.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.