mysigner 0.1.0 → 0.1.2
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.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +74 -2
- data/lib/mysigner/build/configurator.rb +1 -1
- data/lib/mysigner/cli/auth_commands.rb +3 -3
- data/lib/mysigner/cli/build_commands.rb +10 -10
- data/lib/mysigner/cli/concerns/actionable_suggestions.rb +5 -5
- data/lib/mysigner/cli/concerns/error_handlers.rb +2 -2
- data/lib/mysigner/cli/diagnostic_commands.rb +6 -6
- data/lib/mysigner/cli/resource_commands.rb +680 -30
- data/lib/mysigner/cli/validate_commands.rb +161 -0
- data/lib/mysigner/cli.rb +2 -0
- data/lib/mysigner/client.rb +26 -13
- data/lib/mysigner/upload/app_store_automation.rb +8 -20
- data/lib/mysigner/version.rb +1 -1
- data/mysigner.gemspec +4 -4
- metadata +8 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 37696e7f0c5c14aa16dab283a20bf46b35f9b0fb18d3ff6f41930c3842fca963
|
|
4
|
+
data.tar.gz: ee6ad5f6063feaf786513352b95903c56c5a80f3b1eb244a18bf263b24578ffe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1a347b8525f359d9974fc6d8846756dd82a73ae3872d2b30d539421f1939237d7a589cd128694830bb5fee48880f780c2ccfb771cc62094bf7d2089838a42ac7
|
|
7
|
+
data.tar.gz: efe0009decff514149523ff6c5177625496b4139aa2682f090cff5b54bab7ce51712d74886e7b92e99d6d0845f6ff228e7cbc28058bd3b1b3ccbe1832c89b35f
|
data/.DS_Store
CHANGED
|
Binary file
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -229,6 +229,76 @@ mysigner keystore activate ID # Set as active keystore
|
|
|
229
229
|
mysigner keystore delete ID # Delete keystore
|
|
230
230
|
```
|
|
231
231
|
|
|
232
|
+
### Google Play Credentials
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
mysigner gp-credential list # List all credentials
|
|
236
|
+
mysigner gp-credential activate ID # Set as active credential
|
|
237
|
+
mysigner gp-credential test ID # Test Google Play connection
|
|
238
|
+
mysigner gp-credential delete ID # Delete credential
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### App Store Releases
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
mysigner release list # List release configurations
|
|
245
|
+
mysigner release list --bundle-id com.app # Filter by bundle ID
|
|
246
|
+
mysigner release show ID # Show release details
|
|
247
|
+
mysigner release create --bundle-id-id 42 # Create release config
|
|
248
|
+
mysigner release update ID --auto-submit # Update release config
|
|
249
|
+
mysigner release update ID --whats-new "Bug fixes"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Google Play Tracks
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
mysigner tracks com.example.app # List tracks for an app
|
|
256
|
+
mysigner tracks com.example.app --sort # Sort alphabetically
|
|
257
|
+
mysigner track com.example.app production # Show track details
|
|
258
|
+
mysigner track com.example.app beta # Show beta track details
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Android Apps
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
mysigner android init # Detect and register Android app
|
|
265
|
+
mysigner android add com.example.app # Register app manually
|
|
266
|
+
mysigner android build # Build AAB file
|
|
267
|
+
mysigner android list # List registered Android apps
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Apps
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
mysigner apps # List all apps (iOS + Android)
|
|
274
|
+
mysigner apps --platform ios # iOS apps only
|
|
275
|
+
mysigner apps --platform android # Android apps only
|
|
276
|
+
mysigner apps -q "myapp" # Search by name
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Merchant IDs
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
mysigner merchant-ids # List Apple Pay Merchant IDs
|
|
283
|
+
mysigner merchant-id create IDENTIFIER # Create a Merchant ID
|
|
284
|
+
mysigner merchant-id delete IDENTIFIER # Delete a Merchant ID
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### App Groups
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
mysigner app-groups # List App Groups
|
|
291
|
+
mysigner app-group register IDENTIFIER # Register an App Group
|
|
292
|
+
mysigner app-group delete IDENTIFIER # Delete an App Group
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Validate Signing
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
mysigner validate -b com.example.app -t development # Validate signing config
|
|
299
|
+
mysigner validate --type appstore # Auto-detect bundle ID
|
|
300
|
+
```
|
|
301
|
+
|
|
232
302
|
### Sync
|
|
233
303
|
|
|
234
304
|
```bash
|
|
@@ -280,11 +350,14 @@ mysigner config set KEY VAL # Update configuration value
|
|
|
280
350
|
- ✅ **iOS Build & Ship** (`mysigner ship testflight`, `mysigner ship appstore`)
|
|
281
351
|
- ✅ **Android Build & Ship** (`mysigner ship internal/alpha/beta/production`)
|
|
282
352
|
- ✅ Android keystore management (`mysigner keystore upload/download/activate`)
|
|
353
|
+
- ✅ Google Play credential management (`mysigner gp-credential list/activate/test/delete`)
|
|
283
354
|
- ✅ Automatic version code increment for Android
|
|
284
355
|
- ✅ App Store submission with release types (AFTER_APPROVAL, MANUAL, SCHEDULED)
|
|
356
|
+
- ✅ App Store release configuration (`mysigner release list/show/create/update`)
|
|
357
|
+
- ✅ Server-side signing validation (`mysigner validate`)
|
|
285
358
|
- ✅ Project detection (Native iOS/Android, React Native, Flutter, Capacitor/Ionic)
|
|
286
359
|
- ✅ `mysigner doctor` health check with auto-fix capabilities
|
|
287
|
-
- ✅
|
|
360
|
+
- ✅ 260+ RSpec tests
|
|
288
361
|
- ✅ Interactive prompts and wizards
|
|
289
362
|
|
|
290
363
|
📅 **Future**:
|
|
@@ -292,7 +365,6 @@ mysigner config set KEY VAL # Update configuration value
|
|
|
292
365
|
- Progress spinners (TTY::Spinner)
|
|
293
366
|
- `--json` flag for scripting
|
|
294
367
|
- CI/CD templates (GitHub Actions, GitLab CI)
|
|
295
|
-
- Phased release support
|
|
296
368
|
|
|
297
369
|
See the [main project roadmap](https://github.com/jurgenleka/my-signer/blob/main/ROADMAP.md) for detailed plans.
|
|
298
370
|
|
|
@@ -11,8 +11,8 @@ module Mysigner
|
|
|
11
11
|
say "Install: #{File.expand_path('../../../..', __FILE__)}", :white
|
|
12
12
|
say "Config: #{Config::CONFIG_FILE}", :white
|
|
13
13
|
say ""
|
|
14
|
-
say "
|
|
15
|
-
say "
|
|
14
|
+
say "Docs: https://mysigner.dev/docs/commands", :white
|
|
15
|
+
say "Support: https://mysigner.dev/landing#contact", :white
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
desc "login", "Log in with existing API token (⭐ first-timers: use 'onboard' instead)"
|
|
@@ -225,7 +225,7 @@ module Mysigner
|
|
|
225
225
|
|
|
226
226
|
# Check App Store Connect status
|
|
227
227
|
begin
|
|
228
|
-
client = Client.new(api_url: config.api_url, api_token: config.api_token)
|
|
228
|
+
client = Client.new(api_url: config.api_url, api_token: config.api_token, user_email: config.user_email)
|
|
229
229
|
org_response = client.get("/api/v1/organizations/#{config.current_organization_id}")
|
|
230
230
|
org_data = org_response[:data]
|
|
231
231
|
|
|
@@ -268,11 +268,11 @@ module Mysigner
|
|
|
268
268
|
|
|
269
269
|
begin
|
|
270
270
|
app_response = client.get("/api/v1/organizations/#{config.current_organization_id}/apple_apps", params: { bundle_id: bundle_id })
|
|
271
|
-
app = Array(app_response
|
|
272
|
-
|
|
271
|
+
app = Array(app_response.dig(:data, 'data', 'apps')).first
|
|
272
|
+
|
|
273
273
|
if app
|
|
274
274
|
builds_response = client.get("/api/v1/organizations/#{config.current_organization_id}/builds", params: { app_id: app['id'] })
|
|
275
|
-
latest = Array(builds_response
|
|
275
|
+
latest = Array(builds_response.dig(:data, 'data', 'builds')).first
|
|
276
276
|
if latest
|
|
277
277
|
latest_build_before_upload = latest['build_number'].to_i
|
|
278
278
|
say "✓ Current latest build: ##{latest_build_before_upload}", :green
|
|
@@ -375,11 +375,11 @@ module Mysigner
|
|
|
375
375
|
# Check for new build
|
|
376
376
|
begin
|
|
377
377
|
app_response = client.get("/api/v1/organizations/#{config.current_organization_id}/apple_apps", params: { bundle_id: bundle_id })
|
|
378
|
-
app = Array(app_response
|
|
379
|
-
|
|
378
|
+
app = Array(app_response.dig(:data, 'data', 'apps')).first
|
|
379
|
+
|
|
380
380
|
if app
|
|
381
381
|
builds_response = client.get("/api/v1/organizations/#{config.current_organization_id}/builds", params: { app_id: app['id'] })
|
|
382
|
-
latest = Array(builds_response
|
|
382
|
+
latest = Array(builds_response.dig(:data, 'data', 'builds')).first
|
|
383
383
|
|
|
384
384
|
current_build_num = latest ? latest['build_number'].to_i : 0
|
|
385
385
|
|
|
@@ -864,7 +864,7 @@ module Mysigner
|
|
|
864
864
|
begin
|
|
865
865
|
client.post(
|
|
866
866
|
"/api/v1/organizations/#{config.current_organization_id}/android_keystores/#{active_keystore['id']}/link_to_app",
|
|
867
|
-
{ package_name: package_name }
|
|
867
|
+
body: { package_name: package_name }
|
|
868
868
|
)
|
|
869
869
|
rescue => e
|
|
870
870
|
# Non-fatal, continue
|
|
@@ -1024,15 +1024,15 @@ module Mysigner
|
|
|
1024
1024
|
friendly_name = generate_app_name_from_package(package_name)
|
|
1025
1025
|
create_response = client.post(
|
|
1026
1026
|
"/api/v1/organizations/#{config.current_organization_id}/android_apps",
|
|
1027
|
-
{ android_app: { package_name: package_name, name: friendly_name } }
|
|
1027
|
+
body: { android_app: { package_name: package_name, name: friendly_name } }
|
|
1028
1028
|
)
|
|
1029
|
-
app = create_response[:data]
|
|
1029
|
+
app = create_response[:data]['android_app']
|
|
1030
1030
|
end
|
|
1031
1031
|
|
|
1032
1032
|
# Now save the build record
|
|
1033
1033
|
client.post(
|
|
1034
1034
|
"/api/v1/organizations/#{config.current_organization_id}/android_apps/#{app['id']}/android_builds",
|
|
1035
|
-
{ android_build: { version_code: version_code, version_name: version_name, status: 'completed' } }
|
|
1035
|
+
body: { android_build: { version_code: version_code, version_name: version_name, status: 'completed' } }
|
|
1036
1036
|
)
|
|
1037
1037
|
rescue => e
|
|
1038
1038
|
# Non-fatal - just log for debugging
|
|
@@ -97,8 +97,8 @@ module Mysigner
|
|
|
97
97
|
title: "Bundle ID Issue",
|
|
98
98
|
suggestions: [
|
|
99
99
|
"Verify Bundle ID in Xcode matches Apple Developer Portal",
|
|
100
|
-
"List Bundle IDs: mysigner
|
|
101
|
-
"Register new Bundle ID: mysigner
|
|
100
|
+
"List Bundle IDs: mysigner bundleid list",
|
|
101
|
+
"Register new Bundle ID: mysigner bundleid register <ID>",
|
|
102
102
|
"Check My Signer dashboard for registered apps"
|
|
103
103
|
]
|
|
104
104
|
},
|
|
@@ -193,7 +193,7 @@ module Mysigner
|
|
|
193
193
|
title: "Keystore Not Found",
|
|
194
194
|
suggestions: [
|
|
195
195
|
"Upload keystore: mysigner keystore upload <path>",
|
|
196
|
-
"List keystores: mysigner
|
|
196
|
+
"List keystores: mysigner keystore list",
|
|
197
197
|
"Download keystore: mysigner keystore download <ID>",
|
|
198
198
|
"Check keystore path in build.gradle"
|
|
199
199
|
]
|
|
@@ -324,7 +324,7 @@ module Mysigner
|
|
|
324
324
|
suggestions: [
|
|
325
325
|
"AAB is signed with a different key than expected",
|
|
326
326
|
"Verify keystore matches what's registered in Play Console",
|
|
327
|
-
"Check active keystore: mysigner
|
|
327
|
+
"Check active keystore: mysigner keystore list --active",
|
|
328
328
|
"If using Google Play App Signing, upload the correct upload key"
|
|
329
329
|
]
|
|
330
330
|
}
|
|
@@ -482,7 +482,7 @@ module Mysigner
|
|
|
482
482
|
},
|
|
483
483
|
profiles: "mysigner profiles",
|
|
484
484
|
certificates: "mysigner certificates",
|
|
485
|
-
keystores: "mysigner
|
|
485
|
+
keystores: "mysigner keystore list",
|
|
486
486
|
doctor: "mysigner doctor",
|
|
487
487
|
onboard: "mysigner onboard",
|
|
488
488
|
login: "mysigner login"
|
|
@@ -311,7 +311,7 @@ module Mysigner
|
|
|
311
311
|
say "💡 Keystore Not Found: How to fix", :cyan
|
|
312
312
|
say ""
|
|
313
313
|
say " → Upload keystore: mysigner keystore upload <path>", :yellow
|
|
314
|
-
say " → List keystores: mysigner
|
|
314
|
+
say " → List keystores: mysigner keystore list", :yellow
|
|
315
315
|
say " → Download keystore: mysigner keystore download <ID>", :yellow
|
|
316
316
|
say " → Check keystore path in build.gradle", :yellow
|
|
317
317
|
say ""
|
|
@@ -407,7 +407,7 @@ module Mysigner
|
|
|
407
407
|
say "💡 General troubleshooting:", :cyan
|
|
408
408
|
say ""
|
|
409
409
|
say " → Run 'mysigner doctor' to check your setup", :yellow
|
|
410
|
-
say " → List keystores: mysigner
|
|
410
|
+
say " → List keystores: mysigner keystore list", :yellow
|
|
411
411
|
say " → Check Play Console: https://play.google.com/console", :yellow
|
|
412
412
|
say ""
|
|
413
413
|
end
|
|
@@ -80,7 +80,7 @@ module Mysigner
|
|
|
80
80
|
say " ✓ Logged in", :green
|
|
81
81
|
|
|
82
82
|
begin
|
|
83
|
-
client = Client.new(api_url: config.api_url, api_token: config.api_token)
|
|
83
|
+
client = Client.new(api_url: config.api_url, api_token: config.api_token, user_email: config.user_email)
|
|
84
84
|
client.test_connection
|
|
85
85
|
say " ✓ API connection working", :green
|
|
86
86
|
|
|
@@ -823,7 +823,7 @@ module Mysigner
|
|
|
823
823
|
say ""
|
|
824
824
|
say " 📋 Quick fix:", :cyan
|
|
825
825
|
say " • Get UDID: Connect device → Finder → Click serial number", :green
|
|
826
|
-
say " • Run: mysigner device add <
|
|
826
|
+
say " • Run: mysigner device add <NAME> <UDID>", :green
|
|
827
827
|
say " • Or add in: #{client.api_url}/organizations/#{config.current_organization_id}", :green
|
|
828
828
|
say ""
|
|
829
829
|
else
|
|
@@ -891,14 +891,14 @@ module Mysigner
|
|
|
891
891
|
)
|
|
892
892
|
|
|
893
893
|
if response[:success]
|
|
894
|
-
data = response[:data]
|
|
894
|
+
data = response[:data]['data'] || response[:data]
|
|
895
895
|
say "✓ iOS sync completed!", :green
|
|
896
896
|
say ""
|
|
897
|
-
|
|
897
|
+
|
|
898
898
|
if data['synced_at']
|
|
899
899
|
say "Last synced: #{data['synced_at']}", :cyan
|
|
900
900
|
end
|
|
901
|
-
|
|
901
|
+
|
|
902
902
|
if data['summary']
|
|
903
903
|
say ""
|
|
904
904
|
say "📊 Summary:", :cyan
|
|
@@ -931,7 +931,7 @@ module Mysigner
|
|
|
931
931
|
say "✓ Android sync started!", :green
|
|
932
932
|
say ""
|
|
933
933
|
say "Sync runs in the background. Check status with:", :cyan
|
|
934
|
-
say " mysigner android
|
|
934
|
+
say " mysigner apps --platform android", :green
|
|
935
935
|
say ""
|
|
936
936
|
|
|
937
937
|
# Optionally wait and show status
|