mysigner 0.1.2 → 0.1.3

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.githooks/pre-commit +15 -0
  3. data/.githooks/pre-push +21 -0
  4. data/.github/workflows/ci.yml +29 -0
  5. data/.rubocop.yml +55 -0
  6. data/.rubocop_todo.yml +112 -0
  7. data/CHANGELOG.md +96 -0
  8. data/Gemfile +5 -3
  9. data/Gemfile.lock +38 -8
  10. data/README.md +13 -15
  11. data/Rakefile +5 -3
  12. data/bin/console +4 -3
  13. data/bin/setup +3 -0
  14. data/exe/mysigner +2 -1
  15. data/lib/mysigner/build/android_executor.rb +46 -52
  16. data/lib/mysigner/build/android_parser.rb +33 -40
  17. data/lib/mysigner/build/configurator.rb +17 -16
  18. data/lib/mysigner/build/detector.rb +39 -50
  19. data/lib/mysigner/build/error_analyzer.rb +70 -68
  20. data/lib/mysigner/build/executor.rb +30 -37
  21. data/lib/mysigner/build/parser.rb +18 -18
  22. data/lib/mysigner/cli/auth_commands.rb +735 -752
  23. data/lib/mysigner/cli/build_commands.rb +697 -721
  24. data/lib/mysigner/cli/concerns/actionable_suggestions.rb +208 -154
  25. data/lib/mysigner/cli/concerns/api_helpers.rb +46 -54
  26. data/lib/mysigner/cli/concerns/error_handlers.rb +247 -237
  27. data/lib/mysigner/cli/concerns/helpers.rb +12 -1
  28. data/lib/mysigner/cli/diagnostic_commands.rb +659 -635
  29. data/lib/mysigner/cli/resource_commands.rb +880 -902
  30. data/lib/mysigner/cli/validate_commands.rb +25 -25
  31. data/lib/mysigner/cli.rb +3 -1
  32. data/lib/mysigner/client.rb +27 -19
  33. data/lib/mysigner/config.rb +93 -56
  34. data/lib/mysigner/export/exporter.rb +32 -36
  35. data/lib/mysigner/signing/certificate_checker.rb +18 -23
  36. data/lib/mysigner/signing/keystore_manager.rb +34 -39
  37. data/lib/mysigner/signing/validator.rb +38 -40
  38. data/lib/mysigner/signing/wizard.rb +329 -342
  39. data/lib/mysigner/upload/app_store_automation.rb +51 -49
  40. data/lib/mysigner/upload/app_store_submission.rb +87 -92
  41. data/lib/mysigner/upload/play_store_uploader.rb +98 -115
  42. data/lib/mysigner/upload/uploader.rb +101 -109
  43. data/lib/mysigner/version.rb +3 -1
  44. data/lib/mysigner.rb +13 -11
  45. data/mysigner.gemspec +36 -33
  46. data/test_manual.rb +37 -36
  47. metadata +37 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37696e7f0c5c14aa16dab283a20bf46b35f9b0fb18d3ff6f41930c3842fca963
4
- data.tar.gz: ee6ad5f6063feaf786513352b95903c56c5a80f3b1eb244a18bf263b24578ffe
3
+ metadata.gz: 4297e99c0337f28d14aea62d52242a57db707a59a23ad2d2890271c9759c3ac1
4
+ data.tar.gz: 56078eddbf0b0a103a27378abcaa8de232774e1185c8b410a19ec9c3160b08ab
5
5
  SHA512:
