# shipthis game ios app: Create the App Store App and Bundle ID

> Reference for the shipthis game ios app commands. Create the App Store app and bundle ID, sync capabilities and add TestFlight testers.

Source: https://shipth.is/docs/reference/game/ios/app

Commands in the `game ios app` topic are prefixed `shipthis game ios app`. They relate to the App Store App and BundleId for a specific game (generally in the current directory).

[info]
An **App Store App** is the public-facing application available in the App Store. It includes metadata like descriptions, screenshots, and submission details, representing the final product users download.

A **Bundle ID** is a unique identifier for your app within Apple’s ecosystem. It connects your app to services, certificates, and provisioning profiles, ensuring it can be built, run, and managed correctly.

**You can view the registered Bundle IDs (Identifiers) and their associated capabilities in the [Apple Developer Portal](https://developer.apple.com/account/resources/identifiers/list).**

[tip]
You will need to be authenticated against ShipThis and Apple before you can use
these commands. To do that please run the following commands first:

- [`shipthis login`](https://shipth.is/docs/reference/login)
- [`shipthis apple login`](https://shipth.is/docs/reference/apple/login)

## Commands

### `game ios app addTester`

#### Description

Adds a test user to the game in App Store Connect.

#### Help Output

```help
USAGE
  $ shipthis game ios app addTester [-e <value>] [-f <value>] [-g <value>] [-l <value>] [-q] [-s] [-t <value>]

FLAGS
  -e, --email=<value>          The email address of the tester
  -f, --firstName=<value>      The first name of the tester
  -g, --gameId=<value>         The ID of the game
  -l, --lastName=<value>       The last name of the tester
  -q, --quiet                  Avoid output except for interactions and errors
  -s, --self                   Add yourself as a tester (uses your Apple ID email and name)
  -t, --testGroupName=<value>  [default: ShipThis Test Group (Internal)] The name of the internal test group

DESCRIPTION
  Adds a test user to the game in App Store Connect.

EXAMPLES
  $ shipthis game ios app addTester

  $ shipthis game ios app addTester --testGroupName "Testers"
```

### `game ios app create`

#### Description

Creates an App and BundleId in the Apple Developer Portal. This command is run
as part of the [`shipthis game wizard`](https://shipth.is/docs/reference/game/wizard) command.

When run, this command will register a new App Store App and BundleId using the App
Store Connect API. It will ask you to confirm the name of the App and the BundleId
string which is typically in the form of `com.mycompany.mygame`. Both of these need
to be unique within the Apple ecosystem. ShipThis will suggest values for these.

#### Example

[![asciicast](https://asciinema.org/a/xc5B3aQjSDU3ErUjyi2oAYUvG.svg)](https://asciinema.org/a/xc5B3aQjSDU3ErUjyi2oAYUvG#shipthis-col120row32)

#### Help Output

```help
USAGE
  $ shipthis game ios app create [-n <value>] [-b <value>] [-f] [-g <value>] [-q]

FLAGS
  -b, --bundleId=<value>  The BundleId in the Apple Developer Portal
  -f, --force
  -g, --gameId=<value>    The ID of the game
  -n, --appName=<value>   The name of the App in the Apple Developer Portal
  -q, --quiet             Avoid output except for interactions and errors

DESCRIPTION
  Creates an App and BundleId in the Apple Developer Portal.

EXAMPLES
  $ shipthis game ios app create
```

### `game ios app status`

#### Description

Shows the Game iOS App status. The output will tell you if you need to run the
create command or sync command.

- If the App does not exist in the Apple Developer Portal then you should run the
 `shipthis game ios app create` command
- If you have updated your **export_presets.cfg** file with new capabilities then
 you should run the `shipthis game ios app sync` command.

#### Example

[![asciicast](https://asciinema.org/a/XbQ1iKf1W021xOF5hupAAadhA.svg)](https://asciinema.org/a/XbQ1iKf1W021xOF5hupAAadhA#shipthis-col120row32)

#### Help Output

```help
USAGE
  $ shipthis game ios app status [-g <value>]

FLAGS
  -g, --gameId=<value>  The ID of the game

DESCRIPTION
  Shows the Game iOS App status.

EXAMPLES
  $ shipthis game ios app status
```

### `game ios app sync`

#### Description

Synchronizes the Apple App **Bundle ID** with the capabilities defined in your Godot iOS export preset.

This command reads your **export_presets.cfg** (iOS preset) and enables or disables the corresponding capabilities on the Bundle ID in the Apple Developer Portal.

**Godot options that are synced**

| Godot option | Synced as | Notes |
| --- | --- | --- |
| capabilities/access_wifi | [Access WiFi](https://developer.apple.com/documentation/bundleresources/entitlements) | |
| entitlements/increased_memory_limit | [Increased Memory Limit](https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.kernel.increased-memory-limit) | |
| entitlements/game_center | [Game Center](https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.game-center) | |
| entitlements/push_notifications | [Push Notifications](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment) | Production or Development; or legacy **capabilities/push_notifications** (true). Sets aps-environment / APNS. |
| entitlements/additional | [Entitlements](https://developer.apple.com/documentation/bundleresources/entitlements) (parsed) | Known entitlement keys (e.g. `com.apple.developer.applesignin` for Sign in with Apple) are synced. Unknown keys remain in your app’s entitlements only. |

**Not synced:** Other export options (e.g. `capabilities/additional`, `capabilities/performance_gaming_tier`) only affect the exported app; they are not synced to the Bundle ID.

[tip]
You do not need to have an **export_presets.cfg** file in your game directory.
ShipThis will use default values for this file if it does not exist.

#### Help Output

```help
USAGE
  $ shipthis game ios app sync [-f] [-g <value>] [-q]

FLAGS
  -f, --force
  -g, --gameId=<value>  The ID of the game
  -q, --quiet           Avoid output except for interactions and errors

DESCRIPTION
  Synchronizes the Apple App "BundleId" with the capabilities from the local project.

EXAMPLES
  $ shipthis game ios app sync
```
