@daemux/store-automator 0.10.57 → 0.10.58
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/.claude-plugin/marketplace.json +2 -2
- package/package.json +1 -1
- package/plugins/store-automator/.claude-plugin/plugin.json +1 -1
- package/templates/CLAUDE.md.template +19 -1
- package/templates/fastlane/ios/Fastfile.template +13 -0
- package/templates/github/workflows/ios-release.yml +1 -0
- package/templates/scripts/create_app_record.py +8 -0
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "App Store & Google Play automation for Flutter apps",
|
|
8
|
-
"version": "0.10.
|
|
8
|
+
"version": "0.10.58"
|
|
9
9
|
},
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "store-automator",
|
|
13
13
|
"source": "./plugins/store-automator",
|
|
14
14
|
"description": "3 agents for app store publishing: reviewer, meta-creator, media-designer",
|
|
15
|
-
"version": "0.10.
|
|
15
|
+
"version": "0.10.58",
|
|
16
16
|
"keywords": [
|
|
17
17
|
"flutter",
|
|
18
18
|
"app-store",
|
package/package.json
CHANGED
|
@@ -58,6 +58,17 @@ IAP and subscription configuration. Durations: ONE_WEEK to ONE_YEAR. Intro offer
|
|
|
58
58
|
### fastlane/screenshots/
|
|
59
59
|
Store screenshots by platform and device size. Generated by app-designer via Stitch MCP.
|
|
60
60
|
|
|
61
|
+
### New App Setup (One-Time)
|
|
62
|
+
Before the first CI run for a new iOS app, create the app record locally:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
cd fastlane/ios
|
|
66
|
+
APPLE_ID="your@email.com" BUNDLE_ID="com.your.app" APP_NAME="Your App" \
|
|
67
|
+
bundle exec fastlane create_app_ios
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This requires Apple ID + 2FA (cannot be automated in CI). After creation, all subsequent operations are fully automated via API key.
|
|
71
|
+
|
|
61
72
|
### App Privacy Setup
|
|
62
73
|
App Privacy declarations must be set before the first app submission.
|
|
63
74
|
|
|
@@ -67,6 +78,13 @@ App Privacy declarations must be set before the first app submission.
|
|
|
67
78
|
3. Requires Apple ID auth (set APPLE_ID and APPLE_TEAM_NAME env vars)
|
|
68
79
|
4. Privacy declarations persist across app updates (one-time setup)
|
|
69
80
|
|
|
81
|
+
Also upload App Privacy declarations after creating the app:
|
|
82
|
+
```bash
|
|
83
|
+
cd fastlane/ios
|
|
84
|
+
APPLE_ID="your@email.com" BUNDLE_ID="com.your.app" \
|
|
85
|
+
bundle exec fastlane upload_privacy_ios
|
|
86
|
+
```
|
|
87
|
+
|
|
70
88
|
**Manual:**
|
|
71
89
|
Go to App Store Connect > Your App > App Privacy and fill out the form.
|
|
72
90
|
|
|
@@ -300,7 +318,7 @@ app-designer designs marketing page in Stitch MCP. Develop web pages. Deploy via
|
|
|
300
318
|
Create .gitignore (.claude/.tasks/, Flutter ignores; do NOT ignore *.g.dart). Push to private repo. GitHub Actions auto-triggers on push.
|
|
301
319
|
|
|
302
320
|
### Phase 6: First Publish
|
|
303
|
-
iOS: fully automated. Android: first build creates AAB + manual steps guide; subsequent builds fully automated.
|
|
321
|
+
iOS: create app record locally first (`fastlane create_app_ios` + `upload_privacy_ios`, see "New App Setup" above), then CI is fully automated. Android: first build creates AAB + manual steps guide; subsequent builds fully automated.
|
|
304
322
|
|
|
305
323
|
### Phase 7: Ongoing Updates
|
|
306
324
|
Push to main. GitHub Actions detects changes and uploads modified assets. Version auto-incremented.
|
|
@@ -127,4 +127,17 @@ platform :ios do
|
|
|
127
127
|
json_path: "#{ROOT_DIR}/fastlane/app_privacy_details.json"
|
|
128
128
|
)
|
|
129
129
|
end
|
|
130
|
+
|
|
131
|
+
# NOTE: produce requires Apple ID auth (not API key). Run locally for new apps.
|
|
132
|
+
lane :create_app_ios do
|
|
133
|
+
produce(
|
|
134
|
+
username: ENV.fetch("APPLE_ID", ""),
|
|
135
|
+
team_name: ENV.fetch("APPLE_TEAM_NAME", ""),
|
|
136
|
+
app_identifier: ENV["BUNDLE_ID"],
|
|
137
|
+
app_name: ENV.fetch("APP_NAME", ""),
|
|
138
|
+
sku: ENV.fetch("SKU", ENV["BUNDLE_ID"]),
|
|
139
|
+
language: ENV.fetch("PRIMARY_LOCALE", "en-US"),
|
|
140
|
+
enable_services: {}
|
|
141
|
+
)
|
|
142
|
+
end
|
|
130
143
|
end
|
|
@@ -177,6 +177,14 @@ def create_app_record(
|
|
|
177
177
|
return existing
|
|
178
178
|
print("ERROR: App creation returned 409 but app not found.", file=sys.stderr)
|
|
179
179
|
sys.exit(1)
|
|
180
|
+
if resp.status_code == 403:
|
|
181
|
+
print("App creation is not available via the ASC REST API.")
|
|
182
|
+
print("Create the app using fastlane (requires Apple ID + 2FA):")
|
|
183
|
+
print(f' APPLE_ID="your@email.com" BUNDLE_ID="{bundle_id}" APP_NAME="{app_name}" SKU="{sku}" \\')
|
|
184
|
+
print(' bundle exec fastlane create_app_ios')
|
|
185
|
+
print("")
|
|
186
|
+
print("Or create the app manually at https://appstoreconnect.apple.com")
|
|
187
|
+
sys.exit(1)
|
|
180
188
|
if not resp.ok:
|
|
181
189
|
print_api_errors(resp, "create app record")
|
|
182
190
|
sys.exit(1)
|