6
- metadata.gz: 1a347b8525f359d9974fc6d8846756dd82a73ae3872d2b30d539421f1939237d7a589cd128694830bb5fee48880f780c2ccfb771cc62094bf7d2089838a42ac7
7
- data.tar.gz: efe0009decff514149523ff6c5177625496b4139aa2682f090cff5b54bab7ce51712d74886e7b92e99d6d0845f6ff228e7cbc28058bd3b1b3ccbe1832c89b35f
6
+ metadata.gz: 6ff3e8130cba10fa931e4f89d9de87fb4acafa37203d572f709021534b0a2dce6ae7cdcc26608a641e21835e6808671702ae73b6635f84e5787f302b5b8e92df
7
+ data.tar.gz: e7ffb3d8fe8b00ca4d3fe179a97d95a37982f67789f17048132d2be18c6eb23ef574e1a20783d72173002c9bd9ee063dec3206219af13dea6769f787f293d5cb
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ echo "==> Running RuboCop on staged Ruby files..."
5
+
6
+ # Get staged .rb files only
7
+ STAGED_RB_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.rb$' || true)
8
+
9
+ if [ -n "$STAGED_RB_FILES" ]; then
10
+ bundle exec rubocop --force-exclusion $STAGED_RB_FILES
11
+ else
12
+ echo " No staged Ruby files, skipping RuboCop."
13
+ fi
14
+
15
+ echo "==> All pre-commit checks passed!"
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+
3
+ echo "==> Running RSpec test suite before push..."
4
+ OUTPUT=$(bundle exec rspec --format progress 2>&1)
5
+ echo "$OUTPUT"
6
+
7
+ # Check for failures in the RSpec summary line, not exit code
8
+ # (CLI tests invoke exit(1) which leaks through Thor and taints the process exit code)
9
+ if echo "$OUTPUT" | grep -qE "[1-9][0-9]* failures?"; then
10
+ echo "==> Tests FAILED! Push aborted."
11
+ exit 1
12
+ fi
13
+
14
+ if echo "$OUTPUT" | grep -q "0 failures"; then
15
+ echo "==> All tests passed! Pushing..."
16
+ exit 0
17
+ fi
18
+
19
+ # If we can't parse the output, something went wrong
20
+ echo "==> Could not determine test results. Push aborted."
21
+ exit 1
@@ -0,0 +1,29 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ lint:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: "3.2"
16
+ bundler-cache: true
17
+ - name: RuboCop
18
+ run: bundle exec rubocop
19
+
20
+ test:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: ruby/setup-ruby@v1
25
+ with:
26
+ ruby-version: "3.2"
27
+ bundler-cache: true
28
+ - name: RSpec
29
+ run: bundle exec rspec
data/.rubocop.yml ADDED
@@ -0,0 +1,55 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ inherit_mode:
4
+ merge:
5
+ - Exclude
6
+
7
+ AllCops:
8
+ TargetRubyVersion: 3.2
9
+ NewCops: enable
10
+ SuggestExtensions: false
11
+
12
+ Layout/LineLength:
13
+ Max: 150
14
+
15
+ # Metrics cops — relaxed for existing code, tighten incrementally
16
+ Metrics/MethodLength:
17
+ Max: 50
18
+ Metrics/AbcSize:
19
+ Max: 60
20
+ Metrics/CyclomaticComplexity:
21
+ Max: 20
22
+ Metrics/PerceivedComplexity:
23
+ Max: 20
24
+ Metrics/ClassLength:
25
+ Max: 500
26
+ Metrics/ModuleLength:
27
+ Max: 500
28
+ Metrics/BlockLength:
29
+ Exclude:
30
+ - "spec/**/*"
31
+ - "*.gemspec"
32
+ Metrics/BlockNesting:
33
+ Max: 5
34
+ Metrics/ParameterLists:
35
+ Max: 6
36
+
37
+ Style/Documentation:
38
+ Enabled: false
39
+ Style/MultilineBlockChain:
40
+ Enabled: false
41
+ Style/SafeNavigationChainLength:
42
+ Enabled: false
43
+
44
+ Gemspec/DevelopmentDependencies:
45
+ Enabled: false
46
+
47
+ Naming/PredicateMethod:
48
+ Enabled: false
49
+ Naming/PredicatePrefix:
50
+ Enabled: false
51
+ Naming/AccessorMethodName:
52
+ Enabled: false
53
+
54
+ Lint/DuplicateBranch:
55
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,112 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config --auto-gen-only-exclude`
3
+ # on 2026-03-31 15:30:27 UTC using RuboCop version 1.86.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 5
10
+ # This cop supports safe autocorrection (--autocorrect).
11
+ # Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings.
12
+ # URISchemes: http, https
13
+ Layout/LineLength:
14
+ Exclude:
15
+ - 'lib/mysigner/cli/build_commands.rb'
16
+ - 'lib/mysigner/cli/resource_commands.rb'
17
+ - 'lib/mysigner/upload/app_store_automation.rb'
18
+ - 'mysigner.gemspec'
19
+ - 'spec/cli/ship_appstore_spec.rb'
20
+
21
+ # Offense count: 44
22
+ # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
23
+ Metrics/AbcSize:
24
+ Exclude:
25
+ - 'lib/mysigner/build/error_analyzer.rb'
26
+ - 'lib/mysigner/cli/auth_commands.rb'
27
+ - 'lib/mysigner/cli/build_commands.rb'
28
+ - 'lib/mysigner/cli/diagnostic_commands.rb'
29
+ - 'lib/mysigner/cli/resource_commands.rb'
30
+ - 'lib/mysigner/cli/validate_commands.rb'
31
+ - 'lib/mysigner/signing/validator.rb'
32
+ - 'lib/mysigner/signing/wizard.rb'
33
+ - 'lib/mysigner/upload/app_store_submission.rb'
34
+
35
+ # Offense count: 11
36
+ # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns.
37
+ # AllowedMethods: refine
38
+ Metrics/BlockLength:
39
+ Exclude:
40
+ - 'spec/**/*'
41
+ - '*.gemspec'
42
+ - 'lib/mysigner/cli/auth_commands.rb'
43
+ - 'lib/mysigner/cli/build_commands.rb'
44
+ - 'lib/mysigner/cli/diagnostic_commands.rb'
45
+ - 'lib/mysigner/cli/resource_commands.rb'
46
+ - 'lib/mysigner/cli/validate_commands.rb'
47
+
48
+ # Offense count: 5
49
+ # Configuration parameters: CountBlocks, CountModifierForms, Max.
50
+ Metrics/BlockNesting:
51
+ Exclude:
52
+ - 'lib/mysigner/cli/diagnostic_commands.rb'
53
+
54
+ # Offense count: 1
55
+ # Configuration parameters: CountComments, Max, CountAsOne.
56
+ Metrics/ClassLength:
57
+ Exclude:
58
+ - 'lib/mysigner/signing/wizard.rb'
59
+
60
+ # Offense count: 25
61
+ # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
62
+ Metrics/CyclomaticComplexity:
63
+ Exclude:
64
+ - 'lib/mysigner/build/detector.rb'
65
+ - 'lib/mysigner/cli/auth_commands.rb'
66
+ - 'lib/mysigner/cli/build_commands.rb'
67
+ - 'lib/mysigner/cli/diagnostic_commands.rb'
68
+ - 'lib/mysigner/cli/resource_commands.rb'
69
+ - 'lib/mysigner/cli/validate_commands.rb'
70
+ - 'lib/mysigner/signing/wizard.rb'
71
+
72
+ # Offense count: 43
73
+ # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns.
74
+ Metrics/MethodLength:
75
+ Exclude:
76
+ - 'lib/mysigner/build/detector.rb'
77
+ - 'lib/mysigner/build/error_analyzer.rb'
78
+ - 'lib/mysigner/cli/auth_commands.rb'
79
+ - 'lib/mysigner/cli/build_commands.rb'
80
+ - 'lib/mysigner/cli/diagnostic_commands.rb'
81
+ - 'lib/mysigner/cli/resource_commands.rb'
82
+ - 'lib/mysigner/cli/validate_commands.rb'
83
+ - 'lib/mysigner/signing/wizard.rb'
84
+ - 'lib/mysigner/upload/app_store_automation.rb'
85
+
86
+ # Offense count: 4
87
+ # Configuration parameters: CountComments, Max, CountAsOne.
88
+ Metrics/ModuleLength:
89
+ Exclude:
90
+ - 'lib/mysigner/cli/auth_commands.rb'
91
+ - 'lib/mysigner/cli/build_commands.rb'
92
+ - 'lib/mysigner/cli/diagnostic_commands.rb'
93
+ - 'lib/mysigner/cli/resource_commands.rb'
94
+
95
+ # Offense count: 2
96
+ # Configuration parameters: Max, CountKeywordArgs, MaxOptionalParameters.
97
+ Metrics/ParameterLists:
98
+ Exclude:
99
+ - 'lib/mysigner/build/executor.rb'
100
+ - 'lib/mysigner/signing/keystore_manager.rb'
101
+
102
+ # Offense count: 26
103
+ # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
104
+ Metrics/PerceivedComplexity:
105
+ Exclude:
106
+ - 'lib/mysigner/build/detector.rb'
107
+ - 'lib/mysigner/cli/auth_commands.rb'
108
+ - 'lib/mysigner/cli/build_commands.rb'
109
+ - 'lib/mysigner/cli/diagnostic_commands.rb'
110
+ - 'lib/mysigner/cli/resource_commands.rb'
111
+ - 'lib/mysigner/cli/validate_commands.rb'
112
+ - 'lib/mysigner/signing/wizard.rb'
data/CHANGELOG.md ADDED
@@ -0,0 +1,96 @@
1
+ # Changelog
2
+
3
+ All notable changes to My Signer CLI will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.0] - 2026-01-23
9
+
10
+ ### Added
11
+
12
+ #### Build & Ship Commands
13
+ - `mysigner ship testflight` - Build iOS app and upload to TestFlight in one command
14
+ - `mysigner ship appstore` - Build iOS app and submit to App Store Connect
15
+ - `mysigner ship internal/alpha/beta/production --platform android` - Build and upload Android app to Google Play
16
+ - `mysigner submit` - Submit existing builds for App Store/Play Store review
17
+ - `mysigner build` - Build .xcarchive for iOS (advanced)
18
+ - `mysigner export` - Export archive to IPA (advanced)
19
+ - `mysigner upload testflight` - Upload existing IPA to TestFlight (advanced)
20
+
21
+ #### Android Support
22
+ - Full Android build and upload workflow
23
+ - Keystore management: `mysigner keystore list/upload/download/activate/delete`
24
+ - Automatic version code increment when uploading to Google Play
25
+ - Support for all Google Play tracks: internal, alpha, beta, production
26
+ - Native Android, React Native, Flutter, and Capacitor/Ionic project detection
27
+
28
+ #### iOS Features
29
+ - App Store submission with release types (AFTER_APPROVAL, MANUAL, SCHEDULED)
30
+ - Scheduled release support with `--scheduled-date`
31
+ - Build processing wait with polling
32
+ - Automatic team ID detection from My Signer API
33
+ - Support for Native iOS, React Native, Flutter, and Capacitor/Ionic projects
34
+
35
+ #### Diagnostics & Onboarding
36
+ - `mysigner doctor` - Comprehensive health check with auto-fix capabilities
37
+ - Checks Xcode, Command Line Tools, upload tools
38
+ - Validates My Signer configuration and credentials
39
+ - Checks signing identity in keychain
40
+ - Verifies App Store Connect credentials (with interactive setup)
41
+ - Checks disk space, network connectivity
42
+ - Detects iOS and Android projects
43
+ - Auto-creates provisioning profiles when missing
44
+ - Generates CSR for certificate creation
45
+ - `mysigner doctor --platform ios` - Check iOS setup only
46
+ - `mysigner doctor --platform android` - Check Android setup only (Java, Android SDK, Gradle, keystores)
47
+ - `mysigner onboard` - Guided setup wizard for new users
48
+
49
+ #### Core Commands
50
+ - `mysigner login` - Authenticate with API token
51
+ - `mysigner logout` - Clear stored credentials
52
+ - `mysigner status` - Check connection and show organization stats
53
+ - `mysigner orgs` - List accessible organizations
54
+ - `mysigner switch` - Switch active organization
55
+ - `mysigner config show/set` - Manage configuration
56
+
57
+ #### Resource Management
58
+ - **Devices**: `mysigner devices`, `mysigner device detect/add/update`
59
+ - **Profiles**: `mysigner profiles`, `mysigner profile download/delete`
60
+ - **Certificates**: `mysigner certificates`, `mysigner certificate check/download`
61
+ - **Bundle IDs**: `mysigner bundleid list/register`
62
+
63
+ #### Sync
64
+ - `mysigner sync` - Sync from App Store Connect (iOS)
65
+ - `mysigner sync android` - Sync from Google Play
66
+ - `mysigner sync all` - Sync both platforms
67
+ - `--force` flag to force sync even if recently synced
68
+
69
+ #### Signing Configuration
70
+ - `mysigner signing configure` - Interactive wizard for manual signing setup
71
+ - Support for configuring specific targets or all targets
72
+ - Automatic profile matching and creation
73
+
74
+ ### Technical
75
+
76
+ - Thor-based CLI architecture with modular command structure
77
+ - Faraday HTTP client with retry and error handling
78
+ - Configuration stored in `~/.mysigner/config.yml`
79
+ - 90+ RSpec tests
80
+ - Support for multiple project types:
81
+ - Native iOS (.xcodeproj, .xcworkspace)
82
+ - Native Android (Gradle)
83
+ - React Native
84
+ - Flutter
85
+ - Capacitor/Ionic
86
+
87
+ ---
88
+
89
+ ## [Unreleased]
90
+
91
+ ### Planned
92
+ - `--json` flag for scripting output
93
+ - Pretty tables (TTY::Table)
94
+ - Progress spinners (TTY::Spinner)
95
+ - CI/CD templates for GitHub Actions and GitLab CI
96
+ - Phased release support for App Store
data/Gemfile CHANGED
@@ -1,7 +1,9 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in mysigner.gemspec
6
8
  gemspec
7
- gem "xcodeproj", "~> 1.27"
9
+ gem 'xcodeproj', '~> 1.27'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mysigner (0.1.1)
4
+ mysigner (0.1.3)
5
5
  base64 (~> 0.2)
6
6
  faraday (~> 2.14)
7
7
  faraday-retry (~> 2.2)
@@ -21,6 +21,7 @@ GEM
21
21
  rexml
22
22
  addressable (2.8.7)
23
23
  public_suffix (>= 2.0.2, < 7.0)
24
+ ast (2.4.3)
24
25
  atomos (0.1.3)
25
26
  base64 (0.3.0)
26
27
  bigdecimal (3.2.3)
@@ -31,14 +32,14 @@ GEM
31
32
  rexml
32
33
  declarative (0.0.20)
33
34
  diff-lcs (1.6.2)
34
- faraday (2.14.0)
35
+ faraday (2.14.1)
35
36
  faraday-net_http (>= 2.0, < 3.5)
36
37
  json
37
38
  logger
38
39
  faraday-follow_redirects (0.4.0)
39
40
  faraday (>= 1, < 3)
40
- faraday-net_http (3.4.1)
41
- net-http (>= 0.5.0)
41
+ faraday-net_http (3.4.2)
42
+ net-http (~> 0.5)
42
43
  faraday-retry (2.3.2)
43
44
  faraday (~> 2.0)
44
45
  google-apis-androidpublisher_v3 (0.91.0)
@@ -65,20 +66,30 @@ GEM
65
66
  signet (>= 0.16, < 2.a)
66
67
  hashdiff (1.2.1)
67
68
  io-console (0.8.1)
68
- json (2.15.0)
69
+ json (2.19.3)
69
70
  jwt (3.1.2)
70
71
  base64
72
+ language_server-protocol (3.17.0.5)
73
+ lint_roller (1.1.0)
71
74
  logger (1.7.0)
72
75
  mini_mime (1.1.5)
73
76
  multi_json (1.18.0)
74
77
  nanaimo (0.4.0)
75
- net-http (0.6.0)
76
- uri
78
+ net-http (0.9.1)
79
+ uri (>= 0.11.1)
77
80
  nkf (0.2.0)
78
81
  os (1.1.4)
82
+ parallel (1.27.0)
83
+ parser (3.3.11.1)
84
+ ast (~> 2.4.1)
85
+ racc
79
86
  plist (3.7.2)
87
+ prism (1.9.0)
80
88
  public_suffix (6.0.2)
89
+ racc (1.8.1)
90
+ rainbow (3.1.1)
81
91
  rake (13.3.0)
92
+ regexp_parser (2.11.3)
82
93
  reline (0.6.2)
83
94
  io-console (~> 0.5)
84
95
  representable (3.2.0)
@@ -100,6 +111,21 @@ GEM
100
111
  diff-lcs (>= 1.2.0, < 2.0)
101
112
  rspec-support (~> 3.13.0)
102
113
  rspec-support (3.13.6)
114
+ rubocop (1.86.0)
115
+ json (~> 2.3)
116
+ language_server-protocol (~> 3.17.0.2)
117
+ lint_roller (~> 1.1.0)
118
+ parallel (~> 1.10)
119
+ parser (>= 3.3.0.2)
120
+ rainbow (>= 2.2.2, < 4.0)
121
+ regexp_parser (>= 2.9.3, < 3.0)
122
+ rubocop-ast (>= 1.49.0, < 2.0)
123
+ ruby-progressbar (~> 1.7)
124
+ unicode-display_width (>= 2.4.0, < 4.0)
125
+ rubocop-ast (1.49.1)
126
+ parser (>= 3.3.7.2)
127
+ prism (~> 1.7)
128
+ ruby-progressbar (1.13.0)
103
129
  signet (0.21.0)
104
130
  addressable (~> 2.8)
105
131
  faraday (>= 0.17.5, < 3.a)
@@ -108,7 +134,10 @@ GEM
108
134
  thor (1.4.0)
109
135
  trailblazer-option (0.1.2)
110
136
  uber (0.1.0)
111
- uri (1.0.3)
137
+ unicode-display_width (3.2.0)
138
+ unicode-emoji (~> 4.1)
139
+ unicode-emoji (4.2.0)
140
+ uri (1.1.1)
112
141
  webmock (3.25.1)
113
142
  addressable (>= 2.8.0)
114
143
  crack (>= 0.3.2)
@@ -130,6 +159,7 @@ DEPENDENCIES
130
159
  mysigner!
131
160
  rake (~> 13.0)
132
161
  rspec (~> 3.0)
162
+ rubocop (~> 1.79)
133
163
  webmock (~> 3.24)
134
164
  xcodeproj (~> 1.27)
135
165
 
data/README.md CHANGED
@@ -69,9 +69,10 @@ bundle exec rake install
69
69
 
70
70
  ```bash
