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

# Failed to install the app on the device.

> xcrun devicectl device install app reports a failed install as CoreDeviceError 3002. Read the error below it for the cause.

`xcrun devicectl device install app` exits with code 1 and prints the failure in two parts. The first line is `devicectl`'s wrapper, CoreDeviceError 3002. The line under the dashes says why:

```text theme={"theme":"css-variables"}
ERROR: Failed to install the app on the device. (com.apple.dt.CoreDeviceError error 3002 (0xBBA))
       NSURL = file:///Users/you/…/YourApp.app
--------------------------------------------------------------------------------
ERROR:     <the reason> (<domain> error <code> (<hex>))
```

Xcode shows the same failure as `Failed to install the app on the device.` with `Domain: com.apple.dt.CoreDeviceError Code: 3002`.

`mobster phone install` and the MCP tool `install_app` install a build on an iPhone with this command. `mobster phone install` shows `devicectl`'s lines while it works, then reports the failure and its fix in one sentence, such as `mobster phone: The build isn't signed for this iPhone. Sign it with a development profile that includes this iPhone (Xcode › Signing & Capabilities), build it for a device, then try again.`

## Why it happens

Error 3002 is `devicectl`'s wrapper for a failed install. The reason under it usually comes from the iPhone, which checks the app's signature, its profile and its entitlements before it installs it. The error can also come from the Mac, such as when `devicectl` can't read a folder.

## Fix

1. Find the reason below the dashes or in the first line of the error. Look it up in [Reasons](#reasons) and apply the fix.
2. If the first line is `ERROR: The specified device was not found.` (CoreDeviceError 1000) instead, the `--device` value matched no phone. Copy the **Identifier** from `xcrun devicectl list devices`.
3. To see what a build is signed for, read its profile and its entitlements:

   ```sh theme={"theme":"css-variables"}
   security cms -D -i YourApp.app/embedded.mobileprovision | grep -A20 ProvisionedDevices
   codesign -d --ent :- YourApp.app
   ```

   The first command prints the UDIDs under `ProvisionedDevices`, if the profile has that list. Look for your iPhone's UDID there. The second prints the entitlements the app was signed with, to compare with the profile's `Entitlements`.
4. Install again with the same command.

For scripts, add `--json-output <file>`. `devicectl` writes the error's `code`, `domain` and `userInfo` there. Its help calls that file the only supported interface for programs.

## Reasons

| The reason | The cause, and the fix |
| - | - |
| `Failed to verify code signature of …: 0xe8008015 (A valid provisioning profile for this executable was not found.)` | The build's profile doesn't list this iPhone, or the build isn't signed for a device. Register the phone ([Your team has no devices](https://docs.mobster.dev/errors/your-team-has-no-devices.md)) and build again with automatic signing |
| `0xe8008018 (The identity used to sign the executable is no longer valid.)` | The certificate that signed it expired or was revoked. In **Xcode › Settings › Accounts › Manage Certificates**, add an **Apple Development** certificate, then build again |
| `0xe8008016` or `The executable was signed with invalid entitlements.` | The app has an entitlement its profile doesn't allow. Use the commands in step 3 of the Fix to compare the two lists |
| `The operation failed since Developer Mode is disabled on the device.` | Turn on Developer Mode. See [Developer Mode disabled](https://docs.mobster.dev/troubleshooting/developer-mode-disabled.md) |
| `The operation failed since the device is locked.` | Unlock the iPhone and run the command again |
| `The item at the provided URL is not a valid bundle.` or `The provided item to be installed is not of a type that CoreDevice recognizes.` | The path isn't an iOS app. `devicectl`'s help asks for an app bundle with a `.app` extension: pass the `.app` folder from `Build/Products/<configuration>-iphoneos`. For an `.ipa`, unzip it and pass `Payload/<App>.app`. `mobster phone install` unzips an `.ipa` for you |
| `<name>.framework is missing its bundle executable.` | A framework inside the app has no binary. Fix how the app embeds that framework, then build again |
| `Could not obtain access to one or more requested file system resources because CoreDevice was unable to create bookmark data.` | The program that ran `devicectl` may not read that folder. Run the command from Terminal, or move the build to a folder it can read |
| `The maximum number of apps for free development profiles has been reached.` | See [Free development app limit](https://docs.mobster.dev/troubleshooting/maximum-number-of-apps-for-free-development.md) |

## Check it worked

`devicectl` exits with 0, and the app is on the phone:

```sh theme={"theme":"css-variables"}
xcrun devicectl device info apps --device <identifier> --bundle-id com.example.yourapp
```

```text Output theme={"theme":"css-variables"}
Apps installed:
Name      Bundle Identifier     Version   Bundle Version
-------   -------------------   -------   --------------
YourApp   com.example.yourapp   1.0       1
```

`mobster phone install` prints `Installed com.example.yourapp on <phone> in <seconds> s.`

Checked 5 Nov 2026 against Mobster 0.4.0. The commands were checked with devicectl 518.27 (Xcode 26.4). Back to [Troubleshooting](https://docs.mobster.dev/troubleshooting.md#iphone).


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