@daemux/store-automator 0.10.2 → 0.10.4
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.
|
@@ -5,15 +5,20 @@
|
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "App Store & Google Play automation for Flutter apps",
|
|
8
|
-
"version": "0.10.
|
|
8
|
+
"version": "0.10.4"
|
|
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.
|
|
16
|
-
"keywords": [
|
|
15
|
+
"version": "0.10.4",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"flutter",
|
|
18
|
+
"app-store",
|
|
19
|
+
"google-play",
|
|
20
|
+
"fastlane"
|
|
21
|
+
]
|
|
17
22
|
}
|
|
18
23
|
]
|
|
19
24
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daemux/store-automator",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.4",
|
|
4
4
|
"description": "Full App Store & Google Play automation for Flutter apps with Claude Code agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -28,15 +28,21 @@
|
|
|
28
28
|
"ci-cd",
|
|
29
29
|
"daemux"
|
|
30
30
|
],
|
|
31
|
-
"author": {
|
|
31
|
+
"author": {
|
|
32
|
+
"name": "Daemux"
|
|
33
|
+
},
|
|
32
34
|
"license": "MIT",
|
|
33
35
|
"repository": {
|
|
34
36
|
"type": "git",
|
|
35
37
|
"url": "https://github.com/daemux/daemux-plugins.git",
|
|
36
38
|
"directory": "claude-plugins/store-automator"
|
|
37
39
|
},
|
|
38
|
-
"publishConfig": {
|
|
39
|
-
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18"
|
|
45
|
+
},
|
|
40
46
|
"dependencies": {
|
|
41
47
|
"update-notifier": "^7.3.1"
|
|
42
48
|
}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "store-automator",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.4",
|
|
4
4
|
"description": "App Store & Google Play automation agents for Flutter app publishing",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Daemux"
|
|
7
7
|
},
|
|
8
|
-
"keywords": [
|
|
8
|
+
"keywords": [
|
|
9
|
+
"flutter",
|
|
10
|
+
"app-store",
|
|
11
|
+
"google-play",
|
|
12
|
+
"fastlane",
|
|
13
|
+
"screenshots",
|
|
14
|
+
"metadata"
|
|
15
|
+
]
|
|
9
16
|
}
|
|
@@ -98,6 +98,12 @@ Read fastlane/app_rating_config.json and verify:
|
|
|
98
98
|
- Minimum OS version reasonable (iOS 16+, Android API 24+)
|
|
99
99
|
- All declared permissions documented and justified
|
|
100
100
|
- Bundle ID / package name follows reverse-domain convention
|
|
101
|
+
- **Info.plist purpose strings (ITMS-90683 prevention)**: Read `ios/Runner/Info.plist` and verify it contains
|
|
102
|
+
NS*UsageDescription keys for all privacy-sensitive frameworks used by the app and its dependencies.
|
|
103
|
+
Check `ios/Podfile.lock` for pods that commonly require purpose strings
|
|
104
|
+
(e.g. image_picker, camera, geolocator, contacts_service, health, speech_to_text).
|
|
105
|
+
Each key must have a meaningful, user-facing description -- not placeholder text.
|
|
106
|
+
Missing keys cause automatic rejection at submission.
|
|
101
107
|
|
|
102
108
|
### 7. Live App UI Review (MANDATORY)
|
|
103
109
|
|
|
@@ -210,6 +216,7 @@ Before running the full review, verify these mandatory items. Include checkbox r
|
|
|
210
216
|
- [ ] All primary user flows complete successfully on iOS
|
|
211
217
|
- [ ] App UI matches store screenshots on iOS
|
|
212
218
|
- [ ] No placeholder text in live app on iOS
|
|
219
|
+
- [ ] Info.plist contains NS*UsageDescription keys for all linked privacy-sensitive frameworks (prevents ITMS-90683)
|
|
213
220
|
|
|
214
221
|
### Google Play Mandatory Items
|
|
215
222
|
- [ ] Title (title.txt) present and <= 30 characters
|
|
@@ -34,7 +34,44 @@ Run these in order. Stop and report on first failure:
|
|
|
34
34
|
1. **Static analysis**: `flutter analyze` - must pass with zero issues
|
|
35
35
|
2. **Unit and widget tests**: `flutter test -v` - all tests must pass
|
|
36
36
|
3. **iOS build**: `flutter build ios --no-codesign` - must succeed
|
|
37
|
-
4. **
|
|
37
|
+
4. **Info.plist purpose strings**: After iOS build succeeds, verify all required purpose strings are present.
|
|
38
|
+
|
|
39
|
+
**Detect linked frameworks:**
|
|
40
|
+
```bash
|
|
41
|
+
APP_BUNDLE=$(find build/ios/Release-iphoneos -name "*.app" -type d | head -1)
|
|
42
|
+
BINARY="$APP_BUNDLE/$(defaults read "$APP_BUNDLE/Info.plist" CFBundleExecutable)"
|
|
43
|
+
otool -L "$BINARY" | grep -oE '/[^ ]+\.framework/' | sed 's|.*/||; s|\.framework/||' | sort -u
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Cross-reference linked frameworks against required keys:**
|
|
47
|
+
|
|
48
|
+
| Framework | Required Info.plist Key | Condition |
|
|
49
|
+
|-----------|----------------------|-----------|
|
|
50
|
+
| Photos / PhotosUI | NSPhotoLibraryUsageDescription | Always |
|
|
51
|
+
| AVFoundation | NSCameraUsageDescription | Binary contains `AVCapture*` symbols |
|
|
52
|
+
| AVFoundation | NSMicrophoneUsageDescription | Binary contains `AVAudioRecorder` |
|
|
53
|
+
| CoreLocation | NSLocationWhenInUseUsageDescription | Always |
|
|
54
|
+
| Contacts / ContactsUI | NSContactsUsageDescription | Always |
|
|
55
|
+
| CoreBluetooth | NSBluetoothAlwaysUsageDescription | Always |
|
|
56
|
+
| Speech | NSSpeechRecognitionUsageDescription | Always |
|
|
57
|
+
| CoreMotion | NSMotionUsageDescription | Always |
|
|
58
|
+
| LocalAuthentication | NSFaceIDUsageDescription | Always |
|
|
59
|
+
| CoreNFC | NFCReaderUsageDescription | Always |
|
|
60
|
+
| EventKit | NSCalendarsUsageDescription | Calendar access |
|
|
61
|
+
| EventKit | NSRemindersUsageDescription | Reminders access |
|
|
62
|
+
| MediaPlayer | NSAppleMusicUsageDescription | Apple Music / media library |
|
|
63
|
+
| HealthKit | NSHealthShareUsageDescription | Health data read |
|
|
64
|
+
| HealthKit | NSHealthUpdateUsageDescription | Health data write |
|
|
65
|
+
| UserNotifications | (no key needed) | -- |
|
|
66
|
+
|
|
67
|
+
**Verify AVFoundation conditions** (only if AVFoundation is linked):
|
|
68
|
+
```bash
|
|
69
|
+
strings "$BINARY" | grep -E "AVCapture|AVAudioRecorder"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Read `ios/Runner/Info.plist` and confirm every required key is present with a non-empty, user-facing string.
|
|
73
|
+
**Missing keys = FAILURE** (Apple rejects with ITMS-90683).
|
|
74
|
+
5. **Android build**: `flutter build appbundle` - must succeed
|
|
38
75
|
|
|
39
76
|
### Before Testing
|
|
40
77
|
```bash
|