fastlane 2.133.0 → 2.134.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +76 -76
- data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/carthage.rb +7 -0
- data/fastlane/lib/fastlane/actions/cocoapods.rb +24 -2
- data/fastlane/lib/fastlane/actions/deploygate.rb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +26 -3
- data/fastlane/lib/fastlane/actions/get_version_number.rb +10 -4
- data/fastlane/lib/fastlane/actions/sonar.rb +16 -0
- data/fastlane/lib/fastlane/actions/testfairy.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +9 -49
- data/fastlane/lib/fastlane/actions/update_keychain_access_groups.rb +94 -0
- data/fastlane/lib/fastlane/environment_printer.rb +7 -1
- data/fastlane/lib/fastlane/fast_file.rb +3 -2
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +41 -13
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
- data/match/lib/match/importer.rb +1 -1
- data/scan/lib/scan/error_handler.rb +9 -4
- data/scan/lib/scan/runner.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +2 -2
- metadata +29 -28
- data/gym/lib/gym/.runner.rb.swp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 137d18e3b1c51143869fab046abca316e329c07121b9fa8673c19bc3e64c4367
|
4
|
+
data.tar.gz: 230b49b8a849c8470d0868b1119cd5a9379a4df93e54f93bd94eebc1417e29b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbbfe027861bdbc7581ac00dbb19af06131513b759ccab42833c7d81f8a1f99833c4a2229438e3029d486906dd1ea42e83fb827e668c2dff7e9ea54b0a83fa60
|
7
|
+
data.tar.gz: e50c253223dd102a4777595e78ae6f3f77df92a2015345c73050398083557244481e0858581a4d60afa2d28bf00fb299d1a2f4083145489a640ba25baed3808c
|
data/README.md
CHANGED
@@ -34,67 +34,67 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
34
34
|
<!-- This table is regenerated and resorted on each release -->
|
35
35
|
<table id='team'>
|
36
36
|
<tr>
|
37
|
-
<td id='
|
38
|
-
<a href='https://github.com/
|
39
|
-
<img src='https://github.com/
|
37
|
+
<td id='felix-krause'>
|
38
|
+
<a href='https://github.com/KrauseFx'>
|
39
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
40
40
|
</a>
|
41
|
-
<h4 align='center'><a href='https://twitter.com/
|
41
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
42
42
|
</td>
|
43
|
-
<td id='
|
44
|
-
<a href='https://github.com/
|
45
|
-
<img src='https://github.com/
|
43
|
+
<td id='luka-mirosevic'>
|
44
|
+
<a href='https://github.com/lmirosevic'>
|
45
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
46
46
|
</a>
|
47
|
-
<h4 align='center'><a href='https://twitter.com/
|
47
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
48
48
|
</td>
|
49
|
-
<td id='
|
50
|
-
<a href='https://github.com/
|
51
|
-
<img src='https://github.com/
|
49
|
+
<td id='aaron-brager'>
|
50
|
+
<a href='https://github.com/getaaron'>
|
51
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
52
52
|
</a>
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
53
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
54
54
|
</td>
|
55
|
-
<td id='
|
56
|
-
<a href='https://github.com/
|
57
|
-
<img src='https://github.com/
|
55
|
+
<td id='kohki-miki'>
|
56
|
+
<a href='https://github.com/giginet'>
|
57
|
+
<img src='https://github.com/giginet.png?size=140'>
|
58
58
|
</a>
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
59
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
60
60
|
</td>
|
61
|
-
<td id='
|
62
|
-
<a href='https://github.com/
|
63
|
-
<img src='https://github.com/
|
61
|
+
<td id='olivier-halligon'>
|
62
|
+
<a href='https://github.com/AliSoftware'>
|
63
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
64
64
|
</a>
|
65
|
-
<h4 align='center'><a href='https://twitter.com/
|
65
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
66
66
|
</td>
|
67
67
|
</tr>
|
68
68
|
<tr>
|
69
|
-
<td id='
|
70
|
-
<a href='https://github.com/
|
71
|
-
<img src='https://github.com/
|
69
|
+
<td id='josh-holtz'>
|
70
|
+
<a href='https://github.com/joshdholtz'>
|
71
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
72
72
|
</a>
|
73
|
-
<h4 align='center'><a href='https://twitter.com/
|
73
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
74
74
|
</td>
|
75
|
-
<td id='
|
76
|
-
<a href='https://github.com/
|
77
|
-
<img src='https://github.com/
|
75
|
+
<td id='manu-wallner'>
|
76
|
+
<a href='https://github.com/milch'>
|
77
|
+
<img src='https://github.com/milch.png?size=140'>
|
78
78
|
</a>
|
79
|
-
<h4 align='center'>
|
79
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
80
80
|
</td>
|
81
|
-
<td id='
|
82
|
-
<a href='https://github.com/
|
83
|
-
<img src='https://github.com/
|
81
|
+
<td id='helmut-januschka'>
|
82
|
+
<a href='https://github.com/hjanuschka'>
|
83
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
84
84
|
</a>
|
85
|
-
<h4 align='center'><a href='https://twitter.com/
|
85
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
86
86
|
</td>
|
87
|
-
<td id='
|
88
|
-
<a href='https://github.com/
|
89
|
-
<img src='https://github.com/
|
87
|
+
<td id='jorge-revuelta-h'>
|
88
|
+
<a href='https://github.com/minuscorp'>
|
89
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
90
90
|
</a>
|
91
|
-
<h4 align='center'><a href='https://twitter.com/
|
91
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
92
92
|
</td>
|
93
|
-
<td id='
|
94
|
-
<a href='https://github.com/
|
95
|
-
<img src='https://github.com/
|
93
|
+
<td id='jan-piotrowski'>
|
94
|
+
<a href='https://github.com/janpio'>
|
95
|
+
<img src='https://github.com/janpio.png?size=140'>
|
96
96
|
</a>
|
97
|
-
<h4 align='center'><a href='https://twitter.com/
|
97
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
98
98
|
</td>
|
99
99
|
</tr>
|
100
100
|
<tr>
|
@@ -104,61 +104,61 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
104
104
|
</a>
|
105
105
|
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
106
106
|
</td>
|
107
|
-
<td id='
|
108
|
-
<a href='https://github.com/
|
109
|
-
<img src='https://github.com/
|
107
|
+
<td id='fumiya-nakamura'>
|
108
|
+
<a href='https://github.com/nafu'>
|
109
|
+
<img src='https://github.com/nafu.png?size=140'>
|
110
110
|
</a>
|
111
|
-
<h4 align='center'><a href='https://twitter.com/
|
111
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
112
112
|
</td>
|
113
|
-
<td id='
|
114
|
-
<a href='https://github.com/
|
115
|
-
<img src='https://github.com/
|
113
|
+
<td id='danielle-tomlinson'>
|
114
|
+
<a href='https://github.com/endocrimes'>
|
115
|
+
<img src='https://github.com/endocrimes.png?size=140'>
|
116
116
|
</a>
|
117
|
-
<h4 align='center'><a href='https://twitter.com/
|
117
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
118
118
|
</td>
|
119
|
-
<td id='
|
120
|
-
<a href='https://github.com/
|
121
|
-
<img src='https://github.com/
|
119
|
+
<td id='iulian-onofrei'>
|
120
|
+
<a href='https://github.com/revolter'>
|
121
|
+
<img src='https://github.com/revolter.png?size=140'>
|
122
122
|
</a>
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
123
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
124
124
|
</td>
|
125
|
-
<td id='
|
126
|
-
<a href='https://github.com/
|
127
|
-
<img src='https://github.com/
|
125
|
+
<td id='matthew-ellis'>
|
126
|
+
<a href='https://github.com/matthewellis'>
|
127
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
128
128
|
</a>
|
129
|
-
<h4 align='center'><a href='https://twitter.com/
|
129
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
130
130
|
</td>
|
131
131
|
</tr>
|
132
132
|
<tr>
|
133
|
-
<td id='
|
134
|
-
<a href='https://github.com/
|
135
|
-
<img src='https://github.com/
|
133
|
+
<td id='andrew-mcburney'>
|
134
|
+
<a href='https://github.com/armcburney'>
|
135
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
136
136
|
</a>
|
137
|
-
<h4 align='center'><a href='https://twitter.com/
|
137
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
138
138
|
</td>
|
139
|
-
<td id='
|
140
|
-
<a href='https://github.com/
|
141
|
-
<img src='https://github.com/
|
139
|
+
<td id='stefan-natchev'>
|
140
|
+
<a href='https://github.com/snatchev'>
|
141
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
142
142
|
</a>
|
143
|
-
<h4 align='center'><a href='https://twitter.com/
|
143
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
144
144
|
</td>
|
145
|
-
<td id='
|
146
|
-
<a href='https://github.com/
|
147
|
-
<img src='https://github.com/
|
145
|
+
<td id='jimmy-dee'>
|
146
|
+
<a href='https://github.com/jdee'>
|
147
|
+
<img src='https://github.com/jdee.png?size=140'>
|
148
148
|
</a>
|
149
|
-
<h4 align='center'
|
149
|
+
<h4 align='center'>Jimmy Dee</h4>
|
150
150
|
</td>
|
151
|
-
<td id='
|
152
|
-
<a href='https://github.com/
|
153
|
-
<img src='https://github.com/
|
151
|
+
<td id='jérôme-lacoste'>
|
152
|
+
<a href='https://github.com/lacostej'>
|
153
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
154
154
|
</a>
|
155
|
-
<h4 align='center'><a href='https://twitter.com/
|
155
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
156
156
|
</td>
|
157
|
-
<td id='
|
158
|
-
<a href='https://github.com/
|
159
|
-
<img src='https://github.com/
|
157
|
+
<td id='maksym-grebenets'>
|
158
|
+
<a href='https://github.com/mgrebenets'>
|
159
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
160
160
|
</a>
|
161
|
-
<h4 align='center'><a href='https://twitter.com/
|
161
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
162
162
|
</td>
|
163
163
|
</tr>
|
164
164
|
</table>
|
Binary file
|
@@ -21,6 +21,7 @@ module Fastlane
|
|
21
21
|
cmd << "--use-ssh" if params[:use_ssh]
|
22
22
|
cmd << "--use-submodules" if params[:use_submodules]
|
23
23
|
cmd << "--no-use-binaries" if params[:use_binaries] == false
|
24
|
+
cmd << "--no-checkout" if params[:no_checkout] == true
|
24
25
|
cmd << "--no-build" if params[:no_build] == true
|
25
26
|
cmd << "--no-skip-current" if params[:no_skip_current] == true
|
26
27
|
cmd << "--verbose" if params[:verbose] == true
|
@@ -94,6 +95,12 @@ module Fastlane
|
|
94
95
|
is_string: false,
|
95
96
|
type: Boolean,
|
96
97
|
optional: true),
|
98
|
+
FastlaneCore::ConfigItem.new(key: :no_checkout,
|
99
|
+
env_name: "FL_CARTHAGE_NO_CHECKOUT",
|
100
|
+
description: "When bootstrapping Carthage do not checkout",
|
101
|
+
is_string: false,
|
102
|
+
type: Boolean,
|
103
|
+
optional: true),
|
97
104
|
FastlaneCore::ConfigItem.new(key: :no_build,
|
98
105
|
env_name: "FL_CARTHAGE_NO_BUILD",
|
99
106
|
description: "When bootstrapping Carthage do not build",
|
@@ -14,15 +14,17 @@ module Fastlane
|
|
14
14
|
cmd << ["cd '#{podfile_folder}' &&"]
|
15
15
|
end
|
16
16
|
|
17
|
-
cmd << ['bundle exec'] if
|
17
|
+
cmd << ['bundle exec'] if use_bundle_exec?(params)
|
18
18
|
cmd << ['pod install']
|
19
19
|
|
20
20
|
cmd << '--no-clean' unless params[:clean]
|
21
21
|
cmd << '--no-integrate' unless params[:integrate]
|
22
|
+
cmd << '--clean-install' if params[:clean_install] && pod_version.to_f >= 1.7
|
22
23
|
cmd << '--repo-update' if params[:repo_update]
|
23
24
|
cmd << '--silent' if params[:silent]
|
24
25
|
cmd << '--verbose' if params[:verbose]
|
25
26
|
cmd << '--no-ansi' unless params[:ansi]
|
27
|
+
cmd << '--deployment' if params[:deployment]
|
26
28
|
|
27
29
|
Actions.sh(cmd.join(' '), error_callback: lambda { |result|
|
28
30
|
if !params[:repo_update] && params[:try_repo_update_on_error]
|
@@ -36,6 +38,14 @@ module Fastlane
|
|
36
38
|
})
|
37
39
|
end
|
38
40
|
|
41
|
+
def self.use_bundle_exec?(params)
|
42
|
+
params[:use_bundle_exec] && shell_out_should_use_bundle_exec?
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.pod_version
|
46
|
+
use_bundle_exec?(params) ? `bundle exec pod --version` : `pod --version`
|
47
|
+
end
|
48
|
+
|
39
49
|
def self.call_error_callback(params, result)
|
40
50
|
if params[:error_callback]
|
41
51
|
Dir.chdir(FastlaneCore::FastlaneFolder.path) do
|
@@ -57,6 +67,11 @@ module Fastlane
|
|
57
67
|
description: "Add `--repo-update` flag to `pod install` command",
|
58
68
|
is_string: false,
|
59
69
|
default_value: false),
|
70
|
+
FastlaneCore::ConfigItem.new(key: :clean_install,
|
71
|
+
env_name: "FL_COCOAPODS_CLEAN_INSTALL",
|
72
|
+
description: "Execute a full pod installation ignoring the content of the project cache",
|
73
|
+
is_string: false,
|
74
|
+
default_value: false),
|
60
75
|
FastlaneCore::ConfigItem.new(key: :silent,
|
61
76
|
env_name: "FL_COCOAPODS_SILENT",
|
62
77
|
description: "Execute command without logging output",
|
@@ -98,11 +113,18 @@ module Fastlane
|
|
98
113
|
is_string: false,
|
99
114
|
default_value: false,
|
100
115
|
type: Boolean),
|
116
|
+
FastlaneCore::ConfigItem.new(key: :deployment,
|
117
|
+
env_name: "FL_COCOAPODS_DEPLOYMENT",
|
118
|
+
description: 'Disallow any changes to the Podfile or the Podfile.lock during installation',
|
119
|
+
optional: true,
|
120
|
+
is_string: false,
|
121
|
+
default_value: false,
|
122
|
+
type: Boolean),
|
101
123
|
|
102
124
|
# Deprecated
|
103
125
|
FastlaneCore::ConfigItem.new(key: :clean,
|
104
126
|
env_name: "FL_COCOAPODS_CLEAN",
|
105
|
-
description: "(Option
|
127
|
+
description: "(Option renamed as clean_install) Remove SCM directories",
|
106
128
|
deprecated: true,
|
107
129
|
is_string: false,
|
108
130
|
default_value: true),
|
@@ -33,7 +33,7 @@ module Fastlane
|
|
33
33
|
options[:disable_notify] = 'yes' if options[:disable_notify]
|
34
34
|
|
35
35
|
connection.post("/api/users/#{user_name}/apps", options)
|
36
|
-
rescue Faraday::
|
36
|
+
rescue Faraday::TimeoutError
|
37
37
|
UI.crash!("Timed out while uploading build. Check https://deploygate.com/ to see if the upload was completed.")
|
38
38
|
end
|
39
39
|
|
@@ -26,6 +26,7 @@ module Fastlane
|
|
26
26
|
platform = params[:platform]
|
27
27
|
output_directory = params[:output_directory]
|
28
28
|
wait_for_dsym_processing = params[:wait_for_dsym_processing]
|
29
|
+
wait_timeout = params[:wait_timeout]
|
29
30
|
min_version = Gem::Version.new(params[:min_version]) if params[:min_version]
|
30
31
|
|
31
32
|
# Set version if it is latest
|
@@ -45,6 +46,20 @@ module Fastlane
|
|
45
46
|
version = latest_candidate_build.train_version
|
46
47
|
build_number = latest_candidate_build.build_version
|
47
48
|
end
|
49
|
+
elsif version == 'live'
|
50
|
+
UI.message("Looking for live version...")
|
51
|
+
live_version = app.live_version(platform: platform)
|
52
|
+
|
53
|
+
UI.user_error!("Could not find live version for your app, please try setting 'latest' or a specific version") if live_version.nil?
|
54
|
+
|
55
|
+
# No need to search for candidates, because released App Store version should only have one build
|
56
|
+
version = live_version.version
|
57
|
+
build_number = live_version.build_version
|
58
|
+
end
|
59
|
+
|
60
|
+
# Remove leading zeros from version string (eg. 1.02 -> 1.2)
|
61
|
+
if version
|
62
|
+
version = version.split(".").map(&:to_i).join(".")
|
48
63
|
end
|
49
64
|
|
50
65
|
# Make sure output_directory has a slash on the end
|
@@ -101,7 +116,7 @@ module Fastlane
|
|
101
116
|
end
|
102
117
|
|
103
118
|
unless download_url
|
104
|
-
if !wait_for_dsym_processing || (Time.now - start) >
|
119
|
+
if !wait_for_dsym_processing || (Time.now - start) > wait_timeout
|
105
120
|
# In some cases, AppStoreConnect does not process the dSYMs, thus no error should be thrown.
|
106
121
|
UI.message("Could not find any dSYM for #{build.build_version} (#{train.version_string})")
|
107
122
|
else
|
@@ -231,7 +246,7 @@ module Fastlane
|
|
231
246
|
FastlaneCore::ConfigItem.new(key: :version,
|
232
247
|
short_option: "-v",
|
233
248
|
env_name: "DOWNLOAD_DSYMS_VERSION",
|
234
|
-
description: "The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs",
|
249
|
+
description: "The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs or 'live' to download only the live verion dSYMs",
|
235
250
|
optional: true),
|
236
251
|
FastlaneCore::ConfigItem.new(key: :build_number,
|
237
252
|
short_option: "-b",
|
@@ -254,7 +269,14 @@ module Fastlane
|
|
254
269
|
description: "Wait for dSYMs to process",
|
255
270
|
optional: true,
|
256
271
|
default_value: false,
|
257
|
-
type: Boolean)
|
272
|
+
type: Boolean),
|
273
|
+
FastlaneCore::ConfigItem.new(key: :wait_timeout,
|
274
|
+
short_option: "-t",
|
275
|
+
env_name: "DOWNLOAD_DSYMS_WAIT_TIMEOUT",
|
276
|
+
description: "Number of seconds to wait for dSYMs to process",
|
277
|
+
optional: true,
|
278
|
+
default_value: 300,
|
279
|
+
type: Integer)
|
258
280
|
]
|
259
281
|
end
|
260
282
|
|
@@ -280,6 +302,7 @@ module Fastlane
|
|
280
302
|
[
|
281
303
|
'download_dsyms',
|
282
304
|
'download_dsyms(version: "1.0.0", build_number: "345")',
|
305
|
+
'download_dsyms(version: "live")',
|
283
306
|
'download_dsyms(min_version: "1.2.3")'
|
284
307
|
]
|
285
308
|
end
|
@@ -18,12 +18,18 @@ module Fastlane
|
|
18
18
|
plist_file = get_plist!(folder, target, configuration)
|
19
19
|
version_number = get_version_number_from_plist!(plist_file)
|
20
20
|
|
21
|
-
# Get from build settings if needed (ex: $(MARKETING_VERSION) is default in Xcode 11)
|
21
|
+
# Get from build settings (or project settings) if needed (ex: $(MARKETING_VERSION) is default in Xcode 11)
|
22
22
|
if version_number =~ /\$\(([\w\-]+)\)/
|
23
|
-
version_number = get_version_number_from_build_settings!(target, $1, configuration)
|
23
|
+
version_number = get_version_number_from_build_settings!(target, $1, configuration) || get_version_number_from_build_settings!(project, $1, configuration)
|
24
|
+
|
24
25
|
# ${MARKETING_VERSION} also works
|
25
26
|
elsif version_number =~ /\$\{([\w\-]+)\}/
|
26
|
-
version_number = get_version_number_from_build_settings!(target, $1, configuration)
|
27
|
+
version_number = get_version_number_from_build_settings!(target, $1, configuration) || get_version_number_from_build_settings!(project, $1, configuration)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Error out if version_number is not set
|
31
|
+
if version_number.nil?
|
32
|
+
UI.user_error!("Unable to find Xcode build setting: #{$1}")
|
27
33
|
end
|
28
34
|
|
29
35
|
# Store the number in the shared hash
|
@@ -81,7 +87,7 @@ module Fastlane
|
|
81
87
|
end
|
82
88
|
end
|
83
89
|
|
84
|
-
|
90
|
+
return nil
|
85
91
|
end
|
86
92
|
|
87
93
|
def self.get_plist!(folder, target, configuration = nil)
|
@@ -20,10 +20,12 @@ module Fastlane
|
|
20
20
|
sonar_scanner_args << "-Dsonar.sourceEncoding=\"#{params[:source_encoding]}\"" if params[:source_encoding]
|
21
21
|
sonar_scanner_args << "-Dsonar.login=\"#{params[:sonar_login]}\"" if params[:sonar_login]
|
22
22
|
sonar_scanner_args << "-Dsonar.host.url=\"#{params[:sonar_url]}\"" if params[:sonar_url]
|
23
|
+
sonar_scanner_args << "-Dsonar.organization=\"#{params[:sonar_organization]}\"" if params[:sonar_organization]
|
23
24
|
sonar_scanner_args << "-Dsonar.branch.name=\"#{params[:branch_name]}\"" if params[:branch_name]
|
24
25
|
sonar_scanner_args << "-Dsonar.pullrequest.branch=\"#{params[:pull_request_branch]}\"" if params[:pull_request_branch]
|
25
26
|
sonar_scanner_args << "-Dsonar.pullrequest.base=\"#{params[:pull_request_base]}\"" if params[:pull_request_base]
|
26
27
|
sonar_scanner_args << "-Dsonar.pullrequest.key=\"#{params[:pull_request_key]}\"" if params[:pull_request_key]
|
28
|
+
|
27
29
|
sonar_scanner_args << params[:sonar_runner_args] if params[:sonar_runner_args]
|
28
30
|
|
29
31
|
command = [
|
@@ -102,6 +104,11 @@ module Fastlane
|
|
102
104
|
description: "Pass the url of the Sonar server",
|
103
105
|
optional: true,
|
104
106
|
is_string: true),
|
107
|
+
FastlaneCore::ConfigItem.new(key: :sonar_organization,
|
108
|
+
env_name: "FL_SONAR_ORGANIZATION",
|
109
|
+
description: "Key of the organization on SonarCloud",
|
110
|
+
optional: true,
|
111
|
+
is_string: true),
|
105
112
|
FastlaneCore::ConfigItem.new(key: :branch_name,
|
106
113
|
env_name: "FL_SONAR_RUNNER_BRANCH_NAME",
|
107
114
|
description: "Pass the branch name which is getting scanned",
|
@@ -144,6 +151,15 @@ module Fastlane
|
|
144
151
|
project_version: "1.0",
|
145
152
|
project_name: "iOS - AwesomeApp",
|
146
153
|
sources_path: File.expand_path("../AwesomeApp")
|
154
|
+
)',
|
155
|
+
'sonar(
|
156
|
+
project_key: "name.gretzki.awesomeApp",
|
157
|
+
project_version: "1.0",
|
158
|
+
project_name: "iOS - AwesomeApp",
|
159
|
+
sources_path: File.expand_path("../AwesomeApp"),
|
160
|
+
sonar_organization: "myOrg",
|
161
|
+
sonar_login: "123456abcdef",
|
162
|
+
sonar_url: "https://sonarcloud.io"
|
147
163
|
)'
|
148
164
|
]
|
149
165
|
end
|
@@ -10,18 +10,10 @@ module Fastlane
|
|
10
10
|
def self.run(options)
|
11
11
|
return if options[:no_update] # this is used to update itself
|
12
12
|
|
13
|
-
tools_to_update =
|
14
|
-
tools_to_update ||= all_installed_tools
|
15
|
-
|
16
|
-
if tools_to_update.count == 0
|
17
|
-
UI.error("No tools specified or couldn't find any installed fastlane.tools")
|
18
|
-
return
|
19
|
-
end
|
20
|
-
|
13
|
+
tools_to_update = ALL_TOOLS
|
21
14
|
UI.message("Looking for updates for #{tools_to_update.join(', ')}...")
|
22
15
|
|
23
16
|
updater = Gem::CommandManager.instance[:update]
|
24
|
-
updater.options[:prerelease] = true if options[:nightly]
|
25
17
|
cleaner = Gem::CommandManager.instance[:cleanup]
|
26
18
|
|
27
19
|
gem_dir = ENV['GEM_HOME'] || Gem.dir
|
@@ -49,7 +41,6 @@ module Fastlane
|
|
49
41
|
|
50
42
|
if update_needed.count == 0
|
51
43
|
UI.success("Nothing to update ✅")
|
52
|
-
show_information_about_nightly_builds unless options[:nightly]
|
53
44
|
return
|
54
45
|
end
|
55
46
|
|
@@ -58,18 +49,13 @@ module Fastlane
|
|
58
49
|
|
59
50
|
update_needed.each do |tool_info|
|
60
51
|
tool = tool_info[0]
|
61
|
-
gem_version = tool_info[1]
|
62
52
|
local_version = Gem::Version.new(highest_versions[tool].version)
|
63
53
|
latest_official_version = FastlaneCore::UpdateChecker.fetch_latest(tool)
|
64
54
|
|
65
|
-
|
66
|
-
UI.message("Updating #{tool} from #{local_version.to_s.yellow} to nightly build #{gem_version.to_s.yellow}... (last official release #{latest_official_version.to_s.yellow}) 🚀")
|
67
|
-
else
|
68
|
-
UI.message("Updating #{tool} from #{local_version.to_s.yellow} to #{latest_official_version.to_s.yellow}... 🚀")
|
69
|
-
end
|
55
|
+
UI.message("Updating #{tool} from #{local_version.to_s.yellow} to #{latest_official_version.to_s.yellow}... 🚀")
|
70
56
|
|
71
57
|
# Approximate_recommendation will create a string like "~> 0.10" from a version 0.10.0, e.g. one that is valid for versions >= 0.10 and <1.0
|
72
|
-
requirement_version =
|
58
|
+
requirement_version = local_version.approximate_recommendation
|
73
59
|
updater.update_gem(tool, Gem::Requirement.new(requirement_version))
|
74
60
|
|
75
61
|
UI.success("Finished updating #{tool}")
|
@@ -79,34 +65,12 @@ module Fastlane
|
|
79
65
|
cleaner.options[:args] = tools_to_update
|
80
66
|
cleaner.execute
|
81
67
|
|
82
|
-
if options[:nightly]
|
83
|
-
UI.success("Thanks for using fastlane's nightly builds! This makes it easier for everyone to detect regressions earlier.")
|
84
|
-
UI.success("Please submit an issue on GitHub if anything behaves differently than it should 🍪")
|
85
|
-
else
|
86
|
-
show_information_about_nightly_builds
|
87
|
-
end
|
88
|
-
|
89
68
|
UI.message("fastlane.tools successfully updated! I will now restart myself... 😴")
|
90
69
|
|
91
70
|
# Set no_update to true so we don't try to update again
|
92
71
|
exec("FL_NO_UPDATE=true #{$PROGRAM_NAME} #{ARGV.join(' ')}")
|
93
72
|
end
|
94
73
|
|
95
|
-
def self.show_information_about_nightly_builds
|
96
|
-
UI.message("")
|
97
|
-
UI.message("Please help us test early releases of fastlane by opting into nightly builds 🌃")
|
98
|
-
UI.message("Just replace your `update_fastlane` call with")
|
99
|
-
UI.message("")
|
100
|
-
UI.command_output("update_fastlane(nightly: true)")
|
101
|
-
UI.message("")
|
102
|
-
UI.message("Nightly builds are reviewed and tested just like the public releases 🚂")
|
103
|
-
UI.message("")
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.all_installed_tools
|
107
|
-
Gem::Specification.select { |s| ALL_TOOLS.include?(s.name) }.map(&:name).uniq
|
108
|
-
end
|
109
|
-
|
110
74
|
def self.description
|
111
75
|
"Makes sure fastlane-tools are up-to-date when running fastlane"
|
112
76
|
end
|
@@ -134,21 +98,17 @@ module Fastlane
|
|
134
98
|
|
135
99
|
def self.available_options
|
136
100
|
[
|
137
|
-
FastlaneCore::ConfigItem.new(key: :nightly,
|
138
|
-
env_name: "FL_UPDATE_FASTLANE_NIGHTLY",
|
139
|
-
description: "Opt-in to install and use nightly fastlane builds",
|
140
|
-
is_string: false,
|
141
|
-
default_value: false),
|
142
101
|
FastlaneCore::ConfigItem.new(key: :no_update,
|
143
102
|
env_name: "FL_NO_UPDATE",
|
144
103
|
description: "Don't update during this run. This is used internally",
|
145
104
|
is_string: false,
|
146
105
|
default_value: false),
|
147
|
-
FastlaneCore::ConfigItem.new(key: :
|
148
|
-
env_name: "
|
149
|
-
description: "
|
150
|
-
|
151
|
-
|
106
|
+
FastlaneCore::ConfigItem.new(key: :nightly,
|
107
|
+
env_name: "FL_UPDATE_FASTLANE_NIGHTLY",
|
108
|
+
description: "Opt-in to install and use nightly fastlane builds",
|
109
|
+
is_string: false,
|
110
|
+
default_value: false,
|
111
|
+
deprecated: "Nightly builds are no longer being made available")
|
152
112
|
]
|
153
113
|
end
|
154
114
|
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
KEYCHAIN_ACCESS_GROUPS = :KEYCHAIN_ACCESS_GROUPS
|
5
|
+
end
|
6
|
+
|
7
|
+
class UpdateKeychainAccessGroupsAction < Action
|
8
|
+
require 'plist'
|
9
|
+
|
10
|
+
def self.run(params)
|
11
|
+
UI.message("Entitlements File: #{params[:entitlements_file]}")
|
12
|
+
UI.message("New keychain access groups: #{params[:identifiers]}")
|
13
|
+
|
14
|
+
entitlements_file = params[:entitlements_file]
|
15
|
+
UI.user_error!("Could not find entitlements file at path '#{entitlements_file}'") unless File.exist?(entitlements_file)
|
16
|
+
|
17
|
+
# parse entitlements
|
18
|
+
result = Plist.parse_xml(entitlements_file)
|
19
|
+
UI.user_error!("Entitlements file at '#{entitlements_file}' cannot be parsed.") unless result
|
20
|
+
|
21
|
+
# keychain access groups key
|
22
|
+
keychain_access_groups_key = 'keychain-access-groups'
|
23
|
+
|
24
|
+
# get keychain access groups
|
25
|
+
keychain_access_groups_field = result[keychain_access_groups_key]
|
26
|
+
UI.user_error!("No existing keychain access groups field specified. Please specify an keychain access groups in the entitlements file.") unless keychain_access_groups_field
|
27
|
+
|
28
|
+
# set new keychain access groups
|
29
|
+
UI.message("Old keychain access groups: #{keychain_access_groups_field}")
|
30
|
+
result[keychain_access_groups_key] = params[:identifiers]
|
31
|
+
|
32
|
+
# save entitlements file
|
33
|
+
result.save_plist(entitlements_file)
|
34
|
+
UI.message("New keychain access groups: #{result[keychain_access_groups_key]}")
|
35
|
+
|
36
|
+
Actions.lane_context[SharedValues::KEYCHAIN_ACCESS_GROUPS] = result[keychain_access_groups_key]
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.description
|
40
|
+
"This action changes the keychain access groups in the entitlements file"
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.details
|
44
|
+
"Updates the Keychain Group Access Groups in the given Entitlements file, so you can have keychain access groups for the app store build and keychain access groups for an enterprise build."
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.available_options
|
48
|
+
[
|
49
|
+
FastlaneCore::ConfigItem.new(key: :entitlements_file,
|
50
|
+
env_name: "FL_UPDATE_KEYCHAIN_ACCESS_GROUPS_ENTITLEMENTS_FILE_PATH", # The name of the environment variable
|
51
|
+
description: "The path to the entitlement file which contains the keychain access groups", # a short description of this parameter
|
52
|
+
verify_block: proc do |value|
|
53
|
+
UI.user_error!("Please pass a path to an entitlements file. ") unless value.include?(".entitlements")
|
54
|
+
UI.user_error!("Could not find entitlements file") if !File.exist?(value) && !Helper.test?
|
55
|
+
end),
|
56
|
+
FastlaneCore::ConfigItem.new(key: :identifiers,
|
57
|
+
env_name: "FL_UPDATE_KEYCHAIN_ACCESS_GROUPS_IDENTIFIERS",
|
58
|
+
description: "An Array of unique identifiers for the keychain access groups. Eg. ['your.keychain.access.groups.identifiers']",
|
59
|
+
is_string: false,
|
60
|
+
verify_block: proc do |value|
|
61
|
+
UI.user_error!("The parameter identifiers need to be an Array.") unless value.kind_of?(Array)
|
62
|
+
end)
|
63
|
+
]
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.output
|
67
|
+
[
|
68
|
+
['KEYCHAIN_ACCESS_GROUPS', 'The new Keychain Access Groups']
|
69
|
+
]
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.authors
|
73
|
+
["yutae"]
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.is_supported?(platform)
|
77
|
+
platform == :ios
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.example_code
|
81
|
+
[
|
82
|
+
'update_keychain_access_groups(
|
83
|
+
entitlements_file: "/path/to/entitlements_file.entitlements",
|
84
|
+
identifiers: ["your.keychain.access.groups.identifiers"]
|
85
|
+
)'
|
86
|
+
]
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.category
|
90
|
+
:project
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -211,7 +211,7 @@ module Fastlane
|
|
211
211
|
"OS" => os_version,
|
212
212
|
"Ruby" => RUBY_VERSION,
|
213
213
|
"Bundler?" => Helper.bundler?,
|
214
|
-
"Git" =>
|
214
|
+
"Git" => git_version,
|
215
215
|
"Installation Source" => anonymized_path($PROGRAM_NAME),
|
216
216
|
"Host" => "#{product} #{version} (#{build})",
|
217
217
|
"Ruby Lib Dir" => anonymized_path(RbConfig::CONFIG['libdir']),
|
@@ -293,5 +293,11 @@ module Fastlane
|
|
293
293
|
require 'open3'
|
294
294
|
Open3.popen3('pbcopy') { |input, _, _| input << string }
|
295
295
|
end
|
296
|
+
|
297
|
+
def self.git_version
|
298
|
+
return `git --version`.strip.split("\n").first
|
299
|
+
rescue
|
300
|
+
return "not found"
|
301
|
+
end
|
296
302
|
end
|
297
303
|
end
|
@@ -195,6 +195,7 @@ module Fastlane
|
|
195
195
|
# sh("ls")
|
196
196
|
# sh("ls", log: false)
|
197
197
|
# sh(command: "ls")
|
198
|
+
# sh(command: "ls", step_name: "listing the files")
|
198
199
|
# sh(command: "ls", log: false)
|
199
200
|
def sh(*args, &b)
|
200
201
|
# First accepts hash (or named keywords) like other actions
|
@@ -212,8 +213,8 @@ module Fastlane
|
|
212
213
|
end
|
213
214
|
end
|
214
215
|
|
215
|
-
def self.sh(*command, log: true, error_callback: nil, &b)
|
216
|
-
command_header = log ? Actions.shell_command_from_args(*command) : "shell command"
|
216
|
+
def self.sh(*command, step_name: nil, log: true, error_callback: nil, &b)
|
217
|
+
command_header = log ? step_name || Actions.shell_command_from_args(*command) : "shell command"
|
217
218
|
Actions.execute_action(command_header) do
|
218
219
|
Actions.sh_no_action(*command, log: log, error_callback: error_callback, &b)
|
219
220
|
end
|
@@ -1487,6 +1487,7 @@ func captureScreenshots(workspace: String? = nil,
|
|
1487
1487
|
- useSsh: Use SSH for downloading GitHub repositories
|
1488
1488
|
- useSubmodules: Add dependencies as Git submodules
|
1489
1489
|
- useBinaries: Check out dependency repositories even when prebuilt frameworks exist
|
1490
|
+
- noCheckout: When bootstrapping Carthage do not checkout
|
1490
1491
|
- noBuild: When bootstrapping Carthage do not build
|
1491
1492
|
- noSkipCurrent: Don't skip building the Carthage project (in addition to its dependencies)
|
1492
1493
|
- derivedData: Use derived data folder at path
|
@@ -1507,6 +1508,7 @@ func carthage(command: String = "bootstrap",
|
|
1507
1508
|
useSsh: Bool? = nil,
|
1508
1509
|
useSubmodules: Bool? = nil,
|
1509
1510
|
useBinaries: Bool? = nil,
|
1511
|
+
noCheckout: Bool? = nil,
|
1510
1512
|
noBuild: Bool? = nil,
|
1511
1513
|
noSkipCurrent: Bool? = nil,
|
1512
1514
|
derivedData: String? = nil,
|
@@ -1526,6 +1528,7 @@ func carthage(command: String = "bootstrap",
|
|
1526
1528
|
RubyCommand.Argument(name: "use_ssh", value: useSsh),
|
1527
1529
|
RubyCommand.Argument(name: "use_submodules", value: useSubmodules),
|
1528
1530
|
RubyCommand.Argument(name: "use_binaries", value: useBinaries),
|
1531
|
+
RubyCommand.Argument(name: "no_checkout", value: noCheckout),
|
1529
1532
|
RubyCommand.Argument(name: "no_build", value: noBuild),
|
1530
1533
|
RubyCommand.Argument(name: "no_skip_current", value: noSkipCurrent),
|
1531
1534
|
RubyCommand.Argument(name: "derived_data", value: derivedData),
|
@@ -1799,6 +1802,7 @@ func clubmate() {
|
|
1799
1802
|
|
1800
1803
|
- parameters:
|
1801
1804
|
- repoUpdate: Add `--repo-update` flag to `pod install` command
|
1805
|
+
- cleanInstall: Execute a full pod installation ignoring the content of the project cache
|
1802
1806
|
- silent: Execute command without logging output
|
1803
1807
|
- verbose: Show more debugging information
|
1804
1808
|
- ansi: Show output with ANSI codes
|
@@ -1806,12 +1810,14 @@ func clubmate() {
|
|
1806
1810
|
- podfile: Explicitly specify the path to the Cocoapods' Podfile. You can either set it to the Podfile's path or to the folder containing the Podfile file
|
1807
1811
|
- errorCallback: A callback invoked with the command output if there is a non-zero exit status
|
1808
1812
|
- tryRepoUpdateOnError: Retry with --repo-update if action was finished with error
|
1809
|
-
-
|
1813
|
+
- deployment: Disallow any changes to the Podfile or the Podfile.lock during installation
|
1814
|
+
- clean: **DEPRECATED!** (Option renamed as clean_install) Remove SCM directories
|
1810
1815
|
- integrate: **DEPRECATED!** (Option removed from cocoapods) Integrate the Pods libraries into the Xcode project(s)
|
1811
1816
|
|
1812
1817
|
If you use [CocoaPods](http://cocoapods.org) you can use the `cocoapods` integration to run `pod install` before building your app.
|
1813
1818
|
*/
|
1814
1819
|
func cocoapods(repoUpdate: Bool = false,
|
1820
|
+
cleanInstall: Bool = false,
|
1815
1821
|
silent: Bool = false,
|
1816
1822
|
verbose: Bool = false,
|
1817
1823
|
ansi: Bool = true,
|
@@ -1819,9 +1825,11 @@ func cocoapods(repoUpdate: Bool = false,
|
|
1819
1825
|
podfile: String? = nil,
|
1820
1826
|
errorCallback: Any? = nil,
|
1821
1827
|
tryRepoUpdateOnError: Bool = false,
|
1828
|
+
deployment: Bool = false,
|
1822
1829
|
clean: Bool = true,
|
1823
1830
|
integrate: Bool = true) {
|
1824
1831
|
let command = RubyCommand(commandID: "", methodName: "cocoapods", className: nil, args: [RubyCommand.Argument(name: "repo_update", value: repoUpdate),
|
1832
|
+
RubyCommand.Argument(name: "clean_install", value: cleanInstall),
|
1825
1833
|
RubyCommand.Argument(name: "silent", value: silent),
|
1826
1834
|
RubyCommand.Argument(name: "verbose", value: verbose),
|
1827
1835
|
RubyCommand.Argument(name: "ansi", value: ansi),
|
@@ -1829,6 +1837,7 @@ func cocoapods(repoUpdate: Bool = false,
|
|
1829
1837
|
RubyCommand.Argument(name: "podfile", value: podfile),
|
1830
1838
|
RubyCommand.Argument(name: "error_callback", value: errorCallback),
|
1831
1839
|
RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError),
|
1840
|
+
RubyCommand.Argument(name: "deployment", value: deployment),
|
1832
1841
|
RubyCommand.Argument(name: "clean", value: clean),
|
1833
1842
|
RubyCommand.Argument(name: "integrate", value: integrate)])
|
1834
1843
|
_ = runner.executeCommand(command)
|
@@ -2496,11 +2505,12 @@ func download(url: String) {
|
|
2496
2505
|
- teamId: The ID of your App Store Connect team if you're in multiple teams
|
2497
2506
|
- teamName: The name of your App Store Connect team if you're in multiple teams
|
2498
2507
|
- platform: The app platform for dSYMs you wish to download (ios, appletvos)
|
2499
|
-
- version: The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs
|
2508
|
+
- version: The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs or 'live' to download only the live verion dSYMs
|
2500
2509
|
- buildNumber: The app build_number for dSYMs you wish to download
|
2501
2510
|
- minVersion: The minimum app version for dSYMs you wish to download
|
2502
2511
|
- outputDirectory: Where to save the download dSYMs, defaults to the current path
|
2503
2512
|
- waitForDsymProcessing: Wait for dSYMs to process
|
2513
|
+
- waitTimeout: Number of seconds to wait for dSYMs to process
|
2504
2514
|
|
2505
2515
|
This action downloads dSYM files from App Store Connect after the ipa gets re-compiled by Apple. Useful if you have Bitcode enabled.|
|
2506
2516
|
|
|
@@ -2522,7 +2532,8 @@ func downloadDsyms(username: String,
|
|
2522
2532
|
buildNumber: String? = nil,
|
2523
2533
|
minVersion: String? = nil,
|
2524
2534
|
outputDirectory: String? = nil,
|
2525
|
-
waitForDsymProcessing: Bool = false
|
2535
|
+
waitForDsymProcessing: Bool = false,
|
2536
|
+
waitTimeout: Int = 300) {
|
2526
2537
|
let command = RubyCommand(commandID: "", methodName: "download_dsyms", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
|
2527
2538
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
2528
2539
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
@@ -2532,7 +2543,8 @@ func downloadDsyms(username: String,
|
|
2532
2543
|
RubyCommand.Argument(name: "build_number", value: buildNumber),
|
2533
2544
|
RubyCommand.Argument(name: "min_version", value: minVersion),
|
2534
2545
|
RubyCommand.Argument(name: "output_directory", value: outputDirectory),
|
2535
|
-
RubyCommand.Argument(name: "wait_for_dsym_processing", value: waitForDsymProcessing)
|
2546
|
+
RubyCommand.Argument(name: "wait_for_dsym_processing", value: waitForDsymProcessing),
|
2547
|
+
RubyCommand.Argument(name: "wait_timeout", value: waitTimeout)])
|
2536
2548
|
_ = runner.executeCommand(command)
|
2537
2549
|
}
|
2538
2550
|
|
@@ -6476,6 +6488,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
|
|
6476
6488
|
- sonarRunnerArgs: Pass additional arguments to sonar-scanner. Be sure to provide the arguments with a leading `-D` e.g. FL_SONAR_RUNNER_ARGS="-Dsonar.verbose=true"
|
6477
6489
|
- sonarLogin: Pass the Sonar Login token (e.g: xxxxxxprivate_token_XXXXbXX7e)
|
6478
6490
|
- sonarUrl: Pass the url of the Sonar server
|
6491
|
+
- sonarOrganization: Key of the organization on SonarCloud
|
6479
6492
|
- branchName: Pass the branch name which is getting scanned
|
6480
6493
|
- pullRequestBranch: The name of the branch that contains the changes to be merged
|
6481
6494
|
- pullRequestBase: The long-lived branch into which the PR will be merged
|
@@ -6496,6 +6509,7 @@ func sonar(projectConfigurationPath: String? = nil,
|
|
6496
6509
|
sonarRunnerArgs: String? = nil,
|
6497
6510
|
sonarLogin: String? = nil,
|
6498
6511
|
sonarUrl: String? = nil,
|
6512
|
+
sonarOrganization: String? = nil,
|
6499
6513
|
branchName: String? = nil,
|
6500
6514
|
pullRequestBranch: String? = nil,
|
6501
6515
|
pullRequestBase: String? = nil,
|
@@ -6510,6 +6524,7 @@ func sonar(projectConfigurationPath: String? = nil,
|
|
6510
6524
|
RubyCommand.Argument(name: "sonar_runner_args", value: sonarRunnerArgs),
|
6511
6525
|
RubyCommand.Argument(name: "sonar_login", value: sonarLogin),
|
6512
6526
|
RubyCommand.Argument(name: "sonar_url", value: sonarUrl),
|
6527
|
+
RubyCommand.Argument(name: "sonar_organization", value: sonarOrganization),
|
6513
6528
|
RubyCommand.Argument(name: "branch_name", value: branchName),
|
6514
6529
|
RubyCommand.Argument(name: "pull_request_branch", value: pullRequestBranch),
|
6515
6530
|
RubyCommand.Argument(name: "pull_request_base", value: pullRequestBase),
|
@@ -7164,9 +7179,8 @@ func updateAppIdentifier(xcodeproj: String,
|
|
7164
7179
|
Makes sure fastlane-tools are up-to-date when running fastlane
|
7165
7180
|
|
7166
7181
|
- parameters:
|
7167
|
-
- nightly: Opt-in to install and use nightly fastlane builds
|
7168
7182
|
- noUpdate: Don't update during this run. This is used internally
|
7169
|
-
-
|
7183
|
+
- nightly: **DEPRECATED!** Nightly builds are no longer being made available - Opt-in to install and use nightly fastlane builds
|
7170
7184
|
|
7171
7185
|
This action will update fastlane to the most recent version - major version updates will not be performed automatically, as they might include breaking changes. If an update was performed, fastlane will be restarted before the run continues.
|
7172
7186
|
|
@@ -7183,12 +7197,10 @@ func updateAppIdentifier(xcodeproj: String,
|
|
7183
7197
|
|
7184
7198
|
Recommended usage of the `update_fastlane` action is at the top inside of the `before_all` block, before running any other action.
|
7185
7199
|
*/
|
7186
|
-
func updateFastlane(
|
7187
|
-
|
7188
|
-
|
7189
|
-
|
7190
|
-
RubyCommand.Argument(name: "no_update", value: noUpdate),
|
7191
|
-
RubyCommand.Argument(name: "tools", value: tools)])
|
7200
|
+
func updateFastlane(noUpdate: Bool = false,
|
7201
|
+
nightly: Bool = false) {
|
7202
|
+
let command = RubyCommand(commandID: "", methodName: "update_fastlane", className: nil, args: [RubyCommand.Argument(name: "no_update", value: noUpdate),
|
7203
|
+
RubyCommand.Argument(name: "nightly", value: nightly)])
|
7192
7204
|
_ = runner.executeCommand(command)
|
7193
7205
|
}
|
7194
7206
|
|
@@ -7236,6 +7248,22 @@ func updateInfoPlist(xcodeproj: String? = nil,
|
|
7236
7248
|
_ = runner.executeCommand(command)
|
7237
7249
|
}
|
7238
7250
|
|
7251
|
+
/**
|
7252
|
+
This action changes the keychain access groups in the entitlements file
|
7253
|
+
|
7254
|
+
- parameters:
|
7255
|
+
- entitlementsFile: The path to the entitlement file which contains the keychain access groups
|
7256
|
+
- identifiers: An Array of unique identifiers for the keychain access groups. Eg. ['your.keychain.access.groups.identifiers']
|
7257
|
+
|
7258
|
+
Updates the Keychain Group Access Groups in the given Entitlements file, so you can have keychain access groups for the app store build and keychain access groups for an enterprise build.
|
7259
|
+
*/
|
7260
|
+
func updateKeychainAccessGroups(entitlementsFile: String,
|
7261
|
+
identifiers: Any) {
|
7262
|
+
let command = RubyCommand(commandID: "", methodName: "update_keychain_access_groups", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile),
|
7263
|
+
RubyCommand.Argument(name: "identifiers", value: identifiers)])
|
7264
|
+
_ = runner.executeCommand(command)
|
7265
|
+
}
|
7266
|
+
|
7239
7267
|
/**
|
7240
7268
|
Update a plist file
|
7241
7269
|
|
@@ -8268,4 +8296,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
|
|
8268
8296
|
|
8269
8297
|
// Please don't remove the lines below
|
8270
8298
|
// They are used to detect outdated files
|
8271
|
-
// FastlaneRunnerAPIVersion [0.9.
|
8299
|
+
// FastlaneRunnerAPIVersion [0.9.61]
|
@@ -307,7 +307,7 @@ module FastlaneCore
|
|
307
307
|
logarchive_dst = File.join(logs_destination_dir, "system_logs-#{log_identity}.logarchive").shellescape
|
308
308
|
FileUtils.rm_rf(logarchive_dst)
|
309
309
|
FileUtils.mkdir_p(File.expand_path("..", logarchive_dst))
|
310
|
-
command = "xcrun simctl spawn #{device.udid} log collect --output #{logarchive_dst} 2>/dev/null"
|
310
|
+
command = "xcrun simctl spawn --standalone #{device.udid} log collect --output #{logarchive_dst} 2>/dev/null"
|
311
311
|
FastlaneCore::CommandExecutor.execute(command: command, print_all: false, print_command: true)
|
312
312
|
end
|
313
313
|
end
|
data/match/lib/match/importer.rb
CHANGED
@@ -17,7 +17,7 @@ module Match
|
|
17
17
|
UI.user_error!("Certificate does not exist at path: #{cert_path}") unless File.exist?(cert_path)
|
18
18
|
UI.user_error!("Private key does not exist at path: #{p12_path}") unless File.exist?(p12_path)
|
19
19
|
|
20
|
-
# Base64
|
20
|
+
# Base64 encode contents to find match from API to find a cert ID
|
21
21
|
cert_contents_base_64 = Base64.strict_encode64(File.open(cert_path).read)
|
22
22
|
|
23
23
|
# Storage
|
@@ -6,8 +6,13 @@ module Scan
|
|
6
6
|
class << self
|
7
7
|
# @param [String] The output of the errored build
|
8
8
|
# This method should raise an exception in any case, as the return code indicated a failed build
|
9
|
-
def handle_build_error(output)
|
10
|
-
# The order of the handling below is
|
9
|
+
def handle_build_error(output, log_path)
|
10
|
+
# The order of the handling below is important
|
11
|
+
|
12
|
+
instruction = 'See the log'
|
13
|
+
location = Scan.config[:suppress_xcode_output] ? "here: '#{log_path}'" : "above"
|
14
|
+
details = "#{instruction} #{location}."
|
15
|
+
|
11
16
|
case output
|
12
17
|
when /US\-ASCII/
|
13
18
|
print("Your shell environment is not correctly configured")
|
@@ -23,7 +28,7 @@ module Scan
|
|
23
28
|
print("For more information visit this stackoverflow answer:")
|
24
29
|
print("https://stackoverflow.com/a/17031697/445598")
|
25
30
|
when /Testing failed/
|
26
|
-
UI.build_failure!("Error building the application
|
31
|
+
UI.build_failure!("Error building the application. #{details}")
|
27
32
|
when /Executed/, /Failing tests:/
|
28
33
|
# this is *really* important:
|
29
34
|
# we don't want to raise an exception here
|
@@ -38,7 +43,7 @@ module Scan
|
|
38
43
|
# followed by a list of tests that failed.
|
39
44
|
return
|
40
45
|
end
|
41
|
-
UI.build_failure!("Error building/testing the application
|
46
|
+
UI.build_failure!("Error building/testing the application. #{details}")
|
42
47
|
end
|
43
48
|
|
44
49
|
private
|
data/scan/lib/scan/runner.rb
CHANGED
@@ -67,7 +67,7 @@ module Scan
|
|
67
67
|
error: proc do |error_output|
|
68
68
|
begin
|
69
69
|
exit_status = $?.exitstatus
|
70
|
-
ErrorHandler.handle_build_error(error_output)
|
70
|
+
ErrorHandler.handle_build_error(error_output, @test_command_generator.xcodebuild_log_path)
|
71
71
|
rescue => ex
|
72
72
|
SlackPoster.new.run({
|
73
73
|
build_errors: 1
|
@@ -619,8 +619,8 @@ module Spaceship
|
|
619
619
|
def with_retry(tries = 5, &_block)
|
620
620
|
return yield
|
621
621
|
rescue \
|
622
|
-
Faraday::
|
623
|
-
Faraday::
|
622
|
+
Faraday::ConnectionFailed,
|
623
|
+
Faraday::TimeoutError,
|
624
624
|
BadGatewayError,
|
625
625
|
AppleTimeoutError,
|
626
626
|
GatewayTimeoutError => ex
|
metadata
CHANGED
@@ -1,33 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.134.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Fumiya Nakamura
|
7
|
+
- Kohki Miki
|
9
8
|
- Felix Krause
|
10
|
-
-
|
9
|
+
- Fumiya Nakamura
|
10
|
+
- Danielle Tomlinson
|
11
|
+
- Stefan Natchev
|
11
12
|
- Helmut Januschka
|
13
|
+
- Maksym Grebenets
|
14
|
+
- Josh Holtz
|
15
|
+
- Manu Wallner
|
16
|
+
- Aaron Brager
|
17
|
+
- Matthew Ellis
|
18
|
+
- Jérôme Lacoste
|
19
|
+
- Iulian Onofrei
|
12
20
|
- Jorge Revuelta H
|
13
|
-
- Stefan Natchev
|
14
21
|
- Andrew McBurney
|
15
|
-
- Kohki Miki
|
16
|
-
- Matthew Ellis
|
17
|
-
- Luka Mirosevic
|
18
22
|
- Jimmy Dee
|
19
|
-
- Manu Wallner
|
20
23
|
- Olivier Halligon
|
21
24
|
- Joshua Liebowitz
|
25
|
+
- Luka Mirosevic
|
22
26
|
- Jan Piotrowski
|
23
|
-
- Josh Holtz
|
24
|
-
- Iulian Onofrei
|
25
|
-
- Jérôme Lacoste
|
26
|
-
- Aaron Brager
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2019-10-
|
30
|
+
date: 2019-10-14 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -340,47 +340,47 @@ dependencies:
|
|
340
340
|
- !ruby/object:Gem::Version
|
341
341
|
version: 1.0.0
|
342
342
|
- !ruby/object:Gem::Dependency
|
343
|
-
name: faraday
|
343
|
+
name: faraday-cookie_jar
|
344
344
|
requirement: !ruby/object:Gem::Requirement
|
345
345
|
requirements:
|
346
|
-
- - "
|
346
|
+
- - "~>"
|
347
347
|
- !ruby/object:Gem::Version
|
348
|
-
version: 0.
|
348
|
+
version: 0.0.6
|
349
349
|
type: :runtime
|
350
350
|
prerelease: false
|
351
351
|
version_requirements: !ruby/object:Gem::Requirement
|
352
352
|
requirements:
|
353
|
-
- - "
|
353
|
+
- - "~>"
|
354
354
|
- !ruby/object:Gem::Version
|
355
|
-
version: 0.
|
355
|
+
version: 0.0.6
|
356
356
|
- !ruby/object:Gem::Dependency
|
357
|
-
name:
|
357
|
+
name: faraday
|
358
358
|
requirement: !ruby/object:Gem::Requirement
|
359
359
|
requirements:
|
360
|
-
- - "
|
360
|
+
- - "~>"
|
361
361
|
- !ruby/object:Gem::Version
|
362
|
-
version: 0.
|
362
|
+
version: '0.17'
|
363
363
|
type: :runtime
|
364
364
|
prerelease: false
|
365
365
|
version_requirements: !ruby/object:Gem::Requirement
|
366
366
|
requirements:
|
367
|
-
- - "
|
367
|
+
- - "~>"
|
368
368
|
- !ruby/object:Gem::Version
|
369
|
-
version: 0.
|
369
|
+
version: '0.17'
|
370
370
|
- !ruby/object:Gem::Dependency
|
371
|
-
name:
|
371
|
+
name: faraday_middleware
|
372
372
|
requirement: !ruby/object:Gem::Requirement
|
373
373
|
requirements:
|
374
374
|
- - "~>"
|
375
375
|
- !ruby/object:Gem::Version
|
376
|
-
version: 0.
|
376
|
+
version: 0.13.1
|
377
377
|
type: :runtime
|
378
378
|
prerelease: false
|
379
379
|
version_requirements: !ruby/object:Gem::Requirement
|
380
380
|
requirements:
|
381
381
|
- - "~>"
|
382
382
|
- !ruby/object:Gem::Version
|
383
|
-
version: 0.
|
383
|
+
version: 0.13.1
|
384
384
|
- !ruby/object:Gem::Dependency
|
385
385
|
name: fastimage
|
386
386
|
requirement: !ruby/object:Gem::Requirement
|
@@ -986,6 +986,7 @@ files:
|
|
986
986
|
- fastlane/lib/fastlane.rb
|
987
987
|
- fastlane/lib/fastlane/action.rb
|
988
988
|
- fastlane/lib/fastlane/action_collector.rb
|
989
|
+
- fastlane/lib/fastlane/actions/.download_dsyms.rb.swp
|
989
990
|
- fastlane/lib/fastlane/actions/.hockey.rb.swp
|
990
991
|
- fastlane/lib/fastlane/actions/.slack.rb.swp
|
991
992
|
- fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp
|
@@ -1198,6 +1199,7 @@ files:
|
|
1198
1199
|
- fastlane/lib/fastlane/actions/update_fastlane.rb
|
1199
1200
|
- fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb
|
1200
1201
|
- fastlane/lib/fastlane/actions/update_info_plist.rb
|
1202
|
+
- fastlane/lib/fastlane/actions/update_keychain_access_groups.rb
|
1201
1203
|
- fastlane/lib/fastlane/actions/update_plist.rb
|
1202
1204
|
- fastlane/lib/fastlane/actions/update_project_code_signing.rb
|
1203
1205
|
- fastlane/lib/fastlane/actions/update_project_provisioning.rb
|
@@ -1423,7 +1425,6 @@ files:
|
|
1423
1425
|
- gym/lib/assets/GymfileTemplate.swift
|
1424
1426
|
- gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh
|
1425
1427
|
- gym/lib/gym.rb
|
1426
|
-
- gym/lib/gym/.runner.rb.swp
|
1427
1428
|
- gym/lib/gym/code_signing_mapping.rb
|
1428
1429
|
- gym/lib/gym/commands_generator.rb
|
1429
1430
|
- gym/lib/gym/detect_values.rb
|
data/gym/lib/gym/.runner.rb.swp
DELETED
Binary file
|