71
71
  mysigner login
72
- # Enter your API token when prompted
73
- # Enter your API URL (default: http://localhost:3000)
74
- # Select your organization
72
+ # Enter your API URL (default: https://mysigner.dev or localhost if available)
73
+ # Enter your email address
74
+ # Paste your API token
75
+ # The CLI validates the token and auto-detects its organization
75
76
  ```
76
77
 
77
78
  ### 3. Ship Your App
@@ -162,7 +163,7 @@ mysigner upload testflight IPA_PATH # Upload existing IPA
162
163
  mysigner doctor # Run health check (fixes common issues)
163
164
  mysigner doctor --platform ios # Check iOS setup only
164
165
  mysigner doctor --platform android # Check Android setup only
165
- mysigner status # Check connection and show stats
166
+ mysigner status # Check connection, credentials, and ASC setup
166
167
  ```
167
168
 
168
169
  ### Authentication
@@ -177,7 +178,7 @@ mysigner onboard # Guided setup wizard
177
178
 
178
179
  ```bash
179
180
  mysigner orgs # List accessible organizations
180
- mysigner org:switch ID # Switch active organization
181
+ mysigner switch # Switch active organization
181
182
  ```
182
183
 
183
184
  ### Devices
@@ -186,9 +187,9 @@ mysigner org:switch ID # Switch active organization
186
187
  mysigner devices # List all devices
