fastlane 2.145.0 → 2.146.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 +84 -84
- data/credentials_manager/lib/credentials_manager/appfile_config.rb +4 -0
- data/deliver/lib/deliver/app_screenshot.rb +1 -0
- data/deliver/lib/deliver/options.rb +4 -1
- data/deliver/lib/deliver/setup.rb +4 -4
- data/{frameit/lib/frameit/.screenshot.rb.swp → fastlane/lib/fastlane/actions/.update_code_signing_settings.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +7 -1
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +10 -4
- data/fastlane/lib/fastlane/actions/setup_jenkins.rb +11 -2
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +57 -49
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -1
- data/fastlane/lib/fastlane/helper/s3_client_helper.rb +13 -8
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +35 -2
- 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/configuration/config_item.rb +9 -0
- data/fastlane_core/lib/fastlane_core/device_manager.rb +2 -2
- data/frameit/lib/frameit/editor.rb +1 -1
- data/frameit/lib/frameit/screenshot.rb +4 -0
- data/match/lib/match/importer.rb +2 -0
- data/match/lib/match/storage/s3_storage.rb +10 -5
- data/pilot/lib/pilot/build_manager.rb +15 -4
- data/pilot/lib/pilot/options.rb +8 -0
- data/produce/lib/produce/developer_center.rb +11 -2
- data/produce/lib/produce/itunes_connect.rb +11 -3
- data/produce/lib/produce/options.rb +12 -0
- data/screengrab/lib/screengrab/runner.rb +1 -1
- data/snapshot/lib/snapshot/reports_generator.rb +4 -0
- data/spaceship/lib/spaceship/portal/app_service.rb +2 -2
- data/spaceship/lib/spaceship/tunes/application.rb +2 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
- data/supply/lib/supply/setup.rb +5 -3
- metadata +18 -20
- data/fastlane/lib/fastlane/actions/.push_to_git_remote.rb.swp +0 -0
- data/spaceship/lib/spaceship/portal/.portal_client.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: bba444e95d8f103a74817cfcae961e4c7a608912577d81053e496586eefb8b44
|
4
|
+
data.tar.gz: 811a64d5eeaad53b01adcbc9ba47640e52d895c738a438945d6274a75461c0aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 552371adbdda5455d913652ae431137aaa025b941084ccbf934f08740e5955f24e0d7d857e25495f738b697f8b4f1e17f5f8ac34e5e1e257426edd9fb3a683b8
|
7
|
+
data.tar.gz: bc83dfae6426fb0644afdaa547bed294adeb8092559da66eae5171b5ab96fdd53a90f4e955e5f1dd4b993dd2db3aef1ce69f00ab9d38db23c5017a01518be3d2
|
data/README.md
CHANGED
@@ -34,23 +34,11 @@ 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/
|
40
|
-
</a>
|
41
|
-
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
42
|
-
</td>
|
43
|
-
<td id='jan-piotrowski'>
|
44
|
-
<a href='https://github.com/janpio'>
|
45
|
-
<img src='https://github.com/janpio.png?size=140'>
|
46
|
-
</a>
|
47
|
-
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
48
|
-
</td>
|
49
|
-
<td id='felix-krause'>
|
50
|
-
<a href='https://github.com/KrauseFx'>
|
51
|
-
<img src='https://github.com/KrauseFx.png?size=140'>
|
37
|
+
<td id='jorge-revuelta-h'>
|
38
|
+
<a href='https://github.com/minuscorp'>
|
39
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
52
40
|
</a>
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
41
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
54
42
|
</td>
|
55
43
|
<td id='max-ott'>
|
56
44
|
<a href='https://github.com/max-ott'>
|
@@ -58,25 +46,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
58
46
|
</a>
|
59
47
|
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
60
48
|
</td>
|
61
|
-
<td id='
|
62
|
-
<a href='https://github.com/
|
63
|
-
<img src='https://github.com/
|
64
|
-
</a>
|
65
|
-
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
66
|
-
</td>
|
67
|
-
</tr>
|
68
|
-
<tr>
|
69
|
-
<td id='fumiya-nakamura'>
|
70
|
-
<a href='https://github.com/nafu'>
|
71
|
-
<img src='https://github.com/nafu.png?size=140'>
|
49
|
+
<td id='aaron-brager'>
|
50
|
+
<a href='https://github.com/getaaron'>
|
51
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
72
52
|
</a>
|
73
|
-
<h4 align='center'><a href='https://twitter.com/
|
53
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
74
54
|
</td>
|
75
|
-
<td id='
|
76
|
-
<a href='https://github.com/
|
77
|
-
<img src='https://github.com/
|
55
|
+
<td id='helmut-januschka'>
|
56
|
+
<a href='https://github.com/hjanuschka'>
|
57
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
78
58
|
</a>
|
79
|
-
<h4 align='center'>
|
59
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
80
60
|
</td>
|
81
61
|
<td id='stefan-natchev'>
|
82
62
|
<a href='https://github.com/snatchev'>
|
@@ -84,17 +64,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
84
64
|
</a>
|
85
65
|
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
86
66
|
</td>
|
87
|
-
|
88
|
-
<
|
89
|
-
<
|
67
|
+
</tr>
|
68
|
+
<tr>
|
69
|
+
<td id='luka-mirosevic'>
|
70
|
+
<a href='https://github.com/lmirosevic'>
|
71
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
90
72
|
</a>
|
91
|
-
<h4 align='center'><a href='https://twitter.com/
|
73
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
92
74
|
</td>
|
93
|
-
<td id='
|
94
|
-
<a href='https://github.com/
|
95
|
-
<img src='https://github.com/
|
75
|
+
<td id='andrew-mcburney'>
|
76
|
+
<a href='https://github.com/armcburney'>
|
77
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
96
78
|
</a>
|
97
|
-
<h4 align='center'><a href='https://twitter.com/
|
79
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
80
|
+
</td>
|
81
|
+
<td id='danielle-tomlinson'>
|
82
|
+
<a href='https://github.com/endocrimes'>
|
83
|
+
<img src='https://github.com/endocrimes.png?size=140'>
|
84
|
+
</a>
|
85
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
86
|
+
</td>
|
87
|
+
<td id='jérôme-lacoste'>
|
88
|
+
<a href='https://github.com/lacostej'>
|
89
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
90
|
+
</a>
|
91
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
92
|
+
</td>
|
93
|
+
<td id='maksym-grebenets'>
|
94
|
+
<a href='https://github.com/mgrebenets'>
|
95
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
96
|
+
</a>
|
97
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
98
98
|
</td>
|
99
99
|
</tr>
|
100
100
|
<tr>
|
@@ -104,75 +104,75 @@ 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/
|
110
|
-
</a>
|
111
|
-
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
112
|
-
</td>
|
113
|
-
<td id='helmut-januschka'>
|
114
|
-
<a href='https://github.com/hjanuschka'>
|
115
|
-
<img src='https://github.com/hjanuschka.png?size=140'>
|
107
|
+
<td id='jan-piotrowski'>
|
108
|
+
<a href='https://github.com/janpio'>
|
109
|
+
<img src='https://github.com/janpio.png?size=140'>
|
116
110
|
</a>
|
117
|
-
<h4 align='center'><a href='https://twitter.com/
|
111
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
118
112
|
</td>
|
119
|
-
<td id='
|
120
|
-
<a href='https://github.com/
|
121
|
-
<img src='https://github.com/
|
113
|
+
<td id='olivier-halligon'>
|
114
|
+
<a href='https://github.com/AliSoftware'>
|
115
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
122
116
|
</a>
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
117
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
124
118
|
</td>
|
125
|
-
<td id='
|
126
|
-
<a href='https://github.com/
|
127
|
-
<img src='https://github.com/
|
119
|
+
<td id='felix-krause'>
|
120
|
+
<a href='https://github.com/KrauseFx'>
|
121
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
128
122
|
</a>
|
129
|
-
<h4 align='center'><a href='https://twitter.com/
|
123
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
130
124
|
</td>
|
131
|
-
</tr>
|
132
|
-
<tr>
|
133
125
|
<td id='josh-holtz'>
|
134
126
|
<a href='https://github.com/joshdholtz'>
|
135
127
|
<img src='https://github.com/joshdholtz.png?size=140'>
|
136
128
|
</a>
|
137
129
|
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
138
130
|
</td>
|
139
|
-
|
140
|
-
<
|
141
|
-
<
|
131
|
+
</tr>
|
132
|
+
<tr>
|
133
|
+
<td id='daniel-jankowski'>
|
134
|
+
<a href='https://github.com/mollyIV'>
|
135
|
+
<img src='https://github.com/mollyIV.png?size=140'>
|
142
136
|
</a>
|
143
|
-
<h4 align='center'><a href='https://twitter.com/
|
137
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
144
138
|
</td>
|
145
|
-
<td id='
|
146
|
-
<a href='https://github.com/
|
147
|
-
<img src='https://github.com/
|
139
|
+
<td id='fumiya-nakamura'>
|
140
|
+
<a href='https://github.com/nafu'>
|
141
|
+
<img src='https://github.com/nafu.png?size=140'>
|
148
142
|
</a>
|
149
|
-
<h4 align='center'><a href='https://twitter.com/
|
143
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
150
144
|
</td>
|
151
|
-
<td id='
|
152
|
-
<a href='https://github.com/
|
153
|
-
<img src='https://github.com/
|
145
|
+
<td id='iulian-onofrei'>
|
146
|
+
<a href='https://github.com/revolter'>
|
147
|
+
<img src='https://github.com/revolter.png?size=140'>
|
154
148
|
</a>
|
155
|
-
<h4 align='center'><a href='https://twitter.com/
|
149
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
156
150
|
</td>
|
157
|
-
<td id='
|
158
|
-
<a href='https://github.com/
|
159
|
-
<img src='https://github.com/
|
151
|
+
<td id='matthew-ellis'>
|
152
|
+
<a href='https://github.com/matthewellis'>
|
153
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
160
154
|
</a>
|
161
|
-
<h4 align='center'><a href='https://twitter.com/
|
155
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
156
|
+
</td>
|
157
|
+
<td id='manu-wallner'>
|
158
|
+
<a href='https://github.com/milch'>
|
159
|
+
<img src='https://github.com/milch.png?size=140'>
|
160
|
+
</a>
|
161
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
162
162
|
</td>
|
163
163
|
</tr>
|
164
164
|
<tr>
|
165
|
-
<td id='
|
166
|
-
<a href='https://github.com/
|
167
|
-
<img src='https://github.com/
|
165
|
+
<td id='jimmy-dee'>
|
166
|
+
<a href='https://github.com/jdee'>
|
167
|
+
<img src='https://github.com/jdee.png?size=140'>
|
168
168
|
</a>
|
169
|
-
<h4 align='center'
|
169
|
+
<h4 align='center'>Jimmy Dee</h4>
|
170
170
|
</td>
|
171
|
-
<td id='
|
172
|
-
<a href='https://github.com/
|
173
|
-
<img src='https://github.com/
|
171
|
+
<td id='kohki-miki'>
|
172
|
+
<a href='https://github.com/giginet'>
|
173
|
+
<img src='https://github.com/giginet.png?size=140'>
|
174
174
|
</a>
|
175
|
-
<h4 align='center'><a href='https://twitter.com/
|
175
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
176
176
|
</td>
|
177
177
|
</table>
|
178
178
|
|
@@ -119,6 +119,10 @@ module CredentialsManager
|
|
119
119
|
setter(:itc_team_name, *args, &block)
|
120
120
|
end
|
121
121
|
|
122
|
+
def itc_provider(*args, &block)
|
123
|
+
setter(:itc_provider, *args, &block)
|
124
|
+
end
|
125
|
+
|
122
126
|
# Android
|
123
127
|
def json_key_file(*args, &block)
|
124
128
|
setter(:json_key_file, *args, &block)
|
@@ -316,6 +316,7 @@ module Deliver
|
|
316
316
|
def self.resolve_ipadpro_conflict_if_needed(screen_size, filename)
|
317
317
|
is_3rd_gen = [
|
318
318
|
"iPad Pro (12.9-inch) (3rd generation)", # default simulator name has this
|
319
|
+
"iPad Pro (12.9-inch) (4th generation)", # default simulator name has this
|
319
320
|
"ipadPro129" # downloaded screenshots name has this
|
320
321
|
].any? { |key| filename.include?(key) }
|
321
322
|
if is_3rd_gen
|
@@ -259,7 +259,10 @@ module Deliver
|
|
259
259
|
FastlaneCore::ConfigItem.new(key: :itc_provider,
|
260
260
|
env_name: "DELIVER_ITC_PROVIDER",
|
261
261
|
description: "The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column",
|
262
|
-
optional: true
|
262
|
+
optional: true,
|
263
|
+
code_gen_sensitive: true,
|
264
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:itc_provider),
|
265
|
+
default_value_dynamic: true),
|
263
266
|
# rubocop:enable Metrics/LineLength
|
264
267
|
|
265
268
|
# precheck
|
@@ -67,7 +67,7 @@ module Deliver
|
|
67
67
|
else
|
68
68
|
content = app_details.send(key)[language].to_s
|
69
69
|
end
|
70
|
-
content
|
70
|
+
content += "\n"
|
71
71
|
resulting_path = File.join(path, language, "#{key}.txt")
|
72
72
|
FileUtils.mkdir_p(File.expand_path('..', resulting_path))
|
73
73
|
File.write(resulting_path, content)
|
@@ -82,7 +82,7 @@ module Deliver
|
|
82
82
|
else
|
83
83
|
content = app_details.send(key).to_s
|
84
84
|
end
|
85
|
-
content
|
85
|
+
content += "\n"
|
86
86
|
resulting_path = File.join(path, "#{key}.txt")
|
87
87
|
File.write(resulting_path, content)
|
88
88
|
UI.message("Writing to '#{resulting_path}'")
|
@@ -91,7 +91,7 @@ module Deliver
|
|
91
91
|
# Trade Representative Contact Information
|
92
92
|
UploadMetadata::TRADE_REPRESENTATIVE_CONTACT_INFORMATION_VALUES.each do |key, option_name|
|
93
93
|
content = v.send(key).to_s
|
94
|
-
content
|
94
|
+
content += "\n"
|
95
95
|
base_dir = File.join(path, UploadMetadata::TRADE_REPRESENTATIVE_CONTACT_INFORMATION_DIR)
|
96
96
|
FileUtils.mkdir_p(base_dir)
|
97
97
|
resulting_path = File.join(base_dir, "#{option_name}.txt")
|
@@ -102,7 +102,7 @@ module Deliver
|
|
102
102
|
# Review information
|
103
103
|
UploadMetadata::REVIEW_INFORMATION_VALUES.each do |key, option_name|
|
104
104
|
content = v.send(key).to_s
|
105
|
-
content
|
105
|
+
content += "\n"
|
106
106
|
base_dir = File.join(path, UploadMetadata::REVIEW_INFORMATION_DIR)
|
107
107
|
FileUtils.mkdir_p(base_dir)
|
108
108
|
resulting_path = File.join(base_dir, "#{option_name}.txt")
|
Binary file
|
@@ -15,6 +15,7 @@ module Fastlane
|
|
15
15
|
'base' => params[:base]
|
16
16
|
}
|
17
17
|
payload['body'] = params[:body] if params[:body]
|
18
|
+
payload['draft'] = params[:draft] if params[:draft]
|
18
19
|
|
19
20
|
GithubApiAction.run(
|
20
21
|
server_url: params[:api_url],
|
@@ -176,6 +177,11 @@ module Fastlane
|
|
176
177
|
description: "The contents of the pull request",
|
177
178
|
is_string: true,
|
178
179
|
optional: true),
|
180
|
+
FastlaneCore::ConfigItem.new(key: :draft,
|
181
|
+
env_name: "GITHUB_PULL_REQUEST_DRAFT",
|
182
|
+
description: "Indicates whether the pull request is a draft",
|
183
|
+
type: Boolean,
|
184
|
+
optional: true),
|
179
185
|
FastlaneCore::ConfigItem.new(key: :labels,
|
180
186
|
env_name: "GITHUB_PULL_REQUEST_LABELS",
|
181
187
|
description: "The labels for the pull request",
|
@@ -226,7 +232,7 @@ module Fastlane
|
|
226
232
|
end
|
227
233
|
|
228
234
|
def self.author
|
229
|
-
["seei", "tommeier", "marumemomo", "elneruda"]
|
235
|
+
["seei", "tommeier", "marumemomo", "elneruda", "kagemiku"]
|
230
236
|
end
|
231
237
|
|
232
238
|
def self.is_supported?(platform)
|
@@ -190,10 +190,16 @@ The `Snapfile` can contain all the options that are also available on `fastlane
|
|
190
190
|
scheme("UITests")
|
191
191
|
|
192
192
|
devices([
|
193
|
-
"
|
194
|
-
"
|
195
|
-
"
|
196
|
-
"
|
193
|
+
"iPad (7th generation)",
|
194
|
+
"iPad Air (3rd generation)",
|
195
|
+
"iPad Pro (11-inch)",
|
196
|
+
"iPad Pro (12.9-inch) (3rd generation)",
|
197
|
+
"iPad Pro (9.7-inch)",
|
198
|
+
"iPhone 11",
|
199
|
+
"iPhone 11 Pro",
|
200
|
+
"iPhone 11 Pro Max",
|
201
|
+
"iPhone 8",
|
202
|
+
"iPhone 8 Plus"
|
197
203
|
])
|
198
204
|
|
199
205
|
languages([
|
@@ -14,7 +14,10 @@ module Fastlane
|
|
14
14
|
"SCAN_DERIVED_DATA_PATH",
|
15
15
|
"SCAN_OUTPUT_DIRECTORY",
|
16
16
|
"SCAN_RESULT_BUNDLE",
|
17
|
-
"XCODE_DERIVED_DATA_PATH"
|
17
|
+
"XCODE_DERIVED_DATA_PATH",
|
18
|
+
"MATCH_KEYCHAIN_NAME",
|
19
|
+
"MATCH_KEYCHAIN_PASSWORD",
|
20
|
+
"MATCH_READONLY"
|
18
21
|
].freeze
|
19
22
|
|
20
23
|
def self.run(params)
|
@@ -40,6 +43,9 @@ module Fastlane
|
|
40
43
|
add_to_search_list: params[:add_keychain_to_search_list],
|
41
44
|
set_default: params[:set_default_keychain]
|
42
45
|
)
|
46
|
+
ENV['MATCH_KEYCHAIN_NAME'] ||= keychain_path
|
47
|
+
ENV['MATCH_KEYCHAIN_PASSWORD'] ||= params[:keychain_password]
|
48
|
+
ENV["MATCH_READONLY"] ||= true.to_s
|
43
49
|
end
|
44
50
|
|
45
51
|
# Code signing identity
|
@@ -90,6 +96,7 @@ module Fastlane
|
|
90
96
|
def self.details
|
91
97
|
list = <<-LIST.markdown_list(true)
|
92
98
|
Adds and unlocks keychains from Jenkins 'Keychains and Provisioning Profiles Plugin'
|
99
|
+
Sets unlocked keychain to be used by Match
|
93
100
|
Sets code signing identity from Jenkins 'Keychains and Provisioning Profiles Plugin'
|
94
101
|
Sets output directory to './output' (gym, scan and backup_xcarchive)
|
95
102
|
Sets derived data path to './derivedData' (xcodebuild, gym, scan and clear_derived_data, carthage)
|
@@ -99,7 +106,9 @@ module Fastlane
|
|
99
106
|
[
|
100
107
|
list,
|
101
108
|
"This action helps with Jenkins integration. Creates own derived data for each job. All build results like IPA files and archives will be stored in the `./output` directory.",
|
102
|
-
"The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used.
|
109
|
+
"The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used.",
|
110
|
+
"[Match](https://docs.fastlane.tools/actions/match/) will be also set up to use the unlocked keychain and set in read-only mode, if its environment variables were not yet defined.",
|
111
|
+
"By default this action will only work when _fastlane_ is executed on a CI system."
|
103
112
|
].join("\n")
|
104
113
|
end
|
105
114
|
|
@@ -16,72 +16,62 @@ module Fastlane
|
|
16
16
|
return false
|
17
17
|
end
|
18
18
|
|
19
|
-
target_dictionary = project.targets.map { |f| { name: f.name, uuid: f.uuid, build_configuration_list: f.build_configuration_list } }
|
20
|
-
target_attributes = project.root_object.attributes["TargetAttributes"]
|
21
19
|
changed_targets = []
|
20
|
+
changed_build_configurations = []
|
22
21
|
|
23
|
-
|
24
|
-
target_dictionary.each do |props|
|
25
|
-
unless target_attributes.key?(props[:uuid])
|
26
|
-
target_attributes[props[:uuid]] = {}
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
target_attributes.each do |target, sett|
|
31
|
-
found_target = target_dictionary.detect { |h| h[:uuid] == target }
|
22
|
+
project.targets.each do |target|
|
32
23
|
if params[:targets]
|
33
|
-
|
34
|
-
|
35
|
-
UI.important("Skipping #{found_target[:name]} not selected (#{params[:targets].join(',')})")
|
24
|
+
unless params[:targets].include?(target.name)
|
25
|
+
UI.important("Skipping #{target.name} not selected (#{params[:targets].join(',')})")
|
36
26
|
next
|
37
27
|
end
|
38
28
|
end
|
39
29
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
if params[:team_id]
|
46
|
-
sett["DevelopmentTeam"] = params[:team_id]
|
47
|
-
build_configuration_list.set_setting("DEVELOPMENT_TEAM", params[:team_id])
|
48
|
-
UI.important("Set Team id to: #{params[:team_id]} for target: #{found_target[:name]}")
|
49
|
-
end
|
50
|
-
if params[:code_sign_identity]
|
51
|
-
build_configuration_list.set_setting("CODE_SIGN_IDENTITY", params[:code_sign_identity])
|
52
|
-
|
53
|
-
# We also need to update the value if it was overridden for a specific SDK
|
54
|
-
build_configuration_list.build_configurations.each do |build_configuration|
|
55
|
-
codesign_build_settings_keys = build_configuration.build_settings.keys.select { |key| key.to_s.match(/CODE_SIGN_IDENTITY.*/) }
|
56
|
-
codesign_build_settings_keys.each do |setting|
|
57
|
-
build_configuration_list.set_setting(setting, params[:code_sign_identity])
|
30
|
+
target.build_configurations.each do |config|
|
31
|
+
if params[:build_configurations]
|
32
|
+
unless params[:build_configurations].include?(config.name)
|
33
|
+
UI.important("Skipping #{config.name} not selected (#{params[:build_configurations].join(',')})")
|
34
|
+
next
|
58
35
|
end
|
59
36
|
end
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
37
|
+
|
38
|
+
style_value = params[:use_automatic_signing] ? 'Automatic' : 'Manual'
|
39
|
+
set_build_setting(config, "CODE_SIGN_STYLE", style_value)
|
40
|
+
|
41
|
+
if params[:team_id]
|
42
|
+
set_build_setting(config, "DEVELOPMENT_TEAM", params[:team_id])
|
43
|
+
UI.important("Set Team id to: #{params[:team_id]} for target: #{target.name} for build configuration: #{config.name}")
|
44
|
+
end
|
45
|
+
if params[:code_sign_identity]
|
46
|
+
set_build_setting(config, "CODE_SIGN_IDENTITY", params[:code_sign_identity])
|
47
|
+
UI.important("Set Code Sign identity to: #{params[:code_sign_identity]} for target: #{target.name} for build configuration: #{config.name}")
|
48
|
+
end
|
49
|
+
if params[:profile_name]
|
50
|
+
set_build_setting(config, "PROVISIONING_PROFILE_SPECIFIER", params[:profile_name])
|
51
|
+
UI.important("Set Provisioning Profile name to: #{params[:profile_name]} for target: #{target.name} for build configuration: #{config.name}")
|
52
|
+
end
|
53
|
+
# Since Xcode 8, this is no longer needed, you simply use PROVISIONING_PROFILE_SPECIFIER
|
54
|
+
if params[:profile_uuid]
|
55
|
+
set_build_setting(config, "PROVISIONING_PROFILE", params[:profile_uuid])
|
56
|
+
UI.important("Set Provisioning Profile UUID to: #{params[:profile_uuid]} for target: #{target.name} for build configuration: #{config.name}")
|
57
|
+
end
|
58
|
+
if params[:bundle_identifier]
|
59
|
+
set_build_setting(config, "PRODUCT_BUNDLE_IDENTIFIER", params[:bundle_identifier])
|
60
|
+
UI.important("Set Bundle identifier to: #{params[:bundle_identifier]} for target: #{target.name} for build configuration: #{config.name}")
|
61
|
+
end
|
62
|
+
|
63
|
+
changed_build_configurations << config.name
|
74
64
|
end
|
75
65
|
|
76
|
-
changed_targets <<
|
66
|
+
changed_targets << target.name
|
77
67
|
end
|
78
68
|
project.save
|
79
69
|
|
80
70
|
if changed_targets.empty?
|
81
71
|
UI.important("None of the specified targets has been modified")
|
82
72
|
UI.important("available targets:")
|
83
|
-
|
84
|
-
UI.important("\t* #{target
|
73
|
+
project.targets.each do |target|
|
74
|
+
UI.important("\t* #{target.name}")
|
85
75
|
end
|
86
76
|
else
|
87
77
|
UI.success("Successfully updated project settings to use Code Sign Style = '#{params[:use_automatic_signing] ? 'Automatic' : 'Manual'}'")
|
@@ -89,11 +79,23 @@ module Fastlane
|
|
89
79
|
changed_targets.each do |target|
|
90
80
|
UI.success("\t * #{target}")
|
91
81
|
end
|
82
|
+
|
83
|
+
UI.success("Modified Build Configurations:")
|
84
|
+
changed_build_configurations.each do |name|
|
85
|
+
UI.success("\t * #{name}")
|
86
|
+
end
|
92
87
|
end
|
93
88
|
|
94
89
|
params[:use_automatic_signing]
|
95
90
|
end
|
96
91
|
|
92
|
+
def self.set_build_setting(configuration, name, value)
|
93
|
+
codesign_build_settings_keys = configuration.build_settings.keys.select { |key| key.to_s.match(/#{name}.*/) }
|
94
|
+
codesign_build_settings_keys.each do |key|
|
95
|
+
configuration.build_settings[key] = value
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
97
99
|
def self.description
|
98
100
|
"Configures Xcode's Codesigning options"
|
99
101
|
end
|
@@ -129,6 +131,12 @@ module Fastlane
|
|
129
131
|
type: Array,
|
130
132
|
description: "Specify targets you want to toggle the signing mech. (default to all targets)",
|
131
133
|
is_string: false),
|
134
|
+
FastlaneCore::ConfigItem.new(key: :build_configurations,
|
135
|
+
env_name: "FL_PROJECT_SIGNING_BUILD_CONFIGURATIONS",
|
136
|
+
optional: true,
|
137
|
+
type: Array,
|
138
|
+
description: "Specify build_configurations you want to toggle the signing mech. (default to all targets)",
|
139
|
+
is_string: false),
|
132
140
|
FastlaneCore::ConfigItem.new(key: :code_sign_identity,
|
133
141
|
env_name: "FL_CODE_SIGN_IDENTITY",
|
134
142
|
description: "Code signing identity type (iPhone Developer, iPhone Distribution)",
|