mysigner 0.1.2 → 0.1.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.
- checksums.yaml +4 -4
- data/.githooks/pre-commit +15 -0
- data/.githooks/pre-push +21 -0
- data/.github/workflows/ci.yml +29 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +55 -0
- data/.rubocop_todo.yml +126 -0
- data/CHANGELOG.md +96 -0
- data/Gemfile +5 -3
- data/Gemfile.lock +38 -8
- data/README.md +14 -16
- data/Rakefile +5 -3
- data/bin/console +4 -3
- data/bin/setup +3 -0
- data/certificate_.cer +0 -0
- data/exe/mysigner +19 -2
- data/iOS_App_Store_Profile.mobileprovision +1 -0
- data/iOS_Distribution_Certificate.cer +1 -0
- data/lib/mysigner/build/android_executor.rb +83 -63
- 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/cleanup/private_keys_purger.rb +41 -0
- data/lib/mysigner/cli/auth_commands.rb +771 -764
- data/lib/mysigner/cli/build_commands.rb +962 -796
- 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 +44 -1
- data/lib/mysigner/cli/diagnostic_commands.rb +667 -636
- data/lib/mysigner/cli/resource_commands.rb +1153 -985
- data/lib/mysigner/cli/validate_commands.rb +25 -25
- data/lib/mysigner/cli.rb +11 -1
- data/lib/mysigner/client.rb +27 -19
- data/lib/mysigner/config.rb +161 -60
- data/lib/mysigner/export/exporter.rb +38 -37
- data/lib/mysigner/signing/certificate_checker.rb +18 -23
- data/lib/mysigner/signing/gradle_signing_injector.rb +67 -0
- data/lib/mysigner/signing/keystore_manager.rb +81 -61
- data/lib/mysigner/signing/validator.rb +38 -40
- data/lib/mysigner/signing/wizard.rb +329 -342
- data/lib/mysigner/upload/app_store_automation.rb +96 -49
- data/lib/mysigner/upload/app_store_submission.rb +87 -92
- data/lib/mysigner/upload/asc_rest_uploader.rb +119 -0
- data/lib/mysigner/upload/play_store_uploader.rb +164 -144
- data/lib/mysigner/upload/uploader.rb +136 -115
- data/lib/mysigner/version.rb +3 -1
- data/lib/mysigner.rb +13 -11
- data/mysigner.gemspec +36 -33
- data/profile_.mobileprovision +0 -0
- data/test_manual.rb +37 -36
- metadata +44 -17
- data/.DS_Store +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mysigner
|
|
2
4
|
module Signing
|
|
3
5
|
class Validator
|
|
@@ -19,20 +21,20 @@ module Mysigner
|
|
|
19
21
|
team_id = @team_id_override || @parser.team_id(@target_name, @configuration)
|
|
20
22
|
if team_id.nil? || team_id.empty?
|
|
21
23
|
result[:errors] << "No development team set for target '#{@target_name}'"
|
|
22
|
-
result[:errors] <<
|
|
23
|
-
result[:errors] <<
|
|
24
|
-
result[:errors] <<
|
|
25
|
-
result[:errors] <<
|
|
26
|
-
result[:errors] <<
|
|
27
|
-
result[:errors] <<
|
|
28
|
-
result[:errors] <<
|
|
29
|
-
result[:errors] <<
|
|
30
|
-
result[:errors] <<
|
|
31
|
-
result[:errors] <<
|
|
32
|
-
result[:errors] <<
|
|
33
|
-
result[:errors] <<
|
|
34
|
-
result[:errors] <<
|
|
35
|
-
result[:errors] <<
|
|
24
|
+
result[:errors] << ''
|
|
25
|
+
result[:errors] << 'Fix Option 1: Add team to My Signer'
|
|
26
|
+
result[:errors] << ' 1. Open https://mysigner.dev'
|
|
27
|
+
result[:errors] << ' 2. Go to Settings → App Store Connect'
|
|
28
|
+
result[:errors] << ' 3. Add your Team ID'
|
|
29
|
+
result[:errors] << ' 4. Run: mysigner build (team will auto-fetch)'
|
|
30
|
+
result[:errors] << ''
|
|
31
|
+
result[:errors] << 'Fix Option 2: Pass team via CLI'
|
|
32
|
+
result[:errors] << ' mysigner build --team YOUR_TEAM_ID'
|
|
33
|
+
result[:errors] << ''
|
|
34
|
+
result[:errors] << 'Fix Option 3: Set in Xcode'
|
|
35
|
+
result[:errors] << ' Open Xcode → Select target → Signing & Capabilities → Select a team'
|
|
36
|
+
result[:errors] << ''
|
|
37
|
+
result[:errors] << 'Find your team ID at: https://developer.apple.com/account/#!/membership/'
|
|
36
38
|
result[:valid] = false
|
|
37
39
|
elsif @team_id_override && @parser.team_id(@target_name, @configuration).nil?
|
|
38
40
|
result[:warnings] << "Using team from My Signer: #{@team_id_override}"
|
|
@@ -42,15 +44,13 @@ module Mysigner
|
|
|
42
44
|
|
|
43
45
|
# Check 2: Code signing style
|
|
44
46
|
signing_style = @parser.code_sign_style(@target_name, @configuration)
|
|
45
|
-
if signing_style.nil?
|
|
46
|
-
result[:warnings] << "Code signing style not explicitly set (will use Xcode default)"
|
|
47
|
-
end
|
|
47
|
+
result[:warnings] << 'Code signing style not explicitly set (will use Xcode default)' if signing_style.nil?
|
|
48
48
|
|
|
49
49
|
# Check 3: Bundle ID
|
|
50
50
|
bundle_id = @parser.bundle_id(@target_name, @configuration)
|
|
51
51
|
if bundle_id.nil? || bundle_id.empty? || bundle_id.include?('$(')
|
|
52
52
|
result[:errors] << "Bundle ID not set or contains variables: #{bundle_id}"
|
|
53
|
-
result[:errors] <<
|
|
53
|
+
result[:errors] << 'Fix: Open Xcode → Select target → General → Bundle Identifier'
|
|
54
54
|
result[:valid] = false
|
|
55
55
|
end
|
|
56
56
|
|
|
@@ -79,22 +79,22 @@ module Mysigner
|
|
|
79
79
|
result = validate
|
|
80
80
|
|
|
81
81
|
if result[:warnings].any?
|
|
82
|
-
puts
|
|
83
|
-
puts
|
|
82
|
+
puts ''
|
|
83
|
+
puts '⚠️ Warnings:'
|
|
84
84
|
result[:warnings].each { |w| puts " • #{w}" }
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
if result[:errors].any?
|
|
88
|
-
puts
|
|
89
|
-
puts
|
|
90
|
-
puts
|
|
88
|
+
puts ''
|
|
89
|
+
puts '❌ Validation Failed:'
|
|
90
|
+
puts ''
|
|
91
91
|
result[:errors].each { |e| puts " • #{e}" }
|
|
92
|
-
puts
|
|
93
|
-
raise ValidationError,
|
|
92
|
+
puts ''
|
|
93
|
+
raise ValidationError, 'Pre-build validation failed. Fix the errors above and try again.'
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
-
puts
|
|
97
|
-
puts
|
|
96
|
+
puts '✓ Pre-build validation passed' if result[:warnings].empty?
|
|
97
|
+
puts '' if result[:warnings].any?
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
private
|
|
@@ -104,19 +104,17 @@ module Mysigner
|
|
|
104
104
|
|
|
105
105
|
# Check for valid iOS distribution certificates in keychain
|
|
106
106
|
output = `security find-identity -v -p codesigning 2>&1`
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
if output.include?('0 valid identities found')
|
|
109
|
-
result[:errors] <<
|
|
110
|
-
result[:errors] <<
|
|
109
|
+
result[:errors] << 'No code signing certificates found in keychain'
|
|
110
|
+
result[:errors] << 'Fix: Install your distribution certificate (.p12 file)'
|
|
111
111
|
else
|
|
112
112
|
# Count valid certificates
|
|
113
113
|
cert_count = output.scan(/\d+\)\s+[A-F0-9]+/).count
|
|
114
114
|
result[:warnings] << "Found #{cert_count} code signing certificate(s) in keychain"
|
|
115
|
-
|
|
115
|
+
|
|
116
116
|
# Check for expired certificates
|
|
117
|
-
if output.include?('CSSMERR')
|
|
118
|
-
result[:warnings] << "Some certificates may be invalid or expired"
|
|
119
|
-
end
|
|
117
|
+
result[:warnings] << 'Some certificates may be invalid or expired' if output.include?('CSSMERR')
|
|
120
118
|
end
|
|
121
119
|
|
|
122
120
|
result
|
|
@@ -127,18 +125,18 @@ module Mysigner
|
|
|
127
125
|
|
|
128
126
|
# Check provisioning profile directory
|
|
129
127
|
profiles_dir = File.expand_path('~/Library/MobileDevice/Provisioning Profiles')
|
|
130
|
-
|
|
128
|
+
|
|
131
129
|
unless Dir.exist?(profiles_dir)
|
|
132
|
-
result[:warnings] <<
|
|
133
|
-
result[:warnings] <<
|
|
130
|
+
result[:warnings] << 'No provisioning profiles directory found'
|
|
131
|
+
result[:warnings] << 'Profiles will be downloaded automatically if using automatic signing'
|
|
134
132
|
return result
|
|
135
133
|
end
|
|
136
134
|
|
|
137
135
|
profiles = Dir.glob("#{profiles_dir}/*.mobileprovision")
|
|
138
|
-
|
|
136
|
+
|
|
139
137
|
if profiles.empty?
|
|
140
|
-
result[:warnings] <<
|
|
141
|
-
result[:warnings] <<
|
|
138
|
+
result[:warnings] << 'No provisioning profiles found'
|
|
139
|
+
result[:warnings] << 'Profiles will be downloaded automatically if using automatic signing'
|
|
142
140
|
else
|
|
143
141
|
result[:warnings] << "Found #{profiles.count} provisioning profile(s) installed"
|
|
144
142
|
end
|