187
188
  mysigner devices --platform ios # Filter by platform
188
189
  mysigner devices --search "iPhone" # Search devices
189
- mysigner device show ID # Show device details
190
+ mysigner device detect # Detect connected iOS devices
190
191
  mysigner device add NAME UDID # Register new device
191
- mysigner device rename ID "New Name" # Update device name
192
+ mysigner device update ID "New Name" # Update device name
192
193
  ```
193
194
 
194
195
  ### Provisioning Profiles
@@ -196,9 +197,7 @@ mysigner device rename ID "New Name" # Update device name
196
197
  ```bash
197
198
  mysigner profiles # List all profiles
198
199
  mysigner profiles --type development # Filter by type
199
- mysigner profile show ID # Show profile details
200
200
  mysigner profile download ID # Download .mobileprovision
201
- mysigner profile create # Create new profile (interactive)
202
201
  mysigner profile delete ID # Delete profile
203
202
  ```
204
203
 
@@ -207,16 +206,15 @@ mysigner profile delete ID # Delete profile
207
206
  ```bash
208
207
  mysigner certificates # List all certificates
209
208
  mysigner certificates --type development # Filter by type
210
- mysigner certificate show ID # Show certificate details
209
+ mysigner certificate check # Check local keychain certificates
211
210
  mysigner certificate download ID # Download .cer file
