kappmaker 1.0.2 → 1.2.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/README.md +481 -33
- package/dist/cli.js +146 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/adapty-setup.js +5 -4
- package/dist/commands/adapty-setup.js.map +1 -1
- package/dist/commands/android-release-build.d.ts +7 -0
- package/dist/commands/android-release-build.js +51 -0
- package/dist/commands/android-release-build.js.map +1 -0
- package/dist/commands/config.js +11 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create-appstore-app.js +18 -1
- package/dist/commands/create-appstore-app.js.map +1 -1
- package/dist/commands/create-logo.js +16 -5
- package/dist/commands/create-logo.js.map +1 -1
- package/dist/commands/create-play-app.d.ts +2 -0
- package/dist/commands/create-play-app.js +399 -0
- package/dist/commands/create-play-app.js.map +1 -0
- package/dist/commands/create.js +138 -64
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/enhance.js +12 -4
- package/dist/commands/enhance.js.map +1 -1
- package/dist/commands/fastlane-configure.d.ts +1 -0
- package/dist/commands/fastlane-configure.js +9 -0
- package/dist/commands/fastlane-configure.js.map +1 -0
- package/dist/commands/generate-keystore.d.ts +7 -0
- package/dist/commands/generate-keystore.js +14 -0
- package/dist/commands/generate-keystore.js.map +1 -0
- package/dist/commands/generate-screenshots.js +22 -7
- package/dist/commands/generate-screenshots.js.map +1 -1
- package/dist/commands/gpc.d.ts +29 -0
- package/dist/commands/gpc.js +174 -0
- package/dist/commands/gpc.js.map +1 -0
- package/dist/commands/publish.d.ts +10 -0
- package/dist/commands/publish.js +38 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/refactor.d.ts +9 -0
- package/dist/commands/refactor.js +9 -0
- package/dist/commands/refactor.js.map +1 -0
- package/dist/commands/remove-bg.js +12 -4
- package/dist/commands/remove-bg.js.map +1 -1
- package/dist/commands/translate-screenshots.js +22 -8
- package/dist/commands/translate-screenshots.js.map +1 -1
- package/dist/commands/update-version.d.ts +5 -0
- package/dist/commands/update-version.js +21 -0
- package/dist/commands/update-version.js.map +1 -0
- package/dist/services/asc-monetization.service.js +39 -29
- package/dist/services/asc-monetization.service.js.map +1 -1
- package/dist/services/asc.service.d.ts +1 -1
- package/dist/services/asc.service.js +94 -12
- package/dist/services/asc.service.js.map +1 -1
- package/dist/services/fastlane-setup.service.d.ts +1 -0
- package/dist/services/fastlane-setup.service.js +50 -0
- package/dist/services/fastlane-setup.service.js.map +1 -0
- package/dist/services/fastlane.service.js +20 -8
- package/dist/services/fastlane.service.js.map +1 -1
- package/dist/services/firebase.service.js +48 -18
- package/dist/services/firebase.service.js.map +1 -1
- package/dist/services/gpc-data-safety.service.d.ts +11 -0
- package/dist/services/gpc-data-safety.service.js +160 -0
- package/dist/services/gpc-data-safety.service.js.map +1 -0
- package/dist/services/gpc-monetization.service.d.ts +18 -0
- package/dist/services/gpc-monetization.service.js +244 -0
- package/dist/services/gpc-monetization.service.js.map +1 -0
- package/dist/services/gpc.service.d.ts +87 -0
- package/dist/services/gpc.service.js +338 -0
- package/dist/services/gpc.service.js.map +1 -0
- package/dist/services/gradle.service.d.ts +0 -3
- package/dist/services/gradle.service.js +0 -24
- package/dist/services/gradle.service.js.map +1 -1
- package/dist/services/keystore.service.d.ts +6 -0
- package/dist/services/keystore.service.js +44 -0
- package/dist/services/keystore.service.js.map +1 -0
- package/dist/services/publish.service.d.ts +10 -0
- package/dist/services/publish.service.js +59 -0
- package/dist/services/publish.service.js.map +1 -0
- package/dist/services/refactor.service.d.ts +3 -0
- package/dist/services/refactor.service.js +207 -0
- package/dist/services/refactor.service.js.map +1 -0
- package/dist/services/version.service.d.ts +10 -0
- package/dist/services/version.service.js +75 -0
- package/dist/services/version.service.js.map +1 -0
- package/dist/templates/Fastfile.txt +209 -0
- package/dist/templates/data-safety-template.json +5483 -0
- package/dist/templates/googleplay-config.json +71 -0
- package/dist/types/googleplay.d.ts +113 -0
- package/dist/types/googleplay.js +2 -0
- package/dist/types/googleplay.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/utils/config.d.ts +1 -0
- package/dist/utils/config.js +5 -0
- package/dist/utils/config.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -7,6 +7,7 @@ A single `kappmaker create` command can:
|
|
|
7
7
|
- Create a Firebase project, register Android + iOS apps, enable authentication, and download SDK configs
|
|
8
8
|
- Generate an AI-powered app logo with automatic background removal
|
|
9
9
|
- Create an App Store Connect listing with metadata, categories, age rating, subscriptions, privacy declarations, and review contact info
|
|
10
|
+
- Configure an existing Google Play Console app — store listings, subscriptions, one-time in-app products, and the data safety declaration — via a built-in wrapper around the Play Publisher API (no external CLI, no extra dependencies)
|
|
10
11
|
- Set up Adapty subscription products, paywalls, and placements for both iOS and Android
|
|
11
12
|
- Refactor Gradle package names and application IDs
|
|
12
13
|
- Set up the build environment (Android SDK, CocoaPods)
|
|
@@ -49,16 +50,44 @@ kappmaker config init
|
|
|
49
50
|
Or set keys individually:
|
|
50
51
|
|
|
51
52
|
```bash
|
|
52
|
-
kappmaker config set falApiKey <your-key> #
|
|
53
|
-
kappmaker config set imgbbApiKey <your-key> #
|
|
54
|
-
kappmaker config set openaiApiKey <your-key> #
|
|
53
|
+
kappmaker config set falApiKey <your-key> # For AI features (logo, screenshots) — or prompted on first use
|
|
54
|
+
kappmaker config set imgbbApiKey <your-key> # For screenshot translation/generation — or prompted on first use
|
|
55
|
+
kappmaker config set openaiApiKey <your-key> # For generate-screenshots — or prompted on first use
|
|
55
56
|
kappmaker config set templateRepo <your-repo> # Use your own template (default: KAppMaker)
|
|
56
57
|
```
|
|
57
58
|
|
|
58
59
|
See [all config keys](#config-keys) and [external services setup](#external-services--api-keys) for details.
|
|
59
60
|
|
|
61
|
+
## Claude Code Skill
|
|
62
|
+
|
|
63
|
+
If you use [Claude Code](https://claude.ai/code), you can install the `/kappmaker` skill to run any CLI command through natural language — with automatic prerequisite checks, guided setup, and inline error recovery.
|
|
64
|
+
|
|
65
|
+
**Install:**
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npx skills add KAppMaker/KAppMaker-CLI --skill kappmaker
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Or via the Claude Code plugin system:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
/plugin marketplace add KAppMaker/KAppMaker-CLI
|
|
75
|
+
/plugin install kappmaker@KAppMaker-CLI
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Use:**
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
/kappmaker create MyApp
|
|
82
|
+
/kappmaker generate screenshots for my fitness app
|
|
83
|
+
/kappmaker set up App Store Connect
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Claude will check your config, verify API keys are set, and walk you through any missing prerequisites before running the command.
|
|
87
|
+
|
|
60
88
|
## Table of Contents
|
|
61
89
|
|
|
90
|
+
- [Claude Code Skill](#claude-code-skill)
|
|
62
91
|
- [Configuration](#configuration)
|
|
63
92
|
- [Commands Overview](#commands-overview)
|
|
64
93
|
- [Features](#features)
|
|
@@ -68,10 +97,17 @@ See [all config keys](#config-keys) and [external services setup](#external-serv
|
|
|
68
97
|
- [`create <app-name>`](#create-app-name)
|
|
69
98
|
- [`create-logo`](#create-logo)
|
|
70
99
|
- [`create-appstore-app`](#create-appstore-app)
|
|
100
|
+
- [`gpc`](#gpc) — Google Play Console management
|
|
71
101
|
- [`adapty setup`](#adapty-setup)
|
|
72
102
|
- [Image Tools](#image-tools)
|
|
73
103
|
- [`translate-screenshots`](#translate-screenshots-source-dir)
|
|
74
104
|
- [`generate-screenshots`](#generate-screenshots)
|
|
105
|
+
- [`fastlane configure`](#fastlane-configure)
|
|
106
|
+
- [`publish`](#publish)
|
|
107
|
+
- [`generate-keystore`](#generate-keystore)
|
|
108
|
+
- [`android-release-build`](#android-release-build)
|
|
109
|
+
- [`refactor`](#refactor)
|
|
110
|
+
- [`update-version`](#update-version)
|
|
75
111
|
- [Config Reference](#config-reference)
|
|
76
112
|
- [Project Structure](#project-structure)
|
|
77
113
|
|
|
@@ -79,15 +115,27 @@ See [all config keys](#config-keys) and [external services setup](#external-serv
|
|
|
79
115
|
|
|
80
116
|
| Command | Description |
|
|
81
117
|
|---------|-------------|
|
|
82
|
-
| [`kappmaker create <app-name>`](#create-app-name) | Full end-to-end app setup (Firebase, logo, App Store, Adapty, release build) |
|
|
118
|
+
| [`kappmaker create <app-name>`](#create-app-name) | Full end-to-end app setup (Firebase, logo, App Store Connect, Google Play Console, Adapty, release build) |
|
|
83
119
|
| [`kappmaker create-logo`](#create-logo) | Generate an app logo with AI (fal.ai) |
|
|
84
120
|
| [`kappmaker create-appstore-app`](#create-appstore-app) | Set up an app on App Store Connect (metadata, subscriptions, privacy) |
|
|
121
|
+
| [`kappmaker gpc setup`](#gpc) | Set up an existing app on Google Play Console (listings, subscriptions, IAPs, data safety) |
|
|
122
|
+
| [`kappmaker gpc listings push`](#gpc) | Push store listings from the Google Play config file |
|
|
123
|
+
| [`kappmaker gpc subscriptions list/push`](#gpc) | List or push subscriptions on Google Play Console |
|
|
124
|
+
| [`kappmaker gpc iap list/push`](#gpc) | List or push one-time in-app products on Google Play Console |
|
|
125
|
+
| [`kappmaker gpc data-safety push`](#gpc) | Push data safety declaration on Google Play Console |
|
|
126
|
+
| [`kappmaker gpc app-check --package <pkg>`](#gpc) | Check if a package exists on Google Play Console |
|
|
85
127
|
| [`kappmaker adapty setup`](#adapty-setup) | Set up Adapty products, paywalls, and placements |
|
|
86
128
|
| [`kappmaker image-split <image>`](#image-split-source) | Split a grid image into individual tiles |
|
|
87
129
|
| [`kappmaker image-remove-bg <image>`](#image-remove-bg-source) | Remove background from an image (fal.ai) |
|
|
88
130
|
| [`kappmaker image-enhance <image>`](#image-enhance-source) | Upscale and enhance image quality (fal.ai) |
|
|
89
131
|
| [`kappmaker translate-screenshots [dir]`](#translate-screenshots-source-dir) | Translate screenshots to multiple locales (fal.ai) |
|
|
90
132
|
| [`kappmaker generate-screenshots`](#generate-screenshots) | Generate marketing screenshots with AI (OpenAI + fal.ai) |
|
|
133
|
+
| [`kappmaker fastlane configure`](#fastlane-configure) | Set up Fastlane in the mobile app directory |
|
|
134
|
+
| [`kappmaker publish`](#publish) | Build and upload to Google Play and/or App Store via Fastlane |
|
|
135
|
+
| [`kappmaker generate-keystore`](#generate-keystore) | Generate an Android signing keystore for Play Store releases |
|
|
136
|
+
| [`kappmaker android-release-build`](#android-release-build) | Build a signed Android release AAB |
|
|
137
|
+
| [`kappmaker refactor`](#refactor) | Refactor package names, application ID, bundle ID, and app name |
|
|
138
|
+
| [`kappmaker update-version`](#update-version) | Bump Android and iOS version codes and version name |
|
|
91
139
|
| [`kappmaker config`](#config) | Manage CLI settings, API keys, and global defaults |
|
|
92
140
|
|
|
93
141
|
## Features
|
|
@@ -99,18 +147,20 @@ These commands are standalone and don't depend on any specific boilerplate:
|
|
|
99
147
|
- **AI logo generation** — Generate logo variations with fal.ai, pick your favorite, auto-remove background
|
|
100
148
|
- **AI screenshot generation** — Generate marketing screenshots from a text description (8 style presets)
|
|
101
149
|
- **Screenshot translation** — Translate app screenshots to 48+ locales in parallel
|
|
102
|
-
- **App Store Connect setup** — Register bundle ID, create app, set metadata, categories, age rating, subscriptions, privacy, and review info
|
|
150
|
+
- **App Store Connect setup** — Register bundle ID (with Sign in with Apple, In-App Purchases, and Push Notifications capabilities enabled automatically), create app, set metadata, categories, age rating, subscriptions, privacy, and review info — fully automated, no manual App Store Connect steps needed
|
|
151
|
+
- **Google Play Console setup** — Push store listings, subscriptions (new monetization API), one-time in-app products, and the data safety declaration via a built-in wrapper around the Play Publisher API — no external CLI, no extra dependencies
|
|
103
152
|
- **Adapty subscription setup** — Create products, paywalls, and placements for iOS and Android
|
|
153
|
+
- **Version bumping** — Increment Android and iOS version codes and names in one command
|
|
104
154
|
- **Image tools** — Split grids, remove backgrounds, enhance quality
|
|
105
155
|
|
|
106
156
|
### KAppMaker boilerplate-specific
|
|
107
157
|
|
|
108
158
|
The `create` command runs the full end-to-end setup. Some steps assume the [KAppMaker](https://kappmaker.com) project structure and will be skipped with a warning if you use a custom template:
|
|
109
159
|
|
|
110
|
-
- **
|
|
160
|
+
- **Package refactor** — Renames package name, app ID, and display name using the TypeScript refactor service (also available standalone via `kappmaker refactor`)
|
|
111
161
|
- **Firebase SDK config placement** — Downloads `google-services.json` and `GoogleService-Info.plist` to KAppMaker-specific paths (falls back to `Assets/` for custom templates)
|
|
112
162
|
- **Build environment** — Creates `local.properties` and runs CocoaPods in the `MobileApp/` directory
|
|
113
|
-
- **Android release build** —
|
|
163
|
+
- **Android release build** — Generates keystore and builds signed AAB (also available standalone via `kappmaker android-release-build`)
|
|
114
164
|
- **Git remotes** — Renames origin to upstream (designed for the "fork from template" workflow)
|
|
115
165
|
- **Screenshot translation default path** — Defaults to `MobileApp/distribution/ios/appstore_metadata/screenshots/en-US` (falls back to parent of source directory)
|
|
116
166
|
|
|
@@ -126,6 +176,7 @@ The `create` command runs the full end-to-end setup. Some steps assume the [KApp
|
|
|
126
176
|
- **Android SDK** — installed at `~/Library/Android/sdk` (configurable)
|
|
127
177
|
- **asc CLI** (optional, for App Store Connect) — `brew install asc`
|
|
128
178
|
- **Adapty CLI** (optional, for Adapty setup) — `npm install -g adapty`
|
|
179
|
+
- **No extra CLI for Google Play Console** — `kappmaker gpc` talks to the Play Publisher API directly via Node's built-in `fetch` and `crypto`; all it needs is the service-account JSON path set in `googleServiceAccountPath`
|
|
129
180
|
|
|
130
181
|
## External Services & API Keys
|
|
131
182
|
|
|
@@ -138,7 +189,7 @@ The CLI integrates with several external services for AI image generation, app s
|
|
|
138
189
|
**How to get your key:**
|
|
139
190
|
1. Sign up at [fal.ai](https://fal.ai)
|
|
140
191
|
2. Go to [Dashboard > Keys](https://fal.ai/dashboard/keys) and create an API key
|
|
141
|
-
3. `kappmaker config set falApiKey <your-key>`
|
|
192
|
+
3. `kappmaker config set falApiKey <your-key>` — or skip this and the CLI will prompt you the first time you run a command that needs it
|
|
142
193
|
|
|
143
194
|
### ImgBB — Image Hosting
|
|
144
195
|
|
|
@@ -147,7 +198,7 @@ The CLI integrates with several external services for AI image generation, app s
|
|
|
147
198
|
**How to get your key:**
|
|
148
199
|
1. Sign up at [imgbb.com](https://imgbb.com)
|
|
149
200
|
2. Go to [api.imgbb.com](https://api.imgbb.com/) and get your free API key
|
|
150
|
-
3. `kappmaker config set imgbbApiKey <your-key>`
|
|
201
|
+
3. `kappmaker config set imgbbApiKey <your-key>` — or prompted on first use
|
|
151
202
|
|
|
152
203
|
### OpenAI — Prompt Generation
|
|
153
204
|
|
|
@@ -156,11 +207,11 @@ The CLI integrates with several external services for AI image generation, app s
|
|
|
156
207
|
**How to get your key:**
|
|
157
208
|
1. Sign up at [platform.openai.com](https://platform.openai.com)
|
|
158
209
|
2. Go to [API Keys](https://platform.openai.com/api-keys) and create a new key
|
|
159
|
-
3. `kappmaker config set openaiApiKey <your-key>`
|
|
210
|
+
3. `kappmaker config set openaiApiKey <your-key>` — or prompted on first use
|
|
160
211
|
|
|
161
|
-
### App Store Connect CLI (asc) — iOS App Management
|
|
212
|
+
### App Store Connect CLI (asc) — iOS App Management & Publishing
|
|
162
213
|
|
|
163
|
-
**Used for:** Creating apps, setting metadata, categories, subscriptions, privacy declarations, and review info on App Store Connect.
|
|
214
|
+
**Used for:** Creating apps, setting metadata, categories, subscriptions, privacy declarations, and review info on App Store Connect (`create-appstore-app`). The same API key credentials are also used by `publish --platform ios` to build and upload IPAs via Fastlane.
|
|
164
215
|
|
|
165
216
|
**How to set up:**
|
|
166
217
|
1. Install: `brew install asc`
|
|
@@ -174,6 +225,8 @@ The CLI integrates with several external services for AI image generation, app s
|
|
|
174
225
|
```
|
|
175
226
|
Or run `kappmaker config appstore-defaults --init` for interactive setup.
|
|
176
227
|
|
|
228
|
+
> **Note:** `kappmaker publish --platform ios` uses `ascKeyId`, `ascIssuerId`, and `ascPrivateKeyPath` to automatically generate the Fastlane-format publisher JSON — no separate credentials needed.
|
|
229
|
+
|
|
177
230
|
### Adapty CLI — Subscription Management
|
|
178
231
|
|
|
179
232
|
**Used for:** Setting up in-app subscription products, paywalls, and placements across iOS and Android via Adapty's backend.
|
|
@@ -191,6 +244,47 @@ The CLI integrates with several external services for AI image generation, app s
|
|
|
191
244
|
1. Install: `npm install -g firebase-tools`
|
|
192
245
|
2. The `create` command handles login and project creation interactively.
|
|
193
246
|
|
|
247
|
+
### Google Play Publisher — Android Store Uploads + Play Console Management
|
|
248
|
+
|
|
249
|
+
**Used for:**
|
|
250
|
+
- Building and uploading Android AABs to Google Play Store via `kappmaker publish --platform android` (Fastlane)
|
|
251
|
+
- Configuring store listings, subscriptions, in-app products, and the data safety declaration via `kappmaker gpc ...` (direct Publisher API call, no external CLI)
|
|
252
|
+
|
|
253
|
+
Both flows share the same service account JSON key — set it once, use it everywhere.
|
|
254
|
+
|
|
255
|
+
**How to set up:**
|
|
256
|
+
|
|
257
|
+
1. Go to [Google Cloud Console](https://console.cloud.google.com) and create a new project (or select existing)
|
|
258
|
+
2. Open **APIs & Services > Library**, search for **Google Play Android Developer API**, and enable it
|
|
259
|
+
3. Go to **IAM & Admin > Service Accounts**, create a new service account (skip role assignment)
|
|
260
|
+
4. Open the service account, go to **Keys**, click **Add key > Create new key > JSON**, and download it
|
|
261
|
+
5. Open [Google Play Console](https://play.google.com/console), go to **Settings > Users and permissions**
|
|
262
|
+
6. Click **Invite new user** with the service account email (`...@...iam.gserviceaccount.com`) and grant permissions for your app(s)
|
|
263
|
+
7. Save the JSON key file and configure:
|
|
264
|
+
```bash
|
|
265
|
+
kappmaker config set googleServiceAccountPath /path/to/google-service-app-publisher.json
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
> **Note:** Google Play does not allow creating new apps via any public API — you must create the app manually once in [Play Console](https://play.google.com/console/u/0/developers) before `kappmaker gpc` can configure it.
|
|
269
|
+
|
|
270
|
+
### App Store Publisher — iOS Store Uploads
|
|
271
|
+
|
|
272
|
+
**Used for:** Building and uploading iOS IPAs to App Store Connect, managing App Store metadata and screenshots via `kappmaker publish --platform ios`.
|
|
273
|
+
|
|
274
|
+
The `publish` command reuses the same App Store Connect API key credentials used by `create-appstore-app` (`ascKeyId`, `ascIssuerId`, `ascPrivateKeyPath`) and automatically generates the Fastlane-format publisher JSON.
|
|
275
|
+
|
|
276
|
+
**How to set up** (if not already configured for `create-appstore-app`):
|
|
277
|
+
|
|
278
|
+
1. Open [App Store Connect > Users and Access > Integrations](https://appstoreconnect.apple.com/access/integrations/api)
|
|
279
|
+
2. Create an API key with **App Manager** access and download the `.p8` file
|
|
280
|
+
3. Note the **Key ID** and **Issuer ID**
|
|
281
|
+
4. Configure:
|
|
282
|
+
```bash
|
|
283
|
+
kappmaker config set ascKeyId <your-key-id>
|
|
284
|
+
kappmaker config set ascIssuerId <your-issuer-id>
|
|
285
|
+
kappmaker config set ascPrivateKeyPath /path/to/AuthKey.p8
|
|
286
|
+
```
|
|
287
|
+
|
|
194
288
|
---
|
|
195
289
|
|
|
196
290
|
## `create <app-name>`
|
|
@@ -209,15 +303,16 @@ kappmaker create Remimi
|
|
|
209
303
|
| 2 | Firebase login | Opens browser for authentication |
|
|
210
304
|
| 3 | Create Firebase project | `<appname>-app` (skips if exists) |
|
|
211
305
|
| 4 | Create Firebase apps | Android + iOS apps (reuses existing if found) |
|
|
212
|
-
| 5 | Enable anonymous auth |
|
|
213
|
-
| 6 | Download SDK configs | `google-services.json` + `GoogleService-Info.plist` (falls back to `Assets/`
|
|
306
|
+
| 5 | Enable anonymous auth | If brand-new project, prompts user to click "Get started" in Firebase Console, then enables via API |
|
|
307
|
+
| 6 | Download SDK configs | `google-services.json` + `GoogleService-Info.plist` (verifies package match, falls back to `Assets/`) |
|
|
214
308
|
| 7 | Logo generation | *Optional* — AI logo + automatic background removal |
|
|
215
|
-
| 8 |
|
|
216
|
-
| 9 |
|
|
217
|
-
| 10 |
|
|
218
|
-
|
|
|
219
|
-
|
|
|
220
|
-
|
|
|
309
|
+
| 8 | Package refactor | Renames packages, IDs, app name across all modules (composeApp, designsystem, libs) |
|
|
310
|
+
| 9 | Build environment | `local.properties`, CocoaPods, generates signing keystore if missing |
|
|
311
|
+
| 10 | Git remotes | Renames origin to upstream |
|
|
312
|
+
| | *Pre-store reminder* | *Prompts user to create Google Play Console app; App Store Connect is created automatically* |
|
|
313
|
+
| 11 | App Store Connect | *Optional* — full app setup (metadata, subs, privacy); app created automatically via `asc web apps create` |
|
|
314
|
+
| 12 | Google Play Console | *Optional* — Fastlane builds + uploads AAB to internal track, then runs full gpc setup |
|
|
315
|
+
| 13 | Adapty setup | *Optional* — products, paywalls, placements (links to ASC + Play products created in 11-12) |
|
|
221
316
|
|
|
222
317
|
**Options:**
|
|
223
318
|
|
|
@@ -246,7 +341,7 @@ kappmaker create-logo --output ./custom/path/logo.png
|
|
|
246
341
|
|
|
247
342
|
**Output:** `Assets/app_logo.png` + `Assets/logo_variations.png`
|
|
248
343
|
|
|
249
|
-
Requires: `kappmaker config set falApiKey <your-key>`
|
|
344
|
+
Requires a fal.ai API key (prompted on first use if not set, or set manually: `kappmaker config set falApiKey <your-key>`)
|
|
250
345
|
|
|
251
346
|
| Flag | Description | Default |
|
|
252
347
|
|------|-------------|---------|
|
|
@@ -275,8 +370,8 @@ kappmaker create-appstore-app --config ./my-config.json
|
|
|
275
370
|
|
|
276
371
|
1. Validate asc CLI and authentication
|
|
277
372
|
2. Load config (from file or interactive prompts)
|
|
278
|
-
3. Register Bundle ID
|
|
279
|
-
4. Find or create app
|
|
373
|
+
3. Register Bundle ID + enable capabilities (Sign in with Apple, In-App Purchases, Push Notifications). Name follows Apple convention: `XC com measify myapp` for `com.measify.myapp`
|
|
374
|
+
4. Find or create app (fully automated via `asc web apps create` — no manual App Store Connect step needed)
|
|
280
375
|
5. Set content rights
|
|
281
376
|
6. Create app version (1.0.0)
|
|
282
377
|
7. Set categories
|
|
@@ -325,6 +420,181 @@ During interactive setup, the CLI asks if the app accesses user content (AI imag
|
|
|
325
420
|
|
|
326
421
|
---
|
|
327
422
|
|
|
423
|
+
## `gpc`
|
|
424
|
+
|
|
425
|
+
Google Play Console management — a tight wrapper around the official Google Play Android Publisher API. All subcommands authenticate via the service account JSON at `googleServiceAccountPath` (same one used by `publish --platform android`). **No external CLI and no extra npm dependencies** — the JWT flow and HTTPS calls are implemented with Node's built-in `crypto` and `fetch`.
|
|
426
|
+
|
|
427
|
+
> **Note:** Google Play does not allow creating new apps via any public API. Create the app manually once in [Play Console](https://play.google.com/console/u/0/developers), then use these commands to configure it.
|
|
428
|
+
|
|
429
|
+
### `gpc setup`
|
|
430
|
+
|
|
431
|
+
Full end-to-end configuration (11 steps) — the Google Play parallel to `create-appstore-app`.
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
kappmaker gpc setup
|
|
435
|
+
kappmaker gpc setup --config ./my-config.json
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
**What it does:**
|
|
439
|
+
|
|
440
|
+
1. Validate service account + obtain access token
|
|
441
|
+
2. Load config (`./Assets/googleplay-config.json` or interactive prompts). **Auto-detects Play's actual default language** via a throwaway edit probe and rewrites `config.app.default_language` + the matching listing locale if your config drifted from reality. Also migrates legacy product IDs and legacy data-safety placeholders. Also reads tracks state to verify an APK/AAB is uploaded.
|
|
442
|
+
3. Review summary and confirm
|
|
443
|
+
4. Verify app exists on Play Console (fails fast with a deep link if not — Google does not allow app creation via the public API)
|
|
444
|
+
5. Start a Play Console edit (only if the default-language listing has a title — otherwise steps 5-7 are skipped cleanly)
|
|
445
|
+
6. Update app details (default language + contact website/email/phone)
|
|
446
|
+
7. Update store listings per locale (title, short/full description, video); commits the edit
|
|
447
|
+
8. **Pre-flight build check**, then create subscriptions via the new monetization API (`POST /subscriptions` with `productId` + `regionsVersion.version` as query params, base plans in body in DRAFT state, then `basePlans:activate` each one). Idempotent — existing product IDs are skipped. **Subscription listings are auto-cloned into Play's default language if missing.** Skipped with a clear message if no build is uploaded to any track (Google rejects monetization writes in that case).
|
|
448
|
+
9. Create one-time in-app products via the **new** monetization API (`PATCH /onetimeproducts/{id}?allowMissing=true` + `purchaseOptions:batchUpdateStates` to activate). Idempotent via `GET /oneTimeProducts`. Replaces the legacy `/inappproducts` endpoint that returns 403 on migrated apps.
|
|
449
|
+
10. Update the data safety declaration: converts `data_safety` JSON → Google's CSV format using a bundled canonical template + KAppMaker defaults matching the iOS App Store privacy set, then posts it via `POST /dataSafety` with `{ safetyLabels: "<csv>" }`. Respects `data_safety_csv_path` as an escape hatch for pre-exported CSVs.
|
|
450
|
+
11. Print a checklist of policy declarations that the Publisher API does NOT expose (content rating / IARC, target audience, ads, health apps, financial features, government apps, news apps, gambling, COVID-19 tracing, app access, advertising ID, families compliance, app pricing tier) with a deep link to Play Console's App content page. All verified against Google's v3 discovery document — none have REST endpoints.
|
|
451
|
+
|
|
452
|
+
### `gpc listings push`
|
|
453
|
+
|
|
454
|
+
Push just the store listings section from the config file (useful after editing copy).
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
kappmaker gpc listings push
|
|
458
|
+
kappmaker gpc listings push --config ./my-config.json
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Runs a single edit transaction: updates app details → updates every listing locale → commits.
|
|
462
|
+
|
|
463
|
+
### `gpc subscriptions list`
|
|
464
|
+
|
|
465
|
+
Read-only — lists existing subscription product IDs on Play Console.
|
|
466
|
+
|
|
467
|
+
```bash
|
|
468
|
+
kappmaker gpc subscriptions list --package com.example.myapp
|
|
469
|
+
kappmaker gpc subscriptions list # uses app.package_name from the config file
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### `gpc subscriptions push`
|
|
473
|
+
|
|
474
|
+
Create or reuse subscriptions from the config file. Idempotent — already-existing product IDs are skipped, and base plans are activated even for reused subscriptions.
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
kappmaker gpc subscriptions push
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Uses the **new** monetization API (`applications/{pkg}/subscriptions` + `basePlans:activate`). Auto-generated IDs:
|
|
481
|
+
|
|
482
|
+
| Field | Format | Example ($6.99 weekly) |
|
|
483
|
+
|---|---|---|
|
|
484
|
+
| `productId` (subscription) | `{appname}.premium.{period}.v1` | `myapp.premium.weekly.v1` |
|
|
485
|
+
| `basePlanId` | `autorenew-{period}-{priceDigits}-v1` | `autorenew-weekly-699-v1` |
|
|
486
|
+
| Subscription title | `{AppName} Premium {PeriodLabel}` | `MyApp Premium Weekly` |
|
|
487
|
+
|
|
488
|
+
These align 1-to-1 with what `adapty setup` writes to `android_product_id` and `android_base_plan_id`, so Adapty links the products automatically without any extra configuration.
|
|
489
|
+
|
|
490
|
+
### `gpc iap list`
|
|
491
|
+
|
|
492
|
+
Read-only — lists existing one-time in-app product SKUs on Play Console.
|
|
493
|
+
|
|
494
|
+
```bash
|
|
495
|
+
kappmaker gpc iap list --package com.example.myapp
|
|
496
|
+
kappmaker gpc iap list
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### `gpc iap push`
|
|
500
|
+
|
|
501
|
+
Create or reuse one-time in-app products from the config file. Idempotent — already-existing product IDs are skipped.
|
|
502
|
+
|
|
503
|
+
```bash
|
|
504
|
+
kappmaker gpc iap push
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Uses the **new** monetization API: `PATCH /applications/{pkg}/onetimeproducts/{id}?allowMissing=true` to create/update the product, then `purchaseOptions:batchUpdateStates` with an `activatePurchaseOptionRequest` to activate the default purchase option so it's available to buyers. Replaces the legacy `/inappproducts` endpoint, which Google now rejects with "Please migrate to the new publishing API" on migrated apps.
|
|
508
|
+
|
|
509
|
+
### `gpc data-safety push`
|
|
510
|
+
|
|
511
|
+
Push only the data safety declaration. Faster than running the full `setup` when you're iterating on the privacy answers.
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
kappmaker gpc data-safety push
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
**How it works under the hood:** Google's `POST /applications/{pkg}/dataSafety` does not take structured JSON — it takes a CSV file (the same one Play Console exports from Policy → App content → Data safety → Export to CSV), wrapped in `{ safetyLabels: "<csv>" }`. KAppMaker lets you stay in JSON and converts internally.
|
|
518
|
+
|
|
519
|
+
**Two ways to configure it in `Assets/googleplay-config.json`:**
|
|
520
|
+
|
|
521
|
+
1. **Structured JSON (recommended)** — `data_safety.answers` overlay on top of KAppMaker defaults:
|
|
522
|
+
|
|
523
|
+
**Account creation:** "My app does not allow users to create an account" (`PSL_ACM_NONE`).
|
|
524
|
+
|
|
525
|
+
**Data deletion:** skipped entirely (the question is optional).
|
|
526
|
+
|
|
527
|
+
**Data types collected:**
|
|
528
|
+
|
|
529
|
+
| Data type | Play Question / Response |
|
|
530
|
+
|---|---|
|
|
531
|
+
| User IDs | `PSL_DATA_TYPES_PERSONAL/PSL_USER_ACCOUNT` |
|
|
532
|
+
| Device ID | `PSL_DATA_TYPES_IDENTIFIERS/PSL_DEVICE_ID` |
|
|
533
|
+
| Crash logs | `PSL_DATA_TYPES_APP_PERFORMANCE/PSL_CRASH_LOGS` |
|
|
534
|
+
| Diagnostics | `PSL_DATA_TYPES_APP_PERFORMANCE/PSL_PERFORMANCE_DIAGNOSTICS` |
|
|
535
|
+
| Other performance | `PSL_DATA_TYPES_APP_PERFORMANCE/PSL_OTHER_PERFORMANCE` |
|
|
536
|
+
| App interactions | `PSL_DATA_TYPES_APP_ACTIVITY/PSL_USER_INTERACTION` |
|
|
537
|
+
|
|
538
|
+
**Data handling (same for ALL data types above):**
|
|
539
|
+
- Collected only, **not shared** with third parties
|
|
540
|
+
- **Processed ephemerally** (YES)
|
|
541
|
+
- **Collection is required** — users can't turn it off
|
|
542
|
+
- Purposes: Analytics (+ App functionality for Device ID)
|
|
543
|
+
|
|
544
|
+
**Security:** encrypted in transit = YES.
|
|
545
|
+
|
|
546
|
+
Example config (just use the default — override if you need to add data types or change handling):
|
|
547
|
+
```json
|
|
548
|
+
"data_safety": {
|
|
549
|
+
"apply_defaults": true,
|
|
550
|
+
"answers": {}
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
To override a specific answer, add keys to `answers`. Keys are either `QuestionID` (for single-answer rows) or `QuestionID/ResponseID` (for multi-choice rows). Values are `true` / `false` / URL string / `null`:
|
|
555
|
+
```json
|
|
556
|
+
"data_safety": {
|
|
557
|
+
"apply_defaults": true,
|
|
558
|
+
"answers": {
|
|
559
|
+
"PSL_DATA_TYPES_PERSONAL/PSL_USER_ACCOUNT": true,
|
|
560
|
+
"PSL_DATA_TYPES_LOCATION/PSL_APPROX_LOCATION": true
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
Internally, KAppMaker loads a canonical 783-row template (extracted from the well-maintained [fastlane-plugin-google_data_safety](https://github.com/owenbean400/fastlane-plugin-google_data_safety)), applies defaults + your overrides, emits a filled CSV, and uploads it via `POST /dataSafety`.
|
|
566
|
+
|
|
567
|
+
2. **Escape hatch: CSV file** — if you already exported a real CSV from Play Console and filled it in:
|
|
568
|
+
```json
|
|
569
|
+
"data_safety_csv_path": "Assets/data-safety.csv"
|
|
570
|
+
```
|
|
571
|
+
When this field is set and the file exists, it takes priority over the JSON block and is uploaded verbatim.
|
|
572
|
+
|
|
573
|
+
**Important:** Review the summary Play Console shows after the push before publishing. Google's conditional question logic may reject some answers — paste the error and I'll adjust the defaults.
|
|
574
|
+
|
|
575
|
+
### `gpc app-check`
|
|
576
|
+
|
|
577
|
+
Quick read-only probe to verify that an app exists on Play Console. Useful for CI scripts and before running destructive operations.
|
|
578
|
+
|
|
579
|
+
```bash
|
|
580
|
+
kappmaker gpc app-check --package com.example.myapp
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
Exits 0 if found, 2 if missing (prints the Play Console deep link).
|
|
584
|
+
|
|
585
|
+
### Config
|
|
586
|
+
|
|
587
|
+
All `gpc` subcommands except `app-check` load `./Assets/googleplay-config.json` by default. The first run of `kappmaker gpc setup` creates it interactively.
|
|
588
|
+
|
|
589
|
+
| Flag | Description | Default |
|
|
590
|
+
|------|-------------|---------|
|
|
591
|
+
| `--config <path>` | Path to JSON config file | `./Assets/googleplay-config.json` |
|
|
592
|
+
| `--package <name>` | (list commands) Override the package name from config | — |
|
|
593
|
+
|
|
594
|
+
**Alias:** `kappmaker create-play-app` is kept as a shortcut for `kappmaker gpc setup` (the entire 11-step flow is also what the top-level `kappmaker create` calls under step 8 when you answer yes to the Google Play Console prompt).
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
|
|
328
598
|
## `adapty setup`
|
|
329
599
|
|
|
330
600
|
Sets up Adapty subscription products, paywalls, and placements using the [Adapty CLI](https://github.com/adaptyteam/adapty-cli).
|
|
@@ -348,12 +618,12 @@ kappmaker adapty setup --config ./my-config.json
|
|
|
348
618
|
|
|
349
619
|
### Default products
|
|
350
620
|
|
|
351
|
-
| Product | Period | Price | iOS Product ID | Android Base Plan ID |
|
|
352
|
-
|
|
353
|
-
| Weekly Premium | `weekly` | $6.99 | `{appname}.premium.weekly.v1.699.v1` | `autorenew-weekly-
|
|
354
|
-
| Yearly Premium | `annual` | $29.99 | `{appname}.premium.yearly.v1.2999.v1` | `autorenew-yearly-
|
|
621
|
+
| Product | Period | Price | iOS Product ID | Android Product ID | Android Base Plan ID |
|
|
622
|
+
|---------|--------|-------|----------------|--------------------|-----------------------|
|
|
623
|
+
| Weekly Premium | `weekly` | $6.99 | `{appname}.premium.weekly.v1.699.v1` | `{appname}.premium.weekly.v1` | `autorenew-weekly-699-v1` |
|
|
624
|
+
| Yearly Premium | `annual` | $29.99 | `{appname}.premium.yearly.v1.2999.v1` | `{appname}.premium.yearly.v1` | `autorenew-yearly-2999-v1` |
|
|
355
625
|
|
|
356
|
-
iOS product IDs match the App Store Connect format so
|
|
626
|
+
iOS product IDs match the App Store Connect format, and Android IDs match what `kappmaker gpc setup` writes to Google Play Console — so all three systems link automatically without extra configuration.
|
|
357
627
|
|
|
358
628
|
### Default paywalls and placements
|
|
359
629
|
|
|
@@ -370,7 +640,7 @@ iOS product IDs match the App Store Connect format so they align across both sys
|
|
|
370
640
|
|
|
371
641
|
## Image Tools
|
|
372
642
|
|
|
373
|
-
AI-powered image commands.
|
|
643
|
+
AI-powered image commands. A fal.ai API key is prompted on first use if not already configured.
|
|
374
644
|
|
|
375
645
|
### `image-split <source>`
|
|
376
646
|
|
|
@@ -529,6 +799,164 @@ Requires: `falApiKey`, `openaiApiKey`, and `imgbbApiKey` (if using reference ima
|
|
|
529
799
|
|
|
530
800
|
---
|
|
531
801
|
|
|
802
|
+
## `fastlane configure`
|
|
803
|
+
|
|
804
|
+
Sets up Fastlane in the mobile app directory. Creates `Gemfile`, `fastlane/Fastfile`, and runs `bundle install`.
|
|
805
|
+
|
|
806
|
+
```bash
|
|
807
|
+
kappmaker fastlane configure
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
Run from the project root (containing `MobileApp/`) or inside `MobileApp/` directly.
|
|
811
|
+
|
|
812
|
+
**What it creates:**
|
|
813
|
+
- `Gemfile` — Ruby gem dependencies (fastlane)
|
|
814
|
+
- `fastlane/Fastfile` — Build and upload lanes for Android (Play Store) and iOS (App Store)
|
|
815
|
+
|
|
816
|
+
If files already exist, they are skipped (not overwritten).
|
|
817
|
+
|
|
818
|
+
**Prerequisite for:** `kappmaker publish`
|
|
819
|
+
|
|
820
|
+
---
|
|
821
|
+
|
|
822
|
+
## `publish`
|
|
823
|
+
|
|
824
|
+
Builds and uploads your app to Google Play and/or App Store using Fastlane.
|
|
825
|
+
|
|
826
|
+
```bash
|
|
827
|
+
kappmaker publish # Both platforms
|
|
828
|
+
kappmaker publish --platform android # Android only
|
|
829
|
+
kappmaker publish --platform ios # iOS only
|
|
830
|
+
kappmaker publish --platform android --platform ios # Both explicitly
|
|
831
|
+
kappmaker publish --platform android --track internal # Android internal track
|
|
832
|
+
kappmaker publish --upload-metadata --upload-screenshots # With metadata
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
Run from the project root (containing `MobileApp/`) or inside `MobileApp/` directly. Requires Fastlane via Bundler (`Gemfile` + `fastlane/Fastfile`).
|
|
836
|
+
|
|
837
|
+
**Prerequisites:**
|
|
838
|
+
- **Android:** Google Play service account JSON — see [Google Play Publisher setup](#google-play-publisher--android-store-uploads)
|
|
839
|
+
- **iOS:** App Store Connect API key — see [App Store Publisher setup](#app-store-publisher--ios-store-uploads). The CLI generates the Fastlane-format publisher JSON automatically from your `ascKeyId`/`ascIssuerId`/`ascPrivateKeyPath` config.
|
|
840
|
+
|
|
841
|
+
| Flag | Description | Default |
|
|
842
|
+
|------|-------------|---------|
|
|
843
|
+
| `--platform <name>` | Platform to publish: `android`, `ios` (repeatable) | Both |
|
|
844
|
+
| `--track <name>` | Android Play Store track (internal/alpha/beta/production) | `production` |
|
|
845
|
+
| `--upload-metadata` | Upload metadata (title, description) | `false` |
|
|
846
|
+
| `--upload-screenshots` | Upload screenshots | `false` |
|
|
847
|
+
| `--upload-images` | Upload images — icon, feature graphic (Android only) | `false` |
|
|
848
|
+
| `--submit-for-review` | Submit for review after upload | `true` |
|
|
849
|
+
|
|
850
|
+
---
|
|
851
|
+
|
|
852
|
+
## `generate-keystore`
|
|
853
|
+
|
|
854
|
+
Generates an Android signing keystore for Play Store releases. Creates `keystore.jks` and `keystore.properties` with a secure random password.
|
|
855
|
+
|
|
856
|
+
```bash
|
|
857
|
+
kappmaker generate-keystore --organization "MyCompany"
|
|
858
|
+
kappmaker generate-keystore --first-name "John Doe" --organization "MyCompany"
|
|
859
|
+
kappmaker generate-keystore --output ./custom-keystore-dir
|
|
860
|
+
```
|
|
861
|
+
|
|
862
|
+
Run from the project root (containing `MobileApp/`) or inside `MobileApp/` directly.
|
|
863
|
+
|
|
864
|
+
**Output** (default: `distribution/android/keystore/` inside MobileApp):
|
|
865
|
+
- `keystore.jks` — the signing keystore
|
|
866
|
+
- `keystore.properties` — password, alias, and store file path
|
|
867
|
+
|
|
868
|
+
At least one of `--first-name` or `--organization` is required.
|
|
869
|
+
|
|
870
|
+
| Flag | Description | Required |
|
|
871
|
+
|------|-------------|----------|
|
|
872
|
+
| `--first-name <name>` | Developer name for keystore | One of these |
|
|
873
|
+
| `--organization <name>` | Organization name for keystore | is required |
|
|
874
|
+
| `--output <dir>` | Output directory for keystore files | No |
|
|
875
|
+
|
|
876
|
+
---
|
|
877
|
+
|
|
878
|
+
## `android-release-build`
|
|
879
|
+
|
|
880
|
+
Builds a signed Android release AAB. Automatically generates a keystore if one doesn't exist yet.
|
|
881
|
+
|
|
882
|
+
```bash
|
|
883
|
+
kappmaker android-release-build
|
|
884
|
+
kappmaker android-release-build --organization "MyCompany"
|
|
885
|
+
kappmaker android-release-build --output ./my-output
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
Run from the project root (containing `MobileApp/`) or inside `MobileApp/` directly. Requires `gradlew` in the mobile app directory.
|
|
889
|
+
|
|
890
|
+
**What it does:**
|
|
891
|
+
1. Generates keystore if `distribution/android/keystore/keystore.properties` doesn't exist
|
|
892
|
+
2. Runs `./gradlew :composeApp:bundleRelease`
|
|
893
|
+
3. Copies the AAB to the output directory
|
|
894
|
+
|
|
895
|
+
**Output:** `distribution/android/app-release.aab` (or custom `--output` path)
|
|
896
|
+
|
|
897
|
+
| Flag | Description | Default |
|
|
898
|
+
|------|-------------|---------|
|
|
899
|
+
| `--organization <name>` | Organization for keystore generation | From config |
|
|
900
|
+
| `--first-name <name>` | Developer name for keystore generation | Empty |
|
|
901
|
+
| `--output <dir>` | Output directory for AAB | `distribution/android` |
|
|
902
|
+
|
|
903
|
+
---
|
|
904
|
+
|
|
905
|
+
## `refactor`
|
|
906
|
+
|
|
907
|
+
Refactors package names, application ID, bundle ID, and app name across the entire project. Implemented in TypeScript — no Gradle build system required.
|
|
908
|
+
|
|
909
|
+
```bash
|
|
910
|
+
kappmaker refactor --app-id com.example.myapp --app-name MyApp
|
|
911
|
+
kappmaker refactor --app-id com.example.myapp --app-name MyApp --skip-package-rename
|
|
912
|
+
```
|
|
913
|
+
|
|
914
|
+
Run from the project root (containing `MobileApp/`) or from inside `MobileApp/` directly.
|
|
915
|
+
|
|
916
|
+
**Full refactor (default):**
|
|
917
|
+
1. Renames Kotlin package names in all source sets (commonMain, androidMain, iosMain, etc.)
|
|
918
|
+
2. Moves package directories to match the new package structure
|
|
919
|
+
3. Updates Gradle build files, Firebase configs, iOS project files, and GitHub workflows
|
|
920
|
+
4. Updates the app display name in manifests, settings, and platform-specific files
|
|
921
|
+
|
|
922
|
+
**Skip-package-rename mode (`--skip-package-rename`):**
|
|
923
|
+
Only updates `applicationId` / bundle ID, Firebase configs, iOS files, GitHub workflows, and app name — keeps Kotlin package directories intact. Useful for creating multiple apps from one codebase without merge conflicts.
|
|
924
|
+
|
|
925
|
+
| Flag | Description | Required |
|
|
926
|
+
|------|-------------|----------|
|
|
927
|
+
| `--app-id <id>` | New applicationId / bundleId (e.g., `com.example.myapp`) | Yes |
|
|
928
|
+
| `--app-name <name>` | New display name (e.g., `MyApp`) | Yes |
|
|
929
|
+
| `--old-app-id <id>` | Current applicationId to replace (default: `com.measify.kappmaker`) | No |
|
|
930
|
+
| `--old-app-name <name>` | Current app name to replace (default: `KAppMakerAllModules`) | No |
|
|
931
|
+
| `--skip-package-rename` | Keep Kotlin package dirs, only update IDs and app name | No |
|
|
932
|
+
|
|
933
|
+
---
|
|
934
|
+
|
|
935
|
+
## `update-version`
|
|
936
|
+
|
|
937
|
+
Bumps Android and iOS version codes and optionally sets a new version name. Run from the project root (containing `MobileApp/`) or from inside `MobileApp/` directly.
|
|
938
|
+
|
|
939
|
+
```bash
|
|
940
|
+
kappmaker update-version # Increment patch: 1.2.3 → 1.2.4, versionCode +1
|
|
941
|
+
kappmaker update-version -v 2.0.0 # Set explicit version name, versionCode +1
|
|
942
|
+
```
|
|
943
|
+
|
|
944
|
+
**What it updates:**
|
|
945
|
+
|
|
946
|
+
| Platform | File | Fields |
|
|
947
|
+
|----------|------|--------|
|
|
948
|
+
| Android | `composeApp/build.gradle.kts` | `versionCode`, `versionName` |
|
|
949
|
+
| iOS | `iosApp/iosApp.xcodeproj/project.pbxproj` | `CURRENT_PROJECT_VERSION`, `MARKETING_VERSION` |
|
|
950
|
+
| iOS | `iosApp/iosApp/Info.plist` | `CFBundleVersion`, `CFBundleShortVersionString` |
|
|
951
|
+
|
|
952
|
+
If a platform's files are missing, that platform is skipped with a warning.
|
|
953
|
+
|
|
954
|
+
| Flag | Description | Default |
|
|
955
|
+
|------|-------------|---------|
|
|
956
|
+
| `-v, --version <name>` | Set explicit version name (e.g., `2.0.0`) | Auto-increment patch |
|
|
957
|
+
|
|
958
|
+
---
|
|
959
|
+
|
|
532
960
|
## Config Reference
|
|
533
961
|
|
|
534
962
|
Configuration is stored at `~/.config/kappmaker/config.json`.
|
|
@@ -561,7 +989,8 @@ kappmaker config adapty-defaults --save ./config.json # Save as global defaul
|
|
|
561
989
|
| `ascKeyId` | App Store Connect API Key ID | — |
|
|
562
990
|
| `ascIssuerId` | App Store Connect Issuer ID | — |
|
|
563
991
|
| `ascPrivateKeyPath` | Path to `.p8` private key | — |
|
|
564
|
-
| `appleId` | Apple ID email (for privacy setup) | — |
|
|
992
|
+
| `appleId` | Apple ID email (for app creation & privacy setup) | — |
|
|
993
|
+
| `googleServiceAccountPath` | Google Play service account JSON — used by both Fastlane publish and `kappmaker gpc` | `~/credentials/google-service-app-publisher.json` |
|
|
565
994
|
|
|
566
995
|
### Global defaults
|
|
567
996
|
|
|
@@ -581,15 +1010,23 @@ src/
|
|
|
581
1010
|
index.ts # Entry point
|
|
582
1011
|
cli.ts # Command registration (Commander.js)
|
|
583
1012
|
commands/
|
|
584
|
-
create.ts # Full app setup (13-step orchestrator)
|
|
1013
|
+
create.ts # Full app setup (13-step orchestrator: Firebase + logo + refactor + build + ASC + GPC + Adapty)
|
|
585
1014
|
create-logo.ts # AI logo generation
|
|
586
1015
|
create-appstore-app.ts # App Store Connect setup (13-step orchestrator)
|
|
1016
|
+
create-play-app.ts # Google Play Console setup (11-step orchestrator, aliased by `gpc setup`)
|
|
1017
|
+
gpc.ts # kappmaker gpc subcommands (setup, listings, subscriptions, iap, data-safety, app-check)
|
|
587
1018
|
adapty-setup.ts # Adapty setup (8-step orchestrator)
|
|
588
1019
|
split.ts # Grid image splitter
|
|
589
1020
|
remove-bg.ts # Background removal
|
|
590
1021
|
enhance.ts # Image quality enhancement
|
|
591
1022
|
translate-screenshots.ts # Screenshot translation
|
|
592
1023
|
generate-screenshots.ts # AI screenshot generation
|
|
1024
|
+
fastlane-configure.ts # Set up Fastlane (Gemfile + Fastfile + bundle install)
|
|
1025
|
+
publish.ts # Build and upload to Play Store / App Store
|
|
1026
|
+
generate-keystore.ts # Generate Android signing keystore
|
|
1027
|
+
android-release-build.ts # Build signed Android release AAB
|
|
1028
|
+
refactor.ts # Package/app name refactoring
|
|
1029
|
+
update-version.ts # Bump Android + iOS version codes and version name
|
|
593
1030
|
config.ts # Config management
|
|
594
1031
|
services/
|
|
595
1032
|
firebase.service.ts # Firebase CLI wrapper + anonymous auth
|
|
@@ -597,14 +1034,22 @@ src/
|
|
|
597
1034
|
openai.service.ts # OpenAI API (prompt generation)
|
|
598
1035
|
asc.service.ts # App Store Connect CLI wrapper
|
|
599
1036
|
asc-monetization.service.ts # ASC pricing, subscriptions, IAP
|
|
1037
|
+
gpc.service.ts # Google Play Publisher API wrapper (JWT auth, edits, listings, data safety) — no external CLI
|
|
1038
|
+
gpc-monetization.service.ts # Play new monetization API (subscriptions + base plans + onetimeproducts, NOT legacy inappproducts)
|
|
1039
|
+
gpc-data-safety.service.ts # JSON → CSV converter for Play Data Safety form (uses bundled canonical template)
|
|
600
1040
|
adapty.service.ts # Adapty CLI wrapper
|
|
601
1041
|
git.service.ts # Git operations
|
|
602
|
-
|
|
1042
|
+
fastlane-setup.service.ts # Fastlane scaffolding (Gemfile + Fastfile)
|
|
1043
|
+
publish.service.ts # Android/iOS publishing via Fastlane
|
|
1044
|
+
keystore.service.ts # Android keystore generation
|
|
1045
|
+
gradle.service.ts # Gradle build helpers (local.properties, clean & build)
|
|
603
1046
|
ios.service.ts # CocoaPods setup
|
|
604
|
-
fastlane.service.ts #
|
|
1047
|
+
fastlane.service.ts # Android release build (keystore + gradle) + AAB finder
|
|
605
1048
|
logo.service.ts # Logo prompt builder + image extraction
|
|
606
1049
|
screenshot.service.ts # Screenshot grid operations + Fastlane output
|
|
607
1050
|
screenshot-styles.ts # Screenshot style prompts (8 styles)
|
|
1051
|
+
refactor.service.ts # Package/app name refactoring logic
|
|
1052
|
+
version.service.ts # Android + iOS version reading/writing
|
|
608
1053
|
utils/
|
|
609
1054
|
logger.ts # Chalk-based logging
|
|
610
1055
|
exec.ts # Command execution (execa + ora)
|
|
@@ -613,9 +1058,12 @@ src/
|
|
|
613
1058
|
prompt.ts # Interactive prompts
|
|
614
1059
|
templates/
|
|
615
1060
|
appstore-config.json # Default App Store Connect config
|
|
1061
|
+
googleplay-config.json # Default Google Play Console config
|
|
1062
|
+
data-safety-template.json # Canonical Play Data Safety form schema (783 rows, 217 Q IDs)
|
|
616
1063
|
adapty-config.json # Default Adapty config
|
|
617
1064
|
types/
|
|
618
1065
|
index.ts # Shared interfaces
|
|
619
1066
|
appstore.ts # App Store Connect types
|
|
1067
|
+
googleplay.ts # Google Play Console types
|
|
620
1068
|
adapty.ts # Adapty types
|
|
621
1069
|
```
|