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.
- checksums.yaml +4 -4
- data/.githooks/pre-commit +15 -0
- data/.githooks/pre-push +21 -0
- data/.github/workflows/ci.yml +29 -0
- data/.rubocop.yml +55 -0
- data/.rubocop_todo.yml +112 -0
- data/CHANGELOG.md +96 -0
- data/Gemfile +5 -3
- data/Gemfile.lock +38 -8
- data/README.md +13 -15
- data/Rakefile +5 -3
- data/bin/console +4 -3
- data/bin/setup +3 -0
- data/exe/mysigner +2 -1
- data/lib/mysigner/build/android_executor.rb +46 -52
- data/lib/mysigner/build/android_parser.rb +33 -40
- data/lib/mysigner/build/configurator.rb +17 -16
- data/lib/mysigner/build/detector.rb +39 -50
- data/lib/mysigner/build/error_analyzer.rb +70 -68
- data/lib/mysigner/build/executor.rb +30 -37
- data/lib/mysigner/build/parser.rb +18 -18
- data/lib/mysigner/cli/auth_commands.rb +735 -752
- data/lib/mysigner/cli/build_commands.rb +697 -721
- data/lib/mysigner/cli/concerns/actionable_suggestions.rb +208 -154
- data/lib/mysigner/cli/concerns/api_helpers.rb +46 -54
- data/lib/mysigner/cli/concerns/error_handlers.rb +247 -237
- data/lib/mysigner/cli/concerns/helpers.rb +12 -1
- data/lib/mysigner/cli/diagnostic_commands.rb +659 -635
- data/lib/mysigner/cli/resource_commands.rb +880 -902
- data/lib/mysigner/cli/validate_commands.rb +25 -25
- data/lib/mysigner/cli.rb +3 -1
- data/lib/mysigner/client.rb +27 -19
- data/lib/mysigner/config.rb +93 -56
- data/lib/mysigner/export/exporter.rb +32 -36
- data/lib/mysigner/signing/certificate_checker.rb +18 -23
- data/lib/mysigner/signing/keystore_manager.rb +34 -39
- data/lib/mysigner/signing/validator.rb +38 -40
- data/lib/mysigner/signing/wizard.rb +329 -342
- data/lib/mysigner/upload/app_store_automation.rb +51 -49
- data/lib/mysigner/upload/app_store_submission.rb +87 -92
- data/lib/mysigner/upload/play_store_uploader.rb +98 -115
- data/lib/mysigner/upload/uploader.rb +101 -109
- data/lib/mysigner/version.rb +3 -1
- data/lib/mysigner.rb +13 -11
- data/mysigner.gemspec +36 -33
- data/test_manual.rb +37 -36
- metadata +37 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4297e99c0337f28d14aea62d52242a57db707a59a23ad2d2890271c9759c3ac1
|
|
4
|
+
data.tar.gz: 56078eddbf0b0a103a27378abcaa8de232774e1185c8b410a19ec9c3160b08ab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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!"
|
data/.githooks/pre-push
ADDED
|
@@ -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
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
41
|
-
net-http (
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
73
|
-
# Enter your
|
|
74
|
-
#
|
|
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
|
|
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
|
|
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
|
|
190
|
+
mysigner device detect # Detect connected iOS devices
|
|
190
191
|
mysigner device add NAME UDID # Register new device
|
|
191
|
-
mysigner device
|
|
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
|
|
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
|
|
218
|
-
mysigner
|
|
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,
|
|
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/
|
|
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
data/bin/console
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
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
|
|
14
|
+
require 'irb'
|
|
14
15
|
IRB.start(__FILE__)
|
data/bin/setup
CHANGED