212
211
  ```
213
212
 
214
213
  ### Bundle IDs
215
214
 
216
215
  ```bash
217
- mysigner bundle-ids # List all bundle IDs
218
- mysigner bundle-ids --search "com.example" # Search bundle IDs
219
- mysigner bundle-id show ID # Show bundle ID details
216
+ mysigner bundleid list # List all bundle IDs
217
+ mysigner bundleid register com.example.app # Register a bundle ID
220
218
  ```
221
219
 
222
220
  ### Android Keystores
@@ -346,7 +344,7 @@ mysigner config set KEY VAL # Update configuration value
346
344
  - ✅ Config management (`~/.mysigner/config.yml`)
347
345
  - ✅ API client (Faraday with retry & error handling)
348
346
  - ✅ Core commands (login, logout, config, status, orgs, switch, onboard)
349
- - ✅ Resource commands (devices, profiles, certificates, bundle-ids)
347
+ - ✅ Resource commands (devices, profiles, certificates, bundleid)
350
348
  - ✅ **iOS Build & Ship** (`mysigner ship testflight`, `mysigner ship appstore`)
351
349
  - ✅ **Android Build & Ship** (`mysigner ship internal/alpha/beta/production`)
352
350
  - ✅ Android keystore management (`mysigner keystore upload/download/activate`)
@@ -531,7 +529,7 @@ This is currently a private project. Contributions are not being accepted at thi
531
529
  ## Related Projects
532
530
 
533
531
  - **[My Signer API](https://github.com/jurgenleka/my-signer)** - The backend API and web dashboard
534
- - **[My Signer Docs](https://github.com/jurgenleka/my-signer/blob/main/PROJECT_DOCS.md)** - Documentation organization
532
+ - **[My Signer Docs](https://github.com/jurgenleka/my-signer/tree/main/app/views/docs)** - In-app documentation source
535
533
 
536
534
  ---
537
535
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "mysigner"
4
+ require 'bundler/setup'
5
+ require 'mysigner'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "mysigner"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
data/bin/setup CHANGED
@@ -5,4 +5,7 @@ set -vx
5
5
 
6
6
  bundle install
7
7
 
8
+ # Install git hooks
9
+ git config core.hooksPath .githooks
10
+
8
11
  # Do any other automated setup that you need to do here
data/exe/mysigner CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "mysigner"
4
+ require 'mysigner'
4
5
 
5
6
  Mysigner::CLI.start(ARGV)