@makefully/adaptfully 3.16.1 → 4.1.0
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/CHANGELOG.md +20 -0
- package/README.md +25 -21
- package/docs/credentials/README.md +50 -0
- package/docs/credentials/android.md +124 -0
- package/docs/credentials/ios.md +182 -0
- package/docs/credentials/steam.md +99 -0
- package/lib/node/android-keystore.js +243 -0
- package/lib/node/apple-signing.js +392 -0
- package/lib/node/index.js +20 -1
- package/lib/node/packagers/base.js +3 -3
- package/lib/node/packagers/index.js +0 -3
- package/lib/node/pipeline.js +11 -3
- package/lib/node/publish-credentials.js +47 -1
- package/lib/node/registrations.js +5 -2
- package/package.json +3 -2
- package/lib/node/packagers/cordova.js +0 -44
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## 4.1.0 — 2026-09-04
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`adaptfully android-keystore`** — Generate debug/release keystores with `keytool` and write `assets/meta/deployments/android/build.json`.
|
|
10
|
+
- **`adaptfully apple-signing`** — Generate CSR/key (OpenSSL), export `.p12` from an Apple `.cer`, place provisioning profiles under `ios/apple/`, optional `apple.p12Password` in `build.json`.
|
|
11
|
+
- **Credential setup guides** — First-time walkthroughs under [`docs/credentials/`](docs/credentials/README.md) for iOS, Android, and Steam (full manual steps + helper skip markers).
|
|
12
|
+
|
|
13
|
+
## 4.0.0 — 2026-09-03
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- **Cordova / PhoneGap** — Dropped `CordovaPackager`, `packager: "cordova"`, and the `cordova` package keyword. Android/iOS prebuild and Wrapfully family resolution are Capacitor-only.
|
|
18
|
+
- **`CordovaPackager` export** — No longer exported from `@makefully/adaptfully`.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **`resolveFamily(..., 'cordova')`** — Throws an explicit error directing clients to Capacitor.
|
|
23
|
+
- **Major version** — Breaking for projects still configured with Cordova.
|
|
24
|
+
|
|
5
25
|
## 3.16.1 — 2026-09-03
|
|
6
26
|
|
|
7
27
|
### Fixed
|
package/README.md
CHANGED
|
@@ -29,6 +29,8 @@ adaptfully deploy steam # prebuild + POST to Wrapfully ste
|
|
|
29
29
|
adaptfully steam-publish # one-time: log in with steamcmd → assets/meta/deployments/steam/steam.json
|
|
30
30
|
adaptfully google-publish --from ./sa.json # one-time: import Play service account → deployments/android/google.json
|
|
31
31
|
adaptfully apple-publish # one-time: write App Store Connect creds → deployments/ios/apple.json
|
|
32
|
+
adaptfully android-keystore # one-time: generate keystores + android build.json
|
|
33
|
+
adaptfully apple-signing # one-time: CSR / .p12 / provisioning files under ios/apple/
|
|
32
34
|
```
|
|
33
35
|
|
|
34
36
|
| Stage | What it does |
|
|
@@ -39,6 +41,10 @@ adaptfully apple-publish # one-time: write App Store Connec
|
|
|
39
41
|
| `steam-publish` | One-time local setup: install steamcmd, interactive login, write the `steam` deployment's `steam.json` (also updates `.gitignore`) |
|
|
40
42
|
| `google-publish` | One-time local setup: import a Play Console service-account JSON into the `android` deployment folder (also updates `.gitignore`) |
|
|
41
43
|
| `apple-publish` | One-time local setup: write App Store Connect credentials into the `ios` deployment folder (also updates `.gitignore`) |
|
|
44
|
+
| `android-keystore` | One-time local setup: generate debug/release keystores and write `android` `build.json` (also updates `.gitignore`) |
|
|
45
|
+
| `apple-signing` | One-time local setup: CSR → Apple `.cer` → `.p12` / provisioning profiles under `ios/apple/` (also updates `.gitignore`) |
|
|
46
|
+
|
|
47
|
+
First-time walkthroughs (manual steps + helper skip markers): [docs/credentials/](docs/credentials/README.md).
|
|
42
48
|
|
|
43
49
|
`wrapfully-deploy` is a compatibility alias for `adaptfully deploy` when invoked with a Wrapfully builder name (`steam`, `win`, `android`, etc.).
|
|
44
50
|
|
|
@@ -159,16 +165,15 @@ Standard plugin keys load bundled Adaptfully runtime scripts and emit an inline
|
|
|
159
165
|
|
|
160
166
|
Wrapfully builders (`steam`, `win`, `mac`, `android`, etc.) map to platform keys via defaults (`win` → `steam`) or an explicit `builders` array on the platform config.
|
|
161
167
|
|
|
162
|
-
Each platform entry may set a **`packager`** (`web`, `electron`,
|
|
168
|
+
Each platform entry may set a **`packager`** (`web`, `electron`, or `capacitor`). Defaults to **`web`** — copy deploy and inject HTML only. Packagers are implemented as classes (`WebPackager`, `ElectronPackager`, `CapacitorPackager`) that handle prebuild output for their target platforms.
|
|
163
169
|
|
|
164
170
|
| Packager | Prebuild adds |
|
|
165
171
|
|----------|---------------|
|
|
166
172
|
| `web` | `game-config.js` for **`uwp`** platform prebuilds |
|
|
167
173
|
| `electron` | `main.js` (Electron shell); `preload.js` when **`steam-auth`** is registered |
|
|
168
|
-
| `cordova` | `cordova.js` stub, `game-config.js`, CSP/viewport HTML extras |
|
|
169
174
|
| `capacitor` | `game-config.js`, Capacitor CSP/viewport; `social-login-config.js` when **`social-auth`** is registered |
|
|
170
175
|
|
|
171
|
-
Android/iOS Wrapfully builds
|
|
176
|
+
Android/iOS Wrapfully builds use the **`capacitor`** builder family. Cordova/PhoneGap is no longer supported.
|
|
172
177
|
|
|
173
178
|
**`steam-auth` requires `packager: "electron"`** and `platforms.<name>.steamId` (Steamworks app ID for the client preload). Steam **upload** app IDs live separately in each Steam deployment’s `manifest.json` — see Wrapfully docs.
|
|
174
179
|
|
|
@@ -461,10 +466,6 @@ Standard npm fields (`name`, `version`, `description`) are used directly. Add a
|
|
|
461
466
|
}
|
|
462
467
|
}
|
|
463
468
|
},
|
|
464
|
-
"properties": [
|
|
465
|
-
{ "tag": "plugin", "name": "cordova-plugin-inappbrowser" },
|
|
466
|
-
{ "tag": "allow-navigation", "href": "*" }
|
|
467
|
-
]
|
|
468
469
|
}
|
|
469
470
|
}
|
|
470
471
|
```
|
|
@@ -472,13 +473,13 @@ Standard npm fields (`name`, `version`, `description`) are used directly. Add a
|
|
|
472
473
|
| Field | Used by | Description |
|
|
473
474
|
|-------|---------|-------------|
|
|
474
475
|
| `title` | All | Display name shown in stores and app shells |
|
|
475
|
-
| `packageName` |
|
|
476
|
-
| `publisherDisplayName` |
|
|
476
|
+
| `packageName` | Capacitor, Electron, UWP, Play upload | Reverse-DNS identifier (`com.company.game`) |
|
|
477
|
+
| `publisherDisplayName` | Electron, web | Short publisher name |
|
|
477
478
|
| `publisherFullName` | Electron | Legal entity name for copyright |
|
|
478
|
-
| `publisherWebsite` |
|
|
479
|
-
| `publisherEmailAddress` |
|
|
479
|
+
| `publisherWebsite` | Web | Company URL |
|
|
480
|
+
| `publisherEmailAddress` | Optional | Contact email |
|
|
480
481
|
| `scope` | Web/PWA | Base URL scope for the web app |
|
|
481
|
-
| `themeColor` |
|
|
482
|
+
| `themeColor` | Capacitor, Electron, UWP, web | Loading screen / theme color |
|
|
482
483
|
| `twitterId` | Web | Twitter handle for meta tags |
|
|
483
484
|
| `deployFolder` | Client | Neutral deploy directory staged before prebuild (default: `deploy`) |
|
|
484
485
|
| `htmlInjections` | Prebuild | Deploy-relative HTML paths to inject (default: `["index.html"]`) |
|
|
@@ -486,11 +487,10 @@ Standard npm fields (`name`, `version`, `description`) are used directly. Add a
|
|
|
486
487
|
| `platforms` | Prebuild | Per-platform registration maps (see [Adaptfully runtime](#adaptfully-runtime)) |
|
|
487
488
|
| `platforms.<name>.builder` | Build/deploy | Override Wrapfully builder for a platform (default: `web` → `webapp`, others match platform key) |
|
|
488
489
|
| `platforms.<name>.builders` | wrapfully-deploy | Map additional Wrapfully builder names to a platform |
|
|
489
|
-
| `platforms.<name>.packager` | Prebuild | `web` (default), `electron`,
|
|
490
|
+
| `platforms.<name>.packager` | Prebuild | `web` (default), `electron`, or `capacitor` — selects the packager class that adds platform-specific files during prebuild |
|
|
490
491
|
| `platforms.<name>.steamId` | Electron + steam-auth | Steamworks app ID baked into `preload.js` (client). Upload app IDs belong in the Steam deployment `manifest.json` |
|
|
491
492
|
| `platforms.<name>.socialLogin` | Capacitor + social-auth | Capgo provider config (`providers`, `google.webClientId`, `apple.clientId`, optional `defaultProvider`) |
|
|
492
493
|
| `platforms.<name>.<configField>` | Build/deploy | Overrides the matching top-level `config.*` default for that platform only (e.g. `platforms.android.packageName`, `platforms.ios.title`). Does not apply to control fields: `packager`, `registrations`, `builder`, `builders`, `deployments`, `steamId`, `socialLogin`, `steamworks` |
|
|
493
|
-
| `properties` | Cordova | Cordova config.xml entries (plugins, allow-navigation, etc.) |
|
|
494
494
|
|
|
495
495
|
Top-level `config.*` values are **defaults**. Any non-control field on `config.platforms.<name>` overrides the default when that platform is built or deployed. Example:
|
|
496
496
|
|
|
@@ -553,10 +553,14 @@ For a single platform, pass the specific builder name.
|
|
|
553
553
|
|
|
554
554
|
### Platform package requirements
|
|
555
555
|
|
|
556
|
+
**First-time setup:** see [docs/credentials/](docs/credentials/README.md) for iOS, Android, and Steam walkthroughs (CLI helpers + full manual steps).
|
|
557
|
+
|
|
556
558
|
Signing keys, provisioning profiles, and store credentials go in the deployment folder `./assets/meta/deployments/<deployment>/` on disk (the selected deployment is sent as `meta/publish/` in the zip). The examples below use `<deployment>` as a placeholder for the target key (e.g. `steam`, `web-prod`). **These files contain secrets** — add them to `.gitignore` and never commit them to a public repository. (Projects that have not adopted the `deployments/` layout may still place these under the legacy `./assets/meta/publish/`.)
|
|
557
559
|
|
|
558
560
|
#### Android (`android`, `android-dev`)
|
|
559
561
|
|
|
562
|
+
First-time setup: [docs/credentials/android.md](docs/credentials/android.md) (`android-keystore`, `google-publish`).
|
|
563
|
+
|
|
560
564
|
Place keystore files in `assets/meta/deployments/<deployment>/android/`. Include `assets/meta/deployments/<deployment>/build.json`:
|
|
561
565
|
|
|
562
566
|
```json
|
|
@@ -608,7 +612,9 @@ The file looks like:
|
|
|
608
612
|
|
|
609
613
|
#### Apple (`ios`, `ios-dev`, `ios-sim`, `mac`)
|
|
610
614
|
|
|
611
|
-
|
|
615
|
+
First-time setup: [docs/credentials/ios.md](docs/credentials/ios.md) (`apple-signing`, `apple-publish`).
|
|
616
|
+
|
|
617
|
+
**Capacitor iOS** signing is file-based under the deployment folder:
|
|
612
618
|
|
|
613
619
|
```
|
|
614
620
|
assets/meta/deployments/<deployment>/
|
|
@@ -617,11 +623,10 @@ assets/meta/deployments/<deployment>/
|
|
|
617
623
|
apple/app-store.mobileprovision # release
|
|
618
624
|
apple/development.p12 # ios-dev device
|
|
619
625
|
apple/development.mobileprovision # ios-dev device
|
|
626
|
+
build.json # optional: { "apple": { "p12Password": "..." } }
|
|
620
627
|
```
|
|
621
628
|
|
|
622
|
-
`adaptfully build` (zip-only) still packages this deployment folder for Capacitor
|
|
623
|
-
|
|
624
|
-
Optional `build.json` may still be present for tooling compatibility; Capacitor does not require its `ios.*` code-sign fields.
|
|
629
|
+
`adaptfully build` (zip-only) still packages this deployment folder for Capacitor so device debug builds can sign. Optional `build.json` may set `apple.p12Password` for the `.p12` passphrase (defaults to empty when omitted). Team ID and profile UUID are read from the `.mobileprovision`. Enable **Sign in with Apple** on the App ID when using Capgo Apple auth.
|
|
625
630
|
|
|
626
631
|
To deploy to the App Store, include `assets/meta/deployments/<deployment>/apple.json`. The easiest path is:
|
|
627
632
|
|
|
@@ -642,12 +647,11 @@ The file looks like:
|
|
|
642
647
|
```
|
|
643
648
|
|
|
644
649
|
iOS IPA upload uses `username` + `password` via `xcrun altool --upload-app`. `category` / `identity` matter more for macOS Electron signing/notarization.
|
|
645
|
-
#### Cordova
|
|
646
|
-
|
|
647
|
-
Set `packager: "cordova"` on an `android` or `ios` platform to use Cordova instead of Capacitor. Requires the Android and Apple package requirements above.
|
|
648
650
|
|
|
649
651
|
#### Steam (`steam`, `steam-dev`)
|
|
650
652
|
|
|
653
|
+
First-time setup: [docs/credentials/steam.md](docs/credentials/steam.md) (`steam-publish`).
|
|
654
|
+
|
|
651
655
|
`steam-dev` builds debug Electron binaries for Windows, Mac, and Linux without uploading to Steam. No `steam.json` credentials are required.
|
|
652
656
|
|
|
653
657
|
For release uploads, run **`adaptfully steam-publish`** once on your machine. It installs steamcmd if needed, logs you in interactively (enter a Steam Guard code if prompted), and writes `assets/meta/deployments/steam/steam.json`:
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Credential setup guides
|
|
2
|
+
|
|
3
|
+
One-time local setup for signing and store-upload credentials under
|
|
4
|
+
`assets/meta/deployments/<deployment>/`.
|
|
5
|
+
|
|
6
|
+
These guides stay focused on **files in your game repo** and Adaptfully CLI helpers.
|
|
7
|
+
They do not cover which OS builds the artifact.
|
|
8
|
+
|
|
9
|
+
## Guides
|
|
10
|
+
|
|
11
|
+
| Platform | Guide | Typical deployment folder |
|
|
12
|
+
|----------|--------|---------------------------|
|
|
13
|
+
| iOS | [ios.md](./ios.md) | `assets/meta/deployments/ios/` |
|
|
14
|
+
| Android | [android.md](./android.md) | `assets/meta/deployments/android/` |
|
|
15
|
+
| Steam | [steam.md](./steam.md) | `assets/meta/deployments/steam/` |
|
|
16
|
+
|
|
17
|
+
## Helpers
|
|
18
|
+
|
|
19
|
+
| Command | Writes |
|
|
20
|
+
|---------|--------|
|
|
21
|
+
| `npx adaptfully android-keystore` | `android/*.keystore` + `build.json` |
|
|
22
|
+
| `npx adaptfully google-publish --from <sa.json>` | `google.json` |
|
|
23
|
+
| `npx adaptfully apple-signing` | CSR/key work files, `apple/*.p12`, optional `.mobileprovision` + `build.json` `apple.p12Password` |
|
|
24
|
+
| `npx adaptfully apple-publish` | `apple.json` (App Store Connect upload login) |
|
|
25
|
+
| `npx adaptfully steam-publish` | `steam.json` |
|
|
26
|
+
|
|
27
|
+
Each guide lists the **full manual process** and marks **Helper** steps with **skip to step N** when you use a command instead.
|
|
28
|
+
|
|
29
|
+
## Debug vs release
|
|
30
|
+
|
|
31
|
+
| Goal | Credentials needed? |
|
|
32
|
+
|------|---------------------|
|
|
33
|
+
| `android-dev` / local debug APK | Project debug keystore (recommended) or host default |
|
|
34
|
+
| `android` Play release | Release keystore + `google.json` |
|
|
35
|
+
| `ios-dev` device IPA | `development.p12` + `development.mobileprovision` |
|
|
36
|
+
| `ios` App Store | `distribution.p12` + `app-store.mobileprovision` + `apple.json` |
|
|
37
|
+
| `ios-sim` | No device signing files |
|
|
38
|
+
| `steam-dev` | None |
|
|
39
|
+
| `steam` upload | `steam.json` |
|
|
40
|
+
|
|
41
|
+
## Secrets
|
|
42
|
+
|
|
43
|
+
Do not commit credential files. Helpers update `.gitignore` with Adaptfully patterns such as:
|
|
44
|
+
|
|
45
|
+
- `assets/meta/deployments/**/build.json`
|
|
46
|
+
- `assets/meta/deployments/**/google.json`
|
|
47
|
+
- `assets/meta/deployments/**/apple.json`
|
|
48
|
+
- `assets/meta/deployments/**/steam.json`
|
|
49
|
+
- `assets/meta/deployments/**/android/`
|
|
50
|
+
- `assets/meta/deployments/**/apple/`
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Android credentials
|
|
2
|
+
|
|
3
|
+
Set up signing keystores and (for Play uploads) a Google Play service account.
|
|
4
|
+
|
|
5
|
+
**Default folder:** `assets/meta/deployments/android/`
|
|
6
|
+
|
|
7
|
+
## Recommended path
|
|
8
|
+
|
|
9
|
+
1. **Helper:** `npx adaptfully android-keystore` — creates debug + release keystores and `build.json`.
|
|
10
|
+
2. In Google Play Console, create a service account and download its JSON key (manual).
|
|
11
|
+
3. **Helper:** `npx adaptfully google-publish --from ./path/to/sa.json` — writes `google.json`.
|
|
12
|
+
|
|
13
|
+
Debug-only: `npx adaptfully android-keystore --debug-only`.
|
|
14
|
+
|
|
15
|
+
## What you need
|
|
16
|
+
|
|
17
|
+
| Goal | Files |
|
|
18
|
+
|------|--------|
|
|
19
|
+
| Debug / `android-dev` | `android/debug.keystore` + `build.json` `android.debug` block |
|
|
20
|
+
| Play release / `android` | `android/release.keystore` + `build.json` `android.release` + `google.json` |
|
|
21
|
+
|
|
22
|
+
`build.json` keystore paths are relative to the deployment folder (the directory that contains `build.json`).
|
|
23
|
+
|
|
24
|
+
## Full steps
|
|
25
|
+
|
|
26
|
+
### 1. Prerequisites
|
|
27
|
+
|
|
28
|
+
- JDK on PATH so `keytool` works (`keytool -help`).
|
|
29
|
+
- A Play Console app (for release uploads).
|
|
30
|
+
|
|
31
|
+
### 2. Helper: generate keystores
|
|
32
|
+
|
|
33
|
+
**Helper:** `npx adaptfully android-keystore [--deployment android] [--debug-only] [--yes]`
|
|
34
|
+
|
|
35
|
+
If you run this, **skip to step 5** (Play service account). For debug-only, you can stop after this step.
|
|
36
|
+
|
|
37
|
+
Flags:
|
|
38
|
+
|
|
39
|
+
- `--debug-only` — only the debug keystore + `build.json` debug block
|
|
40
|
+
- `--yes` — overwrite existing `build.json` without prompting
|
|
41
|
+
- `--alias`, `--store-password`, `--key-password`, `--cn` — non-interactive release keystore fields
|
|
42
|
+
|
|
43
|
+
### 3. Manual alternative: create keystores with keytool
|
|
44
|
+
|
|
45
|
+
Skip this if you used step 2.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mkdir -p assets/meta/deployments/android/android
|
|
49
|
+
|
|
50
|
+
keytool -genkeypair -v \
|
|
51
|
+
-keystore assets/meta/deployments/android/android/debug.keystore \
|
|
52
|
+
-alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 \
|
|
53
|
+
-storepass android -keypass android \
|
|
54
|
+
-dname "CN=Android Debug,O=Android,C=US"
|
|
55
|
+
|
|
56
|
+
keytool -genkeypair -v \
|
|
57
|
+
-keystore assets/meta/deployments/android/android/release.keystore \
|
|
58
|
+
-alias upload -keyalg RSA -keysize 2048 -validity 10000 \
|
|
59
|
+
-storepass "(your store password)" -keypass "(your key password)" \
|
|
60
|
+
-dname "CN=Your Studio,O=Your Studio,C=US"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 4. Manual alternative: write `build.json`
|
|
64
|
+
|
|
65
|
+
Skip this if you used step 2.
|
|
66
|
+
|
|
67
|
+
Create `assets/meta/deployments/android/build.json`:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"android": {
|
|
72
|
+
"debug": {
|
|
73
|
+
"keystore": "./android/debug.keystore",
|
|
74
|
+
"packageType": "apk",
|
|
75
|
+
"storePassword": "android",
|
|
76
|
+
"alias": "androiddebugkey",
|
|
77
|
+
"password": "android",
|
|
78
|
+
"keystoreType": ""
|
|
79
|
+
},
|
|
80
|
+
"release": {
|
|
81
|
+
"keystore": "./android/release.keystore",
|
|
82
|
+
"packageType": "bundle",
|
|
83
|
+
"storePassword": "(your store password)",
|
|
84
|
+
"alias": "upload",
|
|
85
|
+
"password": "(your key password)",
|
|
86
|
+
"keystoreType": ""
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 5. Create a Play Console service account (manual)
|
|
93
|
+
|
|
94
|
+
Required only for Play uploads (`adaptfully release android` / deploy to Google).
|
|
95
|
+
|
|
96
|
+
1. Open [Google Play Console](https://play.google.com/console/) → **Setup** → **API access** (or Google Cloud IAM linked to the Play developer account).
|
|
97
|
+
2. Create or select a service account with permission to manage releases.
|
|
98
|
+
3. Download a JSON key for that service account.
|
|
99
|
+
4. Invite the service account email in Play Console with the right app permissions.
|
|
100
|
+
|
|
101
|
+
### 6. Helper: import `google.json`
|
|
102
|
+
|
|
103
|
+
**Helper:** `npx adaptfully google-publish --from ./path/to/service-account.json [--deployment android]`
|
|
104
|
+
|
|
105
|
+
If you run this, **skip to step 8**.
|
|
106
|
+
|
|
107
|
+
### 7. Manual alternative: copy the service account JSON
|
|
108
|
+
|
|
109
|
+
Skip this if you used step 6.
|
|
110
|
+
|
|
111
|
+
Copy the downloaded key to `assets/meta/deployments/android/google.json`. Ensure `manifest.json` includes `"type": "google"` (helpers write this for you).
|
|
112
|
+
|
|
113
|
+
### 8. Done when
|
|
114
|
+
|
|
115
|
+
- [ ] `build.json` exists with debug (and release, if shipping)
|
|
116
|
+
- [ ] Keystore files exist at the paths listed in `build.json`
|
|
117
|
+
- [ ] For Play uploads: `google.json` is present and the service account can access the app
|
|
118
|
+
- [ ] Credential paths are gitignored
|
|
119
|
+
|
|
120
|
+
## Notes
|
|
121
|
+
|
|
122
|
+
- Prefer **project-owned** keystores so debug installs stay reproducible across machines.
|
|
123
|
+
- Some build hosts supply a default debug keystore when `build.json` is missing; do not rely on that for shared projects.
|
|
124
|
+
- Keep release keystore passwords offline; losing the release keystore can block Play updates for that signing key.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# iOS credentials
|
|
2
|
+
|
|
3
|
+
Set up Apple signing files and (for App Store uploads) App Store Connect login credentials.
|
|
4
|
+
|
|
5
|
+
**Default folder:** `assets/meta/deployments/ios/`
|
|
6
|
+
|
|
7
|
+
You can create signing material on **macOS or Windows**. The sections below branch where the local tools differ.
|
|
8
|
+
|
|
9
|
+
## Recommended path
|
|
10
|
+
|
|
11
|
+
1. **Helper:** `npx adaptfully apple-signing --kind development` (and/or `--kind distribution`) — generates a CSR, walks portal checklist, exports `.p12`, optionally copies the provisioning profile.
|
|
12
|
+
2. Complete the Apple Developer portal steps the helper prints (upload CSR, download `.cer` / `.mobileprovision`).
|
|
13
|
+
3. For App Store uploads only — **Helper:** `npx adaptfully apple-publish` — writes `apple.json`.
|
|
14
|
+
|
|
15
|
+
Simulator builds (`ios-sim`) need no device signing files.
|
|
16
|
+
|
|
17
|
+
## What you need
|
|
18
|
+
|
|
19
|
+
| Goal | Files |
|
|
20
|
+
|------|--------|
|
|
21
|
+
| Device debug (`ios-dev`) | `apple/development.p12`, `apple/development.mobileprovision` |
|
|
22
|
+
| App Store (`ios` release) | `apple/distribution.p12`, `apple/app-store.mobileprovision`, `apple.json` |
|
|
23
|
+
| Simulator (`ios-sim`) | None |
|
|
24
|
+
|
|
25
|
+
Optional `build.json` next to `apple/`:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"apple": {
|
|
30
|
+
"p12Password": "(passphrase used when exporting the .p12)"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If omitted, the build pipeline treats the passphrase as empty.
|
|
36
|
+
|
|
37
|
+
## Prerequisites
|
|
38
|
+
|
|
39
|
+
- Apple Developer Program membership.
|
|
40
|
+
- An App ID matching your platform `packageName`.
|
|
41
|
+
- If you use Capgo Apple social login: enable **Sign in with Apple** on that App ID.
|
|
42
|
+
- For development profiles: registered device UDIDs.
|
|
43
|
+
- OpenSSL on PATH for the helper / Windows manual path (`openssl version`). macOS Keychain users can still use the helper if OpenSSL is available (e.g. via Homebrew or Xcode CLT tooling).
|
|
44
|
+
|
|
45
|
+
## Full steps
|
|
46
|
+
|
|
47
|
+
### 1. Helper: CSR, `.p12`, and profile placement
|
|
48
|
+
|
|
49
|
+
**Helper:** `npx adaptfully apple-signing [--kind development|distribution] [--csr-only] [--from-cer path] [--provision path] [--p12-password secret]`
|
|
50
|
+
|
|
51
|
+
If you run the full interactive helper (not `--csr-only`), **skip to step 7** after it finishes (or step 8 for App Store Connect login).
|
|
52
|
+
|
|
53
|
+
Useful flags:
|
|
54
|
+
|
|
55
|
+
- `--csr-only` — stop after writing the CSR; later continue with `--from-cer`
|
|
56
|
+
- `--from-cer ./Certificates.cer` — skip CSR generation when `apple/.work/private.key` already exists
|
|
57
|
+
- `--provision ./Profile.mobileprovision` — copy/rename into `apple/`
|
|
58
|
+
- `--kind development` or `--kind distribution`
|
|
59
|
+
|
|
60
|
+
Work files live under `assets/meta/deployments/ios/apple/.work/` by default (`private.key` + CSR).
|
|
61
|
+
|
|
62
|
+
### 2. Create a Certificate Signing Request (manual)
|
|
63
|
+
|
|
64
|
+
Skip this if you used step 1 (or will use `--from-cer` with an existing key from step 1).
|
|
65
|
+
|
|
66
|
+
#### macOS (Keychain Access)
|
|
67
|
+
|
|
68
|
+
1. Open **Keychain Access** → **Certificate Assistant** → **Request a Certificate From a Certificate Authority…**
|
|
69
|
+
2. Enter your email and common name; choose **Saved to disk**.
|
|
70
|
+
3. Save the `.certSigningRequest` file.
|
|
71
|
+
|
|
72
|
+
#### Windows / OpenSSL (any OS)
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
mkdir -p assets/meta/deployments/ios/apple/.work
|
|
76
|
+
cd assets/meta/deployments/ios/apple/.work
|
|
77
|
+
|
|
78
|
+
openssl genrsa -out private.key 2048
|
|
79
|
+
openssl req -new -key private.key -out CertificateSigningRequest.certSigningRequest -subj "/emailAddress=you@example.com/CN=Your Name/C=US"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Create the certificate on the Apple Developer site (manual)
|
|
83
|
+
|
|
84
|
+
Always required — Apple must issue the certificate.
|
|
85
|
+
|
|
86
|
+
1. Open [Certificates](https://developer.apple.com/account/resources/certificates/list).
|
|
87
|
+
2. Create **Apple Development** (device debug) and/or **Apple Distribution** (App Store).
|
|
88
|
+
3. Upload the CSR from step 1 or 2.
|
|
89
|
+
4. Download the `.cer` file.
|
|
90
|
+
|
|
91
|
+
### 4. Export a `.p12` (manual)
|
|
92
|
+
|
|
93
|
+
Skip this if step 1 already exported `development.p12` / `distribution.p12`.
|
|
94
|
+
|
|
95
|
+
#### macOS (Keychain Access)
|
|
96
|
+
|
|
97
|
+
1. Double-click the `.cer` to import it into Keychain Access.
|
|
98
|
+
2. Find the certificate (and its private key) → **Export…** → `.p12`.
|
|
99
|
+
3. Choose a passphrase; remember it for `build.json` `apple.p12Password`.
|
|
100
|
+
4. Save as `assets/meta/deployments/ios/apple/development.p12` or `distribution.p12`.
|
|
101
|
+
|
|
102
|
+
#### Windows / OpenSSL
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# From the folder that has private.key and the downloaded .cer
|
|
106
|
+
openssl x509 -in Certificates.cer -inform DER -out cert.pem -outform PEM
|
|
107
|
+
openssl pkcs12 -export -inkey private.key -in cert.pem -out development.p12
|
|
108
|
+
# or distribution.p12 — use the matching kind
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Move the `.p12` to `assets/meta/deployments/ios/apple/`.
|
|
112
|
+
|
|
113
|
+
If DER conversion fails, try importing the `.cer` as PEM directly in the `pkcs12 -export` `-in` argument.
|
|
114
|
+
|
|
115
|
+
### 5. Create and download a provisioning profile (manual)
|
|
116
|
+
|
|
117
|
+
Always required for device / App Store signing.
|
|
118
|
+
|
|
119
|
+
1. Register devices (development) under [Devices](https://developer.apple.com/account/resources/devices/list).
|
|
120
|
+
2. Open [Profiles](https://developer.apple.com/account/resources/profiles/list).
|
|
121
|
+
3. Create a **Development** profile or **App Store** profile for your App ID and certificate.
|
|
122
|
+
4. Download the `.mobileprovision`.
|
|
123
|
+
|
|
124
|
+
### 6. Place the provisioning profile (manual)
|
|
125
|
+
|
|
126
|
+
Skip this if step 1 copied it with `--provision`.
|
|
127
|
+
|
|
128
|
+
Rename/copy to:
|
|
129
|
+
|
|
130
|
+
- Development → `assets/meta/deployments/ios/apple/development.mobileprovision`
|
|
131
|
+
- App Store → `assets/meta/deployments/ios/apple/app-store.mobileprovision`
|
|
132
|
+
|
|
133
|
+
### 7. Optional: record the `.p12` passphrase
|
|
134
|
+
|
|
135
|
+
Skip this if `apple-signing` already wrote `build.json`.
|
|
136
|
+
|
|
137
|
+
Create or merge `assets/meta/deployments/ios/build.json`:
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"apple": {
|
|
142
|
+
"p12Password": "(your .p12 passphrase)"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 8. Helper: App Store Connect login (`apple.json`)
|
|
148
|
+
|
|
149
|
+
Required only for App Store uploads.
|
|
150
|
+
|
|
151
|
+
**Helper:** `npx adaptfully apple-publish [--deployment ios]`
|
|
152
|
+
|
|
153
|
+
If you run this, **skip to step 10**.
|
|
154
|
+
|
|
155
|
+
You need an [app-specific password](https://appleid.apple.com/) for your Apple ID.
|
|
156
|
+
|
|
157
|
+
### 9. Manual alternative: write `apple.json`
|
|
158
|
+
|
|
159
|
+
Skip this if you used step 8.
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"category": "public.app-category.games",
|
|
164
|
+
"identity": "(your team id)",
|
|
165
|
+
"username": "(Apple ID email)",
|
|
166
|
+
"password": "(app-specific password)"
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 10. Done when
|
|
171
|
+
|
|
172
|
+
- [ ] For `ios-dev`: `apple/development.p12` + `apple/development.mobileprovision`
|
|
173
|
+
- [ ] For App Store: `apple/distribution.p12` + `apple/app-store.mobileprovision` + `apple.json`
|
|
174
|
+
- [ ] `apple.p12Password` matches the `.p12` passphrase when the passphrase is non-empty
|
|
175
|
+
- [ ] App ID matches `packageName`; Sign in with Apple enabled if you use Capgo Apple auth
|
|
176
|
+
- [ ] Credential paths are gitignored
|
|
177
|
+
|
|
178
|
+
## Notes
|
|
179
|
+
|
|
180
|
+
- Filenames under `apple/` must match the table above.
|
|
181
|
+
- You can create credentials on Windows even if the IPA is built elsewhere.
|
|
182
|
+
- Re-run `apple-signing --kind …` separately for development and distribution when you need both.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Steam credentials
|
|
2
|
+
|
|
3
|
+
Set up Steamworks upload login for release deploys. Debug Steam builds need no upload credentials.
|
|
4
|
+
|
|
5
|
+
**Default folder:** `assets/meta/deployments/steam/`
|
|
6
|
+
|
|
7
|
+
## Recommended path
|
|
8
|
+
|
|
9
|
+
1. Create or choose a Steamworks **build account** (manual; prefer a dedicated publisher account).
|
|
10
|
+
2. **Helper:** `npx adaptfully steam-publish` — installs steamcmd if needed, logs in interactively, writes `steam.json`.
|
|
11
|
+
3. Set upload `steamId` on the deployment `manifest.json` (and client `platforms.*.steamId` if you use Steamworks auth).
|
|
12
|
+
|
|
13
|
+
## What you need
|
|
14
|
+
|
|
15
|
+
| Goal | Files |
|
|
16
|
+
|------|--------|
|
|
17
|
+
| `steam-dev` (local Electron debug) | None |
|
|
18
|
+
| `steam` release upload | `steam.json` (+ `manifest.json` with upload `steamId`) |
|
|
19
|
+
|
|
20
|
+
## Full steps
|
|
21
|
+
|
|
22
|
+
### 1. Prerequisites
|
|
23
|
+
|
|
24
|
+
- A Steamworks partner app.
|
|
25
|
+
- A Steam account allowed to upload builds (Steam Guard may be enabled).
|
|
26
|
+
|
|
27
|
+
### 2. Helper: write `steam.json`
|
|
28
|
+
|
|
29
|
+
**Helper:** `npx adaptfully steam-publish [--username U] [--password P] [--deployment steam]`
|
|
30
|
+
|
|
31
|
+
If you run this, **skip to step 6**.
|
|
32
|
+
|
|
33
|
+
The helper installs steamcmd under `~/.adaptfully/steamcmd` when needed, logs in (enter a Steam Guard code if prompted), and writes `assets/meta/deployments/steam/steam.json`.
|
|
34
|
+
|
|
35
|
+
### 3. Manual alternative: install steamcmd
|
|
36
|
+
|
|
37
|
+
Skip this if you used step 2.
|
|
38
|
+
|
|
39
|
+
Download steamcmd for your OS from Valve and unpack it somewhere durable.
|
|
40
|
+
|
|
41
|
+
### 4. Manual alternative: log in once
|
|
42
|
+
|
|
43
|
+
Skip this if you used step 2.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
steamcmd +login YOUR_USER YOUR_PASSWORD +quit
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Complete Steam Guard if prompted. After a successful login, steamcmd stores session files under its install directory (`config/config.vdf`, and an `ssfn*` sentry file when Guard is enabled).
|
|
50
|
+
|
|
51
|
+
### 5. Manual alternative: assemble `steam.json`
|
|
52
|
+
|
|
53
|
+
Skip this if you used step 2.
|
|
54
|
+
|
|
55
|
+
Create `assets/meta/deployments/steam/steam.json`:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"username": "(your Steam build account)",
|
|
60
|
+
"password": "(your password)",
|
|
61
|
+
"configVdf": "(base64 of config/config.vdf)",
|
|
62
|
+
"sentryFileName": "(ssfn filename — only with Steam Guard)",
|
|
63
|
+
"sentryFile": "(base64 of the ssfn file — only with Steam Guard)"
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Accounts **without** Steam Guard only need `username`, `password`, and `configVdf`.
|
|
68
|
+
|
|
69
|
+
### 6. App IDs (client vs upload)
|
|
70
|
+
|
|
71
|
+
These are independent:
|
|
72
|
+
|
|
73
|
+
| Setting | Purpose |
|
|
74
|
+
|---------|---------|
|
|
75
|
+
| `config.platforms.<name>.steamId` | Client Steamworks / `steam-auth` |
|
|
76
|
+
| `assets/meta/deployments/steam/manifest.json` → `steamId` | Depot upload target |
|
|
77
|
+
|
|
78
|
+
You can ship with Steam auth and no upload credentials, or upload without client Steamworks.
|
|
79
|
+
|
|
80
|
+
Example `manifest.json`:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"type": "steam",
|
|
85
|
+
"steamId": 480
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 7. Done when
|
|
90
|
+
|
|
91
|
+
- [ ] For uploads: `steam.json` exists and login tokens are valid
|
|
92
|
+
- [ ] Upload `steamId` is set on the deployment manifest
|
|
93
|
+
- [ ] Client `steamId` is set on the platform if you use Steamworks auth
|
|
94
|
+
- [ ] Credential files are gitignored
|
|
95
|
+
|
|
96
|
+
## Notes
|
|
97
|
+
|
|
98
|
+
- Re-run `adaptfully steam-publish` when Steam invalidates the token (new machine, password change, or expired Guard).
|
|
99
|
+
- `steam-dev` never requires `steam.json`.
|