shipthis 0.1.35 → 0.1.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +231 -80
- package/assets/markdown/agreement-update.md.ejs +12 -0
- package/assets/markdown/confirm-delete-android-keystore.md.ejs +22 -0
- package/assets/markdown/confirm-delete-android-serviceaccountkey.md.ejs +24 -0
- package/assets/markdown/confirm-delete-apple-credential.md.ejs +29 -0
- package/dist/{AppleBundleIdDetails-N_j1wv6f.js → AppleBundleIdDetails-KMzyex1H.js} +3 -5
- package/dist/{Command-DN1j3tjt.js → Command-CHh8RDXK.js} +1 -2
- package/dist/{CommandGame-D2NqytWc.js → CommandGame-Rvmsa7b0.js} +2 -2
- package/dist/{Create-BRdv5jXQ.js → Create-DInZ_pw-.js} +1 -4
- package/dist/{GameStatus-joyHPy0f.js → GameStatus-D7ID10tS.js} +1 -4
- package/dist/{Import-BNMHsJoM.js → Import-BmO8EYKj.js} +2 -5
- package/dist/{JobLogTail-D35FO5v-.js → JobLogTail-CYdceTKL.js} +2 -5
- package/dist/{JobProgress-D-9KESaA.js → JobProgress-DBCYbWrO.js} +16 -18
- package/dist/{JobStatusTable-DIJ_h-gi.js → JobStatusTable-DhnhY1_i.js} +2 -4
- package/dist/{ProjectCredentialsTable-BMKgv99h.js → ProjectCredentialsTable-BDYVYqAq.js} +5 -3
- package/dist/{UserCredentialsTable-CUrTDzTK.js → UserCredentialsTable-cDPvjF-F.js} +4 -4
- package/dist/{baseAppleCommand-Cs9a52e5.js → baseAppleCommand-CQ5dOna7.js} +1 -1
- package/dist/{baseGameAndroidCommand-BCB1SMCf.js → baseGameAndroidCommand-D4ryZS6A.js} +1 -2
- package/dist/commands/apiKey/create.js +3 -6
- package/dist/commands/apiKey/list.js +3 -6
- package/dist/commands/apiKey/revoke.js +3 -6
- package/dist/commands/apple/apiKey/create.js +7 -10
- package/dist/commands/apple/apiKey/delete.js +118 -0
- package/dist/commands/apple/apiKey/export.js +6 -9
- package/dist/commands/apple/apiKey/import.js +6 -9
- package/dist/commands/apple/apiKey/status.js +4 -7
- package/dist/commands/apple/certificate/create.js +7 -10
- package/dist/commands/apple/certificate/delete.js +127 -0
- package/dist/commands/apple/certificate/export.js +6 -9
- package/dist/commands/apple/certificate/import.js +6 -9
- package/dist/commands/apple/certificate/status.js +4 -7
- package/dist/commands/apple/login.js +23 -4
- package/dist/commands/apple/status.js +4 -7
- package/dist/commands/dashboard.js +12 -1
- package/dist/commands/game/android/apiKey/connect.js +8 -11
- package/dist/commands/game/android/apiKey/create.js +10 -13
- package/dist/commands/game/android/apiKey/delete.js +100 -0
- package/dist/commands/game/android/apiKey/export.js +6 -9
- package/dist/commands/game/android/apiKey/import.js +6 -9
- package/dist/commands/game/android/apiKey/invite.js +14 -4
- package/dist/commands/game/android/apiKey/policy.js +3 -6
- package/dist/commands/game/android/apiKey/status.js +6 -9
- package/dist/commands/game/android/keyStore/create.js +7 -10
- package/dist/commands/game/android/keyStore/delete.js +100 -0
- package/dist/commands/game/android/keyStore/export.js +5 -8
- package/dist/commands/game/android/keyStore/import.js +8 -11
- package/dist/commands/game/android/keyStore/status.js +7 -10
- package/dist/commands/game/android/status.js +13 -1
- package/dist/commands/game/build/download.js +3 -6
- package/dist/commands/game/build/list.js +4 -7
- package/dist/commands/game/create.js +13 -2
- package/dist/commands/game/details.js +4 -7
- package/dist/commands/game/export.js +13 -1
- package/dist/commands/game/ios/app/addTester.js +4 -7
- package/dist/commands/game/ios/app/create.js +3 -6
- package/dist/commands/game/ios/app/status.js +6 -9
- package/dist/commands/game/ios/app/sync.js +4 -7
- package/dist/commands/game/ios/profile/create.js +6 -9
- package/dist/commands/game/ios/profile/delete.js +123 -0
- package/dist/commands/game/ios/profile/export.js +5 -8
- package/dist/commands/game/ios/profile/import.js +5 -8
- package/dist/commands/game/ios/profile/status.js +8 -51
- package/dist/commands/game/ios/status.js +10 -13
- package/dist/commands/game/ios/wizard.js +2 -6
- package/dist/commands/game/job/list.js +3 -6
- package/dist/commands/game/job/status.js +8 -11
- package/dist/commands/game/list.js +3 -6
- package/dist/commands/game/ship.js +17 -14
- package/dist/commands/game/status.js +7 -10
- package/dist/commands/game/wizard.js +14 -17
- package/dist/commands/internal/fastlane.js +13 -1
- package/dist/commands/internal/readme.js +13 -4
- package/dist/commands/login.js +27 -4
- package/dist/commands/status.js +6 -8
- package/dist/{export-DFCZKNQk.js → export-DujIwhJw.js} +1 -1
- package/dist/{import-BpGyif-m.js → import-DGCqCAcC.js} +1 -1
- package/dist/{index-DlE_SPt3.js → index-9LxGafAo.js} +3 -5
- package/dist/{index-BTXEUd8W.js → index-BPh_qt7t.js} +4 -6
- package/dist/index-CNsmEDXi.js +48 -0
- package/dist/index-CmuXyPed.js +1905 -0
- package/dist/{upload-D19OQsbn.js → upload-D4x4yCia.js} +1 -1
- package/dist/{useAppleApp-BZc_cNa-.js → useAppleApp-taaewPSf.js} +1 -1
- package/dist/{useAppleBundleId-DvMXAvWD.js → useAppleBundleId-BeGViMe7.js} +1 -1
- package/dist/useAppleProfiles-1TtO0aO6.js +63 -0
- package/dist/{useGoogleStatus-Cx_QIsXa.js → useGoogleStatus-CSsxEvX7.js} +1 -2
- package/dist/{useProjectCredentials-DxdwJCfU.js → useProjectCredentials-Cm50WMZU.js} +1 -3
- package/dist/{useWebSocket-cM5yOcDv.js → useWebSocket-BVfn36be.js} +1 -1
- package/docs/apple/apiKey/delete.md +25 -0
- package/docs/apple/apiKey.md +26 -0
- package/docs/apple/certificate/delete.md +25 -0
- package/docs/apple/certificate.md +26 -0
- package/docs/assets/st.png +0 -0
- package/docs/game/android/apiKey/delete.md +25 -0
- package/docs/game/android/apiKey.md +26 -0
- package/docs/game/android/keyStore/delete.md +25 -0
- package/docs/game/android/keyStore.md +26 -0
- package/docs/game/ios/profile/delete.md +26 -0
- package/docs/game/ios/profile.md +27 -0
- package/docs/game/ship.md +4 -4
- package/docs/login.md +6 -2
- package/docs/status.md +1 -1
- package/package.json +13 -2
- package/dist/ejs-DirFZbza.js +0 -716
- package/dist/index-BwnzoldS.js +0 -784
- package/dist/index-CJWMt1s-.js +0 -153
- package/dist/index-hoHfGrjg.js +0 -221
- package/dist/index-izrACZbC.js +0 -24
- package/dist/useAndroidServiceAccountTestResult-CwKeW0ED.js +0 -50
package/README.md
CHANGED
|
@@ -1,54 +1,33 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
1
|
+
# ShipThis <a href="https://discord.gg/gPjn3S99k4"><img alt="discord" src="https://img.shields.io/discord/1304144717239554069?style=flat-square&label=%F0%9F%92%AC%20discord&color=00ACD7"></a><a href="https://shipth.is/?ref=github_readme"><img src="docs/assets/st.png" align="right" height="80" alt="ShipThis" /></a>
|
|
2
|
+
|
|
3
|
+
- Build and publish Godot mobile games to the **App Store** and **Google Play**
|
|
4
|
+
- Handles certificates, keystores, API keys, and provisioning profiles
|
|
5
|
+
- Cloud builds are free for most solo-devs
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://shipth.is/docs/reference/game/ship?ref=github_readme">
|
|
3
9
|
<picture>
|
|
4
|
-
<
|
|
5
|
-
<img height="56" width="260" alt="ShipThis Home" src="docs/assets/logo_light.svg">
|
|
10
|
+
<img height="266" width="504" alt="ShipThis Command - ship output" src="docs/assets/ship-outputx0.8.gif">
|
|
6
11
|
</picture>
|
|
7
12
|
</a>
|
|
8
|
-
<br>
|
|
9
|
-
<a href="https://discord.gg/gPjn3S99k4">
|
|
10
|
-
<img alt="discord" src="https://img.shields.io/discord/1304144717239554069?style=flat-square&label=%F0%9F%92%AC%20discord&color=00ACD7">
|
|
11
|
-
</a>
|
|
12
|
-
</h1>
|
|
13
|
-
<p align="center">
|
|
14
|
-
<b>ShipThis</b> is a <b>command line tool</b> for building and uploading your <a href="https://godotengine.org/">Godot</a> mobile games to the <b>Apple App Store</b> and <b>Google Play</b>.
|
|
15
|
-
</p>
|
|
16
|
-
<p align="center">
|
|
17
|
-
ShipThis compiles your game on managed cloud servers. You do not need Xcode, Android Studio, or SDK installations. You can run it manually or from CI.
|
|
18
13
|
</p>
|
|
19
14
|
|
|
20
|
-
<p align="center">
|
|
21
|
-
<picture>
|
|
22
|
-
<img height="266" width="504" alt="ShipThis Command - ship output" src="docs/assets/ship-outputx0.8.gif">
|
|
23
|
-
</picture>
|
|
24
|
-
</p>
|
|
25
|
-
|
|
26
|
-
|
|
27
15
|
> [!IMPORTANT]
|
|
28
|
-
>
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Why use ShipThis?
|
|
33
|
-
|
|
34
|
-
- **Always a free tier** - Enough build minutes for most solo devs
|
|
35
|
-
- **One-command setup** - Use the interactive [`wizard`](https://shipth.is/docs/reference/game/wizard) to configure your game
|
|
36
|
-
- **No additional tools** - No Xcode, Android Studio, or SDK installation required
|
|
37
|
-
- **Simplified provisioning** - We handle iOS certificates, Android keystores, app signing, and API keys
|
|
38
|
-
- **One-command deployment** - Publish to TestFlight or Google Play with a single command
|
|
16
|
+
> Currently in open beta and free to use. It will **always** be free for most solo devs.
|
|
39
17
|
|
|
40
18
|
## Quick start
|
|
41
19
|
|
|
42
20
|
### Requirements
|
|
43
21
|
|
|
44
|
-
- A Godot 3.6 or 4.
|
|
22
|
+
- A Godot 3.6 or 4.x game
|
|
45
23
|
- [Node.js](https://nodejs.org/en/download/) version 18.0 or above
|
|
46
24
|
- **To publish an Android game** - a [Play Console developer account](https://play.google.com/apps/publish/signup) (not required for building an APK/AAB)
|
|
47
25
|
- **To build an iOS game** - an [Apple Developer account](https://developer.apple.com)
|
|
48
26
|
|
|
49
27
|
### 1. Install ShipThis
|
|
50
28
|
|
|
51
|
-
|
|
29
|
+
|
|
30
|
+
Install via the [NPM package manager](https://www.npmjs.com/):
|
|
52
31
|
|
|
53
32
|
```bash
|
|
54
33
|
npm install -g shipthis
|
|
@@ -56,9 +35,8 @@ npm install -g shipthis
|
|
|
56
35
|
|
|
57
36
|
### 2. Create an account
|
|
58
37
|
|
|
59
|
-
Set up an account with ShipThis by logging in for the first time using the [`shipthis login`](https://shipth.is/docs/reference/login) command.
|
|
38
|
+
Set up an account with ShipThis by logging in for the first time using the [`shipthis login`](https://shipth.is/docs/reference/login?ref=github_readme) command.
|
|
60
39
|
|
|
61
|
-
> 🛠 All builds run on managed cloud servers - no need to install Xcode or Android Studio locally.
|
|
62
40
|
|
|
63
41
|
```bash
|
|
64
42
|
shipthis login
|
|
@@ -66,7 +44,7 @@ shipthis login
|
|
|
66
44
|
|
|
67
45
|
### 3. Set up your game
|
|
68
46
|
|
|
69
|
-
Run the [wizard command](https://shipth.is/docs/reference/game/wizard) to configure your game on ShipThis. The command takes a platform parameter - this can be either **android** or **ios**. Run this command from within a Godot game directory (with a **project.godot** file):
|
|
47
|
+
Run the [wizard command](https://shipth.is/docs/reference/game/wizard?ref=github_readme) to configure your game on ShipThis. The command takes a platform parameter - this can be either **android** or **ios**. Run this command from within a Godot game directory (with a **project.godot** file):
|
|
70
48
|
|
|
71
49
|
#### Set up an Android game
|
|
72
50
|
|
|
@@ -104,34 +82,49 @@ shipthis game wizard ios
|
|
|
104
82
|
|
|
105
83
|
### 4. Ship
|
|
106
84
|
|
|
107
|
-
Now you can publish new versions of your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipth.is/docs/reference/game/ship) command:
|
|
85
|
+
Now you can publish new versions of your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipth.is/docs/reference/game/ship?ref=github_readme) command:
|
|
108
86
|
|
|
109
87
|
```bash
|
|
110
88
|
shipthis game ship
|
|
111
89
|
```
|
|
112
90
|
|
|
113
|
-
- Having issues? Check the [Troubleshooting](https://shipth.is/docs/troubleshooting) or [join our Discord](https://discord.gg/gPjn3S99k4)
|
|
114
|
-
- For detailed documentation, visit [shipth.is/docs](https://shipth.is/docs)
|
|
91
|
+
- Having issues? Check the [Troubleshooting](https://shipth.is/docs/troubleshooting?ref=github_readme) or [join our Discord](https://discord.gg/gPjn3S99k4)
|
|
92
|
+
- For detailed documentation, visit [shipth.is/docs](https://shipth.is/docs?ref=github_readme)
|
|
115
93
|
|
|
116
94
|
|
|
117
95
|
## FAQ
|
|
118
96
|
|
|
119
|
-
|
|
120
|
-
<summary><strong>Can I build my game as APK without a Google Play account?</strong></summary>
|
|
97
|
+
### Do I need a Mac to build for iOS?
|
|
121
98
|
|
|
122
|
-
|
|
99
|
+
No, you do not need a Mac, but you will need an Apple Developer Account.
|
|
123
100
|
|
|
124
|
-
|
|
101
|
+
ShipThis handles iOS builds on managed macOS cloud servers. The CLI connects to the Apple Developer Portal and sets everything up for you.
|
|
102
|
+
|
|
103
|
+
### Which versions of Godot are supported?
|
|
125
104
|
|
|
126
|
-
|
|
105
|
+
We support **all stable Godot versions since 3.6**, including:
|
|
127
106
|
|
|
128
|
-
|
|
107
|
+
| [3.6](https://github.com/godotengine/godot/releases/tag/3.6-stable) | [4.0](https://github.com/godotengine/godot/releases/tag/4.0-stable) | [4.1](https://github.com/godotengine/godot/releases/tag/4.1-stable) | [4.2](https://github.com/godotengine/godot/releases/tag/4.2-stable) | [4.3](https://github.com/godotengine/godot/releases/tag/4.3-stable) | [4.4](https://github.com/godotengine/godot/releases/tag/4.4-stable) | [4.5](https://github.com/godotengine/godot/releases/tag/4.5-stable) |
|
|
108
|
+
|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|
|
|
109
|
+
| [3.6.1](https://github.com/godotengine/godot/releases/tag/3.6.1-stable) | [4.0.1](https://github.com/godotengine/godot/releases/tag/4.0.1-stable) | [4.1.1](https://github.com/godotengine/godot/releases/tag/4.1.1-stable) | [4.2.1](https://github.com/godotengine/godot/releases/tag/4.2.1-stable) | [4.3.1 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.3.1) | [4.4.1](https://github.com/godotengine/godot/releases/tag/4.4.1-stable) | |
|
|
110
|
+
| [3.7-dev *](https://github.com/shipth-is/godot-3.x-builds/releases/tag/godot-3.x-8c10cd6) | [4.0.2](https://github.com/godotengine/godot/releases/tag/4.0.2-stable) | [4.1.2](https://github.com/godotengine/godot/releases/tag/4.1.2-stable) | [4.2.2](https://github.com/godotengine/godot/releases/tag/4.2.2-stable) | | [4.4.2 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.4.2) | |
|
|
111
|
+
| | [4.0.3](https://github.com/godotengine/godot/releases/tag/4.0.3-stable) | [4.1.3](https://github.com/godotengine/godot/releases/tag/4.1.3-stable) | [4.2.3 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.2.3) | | | |
|
|
112
|
+
| | [4.0.4](https://github.com/godotengine/godot/releases/tag/4.0.4-stable) | [4.1.4](https://github.com/godotengine/godot/releases/tag/4.1.4-stable) | | | | |
|
|
113
|
+
| | [4.0.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.0.5) | [4.1.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.1.5) | | | | |
|
|
129
114
|
|
|
115
|
+
**\* Custom builds** - [maintained by us](https://github.com/shipth-is/godot-android-sdk-upgrade/) to support **Android SDK 35**.
|
|
130
116
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
117
|
+
You can read more in our [Godot versioning guide](https://shipth.is/docs/guides/godot-versioning?ref=github_readme).
|
|
118
|
+
|
|
119
|
+
### Can I build my game as APK/AAB without a Google Play account?
|
|
120
|
+
|
|
121
|
+
Yes.
|
|
122
|
+
|
|
123
|
+
Running the wizard command will create a Service Account Key for automatic publishing, but you might not need this when initially building your game.
|
|
124
|
+
|
|
125
|
+
You can create a ShipThis account, create the game, create a keystore, and then run the ship command. Later, when you need to set up publishing, you can re-run the wizard command.
|
|
134
126
|
|
|
127
|
+
```bash
|
|
135
128
|
# Create a ShipThis game - run this in a dir with a project.godot file
|
|
136
129
|
shipthis game create --name "My Game" --androidPackageName "com.my.game"
|
|
137
130
|
|
|
@@ -142,73 +135,231 @@ shipthis game android keyStore create
|
|
|
142
135
|
shipthis game ship --follow --platform android --skipPublish --downloadAPK game.apk
|
|
143
136
|
```
|
|
144
137
|
|
|
138
|
+
### Do I need to create an export_presets.cfg file?
|
|
145
139
|
|
|
146
|
-
|
|
140
|
+
No, the ShipThis build server will generate a valid **export_presets.cfg** for your game.
|
|
147
141
|
|
|
142
|
+
If you provide an **export_presets.cfg** file, the desired preset values will be merged with the generated file.
|
|
148
143
|
|
|
149
|
-
|
|
150
|
-
<summary><strong>Do I need a Mac to build for iOS?</strong></summary>
|
|
144
|
+
### How much does it cost to use ShipThis?
|
|
151
145
|
|
|
152
|
-
|
|
146
|
+
Currently free while in open beta. Planned pricing is on the [pricing page](https://shipth.is/pricing?ref=github_readme).
|
|
153
147
|
|
|
154
|
-
|
|
148
|
+
### What does the `shipthis game wizard` do?
|
|
155
149
|
|
|
156
|
-
|
|
150
|
+
The wizard command runs different steps for Android and iOS. Each "step" is another ShipThis command - meaning you can run each step by itself. The wizard can be re-run any number of times.
|
|
157
151
|
|
|
158
|
-
|
|
152
|
+
The Android steps are described in the [Android set-up guide](https://shipth.is/docs/android?ref=github_readme).
|
|
153
|
+
The iOS steps are described in the [iOS setup guide](https://shipth.is/docs/ios).
|
|
159
154
|
|
|
160
155
|
<details>
|
|
161
|
-
<summary><strong>
|
|
156
|
+
<summary><strong>The commands run for Android</strong></summary>
|
|
162
157
|
|
|
163
|
-
|
|
158
|
+
1. Creating a new ShipThis game
|
|
164
159
|
|
|
165
|
-
|
|
160
|
+
```bash
|
|
161
|
+
shipthis game create --name "Pay2Lose" --androidPackageName "com.pay.two.lose"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
1. Creating or importing an Android Keystore
|
|
165
|
+
|
|
166
|
+
To create a new Keystore:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
shipthis game android keyStore create
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
To import an existing Keystore see [the docs for the `shipthis game android keyStore import` command](https://shipth.is/docs/reference/game/android/keyStore?ref=github_readme#game-android-keystore-import)
|
|
173
|
+
|
|
174
|
+
1. Connecting ShipThis with Google
|
|
175
|
+
|
|
176
|
+
Once connected, ShipThis can generate a Service Account API Key for automatic publishing.
|
|
166
177
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
| | 4.0.2 | 4.1.2 | 4.2.2 | | |
|
|
171
|
-
| | 4.0.3 | 4.1.3 | | | |
|
|
172
|
-
| | 4.0.4 | 4.1.4 | | | |
|
|
178
|
+
```bash
|
|
179
|
+
shipthis game android apiKey connect
|
|
180
|
+
```
|
|
173
181
|
|
|
174
|
-
|
|
182
|
+
1. Create a Service Account and API Key
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
shipthis game android apiKey create
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
1. Create and download an initial build (AAB file)
|
|
189
|
+
|
|
190
|
+
When you first create your game in the Google Play Console, you will be asked to upload an initial build in AAB format.
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
shipthis game ship --platform android --follow --skipPublish --download game.aab
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
1. Create an app in the Google Play Console
|
|
197
|
+
|
|
198
|
+
You will need to manually create the game itself in Google Play. This will involve entering the name, agreeing to Google Play's TOS and uploading an initial build.
|
|
199
|
+
|
|
200
|
+
1. Invite the Service Account
|
|
201
|
+
|
|
202
|
+
Before the Service Account API Key can submit your games automatically, you will need to invite the Service Account to your Google Play account. To do this you will need your Google Play Account ID.
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
shipthis game android apiKey invite XXXXXXXXX
|
|
206
|
+
```
|
|
175
207
|
|
|
176
208
|
</details>
|
|
177
209
|
|
|
178
210
|
<details>
|
|
179
|
-
<summary><strong>
|
|
211
|
+
<summary><strong>The commands run for iOS</strong></summary>
|
|
180
212
|
|
|
181
|
-
|
|
213
|
+
1. Create a new ShipThis game
|
|
182
214
|
|
|
183
|
-
|
|
215
|
+
```bash
|
|
216
|
+
shipthis game create --name "Tap to Win Nothing" --iosBundleId "com.tap.to.win.nothing"
|
|
217
|
+
```
|
|
184
218
|
|
|
185
|
-
|
|
219
|
+
1. Connect ShipThis with Apple
|
|
220
|
+
|
|
221
|
+
We recommend enabling 2FA for your account. ShipThis generates a session cookie for communicating with the Apple Developer Portal.
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
shipthis apple login
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
1. Create an App Store Connect API Key
|
|
228
|
+
|
|
229
|
+
ShipThis uses this API key to submit new versions of your game.
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
shipthis apple apiKey create
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
1. Create an iOS Distribution Certificate
|
|
236
|
+
|
|
237
|
+
This certificate is used to sign your game on the ShipThis build servers.
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
shipthis apple certificate create
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
1. Create an App Store App and BundleId
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
shipthis game ios app create
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
1. Synchronize Permissions (Capabilities)
|
|
250
|
+
|
|
251
|
+
ShipThis reads `export_presets.cfg` and enables supported capabilities in the Apple Developer Portal (currently Access WiFi, Push Notifications).
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
shipthis game ios app sync
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
1. Create a Provisioning Profile
|
|
258
|
+
|
|
259
|
+
Required to run on devices and for distribution. You can view profiles at Apple’s portal: https://developer.apple.com/account/resources/profiles/list
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
shipthis game ios profile create
|
|
263
|
+
```
|
|
186
264
|
|
|
187
265
|
</details>
|
|
188
266
|
|
|
189
267
|
<details>
|
|
190
|
-
<summary><strong>
|
|
268
|
+
<summary><strong>Watch: The wizard run for Android</strong></summary>
|
|
269
|
+
|
|
270
|
+
<p align="center">
|
|
271
|
+
<picture>
|
|
272
|
+
<img height="431" width="672" alt="ShipThis Command - Android Wizard - published game" src="docs/assets/wizard-android-existingx0.5.gif">
|
|
273
|
+
</picture>
|
|
274
|
+
</p>
|
|
275
|
+
|
|
276
|
+
</details>
|
|
191
277
|
|
|
192
|
-
|
|
278
|
+
<details>
|
|
279
|
+
<summary><strong>Watch: The wizard run for iOS</strong></summary>
|
|
193
280
|
|
|
194
|
-
|
|
281
|
+
<p align="center">
|
|
282
|
+
<a href="https://www.youtube.com/watch?v=ijTUFVk1duw" target="_blank">
|
|
283
|
+
<img src="https://img.youtube.com/vi/ijTUFVk1duw/0.jpg" alt="Watch the iOS setup video" width="640" height="480">
|
|
284
|
+
</a>
|
|
285
|
+
</p>
|
|
195
286
|
|
|
196
287
|
</details>
|
|
197
288
|
|
|
289
|
+
### How do I debug a failed build?
|
|
290
|
+
|
|
291
|
+
If a build fails, rerun it for only the failing platform with the `--follow` flag to view the logs in real time:
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
shipthis game ship --platform android --follow
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
For additional debugging, you can include the `--verbose` flag - this enables detailed logging locally and on the build server, including running the Godot export with verbose output:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
shipthis game ship --platform ios --follow --verbose
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
You can review logs at any time in the [dashboard](https://shipth.is/dashboard?ref=github_readme) under the "Jobs" tab.
|
|
304
|
+
|
|
305
|
+
See the [Troubleshooting Guide](https://shipth.is/docs/troubleshooting?ref=github_readme) for common checks.
|
|
306
|
+
|
|
307
|
+
If the issue persists, we can help you directly in our [Discord](https://discord.gg/gPjn3S99k4).
|
|
308
|
+
|
|
309
|
+
### Does ShipThis work with CI/CD pipelines?
|
|
310
|
+
|
|
311
|
+
Yes. ShipThis works with CI/CD pipelines, allowing you to run automated builds without an interactive shell.
|
|
312
|
+
|
|
313
|
+
To get started, create an API key, for your pipeline environment:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# API keys can have a maximum lifetime of 1 year
|
|
317
|
+
shipthis apiKey create --durationDays 365 --name ci-key
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
The secret value will only be displayed once and this can be used as an environment variable called `SHIPTHIS_TOKEN`.
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
export SHIPTHIS_TOKEN=your_token_here
|
|
324
|
+
shipthis game ship --platform android --follow
|
|
325
|
+
shipthis game ship --platform ios --follow
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
For GitHub users, we provide an official **GitHub Action** for easy integration: https://github.com/shipth-is/action
|
|
329
|
+
|
|
330
|
+
See the [API Keys documentation](https://shipth.is/docs/reference/apiKey/?ref=github_readme) for more information.
|
|
331
|
+
|
|
332
|
+
### How are my credentials stored and secured?
|
|
333
|
+
|
|
334
|
+
ShipThis uses short-lived, signed URLs and ephemeral build environments.
|
|
335
|
+
|
|
336
|
+
- Credentials are stored in a private DigitalOcean Space.
|
|
337
|
+
- Every access is logged for a full audit trail.
|
|
338
|
+
- When a build starts, credentials are fetched on-demand and loaded as environment variables.
|
|
339
|
+
- Temporary files are created only if needed and cleaned up when the job finishes.
|
|
340
|
+
|
|
341
|
+
We store:
|
|
342
|
+
|
|
343
|
+
- Android Keystores
|
|
344
|
+
- Google Play Service Account API keys
|
|
345
|
+
- iOS provisioning profiles
|
|
346
|
+
- App Store Connect API keys
|
|
347
|
+
- iOS distribution certificates
|
|
348
|
+
|
|
198
349
|
## 📖 Command Reference
|
|
199
350
|
|
|
200
351
|
### 🗂 Topics
|
|
201
352
|
|
|
202
|
-
- [apiKey](https://shipth.is/docs/reference/apiKey) - Commands related to ShipThis API Keys
|
|
203
|
-
- [apple](https://shipth.is/docs/reference/apple) - Commands that relate to linking your ShipThis account with your Apple Developer Account
|
|
204
|
-
- [game](https://shipth.is/docs/reference/game) - Commands that relate to configuring the specific game in the current working directory.
|
|
353
|
+
- [apiKey](https://shipth.is/docs/reference/apiKey?ref=github_readme) - Commands related to ShipThis API Keys
|
|
354
|
+
- [apple](https://shipth.is/docs/reference/apple?ref=github_readme) - Commands that relate to linking your ShipThis account with your Apple Developer Account
|
|
355
|
+
- [game](https://shipth.is/docs/reference/game?ref=github_readme) - Commands that relate to configuring the specific game in the current working directory.
|
|
205
356
|
|
|
206
357
|
### 🔧 Commands
|
|
207
358
|
|
|
208
|
-
- [dashboard](https://shipth.is/docs/reference/dashboard) - Opens the web browser to your shipth.is dashboard
|
|
209
|
-
- [login](https://shipth.is/docs/reference/login) - Sign in or create a new account
|
|
210
|
-
- [status](https://shipth.is/docs/reference/status) - Display your overall ShipThis account status
|
|
211
|
-
- [help](https://shipth.is/docs/reference/help) - Display help for a specific topic or command
|
|
359
|
+
- [dashboard](https://shipth.is/docs/reference/dashboard?ref=github_readme) - Opens the web browser to your shipth.is dashboard
|
|
360
|
+
- [login](https://shipth.is/docs/reference/login?ref=github_readme) - Sign in or create a new account
|
|
361
|
+
- [status](https://shipth.is/docs/reference/status?ref=github_readme) - Display your overall ShipThis account status
|
|
362
|
+
- [help](https://shipth.is/docs/reference/help?ref=github_readme) - Display help for a specific topic or command
|
|
212
363
|
|
|
213
364
|
## 🌍 Community
|
|
214
365
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Warning - there are changes to our agreements:
|
|
2
|
+
|
|
3
|
+
<% changes.forEach((agreement) => { %>
|
|
4
|
+
## <%= agreement.agreementType === 'PRIVACY_POLICY' ? 'Privacy Policy' : 'Terms and Conditions' %> Update (<%= agreement.versionName %>)
|
|
5
|
+
**<%= agreement.description %>**
|
|
6
|
+
Read more: <%= agreement.url %>
|
|
7
|
+
|
|
8
|
+
<% }); %>
|
|
9
|
+
|
|
10
|
+
Hide this message by running: `shipthis login --acceptAgreements`
|
|
11
|
+
|
|
12
|
+
---
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Please confirm deletion
|
|
2
|
+
|
|
3
|
+
## Are you sure you want to delete this Android KeyStore?
|
|
4
|
+
|
|
5
|
+
<% if (immediate) { %>
|
|
6
|
+
- This action **will delete the credential from ShipThis immediately and cannot be undone**.
|
|
7
|
+
<% } else { %>
|
|
8
|
+
- This action **will delete the credential from ShipThis in the next 24 hours and cannot be undone**.
|
|
9
|
+
- To delete the credential immediately, rerun the command with the `--immediate` flag.
|
|
10
|
+
<% } %>
|
|
11
|
+
|
|
12
|
+
## Export your credential (optional but recommended)
|
|
13
|
+
|
|
14
|
+
If you haven't already done so, you can export your credential to a local file for safekeeping before deleting it. You can do this by running the following command:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
<%= exportCommand %>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Confirm deletion
|
|
21
|
+
|
|
22
|
+
Please type **<%= confirmString %>** to confirm, or rerun the command with the `--iAmSure` flag.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Please confirm deletion
|
|
2
|
+
|
|
3
|
+
## Are you sure you want to delete this Android Service Account API Key?
|
|
4
|
+
|
|
5
|
+
<% if (immediate) { %>
|
|
6
|
+
- This action **will delete the credential from ShipThis immediately and cannot be undone**.
|
|
7
|
+
<% } else { %>
|
|
8
|
+
- This action **will delete the credential from ShipThis in the next 24 hours and cannot be undone**.
|
|
9
|
+
- To delete the credential immediately, rerun the command with the `--immediate` flag.
|
|
10
|
+
<% } %>
|
|
11
|
+
|
|
12
|
+
**Note: this will NOT delete the Service Account in Google Cloud Console. You will need to do that manually if you wish to fully delete the Service Account.**
|
|
13
|
+
|
|
14
|
+
## Export your credential (optional but recommended)
|
|
15
|
+
|
|
16
|
+
If you haven't already done so, you can export your credential to a local file for safekeeping before deleting it. You can do this by running the following command:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
<%= exportCommand %>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Confirm deletion
|
|
23
|
+
|
|
24
|
+
Please type **<%= confirmString %>** to confirm, or rerun the command with the `--iAmSure` flag.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Please confirm deletion
|
|
2
|
+
|
|
3
|
+
## Are you sure you want to delete this <%= credentialType %>?
|
|
4
|
+
|
|
5
|
+
<% if (immediate) { %>
|
|
6
|
+
- This action **will delete the credential from ShipThis immediately and cannot be undone**.
|
|
7
|
+
<% } else { %>
|
|
8
|
+
- This action **will delete the credential from ShipThis in the next 24 hours and cannot be undone**.
|
|
9
|
+
- To delete the credential immediately, rerun the command with the `--immediate` flag.
|
|
10
|
+
<% } %>
|
|
11
|
+
<% if (revokeInApple) { %>
|
|
12
|
+
- This action **will also revoke the credential in Apple and cannot be undone**.
|
|
13
|
+
<% } else { %>
|
|
14
|
+
- This action will **NOT** revoke the credential in Apple.
|
|
15
|
+
- To also revoke the credential in Apple, rerun the command with the `--revokeInApple` flag.
|
|
16
|
+
<% } %>
|
|
17
|
+
|
|
18
|
+
## Export your credential (optional but recommended)
|
|
19
|
+
|
|
20
|
+
If you haven't already done so, you can export your credential to a local file for safekeeping before deleting it. You can do this by running the following command:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
<%= exportCommand %>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Confirm deletion
|
|
27
|
+
|
|
28
|
+
Please type **<%= confirmString %>** to confirm, or rerun the command with the `--iAmSure` flag.
|
|
29
|
+
|
|
@@ -11,13 +11,13 @@ import 'readline-sync';
|
|
|
11
11
|
import 'luxon';
|
|
12
12
|
import 'axios';
|
|
13
13
|
import 'isomorphic-git';
|
|
14
|
-
import './index-
|
|
14
|
+
import './index-CmuXyPed.js';
|
|
15
15
|
import '@oclif/core';
|
|
16
16
|
import '@tanstack/react-query';
|
|
17
17
|
import 'react';
|
|
18
18
|
import 'crypto-js';
|
|
19
19
|
import 'uuid';
|
|
20
|
-
import { u as useAppleApp } from './useAppleApp-
|
|
20
|
+
import { u as useAppleApp } from './useAppleApp-taaewPSf.js';
|
|
21
21
|
import 'fast-glob';
|
|
22
22
|
import 'yazl';
|
|
23
23
|
import 'socket.io-client';
|
|
@@ -27,12 +27,10 @@ import { T as Title } from './Title-BCQtayg6.js';
|
|
|
27
27
|
import 'string-length';
|
|
28
28
|
import 'strip-ansi';
|
|
29
29
|
import 'open';
|
|
30
|
-
import './index-hoHfGrjg.js';
|
|
31
|
-
import './ejs-DirFZbza.js';
|
|
32
30
|
import 'marked';
|
|
33
31
|
import 'marked-terminal';
|
|
34
32
|
import 'qrcode';
|
|
35
|
-
import { u as useAppleBundleId } from './useAppleBundleId-
|
|
33
|
+
import { u as useAppleBundleId } from './useAppleBundleId-BeGViMe7.js';
|
|
36
34
|
|
|
37
35
|
const AppleAppDetails = (props) => {
|
|
38
36
|
const { data, isLoading } = useAppleApp(props);
|
|
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { QueryClientProvider } from '@tanstack/react-query';
|
|
3
3
|
import { useScreenSize } from 'fullscreen-ink';
|
|
4
4
|
import { Box } from 'ink';
|
|
5
|
-
import {
|
|
5
|
+
import { X as queryClient, Y as CommandProvider } from './index-CmuXyPed.js';
|
|
6
6
|
import 'axios';
|
|
7
7
|
import 'node:fs';
|
|
8
8
|
import 'crypto-js';
|
|
@@ -19,7 +19,6 @@ import 'react';
|
|
|
19
19
|
import 'socket.io-client';
|
|
20
20
|
import 'fast-glob';
|
|
21
21
|
import 'yazl';
|
|
22
|
-
import { b as CommandProvider } from './index-hoHfGrjg.js';
|
|
23
22
|
|
|
24
23
|
const Command = ({ children, command }) => {
|
|
25
24
|
const { width } = useScreenSize();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
3
|
-
import { C as Command } from './Command-
|
|
2
|
+
import { Z as GameProvider } from './index-CmuXyPed.js';
|
|
3
|
+
import { C as Command } from './Command-CHh8RDXK.js';
|
|
4
4
|
|
|
5
5
|
const CommandGame = ({ children, command }) => /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
|
|
6
6
|
|
|
@@ -3,7 +3,7 @@ import { useQueryClient } from '@tanstack/react-query';
|
|
|
3
3
|
import axios from 'axios';
|
|
4
4
|
import { Box } from 'ink';
|
|
5
5
|
import { useContext } from 'react';
|
|
6
|
-
import {
|
|
6
|
+
import { R as GameContext, t as getAuthedHeaders, s as API_URL, a0 as cacheKeys } from './index-CmuXyPed.js';
|
|
7
7
|
import 'ink-spinner';
|
|
8
8
|
import 'node:crypto';
|
|
9
9
|
import 'node:fs';
|
|
@@ -14,7 +14,6 @@ import 'readline-sync';
|
|
|
14
14
|
import 'luxon';
|
|
15
15
|
import 'isomorphic-git';
|
|
16
16
|
import '@oclif/core';
|
|
17
|
-
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-CwKeW0ED.js';
|
|
18
17
|
import 'fast-glob';
|
|
19
18
|
import 'uuid';
|
|
20
19
|
import 'yazl';
|
|
@@ -24,12 +23,10 @@ import 'string-length';
|
|
|
24
23
|
import 'strip-ansi';
|
|
25
24
|
import 'open';
|
|
26
25
|
import '@inkjs/ui';
|
|
27
|
-
import './ejs-DirFZbza.js';
|
|
28
26
|
import 'marked';
|
|
29
27
|
import 'marked-terminal';
|
|
30
28
|
import 'qrcode';
|
|
31
29
|
import { R as RunWithSpinner } from './RunWithSpinner-DucRnFp6.js';
|
|
32
|
-
import { G as GameContext } from './index-hoHfGrjg.js';
|
|
33
30
|
|
|
34
31
|
const CreateKeystore = ({ onComplete, onError, ...boxProps }) => {
|
|
35
32
|
const { gameId } = useContext(GameContext);
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { Text, Box } from 'ink';
|
|
3
3
|
import { useState, useEffect, useContext } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { g as getShortUUID, f as getShortDate, P as Platform, N as makeHumanReadable, O as getProject, Q as getProjectPlatformProgress, R as GameContext, S as CommandContext } from './index-CmuXyPed.js';
|
|
5
5
|
import 'ink-spinner';
|
|
6
|
-
import { g as getShortUUID, m as makeHumanReadable } from './index-CJWMt1s-.js';
|
|
7
6
|
import '@tanstack/react-query';
|
|
8
7
|
import 'axios';
|
|
9
8
|
import 'luxon';
|
|
@@ -19,12 +18,10 @@ import { S as StatusTable } from './StatusTable-DzRWcMr4.js';
|
|
|
19
18
|
import 'open';
|
|
20
19
|
import '@inkjs/ui';
|
|
21
20
|
import 'node:path';
|
|
22
|
-
import './ejs-DirFZbza.js';
|
|
23
21
|
import 'marked';
|
|
24
22
|
import 'marked-terminal';
|
|
25
23
|
import { N as NextSteps } from './NextSteps-DbJHmscQ.js';
|
|
26
24
|
import 'qrcode';
|
|
27
|
-
import { G as GameContext, C as CommandContext } from './index-hoHfGrjg.js';
|
|
28
25
|
|
|
29
26
|
function isPlatformConfigured(platform, progress) {
|
|
30
27
|
if (!progress) return false;
|
|
@@ -11,7 +11,7 @@ import 'readline-sync';
|
|
|
11
11
|
import 'luxon';
|
|
12
12
|
import 'axios';
|
|
13
13
|
import 'isomorphic-git';
|
|
14
|
-
import {
|
|
14
|
+
import { X as queryClient, a0 as cacheKeys, P as Platform, C as CredentialsType, R as GameContext } from './index-CmuXyPed.js';
|
|
15
15
|
import '@oclif/core';
|
|
16
16
|
import { useMutation } from '@tanstack/react-query';
|
|
17
17
|
import 'crypto-js';
|
|
@@ -24,13 +24,10 @@ import 'string-length';
|
|
|
24
24
|
import 'strip-ansi';
|
|
25
25
|
import 'open';
|
|
26
26
|
import '@inkjs/ui';
|
|
27
|
-
import './ejs-DirFZbza.js';
|
|
28
27
|
import 'marked';
|
|
29
28
|
import 'marked-terminal';
|
|
30
29
|
import 'qrcode';
|
|
31
|
-
import {
|
|
32
|
-
import { c as cacheKeys } from './useAndroidServiceAccountTestResult-CwKeW0ED.js';
|
|
33
|
-
import { i as importCredential } from './import-BpGyif-m.js';
|
|
30
|
+
import { i as importCredential } from './import-DGCqCAcC.js';
|
|
34
31
|
|
|
35
32
|
async function importKeystore({ log = () => {
|
|
36
33
|
}, ...opt }) {
|