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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95c182f73aa3a1ae392f084caa9f18d55e82a94939facf19bdab2c3a7f431f1b
4
- data.tar.gz: 02e6462deb9b7da34eb7a95e14065d931b73891f5e2eb5f88449188ced09c346
3
+ metadata.gz: 37696e7f0c5c14aa16dab283a20bf46b35f9b0fb18d3ff6f41930c3842fca963
4
+ data.tar.gz: ee6ad5f6063feaf786513352b95903c56c5a80f3b1eb244a18bf263b24578ffe
5
5
  SHA512:
6
- metadata.gz: 6246b6206c94a912552401259184267214d28ed1f65050e7f4a6c1ce9ba1190d8312b85e5d7055a5b657d2a4001d1810b62b2414d56929895925a5cfb00510cd
7
- data.tar.gz: 2cccea5a3fe1d78071844d2237d54ada81284eb4b3494f0ccca9f9439e74d87f97d76d9a8f3c2880fd05d99c921b0aa6c72eca0d86b11f14fdf5601f00ef230f
6
+ metadata.gz: 1a347b8525f359d9974fc6d8846756dd82a73ae3872d2b30d539421f1939237d7a589cd128694830bb5fee48880f780c2ccfb771cc62094bf7d2089838a42ac7
7
+ data.tar.gz: efe0009decff514149523ff6c5177625496b4139aa2682f090cff5b54bab7ce51712d74886e7b92e99d6d0845f6ff228e7cbc28058bd3b1b3ccbe1832c89b35f
data/.DS_Store CHANGED
Binary file
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ *.gem
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /_yardoc/
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mysigner (0.1.0)
4
+ mysigner (0.1.1)
5
5
  base64 (~> 0.2)
6
6
  faraday (~> 2.14)
7
7
  faraday-retry (~> 2.2)
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
- - ✅ 90+ RSpec tests
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
 
@@ -105,7 +105,7 @@ module Mysigner
105
105
  params: {
106
106
  bundle_id: bundle_id,
107
107
  type: profile_type.upcase,
108
- status: 'ACTIVE'
108
+ state: 'ACTIVE'
109
109
  }
110
110
  )
111
111
 
@@ -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 "Repository: https://github.com/yourusername/my-signer-cli", :white
15
- say "Issues: https://github.com/yourusername/my-signer-cli/issues", :white
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[:data]['data']['apps']).first
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[:data]['data']['builds']).first
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[:data]['data']['apps']).first
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[:data]['data']['builds']).first
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 bundleids",
101
- "Register new Bundle ID: mysigner bundleids create <ID>",
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 keystores",
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 keystores --active",
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 keystores",
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 keystores", :yellow
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 keystores", :yellow
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 <UDID> <NAME>", :green
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-apps", :green
934
+ say " mysigner apps --platform android", :green
935
935
  say ""
936
936
 
937
937
  # Optionally wait and show status